From 74f322b7c27104338e881555573710c7c632edbb Mon Sep 17 00:00:00 2001 From: zhenhui <1276357500@qq.com> Date: Mon, 9 Mar 2026 17:35:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env-example | 7 + .gitattributes | 4 + .gitignore | 47 + CHANGELOG.md | 986 ++++++++ LICENSE | 201 ++ README.md | 148 ++ app/.htaccess | 1 + app/AppService.php | 22 + app/BaseController.php | 93 + app/ExceptionHandle.php | 119 + app/Request.php | 26 + app/admin/common.php | 34 + app/admin/controller/Ajax.php | 217 ++ app/admin/controller/Dashboard.php | 20 + app/admin/controller/Index.php | 133 ++ app/admin/controller/Module.php | 137 ++ app/admin/controller/auth/Admin.php | 261 +++ app/admin/controller/auth/AdminLog.php | 54 + app/admin/controller/auth/Group.php | 379 +++ app/admin/controller/auth/Rule.php | 307 +++ app/admin/controller/crud/Crud.php | 1002 ++++++++ app/admin/controller/crud/Log.php | 37 + app/admin/controller/routine/AdminInfo.php | 90 + app/admin/controller/routine/Attachment.php | 59 + app/admin/controller/routine/Config.php | 246 ++ app/admin/controller/security/DataRecycle.php | 150 ++ .../controller/security/DataRecycleLog.php | 106 + .../controller/security/SensitiveData.php | 204 ++ .../controller/security/SensitiveDataLog.php | 117 + app/admin/controller/user/Group.php | 163 ++ app/admin/controller/user/MoneyLog.php | 50 + app/admin/controller/user/Rule.php | 260 +++ app/admin/controller/user/ScoreLog.php | 50 + app/admin/controller/user/User.php | 156 ++ app/admin/event.php | 16 + app/admin/lang/en.php | 38 + app/admin/lang/en/ajax.php | 9 + app/admin/lang/en/auth/admin.php | 5 + app/admin/lang/en/auth/group.php | 6 + app/admin/lang/en/auth/menu.php | 6 + app/admin/lang/en/crud/crud.php | 7 + app/admin/lang/en/dashboard.php | 4 + app/admin/lang/en/index.php | 9 + app/admin/lang/en/routine/admininfo.php | 6 + app/admin/lang/en/routine/attachment.php | 5 + app/admin/lang/en/routine/config.php | 23 + app/admin/lang/en/security/datarecycle.php | 7 + app/admin/lang/en/security/datarecyclelog.php | 4 + app/admin/lang/en/security/sensitivedata.php | 8 + .../lang/en/security/sensitivedatalog.php | 4 + app/admin/lang/en/user/moneylog.php | 8 + app/admin/lang/en/user/scorelog.php | 8 + app/admin/lang/zh-cn.php | 62 + app/admin/lang/zh-cn/ajax.php | 12 + app/admin/lang/zh-cn/auth/admin.php | 6 + app/admin/lang/zh-cn/auth/group.php | 13 + app/admin/lang/zh-cn/auth/rule.php | 6 + app/admin/lang/zh-cn/crud/crud.php | 11 + app/admin/lang/zh-cn/dashboard.php | 4 + app/admin/lang/zh-cn/index.php | 9 + app/admin/lang/zh-cn/module.php | 29 + app/admin/lang/zh-cn/routine/admininfo.php | 6 + app/admin/lang/zh-cn/routine/attachment.php | 5 + app/admin/lang/zh-cn/routine/config.php | 25 + app/admin/lang/zh-cn/security/datarecycle.php | 8 + .../lang/zh-cn/security/datarecyclelog.php | 4 + .../lang/zh-cn/security/sensitivedata.php | 9 + .../lang/zh-cn/security/sensitivedatalog.php | 4 + app/admin/lang/zh-cn/user/moneylog.php | 8 + app/admin/lang/zh-cn/user/scorelog.php | 8 + app/admin/library/Auth.php | 525 +++++ app/admin/library/crud/Helper.php | 1299 +++++++++++ app/admin/library/crud/stubs/html/form.stub | 63 + app/admin/library/crud/stubs/html/index.stub | 69 + .../stubs/mixins/controller/controller.stub | 24 + .../crud/stubs/mixins/controller/index.stub | 32 + .../stubs/mixins/controller/initialize.stub | 6 + .../crud/stubs/mixins/model/afterInsert.stub | 12 + .../crud/stubs/mixins/model/beforeInsert.stub | 5 + .../crud/stubs/mixins/model/belongsTo.stub | 5 + .../stubs/mixins/model/getters/cityNames.stub | 7 + .../stubs/mixins/model/getters/float.stub | 5 + .../mixins/model/getters/htmlDecode.stub | 5 + .../mixins/model/getters/jsonDecode.stub | 5 + .../model/getters/remoteSelectLabels.stub | 7 + .../stubs/mixins/model/getters/string.stub | 5 + .../mixins/model/getters/stringToArray.stub | 9 + .../mixins/beforeInsertWithSnowflake.stub | 2 + .../crud/stubs/mixins/model/model.stub | 18 + .../mixins/model/setters/arrayToString.stub | 5 + .../crud/stubs/mixins/model/setters/time.stub | 5 + .../crud/stubs/mixins/validate/validate.stub | 31 + app/admin/library/module/Manage.php | 971 ++++++++ app/admin/library/module/Server.php | 590 +++++ app/admin/library/stubs/backendEntrance.stub | 24 + app/admin/library/traits/Backend.php | 301 +++ app/admin/middleware.php | 6 + app/admin/model/Admin.php | 72 + app/admin/model/AdminGroup.php | 13 + app/admin/model/AdminLog.php | 160 ++ app/admin/model/AdminRule.php | 21 + app/admin/model/Config.php | 133 ++ app/admin/model/CrudLog.php | 24 + app/admin/model/DataRecycle.php | 15 + app/admin/model/DataRecycleLog.php | 27 + app/admin/model/SensitiveData.php | 19 + app/admin/model/SensitiveDataLog.php | 27 + app/admin/model/User.php | 52 + app/admin/model/UserGroup.php | 13 + app/admin/model/UserMoneyLog.php | 80 + app/admin/model/UserRule.php | 26 + app/admin/model/UserScoreLog.php | 50 + app/admin/validate/Admin.php | 73 + app/admin/validate/AdminGroup.php | 46 + app/admin/validate/AdminRule.php | 46 + app/admin/validate/Config.php | 41 + app/admin/validate/DataRecycle.php | 48 + app/admin/validate/SensitiveData.php | 50 + app/admin/validate/UserMoneyLog.php | 46 + app/admin/validate/UserScoreLog.php | 46 + app/api/common.php | 38 + app/api/controller/Account.php | 259 ++ app/api/controller/Ajax.php | 59 + app/api/controller/Common.php | 92 + app/api/controller/Ems.php | 108 + app/api/controller/Index.php | 84 + app/api/controller/Install.php | 671 ++++++ app/api/controller/User.php | 100 + app/api/lang/en.php | 15 + app/api/lang/en/account.php | 16 + app/api/lang/en/ems.php | 16 + app/api/lang/en/install.php | 44 + app/api/lang/en/user.php | 13 + app/api/lang/zh-cn.php | 47 + app/api/lang/zh-cn/account.php | 22 + app/api/lang/zh-cn/ems.php | 18 + app/api/lang/zh-cn/install.php | 44 + app/api/lang/zh-cn/user.php | 14 + app/api/middleware.php | 5 + app/api/validate/Account.php | 47 + app/api/validate/User.php | 67 + app/common.php | 508 ++++ app/common/controller/Api.php | 117 + app/common/controller/Backend.php | 383 +++ app/common/controller/Frontend.php | 73 + app/common/event/Security.php | 139 ++ app/common/facade/Token.php | 24 + app/common/library/Auth.php | 562 +++++ app/common/library/Email.php | 71 + app/common/library/Menu.php | 156 ++ app/common/library/SnowFlake.php | 87 + app/common/library/Token.php | 232 ++ app/common/library/Upload.php | 341 +++ app/common/library/token/Driver.php | 92 + .../token/TokenExpirationException.php | 16 + app/common/library/token/driver/Mysql.php | 109 + app/common/library/token/driver/Redis.php | 146 ++ app/common/library/upload/Driver.php | 47 + app/common/library/upload/driver/Local.php | 148 ++ app/common/middleware/AdminLog.php | 24 + app/common/middleware/AllowCrossDomain.php | 66 + app/common/model/Attachment.php | 115 + app/common/model/Config.php | 83 + app/common/model/User.php | 51 + app/common/model/UserMoneyLog.php | 41 + app/common/model/UserScoreLog.php | 11 + app/common/service/moduleService.php | 34 + app/event.php | 17 + app/middleware.php | 11 + app/provider.php | 10 + app/service.php | 11 + composer.json | 57 + config/app.php | 32 + config/buildadmin.php | 86 + config/cache.php | 29 + config/console.php | 8 + config/cookie.php | 20 + config/database.php | 63 + config/filesystem.php | 24 + config/lang.php | 27 + config/log.php | 45 + config/middleware.php | 8 + config/route.php | 45 + config/session.php | 19 + config/terminal.php | 169 ++ config/throttle.php | 42 + config/trace.php | 10 + config/upload.php | 21 + config/view.php | 25 + .../migrations/20230620180908_install.php | 575 +++++ .../20230620180916_install_data.php | 1418 +++++++++++ .../migrations/20230622221507_version200.php | 179 ++ .../migrations/20230719211338_version201.php | 16 + .../migrations/20230905060702_version202.php | 68 + .../migrations/20231112093414_version205.php | 24 + .../migrations/20231229043002_version206.php | 60 + .../migrations/20250412134127_version222.php | 80 + extend/ba/Auth.php | 241 ++ extend/ba/Captcha.php | 441 ++++ extend/ba/ClickCaptcha.php | 335 +++ extend/ba/Date.php | 195 ++ extend/ba/Depends.php | 212 ++ extend/ba/Exception.php | 17 + extend/ba/Filesystem.php | 248 ++ extend/ba/Random.php | 54 + extend/ba/TableManager.php | 186 ++ extend/ba/Terminal.php | 510 ++++ extend/ba/Tree.php | 145 ++ extend/ba/Version.php | 133 ++ public/favicon.ico | Bin 0 -> 4286 bytes public/index.php | 47 + public/install/assets/index.css | 1 + public/install/assets/index.js | 73 + public/install/assets/lang.svg | 1 + public/install/assets/loading.gif | Bin 0 -> 6494 bytes public/install/assets/logo.svg | 102 + public/install/favicon.ico | Bin 0 -> 4286 bytes public/install/index.html | 14 + public/npm-install-test/package.json | 12 + public/robots.txt | 2 + public/router.php | 21 + public/static/fonts/ttfs/1.ttf | Bin 0 -> 57520 bytes public/static/fonts/ttfs/2.ttf | Bin 0 -> 28328 bytes public/static/fonts/ttfs/3.ttf | Bin 0 -> 39308 bytes public/static/fonts/ttfs/4.ttf | Bin 0 -> 34852 bytes public/static/fonts/ttfs/5.ttf | Bin 0 -> 32664 bytes public/static/fonts/ttfs/6.ttf | Bin 0 -> 28036 bytes public/static/fonts/zhttfs/1.ttf | Bin 0 -> 2183628 bytes .../fonts/zhttfs/SourceHanSansCN-Normal.ttf | Bin 0 -> 8173832 bytes public/static/images/avatar.png | Bin 0 -> 424 bytes public/static/images/captcha/click/bgs/1.png | Bin 0 -> 56768 bytes public/static/images/captcha/click/bgs/2.png | Bin 0 -> 70018 bytes public/static/images/captcha/click/bgs/3.png | Bin 0 -> 73513 bytes .../images/captcha/click/icons/aeroplane.png | Bin 0 -> 1487 bytes .../images/captcha/click/icons/apple.png | Bin 0 -> 907 bytes .../images/captcha/click/icons/banana.png | Bin 0 -> 748 bytes .../images/captcha/click/icons/bell.png | Bin 0 -> 933 bytes .../images/captcha/click/icons/bicycle.png | Bin 0 -> 1091 bytes .../images/captcha/click/icons/bird.png | Bin 0 -> 904 bytes .../images/captcha/click/icons/bomb.png | Bin 0 -> 928 bytes .../images/captcha/click/icons/butterfly.png | Bin 0 -> 928 bytes .../images/captcha/click/icons/candy.png | Bin 0 -> 889 bytes .../images/captcha/click/icons/crab.png | Bin 0 -> 15438 bytes .../static/images/captcha/click/icons/cup.png | Bin 0 -> 754 bytes .../images/captcha/click/icons/dolphin.png | Bin 0 -> 826 bytes .../images/captcha/click/icons/fire.png | Bin 0 -> 768 bytes .../images/captcha/click/icons/guitar.png | Bin 0 -> 1076 bytes .../images/captcha/click/icons/hexagon.png | Bin 0 -> 466 bytes .../images/captcha/click/icons/pear.png | Bin 0 -> 874 bytes .../images/captcha/click/icons/rocket.png | Bin 0 -> 1700 bytes .../images/captcha/click/icons/sailboat.png | Bin 0 -> 883 bytes .../images/captcha/click/icons/snowflake.png | Bin 0 -> 821 bytes .../images/captcha/click/icons/wolf head.png | Bin 0 -> 1176 bytes public/static/images/captcha/image/1.jpg | Bin 0 -> 30428 bytes public/static/images/captcha/image/2.jpg | Bin 0 -> 29677 bytes public/static/images/captcha/image/3.jpg | Bin 0 -> 32109 bytes public/static/images/captcha/image/4.jpg | Bin 0 -> 29081 bytes public/static/images/captcha/image/5.jpg | Bin 0 -> 27940 bytes public/static/images/captcha/image/6.jpg | Bin 0 -> 31381 bytes public/static/images/captcha/image/7.jpg | Bin 0 -> 30234 bytes public/static/images/captcha/image/8.jpg | Bin 0 -> 30188 bytes public/static/images/local-module-logo.png | Bin 0 -> 1148 bytes runtime/.gitignore | 2 + think | 10 + web/.editorconfig | 15 + web/.env | 5 + web/.env.development | 8 + web/.env.production | 11 + web/.npmrc | 2 + web/.prettierrc.js | 36 + web/.vscode/extensions.json | 3 + web/.vscode/settings.json | 15 + web/eslint.config.js | 108 + web/index.html | 16 + web/package.json | 63 + web/public/favicon.ico | Bin 0 -> 4286 bytes web/src/App.vue | 36 + web/src/api/backend/auth/group.ts | 8 + web/src/api/backend/crud.ts | 142 ++ web/src/api/backend/dashboard.ts | 10 + web/src/api/backend/index.ts | 72 + web/src/api/backend/module.ts | 190 ++ web/src/api/backend/routine/AdminInfo.ts | 37 + web/src/api/backend/routine/config.ts | 59 + web/src/api/backend/security/dataRecycle.ts | 10 + .../api/backend/security/dataRecycleLog.ts | 28 + web/src/api/backend/security/sensitiveData.ts | 10 + .../api/backend/security/sensitiveDataLog.ts | 28 + web/src/api/backend/user/group.ts | 8 + web/src/api/backend/user/moneyLog.ts | 13 + web/src/api/backend/user/scoreLog.ts | 13 + web/src/api/common.ts | 378 +++ web/src/api/frontend/index.ts | 56 + web/src/api/frontend/user/index.ts | 120 + web/src/assets/bg-dark.jpg | Bin 0 -> 2211 bytes web/src/assets/bg.jpg | Bin 0 -> 4175 bytes web/src/assets/dashboard/coffee.svg | 1 + web/src/assets/dashboard/header-1.svg | 1 + web/src/assets/icons/dark.svg | 4 + web/src/assets/icons/full-screen-cancel.svg | 1 + web/src/assets/icons/lang.svg | 1 + web/src/assets/icons/light.svg | 8 + web/src/assets/icons/logo.svg | 102 + web/src/assets/icons/terminal.svg | 2 + web/src/assets/index/index-cover.svg | 1 + web/src/assets/login-header.png | Bin 0 -> 19983 bytes web/src/assets/logo.png | Bin 0 -> 4513 bytes web/src/assets/qr.png | Bin 0 -> 33408 bytes .../components/baInput/components/array.vue | 85 + .../baInput/components/baUpload.vue | 518 ++++ .../components/baInput/components/editor.vue | 39 + .../baInput/components/iconSelector.vue | 286 +++ .../baInput/components/remoteSelect.vue | 352 +++ .../baInput/components/selectFile.vue | 246 ++ web/src/components/baInput/helper.ts | 206 ++ web/src/components/baInput/index.ts | 218 ++ web/src/components/baInput/index.vue | 525 +++++ web/src/components/clickCaptcha/index.ts | 47 + web/src/components/clickCaptcha/index.vue | 221 ++ web/src/components/contextmenu/index.vue | 154 ++ web/src/components/contextmenu/interface.ts | 20 + web/src/components/formItem/createData.vue | 304 +++ web/src/components/formItem/index.ts | 13 + web/src/components/formItem/index.vue | 163 ++ web/src/components/icon/index.vue | 41 + web/src/components/icon/svg/index.ts | 69 + web/src/components/icon/svg/index.vue | 49 + web/src/components/mixins/baUpload.ts | 11 + web/src/components/mixins/editor/default.vue | 11 + web/src/components/mixins/loginFooter.vue | 7 + web/src/components/mixins/loginMounted.ts | 4 + web/src/components/mixins/userMounted.ts | 11 + web/src/components/mixins/userProfile.vue | 7 + web/src/components/table/comSearch/index.vue | 300 +++ .../components/table/fieldRender/buttons.vue | 160 ++ .../components/table/fieldRender/color.vue | 28 + .../table/fieldRender/customRender.vue | 28 + .../table/fieldRender/customTemplate.vue | 21 + .../components/table/fieldRender/datetime.vue | 22 + .../components/table/fieldRender/default.vue | 5 + web/src/components/table/fieldRender/icon.vue | 25 + .../components/table/fieldRender/image.vue | 37 + .../components/table/fieldRender/images.vue | 43 + .../components/table/fieldRender/switch.vue | 52 + web/src/components/table/fieldRender/tag.vue | 34 + web/src/components/table/fieldRender/tags.vue | 56 + web/src/components/table/fieldRender/url.vue | 39 + web/src/components/table/header/index.vue | 243 ++ web/src/components/table/index.ts | 141 ++ web/src/components/table/index.vue | 246 ++ web/src/components/terminal/index.vue | 439 ++++ web/src/lang/autoload.ts | 14 + web/src/lang/backend/en.ts | 102 + web/src/lang/backend/en/auth/admin.ts | 13 + web/src/lang/backend/en/auth/adminLog.ts | 12 + web/src/lang/backend/en/auth/group.ts | 9 + web/src/lang/backend/en/auth/rule.ts | 51 + web/src/lang/backend/en/crud/crud.ts | 173 ++ web/src/lang/backend/en/crud/log.ts | 53 + web/src/lang/backend/en/crud/state.ts | 21 + web/src/lang/backend/en/dashboard.ts | 39 + web/src/lang/backend/en/login.ts | 6 + web/src/lang/backend/en/module.ts | 163 ++ web/src/lang/backend/en/routine/adminInfo.ts | 14 + web/src/lang/backend/en/routine/attachment.ts | 25 + web/src/lang/backend/en/routine/config.ts | 16 + .../lang/backend/en/security/dataRecycle.ts | 11 + .../backend/en/security/dataRecycleLog.ts | 17 + .../lang/backend/en/security/sensitiveData.ts | 13 + .../backend/en/security/sensitiveDataLog.ts | 18 + web/src/lang/backend/en/user/group.ts | 5 + web/src/lang/backend/en/user/moneyLog.ts | 16 + web/src/lang/backend/en/user/rule.ts | 26 + web/src/lang/backend/en/user/scoreLog.ts | 8 + web/src/lang/backend/en/user/user.ts | 22 + web/src/lang/backend/zh-cn.ts | 101 + web/src/lang/backend/zh-cn/auth/admin.ts | 13 + web/src/lang/backend/zh-cn/auth/adminLog.ts | 12 + web/src/lang/backend/zh-cn/auth/group.ts | 8 + web/src/lang/backend/zh-cn/auth/rule.ts | 49 + web/src/lang/backend/zh-cn/crud/crud.ts | 168 ++ web/src/lang/backend/zh-cn/crud/log.ts | 51 + web/src/lang/backend/zh-cn/crud/state.ts | 19 + web/src/lang/backend/zh-cn/dashboard.ts | 39 + web/src/lang/backend/zh-cn/login.ts | 6 + web/src/lang/backend/zh-cn/module.ts | 153 ++ .../lang/backend/zh-cn/routine/adminInfo.ts | 14 + .../lang/backend/zh-cn/routine/attachment.ts | 24 + web/src/lang/backend/zh-cn/routine/config.ts | 16 + .../backend/zh-cn/security/dataRecycle.ts | 10 + .../backend/zh-cn/security/dataRecycleLog.ts | 17 + .../backend/zh-cn/security/sensitiveData.ts | 12 + .../zh-cn/security/sensitiveDataLog.ts | 18 + web/src/lang/backend/zh-cn/user/group.ts | 5 + web/src/lang/backend/zh-cn/user/moneyLog.ts | 16 + web/src/lang/backend/zh-cn/user/rule.ts | 24 + web/src/lang/backend/zh-cn/user/scoreLog.ts | 8 + web/src/lang/backend/zh-cn/user/user.ts | 22 + web/src/lang/common/en/401.ts | 4 + web/src/lang/common/en/404.ts | 7 + web/src/lang/common/en/axios.ts | 20 + web/src/lang/common/en/pagesTitle.ts | 11 + web/src/lang/common/en/utils.ts | 88 + web/src/lang/common/en/validate.ts | 18 + web/src/lang/common/zh-cn/401.ts | 4 + web/src/lang/common/zh-cn/404.ts | 6 + web/src/lang/common/zh-cn/axios.ts | 20 + web/src/lang/common/zh-cn/pagesTitle.ts | 11 + web/src/lang/common/zh-cn/utils.ts | 86 + web/src/lang/common/zh-cn/validate.ts | 18 + web/src/lang/frontend/en.ts | 12 + web/src/lang/frontend/en/index.ts | 3 + .../lang/frontend/en/user/account/balance.ts | 6 + .../en/user/account/changePassword.ts | 8 + .../lang/frontend/en/user/account/integral.ts | 6 + .../lang/frontend/en/user/account/overview.ts | 11 + .../lang/frontend/en/user/account/profile.ts | 32 + web/src/lang/frontend/en/user/login.ts | 24 + web/src/lang/frontend/zh-cn.ts | 13 + web/src/lang/frontend/zh-cn/index.ts | 3 + .../frontend/zh-cn/user/account/balance.ts | 6 + .../zh-cn/user/account/changePassword.ts | 8 + .../frontend/zh-cn/user/account/integral.ts | 6 + .../frontend/zh-cn/user/account/overview.ts | 11 + .../frontend/zh-cn/user/account/profile.ts | 32 + web/src/lang/frontend/zh-cn/user/login.ts | 24 + web/src/lang/globs-en.ts | 50 + web/src/lang/globs-zh-cn.ts | 51 + web/src/lang/index.ts | 148 ++ web/src/layouts/backend/components/aside.vue | 55 + .../layouts/backend/components/baAccount.vue | 259 ++ .../backend/components/closeFullScreen.vue | 72 + web/src/layouts/backend/components/config.vue | 420 ++++ web/src/layouts/backend/components/header.vue | 28 + web/src/layouts/backend/components/logo.vue | 79 + .../components/menus/menuHorizontal.vue | 110 + .../backend/components/menus/menuTree.vue | 84 + .../backend/components/menus/menuVertical.vue | 81 + .../components/menus/menuVerticalChildren.vue | 99 + .../backend/components/navBar/classic.vue | 79 + .../backend/components/navBar/default.vue | 84 + .../backend/components/navBar/double.vue | 97 + .../backend/components/navBar/tabs.vue | 263 +++ .../layouts/backend/components/navMenus.vue | 329 +++ web/src/layouts/backend/container/classic.vue | 31 + web/src/layouts/backend/container/default.vue | 31 + web/src/layouts/backend/container/double.vue | 31 + .../layouts/backend/container/streamline.vue | 29 + web/src/layouts/backend/index.vue | 116 + web/src/layouts/backend/router-view/main.vue | 105 + .../layouts/common/components/darkSwitch.vue | 77 + web/src/layouts/common/components/loading.vue | 64 + web/src/layouts/common/router-view/iframe.vue | 31 + web/src/layouts/frontend/components/aside.vue | 160 ++ .../layouts/frontend/components/footer.vue | 33 + .../layouts/frontend/components/header.vue | 127 + web/src/layouts/frontend/components/main.vue | 22 + web/src/layouts/frontend/components/menu.vue | 256 ++ .../layouts/frontend/components/menuSub.vue | 59 + .../layouts/frontend/container/default.vue | 35 + .../layouts/frontend/container/disable.vue | 32 + web/src/layouts/frontend/user.vue | 84 + web/src/main.ts | 36 + web/src/router/index.ts | 81 + web/src/router/static.ts | 100 + web/src/router/static/adminBase.ts | 33 + web/src/router/static/memberCenterBase.ts | 32 + web/src/stores/adminInfo.ts | 57 + web/src/stores/baAccount.ts | 82 + web/src/stores/config.ts | 111 + web/src/stores/constant/cacheKey.ts | 25 + web/src/stores/constant/common.ts | 8 + web/src/stores/constant/terminalTaskStatus.ts | 8 + web/src/stores/index.ts | 7 + web/src/stores/interface/index.ts | 203 ++ web/src/stores/memberCenter.ts | 84 + web/src/stores/navTabs.ts | 245 ++ web/src/stores/refs.ts | 34 + web/src/stores/siteConfig.ts | 37 + web/src/stores/terminal.ts | 292 +++ web/src/stores/userInfo.ts | 88 + web/src/styles/app.scss | 240 ++ web/src/styles/dark.scss | 27 + web/src/styles/element.scss | 87 + web/src/styles/index.scss | 5 + web/src/styles/loading.scss | 54 + web/src/styles/markdown.scss | 242 ++ web/src/styles/mixins.scss | 30 + web/src/styles/var.scss | 32 + web/src/utils/axios.ts | 382 +++ web/src/utils/baTable.ts | 684 ++++++ web/src/utils/build.ts | 37 + web/src/utils/common.ts | 404 ++++ web/src/utils/directives.ts | 224 ++ web/src/utils/horizontalScroll.ts | 33 + web/src/utils/iconfont.ts | 170 ++ web/src/utils/layout.ts | 60 + web/src/utils/loading.ts | 34 + web/src/utils/pageBubble.ts | 104 + web/src/utils/pageShade.ts | 22 + web/src/utils/random.ts | 57 + web/src/utils/router.ts | 318 +++ web/src/utils/storage.ts | 45 + web/src/utils/useCurrentInstance.ts | 13 + web/src/utils/useDark.ts | 49 + web/src/utils/validate.ts | 169 ++ web/src/utils/vite.ts | 184 ++ web/src/views/backend/auth/admin/index.vue | 97 + .../views/backend/auth/admin/popupForm.vue | 198 ++ web/src/views/backend/auth/adminLog/index.vue | 145 ++ web/src/views/backend/auth/adminLog/info.vue | 62 + web/src/views/backend/auth/group/index.vue | 179 ++ .../views/backend/auth/group/popupForm.vue | 173 ++ web/src/views/backend/auth/rule/index.vue | 196 ++ web/src/views/backend/auth/rule/popupForm.vue | 244 ++ web/src/views/backend/crud/design.vue | 2075 +++++++++++++++++ web/src/views/backend/crud/index.ts | 970 ++++++++ web/src/views/backend/crud/index.vue | 36 + web/src/views/backend/crud/log.vue | 578 +++++ web/src/views/backend/crud/start.vue | 319 +++ web/src/views/backend/dashboard.vue | 826 +++++++ web/src/views/backend/login.vue | 284 +++ .../views/backend/module/components/buy.vue | 126 + .../module/components/commonDialog.vue | 73 + .../backend/module/components/commonDone.vue | 288 +++ .../module/components/commonSelectVersion.vue | 134 ++ .../module/components/confirmFileConflict.vue | 90 + .../backend/module/components/goodsInfo.vue | 610 +++++ .../module/components/installConflict.vue | 93 + .../views/backend/module/components/pay.vue | 150 ++ .../backend/module/components/tableHeader.vue | 125 + .../views/backend/module/components/tabs.vue | 168 ++ .../module/components/uploadInstall.vue | 71 + web/src/views/backend/module/index.ts | 604 +++++ web/src/views/backend/module/index.vue | 45 + web/src/views/backend/module/store.ts | 63 + web/src/views/backend/module/types.ts | 78 + web/src/views/backend/routine/adminInfo.vue | 297 +++ .../views/backend/routine/attachment/index.ts | 12 + .../backend/routine/attachment/index.vue | 184 ++ .../backend/routine/attachment/popupForm.vue | 150 ++ web/src/views/backend/routine/config/add.vue | 136 ++ .../views/backend/routine/config/index.vue | 369 +++ .../backend/security/dataRecycle/index.vue | 122 + .../security/dataRecycle/popupForm.vue | 152 ++ .../backend/security/dataRecycleLog/index.vue | 216 ++ .../backend/security/dataRecycleLog/info.vue | 93 + .../backend/security/sensitiveData/index.ts | 113 + .../backend/security/sensitiveData/index.vue | 125 + .../security/sensitiveData/popupForm.vue | 229 ++ .../security/sensitiveDataLog/index.vue | 229 ++ .../security/sensitiveDataLog/info.vue | 128 + web/src/views/backend/user/group/index.vue | 155 ++ .../views/backend/user/group/popupForm.vue | 145 ++ web/src/views/backend/user/moneyLog/index.vue | 147 ++ .../views/backend/user/moneyLog/popupForm.vue | 160 ++ web/src/views/backend/user/rule/index.vue | 108 + web/src/views/backend/user/rule/popupForm.vue | 237 ++ web/src/views/backend/user/scoreLog/index.vue | 126 + .../views/backend/user/scoreLog/popupForm.vue | 160 ++ web/src/views/backend/user/user/index.vue | 114 + web/src/views/backend/user/user/popupForm.vue | 238 ++ web/src/views/common/error/401.vue | 79 + web/src/views/common/error/404.vue | 120 + web/src/views/frontend/index.vue | 146 ++ .../views/frontend/user/account/balance.vue | 122 + .../frontend/user/account/changePassword.vue | 116 + .../views/frontend/user/account/integral.vue | 124 + .../views/frontend/user/account/overview.vue | 299 +++ .../views/frontend/user/account/profile.vue | 533 +++++ web/src/views/frontend/user/login.vue | 590 +++++ web/tsconfig.json | 23 + web/types/global.d.ts | 30 + web/types/module.d.ts | 8 + web/types/table.d.ts | 519 +++++ web/types/tableRenderer.d.ts | 15 + web/vite.config.ts | 50 + 577 files changed, 57404 insertions(+) create mode 100644 .env-example create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 CHANGELOG.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 app/.htaccess create mode 100644 app/AppService.php create mode 100644 app/BaseController.php create mode 100644 app/ExceptionHandle.php create mode 100644 app/Request.php create mode 100644 app/admin/common.php create mode 100644 app/admin/controller/Ajax.php create mode 100644 app/admin/controller/Dashboard.php create mode 100644 app/admin/controller/Index.php create mode 100644 app/admin/controller/Module.php create mode 100644 app/admin/controller/auth/Admin.php create mode 100644 app/admin/controller/auth/AdminLog.php create mode 100644 app/admin/controller/auth/Group.php create mode 100644 app/admin/controller/auth/Rule.php create mode 100644 app/admin/controller/crud/Crud.php create mode 100644 app/admin/controller/crud/Log.php create mode 100644 app/admin/controller/routine/AdminInfo.php create mode 100644 app/admin/controller/routine/Attachment.php create mode 100644 app/admin/controller/routine/Config.php create mode 100644 app/admin/controller/security/DataRecycle.php create mode 100644 app/admin/controller/security/DataRecycleLog.php create mode 100644 app/admin/controller/security/SensitiveData.php create mode 100644 app/admin/controller/security/SensitiveDataLog.php create mode 100644 app/admin/controller/user/Group.php create mode 100644 app/admin/controller/user/MoneyLog.php create mode 100644 app/admin/controller/user/Rule.php create mode 100644 app/admin/controller/user/ScoreLog.php create mode 100644 app/admin/controller/user/User.php create mode 100644 app/admin/event.php create mode 100644 app/admin/lang/en.php create mode 100644 app/admin/lang/en/ajax.php create mode 100644 app/admin/lang/en/auth/admin.php create mode 100644 app/admin/lang/en/auth/group.php create mode 100644 app/admin/lang/en/auth/menu.php create mode 100644 app/admin/lang/en/crud/crud.php create mode 100644 app/admin/lang/en/dashboard.php create mode 100644 app/admin/lang/en/index.php create mode 100644 app/admin/lang/en/routine/admininfo.php create mode 100644 app/admin/lang/en/routine/attachment.php create mode 100644 app/admin/lang/en/routine/config.php create mode 100644 app/admin/lang/en/security/datarecycle.php create mode 100644 app/admin/lang/en/security/datarecyclelog.php create mode 100644 app/admin/lang/en/security/sensitivedata.php create mode 100644 app/admin/lang/en/security/sensitivedatalog.php create mode 100644 app/admin/lang/en/user/moneylog.php create mode 100644 app/admin/lang/en/user/scorelog.php create mode 100644 app/admin/lang/zh-cn.php create mode 100644 app/admin/lang/zh-cn/ajax.php create mode 100644 app/admin/lang/zh-cn/auth/admin.php create mode 100644 app/admin/lang/zh-cn/auth/group.php create mode 100644 app/admin/lang/zh-cn/auth/rule.php create mode 100644 app/admin/lang/zh-cn/crud/crud.php create mode 100644 app/admin/lang/zh-cn/dashboard.php create mode 100644 app/admin/lang/zh-cn/index.php create mode 100644 app/admin/lang/zh-cn/module.php create mode 100644 app/admin/lang/zh-cn/routine/admininfo.php create mode 100644 app/admin/lang/zh-cn/routine/attachment.php create mode 100644 app/admin/lang/zh-cn/routine/config.php create mode 100644 app/admin/lang/zh-cn/security/datarecycle.php create mode 100644 app/admin/lang/zh-cn/security/datarecyclelog.php create mode 100644 app/admin/lang/zh-cn/security/sensitivedata.php create mode 100644 app/admin/lang/zh-cn/security/sensitivedatalog.php create mode 100644 app/admin/lang/zh-cn/user/moneylog.php create mode 100644 app/admin/lang/zh-cn/user/scorelog.php create mode 100644 app/admin/library/Auth.php create mode 100644 app/admin/library/crud/Helper.php create mode 100644 app/admin/library/crud/stubs/html/form.stub create mode 100644 app/admin/library/crud/stubs/html/index.stub create mode 100644 app/admin/library/crud/stubs/mixins/controller/controller.stub create mode 100644 app/admin/library/crud/stubs/mixins/controller/index.stub create mode 100644 app/admin/library/crud/stubs/mixins/controller/initialize.stub create mode 100644 app/admin/library/crud/stubs/mixins/model/afterInsert.stub create mode 100644 app/admin/library/crud/stubs/mixins/model/beforeInsert.stub create mode 100644 app/admin/library/crud/stubs/mixins/model/belongsTo.stub create mode 100644 app/admin/library/crud/stubs/mixins/model/getters/cityNames.stub create mode 100644 app/admin/library/crud/stubs/mixins/model/getters/float.stub create mode 100644 app/admin/library/crud/stubs/mixins/model/getters/htmlDecode.stub create mode 100644 app/admin/library/crud/stubs/mixins/model/getters/jsonDecode.stub create mode 100644 app/admin/library/crud/stubs/mixins/model/getters/remoteSelectLabels.stub create mode 100644 app/admin/library/crud/stubs/mixins/model/getters/string.stub create mode 100644 app/admin/library/crud/stubs/mixins/model/getters/stringToArray.stub create mode 100644 app/admin/library/crud/stubs/mixins/model/mixins/beforeInsertWithSnowflake.stub create mode 100644 app/admin/library/crud/stubs/mixins/model/model.stub create mode 100644 app/admin/library/crud/stubs/mixins/model/setters/arrayToString.stub create mode 100644 app/admin/library/crud/stubs/mixins/model/setters/time.stub create mode 100644 app/admin/library/crud/stubs/mixins/validate/validate.stub create mode 100644 app/admin/library/module/Manage.php create mode 100644 app/admin/library/module/Server.php create mode 100644 app/admin/library/stubs/backendEntrance.stub create mode 100644 app/admin/library/traits/Backend.php create mode 100644 app/admin/middleware.php create mode 100644 app/admin/model/Admin.php create mode 100644 app/admin/model/AdminGroup.php create mode 100644 app/admin/model/AdminLog.php create mode 100644 app/admin/model/AdminRule.php create mode 100644 app/admin/model/Config.php create mode 100644 app/admin/model/CrudLog.php create mode 100644 app/admin/model/DataRecycle.php create mode 100644 app/admin/model/DataRecycleLog.php create mode 100644 app/admin/model/SensitiveData.php create mode 100644 app/admin/model/SensitiveDataLog.php create mode 100644 app/admin/model/User.php create mode 100644 app/admin/model/UserGroup.php create mode 100644 app/admin/model/UserMoneyLog.php create mode 100644 app/admin/model/UserRule.php create mode 100644 app/admin/model/UserScoreLog.php create mode 100644 app/admin/validate/Admin.php create mode 100644 app/admin/validate/AdminGroup.php create mode 100644 app/admin/validate/AdminRule.php create mode 100644 app/admin/validate/Config.php create mode 100644 app/admin/validate/DataRecycle.php create mode 100644 app/admin/validate/SensitiveData.php create mode 100644 app/admin/validate/UserMoneyLog.php create mode 100644 app/admin/validate/UserScoreLog.php create mode 100644 app/api/common.php create mode 100644 app/api/controller/Account.php create mode 100644 app/api/controller/Ajax.php create mode 100644 app/api/controller/Common.php create mode 100644 app/api/controller/Ems.php create mode 100644 app/api/controller/Index.php create mode 100644 app/api/controller/Install.php create mode 100644 app/api/controller/User.php create mode 100644 app/api/lang/en.php create mode 100644 app/api/lang/en/account.php create mode 100644 app/api/lang/en/ems.php create mode 100644 app/api/lang/en/install.php create mode 100644 app/api/lang/en/user.php create mode 100644 app/api/lang/zh-cn.php create mode 100644 app/api/lang/zh-cn/account.php create mode 100644 app/api/lang/zh-cn/ems.php create mode 100644 app/api/lang/zh-cn/install.php create mode 100644 app/api/lang/zh-cn/user.php create mode 100644 app/api/middleware.php create mode 100644 app/api/validate/Account.php create mode 100644 app/api/validate/User.php create mode 100644 app/common.php create mode 100644 app/common/controller/Api.php create mode 100644 app/common/controller/Backend.php create mode 100644 app/common/controller/Frontend.php create mode 100644 app/common/event/Security.php create mode 100644 app/common/facade/Token.php create mode 100644 app/common/library/Auth.php create mode 100644 app/common/library/Email.php create mode 100644 app/common/library/Menu.php create mode 100644 app/common/library/SnowFlake.php create mode 100644 app/common/library/Token.php create mode 100644 app/common/library/Upload.php create mode 100644 app/common/library/token/Driver.php create mode 100644 app/common/library/token/TokenExpirationException.php create mode 100644 app/common/library/token/driver/Mysql.php create mode 100644 app/common/library/token/driver/Redis.php create mode 100644 app/common/library/upload/Driver.php create mode 100644 app/common/library/upload/driver/Local.php create mode 100644 app/common/middleware/AdminLog.php create mode 100644 app/common/middleware/AllowCrossDomain.php create mode 100644 app/common/model/Attachment.php create mode 100644 app/common/model/Config.php create mode 100644 app/common/model/User.php create mode 100644 app/common/model/UserMoneyLog.php create mode 100644 app/common/model/UserScoreLog.php create mode 100644 app/common/service/moduleService.php create mode 100644 app/event.php create mode 100644 app/middleware.php create mode 100644 app/provider.php create mode 100644 app/service.php create mode 100644 composer.json create mode 100644 config/app.php create mode 100644 config/buildadmin.php create mode 100644 config/cache.php create mode 100644 config/console.php create mode 100644 config/cookie.php create mode 100644 config/database.php create mode 100644 config/filesystem.php create mode 100644 config/lang.php create mode 100644 config/log.php create mode 100644 config/middleware.php create mode 100644 config/route.php create mode 100644 config/session.php create mode 100644 config/terminal.php create mode 100644 config/throttle.php create mode 100644 config/trace.php create mode 100644 config/upload.php create mode 100644 config/view.php create mode 100644 database/migrations/20230620180908_install.php create mode 100644 database/migrations/20230620180916_install_data.php create mode 100644 database/migrations/20230622221507_version200.php create mode 100644 database/migrations/20230719211338_version201.php create mode 100644 database/migrations/20230905060702_version202.php create mode 100644 database/migrations/20231112093414_version205.php create mode 100644 database/migrations/20231229043002_version206.php create mode 100644 database/migrations/20250412134127_version222.php create mode 100644 extend/ba/Auth.php create mode 100644 extend/ba/Captcha.php create mode 100644 extend/ba/ClickCaptcha.php create mode 100644 extend/ba/Date.php create mode 100644 extend/ba/Depends.php create mode 100644 extend/ba/Exception.php create mode 100644 extend/ba/Filesystem.php create mode 100644 extend/ba/Random.php create mode 100644 extend/ba/TableManager.php create mode 100644 extend/ba/Terminal.php create mode 100644 extend/ba/Tree.php create mode 100644 extend/ba/Version.php create mode 100644 public/favicon.ico create mode 100644 public/index.php create mode 100644 public/install/assets/index.css create mode 100644 public/install/assets/index.js create mode 100644 public/install/assets/lang.svg create mode 100644 public/install/assets/loading.gif create mode 100644 public/install/assets/logo.svg create mode 100644 public/install/favicon.ico create mode 100644 public/install/index.html create mode 100644 public/npm-install-test/package.json create mode 100644 public/robots.txt create mode 100644 public/router.php create mode 100644 public/static/fonts/ttfs/1.ttf create mode 100644 public/static/fonts/ttfs/2.ttf create mode 100644 public/static/fonts/ttfs/3.ttf create mode 100644 public/static/fonts/ttfs/4.ttf create mode 100644 public/static/fonts/ttfs/5.ttf create mode 100644 public/static/fonts/ttfs/6.ttf create mode 100644 public/static/fonts/zhttfs/1.ttf create mode 100644 public/static/fonts/zhttfs/SourceHanSansCN-Normal.ttf create mode 100644 public/static/images/avatar.png create mode 100644 public/static/images/captcha/click/bgs/1.png create mode 100644 public/static/images/captcha/click/bgs/2.png create mode 100644 public/static/images/captcha/click/bgs/3.png create mode 100644 public/static/images/captcha/click/icons/aeroplane.png create mode 100644 public/static/images/captcha/click/icons/apple.png create mode 100644 public/static/images/captcha/click/icons/banana.png create mode 100644 public/static/images/captcha/click/icons/bell.png create mode 100644 public/static/images/captcha/click/icons/bicycle.png create mode 100644 public/static/images/captcha/click/icons/bird.png create mode 100644 public/static/images/captcha/click/icons/bomb.png create mode 100644 public/static/images/captcha/click/icons/butterfly.png create mode 100644 public/static/images/captcha/click/icons/candy.png create mode 100644 public/static/images/captcha/click/icons/crab.png create mode 100644 public/static/images/captcha/click/icons/cup.png create mode 100644 public/static/images/captcha/click/icons/dolphin.png create mode 100644 public/static/images/captcha/click/icons/fire.png create mode 100644 public/static/images/captcha/click/icons/guitar.png create mode 100644 public/static/images/captcha/click/icons/hexagon.png create mode 100644 public/static/images/captcha/click/icons/pear.png create mode 100644 public/static/images/captcha/click/icons/rocket.png create mode 100644 public/static/images/captcha/click/icons/sailboat.png create mode 100644 public/static/images/captcha/click/icons/snowflake.png create mode 100644 public/static/images/captcha/click/icons/wolf head.png create mode 100644 public/static/images/captcha/image/1.jpg create mode 100644 public/static/images/captcha/image/2.jpg create mode 100644 public/static/images/captcha/image/3.jpg create mode 100644 public/static/images/captcha/image/4.jpg create mode 100644 public/static/images/captcha/image/5.jpg create mode 100644 public/static/images/captcha/image/6.jpg create mode 100644 public/static/images/captcha/image/7.jpg create mode 100644 public/static/images/captcha/image/8.jpg create mode 100644 public/static/images/local-module-logo.png create mode 100644 runtime/.gitignore create mode 100644 think create mode 100644 web/.editorconfig create mode 100644 web/.env create mode 100644 web/.env.development create mode 100644 web/.env.production create mode 100644 web/.npmrc create mode 100644 web/.prettierrc.js create mode 100644 web/.vscode/extensions.json create mode 100644 web/.vscode/settings.json create mode 100644 web/eslint.config.js create mode 100644 web/index.html create mode 100644 web/package.json create mode 100644 web/public/favicon.ico create mode 100644 web/src/App.vue create mode 100644 web/src/api/backend/auth/group.ts create mode 100644 web/src/api/backend/crud.ts create mode 100644 web/src/api/backend/dashboard.ts create mode 100644 web/src/api/backend/index.ts create mode 100644 web/src/api/backend/module.ts create mode 100644 web/src/api/backend/routine/AdminInfo.ts create mode 100644 web/src/api/backend/routine/config.ts create mode 100644 web/src/api/backend/security/dataRecycle.ts create mode 100644 web/src/api/backend/security/dataRecycleLog.ts create mode 100644 web/src/api/backend/security/sensitiveData.ts create mode 100644 web/src/api/backend/security/sensitiveDataLog.ts create mode 100644 web/src/api/backend/user/group.ts create mode 100644 web/src/api/backend/user/moneyLog.ts create mode 100644 web/src/api/backend/user/scoreLog.ts create mode 100644 web/src/api/common.ts create mode 100644 web/src/api/frontend/index.ts create mode 100644 web/src/api/frontend/user/index.ts create mode 100644 web/src/assets/bg-dark.jpg create mode 100644 web/src/assets/bg.jpg create mode 100644 web/src/assets/dashboard/coffee.svg create mode 100644 web/src/assets/dashboard/header-1.svg create mode 100644 web/src/assets/icons/dark.svg create mode 100644 web/src/assets/icons/full-screen-cancel.svg create mode 100644 web/src/assets/icons/lang.svg create mode 100644 web/src/assets/icons/light.svg create mode 100644 web/src/assets/icons/logo.svg create mode 100644 web/src/assets/icons/terminal.svg create mode 100644 web/src/assets/index/index-cover.svg create mode 100644 web/src/assets/login-header.png create mode 100644 web/src/assets/logo.png create mode 100644 web/src/assets/qr.png create mode 100644 web/src/components/baInput/components/array.vue create mode 100644 web/src/components/baInput/components/baUpload.vue create mode 100644 web/src/components/baInput/components/editor.vue create mode 100644 web/src/components/baInput/components/iconSelector.vue create mode 100644 web/src/components/baInput/components/remoteSelect.vue create mode 100644 web/src/components/baInput/components/selectFile.vue create mode 100644 web/src/components/baInput/helper.ts create mode 100644 web/src/components/baInput/index.ts create mode 100644 web/src/components/baInput/index.vue create mode 100644 web/src/components/clickCaptcha/index.ts create mode 100644 web/src/components/clickCaptcha/index.vue create mode 100644 web/src/components/contextmenu/index.vue create mode 100644 web/src/components/contextmenu/interface.ts create mode 100644 web/src/components/formItem/createData.vue create mode 100644 web/src/components/formItem/index.ts create mode 100644 web/src/components/formItem/index.vue create mode 100644 web/src/components/icon/index.vue create mode 100644 web/src/components/icon/svg/index.ts create mode 100644 web/src/components/icon/svg/index.vue create mode 100644 web/src/components/mixins/baUpload.ts create mode 100644 web/src/components/mixins/editor/default.vue create mode 100644 web/src/components/mixins/loginFooter.vue create mode 100644 web/src/components/mixins/loginMounted.ts create mode 100644 web/src/components/mixins/userMounted.ts create mode 100644 web/src/components/mixins/userProfile.vue create mode 100644 web/src/components/table/comSearch/index.vue create mode 100644 web/src/components/table/fieldRender/buttons.vue create mode 100644 web/src/components/table/fieldRender/color.vue create mode 100644 web/src/components/table/fieldRender/customRender.vue create mode 100644 web/src/components/table/fieldRender/customTemplate.vue create mode 100644 web/src/components/table/fieldRender/datetime.vue create mode 100644 web/src/components/table/fieldRender/default.vue create mode 100644 web/src/components/table/fieldRender/icon.vue create mode 100644 web/src/components/table/fieldRender/image.vue create mode 100644 web/src/components/table/fieldRender/images.vue create mode 100644 web/src/components/table/fieldRender/switch.vue create mode 100644 web/src/components/table/fieldRender/tag.vue create mode 100644 web/src/components/table/fieldRender/tags.vue create mode 100644 web/src/components/table/fieldRender/url.vue create mode 100644 web/src/components/table/header/index.vue create mode 100644 web/src/components/table/index.ts create mode 100644 web/src/components/table/index.vue create mode 100644 web/src/components/terminal/index.vue create mode 100644 web/src/lang/autoload.ts create mode 100644 web/src/lang/backend/en.ts create mode 100644 web/src/lang/backend/en/auth/admin.ts create mode 100644 web/src/lang/backend/en/auth/adminLog.ts create mode 100644 web/src/lang/backend/en/auth/group.ts create mode 100644 web/src/lang/backend/en/auth/rule.ts create mode 100644 web/src/lang/backend/en/crud/crud.ts create mode 100644 web/src/lang/backend/en/crud/log.ts create mode 100644 web/src/lang/backend/en/crud/state.ts create mode 100644 web/src/lang/backend/en/dashboard.ts create mode 100644 web/src/lang/backend/en/login.ts create mode 100644 web/src/lang/backend/en/module.ts create mode 100644 web/src/lang/backend/en/routine/adminInfo.ts create mode 100644 web/src/lang/backend/en/routine/attachment.ts create mode 100644 web/src/lang/backend/en/routine/config.ts create mode 100644 web/src/lang/backend/en/security/dataRecycle.ts create mode 100644 web/src/lang/backend/en/security/dataRecycleLog.ts create mode 100644 web/src/lang/backend/en/security/sensitiveData.ts create mode 100644 web/src/lang/backend/en/security/sensitiveDataLog.ts create mode 100644 web/src/lang/backend/en/user/group.ts create mode 100644 web/src/lang/backend/en/user/moneyLog.ts create mode 100644 web/src/lang/backend/en/user/rule.ts create mode 100644 web/src/lang/backend/en/user/scoreLog.ts create mode 100644 web/src/lang/backend/en/user/user.ts create mode 100644 web/src/lang/backend/zh-cn.ts create mode 100644 web/src/lang/backend/zh-cn/auth/admin.ts create mode 100644 web/src/lang/backend/zh-cn/auth/adminLog.ts create mode 100644 web/src/lang/backend/zh-cn/auth/group.ts create mode 100644 web/src/lang/backend/zh-cn/auth/rule.ts create mode 100644 web/src/lang/backend/zh-cn/crud/crud.ts create mode 100644 web/src/lang/backend/zh-cn/crud/log.ts create mode 100644 web/src/lang/backend/zh-cn/crud/state.ts create mode 100644 web/src/lang/backend/zh-cn/dashboard.ts create mode 100644 web/src/lang/backend/zh-cn/login.ts create mode 100644 web/src/lang/backend/zh-cn/module.ts create mode 100644 web/src/lang/backend/zh-cn/routine/adminInfo.ts create mode 100644 web/src/lang/backend/zh-cn/routine/attachment.ts create mode 100644 web/src/lang/backend/zh-cn/routine/config.ts create mode 100644 web/src/lang/backend/zh-cn/security/dataRecycle.ts create mode 100644 web/src/lang/backend/zh-cn/security/dataRecycleLog.ts create mode 100644 web/src/lang/backend/zh-cn/security/sensitiveData.ts create mode 100644 web/src/lang/backend/zh-cn/security/sensitiveDataLog.ts create mode 100644 web/src/lang/backend/zh-cn/user/group.ts create mode 100644 web/src/lang/backend/zh-cn/user/moneyLog.ts create mode 100644 web/src/lang/backend/zh-cn/user/rule.ts create mode 100644 web/src/lang/backend/zh-cn/user/scoreLog.ts create mode 100644 web/src/lang/backend/zh-cn/user/user.ts create mode 100644 web/src/lang/common/en/401.ts create mode 100644 web/src/lang/common/en/404.ts create mode 100644 web/src/lang/common/en/axios.ts create mode 100644 web/src/lang/common/en/pagesTitle.ts create mode 100644 web/src/lang/common/en/utils.ts create mode 100644 web/src/lang/common/en/validate.ts create mode 100644 web/src/lang/common/zh-cn/401.ts create mode 100644 web/src/lang/common/zh-cn/404.ts create mode 100644 web/src/lang/common/zh-cn/axios.ts create mode 100644 web/src/lang/common/zh-cn/pagesTitle.ts create mode 100644 web/src/lang/common/zh-cn/utils.ts create mode 100644 web/src/lang/common/zh-cn/validate.ts create mode 100644 web/src/lang/frontend/en.ts create mode 100644 web/src/lang/frontend/en/index.ts create mode 100644 web/src/lang/frontend/en/user/account/balance.ts create mode 100644 web/src/lang/frontend/en/user/account/changePassword.ts create mode 100644 web/src/lang/frontend/en/user/account/integral.ts create mode 100644 web/src/lang/frontend/en/user/account/overview.ts create mode 100644 web/src/lang/frontend/en/user/account/profile.ts create mode 100644 web/src/lang/frontend/en/user/login.ts create mode 100644 web/src/lang/frontend/zh-cn.ts create mode 100644 web/src/lang/frontend/zh-cn/index.ts create mode 100644 web/src/lang/frontend/zh-cn/user/account/balance.ts create mode 100644 web/src/lang/frontend/zh-cn/user/account/changePassword.ts create mode 100644 web/src/lang/frontend/zh-cn/user/account/integral.ts create mode 100644 web/src/lang/frontend/zh-cn/user/account/overview.ts create mode 100644 web/src/lang/frontend/zh-cn/user/account/profile.ts create mode 100644 web/src/lang/frontend/zh-cn/user/login.ts create mode 100644 web/src/lang/globs-en.ts create mode 100644 web/src/lang/globs-zh-cn.ts create mode 100644 web/src/lang/index.ts create mode 100644 web/src/layouts/backend/components/aside.vue create mode 100644 web/src/layouts/backend/components/baAccount.vue create mode 100644 web/src/layouts/backend/components/closeFullScreen.vue create mode 100644 web/src/layouts/backend/components/config.vue create mode 100644 web/src/layouts/backend/components/header.vue create mode 100644 web/src/layouts/backend/components/logo.vue create mode 100644 web/src/layouts/backend/components/menus/menuHorizontal.vue create mode 100644 web/src/layouts/backend/components/menus/menuTree.vue create mode 100644 web/src/layouts/backend/components/menus/menuVertical.vue create mode 100644 web/src/layouts/backend/components/menus/menuVerticalChildren.vue create mode 100644 web/src/layouts/backend/components/navBar/classic.vue create mode 100644 web/src/layouts/backend/components/navBar/default.vue create mode 100644 web/src/layouts/backend/components/navBar/double.vue create mode 100644 web/src/layouts/backend/components/navBar/tabs.vue create mode 100644 web/src/layouts/backend/components/navMenus.vue create mode 100644 web/src/layouts/backend/container/classic.vue create mode 100644 web/src/layouts/backend/container/default.vue create mode 100644 web/src/layouts/backend/container/double.vue create mode 100644 web/src/layouts/backend/container/streamline.vue create mode 100644 web/src/layouts/backend/index.vue create mode 100644 web/src/layouts/backend/router-view/main.vue create mode 100644 web/src/layouts/common/components/darkSwitch.vue create mode 100644 web/src/layouts/common/components/loading.vue create mode 100644 web/src/layouts/common/router-view/iframe.vue create mode 100644 web/src/layouts/frontend/components/aside.vue create mode 100644 web/src/layouts/frontend/components/footer.vue create mode 100644 web/src/layouts/frontend/components/header.vue create mode 100644 web/src/layouts/frontend/components/main.vue create mode 100644 web/src/layouts/frontend/components/menu.vue create mode 100644 web/src/layouts/frontend/components/menuSub.vue create mode 100644 web/src/layouts/frontend/container/default.vue create mode 100644 web/src/layouts/frontend/container/disable.vue create mode 100644 web/src/layouts/frontend/user.vue create mode 100644 web/src/main.ts create mode 100644 web/src/router/index.ts create mode 100644 web/src/router/static.ts create mode 100644 web/src/router/static/adminBase.ts create mode 100644 web/src/router/static/memberCenterBase.ts create mode 100644 web/src/stores/adminInfo.ts create mode 100644 web/src/stores/baAccount.ts create mode 100644 web/src/stores/config.ts create mode 100644 web/src/stores/constant/cacheKey.ts create mode 100644 web/src/stores/constant/common.ts create mode 100644 web/src/stores/constant/terminalTaskStatus.ts create mode 100644 web/src/stores/index.ts create mode 100644 web/src/stores/interface/index.ts create mode 100644 web/src/stores/memberCenter.ts create mode 100644 web/src/stores/navTabs.ts create mode 100644 web/src/stores/refs.ts create mode 100644 web/src/stores/siteConfig.ts create mode 100644 web/src/stores/terminal.ts create mode 100644 web/src/stores/userInfo.ts create mode 100644 web/src/styles/app.scss create mode 100644 web/src/styles/dark.scss create mode 100644 web/src/styles/element.scss create mode 100644 web/src/styles/index.scss create mode 100644 web/src/styles/loading.scss create mode 100644 web/src/styles/markdown.scss create mode 100644 web/src/styles/mixins.scss create mode 100644 web/src/styles/var.scss create mode 100644 web/src/utils/axios.ts create mode 100644 web/src/utils/baTable.ts create mode 100644 web/src/utils/build.ts create mode 100644 web/src/utils/common.ts create mode 100644 web/src/utils/directives.ts create mode 100644 web/src/utils/horizontalScroll.ts create mode 100644 web/src/utils/iconfont.ts create mode 100644 web/src/utils/layout.ts create mode 100644 web/src/utils/loading.ts create mode 100644 web/src/utils/pageBubble.ts create mode 100644 web/src/utils/pageShade.ts create mode 100644 web/src/utils/random.ts create mode 100644 web/src/utils/router.ts create mode 100644 web/src/utils/storage.ts create mode 100644 web/src/utils/useCurrentInstance.ts create mode 100644 web/src/utils/useDark.ts create mode 100644 web/src/utils/validate.ts create mode 100644 web/src/utils/vite.ts create mode 100644 web/src/views/backend/auth/admin/index.vue create mode 100644 web/src/views/backend/auth/admin/popupForm.vue create mode 100644 web/src/views/backend/auth/adminLog/index.vue create mode 100644 web/src/views/backend/auth/adminLog/info.vue create mode 100644 web/src/views/backend/auth/group/index.vue create mode 100644 web/src/views/backend/auth/group/popupForm.vue create mode 100644 web/src/views/backend/auth/rule/index.vue create mode 100644 web/src/views/backend/auth/rule/popupForm.vue create mode 100644 web/src/views/backend/crud/design.vue create mode 100644 web/src/views/backend/crud/index.ts create mode 100644 web/src/views/backend/crud/index.vue create mode 100644 web/src/views/backend/crud/log.vue create mode 100644 web/src/views/backend/crud/start.vue create mode 100644 web/src/views/backend/dashboard.vue create mode 100644 web/src/views/backend/login.vue create mode 100644 web/src/views/backend/module/components/buy.vue create mode 100644 web/src/views/backend/module/components/commonDialog.vue create mode 100644 web/src/views/backend/module/components/commonDone.vue create mode 100644 web/src/views/backend/module/components/commonSelectVersion.vue create mode 100644 web/src/views/backend/module/components/confirmFileConflict.vue create mode 100644 web/src/views/backend/module/components/goodsInfo.vue create mode 100644 web/src/views/backend/module/components/installConflict.vue create mode 100644 web/src/views/backend/module/components/pay.vue create mode 100644 web/src/views/backend/module/components/tableHeader.vue create mode 100644 web/src/views/backend/module/components/tabs.vue create mode 100644 web/src/views/backend/module/components/uploadInstall.vue create mode 100644 web/src/views/backend/module/index.ts create mode 100644 web/src/views/backend/module/index.vue create mode 100644 web/src/views/backend/module/store.ts create mode 100644 web/src/views/backend/module/types.ts create mode 100644 web/src/views/backend/routine/adminInfo.vue create mode 100644 web/src/views/backend/routine/attachment/index.ts create mode 100644 web/src/views/backend/routine/attachment/index.vue create mode 100644 web/src/views/backend/routine/attachment/popupForm.vue create mode 100644 web/src/views/backend/routine/config/add.vue create mode 100644 web/src/views/backend/routine/config/index.vue create mode 100644 web/src/views/backend/security/dataRecycle/index.vue create mode 100644 web/src/views/backend/security/dataRecycle/popupForm.vue create mode 100644 web/src/views/backend/security/dataRecycleLog/index.vue create mode 100644 web/src/views/backend/security/dataRecycleLog/info.vue create mode 100644 web/src/views/backend/security/sensitiveData/index.ts create mode 100644 web/src/views/backend/security/sensitiveData/index.vue create mode 100644 web/src/views/backend/security/sensitiveData/popupForm.vue create mode 100644 web/src/views/backend/security/sensitiveDataLog/index.vue create mode 100644 web/src/views/backend/security/sensitiveDataLog/info.vue create mode 100644 web/src/views/backend/user/group/index.vue create mode 100644 web/src/views/backend/user/group/popupForm.vue create mode 100644 web/src/views/backend/user/moneyLog/index.vue create mode 100644 web/src/views/backend/user/moneyLog/popupForm.vue create mode 100644 web/src/views/backend/user/rule/index.vue create mode 100644 web/src/views/backend/user/rule/popupForm.vue create mode 100644 web/src/views/backend/user/scoreLog/index.vue create mode 100644 web/src/views/backend/user/scoreLog/popupForm.vue create mode 100644 web/src/views/backend/user/user/index.vue create mode 100644 web/src/views/backend/user/user/popupForm.vue create mode 100644 web/src/views/common/error/401.vue create mode 100644 web/src/views/common/error/404.vue create mode 100644 web/src/views/frontend/index.vue create mode 100644 web/src/views/frontend/user/account/balance.vue create mode 100644 web/src/views/frontend/user/account/changePassword.vue create mode 100644 web/src/views/frontend/user/account/integral.vue create mode 100644 web/src/views/frontend/user/account/overview.vue create mode 100644 web/src/views/frontend/user/account/profile.vue create mode 100644 web/src/views/frontend/user/login.vue create mode 100644 web/tsconfig.json create mode 100644 web/types/global.d.ts create mode 100644 web/types/module.d.ts create mode 100644 web/types/table.d.ts create mode 100644 web/types/tableRenderer.d.ts create mode 100644 web/vite.config.ts diff --git a/.env-example b/.env-example new file mode 100644 index 0000000..8f18cf0 --- /dev/null +++ b/.env-example @@ -0,0 +1,7 @@ +APP_DEBUG = true + +[APP] +DEFAULT_TIMEZONE = Asia/Shanghai + +[LANG] +default_lang = zh-cn diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..a8822b5 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +* text=auto eol=lf + +# Windows +*.bat text eol=crlf \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6eda196 --- /dev/null +++ b/.gitignore @@ -0,0 +1,47 @@ +# 通过 Git 部署项目至线上时建议删除的忽略规则 +/vendor +/modules +/public/*.lock +/public/index.html +/public/assets + +# 通过 Git 部署项目至线上时可以考虑删除的忽略规则 +/public/storage/* +composer.lock +pnpm-lock.yaml +package-lock.json +yarn.lock + +# common +/nbproject +/runtime/* +/install +node_modules +dist +dist-ssr +.DS_Store +/.env +Desktop.ini + +# Log files +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +!/web/.vscode + +# Other +*.css.map +*.local +!.gitkeep +.svn \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..3d91beb --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,986 @@ +### [BuildAdmin 更新日志](https://gitee.com/wonderful-code/buildadmin) + +🔥🔥基于 Vue3.x + ThinkPHP8 + TypeScript + Vite + Pinia + Element Plus 等流行技术栈的后台管理系统,支持常驻内存运行、可视化CRUD代码生成、自带WEB终端、自适应多端、同时提供Web、WebNuxt、Server端、内置全局数据回收站和字段级数据修改保护、自动注册路由、无限子级权限管理等,无需授权即可免费商用,希望能帮助大家实现快速开发。 + +## v2.3.6-Release +### 新增 +- 添加菜单规则时可快速生成下级权限节点(一键同时提交查看、编辑、添加、删除等权限节点) +- 增加公共搜索渲染为时间选择器和时间范围选择器的支持 +- 时间日期类字段的公共搜索可按需渲染为单时间、单日期、时间日期,并支持等于、大小比较、范围查询等多种操作符 +- CRUD增加自定义公共搜索输入组件属性的支持 +- CRUD增加远程下拉字段的公共搜索渲染方式的自定义功能 + +### 重构/优化/修复 +- 优化统计图表样式 +- 完善表格列的 TS 类型定义 +- CRUD设计器中的默认排序字段的设定逻辑优化 +- 优化已安装模块详情弹窗中的按钮样式 +- 优化CRUD设计页面部分输入框的提示文案 +- 优化CRUD字段名称重复/命名规则错误时,提示信息的显示时机 +- 使用新的官网接口地址以避免可能的本地 hosts 配置影响 +- 修复本地自建模块的显示问题 +- 修复CRUD设计器中对字段先改名再删除时提示找不到字段的问题 +- 修复后台窗口大小改变重新布局时,可能丢失状态/自动重新布局的问题 +- 修复在部分手机上后台菜单可能滑不到最底部的问题 +- 修复常驻内存模式下不能连续安装模块的问题 +- 修复访问CRUD云记录时可能提示请登录的问题 + +## v2.3.5-Release +### 新增 +- 在后台模块详情弹窗中显示模块文档的链接 +- 新增设定表格 getData 请求时的筛选条件的方法 + +### 重构/优化/修复 +- 优化表格行按钮的样式细节 +- 优化公共搜索数据的类型定义 +- 优化表格顶部按钮的样式细节 +- 优化模块详情弹窗中模块预览轮播图的样式细节 +- 完善部分方法形参的类型声明 (#52) +- 完善表格管家类内部事件相关细节及类型定义 +- 会员余额和积分管理表格刷新时同时刷新当前会员的账户信息 +- 修改公共搜索显示动画为折叠展开,使得动画更平滑 !195 +- 在设置和获取公共搜索表单数据前确定数据已经初始化 +- 优化公共搜索初始化逻辑、优化 getData 筛选条件设定 +- 修复格式化时间日期字符串时可能异常的问题 !192 +- 修复开发环境中 prettier 命令的参数未严格限制可能导致命令注入的问题 +- 修复第一个表格行按钮是确认按钮时存在视觉偏移的问题 !191 +- 修复弃用自带公共搜索组件后远程下拉仍然会发起初始化请求的问题 !187 +- 自定义 `voku/portable-utf8` 和 `voku/anti-xss` 依赖的仓库 URL 以兼容至 `PHP 8.4` + +## v2.3.4-Beta +### 新增 +- 表格行按钮的扩展属性支持以自定义函数定义 +- 新增表格按钮的 `loading` 属性控制函数 +- 后台安装模块时支持选择安装版本(**授权过期订单可继续安装授权过期之前发布的模块版本**) + +### 重构/优化/修复 +- 优化远程下拉组件的分页器 +- 优化上传组件的图片预览弹窗 +- 可视化CRUD:优化生成的控制器中的 `index` 方法内 `visible` 操作的代码 +- 可视化CRUD:生成的表单组件中无验证规则时不导入 `buildValidatorData` 函数 +- 可视化CRUD:存在富文本编辑器时增加表单 `dialog` 的宽度 +- 余额管理和积分管理内的会员信息加载增加防抖 +- 新注册会员未设密码时无需生成随机密码 +- 优化导入部分自定义组件时的单词大小写问题 +- 优化表格行按钮和其图标的默认样式 +- 替换已废弃的 frameborder 属性 +- 同步暗黑模式下 `--el-border-color` 和 `--ba-border-color` 的 CSS 变量值 +- 修复暗黑模式下控制台页面休息片刻按钮的样式问题 +- 修复会员 id 可能被修改的问题 +- 修复会员余额管理部分字段筛选无效的问题 +- 修复后台管理员的最后登录时间显示错误的问题 +- 修复时间格式化工具函数错误的将 0 改为了当前时间 +- 修复后台附件管理删除确认按钮 title 属性的 TS 类型错误 +- 修复菜单规则管理中 Iframe 的 URL 可能被转义的问题 + +## v2.3.3-Release +### 修复 +- 修复卸载模块的 WebBootstrap 时可能报错的问题(即模块卸载可能报错) +- 修复后台菜单规则管理可能意外要求链接URL字段必填的问题 + +## v2.3.2-Release +### 新增 +- 增加预设表格单元格渲染器内部的组件的任意属性自定义功能 +- 表格公共搜索中的范围输入框的 `placeholder` 支持以数组类型定义不同值 +- 允许模块向 `modules` 目录写入文件,即操作其他模块,而不是局限于系统本身 +- 模块系统增加 `nuxt` 工程的 模块启动引导代码 插入支持 +- 对外导出前后台各种布局下顶栏的高度数据 + +### 重构/优化/修复 +- 模板引用升级为 `vue 3.5` 新增的 `useTemplateRef` +- 缓存后台菜单规则管理中数据行的展开折叠等状态以便更好的对菜单进行管理 +- 为 `baTable.getIndex` 和 `baTable.requestEdit` 方法增加更适宜的别名 +- 使用更易读的方式定义表格管家类的钩子 +- 修复后台标签页的退出全屏按钮不能点击的问题 +- 修复刷新页面后菜单栏滚动条不能自动滚动到激活菜单所在位置的问题 +- 优化模块列表页面样式 +- 优化 `baTableApi` 类细节 +- 优化 `TableColumn` 类型定义 +- 优化 `baTable` 注释和类型定义注释 +- 优化后台菜单规则管理的验证规则和细节 +- 优化右击菜单组件和图标选择器的事件监听 +- 优化生成 `tableRenderer.d.ts` 文件的逻辑和其内容 + +## v2.3.1-Release + +### 安全更新 +- 升级 `axios` 以避免 `CVE-2025-27152` 带来的影响([axios请求可能通过绝对URL遭受SSRF和凭证泄露漏洞](https://www.cve.org/CVERecord?id=CVE-2025-27152)) +- `BuildAdmin` 后台 `系统配置控制器` 内意外的设置了 `查看` 方法为免登录,可能导致 `配置信息泄露`,建议你立即进行更新或手动修复,[本安全更新详细文档](https://doc.buildadmin.com/guide/other/incompatibleUpdate/v231.html)。 + +### 优化 +- 统一和调高系统级 `z-index` 配置值 + +## v2.3.0-Release +### 新增 +- 使用更安全的密码 `hash` 算法 +- 可视化 CRUD:新增可选的历史记录云备份功能,可跨设备使用 CRUD 设计 +- 可视化 CRUD:代码生成完毕后,自动调用 `prettier` 格式化前端代码 +- 增加 `cdn_url_params` 内容分发网络 `URL` 参数配置 !177 +- 点选验证码组件支持自定义 `API` 的 `BaseURL` + +### 重构/优化/修复 +- 更新 `vite` 和 `vue-i18n` +- 优化多个数据表的结构 +- 优化部分状态商店的数据填充方法 +- 跨域 `methods` 和 `headers` 默认允许所有 +- 可视化 CRUD:优化空表和删表重建的提示信息 +- 可视化 CRUD:优化数字系列验证规则的注释和显示标题 +- 可视化 CRUD:修复解析表时 `float` 类型字段不设长度可能报错的问题 +- WEB 终端:为可执行命令增加 `notes` 配置项,可于执行前对命令进行一次注释 +- 为部分输入框添加 `placeholder` 以更好的融入整个表单 +- 修改 `user` 模型中 `group` 关联方法的名称以避免方法名称冲突 +- 修复同一文件多次上传可能重复保存的问题 +- 修复附件表 `name` 字段长度可能不够的问题 +- 修复 `createAxios` 取消重复请求的配置项大小写错误 +- 修复上传组件 `showFileList=false` 时可能报错的问题 +- 修复验证码类传递自定义随机字符串时可能验证失败的问题 +- 其他细节 + +## v2.2.1-Release + +### 重构/优化/修复 +- 添加 `pnpm.onlyBuiltDependencies` 以避免编译时报错 +- 修复微信 `PC` 版的截图无法上传的问题 (#50) +- 修复登录失败重试次数超限,隔天后仅能重试一次的问题 +- 修复后台角色组管理中非超管不显示已禁用分组的问题 (#43) +- 修复添加敏感字段和数据回收规则时可能报错的问题 +- 优化WEB终端交互式命令的检测和中断 +- 优化公共权限类的会员注册方法 +- 优化清理 `XSS` 的方案(不过滤富文本的 `style` 属性同时确保内容 `xss` 安全) +- 优化刷新 `token` 接口的逻辑 +- 优化后台角色组管理 +- 前端响应内容中增加 `API` 调试引导 +- 不再使用新版 `el-pagination` 组件中已经废弃的 `small` 属性 (#49) +- 切换 `switch` 单元格的状态时更新表格原始数据 !172 + +## v2.2.0-Release + +- 本版本包含一些不兼容更新,请在升级时查阅 [v2.2.0不兼容更新文档](https://doc.buildadmin.com/guide/other/incompatibleUpdate/v220.html) + +### 新增 +- 升级前后端依赖(`tp8.1` + `vue3.5` + `element plus2.9` 等) +- 可视化CRUD:生成前检查是否已有同名菜单并提示 +- 可视化CRUD:生成远程下拉时支持可视化的自定义数据源 + +### 重构/优化/修复 +- 优化 `element.scss` 细节 +- 优化 `getDirFiles` 获取文件时支持不限后缀 +- 优化后台菜单唯一标识的生成规则 +- 优化公共搜索对嵌套关联预载入字段的支持 +- 提交表单时不再自动过滤值 `null` 的字段 +- 将权重字段自动赋值的条件由值为 `0` 改为值为 `null` +- 多种输入框对应的数据表字段设计允许 `null` 以提供更好的兼容 +- 全局配置 `value-on-clear` 以避免 `el-select` 等组件清空输入时值为 `undefined` +- 优化时间选择器、远程下拉选择器、城市选择器、颜色选择器 +- 单元格 `tag` 渲染器值为 `null` 和 `undefined` 时不渲染 +- 后台会员、管理员表单禁止浏览器密码的自动填充 +- 公共搜索时过滤 `length` 为 `0` 的数组数据 +- 可视化CRUD:勾选生成为公共模型时,同时将验证器设为公共验证器 +- 可视化CRUD:字段名称重复检查移至修改前而不只是在修改后再统一检查 +- 可视化CRUD:优化字段名称重复时自动重命名的逻辑 +- 可视化CRUD:生成的 `number` 类型输入框绑定值不再需要修饰符 +- 可视化CRUD:优化 `float` 和 `time` 类型字段的值为 `null` 时的处理 +- 可视化CRUD:修复多层级菜单情况下,生成的上级菜单有可能错误的问题 +- 修复以 `ASC` 规则排序时,拖拽排序可能无效的问题 +- 修复 `unixTime` 方法可能报错 `Invalid date` 的问题 +- 修复模糊搜索关联字段时可能报错的问题 +- 修复 `number` 类型输入框无法输入 `0.0` 的问题 +- 修复对 `getArrayKey` 的返回值判断不严格的问题 +- 修复关联表列的 `default` 和 `formatter` 定义无效的问题 +- 修复 `number` 输入框值为 `null` 会自动被转为 `0` 的问题 +- 修复格式化 `Unix` 时间戳时不支持未来时的问题 +- 不再需要 `ext-calendar` +- 其他细节 + +## v2.1.3-Release +### 新增 +- 后台控制器基类增加有序保证属性 +- 存在热更新脏文件时,于后台顶栏显示需要重启 `Vite` 热更新服务的警告按钮 + +### 重构/优化/修复 +- 表格拖拽排序由直接替换改为增量重排法 +- 优化点选验证码组件的渲染与销毁 +- 优化会员中心菜单点击时的处理函数逻辑 +- 优化前台顶栏菜单被点击时无需激活的菜单项的处理 +- 优化终端弹窗样式 +- 优化小屏下的菜单抽屉 +- 优化顶栏子级菜单的激活逻辑 +- 优化系统配置项 `buildadmin.api_url` 的注释 +- 优化 `CRUD` 无意义默认值的清理逻辑 +- 优化 `CRUD` 浮点数类型字段的模型获取器生成 +- 去除开发环境下跨域代理示例 +- 前端的会员中心开关状态默认开启 +- 会员前台菜单的路由路径支持 `query` +- 后台删除操作不再必需为 `Delete` 请求、统一输入变量接受方式 +- 完善 `Request` 类的真实 `IP` 获取支持(可避免 `Nuxt` 工程服务端渲染时获取不到客户端真实 `IP`) +- 修改 `request` 类全局过滤规则的设置时机 +- 修复单元格 `tag` 渲染器值为 `0` 时不渲染的问题 +- 修复控制器代码中未写入自定义的权重字段名称的问题 +- 修复会员的分组无所有权限时上传文件会提示无权限的问题 +- 修复模块安装过程中可能提示网络请求超时的问题 +- 其他细节 + +## v2.1.2-Release +### 新增 +- 增加前台会员登录验证码开关配置项 +- `BaInput` 和 `FormItem` 组件增加插槽支持 +- 可视化CRUD将字段默认值区分为多个类型进行设定 +- 可视化CRUD修改字段的生成类型时,询问是否重置为新类型的预设属性 +- 终端设置窗口内增加修改 `NPM` 和 `Composer` 源的功能 + +### 重构/优化/修复 +- 升级 `think-orm` +- 提高 `node` 版本要求 +- 优化根标签和头像样式 +- 优化通用搜索表单重置逻辑 +- 优化前台会员登录注册接口 +- 优化开发服务环境检测,去除开发服务端口配置功能 +- 优化输入组件类型对应的数据表字段设计方案 +- 后台菜单的路由路径支持 `query` +- `baTable` 的通用搜索初始化相关逻辑解耦 +- 删除 `countup.js` 依赖,使用 `useTransition` 代替 +- 设置通用搜索数据时对时间日期的识别优化 +- 表格列的 `renderFormatter` 替换为 `formatter` +- 单元格渲染器拆分为独立组件并改用易于扩展的方式加载 +- 使用 `v-memo` 指令缓存表格中的按钮组以提高表格性能 +- 会员管理控制器的 `select` 方法过滤敏感字段 +- 附件选择器关闭通过 `query` 自动触发通用搜索的功能 +- 升级 `pinia`、`eslint`、`vue-tsc` 等多个前端依赖 +- 使用 `qrcode.vue` 替代 `vue-qr` 以确保不存在已弃用的子依赖 +- 安装程序增加对 `pdo_mysql` 的检测 +- 修复控制台页面部分图表超出容器的问题 +- 修复上传文件时入库文件路径使用了错误的斜杠造成图片可能无法显示的问题 +- 修复在多数据库场景中远程下拉组件的 `pk` 属性可能错误的问题 +- 修复系统配置中部分输入组件可能报警告的问题 +- 其他细节 + +## v2.1.1-Release +### 新增 +- 上传类重构为多驱动模式,同时云存储模块将为系统安装服务端上传云存储的驱动 + +### 重构/优化/修复 +- 限定`think-orm`版本以修复该依赖新版本带来的问题 +- 修复上传组件的文件上传状态可能错误的问题 +- 修复自定义后台入口后`WEB`终端命令执行失败的问题 +- 修复`v-drag`指令对`el-dialog`使用时会意外抖动的问题 +- 修复会员的权限不是所有时,修改邮箱提示没有权限的问题 +- 修复一处类型定义中的注释书写错误 !163 +- 优化`full_url`函数的参数类型 +- 当表格公共搜索字段渲染为`tag`且操作为`in`时,支持多选 !162 +- 上传组件禁用状态相关优化 +- 调高部分全局通知消息的`zIndex` +- 使用更合理的方案处理`OPTIONS`请求 + +## v2.1.0-Release +### 新增 +- 升级所有前端依赖 +- 增加`Writeable`工具类型,可将只读属性转为可写 +- 增加`vue-tsc`依赖和`typecheck`命令 +- 模块上传安装时对模块版本是否兼容当前系统版本进行检查 + +### 重构/优化/修复 +- 修复`FormItem`组件属性失去了响应性的问题 +- 修复`switch`组件使用了`activeValue`属性时无法工作的问题 +- 修复连续安装模块时终端命令可能执行失败的问题 +- 修复拥有所有权限的分组可能无法默认选中权限节点的问题 +- 基于`Element plus`新版本优化远程下拉组件(分页样式、逻辑等) +- 基于`Element plus`新版本优化文件上传组件(钩子等) +- 基于`Element plus`新版本优化`FormItem`组件 +- 优化`FormItem`的`props.tip`和`props.blockHelp`样式 +- 优化`FormItem`组件的类型定义 +- 合并`FormItem`的`props`本身和`props.attr`,可查阅[此提交](https://gitee.com/wonderful-code/buildadmin/commit/10527ebb760a10b329130e3194a6bbc929a52737) +- 合并`baInput`组件的`props.attr`和`props.data`,可查阅[此提交](https://gitee.com/wonderful-code/buildadmin/commit/10527ebb760a10b329130e3194a6bbc929a52737) +- 优化表格的`props`继承的类型的定义 +- 优化富文本编辑器的默认宽度 +- 优化可视化`CRUD`生成的模型的`onBeforeInsert`方法返回值类型定义 +- 优化可视化`CRUD`生成的`FormItem`组件的属性代码 +- 优化`debounce`的使用,无必要不使用全局`debounce` +- 去除菜单权限规则类的静态变量缓存以更好的兼容常驻内存运行 +- 使用`PSR-12`编码风格规范格式化和检查所有`PHP`代码 +- `Vite`热更新控制的相关功能整理为函数 +- 其他细节 + +## v2.0.10-Release +### 新增 +- 单复选框支持按钮模式 +- 公共搜索增加渲染类名方便单独定位某字段 +- 图片上传达到限制数时隐藏上传框的配置项 +- 增加`AttachmentInsert`事件,开发者或模块可于附件入库后对新的附件做一些额外的操作 + +### 重构/优化/修复 +- 优化文件上传,文件移动操作优先于文件数据入库 +- 优化管理员管理和菜单规则管理的控制器代码 +- 修复选择数据表、选择数据表字段接口非默认数据库返回空数据的问题 +- 修复第一个菜单为 Iframe 时不能自动跳转的 BUG +- 修复由于`Gitee Pages`停止服务造成的文档站无法访问 +- 修复可视化`CRUD`远程下拉选择数据表时不能关键词搜索的问题 +- 修复右击菜单组件的菜单面板可能超出屏幕的问题 + +## v2.0.9-Release +### 新增 +- 增加动态修改后台顶部`Tab`标题的方法 +- 增加关闭掉全部或者指定`Tab`的方法 +- 新增`refs`状态商店,全局提供了:引用(指向)一些对象(组件)的句柄 +- 常驻内存支持,享受比传统框架快上数十倍的性能提升,目前[Workerman模块](https://modules.buildadmin.com/workerman)可提供框架的常驻内存HTTP服务 + +### 重构/优化/修复 +- 优化内置滚动条样式 +- 使用鼠标滚轮快速操作顶栏横向滚动条的支持(单双栏布局模式下) +- 在操作日志中管理登录失败时任然尽可能记录输入的管理员名称 +- 内置开发服务(php think run)总是禁用输出压缩 +- 自定义后台入口时,由禁止后台应用访问改为添加应用映射 +- 优化Token门面类的类型定义、鉴权相关解耦、细节优化 +- 上传文件时对文件名中不利于传输的字符进行过滤 +- 修复WEB终端开始执行命令时可能刷新页面的问题 +- 修复清理缓存操作的日志标题错误的问题 + +## v2.0.8-Beta +### 新增 +- [Workerman模块](https://modules.buildadmin.com/workerman)上线(系统内置的`API`已完成常驻内存运行的兼容) +- 增加一个获取用户鉴权`token`的公共函数 +- WEB终端:对交互式命令进行提示并终止执行 + +### 重构/优化/修复 +- 修复收集异常数据时可能出现循环引用导致难以排查的问题 +- 公共函数`full_url`默认域名不再携带协议,由浏览器自动识别或手动指定 +- 文件上传类兼容常驻内存模式运行 +- 权限和权限规则类兼容常驻内存运行 +- WEB终端:兼容常驻内存运行 +- WEB终端:命令执行完毕后再输出退出码和状态信息 +- 跨域中间件:使用更合适的办法设置跨域响应头 + +## v2.0.7-Release +### 重构/优化/修复 +- 优化前台首页在短屏下的样式 +- 可视化CRUD:多数据库支持兼容历史生成记录 +- 为前台登录页增加滚动条以兼容小屏设备 + +## v2.0.6-Release +### 新增 +- 自定义后台入口支持 +- CRUD、数据回收、敏感数据监控的多数据库支持 + +### 重构/优化/修复 +- 修复编辑时`unique`验证问题 +- 添加`symfony/http-foundation`依赖 +- 修复非超管对于新增的子级菜单规则可能显示异常的问题 +- 修复保存系统配置时可能刷新页面的问题 +- 选择数据表、选择数据源接口增加快速搜索支持 +- 优化`git`对模块文件的忽略规则 +- 更换已经失效的`npm`源 +- 优化后台规则管理细节 +- 安装器优化 + +## v2.0.5-Release +### 新增 +- 更新所有前端依赖`Vite5+ElementPlus2.4` +- 模块更新`composer.json`中的`config`字段实现 + +### 重构/优化/修复 +- 优化前台页脚样式 +- 优化路由动态注册 +- 优化获取第一个菜单的函数 +- 优化通用搜索按钮样式 !142 +- 优化系统配置数据模型 +- 优化可视化`CRUD`设计器的样式 +- 后台会员管理中的会员分组设为必填 +- 默认不再内置`easywechat`依赖,添加`guzzlehttp`依赖(受益于模块可以调整`composer.json`的`config`) +- 系统配置中的快捷配置入口使用路由`name`而不再是路由`path` +- 语言包按需加载映射表中的后台入口路径由字面量改为变量 +- 管理员登录接口返回的路由路径使用的字面量改为变量 +- `eslint`和`prettier`与`ESM`的兼容 +- 修复系统配置变量值为`0`时可能无法回显的问题 +- 修复可视化`CRUD`富文本字段默认值为`null`时表单打不开的问题 +- 修复设置浏览器标题的函数可能失败的问题 +- 修复初次打开前端时页面标题不完整的问题 +- 修复双栏模式子级菜单跳转异常的问题 close #I7ZECR +- 其他细节 + +## v2.0.4-Release +### 新增 +- 增加静态路由目录,自动加载其中所有文件并注册 +- 表格快速搜索关键词可通过类实例访问 +- 模块上传安装时对系统版本、模块互斥和依赖关系进行检测 +- 模块纯净模式安装(移动模块文件到系统而不是复制) +- 模块可以通过上传安装来完成升级 +- 自定义远程下拉初始值操作符号支持 + +### 重构/优化/修复 +- 可视化CRUD:生成的菜单默认开启缓存 +- 可视化CRUD:高级配置中显示的字段信息优化 +- 可视化CRUD:非新建设计时,总是显示表设计变更预览的按钮 +- 可视化CRUD:优化字段临时数据备份机制、优化字段重复检测 +- 终端不再使用单独的控制器 +- 终端优化命令执行日志缓冲区清理逻辑 +- 终端执行`composer`相关命令时,关闭交互询问 +- 表单弹窗在小屏设备上的样式优化 +- 优化创建`zip`的方法 +- 表格数据刷新优化 +- 日志数据入库时的编码兼容性优化 +- 基础静态路由路径使用的字面量改为变量 +- 生成代码的`import`语句整理 +- 去掉管理员登录成功时的通知提醒信息 +- 优化模块上传安装时的提示信息 +- WEB端环境变量加载优化 +- 升级`topthink/think-migration`依赖 +- 去除已经失效的`travis.yml`文件 +- 删除`web`目录内多余的`README.md`文件 +- 修复表格自动识别筛选条件功能中,`query`改变不能触发重新筛选的问题 +- 修复`nuxt工程`新增依赖时没有备份`package.json`的问题 + +## v2.0.3-Release +### 新增 +- 前台菜单支持无限层级嵌套 +- 独立出表格内部组件自动调用的鉴权方法,便于开发者重写 +- 前端公共函数`auth`可以通过传递菜单规则的 name 鉴权 +- 删除 web 端中多余的默认头像文件 +- 会员中心增加可选的 query 指定会员登录成功后自动跳转的URL +- 上传类增加一个`setTopic`方法 + +### 重构/优化/修复 +- 优化控制台菜单规则(增加了查看权限节点) +- 公共函数`get_table_list`默认不再去除表注释中的:后缀`表`字 +- 管理员管理中的分组字样改为角色组 +- 角色组管理增加权限说明的备注 +- 取消前台用户头像必填 +- 重置公共搜索表单时,自动刷新表格 +- 内置的后台功能中默认ID字段搜索时不再使用模糊查询 +- 不再需要清理`css charset`,所以删除多余代码 +- 去除多余的 htmlspecialchars 参数(富文本入库可能被多次转义) +- 修复顶栏菜单在非激活菜单右击关闭全部标签会清空标签页的问题 +- 修复头像保存时可能丢失的问题,优化头像URL出入库逻辑 +- 修复用户默认的头像URL可能被入库的问题 +- 修复上传组件图片拖拽排序在添加时无效的问题 +- 修复文件名为中文时可能上传失败的问题 +- 可视化CRUD:修复生成单选框组件时报错的问题 + +## v2.0.2-Release +### 新增 +- 上传图片组和文件组时支持拖拽排序 +- 增加管理员和会员的登录态保持时间配置项 +- 新增清理`XSS`代码的公共函数 + +### 重构/优化/修复 +- 从服务端限制`WEB终端`仅限超管执行命令 +- 表格公共搜索操作符不再使用不利于传输的符号形式 +- 为`a`标签添加`rel="noopener noreferrer"` +- 优化请求输入变量的默认过滤规则 +- 可视化CRUD:存在富文本组件时,默认对`XSS`代码进行清理 +- 可视化CRUD:远程下拉参数预填弹窗增加滚动条,避免小屏显示异常 +- 可视化CRUD:富文本字段默认值改为`empty string` +- 可视化CRUD:修复`php8.1`下从数据表开始可能报错的问题 +- 修复远程下拉脱焦后会有个多余的请求的问题 +- 修复远程下拉组件`row`事件可能失效的问题 +- 修复会员登录态过期后不会触发重新登录的问题 +- 修复小屏设备中后台最后一个菜单可能显示不全的问题 +- 修复顶栏会员中心菜单的下拉项无法显示的问题 + +## v2.0.1-Release +### 新增 +- 全局提供 mainScrollbarRef 以实现子组件操作滚动条 + +### 重构/优化/修复 +- 前端初始化请求和会员中心初始化请求合并为一个 +- 顶栏菜单在手机端的显示和交互优化 +- 优化会员中心个人资料页面小屏自适应 +- 会员余额和会员积分模型添加悲观锁 +- 删除 user 表中可能造成意外错误的唯一索引 +- 添加页面按钮时,隐藏链接地址的输入框 +- 远程下拉组件内部 select 属性绑定 +- 提交表单时操作方法名首字母小写 +- 修复安装模块时可能报异常的问题 +- 修复 symfony/var-dumper 依赖被锁定为 4.* +- 修复顶栏宽度在侧边栏折叠开启操作后宽度不正确 +- 修复模块安装、卸载等操作时管理员日志中标题为未知的问题 +- 修复管理员登录页不能响应暗黑模式开关的问题 +- 修复后台侧边菜单在小屏设备可能意外被隐藏的问题 +- 修复不能同时存在两个地区选择器的问题 +- 修复 el-table 原有属性失效的问题 +- 可视化CRUD:修复远程下拉多选字段后缀不为 _ids 时会生成重复方法的问题 +- 可视化CRUD:修复 enum 默认值为 0 时报错的问题 +- 可视化CRUD:修复生成的前端代码中对象 key 以数字开头时报错的问题 +- 可视化CRUD:修复编辑关联字段时可能不会更新表字段的问题 +- 可视化CRUD:MySQL text 和 blob 类型不能有默认值 + +## v2.0.0-Release +此版本有一些不兼容更新,建议在更新前参考:[v2.0.0不兼容更新](https://doc.buildadmin.com/guide/other/incompatibleUpdate/v200.html) +### 新增 +- 升级到`tp8.0.0`,升级所有后端依赖 +- 升级到`vue3.3`,升级所有前端依赖 +- 上传文件使用部分文件名作为前缀以便识别 +- 多富文本编辑器共存支持 +- 模糊搜索关键词可以含有百分号 +- 表格,单元格和公共搜索自定义渲染支持`slot`方式 +- 表格头组件增加多个插槽 +- 使用`Phinx`管理项目数据表,增加数据表管理类 +- 增加访问和操作文件系统的类 +- 可视化CRUD,修改设计且数据表内有数据时,不再删表重建,而是根据设计调整表结构 +- 可视化CRUD,单表多次关联支持、远程下拉字段名自动根据表名生成 +- 可视化CRUD,修复生成的远程下拉`pk`属性可能错误的问题 +- 可视化CRUD,实时的字段命名规则检查、字段名称重复检查 +- 可视化CRUD,增加当前不在开发环境提醒 +- 可视化CRUD,选择的表有成功生成的记录则建议从历史记录开始 +- 其他细节 + +### 优化/修复 +- 安装器优化 +- 公共语言翻译`key`全面大写开头 +- 内置`font-awesome` +- `WEB`终端执行日志显示样式优化,且输出支持换行 +- 完善前端端类型定义 +- 部分公共函数归纳为类 +- `array`输入组件可以设置数组项的标题 +- 可视化CRUD,修复远程下拉多选字段的公共搜索失效的问题 +- 云存储初始化时机优化 +- 修改菜单规则默认图标 +- 上传组件默认值为`null`时的处理 +- 修复后台基类 del 方法的数据权限失效的问题 +- 编程式删除系统配置分组时,该分组无配置项再删除 +- 同类函数参数命名统一、字段命名规则统一、参数命名规则统一 +- 默认折叠所有会员菜单规则 +- 优化点选验证码汉字集 +- 优化命令执行失败时的提示信息 +- 去除不必要的 controllerUrls +- `timeFormat`函数归类到公共文件中 +- `menu_rule`表名改为`admin_rule`,因为会员规则表名为`user_rule` +- 修复远程下拉组件在无数据时无提醒的问题 +- 修复热更新后鉴权按钮消失的问题 +- 其他细节 + +## v1.1.7-Release +### 新增 +- 升级点选验证码 +- 增加数据表命名规则的检查 +- 增加模块安装时对`Nuxt`工程的版本检测 + +### 重构/修复 +- 优化将字符串属性列表转为数组的函数 +- 为模块安装请求设置更长的请求超时时间 +- 修改高级配置文字颜色 +- 优化输入组件逻辑 +- `nuxt`模块改用标签进行筛选 +- 系统配置中配置分组不存在时不显示该配置项 +- 修复鼠标在时间选择组件上页面无法滚动的问题 !125 +- 修复下拉面板滚动到视窗外隐藏时可能抛出错误的问题 !124 +- 其他细节 + +## v1.1.6-Release +### 新增 +- 上传组件增加实时上传进度的显示 +- 上传组件增加强制上传到本地的`props` +- 上传文件方法增加`AxiosRequestConfig`参数 +- 增加`remoteSelects`类型输入框 +- 后台会员规则管理增加顶栏会员菜单下拉项类型 + +### 修复/重构 +- 后台关闭`tab`,自动返回到上一个`tab`时不带`query`的问题 +- 后台菜单规则管理中的组件路径字段自动转换分隔符号 +- 会员规则无组件的不注册到菜单项 +- 优化系统配置逻辑 +- 优化可视化CRUD拖拽交互 +- 因`web-nuxt`提高`API`节流阈值 +- 限定`pinia`版本号 +- 前台初始化请求防抖 +- 优化会员中心跳转到第一个菜单的逻辑 +- 前台动态路由注册时可根据`name`从已注册路由分析父级路由 +- 不再额外向`element`安装器传递`i18n`选项 +- 优化前台动态菜单样式 +- 前台`link`类型的顶栏菜单打开失败的问题 +- 添加表单默认值赋值改为深拷贝 +- 优化鉴权指令 +- 优化输入组件用于代码提示的类型定义 +- 修复上传组件`onChange`重复触发的问题 +- 修复查询条件 [NOT] NULL 报错的问题 +- 修复系统配置的远程下拉多选值不能正常选中的问题 + +## v1.1.5-Release +### 新增 +- 全面使用`文字点选验证码`,配合服务端二次验证,为您的重要资源保驾护航 +- 增加前台普通路由、顶部导航栏、权限节点的可视化管理 +- 远程下拉增加获取被选中项完整对象的事件 +- `可视化CRUD`常用字段增加`雪花ID`类型 +- `可视化CRUD`生成公共模型代码的支持 +- `可视化CRUD`增加快速设定代码相对位置的功能 +- `可视化CRUD`根据字段字典自动重新生成字段的数据类型,避免部分情况需要手动拼接的问题 +- `可视化CRUD`的字段设计数据导出以便开发者使用 +- `baTableApi`当操作不存在时,创建自定义操作 +- 增加创建表单项数据的组件 +- 前端增加身份证号验证器 +- 增加快速搜索前置插槽 +- 增加将字符串属性列表转为数组的公共函数 +- 增加通过`Git`部署项目至线上时的忽略规则建议 +- 增加备用的`font-awesome CDN`和完善注释 + +### 修复/重构 +- 更新所有前端依赖 +- 优化类型定义 +- 不再加载`lang/pages`中的语言包 +- 优化系统配置保存时的代码逻辑 +- 从数据表开始时不读取表前缀错误的数据表 +- 远程下拉菜单超出视窗时自动隐藏 +- 修复会员分组管理回车保存会刷新页面的问题 +- 菜单折叠后菜单图标垂直对齐 +- 公共搜索查询操作符 FIND_IN_SET 支持传递数组 +- 将渲染为 tags 的字段的默认搜索操作符设定为 FIND_IN_SET +- 禁止管理员添加拥有自己全部权限的分组 +- 上传函数请求超时时间修改为无限制避免超时 +- CRUD下拉框默认的字段数据类型由`tinyint`改为`enum` +- 修复单元格自定义渲染时,改变 data 不重新渲染的问题 +- 修复`Tree类`子节点组装方法漏传`pk`的问题 +- 修复CRUD远程下拉的公共搜索无数据的问题 +- 修复CRUD从数据表加载的字段默认值为null,却被识别为空字符串的问题 +- 修复CRUD数字输入组件的默认值无法通过验证的问题 +- 修复CRUD中支持多选的表单元素名称错误的问题 +- 修复CRUD富文本字段生成失败的问题 +- 修复会员管理建立模型验证后密码验证不通过的问题 +- 修复php8.1+mysql8.0兼容性问题 +- 修复一处 php8.2 不兼容 +- 修复公共搜索未传递值时任然拼装查询条件的问题 +- 其他细节优化 + +## v1.1.4-Release +### 新增 +- 模块安装增加依赖模块检测 +- 新的依赖管理类 +- 通过模块市场为`WebNuxt工程`安装模块的实现 + +## v1.1.3-Release +### 新增 +- `WebNuxt`工程发布,可通过模块市场安装,亦可直接访问[代码仓库](https://gitee.com/wonderful-code/build-admin-nuxt) +- 增加可选的管理员和会员单点登录功能 +- 增加直接登录会员账号的方法 +- 新增双栏布局效果,顶部栏加左侧栏同时存在 +- 确保无需登录的接口不会抛出token过期的异常 +- 增加表格普通侧边按钮类型 +- 增加根据当前路由路径快捷获取语言翻译的函数 +- 后台模块管理增加我的模块按钮 + +### 修复/重构 +- 远程下拉增加信息提示框 +- 文件上传失败则不在上传列表显示 +- 调整composer依赖 +- 可视化CRUD生成的语言包代码按需加载实现 +- 优化数据行拖拽排序的逻辑 +- 优化数据行侧边按钮的类型定义 +- 模块封面图片开启懒加载 +- 修改管理员日志的data字段类型为longtext +- 修复添加窗口中存在富文本字段时可能无法关闭的问题 +- 修复管理员无权限时跳回首页或被注销的问题 +- 修复表格行侧边 confirmButton 按钮 disabled 无效的问题 +- 修复从历史记录开始时,远程下拉参数无法选择的问题 +- 修复菜单规则只添加为菜单时无法打开的问题 +- 修复从数据表开始时字段分析可能出错的问题 +- 修复行侧边按钮 disabledTip 属性无效的问题 +- 修复前台iframe菜单无法打开的问题 +- 修复远程下拉监听值为`null、undefined`时报错的问题 +- 修复后台因为管理员模型登录时间获取器导致登录判断报错问题 + +## v1.1.2-Release +- 此版本有一些不兼容更新,建议在更新前参考:[v1.1.2不兼容更新](https://doc.buildadmin.com/guide/other/incompatibleUpdate/v112.html) +- 页面组件与页面语言包全部**按需加载**,大幅减少首屏加载大小 +- 更新系统前端的所有可更新依赖到最新稳定版本 +- 可视化CRUD增加字段名称检查 +- 禁止管理员自己删除自己 +- `isAdminApp`方法支持传递`path`进行判断 +- `mixins`代码移入到新建的组件内统一管理 +- 修复可视化CRUD生成的代码中`-1`没有加引号的问题 +- 修复后台单栏布局只有一个菜单时菜单不显示的问题 +- 修复模块发布新版本不能减少旧版本模块文件的问题 +- 修复模块更新脚本因未加载而不能执行的问题 + +## v1.1.1-Release +### 新增 +- 增加前台会员中心埋点(配合模块为会员中心增加功能) +- 编程式添加会员菜单规则支持 + +### 优化 +- 默认关闭监听SQL +- 服务端返回302时自动删除前端的用户token +- 系统配置保存时只效验和提交当前页的表单数据 +- 优化用户信息显示 +- 优化`getTableFieldList`接口 +- 统一接口响应数据`key`的命名规范 +- 默认不再允许上传pdf格式的文件 +- `Token::check`方法增加过期不抛出异常时的逻辑 + +### 修复/重构 +- 修复模块下载安装时解压目录名可能错误的问题 +- 文件后缀名大写时无法上传的问题 +- 修复关联表名带下划线生成的代码出错 +- 修复上传组件一处类型检查错误 +- 会员中心的用户名默认不再禁止修改 +- 会员修改绑定信息时账户验证通过的token在使用后立即删除 +- 自定义排序字段,模型onAfterInsert方法生成错误 +- 修复生成三级以上的菜单规则时,无法为非超管分配权限的问题 +- 修复可视化CRUD删除字段时可能出现报错的问题 +- 去除多余的会员菜单规则 +- 模块市场中与官网相关的URL修改 +- 修复预览图片宽高较大时超出对话框的问题 +- 修复公共搜索只有一个输入框时会触发表单的默认行为的问题 +- 其他细节 + +## v1.1.0-Release +### 新增 +- **可视化CRUD新增多种快捷组件,并修复已知问题** +- 模块可以在启用和禁用脚本内备份配置数据和运行文件 +- 模块支持向main.ts和App.vue添加代码 +- 新增会员修改绑定信息(手机号、邮箱)支持 +- 文件图片上传增加隐藏附件选择器的选项 +- 远程下拉组件增加 label 格式化函数的属性 +- 增加颜色选择器(baInput) +- 完善上传组件的onChange等事件 + +### 优化 +- 优化后台登录页面自适应效果 +- 优化首页和会员中心菜单样式 +- 优化终端警告信息显示效果 +- 优化账户名验证错误时的提示消息 +- 详情弹窗可以点击弹窗外部进行关闭 +- 禁止管理员向自己的角色组添加其他管理员 +- 其他细节... + +### 修复/重构 +- 修复后台编辑弹窗缩放后显示异常的问题 +- 修复在第一个tab右击菜单中关闭全部tab时报错的问题 #10 +- 修复远程下拉可能出现已聚焦却无选项的问题 +- 修复添加管理员和会员时可能出现表单验证信息的问题 +- 修复模块管理中会员登录态过期后不自动注销的问题 +- 修复系统配置中的数字输入框编辑可能无法保存的问题 +- 修复系统配置中的上传组件从附件选择器中选择附件保存无效的问题 +- 增加vue-qr依赖 +- 增加忽略Desktop.ini + +## v1.0.9-Release +- **新增可视化CRUD** +- 去除原命令行CRUD代码生成功能(已打包为模块,按需下载) +- 添加表单颜色选择器和表格内的颜色渲染方式 +- 侧边按钮增加 disabled 判定方法和按钮额外属性 +- 增加获取数据表字段的辅助函数 +- 增加获取一个目录所有文件的辅助函数 +- 后台手机端自适应优化 +- 公共搜索输入框可一键清空 +- 远程下拉默认值优化 +- 优化版本类/扩展类 +- 优化树状表格 +- `DELETE`请求的body改为query以兼容域名CNAME解析 +- 在main.ts导入display.css而不是分散导入 +- 修复url带参跳转时表格可能报错的问题 +- 修复只添加为路由的菜单规则不能刷新的问题 +- 修复验权时可能出现错误的问题 +- 修复Linux下删除空文件夹可能失败的问题 +- 修复自建模块处于未安装状态时显示异常的问题 +- 会员切换登录注册时重置表单项 !70 +- 会员切换到注册表单时清理用户名 +- 管理员分组的上级分组禁止为自身 +- 模块管理用户信息弹窗数据更新 +- 本地模块更新日志显示异常的问题 + +## v1.0.8-Release +- **ThinkPHP发布6.1.0版本安全更新**,修正了序列化漏洞问题和优化多语言判断机制。 +- 去除`lodash`依赖改用`lodash-es`(后者同时为`Element plus`的依赖,与框架更契合,包体积更小) +- 修复跨域代理示例的规则错误的问题 +- 合并打包css文件、增加分包配置示例 +- 完善工具函数注释、优化相关代码 +- 模块详情展示效果优化 + +PS: 框架对`TP`的版本限定为`^6.0.0`,针对tp本次安全更新,git包的开发者可以直接`composer update`,若没更新到`v6.1.0`请更换`composer`源,`BuildAdmin`发新版本主要是为了更新完整包和资源包。 + +## v1.0.7-Release +- 富文本编辑器通过模块市场按需安装(框架不再内置),以方便选择不同的编辑器 +- **增加附件资源库** +- 前台用户登录状态检测优化 +- 事件监听优化 +- 附件管理优化 +- 单元格图片预览弹窗可以通过点击遮罩层关闭 +- 自定义表格页码相关优化 +- 搜索事件Data的类型定义优化 +- 修复特殊类型文件上传时可能被限制的问题 +- 优化敏感数据修改监听的逻辑 +- 修复 typescript-eslint 依赖可能安装失败的问题 +- 优化表单密码验证规则 + +## v1.0.6-Release +- Table组件增加多个插槽位,提供`el-table-column`支持 +- 增加WEB端文件上传扩展文件 +- 增加文件上传前的类型与大小检查 +- 增加文件单位转字节的函数 +- 增加系统配置管理类 +- 新增以编程的方式删除依赖的功能 +- 新增模块安装时对互斥模块的检测 +- 增加多个系统预置事件定义 +- 增加发送邮件接口 +- 增加发送短信接口 +- 增加手机验证账户验证方式 +- 增加responseType json 以外类型的处理逻辑 +- 增加编程式添加系统配置中的快捷配置入口的方法 +- 增加清理浏览器缓存的快捷按钮 +- 升级element-plus版本到2.2.17 +- 优化表单验证 +- 优化表格的单元格渲染 +- 优化多处类型定义 +- 优化后端数据库字段读取函数 +- 优化数据管理中数据表和控制器列表的加载 +- 优化控制台页面暗黑模式下的文字颜色 +- 优化模块安装时对互斥模块的检测 +- 优化上传组件 +- WEB端语言包文件无限层级读取 +- 表格顶部菜单按钮图标在暗黑模式时的样式优化 +- 禁用模块时可以选择保留一些由模块添加的依赖项 +- 模块状态不为已安装时不定义AppInit事件 +- 资源完整路径处理时加入上传文件cdnurl的判断 +- Table组件不再使用事件巴士监听相关事件 +- 删除文件不存在的附件记录前额外检查是否是本地存储 +- 附件管理删除记录时同时删除文件,并提供友好提示信息 +- 去除Table组件的action事件 +- 去除TableHeader组件的action事件 +- 输入组件帮助信息显示效果优化 +- 修复对表格第三次排序时(取消排序时)失效的问题 +- 修复部分后台功能缓存设置不生效的问题 +- 修复多选远程下拉选择一次面板就收缩和无右侧箭头的问题 +- 修复菜单规则管理中图标选择器在窗口关闭后残留的问题 +- 修复图标选择器选取图标后无法再次显示的问题 +- 模块安装器去除等待热更新步骤 +- 修复预设表格页码或单页加载数量无效的问题 +- 修复主动添加的系统配置不能删除的问题、格式化代码 +- 修复模块依赖冲突检测可能异常的问题 +- 修复安装云存储模块后,本地上传模块时被上传到云存储的问题 +- 修复用户修改头像时顶栏和侧栏的头像图片可能404的问题 +- 修复模块依赖冲突时,模块的启用脚本不执行的问题 +- 修复模块安装完成后异常的显示了`模块已安装`的错误弹窗 +- 管理员管理和会员管理接口中的敏感信息剔除 +- 移除多余的IE相关判断 +- 其他优化... + +## v1.0.5-Release Preview +- 新增**模块市场**,一键安装某个功能、单页或是纯前端技术栈的学习案例项目等等,随时随地为系统添砖加瓦,系统能够自动维护`package.json`和`composer.json`并通过内置终端自动完成模块所需依赖的安装。 +- 新增前后台**暗黑模式**支持 +- 安装器不再要求数据表前缀必填、安装验证逻辑优化 +- 终端原`popen`实现改为`proc_open` +- 重新实现图片文件上传组件 +- 单元格渲染为 tags 时支持effect、size等属性 +- url的点击事件增加当前行数据的参数 +- 为管理员管理功能开启数据限制 +- 后台Iframe相关多个细节完善 +- 生成代码文件中的缩进改为空格而不是tab +- 访问后端接口时,不再必须通过index.php入口文件 +- 放行所有options请求 +- 修复顶部菜单columnDisplay和comSearch同时不存在时,仍然会残留一个div边框的问题 +- 修复菜单规则管理中无法直接开关规则的问题 +- 修复单选远程下拉清理输入框值后无法再读取全部远程数据的问题 +- 修复axios封装在showCodeMessage=false时请求无后续处理的问题 +- 修复表字段名称为length时CRUD生成语言包报错 +- 修复删除菜单规则时未同时删除子级菜单的问题 +- 修复角色组的资料可被越权修改的问题 +- 修复触发到API请求节流时报错为跨域的问题 +- 修复表格顶部下拉菜单复选框和按钮组占位 +- 修复已上传文件丢失后,无法再次上传的问题 +- 修复有默认值的情况多文件同时上传时文件列表错乱的问题 +- 修复隐藏菜单情况刷新页面再展开菜单会导致顶部tab异常的问题 +- 修复后台菜单折叠状态刷新后丢失的问题 +- 修复管理员昵称过长时首次登录昵称被换行的问题 +- 修复登录页面管理员头像位置自适应异常的问题 +- 其他细节... + +## v1.0.3-Release +- 完善英文语言包 +- 公共搜索增加远程下拉组件支持 +- 增加数据权限控制支持:不同管理员只可以查看有权数据行 的权限控制功能 +- 自动识别表主键并添加到生成的模型属性 +- 后台终端按钮只为超级管理员显示 +- 关联表指定远程select下拉字段 +- 增加表格快速搜索字段是否存在的检测 +- 增加以type为后缀的enum等类型字段可被生成为单选框 +- 站点系统配置缓存支持 +- 增加会员中心开关 +- 会员注册时通过API获取可用的验证方式、会员注册验证邮件实现 +- 完善会员规则管理 +- 表格公共搜索->对开关组件状态的搜索优化 +- 公共搜索显示状态可通过baTable实例控制 +- 验证码类支持到php8.1 +- 去除file_list后缀的字段生成为多文件上传组件(与下拉组件后缀存在冲突) +- 优化角色组权限分配 +- 优化默认管理员分组拥有的权限节点 +- 数据回收和敏感数据规则中,不再使用带前缀的表全名 +- 安装器`npm install`失败自动重试一次 +- 安装器增加检测当前端口是否是8000 +- 安装器完成页面增加重新安装按钮 (只清理缓存,不会删除install.lock) +- 修复敏感数据规则管理中删除敏感字段时的显示异常问题 +- 修复表格时间字段未提供值时显示为当前时间的问题 +- 修复管理员个人资料表单中的签名无法被重置的问题 +- 修复后端默认应用不存在的问题 +- 修复字段类型为char(1)时,生成的单选框无字典数据 +- 修复数据表主键不为ID时编辑表单无法保存、表格无法排序等问题 +- 修复顶栏标签全屏时,取消全屏的按钮会遮挡表格顶部操作按钮的问题 +- 修复前后台路由规则名称重复时可能导致错误跳转问题 +- 修复手机号验证正则无法识别部分已知号码的问题 +- 修复系统配置中的禁止访问IP和时区配置项无效的问题 +- 修复系统配置中富文本编辑器层级过高和无法编辑的问题 +- 修复系统配置中时间和城市类型的输入组件无法正常录入值的问题 +- 修复数据表没有注释时不生成菜单规则的问题 +- 修复表格右侧无buttons,且要初始化排序时会报错的问题 +- 修复单元格渲染为tag时值为0等无法显示的问题 +- 修复images字段名称后缀不能生成为图片上传组件的问题 +- 修复管理员日志权限控制不完善的问题 +- 修复管理员可通过后台使自己部分权限丢失的问题 +- 修复管理员分组被禁用后还可以被远程select选择的问题 +- 修复删除管理员时没有同时删除管理员的分组数据的问题 +- 修复远程下拉搜索结果无法选中的问题、同时优化下拉选项面板显示逻辑 +- 修复菜单规则和会员分组被禁用后在远程select中依然可以选择的问题 +- 修复重复安装系统时.env-example被多次写入数据库资料的问题 +- 修复数据安全监听中表不存在时的日志记录异常 +- 其他细节优化 + +## v1.0.2-Release +- **增加前台会员中心** +- 安装器增加NPM源自动设置选项 +- CRUD:增加tinyint(1)类型的字段在符合条件下自动生成为单选框 +- baInput:单选/复选框/下拉框默认值传递数字支持 +- baInput:优化年份选择器 +- baInput:文件上传组件增加预览响应 +- web端布局(layouts)内的目录结构调整 +- 增加跨域代理配置示例,提供给有需要的小伙伴(感谢@ttdms) +- 增加邮件发送类、增加phpMailer依赖、系统邮件配置增加测试邮件发送功能 +- 后台右侧菜单增加清理缓存按钮 +- 会员余额以分为单位保存到数据库,并在模型层做转换处理 +- 附件管理增加上传会员字段 +- 优化富文本编辑器滚动条样式、通用弹窗表单增加圆角 +- 更新wangeditor依赖版本到5.1.1 +- 增加会员资料的状态商店、优化后台登录状态判断逻辑 +- 表格开关类型字段的公共搜索使用下拉框渲染 +- 重构了站点首页 +- 更新font-awesome的资源地址到国内CDN +- 去除build:online命令,使用build代替 +- 修复关闭管理员登录验证码后,登录任然报错验证码不存在的问题 +- 修复富文本编辑器上传文件时提示未配置上传URL的问题 +- 修复表格中的tag和url在无值时任然显示组件的问题 +- 修复侧边菜单栏的非激活菜单项的图标颜色不符合直觉的问题 +- 修复CRUD生成的代码在添加数据时权重字段无效的问题 +- 修复部分日志记录没有标题的问题 +- 修复已在后台或会员中心再跳转到模块首页时会卡在loading页面的问题 +- 修复系统配置编辑时提示变量名不能为空的问题 +- 修复后台表格右侧字段下拉没有高度限定的问题、修复一处样式缺失 +- 修复管理员注销时偶尔需要权限的问题 +- 修复默认的数据回收规则配置不完整的问题 +- 修复表格顶部的批量操作按钮在未选择数据时依然可点击的问题 +- 修复表格内tag在公共搜索中被渲染为下拉框的问题 +- 修复管理员登录页面编译后可能存在的username未定义报错 + +## v1.0.1-Release +- 增加终端配置功能 +- 终端增加是否运行于安装服务下的检测 +- FormItem增加额外的块级输入提示选项 +- 优化管理分组权限节点选择时的样式 +- 语言包整理 +- 额外暴露i18n实例,实现在非setup中使用语言翻译 +- 新增站点配置状态store +- 修复bug、完善README + +## v1.0.0-beta +**公共测试版本** +- 内置WEB终端 +- 一键CRUD +- Pinia +- 可视化配置+动态加载路由 +- 细粒度权限控制 +- 数据修改保护、数据全局回收 +- ... \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..21c42cd --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 妙码生花 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..d5d6c89 --- /dev/null +++ b/README.md @@ -0,0 +1,148 @@ +
+
+ +

BuildAdmin

+

使用流行技术栈快速创建商业级后台管理系统

+ 官网 | + 演示 | + 社区 | + 文档 | + 加群 | + 视频介绍 | + Gitee仓库 | + GitHub仓库 +
+
+

+ + vue + + + vue + + + element plus + + + typescript + + + vite + + + vite + + + license + +

+ +
+
+ +
+
+ +### 介绍 +🌈 基于 Vue3.x + ThinkPHP8 + TypeScript + Vite + Pinia + Element Plus 等流行技术栈的后台管理系统,支持常驻内存运行、可视化 CRUD 代码生成、自带 WEB 终端、自适应多端、同时提供 Web、WebNuxt、Server 端,内置全局数据回收站和字段级数据修改保护、自动注册路由、无限子级权限管理等,无需授权即可免费商用,希望能帮助大家实现快速开发。 + +✨ 关于 `Star` 的小小期待 ✨ + +~~文档和演示站的「入场券」是点亮 Star~~ 哈哈哈,开个玩笑,实际上**您不需要任何「门槛」即可访问源码、文档和演示站**,在您丝滑体验文档与强大功能的同时,我们有个温暖的请求 —— 若 `BuildAdmin` 让您眼前一亮,请为我们点亮一颗 `Star`,这将是一次开发者间最浪漫的「确认过眼神」,亦可助我们向本应「自由开放」的开源界证明:优秀的项目我会发自内心的点亮 Star ~(而不是像某些同类产品哪样,将 Star 作为文档或演示站的「强制交换」条件) + +### 主要特性 +**🚀 CRUD 代码生成:** +图形化拖拽生成后台增删改查代码,自动创建数据表;大气且实用的表格,多达 24 种表单组件支持,行拖拽排序,受权限控制的编辑和删除等等,并支持关联表,可为您节省大量开发时间。 + +**💥 内置 WEB 终端:** +在后台管理系统领域,我们率先将终端深度集成于系统的 `本地开发环境` 中,它能实现很多理想中的功能,比如:虽然是基于 Vue3 的系统,但在安装时并不需要手动的执行 `npm install` 命令;CRUD 代码生成完毕后,自动调用 `prettier` 格式化代码等。本终端设计上能够调用环境变量中的任意命令,天花板极高,后续将为您提供更多方便、快捷的服务。 + +**👍 流行且稳定的技术栈:** +除了基于 `ThinkPHP8` 前后端分离架构外,我们的 `Vue3` 使用了 `setup、useTemplateRef` 等,状态管理使用 `Pinia`,并使用了 `TypeScript、Vite` 等可以为你的知识面添砖加瓦的技术栈。使用流行技术栈自然代表本框架兼容相关(Vue3+TP8+PHP8.x)生态,生态系统内数不清的库、包、组件,能够使您的开发事半功倍。 + +**🎨 模块市场:** +一键安装数据导入导出、短信发送、支付、云存储、富文本编辑器,甚至 CMS、商城、社区、纯前端技术栈的学习案例项目等,随时随地为系统添砖加瓦,系统能够自动维护 `package.json` 和 `composer.json` 并通过内置终端自动完成模块所需依赖的安装。 + +**🔀 前后端分离:** +项目的 `web` 文件夹内包含: `干净`(不含后端代码)、`完整`(所有前端代码文件均在此内)的前端代码文件,代码和部署均可前后分离,对前端开发者友好,作为纯前端开发者,您可以将 BAdmin 当做学习与资源的社群,本系统可为您准备好案例和模板等所需要的环境,而您只需专注于学习或工作,不需要会任何后端代码!(邀您:[和我们一起](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=paVQA1dlpsVNHTla-ZAts6e4pPK4va9R&authKey=Eto0dq9DOuYldJPl6URFAXXHlG2AFQtPUBxNHEByEiuSg9OraxMniXIaWFt46OKi&noverify=0&group_code=1039646575) ) + +**⚡️ 常驻内存:** +系统内置的功能均可常驻内存运行,享受比传统框架快上数十倍的性能提升!目前 [Workerman 模块](https://modules.buildadmin.com/workerman) 可提供框架的常驻内存 `HTTP` 服务,同时该模块还提供了开箱即用的 `WebSocket` 服务。 + +**🚚 按需加载:** +前端的页面组件和语言包均是在使用到它们时,才从网络异步加载,服务端则是基于 `TP8` 和 `PSR` 规范,天生拥有真正的按需加载能力,所以,您无需考虑 `我并不需要多语言、我并不需要某个后台功能` 这类的问题,不需要不使用或隐藏即可。 + +**🌴 数据回收与反悔:** +内置全局数据回收站,并且提供字段级数据修改记录和修改对比,随时回滚和还原,安全且无感。 + +**✨ 高颜值:** +提供三种布局模式,其中默认布局使用无边框设计风格,它并没有强行填满屏幕的每一个缝然后使用边框线进行分隔,所有的功能版块,都像是悬浮在屏幕上的,同时又将屏幕空间及其合理的利用了。 + +**🔐 权限验证:** +可视化的管理权限,然后根据权限动态的注册路由、菜单、页面、按钮(权限节点)、支持无限父子级权限分组、前后端搭配鉴权,自由分派页面和按钮权限。 + +**📝 未来可期:** +我们正在持续维护系统,并着手开发更多基础设施模块,按需一键安装,甚至提供开箱即用的各行业完整应用。 + +**🧱 一举多得:** +后台自适应 PC、平板、手机 等多种场景的支持,轻松应对各种需求。 + +**💖 其他杂项:** +角色组/管理员/管理员日志、 会员/会员组/会员余额、积分日志、系统配置/控制台/附件管理/个人资料管理等等、更多特性等你探索... + +### 安装使用 +💫 我们提供了完善的文档,对于熟悉 `ThinkPHP` 和 `Vue` 的用户,请使用大佬版:[快速上手](https://doc.buildadmin.com/guide/install/start.html) ,对于新人朋友,我们额外准备了各个操作系统的从零开始套餐:[Windows从零到一](https://doc.buildadmin.com/guide/install/windows.html) | [Linux从零到一](https://doc.buildadmin.com/guide/install/linux-bt.html) | [MacBook安装引导](https://doc.buildadmin.com/guide/install/macBook.html) + +### 联系我们 +- [演示站](https://demo.buildadmin.com) 账户:`admin`,密码:`123456`(演示站数据无法修改,请下载源码安装体验全部功能) +- [问答社区:ask.buildadmin.com](https://ask.buildadmin.com) +- [官方网站:uni.buildadmin.com](https://uni.buildadmin.com) +- [文档:doc.buildadmin.com](https://doc.buildadmin.com/) +- 加群:[687903819(>960/1000)](https://jq.qq.com/?_wv=1027&k=QwtXa14c)、[751852082(>1990/2000)](https://jq.qq.com/?_wv=1027&k=c8a7iSk8)、[1039646575](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=paVQA1dlpsVNHTla-ZAts6e4pPK4va9R&authKey=Eto0dq9DOuYldJPl6URFAXXHlG2AFQtPUBxNHEByEiuSg9OraxMniXIaWFt46OKi&noverify=0&group_code=1039646575) +- [Gitee仓库](https://gitee.com/wonderful-code/buildadmin)、[GitHub仓库](https://github.com/build-admin/BuildAdmin) +- [备用文档:docs.buildadmin.net](https://docs.buildadmin.net/) +- [官方邮箱 hi@buildadmin.com](mailto:hi@buildadmin.com) + +### 项目预览 +| | | +|---------------------|---------------------| +|![登录](https://doc.buildadmin.com/images/readme/login.gif)|![控制台](https://doc.buildadmin.com/images/readme/dashboard.png)| +|![布局配置](https://doc.buildadmin.com/images/readme/layout.png)|![表格](https://doc.buildadmin.com/images/readme/admin.png)| +|![表单](https://doc.buildadmin.com/images/readme/user.png)|![系统配置](https://doc.buildadmin.com/images/readme/config.png)| +|![数据回收规则](https://doc.buildadmin.com/images/readme/data-recycle.png)|![数据回收日志](https://doc.buildadmin.com/images/readme/data-recycle-log.png)| +|![敏感数据](https://doc.buildadmin.com/images/readme/sensitive-data.png)|![菜单](https://doc.buildadmin.com/images/readme/menu.png)| +|![单栏布局](https://doc.buildadmin.com/images/readme/layout-3.png)|![经典布局](https://doc.buildadmin.com/images/readme/layout-2.png)| + +### 特别鸣谢 +💕 感谢巨人提供肩膀,排名不分先后 +- [Thinkphp](http://www.thinkphp.cn/) +- [FastAdmin](https://gitee.com/karson/fastadmin) +- [Vue](https://github.com/vuejs/core) +- [vue-next-admin](https://gitee.com/lyt-top/vue-next-admin) +- [Element Plus](https://github.com/element-plus/element-plus) +- [TypeScript](https://github.com/microsoft/TypeScript) +- [vue-router](https://github.com/vuejs/vue-router-next) +- [vite](https://github.com/vitejs/vite) +- [Pinia](https://github.com/vuejs/pinia) +- [Axios](https://github.com/axios/axios) +- [nprogress](https://github.com/rstacruz/nprogress) +- [screenfull](https://github.com/sindresorhus/screenfull.js) +- [mitt](https://github.com/developit/mitt) +- [sass](https://github.com/sass/sass) +- [echarts](https://github.com/apache/echarts) +- [vueuse](https://github.com/vueuse/vueuse) +- [lodash](https://github.com/lodash/lodash) +- [eslint](https://github.com/eslint/eslint) +- [prettier](https://github.com/prettier/prettier) +- [Sortable](https://github.com/SortableJS/Sortable) +- [v-code-diff](https://github.com/Shimada666/v-code-diff) +- [clicaptcha](https://github.com/hooray/clicaptcha) +- [phinx](https://github.com/cakephp/phinx) +- [jetbrains](https://www.jetbrains.com/) + +### 版权信息 +🔐 BuildAdmin 遵循 `Apache2.0` 开源协议发布,提供无需授权的免费使用。\ +本项目包含的第三方源码和二进制文件之版权信息另行标注。 + +### 支持项目 +💕 无需捐赠,如果觉得项目不错,或者已经在使用了,希望你可以去 [Github](https://github.com/build-admin/BuildAdmin) 或者 [Gitee](https://gitee.com/wonderful-code/buildadmin) 帮我们点个 ⭐ Star,这将是对我们极大的鼓励与支持。 diff --git a/app/.htaccess b/app/.htaccess new file mode 100644 index 0000000..3418e55 --- /dev/null +++ b/app/.htaccess @@ -0,0 +1 @@ +deny from all \ No newline at end of file diff --git a/app/AppService.php b/app/AppService.php new file mode 100644 index 0000000..6346741 --- /dev/null +++ b/app/AppService.php @@ -0,0 +1,22 @@ +request = $this->app->request; + $this->request->controllerPath = str_replace('.', '/', $this->request->controller(true)); + + // 控制器初始化 + $this->initialize(); + } + + /** + * 初始化 + * @access protected + */ + protected function initialize(): void + { + } + + /** + * 验证数据 + * @access protected + * @param array $data 数据 + * @param array|string $validate 验证器名或者验证规则数组 + * @param array $message 提示信息 + * @param bool $batch 是否批量验证 + * @return array|string|true + * @throws ValidateException + */ + protected function validate(array $data, array|string $validate, array $message = [], bool $batch = false): bool|array|string + { + if (is_array($validate)) { + $v = new Validate(); + $v->rule($validate); + } else { + if (strpos($validate, '.')) { + // 支持场景 + [$validate, $scene] = explode('.', $validate); + } + $class = str_contains($validate, '\\') ? $validate : $this->app->parseClass('validate', $validate); + $v = new $class(); + if (!empty($scene)) { + $v->scene($scene); + } + } + + $v->message($message); + + // 是否批量验证 + if ($batch || $this->batchValidate) { + $v->batch(); + } + + return $v->failException()->check($data); + } + +} diff --git a/app/ExceptionHandle.php b/app/ExceptionHandle.php new file mode 100644 index 0000000..b7f87e5 --- /dev/null +++ b/app/ExceptionHandle.php @@ -0,0 +1,119 @@ +app->isDebug()) { + // 调试模式,获取详细的错误信息 + $traces = []; + $nextException = $exception; + do { + $traces[] = [ + 'name' => $nextException::class, + 'file' => $nextException->getFile(), + 'line' => $nextException->getLine(), + 'code' => $this->getCode($nextException), + 'message' => $this->getMessage($nextException), + 'trace' => $nextException->getTrace(), + 'source' => $this->getSourceCode($nextException), + ]; + } while ($nextException = $nextException->getPrevious()); + + // 循环引用检测并直接置空 traces(比起循环引用导致的报错,置空后开发者能得到更多真实的错误信息) + if ($this->app->request->isJson()) { + $json = json_encode($traces, JSON_UNESCAPED_UNICODE); + if (false === $json && in_array(json_last_error(), [JSON_ERROR_DEPTH, JSON_ERROR_RECURSION])) { + $traces = []; + } + } + + $data = [ + 'code' => $this->getCode($exception), + 'message' => $this->getMessage($exception), + 'traces' => $traces, + 'datas' => $this->getExtendData($exception), + 'tables' => [ + 'GET Data' => $this->app->request->get(), + 'POST Data' => $this->app->request->post(), + 'Files' => $this->app->request->file(), + 'Cookies' => $this->app->request->cookie(), + 'Session' => $this->app->exists('session') ? $this->app->session->all() : [], + 'Server/Request Data' => $this->app->request->server(), + ], + ]; + } else { + // 部署模式仅显示 Code 和 Message + $data = [ + 'code' => $this->getCode($exception), + 'message' => $this->getMessage($exception), + ]; + + if (!$this->app->config->get('app.show_error_msg')) { + // 不显示详细错误信息 + $data['message'] = $this->app->config->get('app.error_message'); + } + } + + return $data; + } +} diff --git a/app/Request.php b/app/Request.php new file mode 100644 index 0000000..0c6df49 --- /dev/null +++ b/app/Request.php @@ -0,0 +1,26 @@ +proxyServerIp = $proxyServerIp; + } + } +} diff --git a/app/admin/common.php b/app/admin/common.php new file mode 100644 index 0000000..35b57da --- /dev/null +++ b/app/admin/common.php @@ -0,0 +1,34 @@ + config('buildadmin.api_url'), + 'timeout' => 30, + 'connect_timeout' => 30, + 'verify' => false, + 'http_errors' => false, + 'headers' => [ + 'X-REQUESTED-WITH' => 'XMLHttpRequest', + 'Referer' => dirname(request()->root(true)), + 'User-Agent' => 'BuildAdminClient', + ] + ]); + } +} \ No newline at end of file diff --git a/app/admin/controller/Ajax.php b/app/admin/controller/Ajax.php new file mode 100644 index 0000000..b344736 --- /dev/null +++ b/app/admin/controller/Ajax.php @@ -0,0 +1,217 @@ +setTitle(__('upload')); + $file = $this->request->file('file'); + $driver = $this->request->param('driver', 'local'); + $topic = $this->request->param('topic', 'default'); + try { + $upload = new Upload(); + $attachment = $upload + ->setFile($file) + ->setDriver($driver) + ->setTopic($topic) + ->upload(null, $this->auth->id); + unset($attachment['create_time'], $attachment['quote']); + } catch (Throwable $e) { + $this->error($e->getMessage()); + } + + $this->success(__('File uploaded successfully'), [ + 'file' => $attachment ?? [] + ]); + } + + /** + * 获取省市区数据 + * @throws Throwable + */ + public function area(): void + { + $this->success('', get_area()); + } + + public function buildSuffixSvg(): Response + { + $suffix = $this->request->param('suffix', 'file'); + $background = $this->request->param('background'); + $content = build_suffix_svg((string)$suffix, (string)$background); + return response($content, 200, ['Content-Length' => strlen($content)])->contentType('image/svg+xml'); + } + + /** + * 获取已脱敏的数据库连接配置列表 + * @throws Throwable + */ + public function getDatabaseConnectionList(): void + { + $quickSearch = $this->request->get("quickSearch/s", ''); + $connections = config('database.connections'); + $desensitization = []; + foreach ($connections as $key => $connection) { + $connection = TableManager::getConnectionConfig($key); + $desensitization[] = [ + 'type' => $connection['type'], + 'database' => substr_replace($connection['database'], '****', 1, strlen($connection['database']) > 4 ? 2 : 1), + 'key' => $key, + ]; + } + + if ($quickSearch) { + $desensitization = array_filter($desensitization, function ($item) use ($quickSearch) { + return preg_match("/$quickSearch/i", $item['key']); + }); + $desensitization = array_values($desensitization); + } + + $this->success('', [ + 'list' => $desensitization, + ]); + } + + /** + * 获取表主键字段 + * @param ?string $table + * @param ?string $connection + * @throws Throwable + */ + public function getTablePk(?string $table = null, ?string $connection = null): void + { + if (!$table) { + $this->error(__('Parameter error')); + } + + $table = TableManager::tableName($table, true, $connection); + if (!TableManager::phinxAdapter(false, $connection)->hasTable($table)) { + $this->error(__('Data table does not exist')); + } + + $tablePk = Db::connect(TableManager::getConnection($connection)) + ->table($table) + ->getPk(); + $this->success('', ['pk' => $tablePk]); + } + + /** + * 获取数据表列表 + * @throws Throwable + */ + public function getTableList(): void + { + $quickSearch = $this->request->get("quickSearch/s", ''); + $connection = $this->request->request('connection');// 数据库连接配置标识 + $samePrefix = $this->request->request('samePrefix/b', true);// 是否仅返回项目数据表(前缀同项目一致的) + $excludeTable = $this->request->request('excludeTable/a', []);// 要排除的数据表数组(表名无需带前缀) + + $outTables = []; + $dbConfig = TableManager::getConnectionConfig($connection); + $tables = TableManager::getTableList($connection); + + if ($quickSearch) { + $tables = array_filter($tables, function ($comment) use ($quickSearch) { + return preg_match("/$quickSearch/i", $comment); + }); + } + + $pattern = '/^' . $dbConfig['prefix'] . '/i'; + foreach ($tables as $table => $comment) { + if ($samePrefix && !preg_match($pattern, $table)) continue; + + $table = preg_replace($pattern, '', $table); + if (!in_array($table, $excludeTable)) { + $outTables[] = [ + 'table' => $table, + 'comment' => $comment, + 'connection' => $connection, + 'prefix' => $dbConfig['prefix'], + ]; + } + } + + $this->success('', [ + 'list' => $outTables, + ]); + } + + /** + * 获取数据表字段列表 + * @throws Throwable + */ + public function getTableFieldList(): void + { + $table = $this->request->param('table'); + $clean = $this->request->param('clean', true); + $connection = $this->request->request('connection'); + if (!$table) { + $this->error(__('Parameter error')); + } + + $connection = TableManager::getConnection($connection); + $tablePk = Db::connect($connection)->name($table)->getPk(); + $this->success('', [ + 'pk' => $tablePk, + 'fieldList' => TableManager::getTableColumns($table, $clean, $connection), + ]); + } + + public function changeTerminalConfig(): void + { + AdminLog::instance()->setTitle(__('Change terminal config')); + if (Terminal::changeTerminalConfig()) { + $this->success(); + } else { + $this->error(__('Failed to modify the terminal configuration. Please modify the configuration file manually:%s', ['/config/buildadmin.php'])); + } + } + + public function clearCache(): void + { + AdminLog::instance()->setTitle(__('Clear cache')); + $type = $this->request->post('type'); + if ($type == 'tp' || $type == 'all') { + Cache::clear(); + } else { + $this->error(__('Parameter error')); + } + Event::trigger('cacheClearAfter', $this->app); + $this->success(__('Cache cleaned~')); + } + + /** + * 终端 + * @throws Throwable + */ + public function terminal(): void + { + (new Terminal())->exec(); + } +} \ No newline at end of file diff --git a/app/admin/controller/Dashboard.php b/app/admin/controller/Dashboard.php new file mode 100644 index 0000000..1aed884 --- /dev/null +++ b/app/admin/controller/Dashboard.php @@ -0,0 +1,20 @@ +success('', [ + 'remark' => get_route_remark() + ]); + } +} \ No newline at end of file diff --git a/app/admin/controller/Index.php b/app/admin/controller/Index.php new file mode 100644 index 0000000..45427eb --- /dev/null +++ b/app/admin/controller/Index.php @@ -0,0 +1,133 @@ +auth->getInfo(); + $adminInfo['super'] = $this->auth->isSuperAdmin(); + unset($adminInfo['token'], $adminInfo['refresh_token']); + + $menus = $this->auth->getMenus(); + if (!$menus) { + $this->error(__('No background menu, please contact super administrator!')); + } + $this->success('', [ + 'adminInfo' => $adminInfo, + 'menus' => $menus, + 'siteConfig' => [ + 'siteName' => get_sys_config('site_name'), + 'version' => get_sys_config('version'), + 'apiUrl' => Config::get('buildadmin.api_url'), + 'upload' => keys_to_camel_case(get_upload_config(), ['max_size', 'save_name', 'allowed_suffixes', 'allowed_mime_types']), + 'cdnUrl' => full_url(), + 'cdnUrlParams' => Config::get('buildadmin.cdn_url_params'), + ], + 'terminal' => [ + 'phpDevelopmentServer' => str_contains($_SERVER['SERVER_SOFTWARE'], 'Development Server'), + 'npmPackageManager' => Config::get('terminal.npm_package_manager'), + ] + ]); + } + + /** + * 管理员登录 + * @return void + * @throws Throwable + */ + public function login(): void + { + // 检查登录态 + if ($this->auth->isLogin()) { + $this->success(__('You have already logged in. There is no need to log in again~'), [ + 'type' => $this->auth::LOGGED_IN + ], $this->auth::LOGIN_RESPONSE_CODE); + } + + $captchaSwitch = Config::get('buildadmin.admin_login_captcha'); + + // 检查提交 + if ($this->request->isPost()) { + $username = $this->request->post('username'); + $password = $this->request->post('password'); + $keep = $this->request->post('keep'); + + $rule = [ + 'username|' . __('Username') => 'require|length:3,30', + 'password|' . __('Password') => 'require|regex:^(?!.*[&<>"\'\n\r]).{6,32}$', + ]; + $data = [ + 'username' => $username, + 'password' => $password, + ]; + if ($captchaSwitch) { + $rule['captchaId|' . __('CaptchaId')] = 'require'; + $rule['captchaInfo|' . __('Captcha')] = 'require'; + + $data['captchaId'] = $this->request->post('captchaId'); + $data['captchaInfo'] = $this->request->post('captchaInfo'); + } + $validate = Validate::rule($rule); + if (!$validate->check($data)) { + $this->error($validate->getError()); + } + + if ($captchaSwitch) { + $captchaObj = new ClickCaptcha(); + if (!$captchaObj->check($data['captchaId'], $data['captchaInfo'])) { + $this->error(__('Captcha error')); + } + } + + AdminLog::instance()->setTitle(__('Login')); + + $res = $this->auth->login($username, $password, (bool)$keep); + if ($res === true) { + $this->success(__('Login succeeded!'), [ + 'userInfo' => $this->auth->getInfo() + ]); + } else { + $msg = $this->auth->getError(); + $msg = $msg ?: __('Incorrect user name or password!'); + $this->error($msg); + } + } + + $this->success('', [ + 'captcha' => $captchaSwitch + ]); + } + + /** + * 管理员注销 + * @return void + */ + public function logout(): void + { + if ($this->request->isPost()) { + $refreshToken = $this->request->post('refreshToken', ''); + if ($refreshToken) Token::delete((string)$refreshToken); + $this->auth->logout(); + $this->success(); + } + } +} diff --git a/app/admin/controller/Module.php b/app/admin/controller/Module.php new file mode 100644 index 0000000..0f3a30e --- /dev/null +++ b/app/admin/controller/Module.php @@ -0,0 +1,137 @@ +success('', [ + 'installed' => Server::installedList(root_path() . 'modules' . DIRECTORY_SEPARATOR), + 'sysVersion' => Config::get('buildadmin.version'), + 'nuxtVersion' => Server::getNuxtVersion(), + ]); + } + + public function state(): void + { + $uid = $this->request->get("uid/s", ''); + if (!$uid) { + $this->error(__('Parameter error')); + } + $this->success('', [ + 'state' => Manage::instance($uid)->getInstallState() + ]); + } + + public function install(): void + { + AdminLog::instance()->setTitle(__('Install module')); + $uid = $this->request->param("uid/s", ''); + $update = $this->request->param("update/b", false); + if (!$uid) { + $this->error(__('Parameter error')); + } + $res = []; + try { + $res = Manage::instance($uid)->install($update); + } catch (Exception $e) { + $this->error(__($e->getMessage()), $e->getData(), $e->getCode()); + } catch (Throwable $e) { + $this->error(__($e->getMessage())); + } + $this->success('', [ + 'data' => $res, + ]); + } + + public function dependentInstallComplete(): void + { + $uid = $this->request->get("uid/s", ''); + if (!$uid) { + $this->error(__('Parameter error')); + } + try { + Manage::instance($uid)->dependentInstallComplete('all'); + } catch (Exception $e) { + $this->error(__($e->getMessage()), $e->getData(), $e->getCode()); + } catch (Throwable $e) { + $this->error(__($e->getMessage())); + } + $this->success(); + } + + public function changeState(): void + { + AdminLog::instance()->setTitle(__('Change module state')); + $uid = $this->request->post("uid/s", ''); + $state = $this->request->post("state/b", false); + if (!$uid) { + $this->error(__('Parameter error')); + } + $info = []; + try { + $info = Manage::instance($uid)->changeState($state); + } catch (Exception $e) { + $this->error(__($e->getMessage()), $e->getData(), $e->getCode()); + } catch (Throwable $e) { + $this->error(__($e->getMessage())); + } + $this->success('', [ + 'info' => $info, + ]); + } + + public function uninstall(): void + { + AdminLog::instance()->setTitle(__('Unload module')); + $uid = $this->request->get("uid/s", ''); + if (!$uid) { + $this->error(__('Parameter error')); + } + try { + Manage::instance($uid)->uninstall(); + } catch (Exception $e) { + $this->error(__($e->getMessage()), $e->getData(), $e->getCode()); + } catch (Throwable $e) { + $this->error(__($e->getMessage())); + } + $this->success(); + } + + public function upload(): void + { + AdminLog::instance()->setTitle(__('Upload install module')); + $file = $this->request->get("file/s", ''); + $token = $this->request->get("token/s", ''); + if (!$file) $this->error(__('Parameter error')); + if (!$token) $this->error(__('Please login to the official website account first')); + + $info = []; + try { + $info = Manage::instance()->upload($token, $file); + } catch (Exception $e) { + $this->error(__($e->getMessage()), $e->getData(), $e->getCode()); + } catch (Throwable $e) { + $this->error(__($e->getMessage())); + } + $this->success('', [ + 'info' => $info + ]); + } +} \ No newline at end of file diff --git a/app/admin/controller/auth/Admin.php b/app/admin/controller/auth/Admin.php new file mode 100644 index 0000000..c8f820e --- /dev/null +++ b/app/admin/controller/auth/Admin.php @@ -0,0 +1,261 @@ +model = new AdminModel(); + } + + /** + * 查看 + * @throws Throwable + */ + public function index(): void + { + if ($this->request->param('select')) { + $this->select(); + } + + list($where, $alias, $limit, $order) = $this->queryBuilder(); + $res = $this->model + ->withoutField('login_failure,password,salt') + ->withJoin($this->withJoinTable, $this->withJoinType) + ->alias($alias) + ->where($where) + ->order($order) + ->paginate($limit); + + $this->success('', [ + 'list' => $res->items(), + 'total' => $res->total(), + 'remark' => get_route_remark(), + ]); + } + + /** + * 添加 + * @throws Throwable + */ + public function add(): void + { + if ($this->request->isPost()) { + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + if ($this->modelValidate) { + try { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + $validate = new $validate(); + $validate->scene('add')->check($data); + } catch (Throwable $e) { + $this->error($e->getMessage()); + } + } + + $passwd = $data['password']; // 密码将被排除不直接入库 + $data = $this->excludeFields($data); + $result = false; + if ($data['group_arr']) $this->checkGroupAuth($data['group_arr']); + $this->model->startTrans(); + try { + $result = $this->model->save($data); + if ($data['group_arr']) { + $groupAccess = []; + foreach ($data['group_arr'] as $datum) { + $groupAccess[] = [ + 'uid' => $this->model->id, + 'group_id' => $datum, + ]; + } + Db::name('admin_group_access')->insertAll($groupAccess); + } + $this->model->commit(); + + if (!empty($passwd)) { + $this->model->resetPassword($this->model->id, $passwd); + } + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('Added successfully')); + } else { + $this->error(__('No rows were added')); + } + } + + $this->error(__('Parameter error')); + } + + /** + * 编辑 + * @throws Throwable + */ + public function edit(): void + { + $pk = $this->model->getPk(); + $id = $this->request->param($pk); + $row = $this->model->find($id); + if (!$row) { + $this->error(__('Record not found')); + } + + $dataLimitAdminIds = $this->getDataLimitAdminIds(); + if ($dataLimitAdminIds && !in_array($row[$this->dataLimitField], $dataLimitAdminIds)) { + $this->error(__('You have no permission')); + } + + if ($this->request->isPost()) { + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + if ($this->modelValidate) { + try { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + $validate = new $validate(); + $validate->scene('edit')->check($data); + } catch (Throwable $e) { + $this->error($e->getMessage()); + } + } + + if ($this->auth->id == $data['id'] && $data['status'] == 'disable') { + $this->error(__('Please use another administrator account to disable the current account!')); + } + + if (!empty($data['password'])) { + $this->model->resetPassword($row->id, $data['password']); + } + + $groupAccess = []; + if ($data['group_arr']) { + $checkGroups = []; + foreach ($data['group_arr'] as $datum) { + if (!in_array($datum, $row->group_arr)) { + $checkGroups[] = $datum; + } + $groupAccess[] = [ + 'uid' => $id, + 'group_id' => $datum, + ]; + } + $this->checkGroupAuth($checkGroups); + } + + Db::name('admin_group_access') + ->where('uid', $id) + ->delete(); + + $data = $this->excludeFields($data); + $result = false; + $this->model->startTrans(); + try { + $result = $row->save($data); + if ($groupAccess) Db::name('admin_group_access')->insertAll($groupAccess); + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('Update successful')); + } else { + $this->error(__('No rows updated')); + } + } + + unset($row['salt'], $row['login_failure']); + $row['password'] = ''; + $this->success('', [ + 'row' => $row + ]); + } + + /** + * 删除 + * @throws Throwable + */ + public function del(): void + { + $where = []; + $dataLimitAdminIds = $this->getDataLimitAdminIds(); + if ($dataLimitAdminIds) { + $where[] = [$this->dataLimitField, 'in', $dataLimitAdminIds]; + } + + $ids = $this->request->param('ids/a', []); + $where[] = [$this->model->getPk(), 'in', $ids]; + $data = $this->model->where($where)->select(); + + $count = 0; + $this->model->startTrans(); + try { + foreach ($data as $v) { + if ($v->id != $this->auth->id) { + $count += $v->delete(); + Db::name('admin_group_access') + ->where('uid', $v['id']) + ->delete(); + } + } + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($count) { + $this->success(__('Deleted successfully')); + } else { + $this->error(__('No rows were deleted')); + } + } + + /** + * 检查分组权限 + * @throws Throwable + */ + private function checkGroupAuth(array $groups): void + { + if ($this->auth->isSuperAdmin()) { + return; + } + $authGroups = $this->auth->getAllAuthGroups('allAuthAndOthers'); + foreach ($groups as $group) { + if (!in_array($group, $authGroups)) { + $this->error(__('You have no permission to add an administrator to this group!')); + } + } + } +} \ No newline at end of file diff --git a/app/admin/controller/auth/AdminLog.php b/app/admin/controller/auth/AdminLog.php new file mode 100644 index 0000000..ace3b80 --- /dev/null +++ b/app/admin/controller/auth/AdminLog.php @@ -0,0 +1,54 @@ +model = new AdminLogModel(); + } + + /** + * 查看 + * @throws Throwable + */ + public function index(): void + { + if ($this->request->param('select')) { + $this->select(); + } + + list($where, $alias, $limit, $order) = $this->queryBuilder(); + if (!$this->auth->isSuperAdmin()) { + $where[] = ['admin_id', '=', $this->auth->id]; + } + $res = $this->model + ->withJoin($this->withJoinTable, $this->withJoinType) + ->alias($alias) + ->where($where) + ->order($order) + ->paginate($limit); + + $this->success('', [ + 'list' => $res->items(), + 'total' => $res->total(), + 'remark' => get_route_remark(), + ]); + } +} \ No newline at end of file diff --git a/app/admin/controller/auth/Group.php b/app/admin/controller/auth/Group.php new file mode 100644 index 0000000..9b3f4ab --- /dev/null +++ b/app/admin/controller/auth/Group.php @@ -0,0 +1,379 @@ +model = new AdminGroup(); + $this->tree = Tree::instance(); + + $isTree = $this->request->param('isTree', true); + $this->initValue = $this->request->get("initValue/a", []); + $this->initValue = array_filter($this->initValue); + $this->keyword = $this->request->request("quickSearch", ''); + + // 有初始化值时不组装树状(初始化出来的值更好看) + $this->assembleTree = $isTree && !$this->initValue; + + $this->adminGroups = Db::name('admin_group_access')->where('uid', $this->auth->id)->column('group_id'); + } + + public function index(): void + { + if ($this->request->param('select')) { + $this->select(); + } + + $this->success('', [ + 'list' => $this->getGroups(), + 'group' => $this->adminGroups, + 'remark' => get_route_remark(), + ]); + } + + /** + * 添加 + * @throws Throwable + */ + public function add(): void + { + if ($this->request->isPost()) { + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + $data = $this->excludeFields($data); + $data = $this->handleRules($data); + + $result = false; + $this->model->startTrans(); + try { + // 模型验证 + if ($this->modelValidate) { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + if (class_exists($validate)) { + $validate = new $validate(); + $validate->scene('add')->check($data); + } + } + $result = $this->model->save($data); + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('Added successfully')); + } else { + $this->error(__('No rows were added')); + } + } + + $this->error(__('Parameter error')); + } + + /** + * 编辑 + * @throws Throwable + */ + public function edit(): void + { + $pk = $this->model->getPk(); + $id = $this->request->param($pk); + $row = $this->model->find($id); + if (!$row) { + $this->error(__('Record not found')); + } + + $this->checkAuth($id); + + if ($this->request->isPost()) { + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + $adminGroup = Db::name('admin_group_access')->where('uid', $this->auth->id)->column('group_id'); + if (in_array($data['id'], $adminGroup)) { + $this->error(__('You cannot modify your own management group!')); + } + + $data = $this->excludeFields($data); + $data = $this->handleRules($data); + + $result = false; + $this->model->startTrans(); + try { + // 模型验证 + if ($this->modelValidate) { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + if (class_exists($validate)) { + $validate = new $validate(); + $validate->scene('edit')->check($data); + } + } + $result = $row->save($data); + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('Update successful')); + } else { + $this->error(__('No rows updated')); + } + } + + // 读取所有pid,全部从节点数组移除,父级选择状态由子级决定 + $pidArr = AdminRule::field('pid') + ->distinct() + ->where('id', 'in', $row->rules) + ->select() + ->toArray(); + $rules = $row->rules ? explode(',', $row->rules) : []; + foreach ($pidArr as $item) { + $ruKey = array_search($item['pid'], $rules); + if ($ruKey !== false) { + unset($rules[$ruKey]); + } + } + $row->rules = array_values($rules); + $this->success('', [ + 'row' => $row + ]); + } + + /** + * 删除 + * @throws Throwable + */ + public function del(): void + { + $ids = $this->request->param('ids/a', []); + $data = $this->model->where($this->model->getPk(), 'in', $ids)->select(); + foreach ($data as $v) { + $this->checkAuth($v->id); + } + $subData = $this->model->where('pid', 'in', $ids)->column('pid', 'id'); + foreach ($subData as $key => $subDatum) { + if (!in_array($key, $ids)) { + $this->error(__('Please delete the child element first, or use batch deletion')); + } + } + + $adminGroup = Db::name('admin_group_access')->where('uid', $this->auth->id)->column('group_id'); + $count = 0; + $this->model->startTrans(); + try { + foreach ($data as $v) { + if (!in_array($v['id'], $adminGroup)) { + $count += $v->delete(); + } + } + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($count) { + $this->success(__('Deleted successfully')); + } else { + $this->error(__('No rows were deleted')); + } + } + + /** + * 远程下拉 + * @return void + * @throws Throwable + */ + public function select(): void + { + $data = $this->getGroups([['status', '=', 1]]); + + if ($this->assembleTree) { + $data = $this->tree->assembleTree($this->tree->getTreeArray($data)); + } + $this->success('', [ + 'options' => $data + ]); + } + + /** + * 权限节点入库前处理 + * @throws Throwable + */ + private function handleRules(array &$data): array + { + if (!empty($data['rules']) && is_array($data['rules'])) { + $superAdmin = true; + $checkedRules = []; + $allRuleIds = AdminRule::column('id'); + + // 遍历检查权限ID是否存在(以免传递了可预测的未来权限ID号) + foreach ($data['rules'] as $postRuleId) { + if (in_array($postRuleId, $allRuleIds)) { + $checkedRules[] = $postRuleId; + } + } + + // 正在建立超管级分组? + foreach ($allRuleIds as $ruleId) { + if (!in_array($ruleId, $checkedRules)) { + $superAdmin = false; + } + } + + if ($superAdmin && $this->auth->isSuperAdmin()) { + // 允许超管建立超管级分组 + $data['rules'] = '*'; + } else { + // 当前管理员所拥有的权限节点 + $ownedRuleIds = $this->auth->getRuleIds(); + + // 禁止添加`拥有自己全部权限`的分组 + if (!array_diff($ownedRuleIds, $checkedRules)) { + $this->error(__('Role group has all your rights, please contact the upper administrator to add or do not need to add!')); + } + + // 检查分组权限是否超出了自己的权限(超管的 $ownedRuleIds 为 ['*'],不便且可以不做此项检查) + if (array_diff($checkedRules, $ownedRuleIds) && !$this->auth->isSuperAdmin()) { + $this->error(__('The group permission node exceeds the range that can be allocated')); + } + + $data['rules'] = implode(',', $checkedRules); + } + } else { + unset($data['rules']); + } + return $data; + } + + /** + * 获取分组 + * @param array $where + * @return array + * @throws Throwable + */ + private function getGroups(array $where = []): array + { + $pk = $this->model->getPk(); + $initKey = $this->request->get("initKey/s", $pk); + + // 下拉选择时只获取:拥有所有权限并且有额外权限的分组 + $absoluteAuth = $this->request->get('absoluteAuth/b', false); + + if ($this->keyword) { + $keyword = explode(' ', $this->keyword); + foreach ($keyword as $item) { + $where[] = [$this->quickSearchField, 'like', '%' . $item . '%']; + } + } + + if ($this->initValue) { + $where[] = [$initKey, 'in', $this->initValue]; + } + + if (!$this->auth->isSuperAdmin()) { + $authGroups = $this->auth->getAllAuthGroups($this->authMethod, $where); + if (!$absoluteAuth) $authGroups = array_merge($this->adminGroups, $authGroups); + $where[] = ['id', 'in', $authGroups]; + } + $data = $this->model->where($where)->select()->toArray(); + + // 获取第一个权限的名称供列表显示-s + foreach ($data as &$datum) { + if ($datum['rules']) { + if ($datum['rules'] == '*') { + $datum['rules'] = __('Super administrator'); + } else { + $rules = explode(',', $datum['rules']); + if ($rules) { + $rulesFirstTitle = AdminRule::where('id', $rules[0])->value('title'); + $datum['rules'] = count($rules) == 1 ? $rulesFirstTitle : $rulesFirstTitle . '等 ' . count($rules) . ' 项'; + } + } + } else { + $datum['rules'] = __('No permission'); + } + } + // 获取第一个权限的名称供列表显示-e + + // 如果要求树状,此处先组装好 children + return $this->assembleTree ? $this->tree->assembleChild($data) : $data; + } + + /** + * 检查权限 + * @param $groupId + * @return void + * @throws Throwable + */ + private function checkAuth($groupId): void + { + $authGroups = $this->auth->getAllAuthGroups($this->authMethod, []); + if (!$this->auth->isSuperAdmin() && !in_array($groupId, $authGroups)) { + $this->error(__($this->authMethod == 'allAuth' ? 'You need to have all permissions of this group to operate this group~' : 'You need to have all the permissions of the group and have additional permissions before you can operate the group~')); + } + } + +} \ No newline at end of file diff --git a/app/admin/controller/auth/Rule.php b/app/admin/controller/auth/Rule.php new file mode 100644 index 0000000..0279170 --- /dev/null +++ b/app/admin/controller/auth/Rule.php @@ -0,0 +1,307 @@ + 'desc']; + + protected string|array $quickSearchField = 'title'; + + /** + * @var object + * @phpstan-var AdminRule + */ + protected object $model; + + /** + * @var Tree + */ + protected Tree $tree; + + /** + * 远程select初始化传值 + * @var array + */ + protected array $initValue; + + /** + * 搜索关键词 + * @var string + */ + protected string $keyword; + + /** + * 是否组装Tree + * @var bool + */ + protected bool $assembleTree; + + /** + * 开启模型验证 + * @var bool + */ + protected bool $modelValidate = false; + + public function initialize(): void + { + parent::initialize(); + + // 防止 URL 中的特殊符号被默认的 filter 函数转义 + $this->request->filter('clean_xss'); + + $this->model = new AdminRule(); + $this->tree = Tree::instance(); + $isTree = $this->request->param('isTree', true); + $this->initValue = $this->request->get('initValue/a', []); + $this->initValue = array_filter($this->initValue); + $this->keyword = $this->request->request('quickSearch', ''); + $this->assembleTree = $isTree && !$this->initValue; // 有初始化值时不组装树状(初始化出来的值更好看) + } + + public function index(): void + { + if ($this->request->param('select')) { + $this->select(); + } + + $this->success('', [ + 'list' => $this->getMenus(), + 'remark' => get_route_remark(), + ]); + } + + /** + * 添加 + */ + public function add(): void + { + if ($this->request->isPost()) { + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + $data = $this->excludeFields($data); + if ($this->dataLimit && $this->dataLimitFieldAutoFill) { + $data[$this->dataLimitField] = $this->auth->id; + } + + $result = false; + $this->model->startTrans(); + try { + // 模型验证 + if ($this->modelValidate) { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + if (class_exists($validate)) { + $validate = new $validate(); + if ($this->modelSceneValidate) $validate->scene('add'); + $validate->check($data); + } + } + $result = $this->model->save($data); + + // 检查有那些分组可以拥有新增菜单的权限 + if (!empty($data['pid'])) { + $this->autoAssignPermission($this->model->id, $data['pid']); + } + + // 创建子级权限节点 + if ($data['type'] == 'menu' && !empty($data['buttons'])) { + $newButtons = []; + foreach ($data['buttons'] as $button) { + foreach (Helper::$menuChildren as $menuChild) { + if ($menuChild['name'] == '/' . $button) { + $menuChild['name'] = $data['name'] . $menuChild['name']; + $newButtons[] = $menuChild; + } + } + } + if (!empty($newButtons)) { + // 创建子级权限节点 + Menu::create($newButtons, $this->model->id, 'ignore'); + + // 检查有那些分组可以拥有新增的子级权限 + $children = AdminRule::where('pid', $this->model->id)->select(); + foreach ($children as $child) { + $this->autoAssignPermission($child['id'], $this->model->id); + } + } + } + + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('Added successfully')); + } else { + $this->error(__('No rows were added')); + } + } + + $this->error(__('Parameter error')); + } + + /** + * 编辑 + * @throws Throwable + */ + public function edit(): void + { + $id = $this->request->param($this->model->getPk()); + $row = $this->model->find($id); + if (!$row) { + $this->error(__('Record not found')); + } + + $dataLimitAdminIds = $this->getDataLimitAdminIds(); + if ($dataLimitAdminIds && !in_array($row[$this->dataLimitField], $dataLimitAdminIds)) { + $this->error(__('You have no permission')); + } + + if ($this->request->isPost()) { + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + $data = $this->excludeFields($data); + $result = false; + $this->model->startTrans(); + try { + // 模型验证 + if ($this->modelValidate) { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + if (class_exists($validate)) { + $validate = new $validate(); + if ($this->modelSceneValidate) $validate->scene('edit'); + $validate->check($data); + } + } + if (isset($data['pid']) && $data['pid'] > 0) { + // 满足意图并消除副作用 + $parent = $this->model->where('id', $data['pid'])->find(); + if ($parent['pid'] == $row['id']) { + $parent->pid = 0; + $parent->save(); + } + } + $result = $row->save($data); + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('Update successful')); + } else { + $this->error(__('No rows updated')); + } + } + + $this->success('', [ + 'row' => $row + ]); + } + + /** + * 删除 + * @throws Throwable + */ + public function del(): void + { + $ids = $this->request->param('ids/a', []); + + // 子级元素检查 + $subData = $this->model->where('pid', 'in', $ids)->column('pid', 'id'); + foreach ($subData as $key => $subDatum) { + if (!in_array($key, $ids)) { + $this->error(__('Please delete the child element first, or use batch deletion')); + } + } + + parent::del(); + } + + /** + * 重写select方法 + * @throws Throwable + */ + public function select(): void + { + $data = $this->getMenus([['type', 'in', ['menu_dir', 'menu']], ['status', '=', 1]]); + + if ($this->assembleTree) { + $data = $this->tree->assembleTree($this->tree->getTreeArray($data, 'title')); + } + $this->success('', [ + 'options' => $data + ]); + } + + /** + * 获取菜单列表 + * @throws Throwable + */ + protected function getMenus($where = []): array + { + $pk = $this->model->getPk(); + $initKey = $this->request->get("initKey/s", $pk); + + $ids = $this->auth->getRuleIds(); + + // 如果没有 * 则只获取用户拥有的规则 + if (!in_array('*', $ids)) { + $where[] = ['id', 'in', $ids]; + } + + if ($this->keyword) { + $keyword = explode(' ', $this->keyword); + foreach ($keyword as $item) { + $where[] = [$this->quickSearchField, 'like', '%' . $item . '%']; + } + } + + if ($this->initValue) { + $where[] = [$initKey, 'in', $this->initValue]; + } + + // 读取用户组所有权限规则 + $rules = $this->model + ->where($where) + ->order($this->queryOrderBuilder()) + ->select() + ->toArray(); + + // 如果要求树状,此处先组装好 children + return $this->assembleTree ? $this->tree->assembleChild($rules) : $rules; + } + + /** + * 检查所有非超管的分组是否应该拥有某个权限 + */ + private function autoAssignPermission(int $id, int $pid): void + { + $groups = AdminGroup::where('rules', '<>', '*')->select(); + foreach ($groups as $group) { + $rules = explode(',', $group->rules); + if (in_array($pid, $rules) && !in_array($id, $rules)) { + $rules[] = $id; + $group->rules = implode(',', $rules); + $group->save(); + } + } + } +} \ No newline at end of file diff --git a/app/admin/controller/crud/Crud.php b/app/admin/controller/crud/Crud.php new file mode 100644 index 0000000..02a148f --- /dev/null +++ b/app/admin/controller/crud/Crud.php @@ -0,0 +1,1002 @@ +request->post('type', ''); + $table = $this->request->post('table', []); + $fields = $this->request->post('fields', [], 'clean_xss,htmlspecialchars_decode_improve'); + + if (!$table || !$fields || !isset($table['name']) || !$table['name']) { + $this->error(__('Parameter error')); + } + + try { + // 记录日志 + $crudLogId = Helper::recordCrudStatus([ + 'table' => $table, + 'fields' => $fields, + 'status' => 'start', + ]); + + // 表名称 + $tableName = TableManager::tableName($table['name'], false, $table['databaseConnection']); + + if ($type == 'create' || $table['rebuild'] == 'Yes') { + // 数据表存在则删除 + TableManager::phinxTable($tableName, [], true, $table['databaseConnection'])->drop()->save(); + } + + // 处理表设计 + [$tablePk] = Helper::handleTableDesign($table, $fields); + + // 表注释 + $tableComment = mb_substr($table['comment'], -1) == '表' ? mb_substr($table['comment'], 0, -1) . '管理' : $table['comment']; + + // 生成文件信息解析 + $modelFile = Helper::parseNameData($table['isCommonModel'] ? 'common' : 'admin', $tableName, 'model', $table['modelFile']); + $validateFile = Helper::parseNameData($table['isCommonModel'] ? 'common' : 'admin', $tableName, 'validate', $table['validateFile']); + $controllerFile = Helper::parseNameData('admin', $tableName, 'controller', $table['controllerFile']); + $webViewsDir = Helper::parseWebDirNameData($tableName, 'views', $table['webViewsDir']); + $webLangDir = Helper::parseWebDirNameData($tableName, 'lang', $table['webViewsDir']); + + // 语言翻译前缀 + $this->webTranslate = implode('.', $webLangDir['lang']) . '.'; + + // 快速搜索字段 + if (!in_array($tablePk, $table['quickSearchField'])) { + $table['quickSearchField'][] = $tablePk; + } + $quickSearchFieldZhCnTitle = []; + + // 模型数据 + $this->modelData['append'] = []; + $this->modelData['methods'] = []; + $this->modelData['fieldType'] = []; + $this->modelData['createTime'] = ''; + $this->modelData['updateTime'] = ''; + $this->modelData['beforeInsertMixins'] = []; + $this->modelData['beforeInsert'] = ''; + $this->modelData['afterInsert'] = ''; + $this->modelData['connection'] = $table['databaseConnection']; + $this->modelData['name'] = $tableName; + $this->modelData['className'] = $modelFile['lastName']; + $this->modelData['namespace'] = $modelFile['namespace']; + $this->modelData['relationMethodList'] = []; + + // 控制器数据 + $this->controllerData['use'] = []; + $this->controllerData['attr'] = []; + $this->controllerData['methods'] = []; + $this->controllerData['filterRule'] = ''; + $this->controllerData['className'] = $controllerFile['lastName']; + $this->controllerData['namespace'] = $controllerFile['namespace']; + $this->controllerData['tableComment'] = $tableComment; + $this->controllerData['modelName'] = $modelFile['lastName']; + $this->controllerData['modelNamespace'] = $modelFile['namespace']; + + // index.vue数据 + $this->indexVueData['enableDragSort'] = false; + $this->indexVueData['defaultItems'] = []; + $this->indexVueData['tableColumn'] = [ + [ + 'type' => 'selection', + 'align' => 'center', + 'operator' => 'false', + ], + ]; + $this->indexVueData['dblClickNotEditColumn'] = ['undefined']; + $this->indexVueData['optButtons'] = ['edit', 'delete']; + $this->indexVueData['defaultOrder'] = ''; + + // form.vue数据 + $this->formVueData['bigDialog'] = false; + $this->formVueData['formFields'] = []; + $this->formVueData['formValidatorRules'] = []; + $this->formVueData['imports'] = []; + + // 语言包数据 + $this->langTsData = [ + 'en' => [], + 'zh-cn' => [], + ]; + + // 简化的字段数据 + $fieldsMap = []; + + foreach ($fields as $key => $field) { + + $fieldsMap[$field['name']] = $field['designType']; + + // 分析字段 + Helper::analyseField($field); + + Helper::getDictData($this->langTsData['en'], $field, 'en'); + Helper::getDictData($this->langTsData['zh-cn'], $field, 'zh-cn'); + + // 快速搜索字段 + if (in_array($field['name'], $table['quickSearchField'])) { + $quickSearchFieldZhCnTitle[] = $this->langTsData['zh-cn'][$field['name']] ?? $field['name']; + } + + // 不允许双击编辑的字段 + if ($field['designType'] == 'switch') { + $this->indexVueData['dblClickNotEditColumn'][] = $field['name']; + } + + // 列字典数据 + $columnDict = $this->getColumnDict($field); + + // 表单项 + if (in_array($field['name'], $table['formFields'])) { + $this->formVueData['formFields'][] = $this->getFormField($field, $columnDict, $table['databaseConnection']); + } + + // 表格列 + if (in_array($field['name'], $table['columnFields'])) { + $this->indexVueData['tableColumn'][] = $this->getTableColumn($field, $columnDict); + } + + // 关联表数据解析 + if (in_array($field['designType'], ['remoteSelect', 'remoteSelects'])) { + $this->parseJoinData($field, $table); + } + + // 模型方法 + $this->parseModelMethods($field, $this->modelData); + + // 控制器/模型等文件的一些杂项属性解析 + $this->parseSundryData($field, $table); + + if (!in_array($field['name'], $table['formFields'])) { + $this->controllerData['attr']['preExcludeFields'][] = $field['name']; + } + } + + // 快速搜索提示 + $this->langTsData['en']['quick Search Fields'] = implode(',', $table['quickSearchField']); + $this->langTsData['zh-cn']['quick Search Fields'] = implode('、', $quickSearchFieldZhCnTitle); + $this->controllerData['attr']['quickSearchField'] = $table['quickSearchField']; + + // 开启字段排序 + $weighKey = array_search('weigh', $fieldsMap); + if ($weighKey !== false) { + $this->indexVueData['enableDragSort'] = true; + $this->modelData['afterInsert'] = Helper::assembleStub('mixins/model/afterInsert', [ + 'field' => $weighKey + ]); + } + + // 表格的操作列 + $this->indexVueData['tableColumn'][] = [ + 'label' => "t('Operate')", + 'align' => 'center', + 'width' => $this->indexVueData['enableDragSort'] ? 140 : 100, + 'render' => 'buttons', + 'buttons' => 'optButtons', + 'operator' => 'false', + ]; + if ($this->indexVueData['enableDragSort']) { + array_unshift($this->indexVueData['optButtons'], 'weigh-sort'); + } + + // 写入语言包代码 + Helper::writeWebLangFile($this->langTsData, $webLangDir); + + // 写入模型代码 + Helper::writeModelFile($tablePk, $fieldsMap, $this->modelData, $modelFile); + + // 写入控制器代码 + Helper::writeControllerFile($this->controllerData, $controllerFile); + + // 写入验证器代码 + $validateContent = Helper::assembleStub('mixins/validate/validate', [ + 'namespace' => $validateFile['namespace'], + 'className' => $validateFile['lastName'], + ]); + Helper::writeFile($validateFile['parseFile'], $validateContent); + + // 写入index.vue代码 + $this->indexVueData['tablePk'] = $tablePk; + $this->indexVueData['webTranslate'] = $this->webTranslate; + Helper::writeIndexFile($this->indexVueData, $webViewsDir, $controllerFile); + + // 写入form.vue代码 + Helper::writeFormFile($this->formVueData, $webViewsDir, $fields, $this->webTranslate); + + // 生成菜单 + Helper::createMenu($webViewsDir, $tableComment); + + Helper::recordCrudStatus([ + 'id' => $crudLogId, + 'status' => 'success', + ]); + } catch (Exception $e) { + Helper::recordCrudStatus([ + 'id' => $crudLogId ?? 0, + 'status' => 'error', + ]); + $this->error($e->getMessage()); + } catch (Throwable $e) { + Helper::recordCrudStatus([ + 'id' => $crudLogId ?? 0, + 'status' => 'error', + ]); + if (env('app_debug', false)) throw $e; + $this->error($e->getMessage()); + } + + $this->success('', [ + 'crudLog' => CrudLog::find($crudLogId), + ]); + } + + /** + * 从log开始 + * @throws Throwable + */ + public function logStart(): void + { + $id = $this->request->post('id'); + $type = $this->request->post('type', ''); + + if ($type == 'Cloud history') { + // 云端 历史记录 + $client = get_ba_client(); + $response = $client->request('GET', '/api/v6.Crud/info', [ + 'query' => [ + 'id' => $id, + 'server' => 1, + 'ba-user-token' => $this->request->post('token', ''), + ] + ]); + $body = $response->getBody(); + $statusCode = $response->getStatusCode(); + $content = $body->getContents(); + if ($content == '' || stripos($content, '系统发生错误') !== false || $statusCode != 200) { + $this->error(__('Failed to load cloud data')); + } + $json = json_decode($content, true); + if (json_last_error() != JSON_ERROR_NONE) { + $this->error(__('Failed to load cloud data')); + } + if (is_array($json)) { + if ($json['code'] != 1) { + $this->error($json['msg']); + } + + $info = $json['data']['info']; + } + } else { + // 本地记录 + $info = CrudLog::find($id)->toArray(); + } + + if (!isset($info) || !$info) { + $this->error(__('Record not found')); + } + + // 数据表是否有数据 + $connection = TableManager::getConnection($info['table']['databaseConnection'] ?? ''); + $tableName = TableManager::tableName($info['table']['name'], false, $connection); + $adapter = TableManager::phinxAdapter(true, $connection); + if ($adapter->hasTable($tableName)) { + $info['table']['empty'] = Db::connect($connection) + ->name($tableName) + ->limit(1) + ->select() + ->isEmpty(); + } else { + $info['table']['empty'] = true; + } + + AdminLog::instance()->setTitle(__('Log start')); + + $this->success('', [ + 'table' => $info['table'], + 'fields' => $info['fields'], + 'sync' => $info['sync'], + ]); + } + + /** + * 删除CRUD记录和生成的文件 + * @throws Throwable + */ + public function delete(): void + { + $id = $this->request->post('id'); + $info = CrudLog::find($id)->toArray(); + if (!$info) { + $this->error(__('Record not found')); + } + $webLangDir = Helper::parseWebDirNameData($info['table']['name'], 'lang', $info['table']['webViewsDir']); + $files = [ + $webLangDir['en'] . '.ts', + $webLangDir['zh-cn'] . '.ts', + $info['table']['webViewsDir'] . '/' . 'index.vue', + $info['table']['webViewsDir'] . '/' . 'popupForm.vue', + $info['table']['controllerFile'], + $info['table']['modelFile'], + $info['table']['validateFile'], + ]; + try { + foreach ($files as &$file) { + $file = Filesystem::fsFit(root_path() . $file); + if (file_exists($file)) { + unlink($file); + } + Filesystem::delEmptyDir(dirname($file)); + } + + // 删除菜单 + Menu::delete(Helper::getMenuName($webLangDir), true); + + Helper::recordCrudStatus([ + 'id' => $id, + 'status' => 'delete', + ]); + } catch (Throwable $e) { + $this->error($e->getMessage()); + } + $this->success(__('Deleted successfully')); + } + + /** + * 获取文件路径数据 + * @throws Throwable + */ + public function getFileData(): void + { + $table = $this->request->get('table'); + $commonModel = $this->request->get('commonModel/b'); + + if (!$table) { + $this->error(__('Parameter error')); + } + + try { + $modelFile = Helper::parseNameData($commonModel ? 'common' : 'admin', $table, 'model'); + $validateFile = Helper::parseNameData($commonModel ? 'common' : 'admin', $table, 'validate'); + $controllerFile = Helper::parseNameData('admin', $table, 'controller'); + $webViewsDir = Helper::parseWebDirNameData($table, 'views'); + } catch (Throwable $e) { + $this->error($e->getMessage()); + } + + // 模型和控制器文件和文件列表 + $adminModelFiles = Filesystem::getDirFiles(root_path() . 'app' . DIRECTORY_SEPARATOR . 'admin' . DIRECTORY_SEPARATOR . 'model' . DIRECTORY_SEPARATOR); + $commonModelFiles = Filesystem::getDirFiles(root_path() . 'app' . DIRECTORY_SEPARATOR . 'common' . DIRECTORY_SEPARATOR . 'model' . DIRECTORY_SEPARATOR); + $adminControllerFiles = get_controller_list(); + + $modelFileList = []; + $controllerFiles = []; + foreach ($adminModelFiles as $item) { + $item = Filesystem::fsFit('app/admin/model/' . $item); + $modelFileList[$item] = $item; + } + foreach ($commonModelFiles as $item) { + $item = Filesystem::fsFit('app/common/model/' . $item); + $modelFileList[$item] = $item; + } + + $outExcludeController = [ + 'Addon.php', + 'Ajax.php', + 'Dashboard.php', + 'Index.php', + 'Module.php', + 'Terminal.php', + 'routine/AdminInfo.php', + 'routine/Config.php', + ]; + foreach ($adminControllerFiles as $item) { + if (in_array($item, $outExcludeController)) { + continue; + } + $item = Filesystem::fsFit('app/admin/controller/' . $item); + $controllerFiles[$item] = $item; + } + + $this->success('', [ + 'modelFile' => $modelFile['rootFileName'], + 'controllerFile' => $controllerFile['rootFileName'], + 'validateFile' => $validateFile['rootFileName'], + 'controllerFileList' => $controllerFiles, + 'modelFileList' => $modelFileList, + 'webViewsDir' => $webViewsDir['views'], + ]); + } + + /** + * 检查是否已有CRUD记录 + * @throws Throwable + */ + public function checkCrudLog(): void + { + $table = $this->request->get('table'); + $connection = $this->request->get('connection'); + $connection = $connection ?: config('database.default'); + + $crudLog = Db::name('crud_log') + ->where('table_name', $table) + ->where('connection', $connection) + ->order('create_time desc') + ->find(); + $this->success('', [ + 'id' => ($crudLog && $crudLog['status'] == 'success') ? $crudLog['id'] : 0, + ]); + } + + /** + * 解析字段数据 + * @throws Throwable + */ + public function parseFieldData(): void + { + AdminLog::instance()->setTitle(__('Parse field data')); + $type = $this->request->post('type'); + $table = $this->request->post('table'); + $connection = $this->request->post('connection'); + $connection = TableManager::getConnection($connection); + + $table = TableManager::tableName($table, true, $connection); + $connectionConfig = TableManager::getConnectionConfig($connection); + + if ($type == 'db') { + $sql = 'SELECT * FROM `information_schema`.`tables` ' + . 'WHERE TABLE_SCHEMA = ? AND table_name = ?'; + $tableInfo = Db::connect($connection)->query($sql, [$connectionConfig['database'], $table]); + if (!$tableInfo) { + $this->error(__('Record not found')); + } + + // 数据表是否有数据 + $adapter = TableManager::phinxAdapter(false, $connection); + if ($adapter->hasTable($table)) { + $empty = Db::connect($connection) + ->table($table) + ->limit(1) + ->select() + ->isEmpty(); + } else { + $empty = true; + } + + $this->success('', [ + 'columns' => Helper::parseTableColumns($table, false, $connection), + 'comment' => $tableInfo[0]['TABLE_COMMENT'] ?? '', + 'empty' => $empty, + ]); + } + } + + /** + * 生成前检查 + * @throws Throwable + */ + public function generateCheck(): void + { + $table = $this->request->post('table'); + $connection = $this->request->post('connection'); + $webViewsDir = $this->request->post('webViewsDir', ''); + $controllerFile = $this->request->post('controllerFile', ''); + + if (!$table) { + $this->error(__('Parameter error')); + } + + AdminLog::instance()->setTitle(__('Generate check')); + + try { + $webViewsDir = Helper::parseWebDirNameData($table, 'views', $webViewsDir); + $controllerFile = Helper::parseNameData('admin', $table, 'controller', $controllerFile)['rootFileName']; + } catch (Throwable $e) { + $this->error($e->getMessage()); + } + + // 数据表是否存在 + $tableList = TableManager::getTableList($connection); + $tableExist = array_key_exists(TableManager::tableName($table, true, $connection), $tableList); + + // 控制器是否存在 + $controllerExist = file_exists(root_path() . $controllerFile); + + // 菜单规则是否存在 + $menuName = Helper::getMenuName($webViewsDir); + $menuExist = AdminRule::where('name', $menuName)->value('id'); + + if ($controllerExist || $tableExist || $menuExist) { + $this->error('', [ + 'menu' => $menuExist, + 'table' => $tableExist, + 'controller' => $controllerExist, + ], -1); + } + $this->success(); + } + + /** + * CRUD 设计记录上传成功标记 + * @throws Throwable + */ + public function uploadCompleted(): void + { + $syncIds = $this->request->post('syncIds/a', []); + $cancelSync = $this->request->post('cancelSync/b', false); + $crudLogModel = new CrudLog(); + + if ($cancelSync) { + $logData = $crudLogModel->where('id', 'in', array_keys($syncIds))->select(); + foreach ($logData as $logDatum) { + if ($logDatum->sync == $syncIds[$logDatum->id]) { + $logDatum->sync = 0; + $logDatum->save(); + } + } + $this->success(); + } + + $saveData = []; + foreach ($syncIds as $key => $syncId) { + $saveData[] = [ + 'id' => $key, + 'sync' => $syncId, + ]; + } + $crudLogModel->saveAll($saveData); + $this->success(); + } + + /** + * 关联表数据解析 + * @param $field + * @param $table + * @throws Throwable + */ + private function parseJoinData($field, $table): void + { + $dictEn = []; + $dictZhCn = []; + + if ($field['form']['relation-fields'] && $field['form']['remote-table']) { + $columns = Helper::parseTableColumns($field['form']['remote-table'], true, $table['databaseConnection']); + $relationFields = explode(',', $field['form']['relation-fields']); + $tableName = TableManager::tableName($field['form']['remote-table'], false, $table['databaseConnection']); + $rnPattern = '/(.*)(_ids|_id)$/'; + if (preg_match($rnPattern, $field['name'])) { + $relationName = parse_name(preg_replace($rnPattern, '$1', $field['name']), 1, false); + } else { + $relationName = parse_name($field['name'] . '_table', 1, false); + } + + // 建立关联模型代码文件 + if (!$field['form']['remote-model'] || !file_exists(root_path() . $field['form']['remote-model'])) { + $joinModelFile = Helper::parseNameData('admin', $tableName, 'model', $field['form']['remote-model']); + if (!file_exists(root_path() . $joinModelFile['rootFileName'])) { + $joinModelData['append'] = []; + $joinModelData['methods'] = []; + $joinModelData['fieldType'] = []; + $joinModelData['createTime'] = ''; + $joinModelData['updateTime'] = ''; + $joinModelData['beforeInsertMixins'] = []; + $joinModelData['beforeInsert'] = ''; + $joinModelData['afterInsert'] = ''; + $joinModelData['connection'] = $table['databaseConnection']; + $joinModelData['name'] = $tableName; + $joinModelData['className'] = $joinModelFile['lastName']; + $joinModelData['namespace'] = $joinModelFile['namespace']; + $joinTablePk = 'id'; + $joinFieldsMap = []; + foreach ($columns as $column) { + $joinFieldsMap[$column['name']] = $column['designType']; + $this->parseModelMethods($column, $joinModelData); + if ($column['primaryKey']) $joinTablePk = $column['name']; + } + $weighKey = array_search('weigh', $joinFieldsMap); + if ($weighKey !== false) { + $joinModelData['afterInsert'] = Helper::assembleStub('mixins/model/afterInsert', [ + 'field' => $joinFieldsMap[$weighKey] + ]); + } + Helper::writeModelFile($joinTablePk, $joinFieldsMap, $joinModelData, $joinModelFile); + } + $field['form']['remote-model'] = $joinModelFile['rootFileName']; + } + + if ($field['designType'] == 'remoteSelect') { + // 关联预载入方法 + $this->controllerData['attr']['withJoinTable'][$relationName] = $relationName; + + // 模型方法代码 + $relationData = [ + 'relationMethod' => $relationName, + 'relationMode' => 'belongsTo', + 'relationPrimaryKey' => $field['form']['remote-pk'] ?? 'id', + 'relationForeignKey' => $field['name'], + 'relationClassName' => str_replace(['.php', '/'], ['', '\\'], '\\' . $field['form']['remote-model']) . "::class", + ]; + $this->modelData['relationMethodList'][$relationName] = Helper::assembleStub('mixins/model/belongsTo', $relationData); + + // 查询时显示的字段 + if ($relationFields) { + $this->controllerData['relationVisibleFieldList'][$relationData['relationMethod']] = $relationFields; + } + } elseif ($field['designType'] == 'remoteSelects') { + $this->modelData['append'][] = $relationName; + $this->modelData['methods'][] = Helper::assembleStub('mixins/model/getters/remoteSelectLabels', [ + 'field' => parse_name($relationName, 1), + 'className' => str_replace(['.php', '/'], ['', '\\'], '\\' . $field['form']['remote-model']), + 'primaryKey' => $field['form']['remote-pk'] ?? 'id', + 'foreignKey' => $field['name'], + 'labelFieldName' => $field['form']['remote-field'] ?? 'name', + ]); + } + + foreach ($relationFields as $relationField) { + if (!array_key_exists($relationField, $columns)) continue; + $relationFieldPrefix = $relationName . '.'; + $relationFieldLangPrefix = strtolower($relationName) . '__'; + Helper::getDictData($dictEn, $columns[$relationField], 'en', $relationFieldLangPrefix); + Helper::getDictData($dictZhCn, $columns[$relationField], 'zh-cn', $relationFieldLangPrefix); + + // 不允许双击编辑的字段 + if ($columns[$relationField]['designType'] == 'switch') { + $this->indexVueData['dblClickNotEditColumn'][] = $field['name']; + } + + // 列字典数据 + $columnDict = $this->getColumnDict($columns[$relationField], $relationFieldLangPrefix); + + // 表格列 + $columns[$relationField]['designType'] = $field['designType']; + $columns[$relationField]['form'] = $field['form'] + $columns[$relationField]['form']; + $columns[$relationField]['table'] = $field['table'] + $columns[$relationField]['table']; + + // 公共搜索渲染为远程下拉时,远程下拉组件的必填属性 + $remoteAttr = [ + 'pk' => $this->getRemoteSelectPk($field), + 'field' => $field['form']['remote-field'] ?? 'name', + 'remoteUrl' => $this->getRemoteSelectUrl($field), + ]; + + if ($columns[$relationField]['table']['comSearchRender'] == 'remoteSelect') { + // 生成为已关闭公共搜索的表格列 + $renderColumn = $columns[$relationField]; + $renderColumn['table']['operator'] = 'false'; + unset($renderColumn['table']['comSearchRender']); + $this->indexVueData['tableColumn'][] = $this->getTableColumn($renderColumn, $columnDict, $relationFieldPrefix, $relationFieldLangPrefix); + + // 额外生成一个公共搜索渲染为远程下拉的列,关闭表格列表显示 + $columns[$relationField]['table']['show'] = 'false'; + $columns[$relationField]['table']['label'] = "t('" . $this->webTranslate . $relationFieldLangPrefix . $columns[$relationField]['name'] . "')"; + $columns[$relationField]['name'] = $field['name']; + + // 标记多选 + if ($field['designType'] == 'remoteSelects') { + $remoteAttr['multiple'] = 'true'; + } + + $columnData = $this->getTableColumn($columns[$relationField], $columnDict, '', $relationFieldLangPrefix); + $columnData['comSearchInputAttr'] = array_merge($remoteAttr, $columnData['comSearchInputAttr'] ?? []); + } else { + $columnData = $this->getTableColumn($columns[$relationField], $columnDict, $relationFieldPrefix, $relationFieldLangPrefix); + } + $this->indexVueData['tableColumn'][] = $columnData; + } + } + $this->langTsData['en'] = array_merge($this->langTsData['en'], $dictEn); + $this->langTsData['zh-cn'] = array_merge($this->langTsData['zh-cn'], $dictZhCn); + } + + /** + * 解析模型方法(设置器、获取器等) + */ + private function parseModelMethods($field, &$modelData): void + { + // fieldType + if ($field['designType'] == 'array') { + $modelData['fieldType'][$field['name']] = 'json'; + } elseif (!in_array($field['name'], ['create_time', 'update_time', 'updatetime', 'createtime']) && $field['designType'] == 'datetime' && (in_array($field['type'], ['int', 'bigint']))) { + $modelData['fieldType'][$field['name']] = 'timestamp:Y-m-d H:i:s'; + } + + // beforeInsertMixins + if ($field['designType'] == 'spk') { + $modelData['beforeInsertMixins']['snowflake'] = Helper::assembleStub('mixins/model/mixins/beforeInsertWithSnowflake', []); + } + + // methods + $fieldName = parse_name($field['name'], 1); + if (in_array($field['designType'], $this->dtStringToArray)) { + $modelData['methods'][] = Helper::assembleStub('mixins/model/getters/stringToArray', [ + 'field' => $fieldName + ]); + $modelData['methods'][] = Helper::assembleStub('mixins/model/setters/arrayToString', [ + 'field' => $fieldName + ]); + } elseif ($field['designType'] == 'array') { + $modelData['methods'][] = Helper::assembleStub('mixins/model/getters/jsonDecode', [ + 'field' => $fieldName + ]); + } elseif ($field['designType'] == 'time') { + $modelData['methods'][] = Helper::assembleStub('mixins/model/setters/time', [ + 'field' => $fieldName + ]); + } elseif ($field['designType'] == 'editor') { + $modelData['methods'][] = Helper::assembleStub('mixins/model/getters/htmlDecode', [ + 'field' => $fieldName + ]); + } elseif ($field['designType'] == 'spk') { + $modelData['methods'][] = Helper::assembleStub('mixins/model/getters/string', [ + 'field' => $fieldName + ]); + } elseif (in_array($field['type'], ['float', 'decimal', 'double'])) { + $modelData['methods'][] = Helper::assembleStub('mixins/model/getters/float', [ + 'field' => $fieldName + ]); + } + + if ($field['designType'] == 'city') { + $modelData['append'][] = $field['name'] . '_text'; + $modelData['methods'][] = Helper::assembleStub('mixins/model/getters/cityNames', [ + 'field' => $fieldName . 'Text', + 'originalFieldName' => $field['name'], + ]); + } + } + + /** + * 控制器/模型等文件的一些杂项属性解析 + */ + private function parseSundryData($field, $table): void + { + if ($field['designType'] == 'editor') { + $this->formVueData['bigDialog'] = true; // 加宽 dialog + $this->controllerData['filterRule'] = "\n" . Helper::tab(2) . '$this->request->filter(\'clean_xss\');'; // 修改变量过滤规则 + } + + // 默认排序字段 + if ($table['defaultSortField'] && $table['defaultSortType']) { + $defaultSortField = "{$table['defaultSortField']},{$table['defaultSortType']}"; + if ($defaultSortField == 'id,desc') { + $this->controllerData['attr']['defaultSortField'] = ''; + } else { + $this->controllerData['attr']['defaultSortField'] = $defaultSortField; + $this->indexVueData['defaultOrder'] = Helper::buildDefaultOrder($table['defaultSortField'], $table['defaultSortType']); + } + } + + // 自定义了权重字段名称 + if ($field['originalDesignType'] == 'weigh' && $field['name'] != 'weigh') { + $this->controllerData['attr']['weighField'] = $field['name']; + } + } + + /** + * 组装前台表单的数据 + * @throws Throwable + */ + private function getFormField($field, $columnDict, ?string $dbConnection = null): array + { + // 表单项属性 + $formField = [ + ':label' => 't(\'' . $this->webTranslate . $field['name'] . '\')', + 'type' => $field['designType'], + 'v-model' => 'baTable.form.items!.' . $field['name'], + 'prop' => $field['name'], + ]; + + // 不同输入框的属性处理 + if ($columnDict || in_array($field['designType'], ['radio', 'checkbox', 'select', 'selects'])) { + $formField[':input-attr']['content'] = $columnDict; + } elseif ($field['designType'] == 'textarea') { + $formField[':input-attr']['rows'] = (int)($field['form']['rows'] ?? 3); + $formField['@keyup.enter.stop'] = ''; + $formField['@keyup.ctrl.enter'] = 'baTable.onSubmit(formRef)'; + } elseif ($field['designType'] == 'remoteSelect' || $field['designType'] == 'remoteSelects') { + $formField[':input-attr']['pk'] = $this->getRemoteSelectPk($field); + $formField[':input-attr']['field'] = $field['form']['remote-field'] ?? 'name'; + $formField[':input-attr']['remoteUrl'] = $this->getRemoteSelectUrl($field); + } elseif ($field['designType'] == 'number') { + $formField[':input-attr']['step'] = (int)($field['form']['step'] ?? 1); + } elseif ($field['designType'] == 'icon') { + $formField[':input-attr']['placement'] = 'top'; + } elseif ($field['designType'] == 'editor') { + $formField['@keyup.enter.stop'] = ''; + $formField['@keyup.ctrl.enter'] = 'baTable.onSubmit(formRef)'; + } + + // placeholder + if (!in_array($field['designType'], ['image', 'images', 'file', 'files', 'switch'])) { + if (in_array($field['designType'], ['radio', 'checkbox', 'datetime', 'year', 'date', 'time', 'select', 'selects', 'remoteSelect', 'remoteSelects', 'city', 'icon'])) { + $formField[':placeholder'] = "t('Please select field', { field: t('" . $this->webTranslate . $field['name'] . "') })"; + } else { + $formField[':placeholder'] = "t('Please input field', { field: t('" . $this->webTranslate . $field['name'] . "') })"; + } + } + + // 默认值 + if ($field['defaultType'] == 'INPUT') { + $this->indexVueData['defaultItems'][$field['name']] = $field['default']; + } + + // 部分生成类型的默认值需要额外处理 + if ($field['designType'] == 'editor') { + $this->indexVueData['defaultItems'][$field['name']] = ($field['defaultType'] == 'INPUT' && $field['default']) ? $field['default'] : ''; + } elseif ($field['designType'] == 'array') { + $this->indexVueData['defaultItems'][$field['name']] = "[]"; + } elseif ($field['defaultType'] == 'INPUT' && in_array($field['designType'], $this->dtStringToArray) && str_contains($field['default'], ',')) { + $this->indexVueData['defaultItems'][$field['name']] = Helper::buildSimpleArray(explode(',', $field['default'])); + } elseif ($field['defaultType'] == 'INPUT' && in_array($field['designType'], ['number', 'float'])) { + $this->indexVueData['defaultItems'][$field['name']] = (float)$field['default']; + } + + // 无意义的默认值 + if (isset($field['default']) && in_array($field['designType'], ['switch', 'number', 'float', 'remoteSelect']) && $field['default'] == 0) { + unset($this->indexVueData['defaultItems'][$field['name']]); + } + + return $formField; + } + + private function getRemoteSelectPk($field): string + { + $pk = $field['form']['remote-pk'] ?? 'id'; + if (!str_contains($pk, '.')) { + if ($field['form']['remote-source-config-type'] == 'crud' && $field['form']['remote-model']) { + $alias = parse_name(basename(str_replace('\\', '/', $field['form']['remote-model']), '.php')); + } else { + $alias = $field['form']['remote-primary-table-alias'] ?? ''; + } + } + return !empty($alias) ? "$alias.$pk" : $pk; + } + + private function getRemoteSelectUrl($field): string + { + if ($field['form']['remote-source-config-type'] == 'crud' && $field['form']['remote-controller']) { + $pathArr = []; + $controller = explode(DIRECTORY_SEPARATOR, $field['form']['remote-controller']); + $controller = str_replace('.php', '', $controller); + $redundantDir = [ + 'app' => 0, + 'admin' => 1, + 'controller' => 2, + ]; + foreach ($controller as $key => $item) { + if (!array_key_exists($item, $redundantDir) || $key !== $redundantDir[$item]) { + $pathArr[] = $item; + } + } + $url = count($pathArr) > 1 ? implode('.', $pathArr) : $pathArr[0]; + return '/admin/' . $url . '/index'; + } + return $field['form']['remote-url']; + } + + private function getTableColumn($field, $columnDict, $fieldNamePrefix = '', $translationPrefix = ''): array + { + $column = [ + 'label' => "t('" . $this->webTranslate . $translationPrefix . $field['name'] . "')", + 'prop' => $fieldNamePrefix . $field['name'] . ($field['designType'] == 'city' ? '_text' : ''), + 'align' => 'center', + ]; + + // 模糊搜索增加一个placeholder + if (isset($field['table']['operator']) && $field['table']['operator'] == 'LIKE') { + $column['operatorPlaceholder'] = "t('Fuzzy query')"; + } + + // 合并前端预设的字段表格属性 + if (!empty($field['table'])) { + $column = array_merge($column, $field['table']); + $column['comSearchInputAttr'] = str_attr_to_array($column['comSearchInputAttr'] ?? ''); + } + + // 需要值替换的渲染类型 + $columnReplaceValue = ['tag', 'tags', 'switch']; + if (!in_array($field['designType'], ['remoteSelect', 'remoteSelects']) && ($columnDict || (isset($field['table']['render']) && in_array($field['table']['render'], $columnReplaceValue)))) { + $column['replaceValue'] = $columnDict; + } + + if (isset($column['render']) && $column['render'] == 'none') { + unset($column['render']); + } + return $column; + } + + private function getColumnDict($column, $translationPrefix = ''): array + { + $dict = []; + // 确保字典中无翻译也可以识别到该值 + if (in_array($column['type'], ['enum', 'set'])) { + $dataType = str_replace(' ', '', $column['dataType']); + $columnData = substr($dataType, stripos($dataType, '(') + 1, -1); + $columnData = explode(',', str_replace(["'", '"'], '', $columnData)); + foreach ($columnData as $columnDatum) { + $dict[$columnDatum] = $column['name'] . ' ' . $columnDatum; + } + } + $dictData = []; + Helper::getDictData($dictData, $column, 'zh-cn', $translationPrefix); + if ($dictData) { + unset($dictData[$translationPrefix . $column['name']]); + foreach ($dictData as $key => $item) { + $keyName = str_replace($translationPrefix . $column['name'] . ' ', '', $key); + $dict[$keyName] = "t('" . $this->webTranslate . $key . "')"; + } + } + return $dict; + } +} \ No newline at end of file diff --git a/app/admin/controller/crud/Log.php b/app/admin/controller/crud/Log.php new file mode 100644 index 0000000..59624fa --- /dev/null +++ b/app/admin/controller/crud/Log.php @@ -0,0 +1,37 @@ +model = new CrudLog(); + + if (!$this->auth->check('crud/crud/index')) { + $this->error(__('You have no permission'), [], 401); + } + } + +} \ No newline at end of file diff --git a/app/admin/controller/routine/AdminInfo.php b/app/admin/controller/routine/AdminInfo.php new file mode 100644 index 0000000..945e5e3 --- /dev/null +++ b/app/admin/controller/routine/AdminInfo.php @@ -0,0 +1,90 @@ +auth->setAllowFields($this->authAllowFields); + $this->model = $this->auth->getAdmin(); + } + + public function index(): void + { + $info = $this->auth->getInfo(); + $this->success('', [ + 'info' => $info + ]); + } + + public function edit(): void + { + $pk = $this->model->getPk(); + $id = $this->request->param($pk); + $row = $this->model->find($id); + if (!$row) { + $this->error(__('Record not found')); + } + + if ($this->request->isPost()) { + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + if (!empty($data['avatar'])) { + $row->avatar = $data['avatar']; + if ($row->save()) { + $this->success(__('Avatar modified successfully!')); + } + } + + // 数据验证 + if ($this->modelValidate) { + try { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + $validate = new $validate(); + $validate->scene('info')->check($data); + } catch (Throwable $e) { + $this->error($e->getMessage()); + } + } + + if (!empty($data['password'])) { + $this->model->resetPassword($this->auth->id, $data['password']); + } + + $data = $this->excludeFields($data); + $result = false; + $this->model->startTrans(); + try { + $result = $row->save($data); + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('Update successful')); + } else { + $this->error(__('No rows updated')); + } + } + } +} \ No newline at end of file diff --git a/app/admin/controller/routine/Attachment.php b/app/admin/controller/routine/Attachment.php new file mode 100644 index 0000000..776a115 --- /dev/null +++ b/app/admin/controller/routine/Attachment.php @@ -0,0 +1,59 @@ +model = new AttachmentModel(); + } + + /** + * 删除 + * @throws Throwable + */ + public function del(): void + { + $where = []; + $dataLimitAdminIds = $this->getDataLimitAdminIds(); + if ($dataLimitAdminIds) { + $where[] = [$this->dataLimitField, 'in', $dataLimitAdminIds]; + } + + $ids = $this->request->param('ids/a', []); + $where[] = [$this->model->getPk(), 'in', $ids]; + $data = $this->model->where($where)->select(); + + $count = 0; + try { + foreach ($data as $v) { + $count += $v->delete(); + } + } catch (Throwable $e) { + $this->error(__('%d records and files have been deleted', [$count]) . $e->getMessage()); + } + if ($count) { + $this->success(__('%d records and files have been deleted', [$count])); + } else { + $this->error(__('No rows were deleted')); + } + } +} \ No newline at end of file diff --git a/app/admin/controller/routine/Config.php b/app/admin/controller/routine/Config.php new file mode 100644 index 0000000..64db402 --- /dev/null +++ b/app/admin/controller/routine/Config.php @@ -0,0 +1,246 @@ + 'config/app.php', + 'webAdminBase' => 'web/src/router/static/adminBase.ts', + 'backendEntranceStub' => 'app/admin/library/stubs/backendEntrance.stub', + ]; + + public function initialize(): void + { + parent::initialize(); + $this->model = new ConfigModel(); + } + + public function index(): void + { + $configGroup = get_sys_config('config_group'); + $config = $this->model->order('weigh desc')->select()->toArray(); + + $list = []; + $newConfigGroup = []; + foreach ($configGroup as $item) { + $list[$item['key']]['name'] = $item['key']; + $list[$item['key']]['title'] = __($item['value']); + $newConfigGroup[$item['key']] = $list[$item['key']]['title']; + } + foreach ($config as $item) { + if (array_key_exists($item['group'], $newConfigGroup)) { + $item['title'] = __($item['title']); + $list[$item['group']]['list'][] = $item; + } + } + + $this->success('', [ + 'list' => $list, + 'remark' => get_route_remark(), + 'configGroup' => $newConfigGroup ?? [], + 'quickEntrance' => get_sys_config('config_quick_entrance'), + ]); + } + + /** + * 编辑 + * @throws Throwable + */ + public function edit(): void + { + $all = $this->model->select(); + foreach ($all as $item) { + if ($item['type'] == 'editor') { + $this->request->filter('clean_xss'); + break; + } + } + if ($this->request->isPost()) { + $this->modelValidate = false; + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + $data = $this->excludeFields($data); + + $configValue = []; + foreach ($all as $item) { + if (array_key_exists($item->name, $data)) { + $configValue[] = [ + 'id' => $item->id, + 'type' => $item->getData('type'), + 'value' => $data[$item->name] + ]; + + // 自定义后台入口 + if ($item->name == 'backend_entrance') { + $backendEntrance = get_sys_config('backend_entrance'); + if ($backendEntrance == $data[$item->name]) continue; + + if (!preg_match("/^\/[a-zA-Z0-9]+$/", $data[$item->name])) { + $this->error(__('Backend entrance rule')); + } + + // 修改 adminBaseRoutePath + $adminBaseFilePath = Filesystem::fsFit(root_path() . $this->filePath['webAdminBase']); + $adminBaseContent = @file_get_contents($adminBaseFilePath); + if (!$adminBaseContent) $this->error(__('Configuration write failed: %s', [$this->filePath['webAdminBase']])); + + $adminBaseContent = str_replace("export const adminBaseRoutePath = '$backendEntrance'", "export const adminBaseRoutePath = '{$data[$item->name]}'", $adminBaseContent); + $result = @file_put_contents($adminBaseFilePath, $adminBaseContent); + if (!$result) $this->error(__('Configuration write failed: %s', [$this->filePath['webAdminBase']])); + + // 去除后台入口开头的斜杠 + $oldBackendEntrance = ltrim($backendEntrance, '/'); + $newBackendEntrance = ltrim($data[$item->name], '/'); + + // 设置应用别名映射 + $appMap = config('app.app_map'); + $adminMapKey = array_search('admin', $appMap); + if ($adminMapKey !== false) { + unset($appMap[$adminMapKey]); + } + if ($newBackendEntrance != 'admin') { + $appMap[$newBackendEntrance] = 'admin'; + } + $appConfigFilePath = Filesystem::fsFit(root_path() . $this->filePath['appConfig']); + $appConfigContent = @file_get_contents($appConfigFilePath); + if (!$appConfigContent) $this->error(__('Configuration write failed: %s', [$this->filePath['appConfig']])); + + $appMapStr = ''; + foreach ($appMap as $newAppName => $oldAppName) { + $appMapStr .= "'$newAppName' => '$oldAppName', "; + } + $appMapStr = rtrim($appMapStr, ', '); + $appMapStr = "[$appMapStr]"; + + $appConfigContent = preg_replace("/'app_map'(\s+)=>(\s+)(.*)\/\/ 域名/s", "'app_map'\$1=>\$2$appMapStr,\n // 域名", $appConfigContent); + $result = @file_put_contents($appConfigFilePath, $appConfigContent); + if (!$result) $this->error(__('Configuration write failed: %s', [$this->filePath['appConfig']])); + + // 建立API入口文件 + $oldBackendEntranceFile = Filesystem::fsFit(public_path() . $oldBackendEntrance . '.php'); + $newBackendEntranceFile = Filesystem::fsFit(public_path() . $newBackendEntrance . '.php'); + if (file_exists($oldBackendEntranceFile)) @unlink($oldBackendEntranceFile); + + if ($newBackendEntrance != 'admin') { + $backendEntranceStub = @file_get_contents(Filesystem::fsFit(root_path() . $this->filePath['backendEntranceStub'])); + if (!$backendEntranceStub) $this->error(__('Configuration write failed: %s', [$this->filePath['backendEntranceStub']])); + + $result = @file_put_contents($newBackendEntranceFile, $backendEntranceStub); + if (!$result) $this->error(__('Configuration write failed: %s', [$newBackendEntranceFile])); + } + } + } + } + + $result = false; + $this->model->startTrans(); + try { + // 模型验证 + if ($this->modelValidate) { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + if (class_exists($validate)) { + $validate = new $validate(); + if ($this->modelSceneValidate) $validate->scene('edit'); + $validate->check($data); + } + } + $result = $this->model->saveAll($configValue); + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('The current page configuration item was updated successfully')); + } else { + $this->error(__('No rows updated')); + } + + } + } + + public function add(): void + { + if ($this->request->isPost()) { + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + $data = $this->excludeFields($data); + $result = false; + $this->model->startTrans(); + try { + // 模型验证 + if ($this->modelValidate) { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + if (class_exists($validate)) { + $validate = new $validate(); + if ($this->modelSceneValidate) $validate->scene('add'); + $validate->check($data); + } + } + $result = $this->model->save($data); + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('Added successfully')); + } else { + $this->error(__('No rows were added')); + } + } + + $this->error(__('Parameter error')); + } + + /** + * 发送邮件测试 + * @throws Throwable + */ + public function sendTestMail(): void + { + $data = $this->request->post(); + $mail = new Email(); + try { + $mail->Host = $data['smtp_server']; + $mail->SMTPAuth = true; + $mail->Username = $data['smtp_user']; + $mail->Password = $data['smtp_pass']; + $mail->SMTPSecure = $data['smtp_verification'] == 'SSL' ? PHPMailer::ENCRYPTION_SMTPS : PHPMailer::ENCRYPTION_STARTTLS; + $mail->Port = $data['smtp_port']; + + $mail->setFrom($data['smtp_sender_mail'], $data['smtp_user']); + + $mail->isSMTP(); + $mail->addAddress($data['testMail']); + $mail->isHTML(); + $mail->setSubject(__('This is a test email') . '-' . get_sys_config('site_name')); + $mail->Body = __('Congratulations, receiving this email means that your email service has been configured correctly'); + $mail->send(); + } catch (PHPMailerException) { + $this->error($mail->ErrorInfo); + } + $this->success(__('Test mail sent successfully~')); + } +} \ No newline at end of file diff --git a/app/admin/controller/security/DataRecycle.php b/app/admin/controller/security/DataRecycle.php new file mode 100644 index 0000000..33201c5 --- /dev/null +++ b/app/admin/controller/security/DataRecycle.php @@ -0,0 +1,150 @@ +model = new DataRecycleModel(); + } + + /** + * 添加 + * @throws Throwable + */ + public function add(): void + { + if ($this->request->isPost()) { + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + $data = $this->excludeFields($data); + $data['controller_as'] = str_ireplace('.php', '', $data['controller'] ?? ''); + $data['controller_as'] = strtolower(str_ireplace(['\\', '.'], '/', $data['controller_as'])); + + $result = false; + $this->model->startTrans(); + try { + // 模型验证 + if ($this->modelValidate) { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + if (class_exists($validate)) { + $validate = new $validate(); + if ($this->modelSceneValidate) $validate->scene('add'); + $validate->check($data); + } + } + $result = $this->model->save($data); + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('Added successfully')); + } else { + $this->error(__('No rows were added')); + } + } + + // 放在add方法内,就不需要额外添加权限节点了 + $this->success('', [ + 'controllers' => $this->getControllerList(), + ]); + } + + /** + * 编辑 + * @throws Throwable + */ + public function edit(): void + { + $pk = $this->model->getPk(); + $id = $this->request->param($pk); + $row = $this->model->find($id); + if (!$row) { + $this->error(__('Record not found')); + } + + if ($this->request->isPost()) { + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + $data = $this->excludeFields($data); + $data['controller_as'] = str_ireplace('.php', '', $data['controller'] ?? ''); + $data['controller_as'] = strtolower(str_ireplace(['\\', '.'], '/', $data['controller_as'])); + + $result = false; + $this->model->startTrans(); + try { + // 模型验证 + if ($this->modelValidate) { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + if (class_exists($validate)) { + $validate = new $validate(); + if ($this->modelSceneValidate) $validate->scene('edit'); + $validate->check($data); + } + } + $result = $row->save($data); + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('Update successful')); + } else { + $this->error(__('No rows updated')); + } + } + + $this->success('', [ + 'row' => $row + ]); + } + + protected function getControllerList(): array + { + $outExcludeController = [ + 'Addon.php', + 'Ajax.php', + 'Module.php', + 'Terminal.php', + 'Dashboard.php', + 'Index.php', + 'routine/AdminInfo.php', + 'user/MoneyLog.php', + 'user/ScoreLog.php', + ]; + $outControllers = []; + $controllers = get_controller_list(); + foreach ($controllers as $key => $controller) { + if (!in_array($controller, $outExcludeController)) { + $outControllers[$key] = $controller; + } + } + return $outControllers; + } +} \ No newline at end of file diff --git a/app/admin/controller/security/DataRecycleLog.php b/app/admin/controller/security/DataRecycleLog.php new file mode 100644 index 0000000..68907d8 --- /dev/null +++ b/app/admin/controller/security/DataRecycleLog.php @@ -0,0 +1,106 @@ +model = new DataRecycleLogModel(); + } + + /** + * 还原 + * @throws Throwable + */ + public function restore(): void + { + $ids = $this->request->param('ids/a', []); + $data = $this->model->where('id', 'in', $ids)->select(); + if (!$data) { + $this->error(__('Record not found')); + } + + $count = 0; + $this->model->startTrans(); + try { + foreach ($data as $row) { + $recycleData = json_decode($row['data'], true); + if (is_array($recycleData) && Db::connect(TableManager::getConnection($row->connection))->name($row->data_table)->insert($recycleData)) { + $row->delete(); + $count++; + } + } + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + + if ($count) { + $this->success(); + } else { + $this->error(__('No rows were restore')); + } + } + + /** + * 详情 + * @throws Throwable + */ + public function info(): void + { + $pk = $this->model->getPk(); + $id = $this->request->param($pk); + $row = $this->model + ->withJoin($this->withJoinTable, $this->withJoinType) + ->where('data_recycle_log.id', $id) + ->find(); + if (!$row) { + $this->error(__('Record not found')); + } + $data = $this->jsonToArray($row['data']); + if (is_array($data)) { + foreach ($data as $key => $item) { + $data[$key] = $this->jsonToArray($item); + } + } + $row['data'] = $data; + + $this->success('', [ + 'row' => $row + ]); + } + + protected function jsonToArray($value = '') + { + if (!is_string($value)) { + return $value; + } + $data = json_decode($value, true); + if (($data && is_object($data)) || (is_array($data) && !empty($data))) { + return $data; + } + return $value; + } +} \ No newline at end of file diff --git a/app/admin/controller/security/SensitiveData.php b/app/admin/controller/security/SensitiveData.php new file mode 100644 index 0000000..555889e --- /dev/null +++ b/app/admin/controller/security/SensitiveData.php @@ -0,0 +1,204 @@ +model = new SensitiveDataModel(); + } + + /** + * 查看 + * @throws Throwable + */ + public function index(): void + { + if ($this->request->param('select')) { + $this->select(); + } + + list($where, $alias, $limit, $order) = $this->queryBuilder(); + $res = $this->model + ->withJoin($this->withJoinTable, $this->withJoinType) + ->alias($alias) + ->where($where) + ->order($order) + ->paginate($limit); + + foreach ($res->items() as $item) { + if ($item->data_fields) { + $fields = []; + foreach ($item->data_fields as $key => $field) { + $fields[] = $field ?: $key; + } + $item->data_fields = $fields; + } + } + + $this->success('', [ + 'list' => $res->items(), + 'total' => $res->total(), + 'remark' => get_route_remark(), + ]); + } + + /** + * 添加重写 + * @throws Throwable + */ + public function add(): void + { + if ($this->request->isPost()) { + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + $data = $this->excludeFields($data); + $data['controller_as'] = str_ireplace('.php', '', $data['controller'] ?? ''); + $data['controller_as'] = strtolower(str_ireplace(['\\', '.'], '/', $data['controller_as'])); + + $result = false; + $this->model->startTrans(); + try { + // 模型验证 + if ($this->modelValidate) { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + if (class_exists($validate)) { + $validate = new $validate(); + if ($this->modelSceneValidate) $validate->scene('add'); + $validate->check($data); + } + } + + if (is_array($data['fields'])) { + $data['data_fields'] = []; + foreach ($data['fields'] as $field) { + $data['data_fields'][$field['name']] = $field['value']; + } + } + + $result = $this->model->save($data); + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('Added successfully')); + } else { + $this->error(__('No rows were added')); + } + } + + // 放在add方法内,就不需要额外添加权限节点了 + $this->success('', [ + 'controllers' => $this->getControllerList(), + ]); + } + + /** + * 编辑重写 + * @throws Throwable + */ + public function edit(): void + { + $pk = $this->model->getPk(); + $id = $this->request->param($pk); + $row = $this->model->find($id); + if (!$row) { + $this->error(__('Record not found')); + } + + if ($this->request->isPost()) { + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + $data = $this->excludeFields($data); + $data['controller_as'] = str_ireplace('.php', '', $data['controller'] ?? ''); + $data['controller_as'] = strtolower(str_ireplace(['\\', '.'], '/', $data['controller_as'])); + + $result = false; + $this->model->startTrans(); + try { + // 模型验证 + if ($this->modelValidate) { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + if (class_exists($validate)) { + $validate = new $validate(); + if ($this->modelSceneValidate) $validate->scene('edit'); + $validate->check($data); + } + } + + if (is_array($data['fields'])) { + $data['data_fields'] = []; + foreach ($data['fields'] as $field) { + $data['data_fields'][$field['name']] = $field['value']; + } + } + + $result = $row->save($data); + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('Update successful')); + } else { + $this->error(__('No rows updated')); + } + } + + $this->success('', [ + 'row' => $row, + 'controllers' => $this->getControllerList(), + ]); + } + + protected function getControllerList(): array + { + $outExcludeController = [ + 'Addon.php', + 'Ajax.php', + 'Dashboard.php', + 'Index.php', + 'Module.php', + 'Terminal.php', + 'auth/AdminLog.php', + 'routine/AdminInfo.php', + 'routine/Config.php', + 'user/MoneyLog.php', + 'user/ScoreLog.php', + ]; + $outControllers = []; + $controllers = get_controller_list(); + foreach ($controllers as $key => $controller) { + if (!in_array($controller, $outExcludeController)) { + $outControllers[$key] = $controller; + } + } + return $outControllers; + } +} \ No newline at end of file diff --git a/app/admin/controller/security/SensitiveDataLog.php b/app/admin/controller/security/SensitiveDataLog.php new file mode 100644 index 0000000..dc41595 --- /dev/null +++ b/app/admin/controller/security/SensitiveDataLog.php @@ -0,0 +1,117 @@ +model = new SensitiveDataLogModel(); + } + + /** + * 查看 + * @throws Throwable + */ + public function index(): void + { + if ($this->request->param('select')) { + $this->select(); + } + + list($where, $alias, $limit, $order) = $this->queryBuilder(); + $res = $this->model + ->withJoin($this->withJoinTable, $this->withJoinType) + ->alias($alias) + ->where($where) + ->order($order) + ->paginate($limit); + + foreach ($res->items() as $item) { + $item->id_value = $item['primary_key'] . '=' . $item->id_value; + } + + $this->success('', [ + 'list' => $res->items(), + 'total' => $res->total(), + 'remark' => get_route_remark(), + ]); + } + + /** + * 详情 + * @throws Throwable + */ + public function info(): void + { + $pk = $this->model->getPk(); + $id = $this->request->param($pk); + $row = $this->model + ->withJoin($this->withJoinTable, $this->withJoinType) + ->where('sensitive_data_log.id', $id) + ->find(); + if (!$row) { + $this->error(__('Record not found')); + } + + $this->success('', [ + 'row' => $row + ]); + } + + /** + * 回滚 + * @throws Throwable + */ + public function rollback(): void + { + $ids = $this->request->param('ids/a', []); + $data = $this->model->where('id', 'in', $ids)->select(); + if (!$data) { + $this->error(__('Record not found')); + } + + $count = 0; + $this->model->startTrans(); + try { + foreach ($data as $row) { + if (Db::connect(TableManager::getConnection($row->connection))->name($row->data_table)->where($row->primary_key, $row->id_value)->update([ + $row->data_field => $row->before + ])) { + $row->delete(); + $count++; + } + } + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + + if ($count) { + $this->success(); + } else { + $this->error(__('No rows were rollback')); + } + } +} \ No newline at end of file diff --git a/app/admin/controller/user/Group.php b/app/admin/controller/user/Group.php new file mode 100644 index 0000000..8ca7996 --- /dev/null +++ b/app/admin/controller/user/Group.php @@ -0,0 +1,163 @@ +model = new UserGroup(); + } + + /** + * 添加 + * @throws Throwable + */ + public function add(): void + { + if ($this->request->isPost()) { + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + $data = $this->excludeFields($data); + $data = $this->handleRules($data); + + $result = false; + $this->model->startTrans(); + try { + // 模型验证 + if ($this->modelValidate) { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + if (class_exists($validate)) { + $validate = new $validate(); + $validate->scene('add')->check($data); + } + } + $result = $this->model->save($data); + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('Added successfully')); + } else { + $this->error(__('No rows were added')); + } + } + + $this->error(__('Parameter error')); + } + + /** + * 编辑 + * @throws Throwable + */ + public function edit(): void + { + $pk = $this->model->getPk(); + $id = $this->request->param($pk); + $row = $this->model->find($id); + if (!$row) { + $this->error(__('Record not found')); + } + + if ($this->request->isPost()) { + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + $data = $this->excludeFields($data); + $data = $this->handleRules($data); + + $result = false; + $this->model->startTrans(); + try { + // 模型验证 + if ($this->modelValidate) { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + if (class_exists($validate)) { + $validate = new $validate(); + $validate->scene('edit')->check($data); + } + } + $result = $row->save($data); + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('Update successful')); + } else { + $this->error(__('No rows updated')); + } + } + + // 读取所有pid,全部从节点数组移除,父级选择状态由子级决定 + $pidArr = UserRule::field('pid') + ->distinct(true) + ->where('id', 'in', $row->rules) + ->select() + ->toArray(); + $rules = $row->rules ? explode(',', $row->rules) : []; + foreach ($pidArr as $item) { + $ruKey = array_search($item['pid'], $rules); + if ($ruKey !== false) { + unset($rules[$ruKey]); + } + } + $row->rules = array_values($rules); + $this->success('', [ + 'row' => $row + ]); + } + + /** + * 权限规则入库前处理 + * @param array $data 接受到的数据 + * @return array + * @throws Throwable + */ + private function handleRules(array &$data): array + { + if (is_array($data['rules']) && $data['rules']) { + $rules = UserRule::select(); + $super = true; + foreach ($rules as $rule) { + if (!in_array($rule['id'], $data['rules'])) { + $super = false; + } + } + + if ($super) { + $data['rules'] = '*'; + } else { + $data['rules'] = implode(',', $data['rules']); + } + } else { + unset($data['rules']); + } + return $data; + } +} \ No newline at end of file diff --git a/app/admin/controller/user/MoneyLog.php b/app/admin/controller/user/MoneyLog.php new file mode 100644 index 0000000..20f86f1 --- /dev/null +++ b/app/admin/controller/user/MoneyLog.php @@ -0,0 +1,50 @@ +model = new UserMoneyLog(); + } + + /** + * 添加 + * @param int $userId + * @throws Throwable + */ + public function add(int $userId = 0): void + { + if ($this->request->isPost()) { + parent::add(); + } + + $user = User::where('id', $userId)->find(); + if (!$user) { + $this->error(__("The user can't find it")); + } + $this->success('', [ + 'user' => $user + ]); + } +} \ No newline at end of file diff --git a/app/admin/controller/user/Rule.php b/app/admin/controller/user/Rule.php new file mode 100644 index 0000000..8b22011 --- /dev/null +++ b/app/admin/controller/user/Rule.php @@ -0,0 +1,260 @@ + 'desc']; + + protected string|array $quickSearchField = 'title'; + + /** + * 远程select初始化传值 + * @var array + */ + protected array $initValue; + + /** + * 是否组装Tree + * @var bool + */ + protected bool $assembleTree; + + /** + * 搜索关键词 + * @var string + */ + protected string $keyword; + + public function initialize(): void + { + parent::initialize(); + + // 防止 URL 中的特殊符号被默认的 filter 函数转义 + $this->request->filter('clean_xss'); + + $this->model = new UserRule(); + $this->tree = Tree::instance(); + $isTree = $this->request->param('isTree', true); + $this->initValue = $this->request->get("initValue/a", []); + $this->initValue = array_filter($this->initValue); + $this->keyword = $this->request->request('quickSearch', ''); + $this->assembleTree = $isTree && !$this->initValue; // 有初始化值时不组装树状(初始化出来的值更好看) + } + + public function index(): void + { + if ($this->request->param('select')) { + $this->select(); + } + + $this->success('', [ + 'list' => $this->getRules(), + 'remark' => get_route_remark(), + ]); + } + + /** + * 添加 + */ + public function add(): void + { + if ($this->request->isPost()) { + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + $data = $this->excludeFields($data); + if ($this->dataLimit && $this->dataLimitFieldAutoFill) { + $data[$this->dataLimitField] = $this->auth->id; + } + + $result = false; + $this->model->startTrans(); + try { + // 模型验证 + if ($this->modelValidate) { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + if (class_exists($validate)) { + $validate = new $validate(); + if ($this->modelSceneValidate) $validate->scene('add'); + $validate->check($data); + } + } + $result = $this->model->save($data); + + if (!empty($data['pid'])) { + $groups = UserGroup::where('rules', '<>', '*')->select(); + foreach ($groups as $group) { + $rules = explode(',', $group->rules); + if (in_array($data['pid'], $rules) && !in_array($this->model->id, $rules)) { + $rules[] = $this->model->id; + $group->rules = implode(',', $rules); + $group->save(); + } + } + } + + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('Added successfully')); + } else { + $this->error(__('No rows were added')); + } + } + + $this->error(__('Parameter error')); + } + + /** + * 编辑 + * @throws Throwable + */ + public function edit(): void + { + $id = $this->request->param($this->model->getPk()); + $row = $this->model->find($id); + if (!$row) { + $this->error(__('Record not found')); + } + + $dataLimitAdminIds = $this->getDataLimitAdminIds(); + if ($dataLimitAdminIds && !in_array($row[$this->dataLimitField], $dataLimitAdminIds)) { + $this->error(__('You have no permission')); + } + + if ($this->request->isPost()) { + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + $data = $this->excludeFields($data); + $result = false; + $this->model->startTrans(); + try { + // 模型验证 + if ($this->modelValidate) { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + if (class_exists($validate)) { + $validate = new $validate(); + if ($this->modelSceneValidate) $validate->scene('edit'); + $validate->check($data); + } + } + if (isset($data['pid']) && $data['pid'] > 0) { + // 满足意图并消除副作用 + $parent = $this->model->where('id', $data['pid'])->find(); + if ($parent['pid'] == $row['id']) { + $parent->pid = 0; + $parent->save(); + } + } + $result = $row->save($data); + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('Update successful')); + } else { + $this->error(__('No rows updated')); + } + + } + + $this->success('', [ + 'row' => $row + ]); + } + + /** + * 删除 + * @throws Throwable + */ + public function del(): void + { + $ids = $this->request->param('ids/a', []); + + // 子级元素检查 + $subData = $this->model->where('pid', 'in', $ids)->column('pid', 'id'); + foreach ($subData as $key => $subDatum) { + if (!in_array($key, $ids)) { + $this->error(__('Please delete the child element first, or use batch deletion')); + } + } + + parent::del(); + } + + /** + * 远程下拉 + * @throws Throwable + */ + public function select(): void + { + $data = $this->getRules([['status', '=', 1]]); + + if ($this->assembleTree) { + $data = $this->tree->assembleTree($this->tree->getTreeArray($data, 'title')); + } + $this->success('', [ + 'options' => $data + ]); + } + + /** + * 获取菜单规则 + * @throws Throwable + */ + private function getRules(array $where = []): array + { + $pk = $this->model->getPk(); + $initKey = $this->request->get("initKey/s", $pk); + + if ($this->keyword) { + $keyword = explode(' ', $this->keyword); + foreach ($keyword as $item) { + $where[] = [$this->quickSearchField, 'like', '%' . $item . '%']; + } + } + + if ($this->initValue) { + $where[] = [$initKey, 'in', $this->initValue]; + } + + $data = $this->model + ->where($where) + ->order($this->queryOrderBuilder()) + ->select() + ->toArray(); + + return $this->assembleTree ? $this->tree->assembleChild($data) : $data; + } + +} \ No newline at end of file diff --git a/app/admin/controller/user/ScoreLog.php b/app/admin/controller/user/ScoreLog.php new file mode 100644 index 0000000..d8f98db --- /dev/null +++ b/app/admin/controller/user/ScoreLog.php @@ -0,0 +1,50 @@ +model = new UserScoreLog(); + } + + /** + * 添加 + * @param int $userId + * @throws Throwable + */ + public function add(int $userId = 0): void + { + if ($this->request->isPost()) { + parent::add(); + } + + $user = User::where('id', $userId)->find(); + if (!$user) { + $this->error(__("The user can't find it")); + } + $this->success('', [ + 'user' => $user + ]); + } +} \ No newline at end of file diff --git a/app/admin/controller/user/User.php b/app/admin/controller/user/User.php new file mode 100644 index 0000000..04b3929 --- /dev/null +++ b/app/admin/controller/user/User.php @@ -0,0 +1,156 @@ +model = new UserModel(); + } + + /** + * 查看 + * @throws Throwable + */ + public function index(): void + { + if ($this->request->param('select')) { + $this->select(); + } + + list($where, $alias, $limit, $order) = $this->queryBuilder(); + $res = $this->model + ->withoutField('password,salt') + ->withJoin($this->withJoinTable, $this->withJoinType) + ->alias($alias) + ->where($where) + ->order($order) + ->paginate($limit); + + $this->success('', [ + 'list' => $res->items(), + 'total' => $res->total(), + 'remark' => get_route_remark(), + ]); + } + + /** + * 添加 + * @throws Throwable + */ + public function add(): void + { + if ($this->request->isPost()) { + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + $result = false; + $passwd = $data['password']; // 密码将被排除不直接入库 + $data = $this->excludeFields($data); + + $this->model->startTrans(); + try { + // 模型验证 + if ($this->modelValidate) { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + if (class_exists($validate)) { + $validate = new $validate(); + if ($this->modelSceneValidate) $validate->scene('add'); + $validate->check($data); + } + } + $result = $this->model->save($data); + $this->model->commit(); + + if (!empty($passwd)) { + $this->model->resetPassword($this->model->id, $passwd); + } + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('Added successfully')); + } else { + $this->error(__('No rows were added')); + } + } + + $this->error(__('Parameter error')); + } + + /** + * 编辑 + * @throws Throwable + */ + public function edit(): void + { + $pk = $this->model->getPk(); + $id = $this->request->param($pk); + $row = $this->model->find($id); + if (!$row) { + $this->error(__('Record not found')); + } + + if ($this->request->isPost()) { + $password = $this->request->post('password', ''); + if ($password) { + $this->model->resetPassword($id, $password); + } + parent::edit(); + } + + unset($row->salt); + $row->password = ''; + $this->success('', [ + 'row' => $row + ]); + } + + /** + * 重写select + * @throws Throwable + */ + public function select(): void + { + list($where, $alias, $limit, $order) = $this->queryBuilder(); + $res = $this->model + ->withoutField('password,salt') + ->withJoin($this->withJoinTable, $this->withJoinType) + ->alias($alias) + ->where($where) + ->order($order) + ->paginate($limit); + + foreach ($res as $re) { + $re->nickname_text = $re->username . '(ID:' . $re->id . ')'; + } + + $this->success('', [ + 'list' => $res->items(), + 'total' => $res->total(), + 'remark' => get_route_remark(), + ]); + } +} \ No newline at end of file diff --git a/app/admin/event.php b/app/admin/event.php new file mode 100644 index 0000000..8e86bde --- /dev/null +++ b/app/admin/event.php @@ -0,0 +1,16 @@ + [ + ], + 'listen' => [ + 'AppInit' => [], + 'HttpRun' => [], + 'HttpEnd' => [], + 'LogLevel' => [], + 'LogWrite' => [], + 'backendInit' => [app\common\event\Security::class], + ], + 'subscribe' => [ + ], +]; \ No newline at end of file diff --git a/app/admin/lang/en.php b/app/admin/lang/en.php new file mode 100644 index 0000000..b16526f --- /dev/null +++ b/app/admin/lang/en.php @@ -0,0 +1,38 @@ + 'Please login first', + 'You have no permission' => 'You have no permission to operate', + 'Username' => 'Username', + 'Password' => 'Password', + 'Nickname' => 'Nickname', + 'Email' => 'Email', + 'Mobile' => 'Mobile Number', + 'Captcha' => 'Captcha', + 'CaptchaId' => 'Captcha Id', + 'Please enter the correct verification code' => 'Please enter the correct Captcha!', + 'Captcha error' => 'Captcha error!', + 'Parameter %s can not be empty' => 'Parameter %s can not be empty', + 'Record not found' => 'Record not found', + 'No rows were added' => 'No rows were added', + 'No rows were deleted' => 'No rows were deleted', + 'No rows updated' => 'No rows updated', + 'Update successful' => 'Update successful!', + 'Added successfully' => 'Added successfully!', + 'Deleted successfully' => 'Deleted successfully!', + 'Parameter error' => 'Parameter error!', + 'File uploaded successfully' => 'File uploaded successfully', + 'No files were uploaded' => 'No files were uploaded', + 'The uploaded file format is not allowed' => 'The uploaded file format is no allowance.', + 'The uploaded image file is not a valid image' => 'The uploaded image file is not a valid image', + 'The uploaded file is too large (%sMiB), Maximum file size:%sMiB' => 'The uploaded file is too large (%sMiB), maximum file size:%sMiB', + 'No files have been uploaded or the file size exceeds the upload limit of the server' => 'No files have been uploaded or the file size exceeds the server upload limit.', + 'Unknown' => 'Unknown', + 'Account not exist' => 'Account does not exist', + 'Account disabled' => 'Account is disabled', + 'Token login failed' => 'Token login failed', + 'Username is incorrect' => 'Incorrect username', + 'Please try again after 1 day' => 'The number of login failures exceeds the limit, please try again after 24 hours', + 'Password is incorrect' => 'Wrong password', + 'You are not logged in' => 'You are not logged in', + 'Cache cleaned~' => 'The cache has been cleaned up, please refresh the page.', +]; \ No newline at end of file diff --git a/app/admin/lang/en/ajax.php b/app/admin/lang/en/ajax.php new file mode 100644 index 0000000..e2cf328 --- /dev/null +++ b/app/admin/lang/en/ajax.php @@ -0,0 +1,9 @@ + 'Failed to switch package manager, please modify the configuration file manually:%s', + 'Failed to modify the terminal configuration. Please modify the configuration file manually:%s' => 'Failed to modify the terminal configuration, please modify the configuration file manually:%s', + 'upload' => 'Upload files', + 'Change terminal config' => 'Modify terminal configuration', + 'Clear cache' => 'Clear cache', + 'Data table does not exist' => 'Data table does not exist', +]; \ No newline at end of file diff --git a/app/admin/lang/en/auth/admin.php b/app/admin/lang/en/auth/admin.php new file mode 100644 index 0000000..b1a3073 --- /dev/null +++ b/app/admin/lang/en/auth/admin.php @@ -0,0 +1,5 @@ + 'Administrator Grouping ', + 'Please use another administrator account to disable the current account!' => 'Disable the current account, please use another administrator account!', +]; \ No newline at end of file diff --git a/app/admin/lang/en/auth/group.php b/app/admin/lang/en/auth/group.php new file mode 100644 index 0000000..19aa20f --- /dev/null +++ b/app/admin/lang/en/auth/group.php @@ -0,0 +1,6 @@ + 'Super administrator', + 'No permission' => 'No permission', + 'You cannot modify your own management group!' => 'You cannot modify your own management group!', +]; diff --git a/app/admin/lang/en/auth/menu.php b/app/admin/lang/en/auth/menu.php new file mode 100644 index 0000000..94d9d4c --- /dev/null +++ b/app/admin/lang/en/auth/menu.php @@ -0,0 +1,6 @@ + 'Rule type', + 'title' => 'Rule title', + 'name' => 'Rule name', +]; \ No newline at end of file diff --git a/app/admin/lang/en/crud/crud.php b/app/admin/lang/en/crud/crud.php new file mode 100644 index 0000000..522c32c --- /dev/null +++ b/app/admin/lang/en/crud/crud.php @@ -0,0 +1,7 @@ + 'Field %s failed to be renamed because the field does not exist in the data table', + 'del-field fail not exist' => 'Failed to delete field %s because the field does not exist in the data table', + 'change-field-attr fail not exist' => 'Description Failed to modify the properties of field %s because the field does not exist in the data table', + 'add-field fail exist' => 'Failed to add field %s because the field already exists in the data table', +]; \ No newline at end of file diff --git a/app/admin/lang/en/dashboard.php b/app/admin/lang/en/dashboard.php new file mode 100644 index 0000000..57b0f72 --- /dev/null +++ b/app/admin/lang/en/dashboard.php @@ -0,0 +1,4 @@ + "Open source equals mutual assistance, and needs everyone's support. There are many ways to support it, such as using, recommending, writing tutorials, protecting the ecology, contributing code, answering questions, sharing experiences, donation, sponsorship and so on. Welcome to join us!", +]; \ No newline at end of file diff --git a/app/admin/lang/en/index.php b/app/admin/lang/en/index.php new file mode 100644 index 0000000..e7fb229 --- /dev/null +++ b/app/admin/lang/en/index.php @@ -0,0 +1,9 @@ + 'No background menu, please contact the super administrator!', + 'You have already logged in. There is no need to log in again~' => 'You have already logged in, no need to log in again.', + 'Login succeeded!' => 'Login successful!', + 'Incorrect user name or password!' => 'Incorrect username or password!', + 'Login' => 'Login', + 'Logout' => 'Logout', +]; \ No newline at end of file diff --git a/app/admin/lang/en/routine/admininfo.php b/app/admin/lang/en/routine/admininfo.php new file mode 100644 index 0000000..924bf10 --- /dev/null +++ b/app/admin/lang/en/routine/admininfo.php @@ -0,0 +1,6 @@ + 'Please enter the correct username', + 'Please input correct password' => 'Please enter the correct password', + 'Avatar modified successfully!' => 'Profile picture modified successfully!', +]; \ No newline at end of file diff --git a/app/admin/lang/en/routine/attachment.php b/app/admin/lang/en/routine/attachment.php new file mode 100644 index 0000000..6761720 --- /dev/null +++ b/app/admin/lang/en/routine/attachment.php @@ -0,0 +1,5 @@ + '%d records and files have been deleted', + 'remark_text' => 'When the same file is uploaded multiple times, only one copy will be saved to the disk and an attachment record will be added; Deleting an attachment record will automatically delete the corresponding file!', +]; \ No newline at end of file diff --git a/app/admin/lang/en/routine/config.php b/app/admin/lang/en/routine/config.php new file mode 100644 index 0000000..6707b30 --- /dev/null +++ b/app/admin/lang/en/routine/config.php @@ -0,0 +1,23 @@ + 'Basic configuration', + 'Mail' => 'Mail configuration', + 'Config group' => 'Configure grouping', + 'Site Name' => 'Site name', + 'Config Quick entrance' => 'Quick configuration entrance', + 'Record number' => 'Record Number', + 'Version number' => 'Version Number', + 'time zone' => 'Time zone', + 'No access ip' => 'No access IP', + 'smtp server' => 'SMTP server', + 'smtp port' => 'SMTP port', + 'smtp user' => 'SMTP username', + 'smtp pass' => 'SMTP password', + 'smtp verification' => 'SMTP verification mode', + 'smtp sender mail' => 'SMTP sender mailbox', + 'Variable name' => 'variable name', + 'Test mail sent successfully~' => 'Test message sent successfully', + 'This is a test email' => 'This is a test email', + 'Congratulations, receiving this email means that your email service has been configured correctly' => "Congratulations, when you receive this email, it means that your mail service is configures correctly. This is the email subject, you can use HtmlL! in the main body.", + 'Backend entrance rule' => 'The background entry must start with / and contain only numbers and letters.', +]; \ No newline at end of file diff --git a/app/admin/lang/en/security/datarecycle.php b/app/admin/lang/en/security/datarecycle.php new file mode 100644 index 0000000..e1491ee --- /dev/null +++ b/app/admin/lang/en/security/datarecycle.php @@ -0,0 +1,7 @@ + 'Rule Name', + 'Controller' => 'Controller', + 'Data Table' => 'Corresponding data table', + 'Primary Key' => 'Data table primary key', +]; \ No newline at end of file diff --git a/app/admin/lang/en/security/datarecyclelog.php b/app/admin/lang/en/security/datarecyclelog.php new file mode 100644 index 0000000..5baf49c --- /dev/null +++ b/app/admin/lang/en/security/datarecyclelog.php @@ -0,0 +1,4 @@ + 'No records have been restored', +]; \ No newline at end of file diff --git a/app/admin/lang/en/security/sensitivedata.php b/app/admin/lang/en/security/sensitivedata.php new file mode 100644 index 0000000..4cb11da --- /dev/null +++ b/app/admin/lang/en/security/sensitivedata.php @@ -0,0 +1,8 @@ + 'Rule name', + 'Controller' => 'Controller', + 'Data Table' => 'Corresponding data table', + 'Primary Key' => 'Data table primary key', + 'Data Fields' => 'Sensitive data fields', +]; \ No newline at end of file diff --git a/app/admin/lang/en/security/sensitivedatalog.php b/app/admin/lang/en/security/sensitivedatalog.php new file mode 100644 index 0000000..53f3e10 --- /dev/null +++ b/app/admin/lang/en/security/sensitivedatalog.php @@ -0,0 +1,4 @@ + 'No records have been roll-back', +]; \ No newline at end of file diff --git a/app/admin/lang/en/user/moneylog.php b/app/admin/lang/en/user/moneylog.php new file mode 100644 index 0000000..d7d23a9 --- /dev/null +++ b/app/admin/lang/en/user/moneylog.php @@ -0,0 +1,8 @@ + 'User', + 'money' => 'Change amount', + 'memo' => 'Change Notes', + "The user can't find it" => "User does not exist", + 'Change note cannot be blank' => 'Change Notes cannot be empty', +]; \ No newline at end of file diff --git a/app/admin/lang/en/user/scorelog.php b/app/admin/lang/en/user/scorelog.php new file mode 100644 index 0000000..aed6a51 --- /dev/null +++ b/app/admin/lang/en/user/scorelog.php @@ -0,0 +1,8 @@ + 'User', + 'score' => 'Change points', + 'memo' => 'Change Notes', + "The user can't find it" => 'User does not exist', + 'Change note cannot be blank' => 'Change notes cannot be empty', +]; \ No newline at end of file diff --git a/app/admin/lang/zh-cn.php b/app/admin/lang/zh-cn.php new file mode 100644 index 0000000..72b49d5 --- /dev/null +++ b/app/admin/lang/zh-cn.php @@ -0,0 +1,62 @@ + '请先登录!', + 'You have no permission' => '没有权限操作!', + 'Username' => '用户名', + 'Password' => '密码', + 'Nickname' => '昵称', + 'Email' => '邮箱', + 'Mobile' => '手机号', + 'Captcha' => '验证码', + 'CaptchaId' => '验证码ID', + 'Please enter the correct verification code' => '请输入正确的验证码!', + 'Captcha error' => '验证码错误!', + 'Parameter %s can not be empty' => '参数%s不能为空', + 'Record not found' => '记录未找到', + 'No rows were added' => '未添加任何行', + 'No rows were deleted' => '未删除任何行', + 'No rows updated' => '未更新任何行', + 'Update successful' => '更新成功!', + 'Added successfully' => '添加成功!', + 'Deleted successfully' => '删除成功!', + 'Parameter error' => '参数错误!', + 'Please use the %s field to sort before operating' => '请使用 %s 字段排序后再操作', + 'File uploaded successfully' => '文件上传成功!', + 'No files were uploaded' => '没有文件被上传', + 'The uploaded file format is not allowed' => '上传的文件格式未被允许', + 'The uploaded image file is not a valid image' => '上传的图片文件不是有效的图像', + 'The uploaded file is too large (%sMiB), Maximum file size:%sMiB' => '上传的文件太大(%sM),最大文件大小:%sM', + 'No files have been uploaded or the file size exceeds the upload limit of the server' => '没有文件被上传或文件大小超出服务器上传限制!', + 'Topic format error' => '上传存储子目录格式错误!', + 'Driver %s not supported' => '不支持的驱动:%s', + 'Unknown' => '未知', + // 权限类语言包-s + 'Account not exist' => '帐户不存在', + 'Account disabled' => '帐户已禁用', + 'Token login failed' => '令牌登录失败', + 'Username is incorrect' => '用户名不正确', + 'Please try again after 1 day' => '登录失败次数超限,请在1天后再试', + 'Password is incorrect' => '密码不正确', + 'You are not logged in' => '你没有登录', + // 权限类语言包-e + // 时间格式化-s + '%d second%s ago' => '%d秒前', + '%d minute%s ago' => '%d分钟前', + '%d hour%s ago' => '%d小时前', + '%d day%s ago' => '%d天前', + '%d week%s ago' => '%d周前', + '%d month%s ago' => '%d月前', + '%d year%s ago' => '%d年前', + '%d second%s after' => '%d秒后', + '%d minute%s after' => '%d分钟后', + '%d hour%s after' => '%d小时后', + '%d day%s after' => '%d天后', + '%d week%s after' => '%d周后', + '%d month%s after' => '%d月后', + '%d year%s after' => '%d年后', + // 时间格式化-e + 'Cache cleaned~' => '缓存已清理,请刷新后台~', + 'Please delete the child element first, or use batch deletion' => '请首先删除子元素,或使用批量删除!', + 'Configuration write failed: %s' => '配置写入失败:%s', + 'Token expiration' => '登录态过期,请重新登录!', +]; \ No newline at end of file diff --git a/app/admin/lang/zh-cn/ajax.php b/app/admin/lang/zh-cn/ajax.php new file mode 100644 index 0000000..2994d4c --- /dev/null +++ b/app/admin/lang/zh-cn/ajax.php @@ -0,0 +1,12 @@ + '开始进行数据库迁移', + 'Start formatting the web project code' => '开始格式化前端代码(失败无影响,代码编辑器内按需的手动格式化即可)', + 'Start installing the composer dependencies' => '开始安装服务端依赖', + 'Start executing the build command of the web project' => '开始执行 web 工程的 build 命令,成功后会自动将构建产物移动至 根目录/public 目录下', + 'Failed to modify the terminal configuration. Please modify the configuration file manually:%s' => '修改终端配置失败,请手动修改配置文件:%s', + 'upload' => '上传文件', + 'Change terminal config' => '修改终端配置', + 'Clear cache' => '清理缓存', + 'Data table does not exist' => '数据表不存在~', +]; \ No newline at end of file diff --git a/app/admin/lang/zh-cn/auth/admin.php b/app/admin/lang/zh-cn/auth/admin.php new file mode 100644 index 0000000..efa0622 --- /dev/null +++ b/app/admin/lang/zh-cn/auth/admin.php @@ -0,0 +1,6 @@ + '管理员分组', + 'Please use another administrator account to disable the current account!' => '请使用另外的管理员账户禁用当前账户!', + 'You have no permission to add an administrator to this group!' => '您没有权限向此分组添加管理员!', +]; \ No newline at end of file diff --git a/app/admin/lang/zh-cn/auth/group.php b/app/admin/lang/zh-cn/auth/group.php new file mode 100644 index 0000000..1b5db16 --- /dev/null +++ b/app/admin/lang/zh-cn/auth/group.php @@ -0,0 +1,13 @@ + '组别名称', + 'Please select rules' => '请选择权限', + 'Super administrator' => '超级管理员', + 'No permission' => '无权限', + 'You cannot modify your own management group!' => '不能修改自己所在的管理组!', + 'You need to have all permissions of this group to operate this group~' => '您需要拥有该分组的所有权限才可以操作该分组~', + 'You need to have all the permissions of the group and have additional permissions before you can operate the group~' => '您需要拥有该分组的所有权限且还有额外权限时,才可以操作该分组~', + 'Role group has all your rights, please contact the upper administrator to add or do not need to add!' => '角色组拥有您的全部权限,请联系上级管理员添加或无需添加!', + 'The group permission node exceeds the range that can be allocated' => '分组权限节点超出可分配范围,请刷新重试~', + 'Remark lang' => '为保障系统安全,角色组本身的上下级关系仅供参考,系统的实际上下级划分是根据`权限多寡`来确定的,两位管理员的权限节点:相同被认为是`同级`、包含且有额外权限才被认为是`上级`,同级不可管理同级,上级可为下级分配自己拥有的权限节点;若有特殊情况管理员需转`上级`,可建立一个虚拟权限节点', +]; diff --git a/app/admin/lang/zh-cn/auth/rule.php b/app/admin/lang/zh-cn/auth/rule.php new file mode 100644 index 0000000..4c08979 --- /dev/null +++ b/app/admin/lang/zh-cn/auth/rule.php @@ -0,0 +1,6 @@ + '规则类型', + 'title' => '规则标题', + 'name' => '规则名称', +]; \ No newline at end of file diff --git a/app/admin/lang/zh-cn/crud/crud.php b/app/admin/lang/zh-cn/crud/crud.php new file mode 100644 index 0000000..36ca330 --- /dev/null +++ b/app/admin/lang/zh-cn/crud/crud.php @@ -0,0 +1,11 @@ + 'CRUD代码生成-解析字段数据', + 'Log start' => 'CRUD代码生成-从历史记录开始', + 'Generate check' => 'CRUD代码生成-生成前预检', + 'change-field-name fail not exist' => '字段 %s 改名失败,数据表内不存在该字段', + 'del-field fail not exist' => '字段 %s 删除失败,数据表内不存在该字段', + 'change-field-attr fail not exist' => '修改字段 %s 的属性失败,数据表内不存在该字段', + 'add-field fail exist' => '添加字段 %s 失败,数据表内已经存在该字段', + 'Failed to load cloud data' => '加载云端数据失败,请稍后重试!', +]; \ No newline at end of file diff --git a/app/admin/lang/zh-cn/dashboard.php b/app/admin/lang/zh-cn/dashboard.php new file mode 100644 index 0000000..e4eaff2 --- /dev/null +++ b/app/admin/lang/zh-cn/dashboard.php @@ -0,0 +1,4 @@ + '开源等于互助;开源需要大家一起来支持,支持的方式有很多种,比如使用、推荐、写教程、保护生态、贡献代码、回答问题、分享经验、打赏赞助等;欢迎您加入我们!', +]; \ No newline at end of file diff --git a/app/admin/lang/zh-cn/index.php b/app/admin/lang/zh-cn/index.php new file mode 100644 index 0000000..b896075 --- /dev/null +++ b/app/admin/lang/zh-cn/index.php @@ -0,0 +1,9 @@ + '无后台菜单,请联系超级管理员!', + 'You have already logged in. There is no need to log in again~' => '您已经登录过了,无需重复登录~', + 'Login succeeded!' => '登录成功!', + 'Incorrect user name or password!' => '用户名或密码不正确!', + 'Login' => '登录', + 'Logout' => '注销登录', +]; diff --git a/app/admin/lang/zh-cn/module.php b/app/admin/lang/zh-cn/module.php new file mode 100644 index 0000000..d63d099 --- /dev/null +++ b/app/admin/lang/zh-cn/module.php @@ -0,0 +1,29 @@ + '订单找不到啦!', + 'Module already exists' => '模块已存在!', + 'package download failed' => '包下载失败!', + 'package check failed' => '包检查失败!', + 'No permission to write temporary files' => '没有权限写入临时文件!', + 'Zip file not found' => '找不到压缩包文件', + 'Unable to open the zip file' => '无法打开压缩包文件', + 'Unable to extract ZIP file' => '无法提取ZIP文件', + 'Unable to package zip file' => '无法打包zip文件', + 'Basic configuration of the Module is incomplete' => '模块基础配置不完整', + 'Module package file does not exist' => '模块包文件不存在', + 'Module file conflicts' => '模块文件存在冲突,请手动处理!', + 'Configuration file has no write permission' => '配置文件无写入权限', + 'The current state of the module cannot be set to disabled' => '模块当前状态无法设定为禁用', + 'The current state of the module cannot be set to enabled' => '模块当前状态无法设定为启用', + 'Module file updated' => '模块文件有更新', + 'Please disable the module first' => '请先禁用模块', + 'Please disable the module before updating' => '更新前请先禁用模块', + 'The directory required by the module is occupied' => '模块所需目录已被占用', + 'Install module' => '安装模块', + 'Unload module' => '卸载模块', + 'Update module' => '更新模块', + 'Change module state' => '改变模块状态', + 'Upload install module' => '上传安装模块', + 'Please login to the official website account first' => '请先使用BuildAdmin官网账户登录到模块市场~', + 'composer config %s conflict' => 'composer 配置项 %s 存在冲突', +]; \ No newline at end of file diff --git a/app/admin/lang/zh-cn/routine/admininfo.php b/app/admin/lang/zh-cn/routine/admininfo.php new file mode 100644 index 0000000..1f2612c --- /dev/null +++ b/app/admin/lang/zh-cn/routine/admininfo.php @@ -0,0 +1,6 @@ + '请输入正确的用户名', + 'Please input correct password' => '请输入正确的密码', + 'Avatar modified successfully!' => '头像修改成功!', +]; \ No newline at end of file diff --git a/app/admin/lang/zh-cn/routine/attachment.php b/app/admin/lang/zh-cn/routine/attachment.php new file mode 100644 index 0000000..22ee5a0 --- /dev/null +++ b/app/admin/lang/zh-cn/routine/attachment.php @@ -0,0 +1,5 @@ + '同一文件被多次上传时,只会保存一份至磁盘和增加一条附件记录;删除附件记录,将自动删除对应文件!', + '%d records and files have been deleted' => '删除了%d条记录和文件', +]; \ No newline at end of file diff --git a/app/admin/lang/zh-cn/routine/config.php b/app/admin/lang/zh-cn/routine/config.php new file mode 100644 index 0000000..22657d0 --- /dev/null +++ b/app/admin/lang/zh-cn/routine/config.php @@ -0,0 +1,25 @@ + '基础配置', + 'Mail' => '邮件配置', + 'Config group' => '配置分组', + 'Site Name' => '站点名称', + 'Backend entrance' => '自定义后台入口', + 'Config Quick entrance' => '快捷配置入口', + 'Record number' => '备案号', + 'Version number' => '版本号', + 'time zone' => '时区', + 'No access ip' => '禁止访问IP', + 'smtp server' => 'SMTP 服务器', + 'smtp port' => 'SMTP 端口', + 'smtp user' => 'SMTP 用户名', + 'smtp pass' => 'SMTP 密码', + 'smtp verification' => 'SMTP 验证方式', + 'smtp sender mail' => 'SMTP 发件人邮箱', + 'Variable name' => '变量名', + 'Test mail sent successfully~' => '测试邮件发送成功~', + 'This is a test email' => '这是一封测试邮件', + 'Congratulations, receiving this email means that your email service has been configured correctly' => '恭喜您,收到此邮件代表您的邮件服务已配置正确;这是邮件主体 在主体中可以使用Html!', + 'The current page configuration item was updated successfully' => '当前页配置项更新成功!', + 'Backend entrance rule' => '后台入口请以 / 开头,且只包含数字和字母。', +]; \ No newline at end of file diff --git a/app/admin/lang/zh-cn/security/datarecycle.php b/app/admin/lang/zh-cn/security/datarecycle.php new file mode 100644 index 0000000..7b21cfb --- /dev/null +++ b/app/admin/lang/zh-cn/security/datarecycle.php @@ -0,0 +1,8 @@ + '规则名称', + 'Controller' => '控制器', + 'Data Table' => '对应数据表', + 'Primary Key' => '数据表主键', + 'Remark lang' => '在此定义需要回收的数据,实现数据自动统一回收', +]; \ No newline at end of file diff --git a/app/admin/lang/zh-cn/security/datarecyclelog.php b/app/admin/lang/zh-cn/security/datarecyclelog.php new file mode 100644 index 0000000..4b8d0b2 --- /dev/null +++ b/app/admin/lang/zh-cn/security/datarecyclelog.php @@ -0,0 +1,4 @@ + '没有记录被还原', +]; \ No newline at end of file diff --git a/app/admin/lang/zh-cn/security/sensitivedata.php b/app/admin/lang/zh-cn/security/sensitivedata.php new file mode 100644 index 0000000..9367d1c --- /dev/null +++ b/app/admin/lang/zh-cn/security/sensitivedata.php @@ -0,0 +1,9 @@ + '规则名称', + 'Controller' => '控制器', + 'Data Table' => '对应数据表', + 'Primary Key' => '数据表主键', + 'Data Fields' => '敏感数据字段', + 'Remark lang' => '在此定义需要保护的敏感字段,随后系统将自动监听该字段的修改操作,并提供了敏感字段的修改回滚功能', +]; \ No newline at end of file diff --git a/app/admin/lang/zh-cn/security/sensitivedatalog.php b/app/admin/lang/zh-cn/security/sensitivedatalog.php new file mode 100644 index 0000000..7e62651 --- /dev/null +++ b/app/admin/lang/zh-cn/security/sensitivedatalog.php @@ -0,0 +1,4 @@ + '没有记录被回滚', +]; \ No newline at end of file diff --git a/app/admin/lang/zh-cn/user/moneylog.php b/app/admin/lang/zh-cn/user/moneylog.php new file mode 100644 index 0000000..da8d81d --- /dev/null +++ b/app/admin/lang/zh-cn/user/moneylog.php @@ -0,0 +1,8 @@ + '用户', + 'money' => '变更金额', + 'memo' => '变更备注', + "The user can't find it" => '用户找不到啦', + 'Change note cannot be blank' => '变更备注不能为空', +]; \ No newline at end of file diff --git a/app/admin/lang/zh-cn/user/scorelog.php b/app/admin/lang/zh-cn/user/scorelog.php new file mode 100644 index 0000000..7822169 --- /dev/null +++ b/app/admin/lang/zh-cn/user/scorelog.php @@ -0,0 +1,8 @@ + '用户', + 'score' => '变更积分', + 'memo' => '变更备注', + "The user can't find it" => '用户找不到啦', + 'Change note cannot be blank' => '变更备注不能为空', +]; \ No newline at end of file diff --git a/app/admin/library/Auth.php b/app/admin/library/Auth.php new file mode 100644 index 0000000..297581c --- /dev/null +++ b/app/admin/library/Auth.php @@ -0,0 +1,525 @@ +setKeepTime((int)Config::get('buildadmin.admin_token_keep_time')); + } + + /** + * 魔术方法-管理员信息字段 + * @param $name + * @return mixed 字段信息 + */ + public function __get($name): mixed + { + return $this->model?->$name; + } + + /** + * 初始化 + * @access public + * @param array $options 传递到 /ba/Auth 的配置信息 + * @return Auth + */ + public static function instance(array $options = []): Auth + { + $request = request(); + if (!isset($request->adminAuth)) { + $request->adminAuth = new static($options); + } + return $request->adminAuth; + } + + /** + * 根据Token初始化管理员登录态 + * @param string $token + * @return bool + * @throws Throwable + */ + public function init(string $token): bool + { + $tokenData = Token::get($token); + if ($tokenData) { + + /** + * 过期检查,过期则抛出 @see TokenExpirationException + */ + Token::tokenExpirationCheck($tokenData); + + $userId = intval($tokenData['user_id']); + if ($tokenData['type'] == self::TOKEN_TYPE && $userId > 0) { + $this->model = Admin::where('id', $userId)->find(); + if (!$this->model) { + $this->setError('Account not exist'); + return false; + } + if ($this->model['status'] != 'enable') { + $this->setError('Account disabled'); + return false; + } + $this->token = $token; + $this->loginSuccessful(); + return true; + } + } + $this->setError('Token login failed'); + $this->reset(); + return false; + } + + /** + * 管理员登录 + * @param string $username 用户名 + * @param string $password 密码 + * @param bool $keep 是否保持登录 + * @return bool + * @throws Throwable + */ + public function login(string $username, string $password, bool $keep = false): bool + { + $this->model = Admin::where('username', $username)->find(); + if (!$this->model) { + $this->setError('Username is incorrect'); + return false; + } + if ($this->model->status == 'disable') { + $this->setError('Account disabled'); + return false; + } + + // 登录失败重试检查 + $lastLoginTime = $this->model->getData('last_login_time'); + $adminLoginRetry = Config::get('buildadmin.admin_login_retry'); + if ($adminLoginRetry && $lastLoginTime) { + // 重置失败次数 + if ($this->model->login_failure > 0 && time() - $lastLoginTime >= 86400) { + $this->model->login_failure = 0; + $this->model->save(); + + // 重获模型实例,避免单实例多次更新 + $this->model = Admin::where('username', $username)->find(); + } + + if ($this->model->login_failure >= $adminLoginRetry) { + $this->setError('Please try again after 1 day'); + return false; + } + } + + // 密码检查 + if (!verify_password($password, $this->model->password, ['salt' => $this->model->salt])) { + $this->loginFailed(); + $this->setError('Password is incorrect'); + return false; + } + + // 清理 token + if (Config::get('buildadmin.admin_sso')) { + Token::clear(self::TOKEN_TYPE, $this->model->id); + Token::clear(self::TOKEN_TYPE . '-refresh', $this->model->id); + } + + if ($keep) { + $this->setRefreshToken($this->refreshTokenKeepTime); + } + $this->loginSuccessful(); + return true; + } + + /** + * 设置刷新Token + * @param int $keepTime + */ + public function setRefreshToken(int $keepTime = 0): void + { + $this->refreshToken = Random::uuid(); + Token::set($this->refreshToken, self::TOKEN_TYPE . '-refresh', $this->model->id, $keepTime); + } + + /** + * 管理员登录成功 + * @return bool + */ + public function loginSuccessful(): bool + { + if (!$this->model) return false; + $this->model->startTrans(); + try { + $this->model->login_failure = 0; + $this->model->last_login_time = time(); + $this->model->last_login_ip = request()->ip(); + $this->model->save(); + $this->loginEd = true; + + if (!$this->token) { + $this->token = Random::uuid(); + Token::set($this->token, self::TOKEN_TYPE, $this->model->id, $this->keepTime); + } + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->setError($e->getMessage()); + return false; + } + return true; + } + + /** + * 管理员登录失败 + * @return bool + */ + public function loginFailed(): bool + { + if (!$this->model) return false; + $this->model->startTrans(); + try { + $this->model->login_failure++; + $this->model->last_login_time = time(); + $this->model->last_login_ip = request()->ip(); + $this->model->save(); + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->setError($e->getMessage()); + return false; + } + return $this->reset(); + } + + /** + * 退出登录 + * @return bool + */ + public function logout(): bool + { + if (!$this->loginEd) { + $this->setError('You are not logged in'); + return false; + } + return $this->reset(); + } + + /** + * 是否登录 + * @return bool + */ + public function isLogin(): bool + { + return $this->loginEd; + } + + /** + * 获取管理员模型 + * @return Admin + */ + public function getAdmin(): Admin + { + return $this->model; + } + + /** + * 获取管理员Token + * @return string + */ + public function getToken(): string + { + return $this->token; + } + + /** + * 获取管理员刷新Token + * @return string + */ + public function getRefreshToken(): string + { + return $this->refreshToken; + } + + /** + * 获取管理员信息 - 只输出允许输出的字段 + * @return array + */ + public function getInfo(): array + { + if (!$this->model) return []; + $info = $this->model->toArray(); + $info = array_intersect_key($info, array_flip($this->getAllowFields())); + $info['token'] = $this->getToken(); + $info['refresh_token'] = $this->getRefreshToken(); + return $info; + } + + /** + * 获取允许输出字段 + * @return array + */ + public function getAllowFields(): array + { + return $this->allowFields; + } + + /** + * 设置允许输出字段 + * @param $fields + * @return void + */ + public function setAllowFields($fields): void + { + $this->allowFields = $fields; + } + + /** + * 设置Token有效期 + * @param int $keepTime + * @return void + */ + public function setKeepTime(int $keepTime = 0): void + { + $this->keepTime = $keepTime; + } + + public function check(string $name, int $uid = 0, string $relation = 'or', string $mode = 'url'): bool + { + return parent::check($name, $uid ?: $this->id, $relation, $mode); + } + + public function getGroups(int $uid = 0): array + { + return parent::getGroups($uid ?: $this->id); + } + + public function getRuleList(int $uid = 0): array + { + return parent::getRuleList($uid ?: $this->id); + } + + public function getRuleIds(int $uid = 0): array + { + return parent::getRuleIds($uid ?: $this->id); + } + + public function getMenus(int $uid = 0): array + { + return parent::getMenus($uid ?: $this->id); + } + + /** + * 是否是超级管理员 + * @throws Throwable + */ + public function isSuperAdmin(): bool + { + return in_array('*', $this->getRuleIds()); + } + + /** + * 获取管理员所在分组的所有子级分组 + * @return array + * @throws Throwable + */ + public function getAdminChildGroups(): array + { + $groupIds = Db::name('admin_group_access') + ->where('uid', $this->id) + ->select(); + $children = []; + foreach ($groupIds as $group) { + $this->getGroupChildGroups($group['group_id'], $children); + } + return array_unique($children); + } + + /** + * 获取一个分组下的子分组 + * @param int $groupId 分组ID + * @param array $children 存放子分组的变量 + * @return void + * @throws Throwable + */ + public function getGroupChildGroups(int $groupId, array &$children): void + { + $childrenTemp = AdminGroup::where('pid', $groupId) + ->where('status', 1) + ->select(); + foreach ($childrenTemp as $item) { + $children[] = $item['id']; + $this->getGroupChildGroups($item['id'], $children); + } + } + + /** + * 获取分组内的管理员 + * @param array $groups + * @return array 管理员数组 + */ + public function getGroupAdmins(array $groups): array + { + return Db::name('admin_group_access') + ->where('group_id', 'in', $groups) + ->column('uid'); + } + + /** + * 获取拥有 `所有权限` 的分组 + * @param string $dataLimit 数据权限 + * @param array $groupQueryWhere 分组查询条件(默认查询启用的分组:[['status','=',1]]) + * @return array 分组数组 + * @throws Throwable + */ + public function getAllAuthGroups(string $dataLimit, array $groupQueryWhere = [['status', '=', 1]]): array + { + // 当前管理员拥有的权限 + $rules = $this->getRuleIds(); + $allAuthGroups = []; + $groups = AdminGroup::where($groupQueryWhere)->select(); + foreach ($groups as $group) { + if ($group['rules'] == '*') { + continue; + } + $groupRules = explode(',', $group['rules']); + + // 及时break, array_diff 等没有 in_array 快 + $all = true; + foreach ($groupRules as $groupRule) { + if (!in_array($groupRule, $rules)) { + $all = false; + break; + } + } + if ($all) { + if ($dataLimit == 'allAuth' || ($dataLimit == 'allAuthAndOthers' && array_diff($rules, $groupRules))) { + $allAuthGroups[] = $group['id']; + } + } + } + return $allAuthGroups; + } + + /** + * 设置错误消息 + * @param $error + * @return Auth + */ + public function setError($error): Auth + { + $this->error = $error; + return $this; + } + + /** + * 获取错误消息 + * @return string + */ + public function getError(): string + { + return $this->error ? __($this->error) : ''; + } + + /** + * 属性重置(注销、登录失败、重新初始化等将单例数据销毁) + */ + protected function reset(bool $deleteToken = true): bool + { + if ($deleteToken && $this->token) { + Token::delete($this->token); + } + + $this->token = ''; + $this->loginEd = false; + $this->model = null; + $this->refreshToken = ''; + $this->setError(''); + $this->setKeepTime((int)Config::get('buildadmin.admin_token_keep_time')); + return true; + } +} \ No newline at end of file diff --git a/app/admin/library/crud/Helper.php b/app/admin/library/crud/Helper.php new file mode 100644 index 0000000..e0e75c7 --- /dev/null +++ b/app/admin/library/crud/Helper.php @@ -0,0 +1,1299 @@ + [ + 'user' => ['user', 'user'], + 'admin' => ['auth', 'admin'], + 'admin_group' => ['auth', 'group'], + 'attachment' => ['routine', 'attachment'], + 'admin_rule' => ['auth', 'rule'], + ], + 'model' => [], + 'validate' => [], + ]; + + /** + * 子级菜单数组(权限节点) + * @var array + */ + public static array $menuChildren = [ + ['type' => 'button', 'title' => '查看', 'name' => '/index', 'status' => 1], + ['type' => 'button', 'title' => '添加', 'name' => '/add', 'status' => 1], + ['type' => 'button', 'title' => '编辑', 'name' => '/edit', 'status' => 1], + ['type' => 'button', 'title' => '删除', 'name' => '/del', 'status' => 1], + ['type' => 'button', 'title' => '快速排序', 'name' => '/sortable', 'status' => 1], + ]; + + /** + * 输入框类型的识别规则 + * @var array + */ + protected static array $inputTypeRule = [ + // 开关组件 + [ + 'type' => ['tinyint', 'int', 'enum'], + 'suffix' => ['switch', 'toggle'], + 'value' => 'switch', + ], + [ + 'column_type' => ['tinyint(1)', 'char(1)', 'tinyint(1) unsigned'], + 'suffix' => ['switch', 'toggle'], + 'value' => 'switch', + ], + // 富文本-识别规则和textarea重合,优先识别为富文本 + [ + 'type' => ['longtext', 'text', 'mediumtext', 'smalltext', 'tinytext', 'bigtext'], + 'suffix' => ['content', 'editor'], + 'value' => 'editor', + ], + // textarea + [ + 'type' => ['varchar'], + 'suffix' => ['textarea', 'multiline', 'rows'], + 'value' => 'textarea', + ], + // Array + [ + 'suffix' => ['array'], + 'value' => 'array', + ], + // 时间选择器-字段类型为int同时以['time', 'datetime']结尾 + [ + 'type' => ['int'], + 'suffix' => ['time', 'datetime'], + 'value' => 'timestamp', + ], + [ + 'type' => ['datetime', 'timestamp'], + 'value' => 'datetime', + ], + [ + 'type' => ['date'], + 'value' => 'date', + ], + [ + 'type' => ['year'], + 'value' => 'year', + ], + [ + 'type' => ['time'], + 'value' => 'time', + ], + // 单选select + [ + 'suffix' => ['select', 'list', 'data'], + 'value' => 'select', + ], + // 多选select + [ + 'suffix' => ['selects', 'multi', 'lists'], + 'value' => 'selects', + ], + // 远程select + [ + 'suffix' => ['_id'], + 'value' => 'remoteSelect', + ], + // 远程selects + [ + 'suffix' => ['_ids'], + 'value' => 'remoteSelects', + ], + // 城市选择器 + [ + 'suffix' => ['city'], + 'value' => 'city', + ], + // 单图上传 + [ + 'suffix' => ['image', 'avatar'], + 'value' => 'image', + ], + // 多图上传 + [ + 'suffix' => ['images', 'avatars'], + 'value' => 'images', + ], + // 文件上传 + [ + 'suffix' => ['file'], + 'value' => 'file', + ], + // 多文件上传 + [ + 'suffix' => ['files'], + 'value' => 'files', + ], + // icon选择器 + [ + 'suffix' => ['icon'], + 'value' => 'icon', + ], + // 单选框 + [ + 'column_type' => ['tinyint(1)', 'char(1)', 'tinyint(1) unsigned'], + 'suffix' => ['status', 'state', 'type'], + 'value' => 'radio', + ], + // 数字输入框 + [ + 'suffix' => ['number', 'int', 'num'], + 'value' => 'number', + ], + [ + 'type' => ['bigint', 'int', 'mediumint', 'smallint', 'tinyint', 'decimal', 'double', 'float'], + 'value' => 'number', + ], + // 富文本-低权重 + [ + 'type' => ['longtext', 'text', 'mediumtext', 'smalltext', 'tinytext', 'bigtext'], + 'value' => 'textarea', + ], + // 单选框-低权重 + [ + 'type' => ['enum'], + 'value' => 'radio', + ], + // 多选框 + [ + 'type' => ['set'], + 'value' => 'checkbox', + ], + // 颜色选择器 + [ + 'suffix' => ['color'], + 'value' => 'color', + ], + ]; + + /** + * 预设WEB端文件位置 + * @var array + */ + protected static array $parseWebDirPresets = [ + 'lang' => [], + 'views' => [ + 'user' => ['user', 'user'], + 'admin' => ['auth', 'admin'], + 'admin_group' => ['auth', 'group'], + 'attachment' => ['routine', 'attachment'], + 'admin_rule' => ['auth', 'rule'], + ], + ]; + + /** + * 添加时间字段 + * @var string + */ + protected static string $createTimeField = 'create_time'; + + /** + * 更新时间字段 + * @var string + */ + protected static string $updateTimeField = 'update_time'; + + /** + * 属性的类型对照表 + * @var array + */ + protected static array $attrType = [ + 'controller' => [ + 'preExcludeFields' => 'array|string', + 'quickSearchField' => 'string|array', + 'withJoinTable' => 'array', + 'defaultSortField' => 'string|array', + 'weighField' => 'string', + ], + ]; + + /** + * 获取字段字典数据 + * @param array $dict 存储字典数据的变量 + * @param array $field 字段数据 + * @param string $lang 语言 + * @param string $translationPrefix 翻译前缀 + */ + public static function getDictData(array &$dict, array $field, string $lang, string $translationPrefix = ''): array + { + if (!$field['comment']) return []; + $comment = str_replace([',', ':'], [',', ':'], $field['comment']); + if (stripos($comment, ':') !== false && stripos($comment, ',') && stripos($comment, '=') !== false) { + [$fieldTitle, $item] = explode(':', $comment); + $dict[$translationPrefix . $field['name']] = $lang == 'en' ? $field['name'] : $fieldTitle; + foreach (explode(',', $item) as $v) { + $valArr = explode('=', $v); + if (count($valArr) == 2) { + [$key, $value] = $valArr; + $dict[$translationPrefix . $field['name'] . ' ' . $key] = $lang == 'en' ? $field['name'] . ' ' . $key : $value; + } + } + } else { + $dict[$translationPrefix . $field['name']] = $lang == 'en' ? $field['name'] : $comment; + } + return $dict; + } + + /** + * 记录CRUD状态 + * @param array $data CRUD记录数据 + * @return int 记录ID + */ + public static function recordCrudStatus(array $data): int + { + if (isset($data['id'])) { + CrudLog::where('id', $data['id']) + ->update([ + 'status' => $data['status'], + ]); + return $data['id']; + } + + $connection = $data['table']['databaseConnection'] ?: config('database.default'); + $log = CrudLog::create([ + 'table_name' => $data['table']['name'], + 'comment' => $data['table']['comment'], + 'table' => $data['table'], + 'fields' => $data['fields'], + 'connection' => $connection, + 'status' => $data['status'], + ]); + return $log->id; + } + + /** + * 获取 Phinx 的字段类型数据 + * @param string $type 字段类型 + * @param array $field 字段数据 + * @return array + */ + public static function getPhinxFieldType(string $type, array $field): array + { + if ($type == 'tinyint') { + if ( + (isset($field['dataType']) && $field['dataType'] == 'tinyint(1)') || + ($field['default'] == '1' && $field['defaultType'] == 'INPUT') + ) { + $type = 'boolean'; + } + } + $phinxFieldTypeMap = [ + // 数字 + 'tinyint' => ['type' => AdapterInterface::PHINX_TYPE_INTEGER, 'limit' => MysqlAdapter::INT_TINY], + 'smallint' => ['type' => AdapterInterface::PHINX_TYPE_INTEGER, 'limit' => MysqlAdapter::INT_SMALL], + 'mediumint' => ['type' => AdapterInterface::PHINX_TYPE_INTEGER, 'limit' => MysqlAdapter::INT_MEDIUM], + 'int' => ['type' => AdapterInterface::PHINX_TYPE_INTEGER, 'limit' => null], + 'bigint' => ['type' => AdapterInterface::PHINX_TYPE_BIG_INTEGER, 'limit' => null], + 'boolean' => ['type' => AdapterInterface::PHINX_TYPE_BOOLEAN, 'limit' => null], + // 文本 + 'varchar' => ['type' => AdapterInterface::PHINX_TYPE_STRING, 'limit' => null], + 'tinytext' => ['type' => AdapterInterface::PHINX_TYPE_TEXT, 'limit' => MysqlAdapter::TEXT_TINY], + 'mediumtext' => ['type' => AdapterInterface::PHINX_TYPE_TEXT, 'limit' => MysqlAdapter::TEXT_MEDIUM], + 'longtext' => ['type' => AdapterInterface::PHINX_TYPE_TEXT, 'limit' => MysqlAdapter::TEXT_LONG], + 'tinyblob' => ['type' => AdapterInterface::PHINX_TYPE_BLOB, 'limit' => MysqlAdapter::BLOB_TINY], + 'mediumblob' => ['type' => AdapterInterface::PHINX_TYPE_BLOB, 'limit' => MysqlAdapter::BLOB_MEDIUM], + 'longblob' => ['type' => AdapterInterface::PHINX_TYPE_BLOB, 'limit' => MysqlAdapter::BLOB_LONG], + ]; + return array_key_exists($type, $phinxFieldTypeMap) ? $phinxFieldTypeMap[$type] : ['type' => $type, 'limit' => null]; + } + + /** + * 分析字段limit和精度 + * @param string $type 字段类型 + * @param array $field 字段数据 + * @return array ['limit' => 10, 'precision' => null, 'scale' => null] + */ + public static function analyseFieldLimit(string $type, array $field): array + { + $fieldType = [ + 'decimal' => ['decimal', 'double', 'float'], + 'values' => ['enum', 'set'], + ]; + + $dataTypeLimit = self::dataTypeLimit($field['dataType'] ?? ''); + if (in_array($type, $fieldType['decimal'])) { + if ($dataTypeLimit) { + return ['precision' => $dataTypeLimit[0], 'scale' => $dataTypeLimit[1] ?? 0]; + } + $scale = isset($field['precision']) ? intval($field['precision']) : 0; + return ['precision' => $field['length'] ?? 10, 'scale' => $scale]; + } elseif (in_array($type, $fieldType['values'])) { + foreach ($dataTypeLimit as &$item) { + $item = str_replace(['"', "'"], '', $item); + } + return ['values' => $dataTypeLimit]; + } elseif ($dataTypeLimit && $dataTypeLimit[0]) { + return ['limit' => $dataTypeLimit[0]]; + } elseif (isset($field['length'])) { + return ['limit' => $field['length']]; + } + return []; + } + + public static function dataTypeLimit(string $dataType): array + { + preg_match("/\((.*?)\)/", $dataType, $matches); + if (isset($matches[1]) && $matches[1]) { + return explode(',', trim($matches[1], ',')); + } + return []; + } + + public static function analyseFieldDefault(array $field): mixed + { + return match ($field['defaultType']) { + 'EMPTY STRING' => '', + 'NULL' => null, + default => $field['default'], + }; + } + + public static function searchArray($fields, callable $myFunction): array|bool + { + foreach ($fields as $key => $field) { + if (call_user_func($myFunction, $field, $key)) { + return $field; + } + } + return false; + } + + /** + * 获取 Phinx 格式的字段数据 + * @param array $field + * @return array + */ + public static function getPhinxFieldData(array $field): array + { + $conciseType = self::analyseFieldType($field); + $phinxTypeData = self::getPhinxFieldType($conciseType, $field); + + $phinxColumnOptions = self::analyseFieldLimit($conciseType, $field); + if (!is_null($phinxTypeData['limit'])) { + $phinxColumnOptions['limit'] = $phinxTypeData['limit']; + } + + // 无默认值字段 + $noDefaultValueFields = [ + 'text', 'blob', 'geometry', 'geometrycollection', 'json', 'linestring', 'longblob', 'longtext', 'mediumblob', + 'mediumtext', 'multilinestring', 'multipoint', 'multipolygon', 'point', 'polygon', 'tinyblob', + ]; + if ($field['defaultType'] != 'NONE' && !in_array($conciseType, $noDefaultValueFields)) { + $phinxColumnOptions['default'] = self::analyseFieldDefault($field); + } + + $phinxColumnOptions['null'] = (bool)$field['null']; + $phinxColumnOptions['comment'] = $field['comment']; + $phinxColumnOptions['signed'] = !$field['unsigned']; + $phinxColumnOptions['identity'] = $field['autoIncrement']; + return [ + 'type' => $phinxTypeData['type'], + 'options' => $phinxColumnOptions, + ]; + } + + /** + * 表字段排序 + * @param string $tableName 表名 + * @param array $fields 字段数据 + * @param array $designChange 前端字段改变数据 + * @param ?string $connection 数据库连接标识 + * @return void + * @throws Throwable + */ + public static function updateFieldOrder(string $tableName, array $fields, array $designChange, ?string $connection = null): void + { + if ($designChange) { + $table = TableManager::phinxTable($tableName, [], false, $connection); + foreach ($designChange as $item) { + if (!$item['sync']) continue; + + if (!empty($item['after'])) { + + $fieldName = in_array($item['type'], ['add-field', 'change-field-name']) ? $item['newName'] : $item['oldName']; + + $field = self::searchArray($fields, function ($field) use ($fieldName) { + return $field['name'] == $fieldName; + }); + + $phinxFieldData = self::getPhinxFieldData($field); + + // 字段顺序调整 + if ($item['after'] == 'FIRST FIELD') { + $phinxFieldData['options']['after'] = MysqlAdapter::FIRST; + } else { + $phinxFieldData['options']['after'] = $item['after']; + } + $table->changeColumn($fieldName, $phinxFieldData['type'], $phinxFieldData['options']); + } + } + $table->update(); + } + } + + /** + * 表设计处理 + * @param array $table 表数据 + * @param array $fields 字段数据 + * @return array + * @throws Throwable + */ + public static function handleTableDesign(array $table, array $fields): array + { + $name = TableManager::tableName($table['name'], true, $table['databaseConnection']); + $comment = $table['comment'] ?? ''; + $designChange = $table['designChange'] ?? []; + $adapter = TableManager::phinxAdapter(false, $table['databaseConnection']); + + $pk = self::searchArray($fields, function ($item) { + return $item['primaryKey']; + }); + $pk = $pk ? $pk['name'] : ''; + + if ($adapter->hasTable($name)) { + // 更新表 + if ($designChange) { + $tableManager = TableManager::phinxTable($name, [], false, $table['databaseConnection']); + $tableManager->changeComment($comment)->update(); + + // 改名和删除操作优先 + $priorityOpt = false; + foreach ($designChange as $item) { + + if (!$item['sync']) continue; + + if (in_array($item['type'], ['change-field-name', 'del-field']) && !$tableManager->hasColumn($item['oldName'])) { + // 字段不存在 + throw new BaException(__($item['type'] . ' fail not exist', [$item['oldName']])); + } + + if ($item['type'] == 'change-field-name') { + $priorityOpt = true; + $tableManager->renameColumn($item['oldName'], $item['newName']); + } elseif ($item['type'] == 'del-field') { + $priorityOpt = true; + $tableManager->removeColumn($item['oldName']); + } + } + + // 保存需要优先执行的操作,避免先改名再改属性时找不到字段 + if ($priorityOpt) { + $tableManager->update(); + } + + // 修改字段属性和添加字段操作 + foreach ($designChange as $item) { + + if (!$item['sync']) continue; + + if ($item['type'] == 'change-field-attr') { + + if (!$tableManager->hasColumn($item['oldName'])) { + // 字段不存在 + throw new BaException(__($item['type'] . ' fail not exist', [$item['oldName']])); + } + + $phinxFieldData = self::getPhinxFieldData(self::searchArray($fields, function ($field) use ($item) { + return $field['name'] == $item['oldName']; + })); + $tableManager->changeColumn($item['oldName'], $phinxFieldData['type'], $phinxFieldData['options']); + } elseif ($item['type'] == 'add-field') { + + if ($tableManager->hasColumn($item['newName'])) { + // 字段已经存在 + throw new BaException(__($item['type'] . ' fail exist', [$item['newName']])); + } + + $phinxFieldData = self::getPhinxFieldData(self::searchArray($fields, function ($field) use ($item) { + return $field['name'] == $item['newName']; + })); + $tableManager->addColumn($item['newName'], $phinxFieldData['type'], $phinxFieldData['options']); + } + } + $tableManager->update(); + + // 表更新结构完成再处理字段排序 + self::updateFieldOrder($name, $fields, $designChange, $table['databaseConnection']); + } + } else { + // 创建表 + $tableManager = TableManager::phinxTable($name, [ + 'id' => false, + 'comment' => $comment, + 'row_format' => 'DYNAMIC', + 'primary_key' => $pk, + 'collation' => 'utf8mb4_unicode_ci', + ], false, $table['databaseConnection']); + foreach ($fields as $field) { + $phinxFieldData = self::getPhinxFieldData($field); + $tableManager->addColumn($field['name'], $phinxFieldData['type'], $phinxFieldData['options']); + } + $tableManager->create(); + } + + return [$pk]; + } + + /** + * 解析文件数据 + * @throws Throwable + */ + public static function parseNameData($app, $table, $type, $value = ''): array + { + $pathArr = []; + if ($value) { + $value = str_replace('.php', '', $value); + $value = str_replace(['.', '/', '\\', '_'], '/', $value); + $pathArrTemp = explode('/', $value); + $redundantDir = [ + 'app' => 0, + $app => 1, + $type => 2, + ]; + foreach ($pathArrTemp as $key => $item) { + if (!array_key_exists($item, $redundantDir) || $key !== $redundantDir[$item]) { + $pathArr[] = $item; + } + } + } elseif (isset(self::$parseNamePresets[$type]) && array_key_exists($table, self::$parseNamePresets[$type])) { + $pathArr = self::$parseNamePresets[$type][$table]; + } else { + $table = str_replace(['.', '/', '\\', '_'], '/', $table); + $pathArr = explode('/', $table); + } + $originalLastName = array_pop($pathArr); + $pathArr = array_map('strtolower', $pathArr); + $lastName = ucfirst($originalLastName); + + // 类名不能为内部关键字 + if (in_array(strtolower($originalLastName), self::$reservedKeywords)) { + throw new Exception('Unable to use internal variable:' . $lastName); + } + + $appDir = app()->getBasePath() . $app . DIRECTORY_SEPARATOR; + $namespace = "app\\$app\\$type" . ($pathArr ? '\\' . implode('\\', $pathArr) : ''); + $parseFile = $appDir . $type . DIRECTORY_SEPARATOR . ($pathArr ? implode(DIRECTORY_SEPARATOR, $pathArr) . DIRECTORY_SEPARATOR : '') . $lastName . '.php'; + $rootFileName = $namespace . "/$lastName" . '.php'; + + return [ + 'lastName' => $lastName, + 'originalLastName' => $originalLastName, + 'path' => $pathArr, + 'namespace' => $namespace, + 'parseFile' => Filesystem::fsFit($parseFile), + 'rootFileName' => Filesystem::fsFit($rootFileName), + ]; + } + + public static function parseWebDirNameData($table, $type, $value = ''): array + { + $pathArr = []; + if ($value) { + $value = str_replace(['.', '/', '\\', '_'], '/', $value); + $pathArrTemp = explode('/', $value); + $redundantDir = [ + 'web' => 0, + 'src' => 1, + 'views' => 2, + 'lang' => 2, + 'backend' => 3, + 'pages' => 3, + 'en' => 4, + 'zh-cn' => 4, + ]; + foreach ($pathArrTemp as $key => $item) { + if (!array_key_exists($item, $redundantDir) || $key !== $redundantDir[$item]) { + $pathArr[] = $item; + } + } + } elseif (array_key_exists($table, self::$parseWebDirPresets[$type])) { + $pathArr = self::$parseWebDirPresets[$type][$table]; + } else { + $table = str_replace(['.', '/', '\\', '_'], '/', $table); + $pathArr = explode('/', $table); + } + $originalLastName = array_pop($pathArr); + $pathArr = array_map('strtolower', $pathArr); + $lastName = lcfirst($originalLastName); + + $webDir['path'] = $pathArr; + $webDir['lastName'] = $lastName; + $webDir['originalLastName'] = $originalLastName; + if ($type == 'views') { + $webDir['views'] = "web/src/views/backend" . ($pathArr ? '/' . implode('/', $pathArr) : '') . "/$lastName"; + } elseif ($type == 'lang') { + $webDir['lang'] = array_merge($pathArr, [$lastName]); + $langDir = ['en', 'zh-cn']; + foreach ($langDir as $item) { + $webDir[$item] = "web/src/lang/backend/$item" . ($pathArr ? '/' . implode('/', $pathArr) : '') . "/$lastName"; + } + } + foreach ($webDir as &$item) { + if (is_string($item)) $item = Filesystem::fsFit($item); + } + return $webDir; + } + + /** + * 获取菜单name、path + * @param array $webDir + * @return string + */ + public static function getMenuName(array $webDir): string + { + return ($webDir['path'] ? implode('/', $webDir['path']) . '/' : '') . $webDir['originalLastName']; + } + + /** + * 获取基础模板文件路径 + * @param string $name + * @return string + */ + public static function getStubFilePath(string $name): string + { + return app_path() . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'crud' . DIRECTORY_SEPARATOR . 'stubs' . DIRECTORY_SEPARATOR . Filesystem::fsFit($name) . '.stub'; + } + + /** + * 多维数组转字符串 + */ + public static function arrayToString(array|string $value): string + { + if (!is_array($value)) { + return $value; + } + foreach ($value as &$item) { + $item = self::arrayToString($item); + } + return implode(PHP_EOL, $value); + } + + /** + * 组装模板 + * @param string $name + * @param array $data + * @param bool $escape + * @return string + */ + public static function assembleStub(string $name, array $data, bool $escape = false): string + { + foreach ($data as &$datum) { + $datum = self::arrayToString($datum); + } + $search = $replace = []; + foreach ($data as $k => $v) { + $search[] = "{%$k%}"; + $replace[] = $v; + } + $stubPath = self::getStubFilePath($name); + $stubContent = file_get_contents($stubPath); + $content = str_replace($search, $replace, $stubContent); + return $escape ? self::escape($content) : $content; + } + + /** + * 获取转义编码后的值 + * @param array|string $value + * @return string + */ + public static function escape(array|string $value): string + { + if (is_array($value)) { + $value = json_encode($value, JSON_UNESCAPED_UNICODE); + } + return htmlspecialchars($value, ENT_QUOTES, 'UTF-8', false); + } + + public static function tab(int $num = 1): string + { + return str_pad('', 4 * $num); + } + + /** + * 根据数据表解析字段数据 + * @throws Throwable + */ + public static function parseTableColumns(string $table, bool $analyseField = false, ?string $connection = null): array + { + $connection = TableManager::getConnection($connection); + $connectionConfig = TableManager::getConnectionConfig($connection); + + // 从数据库中获取表字段信息 + $sql = 'SELECT * FROM `information_schema`.`columns` ' + . 'WHERE TABLE_SCHEMA = ? AND table_name = ? ' + . 'ORDER BY ORDINAL_POSITION'; + + $columns = []; + $tableColumn = Db::connect($connection)->query($sql, [$connectionConfig['database'], TableManager::tableName($table, true, $connection)]); + + foreach ($tableColumn as $item) { + $isNullAble = $item['IS_NULLABLE'] == 'YES'; + if (str_contains($item['COLUMN_TYPE'], '(')) { + $dataType = substr_replace($item['COLUMN_TYPE'], '', stripos($item['COLUMN_TYPE'], ')') + 1); + } else { + $dataType = str_replace(' unsigned', '', $item['COLUMN_TYPE']); + } + + // 默认值和默认值类型分析 + $default = ''; + if ($isNullAble && is_null($item['COLUMN_DEFAULT'])) { + $defaultType = 'NULL'; + } elseif ($item['COLUMN_DEFAULT'] == '' && in_array($item['DATA_TYPE'], ['varchar', 'char'])) { + $defaultType = 'EMPTY STRING'; + } elseif (!$isNullAble && is_null($item['COLUMN_DEFAULT'])) { + $defaultType = 'NONE'; + } else { + $defaultType = 'INPUT'; + $default = $item['COLUMN_DEFAULT']; + } + + $column = [ + 'name' => $item['COLUMN_NAME'], + 'type' => $item['DATA_TYPE'], + 'dataType' => $dataType, + 'default' => $default, + 'defaultType' => $defaultType, + 'null' => $isNullAble, + 'primaryKey' => $item['COLUMN_KEY'] == 'PRI', + 'unsigned' => (bool)stripos($item['COLUMN_TYPE'], 'unsigned'), + 'autoIncrement' => stripos($item['EXTRA'], 'auto_increment') !== false, + 'comment' => $item['COLUMN_COMMENT'], + 'designType' => self::getTableColumnsDataType($item), + 'table' => [], + 'form' => [], + ]; + if ($analyseField) { + self::analyseField($column); + } else { + self::handleTableColumn($column); + } + $columns[$item['COLUMN_NAME']] = $column; + } + return $columns; + } + + /** + * 解析到的表字段的额外处理 + */ + public static function handleTableColumn(&$column): void + { + // 预留 + } + + /** + * 分析字段数据类型 + * @param array $field 字段数据 + * @return string 字段类型 + */ + public static function analyseFieldType(array $field): string + { + $dataType = (isset($field['dataType']) && $field['dataType']) ? $field['dataType'] : $field['type']; + if (stripos($dataType, '(') !== false) { + $typeName = explode('(', $dataType); + return trim($typeName[0]); + } + return trim($dataType); + } + + /** + * 分析字段的完整数据类型定义 + * @param array $field 字段数据 + * @return string + */ + public static function analyseFieldDataType(array $field): string + { + if (!empty($field['dataType'])) return $field['dataType']; + + $conciseType = self::analyseFieldType($field); + $limit = self::analyseFieldLimit($conciseType, $field); + + if (isset($limit['precision'])) { + $dataType = "$conciseType({$limit['precision']}, {$limit['scale']})"; + } elseif (isset($limit['values'])) { + $values = implode(',', $limit['values']); + $dataType = "$conciseType($values)"; + } else { + $dataType = "$conciseType({$limit['limit']})"; + } + return $dataType; + } + + /** + * 分析字段 + */ + public static function analyseField(&$field): void + { + $field['type'] = self::analyseFieldType($field); + $field['originalDesignType'] = $field['designType']; + + // 表单项类型转换对照表 + $designTypeComparison = [ + 'pk' => 'string', + 'weigh' => 'number', + 'timestamp' => 'datetime', + 'float' => 'number', + ]; + if (array_key_exists($field['designType'], $designTypeComparison)) { + $field['designType'] = $designTypeComparison[$field['designType']]; + } + + // 是否开启了多选 + $supportMultipleComparison = ['select', 'image', 'file', 'remoteSelect']; + if (in_array($field['designType'], $supportMultipleComparison)) { + $multiKey = $field['designType'] == 'remoteSelect' ? 'select-multi' : $field['designType'] . '-multi'; + if (isset($field['form'][$multiKey]) && $field['form'][$multiKey]) { + $field['designType'] = $field['designType'] . 's'; + } + } + } + + public static function getTableColumnsDataType($column) + { + if (stripos($column['COLUMN_NAME'], 'id') !== false && stripos($column['EXTRA'], 'auto_increment') !== false) { + return 'pk'; + } elseif ($column['COLUMN_NAME'] == 'weigh') { + return 'weigh'; + } elseif (in_array($column['COLUMN_NAME'], ['createtime', 'updatetime', 'create_time', 'update_time'])) { + return 'timestamp'; + } + foreach (self::$inputTypeRule as $item) { + $typeBool = true; + $suffixBool = true; + $columnTypeBool = true; + if (isset($item['type']) && $item['type'] && !in_array($column['DATA_TYPE'], $item['type'])) { + $typeBool = false; + } + if (isset($item['suffix']) && $item['suffix']) { + $suffixBool = self::isMatchSuffix($column['COLUMN_NAME'], $item['suffix']); + } + if (isset($item['column_type']) && $item['column_type'] && !in_array($column['COLUMN_TYPE'], $item['column_type'])) { + $columnTypeBool = false; + } + if ($typeBool && $suffixBool && $columnTypeBool) { + return $item['value']; + } + } + return 'string'; + } + + /** + * 判断是否符合指定后缀 + * + * @param string $field 字段名称 + * @param string|array $suffixArr 后缀 + * @return bool + */ + protected static function isMatchSuffix(string $field, string|array $suffixArr): bool + { + $suffixArr = is_array($suffixArr) ? $suffixArr : explode(',', $suffixArr); + foreach ($suffixArr as $v) { + if (preg_match("/$v$/i", $field)) { + return true; + } + } + return false; + } + + /** + * 创建菜单 + * @throws Throwable + */ + public static function createMenu($webViewsDir, $tableComment): void + { + $menuName = self::getMenuName($webViewsDir); + if (AdminRule::where('name', $menuName)->value('id')) { + return; + } + + // 组装权限节点数据 + $menuChildren = self::$menuChildren; + foreach ($menuChildren as &$item) { + $item['name'] = $menuName . $item['name']; + } + + // 组件路径 + $componentPath = str_replace(['\\', 'web/src'], ['/', '/src'], $webViewsDir['views'] . '/' . 'index.vue'); + + // 菜单数组 + $menus = [ + 'type' => 'menu', + 'title' => $tableComment ?: $webViewsDir['originalLastName'], + 'name' => $menuName, + 'path' => $menuName, + 'menu_type' => 'tab', + 'keepalive' => 1, + 'component' => $componentPath, + 'children' => $menuChildren, + ]; + $paths = array_reverse($webViewsDir['path']); + foreach ($paths as $path) { + $menus = [ + 'type' => 'menu_dir', + 'title' => $path, + 'name' => $path, + 'path' => $path, + 'children' => [$menus], + ]; + } + + // 创建菜单 + Menu::create([$menus], 0, 'ignore'); + } + + public static function writeWebLangFile($langData, $webLangDir): void + { + foreach ($langData as $lang => $langDatum) { + $langTsContent = ''; + foreach ($langDatum as $key => $item) { + $quote = self::getQuote($item); + $keyStr = self::formatObjectKey($key); + $langTsContent .= self::tab() . $keyStr . ": $quote$item$quote,\n"; + } + $langTsContent = "export default {\n" . $langTsContent . "}\n"; + self::writeFile(root_path() . $webLangDir[$lang] . '.ts', $langTsContent); + } + } + + public static function writeFile($path, $content): bool|int + { + $path = Filesystem::fsFit($path); + if (!is_dir(dirname($path))) { + mkdir(dirname($path), 0755, true); + } + return file_put_contents($path, $content); + } + + public static function buildModelAppend($append): string + { + if (!$append) return ''; + $append = self::buildFormatSimpleArray($append); + return "\n" . self::tab() . "// 追加属性" . "\n" . self::tab() . "protected \$append = $append;\n"; + } + + public static function buildModelFieldType(array $fieldType): string + { + if (!$fieldType) return ''; + $maxStrLang = 0; + foreach ($fieldType as $key => $item) { + $strLang = strlen($key); + $maxStrLang = max($strLang, $maxStrLang); + } + + $str = ''; + foreach ($fieldType as $key => $item) { + $str .= self::tab(2) . "'$key'" . str_pad('=>', ($maxStrLang - strlen($key) + 3), ' ', STR_PAD_LEFT) . " '$item',\n"; + } + return "\n" . self::tab() . "// 字段类型转换" . "\n" . self::tab() . "protected \$type = [\n" . rtrim($str, "\n") . "\n" . self::tab() . "];\n"; + } + + public static function writeModelFile(string $tablePk, array $fieldsMap, array $modelData, array $modelFile): void + { + if ($modelData['connection'] && $modelData['connection'] != config('database.default')) { + $modelData['connection'] = "\n" . self::tab() . "// 数据库连接配置标识\n" . self::tab() . 'protected $connection = ' . "'{$modelData['connection']}';\n"; + } else { + $modelData['connection'] = ''; + } + + $modelData['pk'] = $tablePk == 'id' ? '' : "\n" . self::tab() . "// 表主键\n" . self::tab() . 'protected $pk = ' . "'$tablePk';\n"; + $modelData['autoWriteTimestamp'] = array_key_exists(self::$createTimeField, $fieldsMap) || array_key_exists(self::$updateTimeField, $fieldsMap) ? 'true' : 'false'; + if ($modelData['autoWriteTimestamp'] == 'true') { + $modelData['createTime'] = array_key_exists(self::$createTimeField, $fieldsMap) ? '' : "\n" . self::tab() . "protected \$createTime = false;"; + $modelData['updateTime'] = array_key_exists(self::$updateTimeField, $fieldsMap) ? '' : "\n" . self::tab() . "protected \$updateTime = false;"; + } + $modelMethodList = isset($modelData['relationMethodList']) ? array_merge($modelData['methods'], $modelData['relationMethodList']) : $modelData['methods']; + $modelData['methods'] = $modelMethodList ? "\n" . implode("\n", $modelMethodList) : ''; + $modelData['append'] = self::buildModelAppend($modelData['append']); + $modelData['fieldType'] = self::buildModelFieldType($modelData['fieldType']); + + // 生成雪花ID? + if (isset($modelData['beforeInsertMixins']['snowflake'])) { + // beforeInsert 组装 + $modelData['beforeInsert'] = Helper::assembleStub('mixins/model/beforeInsert', [ + 'setSnowFlakeIdCode' => $modelData['beforeInsertMixins']['snowflake'] + ]); + } + if ($modelData['afterInsert'] && $modelData['beforeInsert']) { + $modelData['afterInsert'] = "\n" . $modelData['afterInsert']; + } + + $modelFileContent = self::assembleStub('mixins/model/model', $modelData); + self::writeFile($modelFile['parseFile'], $modelFileContent); + } + + public static function writeControllerFile(array $controllerData, array $controllerFile): void + { + if (isset($controllerData['relationVisibleFieldList']) && $controllerData['relationVisibleFieldList']) { + $relationVisibleFields = '->visible(['; + foreach ($controllerData['relationVisibleFieldList'] as $cKey => $controllerDatum) { + $relationVisibleFields .= "'$cKey' => ['" . implode("', '", $controllerDatum) . "'], "; + } + $relationVisibleFields = rtrim($relationVisibleFields, ', '); + $relationVisibleFields .= '])'; + // 重写index + $controllerData['methods']['index'] = self::assembleStub('mixins/controller/index', [ + 'relationVisibleFields' => $relationVisibleFields + ]); + $controllerData['use']['Throwable'] = "\nuse Throwable;"; + unset($controllerData['relationVisibleFieldList']); + } + $controllerAttr = ''; + foreach ($controllerData['attr'] as $key => $item) { + $attrType = ''; + if (array_key_exists($key, self::$attrType['controller'])) { + $attrType = self::$attrType['controller'][$key]; + } + if (is_array($item)) { + $controllerAttr .= "\n" . self::tab() . "protected $attrType \$$key = ['" . implode("', '", $item) . "'];\n"; + } elseif ($item) { + $controllerAttr .= "\n" . self::tab() . "protected $attrType \$$key = '$item';\n"; + } + } + $controllerData['attr'] = $controllerAttr; + $controllerData['initialize'] = self::assembleStub('mixins/controller/initialize', [ + 'modelNamespace' => $controllerData['modelNamespace'], + 'modelName' => $controllerData['modelName'], + 'filterRule' => $controllerData['filterRule'], + ]); + $contentFileContent = self::assembleStub('mixins/controller/controller', $controllerData); + self::writeFile($controllerFile['parseFile'], $contentFileContent); + } + + public static function writeFormFile($formVueData, $webViewsDir, $fields, $webTranslate): void + { + $fieldHtml = "\n"; + $formVueData['bigDialog'] = $formVueData['bigDialog'] ? "\n" . self::tab(2) . 'width="70%"' : ''; + foreach ($formVueData['formFields'] as $field) { + $fieldHtml .= self::tab(5) . " $attr) { + if (is_array($attr)) { + $fieldHtml .= ' ' . $key . '="' . self::getJsonFromArray($attr) . '"'; + } else { + $fieldHtml .= ' ' . $key . '="' . $attr . '"'; + } + } + $fieldHtml .= " />\n"; + } + $formVueData['formFields'] = rtrim($fieldHtml, "\n"); + + // 表单验证规则 + foreach ($fields as $field) { + if (isset($field['form']['validator'])) { + foreach ($field['form']['validator'] as $item) { + $message = ''; + if (isset($field['form']['validatorMsg']) && $field['form']['validatorMsg']) { + $message = ", message: '{$field['form']['validatorMsg']}'"; + } + $formVueData['formValidatorRules'][$field['name']][] = "buildValidatorData({ name: '$item', title: t('$webTranslate{$field['name']}')$message })"; + } + } + } + + if ($formVueData['formValidatorRules']) { + $formVueData['imports'][] = "import { buildValidatorData } from '/@/utils/validate'"; + } + + $formVueData['importExpand'] = self::buildImportExpand($formVueData['imports']); + $formVueData['formItemRules'] = self::buildFormValidatorRules($formVueData['formValidatorRules']); + $formVueContent = self::assembleStub('html/form', $formVueData); + self::writeFile(root_path() . $webViewsDir['views'] . '/' . 'popupForm.vue', $formVueContent); + } + + public static function buildImportExpand(array $imports): string + { + $importExpand = ''; + foreach ($imports as $import) { + $importExpand .= "\n$import"; + } + return $importExpand; + } + + public static function buildFormValidatorRules(array $formValidatorRules): string + { + $rulesHtml = ""; + foreach ($formValidatorRules as $key => $formItemRule) { + $rulesArrHtml = ''; + foreach ($formItemRule as $item) { + $rulesArrHtml .= $item . ', '; + } + $rulesHtml .= self::tab() . $key . ': [' . rtrim($rulesArrHtml, ', ') . "],\n"; + } + return $rulesHtml ? "\n" . $rulesHtml : ''; + } + + public static function writeIndexFile($indexVueData, $webViewsDir, $controllerFile): void + { + $indexVueData['optButtons'] = self::buildSimpleArray($indexVueData['optButtons']); + $indexVueData['defaultItems'] = self::getJsonFromArray($indexVueData['defaultItems']); + $indexVueData['tableColumn'] = self::buildTableColumn($indexVueData['tableColumn']); + $indexVueData['dblClickNotEditColumn'] = self::buildSimpleArray($indexVueData['dblClickNotEditColumn']); + $controllerFile['path'][] = $controllerFile['originalLastName']; + $indexVueData['controllerUrl'] = '\'/admin/' . ($controllerFile['path'] ? implode('.', $controllerFile['path']) : '') . '/\''; + $indexVueData['componentName'] = ($webViewsDir['path'] ? implode('/', $webViewsDir['path']) . '/' : '') . $webViewsDir['originalLastName']; + $indexVueContent = self::assembleStub('html/index', $indexVueData); + self::writeFile(root_path() . $webViewsDir['views'] . '/' . 'index.vue', $indexVueContent); + } + + public static function buildTableColumn($tableColumnList): string + { + $columnJson = ''; + $emptyUnset = ['comSearchInputAttr', 'replaceValue', 'custom']; + foreach ($tableColumnList as $column) { + + foreach ($emptyUnset as $unsetKey) { + if (empty($column[$unsetKey])) { + unset($column[$unsetKey]); + } + } + + $columnJson .= self::tab(3) . '{'; + foreach ($column as $key => $item) { + $columnJson .= self::buildTableColumnKey($key, $item); + } + $columnJson = rtrim($columnJson, ','); + $columnJson .= ' }' . ",\n"; + } + return rtrim($columnJson, "\n"); + } + + public static function buildTableColumnKey($key, $item): string + { + $key = self::formatObjectKey($key); + if (is_array($item)) { + $itemJson = ' ' . $key . ': {'; + foreach ($item as $ik => $iItem) { + $itemJson .= self::buildTableColumnKey($ik, $iItem); + } + $itemJson = rtrim($itemJson, ','); + $itemJson .= ' },'; + } elseif ($item === 'false' || $item === 'true') { + $itemJson = ' ' . $key . ': ' . $item . ','; + } elseif (in_array($key, ['label', 'width', 'buttons'], true) || str_starts_with($item, "t('") || str_starts_with($item, "t(\"")) { + $itemJson = ' ' . $key . ': ' . $item . ','; + } else { + $itemJson = ' ' . $key . ': \'' . $item . '\','; + } + return $itemJson; + } + + public static function formatObjectKey(string $keyName): string + { + if (preg_match("/^[a-zA-Z_][a-zA-Z0-9_]+$/", $keyName)) { + return $keyName; + } else { + $quote = self::getQuote($keyName); + return "$quote$keyName$quote"; + } + } + + public static function getQuote(string $value): string + { + return stripos($value, "'") === false ? "'" : '"'; + } + + public static function buildFormatSimpleArray($arr, int $tab = 2): string + { + if (!$arr) return '[]'; + $str = '[' . PHP_EOL; + foreach ($arr as $item) { + if ($item == 'undefined' || $item == 'false' || is_numeric($item)) { + $str .= self::tab($tab) . $item . ',' . PHP_EOL; + } else { + $quote = self::getQuote($item); + $str .= self::tab($tab) . "$quote$item$quote," . PHP_EOL; + } + } + return $str . self::tab($tab - 1) . ']'; + } + + public static function buildSimpleArray($arr): string + { + if (!$arr) return '[]'; + $str = ''; + foreach ($arr as $item) { + if ($item == 'undefined' || $item == 'false' || is_numeric($item)) { + $str .= $item . ', '; + } else { + $quote = self::getQuote($item); + $str .= "$quote$item$quote, "; + } + } + return '[' . rtrim($str, ", ") . ']'; + } + + public static function buildDefaultOrder(string $field, string $type): string + { + if ($field && $type) { + $defaultOrderStub = [ + 'prop' => $field, + 'order' => $type, + ]; + $defaultOrderStub = self::getJsonFromArray($defaultOrderStub); + if ($defaultOrderStub) { + return "\n" . self::tab(2) . "defaultOrder: " . $defaultOrderStub . ','; + } + } + return ''; + } + + public static function getJsonFromArray($arr) + { + if (is_array($arr)) { + $jsonStr = ''; + foreach ($arr as $key => $item) { + $keyStr = ' ' . self::formatObjectKey($key) . ': '; + if (is_array($item)) { + $jsonStr .= $keyStr . self::getJsonFromArray($item) . ','; + } elseif ($item === 'false' || $item === 'true') { + $jsonStr .= $keyStr . ($item === 'false' ? 'false' : 'true') . ','; + } elseif ($item === null) { + $jsonStr .= $keyStr . 'null,'; + } elseif (str_starts_with($item, "t('") || str_starts_with($item, "t(\"") || $item == '[]' || in_array(gettype($item), ['integer', 'double'])) { + $jsonStr .= $keyStr . $item . ','; + } elseif (isset($item[0]) && $item[0] == '[' && str_ends_with($item, ']')) { + $jsonStr .= $keyStr . $item . ','; + } else { + $quote = self::getQuote($item); + $jsonStr .= $keyStr . "$quote$item$quote,"; + } + } + return $jsonStr ? '{' . rtrim($jsonStr, ',') . ' }' : '{}'; + } else { + return $arr; + } + } + +} \ No newline at end of file diff --git a/app/admin/library/crud/stubs/html/form.stub b/app/admin/library/crud/stubs/html/form.stub new file mode 100644 index 0000000..bbf7b8e --- /dev/null +++ b/app/admin/library/crud/stubs/html/form.stub @@ -0,0 +1,63 @@ + + + + + diff --git a/app/admin/library/crud/stubs/html/index.stub b/app/admin/library/crud/stubs/html/index.stub new file mode 100644 index 0000000..53ad5fe --- /dev/null +++ b/app/admin/library/crud/stubs/html/index.stub @@ -0,0 +1,69 @@ + + + + + diff --git a/app/admin/library/crud/stubs/mixins/controller/controller.stub b/app/admin/library/crud/stubs/mixins/controller/controller.stub new file mode 100644 index 0000000..7a5213f --- /dev/null +++ b/app/admin/library/crud/stubs/mixins/controller/controller.stub @@ -0,0 +1,24 @@ +request->param('select')) { + $this->select(); + } + + /** + * 1. withJoin 不可使用 alias 方法设置表别名,别名将自动使用关联模型名称(小写下划线命名规则) + * 2. 以下的别名设置了主表别名,同时便于拼接查询参数等 + * 3. paginate 数据集可使用链式操作 each(function($item, $key) {}) 遍历处理 + */ + list($where, $alias, $limit, $order) = $this->queryBuilder(); + $res = $this->model + ->withJoin($this->withJoinTable, $this->withJoinType) + {%relationVisibleFields%} + ->alias($alias) + ->where($where) + ->order($order) + ->paginate($limit); + + $this->success('', [ + 'list' => $res->items(), + 'total' => $res->total(), + 'remark' => get_route_remark(), + ]); + } \ No newline at end of file diff --git a/app/admin/library/crud/stubs/mixins/controller/initialize.stub b/app/admin/library/crud/stubs/mixins/controller/initialize.stub new file mode 100644 index 0000000..d8888f9 --- /dev/null +++ b/app/admin/library/crud/stubs/mixins/controller/initialize.stub @@ -0,0 +1,6 @@ + + public function initialize(): void + { + parent::initialize(); + $this->model = new \{%modelNamespace%}\{%modelName%}();{%filterRule%} + } \ No newline at end of file diff --git a/app/admin/library/crud/stubs/mixins/model/afterInsert.stub b/app/admin/library/crud/stubs/mixins/model/afterInsert.stub new file mode 100644 index 0000000..58d0763 --- /dev/null +++ b/app/admin/library/crud/stubs/mixins/model/afterInsert.stub @@ -0,0 +1,12 @@ + + protected static function onAfterInsert($model): void + { + if (is_null($model->{%field%})) { + $pk = $model->getPk(); + if (strlen($model[$pk]) >= 19) { + $model->where($pk, $model[$pk])->update(['{%field%}' => $model->count()]); + } else { + $model->where($pk, $model[$pk])->update(['{%field%}' => $model[$pk]]); + } + } + } \ No newline at end of file diff --git a/app/admin/library/crud/stubs/mixins/model/beforeInsert.stub b/app/admin/library/crud/stubs/mixins/model/beforeInsert.stub new file mode 100644 index 0000000..6eebf2d --- /dev/null +++ b/app/admin/library/crud/stubs/mixins/model/beforeInsert.stub @@ -0,0 +1,5 @@ + + protected static function onBeforeInsert($model): void + { +{%setSnowFlakeIdCode%} + } \ No newline at end of file diff --git a/app/admin/library/crud/stubs/mixins/model/belongsTo.stub b/app/admin/library/crud/stubs/mixins/model/belongsTo.stub new file mode 100644 index 0000000..995118d --- /dev/null +++ b/app/admin/library/crud/stubs/mixins/model/belongsTo.stub @@ -0,0 +1,5 @@ + + public function {%relationMethod%}(): \think\model\relation\BelongsTo + { + return $this->{%relationMode%}({%relationClassName%}, '{%relationForeignKey%}', '{%relationPrimaryKey%}'); + } \ No newline at end of file diff --git a/app/admin/library/crud/stubs/mixins/model/getters/cityNames.stub b/app/admin/library/crud/stubs/mixins/model/getters/cityNames.stub new file mode 100644 index 0000000..191d63c --- /dev/null +++ b/app/admin/library/crud/stubs/mixins/model/getters/cityNames.stub @@ -0,0 +1,7 @@ + + public function get{%field%}Attr($value, $row): string + { + if ($row['{%originalFieldName%}'] === '' || $row['{%originalFieldName%}'] === null) return ''; + $cityNames = \think\facade\Db::name('area')->whereIn('id', $row['{%originalFieldName%}'])->column('name'); + return $cityNames ? implode(',', $cityNames) : ''; + } \ No newline at end of file diff --git a/app/admin/library/crud/stubs/mixins/model/getters/float.stub b/app/admin/library/crud/stubs/mixins/model/getters/float.stub new file mode 100644 index 0000000..482115c --- /dev/null +++ b/app/admin/library/crud/stubs/mixins/model/getters/float.stub @@ -0,0 +1,5 @@ + + public function get{%field%}Attr($value): ?float + { + return is_null($value) ? null : (float)$value; + } \ No newline at end of file diff --git a/app/admin/library/crud/stubs/mixins/model/getters/htmlDecode.stub b/app/admin/library/crud/stubs/mixins/model/getters/htmlDecode.stub new file mode 100644 index 0000000..47ea946 --- /dev/null +++ b/app/admin/library/crud/stubs/mixins/model/getters/htmlDecode.stub @@ -0,0 +1,5 @@ + + public function get{%field%}Attr($value): string + { + return !$value ? '' : htmlspecialchars_decode($value); + } \ No newline at end of file diff --git a/app/admin/library/crud/stubs/mixins/model/getters/jsonDecode.stub b/app/admin/library/crud/stubs/mixins/model/getters/jsonDecode.stub new file mode 100644 index 0000000..6ae96a7 --- /dev/null +++ b/app/admin/library/crud/stubs/mixins/model/getters/jsonDecode.stub @@ -0,0 +1,5 @@ + + public function get{%field%}Attr($value): array + { + return !$value ? [] : json_decode($value, true); + } \ No newline at end of file diff --git a/app/admin/library/crud/stubs/mixins/model/getters/remoteSelectLabels.stub b/app/admin/library/crud/stubs/mixins/model/getters/remoteSelectLabels.stub new file mode 100644 index 0000000..2767dd8 --- /dev/null +++ b/app/admin/library/crud/stubs/mixins/model/getters/remoteSelectLabels.stub @@ -0,0 +1,7 @@ + + public function get{%field%}Attr($value, $row): array + { + return [ + '{%labelFieldName%}' => {%className%}::whereIn('{%primaryKey%}', $row['{%foreignKey%}'])->column('{%labelFieldName%}'), + ]; + } \ No newline at end of file diff --git a/app/admin/library/crud/stubs/mixins/model/getters/string.stub b/app/admin/library/crud/stubs/mixins/model/getters/string.stub new file mode 100644 index 0000000..1622c4b --- /dev/null +++ b/app/admin/library/crud/stubs/mixins/model/getters/string.stub @@ -0,0 +1,5 @@ + + public function get{%field%}Attr($value): string + { + return (string)$value; + } \ No newline at end of file diff --git a/app/admin/library/crud/stubs/mixins/model/getters/stringToArray.stub b/app/admin/library/crud/stubs/mixins/model/getters/stringToArray.stub new file mode 100644 index 0000000..43f7543 --- /dev/null +++ b/app/admin/library/crud/stubs/mixins/model/getters/stringToArray.stub @@ -0,0 +1,9 @@ + + public function get{%field%}Attr($value): array + { + if ($value === '' || $value === null) return []; + if (!is_array($value)) { + return explode(',', $value); + } + return $value; + } \ No newline at end of file diff --git a/app/admin/library/crud/stubs/mixins/model/mixins/beforeInsertWithSnowflake.stub b/app/admin/library/crud/stubs/mixins/model/mixins/beforeInsertWithSnowflake.stub new file mode 100644 index 0000000..4904e08 --- /dev/null +++ b/app/admin/library/crud/stubs/mixins/model/mixins/beforeInsertWithSnowflake.stub @@ -0,0 +1,2 @@ + $pk = $model->getPk(); + $model->$pk = \app\common\library\SnowFlake::generateParticle(); \ No newline at end of file diff --git a/app/admin/library/crud/stubs/mixins/model/model.stub b/app/admin/library/crud/stubs/mixins/model/model.stub new file mode 100644 index 0000000..cd77f11 --- /dev/null +++ b/app/admin/library/crud/stubs/mixins/model/model.stub @@ -0,0 +1,18 @@ + [], + 'edit' => [], + ]; + +} diff --git a/app/admin/library/module/Manage.php b/app/admin/library/module/Manage.php new file mode 100644 index 0000000..2f524cc --- /dev/null +++ b/app/admin/library/module/Manage.php @@ -0,0 +1,971 @@ +setModuleUid($uid); + } + + public function __construct(string $uid) + { + $this->installDir = root_path() . 'modules' . DIRECTORY_SEPARATOR; + $this->backupsDir = $this->installDir . 'backups' . DIRECTORY_SEPARATOR; + if (!is_dir($this->installDir)) { + mkdir($this->installDir, 0755, true); + } + if (!is_dir($this->backupsDir)) { + mkdir($this->backupsDir, 0755, true); + } + + if ($uid) { + $this->setModuleUid($uid); + } + } + + public function getInstallState() + { + if (!is_dir($this->modulesDir)) { + return self::UNINSTALLED; + } + $info = $this->getInfo(); + if ($info && isset($info['state'])) { + return $info['state']; + } + + // 目录已存在,但非正常的模块 + return Filesystem::dirIsEmpty($this->modulesDir) ? self::UNINSTALLED : self::DIRECTORY_OCCUPIED; + } + + /** + * 下载模块文件 + * @return string 已下载文件路径 + * @throws Throwable + */ + public function download(): string + { + $token = request()->param("token/s"); + $version = request()->param('version/s'); + $orderId = request()->param("orderId/d"); + + if (!$orderId) { + throw new Exception('Order not found'); + } + + // 下载 - 系统版本号要求、已安装模块的互斥和依赖检测 + $zipFile = Server::download($this->uid, $this->installDir, [ + 'version' => $version, + 'orderId' => $orderId, + 'nuxtVersion' => Server::getNuxtVersion(), + 'sysVersion' => Config::get('buildadmin.version'), + 'installed' => Server::getInstalledIds($this->installDir), + 'ba-user-token' => $token, + ]); + + // 删除旧版本代码 + Filesystem::delDir($this->modulesDir); + + // 解压 + Filesystem::unzip($zipFile); + + // 删除下载的zip + @unlink($zipFile); + + // 检查是否完整 + $this->checkPackage(); + + // 设置为待安装状态 + $this->setInfo([ + 'state' => self::WAIT_INSTALL, + ]); + + return $zipFile; + } + + /** + * 上传安装 + * @param string $file 已经上传完成的文件 + * @return array 模块的基本信息 + * @throws Throwable + */ + public function upload(string $token, string $file): array + { + $file = Filesystem::fsFit(root_path() . 'public' . $file); + if (!is_file($file)) { + // 包未找到 + throw new Exception('Zip file not found'); + } + + $copyTo = $this->installDir . 'uploadTemp' . date('YmdHis') . '.zip'; + copy($file, $copyTo); + + // 解压 + $copyToDir = Filesystem::unzip($copyTo); + $copyToDir .= DIRECTORY_SEPARATOR; + + // 删除zip + @unlink($file); + @unlink($copyTo); + + // 读取ini + $info = Server::getIni($copyToDir); + if (empty($info['uid'])) { + Filesystem::delDir($copyToDir); + // 基本配置不完整 + throw new Exception('Basic configuration of the Module is incomplete'); + } + + $this->setModuleUid($info['uid']); + + $upgrade = false; + if (is_dir($this->modulesDir)) { + $oldInfo = $this->getInfo(); + if ($oldInfo && !empty($oldInfo['uid'])) { + $versions = explode('.', $oldInfo['version']); + if (isset($versions[2])) { + $versions[2]++; + } + $nextVersion = implode('.', $versions); + $upgrade = Version::compare($nextVersion, $info['version']); + if ($upgrade) { + // 检查模块是否已禁用 + if (!in_array($oldInfo['state'], [self::UNINSTALLED, self::WAIT_INSTALL, self::DISABLE])) { + Filesystem::delDir($copyToDir); + throw new Exception('Please disable the module before updating'); + } + } else { + Filesystem::delDir($copyToDir); + // 模块已经存在 + throw new Exception('Module already exists'); + } + } + + if (!Filesystem::dirIsEmpty($this->modulesDir) && !$upgrade) { + Filesystem::delDir($copyToDir); + // 模块目录被占 + throw new Exception('The directory required by the module is occupied'); + } + } + + // 安装预检 - 系统版本号要求、已安装模块的互斥和依赖检测 + try { + Server::installPreCheck([ + 'uid' => $info['uid'], + 'version' => $info['version'], + 'sysVersion' => Config::get('buildadmin.version'), + 'nuxtVersion' => Server::getNuxtVersion(), + 'moduleVersion' => $info['version'], + 'ba-user-token' => $token, + 'installed' => Server::getInstalledIds($this->installDir), + 'server' => 1, + ]); + } catch (Throwable $e) { + Filesystem::delDir($copyToDir); + throw $e; + } + + $newInfo = ['state' => self::WAIT_INSTALL]; + if ($upgrade) { + $info['update'] = 1; + + // 清理旧版本代码 + Filesystem::delDir($this->modulesDir); + } + + // 放置新模块 + rename($copyToDir, $this->modulesDir); + + // 检查新包是否完整 + $this->checkPackage(); + + // 设置为待安装状态 + $this->setInfo($newInfo); + + return $info; + } + + /** + * 安装模块 + * @return array 模块基本信息 + * @throws Throwable + */ + public function install(bool $update): array + { + $state = $this->getInstallState(); + + if ($update) { + if (!in_array($state, [self::UNINSTALLED, self::WAIT_INSTALL, self::DISABLE])) { + throw new Exception('Please disable the module before updating'); + } + + /** + * self::WAIT_INSTALL=待安装 + * 即本地上传文件进行升级的安装流程,文件上传成功后将被标记为待安装,免去此处的下载 + */ + if ($state == self::UNINSTALLED || $state != self::WAIT_INSTALL) { + $this->download(); + } + } else { + if ($state == self::INSTALLED || $state == self::DIRECTORY_OCCUPIED || $state == self::DISABLE) { + throw new Exception('Module already exists'); + } + + if ($state == self::UNINSTALLED) { + $this->download(); + } + } + + // 导入sql + Server::importSql($this->modulesDir); + + // 如果是更新,先执行更新脚本 + $info = $this->getInfo(); + if ($update) { + $info['update'] = 1; + Server::execEvent($this->uid, 'update'); + } + + // 执行安装脚本 - 排除冲突处理时会重复提交至此的请求 + $extend = request()->post('extend/a', []); + if (!isset($extend['conflictHandle'])) { + Server::execEvent($this->uid, 'install'); + } + + // 启用插件 + $this->enable('install'); + + return $info; + } + + /** + * 卸载 + * @throws Throwable + */ + public function uninstall(): void + { + $info = $this->getInfo(); + if ($info['state'] != self::DISABLE) { + throw new Exception('Please disable the module first', 0, [ + 'uid' => $this->uid, + ]); + } + + // 执行卸载脚本 + Server::execEvent($this->uid, 'uninstall'); + + Filesystem::delDir($this->modulesDir); + } + + /** + * 修改模块状态 + * @param bool $state 新状态 + * @return array 模块基本信息 + * @throws Throwable + */ + public function changeState(bool $state): array + { + $info = $this->getInfo(); + if (!$state) { + $canDisable = [ + self::INSTALLED, + self::CONFLICT_PENDING, + self::DEPENDENT_WAIT_INSTALL, + ]; + if (!in_array($info['state'], $canDisable)) { + throw new Exception('The current state of the module cannot be set to disabled', 0, [ + 'uid' => $this->uid, + 'state' => $info['state'], + ]); + } + return $this->disable(); + } + + if ($info['state'] != self::DISABLE) { + throw new Exception('The current state of the module cannot be set to enabled', 0, [ + 'uid' => $this->uid, + 'state' => $info['state'], + ]); + } + $this->setInfo([ + 'state' => self::WAIT_INSTALL, + ]); + return $info; + } + + /** + * 启用 + * @param string $trigger 触发启用的标志,比如:install=安装 + * @throws Throwable + */ + public function enable(string $trigger): void + { + // 安装 WebBootstrap + Server::installWebBootstrap($this->uid, $this->modulesDir); + + // 建立 .runtime + Server::createRuntime($this->modulesDir); + + // 冲突检查 + $this->conflictHandle($trigger); + + // 执行启用脚本 + Server::execEvent($this->uid, 'enable'); + + $this->dependUpdateHandle(); + } + + /** + * 禁用 + * @return array 模块基本信息 + * @throws Throwable + */ + public function disable(): array + { + $update = request()->post("update/b", false); + $confirmConflict = request()->post("confirmConflict/b", false); + $dependConflictSolution = request()->post("dependConflictSolution/a", []); + + $info = $this->getInfo(); + $zipFile = $this->backupsDir . $this->uid . '-install.zip'; + $zipDir = false; + if (is_file($zipFile)) { + try { + $zipDir = $this->backupsDir . $this->uid . '-install' . DIRECTORY_SEPARATOR; + Filesystem::unzip($zipFile, $zipDir); + } catch (Exception) { + // skip + } + } + + $conflictFile = Server::getFileList($this->modulesDir, true); + $dependConflict = $this->disableDependCheck(); + if (($conflictFile || !self::isEmptyArray($dependConflict)) && !$confirmConflict) { + $dependConflictTemp = []; + foreach ($dependConflict as $env => $item) { + foreach ($item as $depend => $v) { + $dependConflictTemp[] = [ + 'env' => $env, + 'depend' => $depend, + 'dependTitle' => $depend . ' ' . $v, + 'solution' => 'delete', + ]; + } + } + throw new Exception('Module file updated', -1, [ + 'uid' => $this->uid, + 'conflictFile' => $conflictFile, + 'dependConflict' => $dependConflictTemp, + ]); + } + + // 执行禁用脚本 + Server::execEvent($this->uid, 'disable', ['update' => $update]); + + // 是否需要备份依赖? + $delNpmDepend = false; + $delNuxtNpmDepend = false; + $delComposerDepend = false; + foreach ($dependConflictSolution as $env => $depends) { + if (!$depends) continue; + if ($env == 'require' || $env == 'require-dev') { + $delComposerDepend = true; + } elseif ($env == 'dependencies' || $env == 'devDependencies') { + $delNpmDepend = true; + } elseif ($env == 'nuxtDependencies' || $env == 'nuxtDevDependencies') { + $delNuxtNpmDepend = true; + } + } + + // 备份 + $dependJsonFiles = [ + 'composer' => 'composer.json', + 'webPackage' => 'web' . DIRECTORY_SEPARATOR . 'package.json', + 'webNuxtPackage' => 'web-nuxt' . DIRECTORY_SEPARATOR . 'package.json', + ]; + $dependWaitInstall = []; + if ($delComposerDepend) { + $conflictFile[] = $dependJsonFiles['composer']; + $dependWaitInstall[] = [ + 'pm' => false, + 'command' => 'composer.update', + 'type' => 'composer_dependent_wait_install', + ]; + } + if ($delNpmDepend) { + $conflictFile[] = $dependJsonFiles['webPackage']; + $dependWaitInstall[] = [ + 'pm' => true, + 'command' => 'web-install', + 'type' => 'npm_dependent_wait_install', + ]; + } + if ($delNuxtNpmDepend) { + $conflictFile[] = $dependJsonFiles['webNuxtPackage']; + $dependWaitInstall[] = [ + 'pm' => true, + 'command' => 'nuxt-install', + 'type' => 'nuxt_npm_dependent_wait_install', + ]; + } + if ($conflictFile) { + // 如果是模块自带文件需要备份,加上模块目录前缀 + $overwriteDir = Server::getOverwriteDir(); + foreach ($conflictFile as $key => $item) { + $paths = explode(DIRECTORY_SEPARATOR, $item); + if (in_array($paths[0], $overwriteDir) || in_array($item, $dependJsonFiles)) { + $conflictFile[$key] = $item; + } else { + $conflictFile[$key] = Filesystem::fsFit(str_replace(root_path(), '', $this->modulesDir . $item)); + } + if (!is_file(root_path() . $conflictFile[$key])) { + unset($conflictFile[$key]); + } + } + $backupsZip = $this->backupsDir . $this->uid . '-disable-' . date('YmdHis') . '.zip'; + Filesystem::zip($conflictFile, $backupsZip); + } + + // 删除依赖 + $serverDepend = new Depends(root_path() . 'composer.json', 'composer'); + $webDep = new Depends(root_path() . 'web' . DIRECTORY_SEPARATOR . 'package.json'); + $webNuxtDep = new Depends(root_path() . 'web-nuxt' . DIRECTORY_SEPARATOR . 'package.json'); + foreach ($dependConflictSolution as $env => $depends) { + if (!$depends) continue; + $dev = !(stripos($env, 'dev') === false); + if ($env == 'require' || $env == 'require-dev') { + $serverDepend->removeDepends($depends, $dev); + } elseif ($env == 'dependencies' || $env == 'devDependencies') { + $webDep->removeDepends($depends, $dev); + } elseif ($env == 'nuxtDependencies' || $env == 'nuxtDevDependencies') { + $webNuxtDep->removeDepends($depends, $dev); + } + } + + // 删除 composer.json 中的 config + $composerConfig = Server::getConfig($this->modulesDir, 'composerConfig'); + if ($composerConfig) { + $serverDepend->removeComposerConfig($composerConfig); + } + + // 配置了不删除的文件 + $protectedFiles = Server::getConfig($this->modulesDir, 'protectedFiles'); + foreach ($protectedFiles as &$protectedFile) { + $protectedFile = Filesystem::fsFit(root_path() . $protectedFile); + } + // 模块文件列表 + $moduleFile = Server::getFileList($this->modulesDir); + + // 删除模块文件 + foreach ($moduleFile as &$file) { + // 纯净模式下,模块文件将被删除,此处直接检查模块目录中是否有该文件并恢复(不检查是否开启纯净模式,因为开关可能被调整) + $moduleFilePath = Filesystem::fsFit($this->modulesDir . $file); + $file = Filesystem::fsFit(root_path() . $file); + if (!file_exists($file)) continue; + if (!file_exists($moduleFilePath)) { + if (!is_dir(dirname($moduleFilePath))) { + mkdir(dirname($moduleFilePath), 0755, true); + } + copy($file, $moduleFilePath); + } + + if (in_array($file, $protectedFiles)) { + continue; + } + if (file_exists($file)) { + unlink($file); + } + Filesystem::delEmptyDir(dirname($file)); + } + + // 恢复备份文件 + if ($zipDir) { + $unrecoverableFiles = [ + Filesystem::fsFit(root_path() . 'composer.json'), + Filesystem::fsFit(root_path() . 'web/package.json'), + Filesystem::fsFit(root_path() . 'web-nuxt/package.json'), + ]; + foreach ( + new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($zipDir, FilesystemIterator::SKIP_DOTS), + RecursiveIteratorIterator::SELF_FIRST + ) as $item + ) { + $backupsFile = Filesystem::fsFit(root_path() . str_replace($zipDir, '', $item->getPathname())); + + // 在模块包中,同时不在 $protectedFiles 列表的文件不恢复,这些文件可能是模块升级时备份的 + if (in_array($backupsFile, $moduleFile) && !in_array($backupsFile, $protectedFiles)) { + continue; + } + + if ($item->isDir()) { + if (!is_dir($backupsFile)) { + mkdir($backupsFile, 0755, true); + } + } elseif (!in_array($backupsFile, $unrecoverableFiles)) { + copy($item, $backupsFile); + } + } + } + + // 删除解压后的备份文件 + Filesystem::delDir($zipDir); + + // 卸载 WebBootstrap + Server::uninstallWebBootstrap($this->uid); + + $this->setInfo([ + 'state' => self::DISABLE, + ]); + + if ($update) { + throw new Exception('update', -3, [ + 'uid' => $this->uid, + ]); + } + + if ($dependWaitInstall) { + throw new Exception('dependent wait install', -2, [ + 'uid' => $this->uid, + 'wait_install' => $dependWaitInstall, + ]); + } + return $info; + } + + /** + * 处理依赖和文件冲突,并完成与前端的冲突处理交互 + * @throws Throwable + */ + public function conflictHandle(string $trigger): bool + { + $info = $this->getInfo(); + if ($info['state'] != self::WAIT_INSTALL && $info['state'] != self::CONFLICT_PENDING) { + return false; + } + $fileConflict = Server::getFileList($this->modulesDir, true);// 文件冲突 + $dependConflict = Server::dependConflictCheck($this->modulesDir);// 依赖冲突 + $installFiles = Server::getFileList($this->modulesDir);// 待安装文件 + $depends = Server::getDepend($this->modulesDir);// 待安装依赖 + + $coverFiles = [];// 要覆盖的文件-备份 + $discardFiles = [];// 抛弃的文件-复制时不覆盖 + $serverDep = new Depends(root_path() . 'composer.json', 'composer'); + $webDep = new Depends(root_path() . 'web' . DIRECTORY_SEPARATOR . 'package.json'); + $webNuxtDep = new Depends(root_path() . 'web-nuxt' . DIRECTORY_SEPARATOR . 'package.json'); + if ($fileConflict || !self::isEmptyArray($dependConflict)) { + $extend = request()->post('extend/a', []); + if (!$extend) { + // 发现冲突->手动处理->转换为方便前端使用的格式 + $fileConflictTemp = []; + foreach ($fileConflict as $key => $item) { + $fileConflictTemp[$key] = [ + 'newFile' => $this->uid . DIRECTORY_SEPARATOR . $item, + 'oldFile' => $item, + 'solution' => 'cover', + ]; + } + $dependConflictTemp = []; + foreach ($dependConflict as $env => $item) { + $dev = !(stripos($env, 'dev') === false); + foreach ($item as $depend => $v) { + $oldDepend = ''; + if (in_array($env, ['require', 'require-dev'])) { + $oldDepend = $depend . ' ' . $serverDep->hasDepend($depend, $dev); + } elseif (in_array($env, ['dependencies', 'devDependencies'])) { + $oldDepend = $depend . ' ' . $webDep->hasDepend($depend, $dev); + } elseif (in_array($env, ['nuxtDependencies', 'nuxtDevDependencies'])) { + $oldDepend = $depend . ' ' . $webNuxtDep->hasDepend($depend, $dev); + } + $dependConflictTemp[] = [ + 'env' => $env, + 'newDepend' => $depend . ' ' . $v, + 'oldDepend' => $oldDepend, + 'depend' => $depend, + 'solution' => 'cover', + ]; + } + } + $this->setInfo([ + 'state' => self::CONFLICT_PENDING, + ]); + throw new Exception('Module file conflicts', -1, [ + 'fileConflict' => $fileConflictTemp, + 'dependConflict' => $dependConflictTemp, + 'uid' => $this->uid, + 'state' => self::CONFLICT_PENDING, + ]); + } + + // 处理冲突 + if ($fileConflict && isset($extend['fileConflict'])) { + foreach ($installFiles as $ikey => $installFile) { + if (isset($extend['fileConflict'][$installFile])) { + if ($extend['fileConflict'][$installFile] == 'discard') { + $discardFiles[] = $installFile; + unset($installFiles[$ikey]); + } else { + $coverFiles[] = $installFile; + } + } + } + } + if (!self::isEmptyArray($dependConflict) && isset($extend['dependConflict'])) { + foreach ($depends as $fKey => $fItem) { + foreach ($fItem as $cKey => $cItem) { + if (isset($extend['dependConflict'][$fKey][$cKey])) { + if ($extend['dependConflict'][$fKey][$cKey] == 'discard') { + unset($depends[$fKey][$cKey]); + } + } + } + } + } + } + + // 如果有依赖更新,增加要备份的文件 + if ($depends) { + foreach ($depends as $key => $item) { + if (!$item) { + continue; + } + if ($key == 'require' || $key == 'require-dev') { + $coverFiles[] = 'composer.json'; + continue; + } + if ($key == 'dependencies' || $key == 'devDependencies') { + $coverFiles[] = 'web' . DIRECTORY_SEPARATOR . 'package.json'; + } + if ($key == 'nuxtDependencies' || $key == 'nuxtDevDependencies') { + $coverFiles[] = 'web-nuxt' . DIRECTORY_SEPARATOR . 'package.json'; + } + } + } + + // 备份将被覆盖的文件 + if ($coverFiles) { + $backupsZip = $trigger == 'install' ? $this->backupsDir . $this->uid . '-install.zip' : $this->backupsDir . $this->uid . '-cover-' . date('YmdHis') . '.zip'; + Filesystem::zip($coverFiles, $backupsZip); + } + + if ($depends) { + $npm = false; + $composer = false; + $nuxtNpm = false; + + // composer config 更新 + $composerConfig = Server::getConfig($this->modulesDir, 'composerConfig'); + if ($composerConfig) { + $serverDep->setComposerConfig($composerConfig); + } + + foreach ($depends as $key => $item) { + if (!$item) { + continue; + } + if ($key == 'require') { + $composer = true; + $serverDep->addDepends($item, false, true); + } elseif ($key == 'require-dev') { + $composer = true; + $serverDep->addDepends($item, true, true); + } elseif ($key == 'dependencies') { + $npm = true; + $webDep->addDepends($item, false, true); + } elseif ($key == 'devDependencies') { + $npm = true; + $webDep->addDepends($item, true, true); + } elseif ($key == 'nuxtDependencies') { + $nuxtNpm = true; + $webNuxtDep->addDepends($item, false, true); + } elseif ($key == 'nuxtDevDependencies') { + $nuxtNpm = true; + $webNuxtDep->addDepends($item, true, true); + } + } + if ($npm) { + $info['npm_dependent_wait_install'] = 1; + $info['state'] = self::DEPENDENT_WAIT_INSTALL; + } + if ($composer) { + $info['composer_dependent_wait_install'] = 1; + $info['state'] = self::DEPENDENT_WAIT_INSTALL; + } + if ($nuxtNpm) { + $info['nuxt_npm_dependent_wait_install'] = 1; + $info['state'] = self::DEPENDENT_WAIT_INSTALL; + } + if ($info['state'] != self::DEPENDENT_WAIT_INSTALL) { + // 无冲突 + $this->setInfo([ + 'state' => self::INSTALLED, + ]); + } else { + $this->setInfo([], $info); + } + } else { + // 无冲突 + $this->setInfo([ + 'state' => self::INSTALLED, + ]); + } + + // 复制文件 + $overwriteDir = Server::getOverwriteDir(); + foreach ($overwriteDir as $dirItem) { + $baseDir = $this->modulesDir . $dirItem; + $destDir = root_path() . $dirItem; + if (!is_dir($baseDir)) { + continue; + } + foreach ( + new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($baseDir, FilesystemIterator::SKIP_DOTS), + RecursiveIteratorIterator::SELF_FIRST + ) as $item + ) { + $destDirItem = Filesystem::fsFit($destDir . DIRECTORY_SEPARATOR . str_replace($baseDir, '', $item->getPathname())); + if ($item->isDir()) { + Filesystem::mkdir($destDirItem); + } elseif (!in_array(str_replace(root_path(), '', $destDirItem), $discardFiles)) { + Filesystem::mkdir(dirname($destDirItem)); + copy($item, $destDirItem); + } + } + // 纯净模式 + if (Config::get('buildadmin.module_pure_install')) { + Filesystem::delDir($baseDir); + } + } + return true; + } + + /** + * 依赖升级处理 + * @throws Throwable + */ + public function dependUpdateHandle(): void + { + $info = $this->getInfo(); + if ($info['state'] == self::DEPENDENT_WAIT_INSTALL) { + $waitInstall = []; + if (isset($info['composer_dependent_wait_install'])) { + $waitInstall[] = 'composer_dependent_wait_install'; + } + if (isset($info['npm_dependent_wait_install'])) { + $waitInstall[] = 'npm_dependent_wait_install'; + } + if (isset($info['nuxt_npm_dependent_wait_install'])) { + $waitInstall[] = 'nuxt_npm_dependent_wait_install'; + } + if ($waitInstall) { + throw new Exception('dependent wait install', -2, [ + 'uid' => $this->uid, + 'state' => self::DEPENDENT_WAIT_INSTALL, + 'wait_install' => $waitInstall, + ]); + } else { + $this->setInfo([ + 'state' => self::INSTALLED, + ]); + } + } + } + + /** + * 依赖安装完成标记 + * @throws Throwable + */ + public function dependentInstallComplete(string $type): void + { + $info = $this->getInfo(); + if ($info['state'] == self::DEPENDENT_WAIT_INSTALL) { + if ($type == 'npm') { + unset($info['npm_dependent_wait_install']); + } + if ($type == 'nuxt_npm') { + unset($info['nuxt_npm_dependent_wait_install']); + } + if ($type == 'composer') { + unset($info['composer_dependent_wait_install']); + } + if ($type == 'all') { + unset($info['npm_dependent_wait_install'], $info['composer_dependent_wait_install'], $info['nuxt_npm_dependent_wait_install']); + } + if (!isset($info['npm_dependent_wait_install']) && !isset($info['composer_dependent_wait_install']) && !isset($info['nuxt_npm_dependent_wait_install'])) { + $info['state'] = self::INSTALLED; + } + $this->setInfo([], $info); + } + } + + /** + * 禁用依赖检查 + * @throws Throwable + */ + public function disableDependCheck(): array + { + // 读取模块所有依赖 + $depend = Server::getDepend($this->modulesDir); + if (!$depend) { + return []; + } + + // 读取所有依赖中,系统上已经安装的依赖 + $serverDep = new Depends(root_path() . 'composer.json', 'composer'); + $webDep = new Depends(root_path() . 'web' . DIRECTORY_SEPARATOR . 'package.json'); + $webNuxtDep = new Depends(root_path() . 'web-nuxt' . DIRECTORY_SEPARATOR . 'package.json'); + foreach ($depend as $key => $depends) { + $dev = !(stripos($key, 'dev') === false); + if ($key == 'require' || $key == 'require-dev') { + foreach ($depends as $dependKey => $dependItem) { + if (!$serverDep->hasDepend($dependKey, $dev)) { + unset($depends[$dependKey]); + } + } + $depend[$key] = $depends; + } elseif ($key == 'dependencies' || $key == 'devDependencies') { + foreach ($depends as $dependKey => $dependItem) { + if (!$webDep->hasDepend($dependKey, $dev)) { + unset($depends[$dependKey]); + } + } + $depend[$key] = $depends; + } elseif ($key == 'nuxtDependencies' || $key == 'nuxtDevDependencies') { + foreach ($depends as $dependKey => $dependItem) { + if (!$webNuxtDep->hasDepend($dependKey, $dev)) { + unset($depends[$dependKey]); + } + } + $depend[$key] = $depends; + } + } + return $depend; + } + + /** + * 检查包是否完整 + * @throws Throwable + */ + public function checkPackage(): bool + { + if (!is_dir($this->modulesDir)) { + throw new Exception('Module package file does not exist'); + } + $info = $this->getInfo(); + $infoKeys = ['uid', 'title', 'intro', 'author', 'version', 'state']; + foreach ($infoKeys as $value) { + if (!array_key_exists($value, $info)) { + Filesystem::delDir($this->modulesDir); + throw new Exception('Basic configuration of the Module is incomplete'); + } + } + return true; + } + + /** + * 获取模块基本信息 + */ + public function getInfo(): array + { + return Server::getIni($this->modulesDir); + } + + /** + * 设置模块基本信息 + * @throws Throwable + */ + public function setInfo(array $kv = [], array $arr = []): bool + { + if ($kv) { + $info = $this->getInfo(); + foreach ($kv as $k => $v) { + $info[$k] = $v; + } + return Server::setIni($this->modulesDir, $info); + } elseif ($arr) { + return Server::setIni($this->modulesDir, $arr); + } + throw new Exception('Parameter error'); + } + + + /** + * 检查多维数组是否全部为空 + */ + public static function isEmptyArray($arr): bool + { + foreach ($arr as $item) { + if (is_array($item)) { + $empty = self::isEmptyArray($item); + if (!$empty) return false; + } elseif ($item) { + return false; + } + } + return true; + } + + public function setModuleUid(string $uid): static + { + $this->uid = $uid; + $this->modulesDir = $this->installDir . $uid . DIRECTORY_SEPARATOR; + return $this; + } +} \ No newline at end of file diff --git a/app/admin/library/module/Server.php b/app/admin/library/module/Server.php new file mode 100644 index 0000000..d8e7106 --- /dev/null +++ b/app/admin/library/module/Server.php @@ -0,0 +1,590 @@ +get(self::$apiBaseUrl . 'download', ['query' => array_merge(['uid' => $uid, 'server' => 1], $extend)]); + $body = $response->getBody(); + $content = $body->getContents(); + if ($content == '' || stripos($content, '系统发生错误') !== false) { + throw new Exception('package download failed', 0); + } + if (str_starts_with($content, '{')) { + $json = (array)json_decode($content, true); + throw new Exception($json['msg'], $json['code'], $json['data'] ?? []); + } + } catch (TransferException $e) { + throw new Exception('package download failed', 0, ['msg' => $e->getMessage()]); + } + + if ($write = fopen($tmpFile, 'w')) { + fwrite($write, $content); + fclose($write); + return $tmpFile; + } + throw new Exception("No permission to write temporary files"); + } + + /** + * 安装预检 + * @throws Throwable + */ + public static function installPreCheck(array $query = []): bool + { + try { + $client = get_ba_client(); + $response = $client->get(self::$apiBaseUrl . 'preCheck', ['query' => $query]); + $body = $response->getBody(); + $statusCode = $response->getStatusCode(); + $content = $body->getContents(); + if ($content == '' || stripos($content, '系统发生错误') !== false || $statusCode != 200) { + return true; + } + if (str_starts_with($content, '{')) { + $json = json_decode($content, true); + if ($json && $json['code'] == 0) { + throw new Exception($json['msg'], $json['code'], $json['data'] ?? []); + } + } + } catch (TransferException $e) { + throw new Exception('package check failed', 0, ['msg' => $e->getMessage()]); + } + return true; + } + + public static function getConfig(string $dir, $key = ''): array + { + $configFile = $dir . 'config.json'; + if (!is_dir($dir) || !is_file($configFile)) { + return []; + } + $configContent = @file_get_contents($configFile); + $configContent = json_decode($configContent, true); + if (!$configContent) { + return []; + } + if ($key) { + return $configContent[$key] ?? []; + } + return $configContent; + } + + public static function getDepend(string $dir, string $key = ''): array + { + if ($key) { + return self::getConfig($dir, $key); + } + $configContent = self::getConfig($dir); + $dependKey = ['require', 'require-dev', 'dependencies', 'devDependencies', 'nuxtDependencies', 'nuxtDevDependencies']; + $dependArray = []; + foreach ($dependKey as $item) { + if (array_key_exists($item, $configContent) && $configContent[$item]) { + $dependArray[$item] = $configContent[$item]; + } + } + return $dependArray; + } + + /** + * 依赖冲突检查 + * @throws Throwable + */ + public static function dependConflictCheck(string $dir): array + { + $depend = self::getDepend($dir); + $serverDep = new Depends(root_path() . 'composer.json', 'composer'); + $webDep = new Depends(root_path() . 'web' . DIRECTORY_SEPARATOR . 'package.json'); + $webNuxtDep = new Depends(root_path() . 'web-nuxt' . DIRECTORY_SEPARATOR . 'package.json'); + $sysDepend = [ + 'require' => $serverDep->getDepends(), + 'require-dev' => $serverDep->getDepends(true), + 'dependencies' => $webDep->getDepends(), + 'devDependencies' => $webDep->getDepends(true), + 'nuxtDependencies' => $webNuxtDep->getDepends(), + 'nuxtDevDependencies' => $webNuxtDep->getDepends(true), + ]; + + $conflict = []; + foreach ($depend as $key => $item) { + $conflict[$key] = array_uintersect_assoc($item, $sysDepend[$key], function ($a, $b) { + return $a == $b ? -1 : 0; + }); + } + return $conflict; + } + + /** + * 获取模块[冲突]文件列表 + * @param string $dir 模块目录 + * @param bool $onlyConflict 是否只获取冲突文件 + */ + public static function getFileList(string $dir, bool $onlyConflict = false): array + { + if (!is_dir($dir)) { + return []; + } + + $fileList = []; + $overwriteDir = self::getOverwriteDir(); + $moduleFileList = self::getRuntime($dir, 'files'); + + if ($moduleFileList) { + // 有冲突的文件 + if ($onlyConflict) { + // 排除的文件 + $excludeFile = [ + 'info.ini' + ]; + foreach ($moduleFileList as $file) { + // 如果是要安装到项目的文件,从项目根目录开始,如果不是,从模块根目录开始 + $path = Filesystem::fsFit(str_replace($dir, '', $file['path'])); + $paths = explode(DIRECTORY_SEPARATOR, $path); + $overwriteFile = in_array($paths[0], $overwriteDir) ? root_path() . $path : $dir . $path; + if (is_file($overwriteFile) && !in_array($path, $excludeFile) && (filesize($overwriteFile) != $file['size'] || md5_file($overwriteFile) != $file['md5'])) { + $fileList[] = $path; + } + } + } else { + // 要安装的文件 + foreach ($overwriteDir as $item) { + $baseDir = $dir . $item; + foreach ($moduleFileList as $file) { + if (!str_starts_with($file['path'], $baseDir)) continue; + $fileList[] = Filesystem::fsFit(str_replace($dir, '', $file['path'])); + } + } + } + return $fileList; + } + + foreach ($overwriteDir as $item) { + $baseDir = $dir . $item; + if (!is_dir($baseDir)) { + continue; + } + $files = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($baseDir, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST + ); + foreach ($files as $file) { + if ($file->isFile()) { + $filePath = $file->getPathName(); + $path = str_replace($dir, '', $filePath); + $path = str_replace(['/', '\\'], DIRECTORY_SEPARATOR, $path); + + if ($onlyConflict) { + $overwriteFile = root_path() . $path; + if (is_file($overwriteFile) && (filesize($overwriteFile) != filesize($filePath) || md5_file($overwriteFile) != md5_file($filePath))) { + $fileList[] = $path; + } + } else { + $fileList[] = $path; + } + } + } + } + return $fileList; + } + + public static function getOverwriteDir(): array + { + return [ + 'app', + 'config', + 'database', + 'extend', + 'modules', + 'public', + 'vendor', + 'web', + 'web-nuxt', + ]; + } + + public static function importSql(string $dir): bool + { + $sqlFile = $dir . 'install.sql'; + $tempLine = ''; + if (is_file($sqlFile)) { + $lines = file($sqlFile); + foreach ($lines as $line) { + if (str_starts_with($line, '--') || $line == '' || str_starts_with($line, '/*')) { + continue; + } + + $tempLine .= $line; + if (str_ends_with(trim($line), ';')) { + $tempLine = str_ireplace('__PREFIX__', Config::get('database.connections.mysql.prefix'), $tempLine); + $tempLine = str_ireplace('INSERT INTO ', 'INSERT IGNORE INTO ', $tempLine); + try { + Db::execute($tempLine); + } catch (PDOException) { + // $e->getMessage(); + } + $tempLine = ''; + } + } + } + return true; + } + + public static function installedList(string $dir): array + { + if (!is_dir($dir)) { + return []; + } + $installedDir = scandir($dir); + $installedList = []; + foreach ($installedDir as $item) { + if ($item === '.' or $item === '..' || is_file($dir . $item)) { + continue; + } + $tempDir = $dir . $item . DIRECTORY_SEPARATOR; + if (!is_dir($tempDir)) { + continue; + } + $info = self::getIni($tempDir); + if (!isset($info['uid'])) { + continue; + } + $installedList[] = $info; + } + return $installedList; + } + + public static function getInstalledIds(string $dir): array + { + $installedIds = []; + $installed = self::installedList($dir); + foreach ($installed as $item) { + $installedIds[] = $item['uid']; + } + return $installedIds; + } + + /** + * 获取模块ini + * @param string $dir 模块目录路径 + */ + public static function getIni(string $dir): array + { + $infoFile = $dir . 'info.ini'; + $info = []; + if (is_file($infoFile)) { + $info = parse_ini_file($infoFile, true, INI_SCANNER_TYPED) ?: []; + if (!$info) return []; + } + return $info; + } + + /** + * 设置模块ini + * @param string $dir 模块目录路径 + * @param array $arr 新的ini数据 + * @return bool + * @throws Throwable + */ + public static function setIni(string $dir, array $arr): bool + { + $infoFile = $dir . 'info.ini'; + $ini = []; + foreach ($arr as $key => $val) { + if (is_array($val)) { + $ini[] = "[$key]"; + foreach ($val as $ikey => $ival) { + $ini[] = "$ikey = $ival"; + } + } else { + $ini[] = "$key = $val"; + } + } + if (!file_put_contents($infoFile, implode("\n", $ini) . "\n", LOCK_EX)) { + throw new Exception("Configuration file has no write permission"); + } + return true; + } + + public static function getClass(string $uid, string $type = 'event', ?string $class = null): string + { + $name = parse_name($uid); + if (!is_null($class) && strpos($class, '.')) { + $class = explode('.', $class); + $class[count($class) - 1] = parse_name(end($class), 1); + $class = implode('\\', $class); + } else { + $class = parse_name(is_null($class) ? $name : $class, 1); + } + $namespace = match ($type) { + 'controller' => '\\modules\\' . $name . '\\controller\\' . $class, + default => '\\modules\\' . $name . '\\' . $class, + }; + return class_exists($namespace) ? $namespace : ''; + } + + public static function execEvent(string $uid, string $event, array $params = []): void + { + $eventClass = self::getClass($uid); + if (class_exists($eventClass)) { + $handle = new $eventClass(); + if (method_exists($eventClass, $event)) { + $handle->$event($params); + } + } + } + + /** + * 分析 WebBootstrap 代码 + */ + public static function analysisWebBootstrap(string $uid, string $dir): array + { + $bootstrapFile = $dir . 'webBootstrap.stub'; + if (!file_exists($bootstrapFile)) return []; + $bootstrapContent = file_get_contents($bootstrapFile); + $pregArr = [ + 'mainTsImport' => '/#main.ts import code start#([\s\S]*?)#main.ts import code end#/i', + 'mainTsStart' => '/#main.ts start code start#([\s\S]*?)#main.ts start code end#/i', + 'appVueImport' => '/#App.vue import code start#([\s\S]*?)#App.vue import code end#/i', + 'appVueOnMounted' => '/#App.vue onMounted code start#([\s\S]*?)#App.vue onMounted code end#/i', + 'nuxtAppVueImport' => '/#web-nuxt\/app.vue import code start#([\s\S]*?)#web-nuxt\/app.vue import code end#/i', + 'nuxtAppVueStart' => '/#web-nuxt\/app.vue start code start#([\s\S]*?)#web-nuxt\/app.vue start code end#/i', + ]; + $codeStrArr = []; + foreach ($pregArr as $key => $item) { + preg_match($item, $bootstrapContent, $matches); + if (isset($matches[1]) && $matches[1]) { + $mainImportCodeArr = array_filter(preg_split('/\r\n|\r|\n/', $matches[1])); + if ($mainImportCodeArr) { + $codeStrArr[$key] = "\n"; + if (count($mainImportCodeArr) == 1) { + foreach ($mainImportCodeArr as $codeItem) { + $codeStrArr[$key] .= $codeItem . self::buildMarkStr('module-line-mark', $uid, $key); + } + } else { + $codeStrArr[$key] .= self::buildMarkStr('module-multi-line-mark-start', $uid, $key); + foreach ($mainImportCodeArr as $codeItem) { + $codeStrArr[$key] .= $codeItem . "\n"; + } + $codeStrArr[$key] .= self::buildMarkStr('module-multi-line-mark-end', $uid, $key); + } + } + } + unset($matches); + } + + return $codeStrArr; + } + + /** + * 安装 WebBootstrap + */ + public static function installWebBootstrap(string $uid, string $dir): void + { + $bootstrapCode = self::analysisWebBootstrap($uid, $dir); + if (!$bootstrapCode) { + return; + } + + $webPath = root_path() . 'web' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR; + $webNuxtPath = root_path() . 'web-nuxt' . DIRECTORY_SEPARATOR; + $filePaths = [ + 'mainTsImport' => $webPath . 'main.ts', + 'mainTsStart' => $webPath . 'main.ts', + 'appVueImport' => $webPath . 'App.vue', + 'appVueOnMounted' => $webPath . 'App.vue', + 'nuxtAppVueImport' => $webNuxtPath . 'app.vue', + 'nuxtAppVueStart' => $webNuxtPath . 'app.vue', + ]; + + $marks = [ + 'mainTsImport' => self::buildMarkStr('import-root-mark'), + 'mainTsStart' => self::buildMarkStr('start-root-mark'), + 'appVueImport' => self::buildMarkStr('import-root-mark'), + 'appVueOnMounted' => self::buildMarkStr('onMounted-root-mark'), + 'nuxtAppVueImport' => self::buildMarkStr('import-root-mark'), + 'nuxtAppVueStart' => self::buildMarkStr('start-root-mark'), + ]; + + foreach ($bootstrapCode as $key => $item) { + if ($item && isset($marks[$key])) { + $content = file_get_contents($filePaths[$key]); + $markPos = stripos($content, $marks[$key]); + if ($markPos && strripos($content, self::buildMarkStr('module-line-mark', $uid, $key)) === false && strripos($content, self::buildMarkStr('module-multi-line-mark-start', $uid, $key)) === false) { + $content = substr_replace($content, $item, $markPos + strlen($marks[$key]), 0); + file_put_contents($filePaths[$key], $content); + } + } + } + } + + /** + * 卸载 WebBootstrap + */ + public static function uninstallWebBootstrap(string $uid): void + { + $webPath = root_path() . 'web' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR; + $webNuxtPath = root_path() . 'web-nuxt' . DIRECTORY_SEPARATOR; + $filePaths = [ + 'mainTsImport' => $webPath . 'main.ts', + 'mainTsStart' => $webPath . 'main.ts', + 'appVueImport' => $webPath . 'App.vue', + 'appVueOnMounted' => $webPath . 'App.vue', + 'nuxtAppVueImport' => $webNuxtPath . 'app.vue', + 'nuxtAppVueStart' => $webNuxtPath . 'app.vue', + ]; + + $marksKey = [ + 'mainTsImport', + 'mainTsStart', + 'appVueImport', + 'appVueOnMounted', + 'nuxtAppVueImport', + 'nuxtAppVueStart', + ]; + + foreach ($marksKey as $item) { + if (!is_file($filePaths[$item])) { + continue; + } + $content = file_get_contents($filePaths[$item]); + $moduleLineMark = self::buildMarkStr('module-line-mark', $uid, $item); + $moduleMultiLineMarkStart = self::buildMarkStr('module-multi-line-mark-start', $uid, $item); + $moduleMultiLineMarkEnd = self::buildMarkStr('module-multi-line-mark-end', $uid, $item); + + // 寻找标记,找到则将其中内容删除 + $moduleLineMarkPos = strripos($content, $moduleLineMark); + if ($moduleLineMarkPos !== false) { + $delStartTemp = explode($moduleLineMark, $content); + $delStartPos = strripos(rtrim($delStartTemp[0], "\n"), "\n"); + $delEndPos = stripos($content, "\n", $moduleLineMarkPos); + $content = substr_replace($content, '', $delStartPos, $delEndPos - $delStartPos); + } + + $moduleMultiLineMarkStartPos = stripos($content, $moduleMultiLineMarkStart); + if ($moduleMultiLineMarkStartPos !== false) { + $moduleMultiLineMarkStartPos--; + $moduleMultiLineMarkEndPos = stripos($content, $moduleMultiLineMarkEnd); + $delLang = ($moduleMultiLineMarkEndPos + strlen($moduleMultiLineMarkEnd)) - $moduleMultiLineMarkStartPos; + $content = substr_replace($content, '', $moduleMultiLineMarkStartPos, $delLang); + } + + if ($moduleLineMarkPos || $moduleMultiLineMarkStartPos) { + file_put_contents($filePaths[$item], $content); + } + } + } + + /** + * 构建 WebBootstrap 需要的各种标记字符串 + * @param string $type + * @param string $uid 模块UID + * @param string $extend 扩展数据 + * @return string + */ + public static function buildMarkStr(string $type, string $uid = '', string $extend = ''): string + { + $nonTabKeys = ['mti', 'avi', 'navi', 'navs']; + $extend = match ($extend) { + 'mainTsImport' => 'mti', + 'mainTsStart' => 'mts', + 'appVueImport' => 'avi', + 'appVueOnMounted' => 'avo', + 'nuxtAppVueImport' => 'navi', + 'nuxtAppVueStart' => 'navs', + default => '', + }; + return match ($type) { + 'import-root-mark' => '// modules import mark, Please do not remove.', + 'start-root-mark' => '// modules start mark, Please do not remove.', + 'onMounted-root-mark' => '// Modules onMounted mark, Please do not remove.', + 'module-line-mark' => ' // Code from module \'' . $uid . "'" . ($extend ? "($extend)" : ''), + 'module-multi-line-mark-start' => (in_array($extend, $nonTabKeys) ? '' : Helper::tab()) . "// Code from module '$uid' start" . ($extend ? "($extend)" : '') . "\n", + 'module-multi-line-mark-end' => (in_array($extend, $nonTabKeys) ? '' : Helper::tab()) . "// Code from module '$uid' end", + default => '', + }; + } + + public static function getNuxtVersion() + { + $nuxtPackageJsonPath = Filesystem::fsFit(root_path() . 'web-nuxt/package.json'); + if (is_file($nuxtPackageJsonPath)) { + $nuxtPackageJson = file_get_contents($nuxtPackageJsonPath); + $nuxtPackageJson = json_decode($nuxtPackageJson, true); + if ($nuxtPackageJson && isset($nuxtPackageJson['version'])) { + return $nuxtPackageJson['version']; + } + } + return false; + } + + /** + * 创建 .runtime + */ + public static function createRuntime(string $dir): void + { + $runtimeFilePath = $dir . '.runtime'; + $files = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::LEAVES_ONLY + ); + $filePaths = []; + foreach ($files as $file) { + if (!$file->isDir()) { + $pathName = $file->getPathName(); + if ($pathName == $runtimeFilePath) continue; + $filePaths[] = [ + 'path' => Filesystem::fsFit($pathName), + 'size' => filesize($pathName), + 'md5' => md5_file($pathName), + ]; + } + } + + file_put_contents($runtimeFilePath, json_encode([ + 'files' => $filePaths, + 'pure' => Config::get('buildadmin.module_pure_install'), + ])); + } + + /** + * 读取 .runtime + */ + public static function getRuntime(string $dir, string $key = ''): mixed + { + $runtimeFilePath = $dir . '.runtime'; + $runtimeContent = @file_get_contents($runtimeFilePath); + $runtimeContentArr = json_decode($runtimeContent, true); + if (!$runtimeContentArr) return []; + + if ($key) { + return $runtimeContentArr[$key] ?? []; + } else { + return $runtimeContentArr; + } + } +} diff --git a/app/admin/library/stubs/backendEntrance.stub b/app/admin/library/stubs/backendEntrance.stub new file mode 100644 index 0000000..7b4b74a --- /dev/null +++ b/app/admin/library/stubs/backendEntrance.stub @@ -0,0 +1,24 @@ + +// +---------------------------------------------------------------------- + +// [ 应用入口文件 ] +namespace think; + +require __DIR__ . '/../vendor/autoload.php'; + +// 执行HTTP应用并响应 +$http = (new App())->http; + +$response = $http->name('admin')->run(); + +$response->send(); + +$http->end($response); diff --git a/app/admin/library/traits/Backend.php b/app/admin/library/traits/Backend.php new file mode 100644 index 0000000..06c6fbb --- /dev/null +++ b/app/admin/library/traits/Backend.php @@ -0,0 +1,301 @@ +preExcludeFields)) { + $this->preExcludeFields = explode(',', (string)$this->preExcludeFields); + } + + foreach ($this->preExcludeFields as $field) { + if (array_key_exists($field, $params)) { + unset($params[$field]); + } + } + return $params; + } + + /** + * 查看 + * @throws Throwable + */ + public function index(): void + { + if ($this->request->param('select')) { + $this->select(); + } + + list($where, $alias, $limit, $order) = $this->queryBuilder(); + $res = $this->model + ->field($this->indexField) + ->withJoin($this->withJoinTable, $this->withJoinType) + ->alias($alias) + ->where($where) + ->order($order) + ->paginate($limit); + + $this->success('', [ + 'list' => $res->items(), + 'total' => $res->total(), + 'remark' => get_route_remark(), + ]); + } + + /** + * 添加 + */ + public function add(): void + { + if ($this->request->isPost()) { + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + $data = $this->excludeFields($data); + if ($this->dataLimit && $this->dataLimitFieldAutoFill) { + $data[$this->dataLimitField] = $this->auth->id; + } + + $result = false; + $this->model->startTrans(); + try { + // 模型验证 + if ($this->modelValidate) { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + if (class_exists($validate)) { + $validate = new $validate(); + if ($this->modelSceneValidate) $validate->scene('add'); + $validate->check($data); + } + } + $result = $this->model->save($data); + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('Added successfully')); + } else { + $this->error(__('No rows were added')); + } + } + + $this->error(__('Parameter error')); + } + + /** + * 编辑 + * @throws Throwable + */ + public function edit(): void + { + $pk = $this->model->getPk(); + $id = $this->request->param($pk); + $row = $this->model->find($id); + if (!$row) { + $this->error(__('Record not found')); + } + + $dataLimitAdminIds = $this->getDataLimitAdminIds(); + if ($dataLimitAdminIds && !in_array($row[$this->dataLimitField], $dataLimitAdminIds)) { + $this->error(__('You have no permission')); + } + + if ($this->request->isPost()) { + $data = $this->request->post(); + if (!$data) { + $this->error(__('Parameter %s can not be empty', [''])); + } + + $data = $this->excludeFields($data); + $result = false; + $this->model->startTrans(); + try { + // 模型验证 + if ($this->modelValidate) { + $validate = str_replace("\\model\\", "\\validate\\", get_class($this->model)); + if (class_exists($validate)) { + $validate = new $validate(); + if ($this->modelSceneValidate) $validate->scene('edit'); + $data[$pk] = $row[$pk]; + $validate->check($data); + } + } + $result = $row->save($data); + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($result !== false) { + $this->success(__('Update successful')); + } else { + $this->error(__('No rows updated')); + } + } + + $this->success('', [ + 'row' => $row + ]); + } + + /** + * 删除 + * @throws Throwable + */ + public function del(): void + { + $where = []; + $dataLimitAdminIds = $this->getDataLimitAdminIds(); + if ($dataLimitAdminIds) { + $where[] = [$this->dataLimitField, 'in', $dataLimitAdminIds]; + } + + $ids = $this->request->param('ids/a', []); + $where[] = [$this->model->getPk(), 'in', $ids]; + $data = $this->model->where($where)->select(); + + $count = 0; + $this->model->startTrans(); + try { + foreach ($data as $v) { + $count += $v->delete(); + } + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->error($e->getMessage()); + } + if ($count) { + $this->success(__('Deleted successfully')); + } else { + $this->error(__('No rows were deleted')); + } + } + + /** + * 排序 - 增量重排法 + * @throws Throwable + */ + public function sortable(): void + { + $pk = $this->model->getPk(); + $move = $this->request->param('move'); + $target = $this->request->param('target'); + $order = $this->request->param("order/s") ?: $this->defaultSortField; + $direction = $this->request->param('direction'); + + $dataLimitWhere = []; + $dataLimitAdminIds = $this->getDataLimitAdminIds(); + if ($dataLimitAdminIds) { + $dataLimitWhere[] = [$this->dataLimitField, 'in', $dataLimitAdminIds]; + } + + $moveRow = $this->model->where($dataLimitWhere)->find($move); + $targetRow = $this->model->where($dataLimitWhere)->find($target); + + if ($move == $target || !$moveRow || !$targetRow || !$direction) { + $this->error(__('Record not found')); + } + + // 当前是否以权重字段排序(只检查当前排序和默认排序字段,不检查有序保证字段) + if ($order && is_string($order)) { + $order = explode(',', $order); + $order = [$order[0] => $order[1] ?? 'asc']; + } + if (!array_key_exists($this->weighField, $order)) { + $this->error(__('Please use the %s field to sort before operating', [$this->weighField])); + } + + // 开始增量重排 + $order = $this->queryOrderBuilder(); + $weigh = $targetRow[$this->weighField]; + + // 波及行的权重值向上增加还是向下减少 + if ($order[$this->weighField] == 'desc') { + $updateMethod = $direction == 'up' ? 'dec' : 'inc'; + } else { + $updateMethod = $direction == 'up' ? 'inc' : 'dec'; + } + + // 与目标行权重相同的行 + $weighRowIds = $this->model + ->where($dataLimitWhere) + ->where($this->weighField, $weigh) + ->order($order) + ->column($pk); + $weighRowsCount = count($weighRowIds); + + // 单个 SQL 查询中完成大于目标权重行的修改 + $this->model->where($dataLimitWhere) + ->where($this->weighField, $updateMethod == 'dec' ? '<' : '>', $weigh) + ->whereNotIn($pk, [$moveRow->$pk]) + ->$updateMethod($this->weighField, $weighRowsCount) + ->save(); + + // 遍历与目标行权重相同的行,每出现一行权重值将额外 +1,保证权重相同行的顺序位置不变 + if ($direction == 'down') { + $weighRowIds = array_reverse($weighRowIds); + } + + $moveComplete = 0; + $weighRowIds = implode(',', $weighRowIds); + $weighRows = $this->model->where($dataLimitWhere) + ->where($pk, 'in', $weighRowIds) + ->orderRaw("field($pk,$weighRowIds)") + ->select(); + + // 权重相等行 + foreach ($weighRows as $key => $weighRow) { + // 跳过当前拖动行(相等权重数据之间的拖动时,被拖动行会出现在 $weighRows 内) + if ($moveRow[$pk] == $weighRow[$pk]) { + continue; + } + + if ($updateMethod == 'dec') { + $rowWeighVal = $weighRow[$this->weighField] - $key; + } else { + $rowWeighVal = $weighRow[$this->weighField] + $key; + } + + // 找到了目标行 + if ($weighRow[$pk] == $targetRow[$pk]) { + $moveComplete = 1; + $moveRow[$this->weighField] = $rowWeighVal; + $moveRow->save(); + } + + $rowWeighVal = $updateMethod == 'dec' ? $rowWeighVal - $moveComplete : $rowWeighVal + $moveComplete; + $weighRow[$this->weighField] = $rowWeighVal; + $weighRow->save(); + } + + $this->success(); + } + + /** + * 加载为select(远程下拉选择框)数据,默认还是走$this->index()方法 + * 必要时请在对应控制器类中重写 + */ + public function select(): void + { + + } +} \ No newline at end of file diff --git a/app/admin/middleware.php b/app/admin/middleware.php new file mode 100644 index 0000000..b89787e --- /dev/null +++ b/app/admin/middleware.php @@ -0,0 +1,6 @@ +where('uid', $row['id']) + ->column('group_id'); + } + + public function getGroupNameArrAttr($value, $row): array + { + $groupAccess = Db::name('admin_group_access') + ->where('uid', $row['id']) + ->column('group_id'); + return AdminGroup::whereIn('id', $groupAccess)->column('name'); + } + + public function getAvatarAttr($value): string + { + return full_url($value, false, config('buildadmin.default_avatar')); + } + + public function setAvatarAttr($value): string + { + return $value == full_url('', false, config('buildadmin.default_avatar')) ? '' : $value; + } + + /** + * 重置用户密码 + * @param int|string $uid 管理员ID + * @param string $newPassword 新密码 + * @return int|Admin + */ + public function resetPassword(int|string $uid, string $newPassword): int|Admin + { + return $this->where(['id' => $uid])->update(['password' => hash_password($newPassword), 'salt' => '']); + } +} \ No newline at end of file diff --git a/app/admin/model/AdminGroup.php b/app/admin/model/AdminGroup.php new file mode 100644 index 0000000..15818b8 --- /dev/null +++ b/app/admin/model/AdminGroup.php @@ -0,0 +1,13 @@ +adminLog)) { + $request->adminLog = new static(); + } + return $request->adminLog; + } + + /** + * 设置标题 + * @param string $title + */ + public function setTitle(string $title): void + { + $this->title = $title; + } + + /** + * 设置日志内容 + * @param string|array $data + */ + public function setData(string|array $data): void + { + $this->data = $data; + } + + /** + * 设置忽略的链接正则列表 + * @param array|string $regex + */ + public function setUrlIgnoreRegex(array|string $regex = []): void + { + $regex = is_array($regex) ? $regex : [$regex]; + $this->urlIgnoreRegex = array_merge($this->urlIgnoreRegex, $regex); + } + + /** + * 设置需要进行数据脱敏的正则列表 + * @param array|string $regex + */ + public function setDesensitizationRegex(array|string $regex = []): void + { + $regex = is_array($regex) ? $regex : [$regex]; + $this->desensitizationRegex = array_merge($this->desensitizationRegex, $regex); + } + + /** + * 数据脱敏(只数组,根据数组 key 脱敏) + * @param array|string $data + * @return array|string + */ + protected function desensitization(array|string $data): array|string + { + if (!is_array($data) || !$this->desensitizationRegex) { + return $data; + } + foreach ($data as $index => &$item) { + foreach ($this->desensitizationRegex as $reg) { + if (preg_match($reg, $index)) { + $item = "***"; + } elseif (is_array($item)) { + $item = $this->desensitization($item); + } + } + } + return $data; + } + + /** + * 写入日志 + * @param string $title + * @param string|array|null $data + * @throws Throwable + */ + public function record(string $title = '', string|array|null $data = null): void + { + $auth = Auth::instance(); + $adminId = $auth->isLogin() ? $auth->id : 0; + $username = $auth->isLogin() ? $auth->username : request()->param('username', __('Unknown')); + + $controller = str_replace('.', '/', request()->controller(true)); + $action = request()->action(true); + $path = $controller . '/' . $action; + if ($this->urlIgnoreRegex) { + foreach ($this->urlIgnoreRegex as $item) { + if (preg_match($item, $path)) { + return; + } + } + } + $data = $data ?: $this->data; + if (!$data) { + $data = request()->param('', null, 'trim,strip_tags,htmlspecialchars'); + } + $data = $this->desensitization($data); + $title = $title ?: $this->title; + if (!$title) { + $controllerTitle = AdminRule::where('name', $controller)->value('title'); + $title = AdminRule::where('name', $path)->value('title'); + $title = $title ?: __('Unknown') . '(' . $action . ')'; + $title = $controllerTitle ? ($controllerTitle . '-' . $title) : $title; + } + self::create([ + 'admin_id' => $adminId, + 'username' => $username, + 'url' => substr(request()->url(), 0, 1500), + 'title' => $title, + 'data' => !is_scalar($data) ? json_encode($data) : $data, + 'ip' => request()->ip(), + 'useragent' => substr(request()->server('HTTP_USER_AGENT'), 0, 255), + ]); + } + + public function admin(): BelongsTo + { + return $this->belongsTo(Admin::class); + } +} \ No newline at end of file diff --git a/app/admin/model/AdminRule.php b/app/admin/model/AdminRule.php new file mode 100644 index 0000000..62c9fc4 --- /dev/null +++ b/app/admin/model/AdminRule.php @@ -0,0 +1,21 @@ +getData('type'), $model->needContent)) { + $model->content = null; + } else { + $model->content = json_encode(str_attr_to_array($model->getData('content'))); + } + if (is_array($model->rule)) { + $model->rule = implode(',', $model->rule); + } + if ($model->getData('extend') || $model->getData('inputExtend')) { + $extend = str_attr_to_array($model->getData('extend')); + $inputExtend = str_attr_to_array($model->getData('inputExtend')); + if ($inputExtend) $extend['baInputExtend'] = $inputExtend; + if ($extend) $model->extend = json_encode($extend); + } + $model->allow_del = 1; + } + + /** + * 写入后 + */ + public static function onAfterWrite(): void + { + // 清理配置缓存 + Cache::tag(self::$cacheTag)->clear(); + } + + public function getValueAttr($value, $row) + { + if (!isset($row['type']) || $value == '0') return $value; + if (in_array($row['type'], $this->jsonDecodeType)) { + return empty($value) ? [] : json_decode($value, true); + } elseif ($row['type'] == 'switch') { + return (bool)$value; + } elseif ($row['type'] == 'editor') { + return !$value ? '' : htmlspecialchars_decode($value); + } elseif (in_array($row['type'], ['city', 'remoteSelects'])) { + if (!$value) return []; + if (!is_array($value)) return explode(',', $value); + return $value; + } else { + return $value ?: ''; + } + } + + public function setValueAttr(mixed $value, $row): mixed + { + if (in_array($row['type'], $this->jsonDecodeType)) { + return $value ? json_encode($value) : ''; + } elseif ($row['type'] == 'switch') { + return $value ? '1' : '0'; + } elseif ($row['type'] == 'time') { + return $value ? date('H:i:s', strtotime($value)) : ''; + } elseif ($row['type'] == 'city') { + if ($value && is_array($value)) { + return implode(',', $value); + } + return $value ?: ''; + } elseif (is_array($value)) { + return implode(',', $value); + } + + return $value; + } + + public function getContentAttr($value, $row) + { + if (!isset($row['type'])) return ''; + if (in_array($row['type'], $this->needContent)) { + $arr = json_decode($value, true); + return $arr ?: []; + } else { + return ''; + } + } + + public function getExtendAttr($value) + { + if ($value) { + $arr = json_decode($value, true); + if ($arr) { + unset($arr['baInputExtend']); + return $arr; + } + } + return []; + } + + public function getInputExtendAttr($value, $row) + { + if ($row && $row['extend']) { + $arr = json_decode($row['extend'], true); + if ($arr && isset($arr['baInputExtend'])) { + return $arr['baInputExtend']; + } + } + return []; + } +} \ No newline at end of file diff --git a/app/admin/model/CrudLog.php b/app/admin/model/CrudLog.php new file mode 100644 index 0000000..ac18233 --- /dev/null +++ b/app/admin/model/CrudLog.php @@ -0,0 +1,24 @@ + 'array', + 'fields' => 'array', + ]; + +} \ No newline at end of file diff --git a/app/admin/model/DataRecycle.php b/app/admin/model/DataRecycle.php new file mode 100644 index 0000000..4770890 --- /dev/null +++ b/app/admin/model/DataRecycle.php @@ -0,0 +1,15 @@ +belongsTo(DataRecycle::class, 'recycle_id'); + } + + public function admin(): BelongsTo + { + return $this->belongsTo(Admin::class, 'admin_id'); + } +} \ No newline at end of file diff --git a/app/admin/model/SensitiveData.php b/app/admin/model/SensitiveData.php new file mode 100644 index 0000000..5bf6aeb --- /dev/null +++ b/app/admin/model/SensitiveData.php @@ -0,0 +1,19 @@ + 'array', + ]; +} \ No newline at end of file diff --git a/app/admin/model/SensitiveDataLog.php b/app/admin/model/SensitiveDataLog.php new file mode 100644 index 0000000..e6d4ecf --- /dev/null +++ b/app/admin/model/SensitiveDataLog.php @@ -0,0 +1,27 @@ +belongsTo(SensitiveData::class, 'sensitive_id'); + } + + public function admin(): BelongsTo + { + return $this->belongsTo(Admin::class, 'admin_id'); + } +} \ No newline at end of file diff --git a/app/admin/model/User.php b/app/admin/model/User.php new file mode 100644 index 0000000..6a4846d --- /dev/null +++ b/app/admin/model/User.php @@ -0,0 +1,52 @@ +belongsTo(UserGroup::class, 'group_id'); + } + + /** + * 重置用户密码 + * @param int|string $uid 用户ID + * @param string $newPassword 新密码 + * @return int|User + */ + public function resetPassword(int|string $uid, string $newPassword): int|User + { + return $this->where(['id' => $uid])->update(['password' => hash_password($newPassword), 'salt' => '']); + } +} \ No newline at end of file diff --git a/app/admin/model/UserGroup.php b/app/admin/model/UserGroup.php new file mode 100644 index 0000000..27f4168 --- /dev/null +++ b/app/admin/model/UserGroup.php @@ -0,0 +1,13 @@ +user_id)->lock(true)->find(); + if (!$user) { + throw new Exception("The user can't find it"); + } + if (!$model->memo) { + throw new Exception("Change note cannot be blank"); + } + $model->before = $user->money; + + $user->money += $model->money; + $user->save(); + + $model->after = $user->money; + } + + public static function onBeforeDelete(): bool + { + return false; + } + + public function getMoneyAttr($value): string + { + return bcdiv($value, 100, 2); + } + + public function setMoneyAttr($value): string + { + return bcmul($value, 100, 2); + } + + public function getBeforeAttr($value): string + { + return bcdiv($value, 100, 2); + } + + public function setBeforeAttr($value): string + { + return bcmul($value, 100, 2); + } + + public function getAfterAttr($value): string + { + return bcdiv($value, 100, 2); + } + + public function setAfterAttr($value): string + { + return bcmul($value, 100, 2); + } + + public function user(): BelongsTo + { + return $this->belongsTo(User::class, 'user_id'); + } +} \ No newline at end of file diff --git a/app/admin/model/UserRule.php b/app/admin/model/UserRule.php new file mode 100644 index 0000000..798c4ec --- /dev/null +++ b/app/admin/model/UserRule.php @@ -0,0 +1,26 @@ +getPk(); + $model->where($pk, $model[$pk])->update(['weigh' => $model[$pk]]); + } + + public function setComponentAttr($value) + { + if ($value) $value = str_replace('\\', '/', $value); + return $value; + } +} \ No newline at end of file diff --git a/app/admin/model/UserScoreLog.php b/app/admin/model/UserScoreLog.php new file mode 100644 index 0000000..770bcf4 --- /dev/null +++ b/app/admin/model/UserScoreLog.php @@ -0,0 +1,50 @@ +user_id)->lock(true)->find(); + if (!$user) { + throw new Exception("The user can't find it"); + } + if (!$model->memo) { + throw new Exception("Change note cannot be blank"); + } + $model->before = $user->score; + + $user->score += $model->score; + $user->save(); + + $model->after = $user->score; + } + + public static function onBeforeDelete(): bool + { + return false; + } + + public function user(): BelongsTo + { + return $this->belongsTo(User::class, 'user_id'); + } +} \ No newline at end of file diff --git a/app/admin/validate/Admin.php b/app/admin/validate/Admin.php new file mode 100644 index 0000000..6bd2e29 --- /dev/null +++ b/app/admin/validate/Admin.php @@ -0,0 +1,73 @@ + 'require|regex:^[a-zA-Z][a-zA-Z0-9_]{2,15}$|unique:admin', + 'nickname' => 'require', + 'password' => 'require|regex:^(?!.*[&<>"\'\n\r]).{6,32}$', + 'email' => 'email|unique:admin', + 'mobile' => 'mobile|unique:admin', + 'group_arr' => 'require|array', + ]; + + /** + * 验证提示信息 + * @var array + */ + protected $message = []; + + /** + * 字段描述 + */ + protected $field = [ + ]; + + /** + * 验证场景 + */ + protected $scene = [ + 'add' => ['username', 'nickname', 'password', 'email', 'mobile', 'group_arr'], + ]; + + /** + * 验证场景-前台自己修改自己资料 + */ + public function sceneInfo(): Admin + { + return $this->only(['nickname', 'password', 'email', 'mobile']) + ->remove('password', 'require'); + } + + /** + * 验证场景-编辑资料 + */ + public function sceneEdit(): Admin + { + return $this->only(['username', 'nickname', 'password', 'email', 'mobile', 'group_arr']) + ->remove('password', 'require'); + } + + public function __construct() + { + $this->field = [ + 'username' => __('Username'), + 'nickname' => __('Nickname'), + 'password' => __('Password'), + 'email' => __('Email'), + 'mobile' => __('Mobile'), + 'group_arr' => __('Group Name Arr'), + ]; + $this->message = array_merge($this->message, [ + 'username.regex' => __('Please input correct username'), + 'password.regex' => __('Please input correct password') + ]); + parent::__construct(); + } +} \ No newline at end of file diff --git a/app/admin/validate/AdminGroup.php b/app/admin/validate/AdminGroup.php new file mode 100644 index 0000000..936ec2e --- /dev/null +++ b/app/admin/validate/AdminGroup.php @@ -0,0 +1,46 @@ + 'require', + 'rules' => 'require', + ]; + + /** + * 验证提示信息 + * @var array + */ + protected $message = []; + + /** + * 字段描述 + */ + protected $field = [ + ]; + + /** + * 验证场景 + */ + protected $scene = [ + 'add' => ['name', 'rules'], + 'edit' => ['name', 'rules'], + ]; + + public function __construct() + { + $this->field = [ + 'name' => __('name'), + ]; + $this->message = [ + 'rules' => __('Please select rules'), + ]; + parent::__construct(); + } +} \ No newline at end of file diff --git a/app/admin/validate/AdminRule.php b/app/admin/validate/AdminRule.php new file mode 100644 index 0000000..5abd477 --- /dev/null +++ b/app/admin/validate/AdminRule.php @@ -0,0 +1,46 @@ + 'require', + 'title' => 'require', + 'name' => 'require|unique:admin_rule', + ]; + + /** + * 验证提示信息 + * @var array + */ + protected $message = []; + + /** + * 字段描述 + */ + protected $field = [ + ]; + + /** + * 验证场景 + */ + protected $scene = [ + 'add' => ['type', 'title', 'name'], + 'edit' => ['type', 'title', 'name'], + ]; + + public function __construct() + { + $this->field = [ + 'type' => __('type'), + 'title' => __('title'), + 'name' => __('name'), + ]; + parent::__construct(); + } +} \ No newline at end of file diff --git a/app/admin/validate/Config.php b/app/admin/validate/Config.php new file mode 100644 index 0000000..63bb00c --- /dev/null +++ b/app/admin/validate/Config.php @@ -0,0 +1,41 @@ + 'require|unique:config', + ]; + + /** + * 验证提示信息 + * @var array + */ + protected $message = []; + + /** + * 字段描述 + */ + protected $field = [ + ]; + + /** + * 验证场景 + */ + protected $scene = [ + 'add' => ['name'], + ]; + + public function __construct() + { + $this->field = [ + 'name' => __('Variable name'), + ]; + parent::__construct(); + } +} \ No newline at end of file diff --git a/app/admin/validate/DataRecycle.php b/app/admin/validate/DataRecycle.php new file mode 100644 index 0000000..822285f --- /dev/null +++ b/app/admin/validate/DataRecycle.php @@ -0,0 +1,48 @@ + 'require', + 'controller' => 'require|unique:security_data_recycle', + 'data_table' => 'require', + 'primary_key' => 'require', + ]; + + /** + * 验证提示信息 + * @var array + */ + protected $message = []; + + /** + * 字段描述 + */ + protected $field = [ + ]; + + /** + * 验证场景 + */ + protected $scene = [ + 'add' => ['name', 'controller', 'data_table', 'primary_key'], + 'edit' => ['name', 'controller', 'data_table', 'primary_key'], + ]; + + public function __construct() + { + $this->field = [ + 'name' => __('Name'), + 'controller' => __('Controller'), + 'data_table' => __('Data Table'), + 'primary_key' => __('Primary Key'), + ]; + parent::__construct(); + } +} \ No newline at end of file diff --git a/app/admin/validate/SensitiveData.php b/app/admin/validate/SensitiveData.php new file mode 100644 index 0000000..10bf627 --- /dev/null +++ b/app/admin/validate/SensitiveData.php @@ -0,0 +1,50 @@ + 'require', + 'controller' => 'require|unique:security_sensitive_data', + 'data_table' => 'require', + 'primary_key' => 'require', + 'data_fields' => 'require', + ]; + + /** + * 验证提示信息 + * @var array + */ + protected $message = []; + + /** + * 字段描述 + */ + protected $field = [ + ]; + + /** + * 验证场景 + */ + protected $scene = [ + 'add' => ['name', 'data_fields', 'controller', 'data_table', 'primary_key'], + 'edit' => ['name', 'data_fields', 'controller', 'data_table', 'primary_key'], + ]; + + public function __construct() + { + $this->field = [ + 'name' => __('Name'), + 'data_fields' => __('Data Fields'), + 'controller' => __('Controller'), + 'data_table' => __('Data Table'), + 'primary_key' => __('Primary Key'), + ]; + parent::__construct(); + } +} \ No newline at end of file diff --git a/app/admin/validate/UserMoneyLog.php b/app/admin/validate/UserMoneyLog.php new file mode 100644 index 0000000..76bc080 --- /dev/null +++ b/app/admin/validate/UserMoneyLog.php @@ -0,0 +1,46 @@ + 'require', + 'money' => 'require', + 'memo' => 'require', + ]; + + /** + * 验证提示信息 + * @var array + */ + protected $message = []; + + /** + * 字段描述 + */ + protected $field = [ + ]; + + /** + * 验证场景 + */ + protected $scene = [ + 'add' => ['user_id', 'money', 'memo'], + 'edit' => ['user_id', 'money', 'memo'], + ]; + + public function __construct() + { + $this->field = [ + 'user_id' => __('user_id'), + 'money' => __('money'), + 'memo' => __('memo'), + ]; + parent::__construct(); + } +} \ No newline at end of file diff --git a/app/admin/validate/UserScoreLog.php b/app/admin/validate/UserScoreLog.php new file mode 100644 index 0000000..678d87a --- /dev/null +++ b/app/admin/validate/UserScoreLog.php @@ -0,0 +1,46 @@ + 'require', + 'score' => 'require', + 'memo' => 'require', + ]; + + /** + * 验证提示信息 + * @var array + */ + protected $message = []; + + /** + * 字段描述 + */ + protected $field = [ + ]; + + /** + * 验证场景 + */ + protected $scene = [ + 'add' => ['user_id', 'score', 'memo'], + 'edit' => ['user_id', 'score', 'memo'], + ]; + + public function __construct() + { + $this->field = [ + 'user_id' => __('user_id'), + 'score' => __('score'), + 'memo' => __('memo'), + ]; + parent::__construct(); + } +} \ No newline at end of file diff --git a/app/api/common.php b/app/api/common.php new file mode 100644 index 0000000..de848d5 --- /dev/null +++ b/app/api/common.php @@ -0,0 +1,38 @@ +auth->id) + ->where('create_time', 'BETWEEN', $tempToday0 . ',' . $tempToday24) + ->sum('score'); + + $userMoneyTemp = UserMoneyLog::where('user_id', $this->auth->id) + ->where('create_time', 'BETWEEN', $tempToday0 . ',' . $tempToday24) + ->sum('money'); + $money[$i] = bcdiv($userMoneyTemp, 100, 2); + } + + $this->success('', [ + 'days' => $days, + 'score' => $score, + 'money' => $money, + ]); + } + + /** + * 会员资料 + * @throws Throwable + */ + public function profile(): void + { + if ($this->request->isPost()) { + $model = $this->auth->getUser(); + $data = $this->request->only(['avatar', 'username', 'nickname', 'gender', 'birthday', 'motto']); + + $data['id'] = $this->auth->id; + if (!isset($data['birthday'])) { + $data['birthday'] = null; + } + + try { + $validate = new AccountValidate(); + $validate->scene('edit')->check($data); + } catch (Throwable $e) { + $this->error($e->getMessage()); + } + + $model->startTrans(); + try { + $model->save($data); + $model->commit(); + } catch (Throwable $e) { + $model->rollback(); + $this->error($e->getMessage()); + } + + $this->success(__('Data updated successfully~')); + } + + $this->success('', [ + 'accountVerificationType' => get_account_verification_type() + ]); + } + + /** + * 通过手机号或邮箱验证账户 + * 此处检查的验证码是通过 api/Ems或api/Sms发送的 + * 验证成功后,向前端返回一个 email-pass Token或着 mobile-pass Token + * 在 changBind 方法中,通过 pass Token来确定用户已经通过了账户验证(用户未绑定邮箱/手机时通过账户密码验证) + * @throws Throwable + */ + public function verification(): void + { + $captcha = new Captcha(); + $params = $this->request->only(['type', 'captcha']); + if ($captcha->check($params['captcha'], ($params['type'] == 'email' ? $this->auth->email : $this->auth->mobile) . "user_{$params['type']}_verify")) { + $uuid = Random::uuid(); + Token::set($uuid, $params['type'] . '-pass', $this->auth->id, 600); + $this->success('', [ + 'type' => $params['type'], + 'accountVerificationToken' => $uuid, + ]); + } + $this->error(__('Please enter the correct verification code')); + } + + /** + * 修改绑定信息(手机号、邮箱) + * 通过 pass Token来确定用户已经通过了账户验证,也就是以上的 verification 方法,同时用户未绑定邮箱/手机时通过账户密码验证 + * @throws Throwable + */ + public function changeBind(): void + { + $captcha = new Captcha(); + $params = $this->request->only(['type', 'captcha', 'email', 'mobile', 'accountVerificationToken', 'password']); + $user = $this->auth->getUser(); + + if ($user[$params['type']]) { + if (!Token::check($params['accountVerificationToken'], $params['type'] . '-pass', $user->id)) { + $this->error(__('You need to verify your account before modifying the binding information')); + } + } elseif (!isset($params['password']) || !verify_password($params['password'], $user->password, ['salt' => $user->salt])) { + $this->error(__('Password error')); + } + + // 检查验证码 + if ($captcha->check($params['captcha'], $params[$params['type']] . "user_change_{$params['type']}")) { + if ($params['type'] == 'email') { + $validate = Validate::rule(['email' => 'require|email|unique:user'])->message([ + 'email.require' => 'email format error', + 'email.email' => 'email format error', + 'email.unique' => 'email is occupied', + ]); + if (!$validate->check(['email' => $params['email']])) { + $this->error(__($validate->getError())); + } + $user->email = $params['email']; + } elseif ($params['type'] == 'mobile') { + $validate = Validate::rule(['mobile' => 'require|mobile|unique:user'])->message([ + 'mobile.require' => 'mobile format error', + 'mobile.mobile' => 'mobile format error', + 'mobile.unique' => 'mobile is occupied', + ]); + if (!$validate->check(['mobile' => $params['mobile']])) { + $this->error(__($validate->getError())); + } + $user->mobile = $params['mobile']; + } + Token::delete($params['accountVerificationToken']); + $user->save(); + $this->success(); + } + $this->error(__('Please enter the correct verification code')); + } + + public function changePassword(): void + { + if ($this->request->isPost()) { + $model = $this->auth->getUser(); + $params = $this->request->only(['oldPassword', 'newPassword']); + + if (!verify_password($params['oldPassword'], $model->password, ['salt' => $model->salt])) { + $this->error(__('Old password error')); + } + + $model->startTrans(); + try { + $validate = new AccountValidate(); + $validate->scene('changePassword')->check(['password' => $params['newPassword']]); + $model->resetPassword($this->auth->id, $params['newPassword']); + $model->commit(); + } catch (Throwable $e) { + $model->rollback(); + $this->error($e->getMessage()); + } + + $this->auth->logout(); + $this->success(__('Password has been changed, please login again~')); + } + } + + /** + * 积分日志 + * @throws Throwable + */ + public function integral(): void + { + $limit = $this->request->request('limit'); + $integralModel = new UserScoreLog(); + $res = $integralModel->where('user_id', $this->auth->id) + ->order('create_time desc') + ->paginate($limit); + + $this->success('', [ + 'list' => $res->items(), + 'total' => $res->total(), + ]); + } + + /** + * 余额日志 + * @throws Throwable + */ + public function balance(): void + { + $limit = $this->request->request('limit'); + $moneyModel = new UserMoneyLog(); + $res = $moneyModel->where('user_id', $this->auth->id) + ->order('create_time desc') + ->paginate($limit); + + $this->success('', [ + 'list' => $res->items(), + 'total' => $res->total(), + ]); + } + + /** + * 找回密码 + * @throws Throwable + */ + public function retrievePassword(): void + { + $params = $this->request->only(['type', 'account', 'captcha', 'password']); + try { + $validate = new AccountValidate(); + $validate->scene('retrievePassword')->check($params); + } catch (Throwable $e) { + $this->error($e->getMessage()); + } + + if ($params['type'] == 'email') { + $user = User::where('email', $params['account'])->find(); + } else { + $user = User::where('mobile', $params['account'])->find(); + } + if (!$user) { + $this->error(__('Account does not exist~')); + } + + $captchaObj = new Captcha(); + if (!$captchaObj->check($params['captcha'], $params['account'] . 'user_retrieve_pwd')) { + $this->error(__('Please enter the correct verification code')); + } + + if ($user->resetPassword($user->id, $params['password'])) { + $this->success(__('Password has been changed~')); + } else { + $this->error(__('Failed to modify password, please try again later~')); + } + } +} \ No newline at end of file diff --git a/app/api/controller/Ajax.php b/app/api/controller/Ajax.php new file mode 100644 index 0000000..e7f2a6a --- /dev/null +++ b/app/api/controller/Ajax.php @@ -0,0 +1,59 @@ +request->file('file'); + $driver = $this->request->param('driver', 'local'); + $topic = $this->request->param('topic', 'default'); + try { + $upload = new Upload(); + $attachment = $upload + ->setFile($file) + ->setDriver($driver) + ->setTopic($topic) + ->upload(null, 0, $this->auth->id); + unset($attachment['create_time'], $attachment['quote']); + } catch (Throwable $e) { + $this->error($e->getMessage()); + } + + $this->success(__('File uploaded successfully'), [ + 'file' => $attachment ?? [] + ]); + } + + /** + * 省份地区数据 + * @throws Throwable + */ + public function area(): void + { + $this->success('', get_area()); + } + + public function buildSuffixSvg(): Response + { + $suffix = $this->request->param('suffix', 'file'); + $background = $this->request->param('background'); + $content = build_suffix_svg((string)$suffix, (string)$background); + return response($content, 200, ['Content-Length' => strlen($content)])->contentType('image/svg+xml'); + } +} \ No newline at end of file diff --git a/app/api/controller/Common.php b/app/api/controller/Common.php new file mode 100644 index 0000000..cc28882 --- /dev/null +++ b/app/api/controller/Common.php @@ -0,0 +1,92 @@ +request->request('id'); + $config = array( + 'codeSet' => '123456789', // 验证码字符集合 + 'fontSize' => 22, // 验证码字体大小(px) + 'useCurve' => false, // 是否画混淆曲线 + 'useNoise' => true, // 是否添加杂点 + 'length' => 4, // 验证码位数 + 'bg' => array(255, 255, 255), // 背景颜色 + ); + + $captcha = new Captcha($config); + return $captcha->entry($captchaId); + } + + /** + * 点选验证码 + */ + public function clickCaptcha(): void + { + $id = $this->request->request('id/s'); + $captcha = new ClickCaptcha(); + $this->success('', $captcha->creat($id)); + } + + /** + * 点选验证码检查 + * @throws Throwable + */ + public function checkClickCaptcha(): void + { + $id = $this->request->post('id/s'); + $info = $this->request->post('info/s'); + $unset = $this->request->post('unset/b', false); + $captcha = new ClickCaptcha(); + if ($captcha->check($id, $info, $unset)) $this->success(); + $this->error(); + } + + /** + * 刷新 token + * 无需主动删除原 token,由 token 驱动自行实现过期 token 清理,可避免并发场景下无法获取到过期 token 数据 + */ + public function refreshToken(): void + { + $refreshToken = $this->request->post('refreshToken'); + $refreshToken = Token::get($refreshToken); + + if (!$refreshToken || $refreshToken['expire_time'] < time()) { + $this->error(__('Login expired, please login again.')); + } + + $newToken = Random::uuid(); + + // 管理员token刷新 + if ($refreshToken['type'] == AdminAuth::TOKEN_TYPE . '-refresh') { + Token::set($newToken, AdminAuth::TOKEN_TYPE, $refreshToken['user_id'], (int)Config::get('buildadmin.admin_token_keep_time')); + } + + // 会员token刷新 + if ($refreshToken['type'] == UserAuth::TOKEN_TYPE . '-refresh') { + Token::set($newToken, UserAuth::TOKEN_TYPE, $refreshToken['user_id'], (int)Config::get('buildadmin.user_token_keep_time')); + } + + $this->success('', [ + 'type' => $refreshToken['type'], + 'token' => $newToken + ]); + } +} \ No newline at end of file diff --git a/app/api/controller/Ems.php b/app/api/controller/Ems.php new file mode 100644 index 0000000..e02b4f5 --- /dev/null +++ b/app/api/controller/Ems.php @@ -0,0 +1,108 @@ +request->post(['email', 'event', 'captchaId', 'captchaInfo']); + $mail = new Email(); + if (!$mail->configured) { + $this->error(__('Mail sending service unavailable')); + } + + $validate = Validate::rule([ + 'email' => 'require|email', + 'event' => 'require', + 'captchaId' => 'require', + 'captchaInfo' => 'require' + ])->message([ + 'email' => 'email format error', + 'event' => 'Parameter error', + 'captchaId' => 'Captcha error', + 'captchaInfo' => 'Captcha error' + ]); + if (!$validate->check($params)) { + $this->error(__($validate->getError())); + } + + // 检查验证码 + $captchaObj = new Captcha(); + $clickCaptcha = new ClickCaptcha(); + if (!$clickCaptcha->check($params['captchaId'], $params['captchaInfo'])) { + $this->error(__('Captcha error')); + } + + // 检查频繁发送 + $captcha = $captchaObj->getCaptchaData($params['email'] . $params['event']); + if ($captcha && time() - $captcha['create_time'] < 60) { + $this->error(__('Frequent email sending')); + } + + // 检查邮箱 + $userInfo = User::where('email', $params['email'])->find(); + if ($params['event'] == 'user_register' && $userInfo) { + $this->error(__('Email has been registered, please log in directly')); + } elseif ($params['event'] == 'user_change_email' && $userInfo) { + $this->error(__('The email has been occupied')); + } elseif (in_array($params['event'], ['user_retrieve_pwd', 'user_email_verify']) && !$userInfo) { + $this->error(__('Email not registered')); + } + + // 通过邮箱验证账户 + if ($params['event'] == 'user_email_verify') { + if (!$this->auth->isLogin()) { + $this->error(__('Please login first')); + } + if ($this->auth->email != $params['email']) { + $this->error(__('Please use the account registration email to send the verification code')); + } + // 验证账户密码 + $password = $this->request->post('password'); + if (!verify_password($password, $this->auth->password, ['salt' => $this->auth->salt])) { + $this->error(__('Password error')); + } + } + + // 生成一个验证码 + $code = $captchaObj->create($params['email'] . $params['event']); + $subject = __($params['event']) . '-' . get_sys_config('site_name'); + $body = __('Your verification code is: %s', [$code]); + + try { + $mail->isSMTP(); + $mail->addAddress($params['email']); + $mail->isHTML(); + $mail->setSubject($subject); + $mail->Body = $body; + $mail->send(); + } catch (PHPMailerException) { + $this->error($mail->ErrorInfo); + } + + $this->success(__('Mail sent successfully~')); + } +} \ No newline at end of file diff --git a/app/api/controller/Index.php b/app/api/controller/Index.php new file mode 100644 index 0000000..427d9b2 --- /dev/null +++ b/app/api/controller/Index.php @@ -0,0 +1,84 @@ +auth->isLogin()) { + $rules = []; + $userMenus = $this->auth->getMenus(); + + // 首页加载的规则,验权,但过滤掉会员中心菜单 + foreach ($userMenus as $item) { + if ($item['type'] == 'menu_dir') { + $menus[] = $item; + } elseif ($item['type'] != 'menu') { + $rules[] = $item; + } + } + $rules = array_values($rules); + } else { + // 若是从前台会员中心内发出的请求,要求必须登录,否则会员中心异常 + $requiredLogin = $this->request->get('requiredLogin/b', false); + if ($requiredLogin) { + + // 触发可能的 token 过期异常 + try { + $token = get_auth_token(['ba', 'user', 'token']); + $this->auth->init($token); + } catch (TokenExpirationException) { + $this->error(__('Token expiration'), [], 409); + } + + $this->error(__('Please login first'), [ + 'type' => $this->auth::NEED_LOGIN + ], $this->auth::LOGIN_RESPONSE_CODE); + } + + $rules = Db::name('user_rule') + ->where('status', 1) + ->where('no_login_valid', 1) + ->where('type', 'in', ['route', 'nav', 'button']) + ->order('weigh', 'desc') + ->select() + ->toArray(); + $rules = Tree::instance()->assembleChild($rules); + } + + $this->success('', [ + 'site' => [ + 'siteName' => get_sys_config('site_name'), + 'version' => get_sys_config('version'), + 'cdnUrl' => full_url(), + 'upload' => keys_to_camel_case(get_upload_config(), ['max_size', 'save_name', 'allowed_suffixes', 'allowed_mime_types']), + 'recordNumber' => get_sys_config('record_number'), + 'cdnUrlParams' => Config::get('buildadmin.cdn_url_params'), + ], + 'openMemberCenter' => Config::get('buildadmin.open_member_center'), + 'userInfo' => $this->auth->getUserInfo(), + 'rules' => $rules, + 'menus' => $menus, + ]); + } +} \ No newline at end of file diff --git a/app/api/controller/Install.php b/app/api/controller/Install.php new file mode 100644 index 0000000..9100230 --- /dev/null +++ b/app/api/controller/Install.php @@ -0,0 +1,671 @@ + '8.2.0', + 'npm' => '9.8.1', + 'cnpm' => '7.1.0', + 'node' => '20.14.0', + 'yarn' => '1.2.0', + 'pnpm' => '6.32.13', + ]; + + /** + * 安装完成标记 + * 配置完成则建立lock文件 + * 执行命令成功执行再写入标记到lock文件 + * 实现命令执行失败,重载页面可重新执行 + */ + static string $InstallationCompletionMark = 'install-end'; + + + /** + * 构造方法 + * @param App $app + */ + public function __construct(App $app) + { + parent::__construct($app); + } + + /** + * 命令执行窗口 + * @throws Throwable + */ + public function terminal(): void + { + if ($this->isInstallComplete()) { + return; + } + + (new Terminal())->exec(false); + } + + public function changePackageManager(): void + { + if ($this->isInstallComplete()) { + return; + } + + $newPackageManager = request()->post('manager', Config::get('terminal.npm_package_manager')); + if (Terminal::changeTerminalConfig()) { + $this->success('', [ + 'manager' => $newPackageManager + ]); + } else { + $this->error(__('Failed to switch package manager. Please modify the configuration file manually:%s', ['根目录/config/buildadmin.php'])); + } + } + + /** + * 环境基础检查 + */ + public function envBaseCheck(): void + { + if ($this->isInstallComplete()) { + $this->error(__('The system has completed installation. If you need to reinstall, please delete the %s file first', ['public/' . self::$lockFileName]), []); + } + if (env('database.type')) { + $this->error(__('The .env file with database configuration was detected. Please clean up and try again!')); + } + + // php版本-start + $phpVersion = phpversion(); + $phpBit = PHP_INT_SIZE == 8 ? self::X64 : self::X86; + $phpVersionCompare = Version::compare(self::$needDependentVersion['php'], $phpVersion); + if (!$phpVersionCompare) { + $phpVersionLink = [ + [ + // 需要PHP版本 + 'name' => __('need') . ' >= ' . self::$needDependentVersion['php'], + 'type' => 'text' + ], + [ + // 如何解决 + 'name' => __('How to solve?'), + 'title' => __('Click to see how to solve it'), + 'type' => 'faq', + 'url' => 'https://doc.buildadmin.com/guide/install/preparePHP.html' + ] + ]; + } elseif ($phpBit != self::X64) { + $phpVersionLink = [ + [ + // 需要 64 位 PHP + 'name' => __('need') . ' x64 PHP', + 'type' => 'text' + ], + [ + // 如何解决 + 'name' => __('How to solve?'), + 'title' => __('Click to see how to solve it'), + 'type' => 'faq', + 'url' => 'https://doc.buildadmin.com/guide/install/preparePHP.html' + ] + ]; + } + // php版本-end + + // 配置文件-start + $dbConfigFile = config_path() . self::$dbConfigFileName; + $configIsWritable = Filesystem::pathIsWritable(config_path()) && Filesystem::pathIsWritable($dbConfigFile); + if (!$configIsWritable) { + $configIsWritableLink = [ + [ + // 查看原因 + 'name' => __('View reason'), + 'title' => __('Click to view the reason'), + 'type' => 'faq', + 'url' => 'https://doc.buildadmin.com/guide/install/dirNoPermission.html' + ] + ]; + } + // 配置文件-end + + // public-start + $publicIsWritable = Filesystem::pathIsWritable(public_path()); + if (!$publicIsWritable) { + $publicIsWritableLink = [ + [ + 'name' => __('View reason'), + 'title' => __('Click to view the reason'), + 'type' => 'faq', + 'url' => 'https://doc.buildadmin.com/guide/install/dirNoPermission.html' + ] + ]; + } + // public-end + + // PDO-start + $phpPdo = extension_loaded("PDO") && extension_loaded('pdo_mysql'); + if (!$phpPdo) { + $phpPdoLink = [ + [ + 'name' => __('PDO extensions need to be installed'), + 'type' => 'text' + ], + [ + 'name' => __('How to solve?'), + 'title' => __('Click to see how to solve it'), + 'type' => 'faq', + 'url' => 'https://doc.buildadmin.com/guide/install/missingExtension.html' + ] + ]; + } + // PDO-end + + // GD2和freeType-start + $phpGd2 = extension_loaded('gd') && function_exists('imagettftext'); + if (!$phpGd2) { + $phpGd2Link = [ + [ + 'name' => __('The gd extension and freeType library need to be installed'), + 'type' => 'text' + ], + [ + 'name' => __('How to solve?'), + 'title' => __('Click to see how to solve it'), + 'type' => 'faq', + 'url' => 'https://doc.buildadmin.com/guide/install/gdFail.html' + ] + ]; + } + // GD2和freeType-end + + // proc_open + $phpProc = function_exists('proc_open') && function_exists('proc_close') && function_exists('proc_get_status'); + if (!$phpProc) { + $phpProcLink = [ + [ + 'name' => __('View reason'), + 'title' => __('proc_open or proc_close functions in PHP Ini is disabled'), + 'type' => 'faq', + 'url' => 'https://doc.buildadmin.com/guide/install/disablement.html' + ], + [ + 'name' => __('How to modify'), + 'title' => __('Click to view how to modify'), + 'type' => 'faq', + 'url' => 'https://doc.buildadmin.com/guide/install/disablement.html' + ], + [ + 'name' => __('Security assurance?'), + 'title' => __('Using the installation service correctly will not cause any potential security problems. Click to view the details'), + 'type' => 'faq', + 'url' => 'https://doc.buildadmin.com/guide/install/senior.html' + ], + ]; + } + // proc_open-end + + $this->success('', [ + 'php_version' => [ + 'describe' => $phpVersion . " ($phpBit)", + 'state' => $phpVersionCompare && $phpBit == self::X64 ? self::$ok : self::$fail, + 'link' => $phpVersionLink ?? [], + ], + 'config_is_writable' => [ + 'describe' => self::writableStateDescribe($configIsWritable), + 'state' => $configIsWritable ? self::$ok : self::$fail, + 'link' => $configIsWritableLink ?? [] + ], + 'public_is_writable' => [ + 'describe' => self::writableStateDescribe($publicIsWritable), + 'state' => $publicIsWritable ? self::$ok : self::$fail, + 'link' => $publicIsWritableLink ?? [] + ], + 'php_pdo' => [ + 'describe' => $phpPdo ? __('already installed') : __('Not installed'), + 'state' => $phpPdo ? self::$ok : self::$fail, + 'link' => $phpPdoLink ?? [] + ], + 'php_gd2' => [ + 'describe' => $phpGd2 ? __('already installed') : __('Not installed'), + 'state' => $phpGd2 ? self::$ok : self::$fail, + 'link' => $phpGd2Link ?? [] + ], + 'php_proc' => [ + 'describe' => $phpProc ? __('Allow execution') : __('disabled'), + 'state' => $phpProc ? self::$ok : self::$warn, + 'link' => $phpProcLink ?? [] + ], + ]); + } + + /** + * npm环境检查 + */ + public function envNpmCheck(): void + { + if ($this->isInstallComplete()) { + $this->error('', [], 2); + } + + $packageManager = request()->post('manager', 'none'); + + // npm + $npmVersion = Version::getVersion('npm'); + $npmVersionCompare = Version::compare(self::$needDependentVersion['npm'], $npmVersion); + if (!$npmVersionCompare || !$npmVersion) { + $npmVersionLink = [ + [ + // 需要版本 + 'name' => __('need') . ' >= ' . self::$needDependentVersion['npm'], + 'type' => 'text' + ], + [ + // 如何解决 + 'name' => __('How to solve?'), + 'title' => __('Click to see how to solve it'), + 'type' => 'faq', + 'url' => 'https://doc.buildadmin.com/guide/install/prepareNpm.html' + ] + ]; + } + + // 包管理器 + if (in_array($packageManager, ['npm', 'cnpm', 'pnpm', 'yarn'])) { + $pmVersion = Version::getVersion($packageManager); + $pmVersionCompare = Version::compare(self::$needDependentVersion[$packageManager], $pmVersion); + + if (!$pmVersion) { + // 安装 + $pmVersionLink[] = [ + // 需要版本 + 'name' => __('need') . ' >= ' . self::$needDependentVersion[$packageManager], + 'type' => 'text' + ]; + if ($npmVersionCompare) { + $pmVersionLink[] = [ + // 点击安装 + 'name' => __('Click Install %s', [$packageManager]), + 'title' => '', + 'type' => 'install-package-manager' + ]; + } else { + $pmVersionLink[] = [ + // 请先安装npm + 'name' => __('Please install NPM first'), + 'type' => 'text' + ]; + } + } elseif (!$pmVersionCompare) { + // 版本不足 + $pmVersionLink[] = [ + // 需要版本 + 'name' => __('need') . ' >= ' . self::$needDependentVersion[$packageManager], + 'type' => 'text' + ]; + $pmVersionLink[] = [ + // 请升级 + 'name' => __('Please upgrade %s version', [$packageManager]), + 'type' => 'text' + ]; + } + } elseif ($packageManager == 'ni') { + $pmVersion = __('nothing'); + $pmVersionCompare = true; + } else { + $pmVersion = __('nothing'); + $pmVersionCompare = false; + } + + // nodejs + $nodejsVersion = Version::getVersion('node'); + $nodejsVersionCompare = Version::compare(self::$needDependentVersion['node'], $nodejsVersion); + if (!$nodejsVersionCompare || !$nodejsVersion) { + $nodejsVersionLink = [ + [ + // 需要版本 + 'name' => __('need') . ' >= ' . self::$needDependentVersion['node'], + 'type' => 'text' + ], + [ + // 如何解决 + 'name' => __('How to solve?'), + 'title' => __('Click to see how to solve it'), + 'type' => 'faq', + 'url' => 'https://doc.buildadmin.com/guide/install/prepareNodeJs.html' + ] + ]; + } + + $this->success('', [ + 'npm_version' => [ + 'describe' => $npmVersion ?: __('Acquisition failed'), + 'state' => $npmVersionCompare ? self::$ok : self::$warn, + 'link' => $npmVersionLink ?? [], + ], + 'nodejs_version' => [ + 'describe' => $nodejsVersion ?: __('Acquisition failed'), + 'state' => $nodejsVersionCompare ? self::$ok : self::$warn, + 'link' => $nodejsVersionLink ?? [] + ], + 'npm_package_manager' => [ + 'describe' => $pmVersion ?: __('Acquisition failed'), + 'state' => $pmVersionCompare ? self::$ok : self::$warn, + 'link' => $pmVersionLink ?? [], + ] + ]); + } + + /** + * 测试数据库连接 + */ + public function testDatabase(): void + { + $database = [ + 'hostname' => $this->request->post('hostname'), + 'username' => $this->request->post('username'), + 'password' => $this->request->post('password'), + 'hostport' => $this->request->post('hostport'), + 'database' => '', + ]; + + $conn = $this->connectDb($database); + if ($conn['code'] == 0) { + $this->error($conn['msg']); + } else { + $this->success('', [ + 'databases' => $conn['databases'] + ]); + } + } + + /** + * 系统基础配置 + * post请求=开始安装 + */ + public function baseConfig(): void + { + if ($this->isInstallComplete()) { + $this->error(__('The system has completed installation. If you need to reinstall, please delete the %s file first', ['public/' . self::$lockFileName])); + } + + $envOk = $this->commandExecutionCheck(); + $rootPath = str_replace('\\', '/', root_path()); + if ($this->request->isGet()) { + $this->success('', [ + 'rootPath' => $rootPath, + 'executionWebCommand' => $envOk + ]); + } + + $connectData = $databaseParam = $this->request->only(['hostname', 'username', 'password', 'hostport', 'database', 'prefix']); + + // 数据库配置测试 + $connectData['database'] = ''; + $connect = $this->connectDb($connectData, true); + if ($connect['code'] == 0) { + $this->error($connect['msg']); + } + + // 建立数据库 + if (!in_array($databaseParam['database'], $connect['databases'])) { + $sql = "CREATE DATABASE IF NOT EXISTS `{$databaseParam['database']}` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"; + $connect['pdo']->exec($sql); + } + + // 写入数据库配置文件 + $dbConfigFile = config_path() . self::$dbConfigFileName; + $dbConfigContent = @file_get_contents($dbConfigFile); + $callback = function ($matches) use ($databaseParam) { + $value = $databaseParam[$matches[1]] ?? ''; + return "'$matches[1]'$matches[2]=>$matches[3]env('database.$matches[1]', '$value'),"; + }; + $dbConfigText = preg_replace_callback("/'(hostname|database|username|password|hostport|prefix)'(\s+)=>(\s+)env\('database\.(.*)',\s+'(.*)'\),/", $callback, $dbConfigContent); + $result = @file_put_contents($dbConfigFile, $dbConfigText); + if (!$result) { + $this->error(__('File has no write permission:%s', ['config/' . self::$dbConfigFileName])); + } + + // 写入.env-example文件 + $envFile = root_path() . '.env-example'; + $envFileContent = @file_get_contents($envFile); + if ($envFileContent) { + $databasePos = stripos($envFileContent, '[DATABASE]'); + if ($databasePos !== false) { + // 清理已有数据库配置 + $envFileContent = substr($envFileContent, 0, $databasePos); + } + $envFileContent .= "\n" . '[DATABASE]' . "\n"; + $envFileContent .= 'TYPE = mysql' . "\n"; + $envFileContent .= 'HOSTNAME = ' . $databaseParam['hostname'] . "\n"; + $envFileContent .= 'DATABASE = ' . $databaseParam['database'] . "\n"; + $envFileContent .= 'USERNAME = ' . $databaseParam['username'] . "\n"; + $envFileContent .= 'PASSWORD = ' . $databaseParam['password'] . "\n"; + $envFileContent .= 'HOSTPORT = ' . $databaseParam['hostport'] . "\n"; + $envFileContent .= 'PREFIX = ' . $databaseParam['prefix'] . "\n"; + $envFileContent .= 'CHARSET = utf8mb4' . "\n"; + $envFileContent .= 'DEBUG = true' . "\n"; + $result = @file_put_contents($envFile, $envFileContent); + if (!$result) { + $this->error(__('File has no write permission:%s', ['/' . $envFile])); + } + } + + // 设置新的Token随机密钥key + $oldTokenKey = Config::get('buildadmin.token.key'); + $newTokenKey = Random::build('alnum', 32); + $buildConfigFile = config_path() . self::$buildConfigFileName; + $buildConfigContent = @file_get_contents($buildConfigFile); + $buildConfigContent = preg_replace("/'key'(\s+)=>(\s+)'$oldTokenKey'/", "'key'\$1=>\$2'$newTokenKey'", $buildConfigContent); + $result = @file_put_contents($buildConfigFile, $buildConfigContent); + if (!$result) { + $this->error(__('File has no write permission:%s', ['config/' . self::$buildConfigFileName])); + } + + // 建立安装锁文件 + $result = @file_put_contents(public_path() . self::$lockFileName, date('Y-m-d H:i:s')); + if (!$result) { + $this->error(__('File has no write permission:%s', ['public/' . self::$lockFileName])); + } + + $this->success('', [ + 'rootPath' => $rootPath, + 'executionWebCommand' => $envOk + ]); + } + + protected function isInstallComplete(): bool + { + if (is_file(public_path() . self::$lockFileName)) { + $contents = @file_get_contents(public_path() . self::$lockFileName); + if ($contents == self::$InstallationCompletionMark) { + return true; + } + } + return false; + } + + /** + * 标记命令执行完毕 + * @throws Throwable + */ + public function commandExecComplete(): void + { + if ($this->isInstallComplete()) { + $this->error(__('The system has completed installation. If you need to reinstall, please delete the %s file first', ['public/' . self::$lockFileName])); + } + + $param = $this->request->only(['type', 'adminname', 'adminpassword', 'sitename']); + if ($param['type'] == 'web') { + $result = @file_put_contents(public_path() . self::$lockFileName, self::$InstallationCompletionMark); + if (!$result) { + $this->error(__('File has no write permission:%s', ['public/' . self::$lockFileName])); + } + } else { + // 管理员配置入库 + $adminModel = new AdminModel(); + $defaultAdmin = $adminModel->where('username', 'admin')->find(); + $defaultAdmin->username = $param['adminname']; + $defaultAdmin->nickname = ucfirst($param['adminname']); + $defaultAdmin->save(); + + if (isset($param['adminpassword']) && $param['adminpassword']) { + $adminModel->resetPassword($defaultAdmin->id, $param['adminpassword']); + } + + // 默认用户密码修改 + $user = new UserModel(); + $user->resetPassword(1, Random::build()); + + // 修改站点名称 + \app\admin\model\Config::where('name', 'site_name')->update([ + 'value' => $param['sitename'] + ]); + } + $this->success(); + } + + /** + * 获取命令执行检查的结果 + * @return bool 是否拥有执行命令的条件 + */ + private function commandExecutionCheck(): bool + { + $pm = Config::get('terminal.npm_package_manager'); + if ($pm == 'none') { + return false; + } + $check['phpPopen'] = function_exists('proc_open') && function_exists('proc_close'); + $check['npmVersionCompare'] = Version::compare(self::$needDependentVersion['npm'], Version::getVersion('npm')); + $check['pmVersionCompare'] = Version::compare(self::$needDependentVersion[$pm], Version::getVersion($pm)); + $check['nodejsVersionCompare'] = Version::compare(self::$needDependentVersion['node'], Version::getVersion('node')); + + $envOk = true; + foreach ($check as $value) { + if (!$value) { + $envOk = false; + break; + } + } + return $envOk; + } + + /** + * 安装指引 + */ + public function manualInstall(): void + { + $this->success('', [ + 'webPath' => str_replace('\\', '/', root_path() . 'web') + ]); + } + + public function mvDist(): void + { + if (!is_file(root_path() . self::$distDir . DIRECTORY_SEPARATOR . 'index.html')) { + $this->error(__('No built front-end file found, please rebuild manually!')); + } + + if (Terminal::mvDist()) { + $this->success(); + } else { + $this->error(__('Failed to move the front-end file, please move it manually!')); + } + } + + /** + * 目录是否可写 + * @param $writable + * @return string + */ + private static function writableStateDescribe($writable): string + { + return $writable ? __('Writable') : __('No write permission'); + } + + /** + * 数据库连接-获取数据表列表 + * @param array $database + * @param bool $returnPdo + * @return array + */ + private function connectDb(array $database, bool $returnPdo = false): array + { + try { + $dbConfig = Config::get('database'); + $dbConfig['connections']['mysql'] = array_merge($dbConfig['connections']['mysql'], $database); + Config::set(['connections' => $dbConfig['connections']], 'database'); + + $connect = Db::connect('mysql'); + $connect->execute("SELECT 1"); + } catch (PDOException $e) { + $errorMsg = $e->getMessage(); + return [ + 'code' => 0, + 'msg' => __('Database connection failed:%s', [mb_convert_encoding($errorMsg ?: 'unknown', 'UTF-8', 'UTF-8,GBK,GB2312,BIG5')]) + ]; + } + + $databases = []; + // 不需要的数据表 + $databasesExclude = ['information_schema', 'mysql', 'performance_schema', 'sys']; + $res = $connect->query("SHOW DATABASES"); + foreach ($res as $row) { + if (!in_array($row['Database'], $databasesExclude)) { + $databases[] = $row['Database']; + } + } + + return [ + 'code' => 1, + 'msg' => '', + 'databases' => $databases, + 'pdo' => $returnPdo ? $connect->getPdo() : '', + ]; + } +} diff --git a/app/api/controller/User.php b/app/api/controller/User.php new file mode 100644 index 0000000..9b38826 --- /dev/null +++ b/app/api/controller/User.php @@ -0,0 +1,100 @@ +error(__('Member center disabled')); + } + + // 检查登录态 + if ($this->auth->isLogin()) { + $this->success(__('You have already logged in. There is no need to log in again~'), [ + 'type' => $this->auth::LOGGED_IN + ], $this->auth::LOGIN_RESPONSE_CODE); + } + + $userLoginCaptchaSwitch = Config::get('buildadmin.user_login_captcha'); + + if ($this->request->isPost()) { + $params = $this->request->post(['tab', 'email', 'mobile', 'username', 'password', 'keep', 'captcha', 'captchaId', 'captchaInfo', 'registerType']); + + // 提前检查 tab ,然后将以 tab 值作为数据验证场景 + if (!in_array($params['tab'] ?? '', ['login', 'register'])) { + $this->error(__('Unknown operation')); + } + + $validate = new UserValidate(); + try { + $validate->scene($params['tab'])->check($params); + } catch (Throwable $e) { + $this->error($e->getMessage()); + } + + if ($params['tab'] == 'login') { + if ($userLoginCaptchaSwitch) { + $captchaObj = new ClickCaptcha(); + if (!$captchaObj->check($params['captchaId'], $params['captchaInfo'])) { + $this->error(__('Captcha error')); + } + } + $res = $this->auth->login($params['username'], $params['password'], !empty($params['keep'])); + } elseif ($params['tab'] == 'register') { + $captchaObj = new Captcha(); + if (!$captchaObj->check($params['captcha'], $params[$params['registerType']] . 'user_register')) { + $this->error(__('Please enter the correct verification code')); + } + $res = $this->auth->register($params['username'], $params['password'], $params['mobile'], $params['email']); + } + + if (isset($res) && $res === true) { + $this->success(__('Login succeeded!'), [ + 'userInfo' => $this->auth->getUserInfo(), + 'routePath' => '/user' + ]); + } else { + $msg = $this->auth->getError(); + $msg = $msg ?: __('Check in failed, please try again or contact the website administrator~'); + $this->error($msg); + } + } + + $this->success('', [ + 'userLoginCaptchaSwitch' => $userLoginCaptchaSwitch, + 'accountVerificationType' => get_account_verification_type() + ]); + } + + public function logout(): void + { + if ($this->request->isPost()) { + $refreshToken = $this->request->post('refreshToken', ''); + if ($refreshToken) Token::delete((string)$refreshToken); + $this->auth->logout(); + $this->success(); + } + } +} \ No newline at end of file diff --git a/app/api/lang/en.php b/app/api/lang/en.php new file mode 100644 index 0000000..df16d44 --- /dev/null +++ b/app/api/lang/en.php @@ -0,0 +1,15 @@ + 'Login expired, please login again.', + 'Account not exist' => 'Account does not exist', + 'Account disabled' => 'Account is disabled', + 'Token login failed' => 'Token login failed', + 'Please try again after 1 day' => 'The number of failed login attempts has exceeded the limit, please try again after 24 hours.', + 'Password is incorrect' => 'Incorrect password', + 'You are not logged in' => 'You are not logged in.', + 'Unknown operation' => 'Unknown operation', + 'No action available, please contact the administrator~' => 'There is no action available, please contact the administrator~', + 'Please login first' => 'Please login first!', + 'You have no permission' => 'No permission to operate!', + 'Captcha error' => 'Captcha error!', +]; \ No newline at end of file diff --git a/app/api/lang/en/account.php b/app/api/lang/en/account.php new file mode 100644 index 0000000..3968db2 --- /dev/null +++ b/app/api/lang/en/account.php @@ -0,0 +1,16 @@ + 'Nickname', + 'birthday' => 'Birthday', + 'captcha' => 'Captcha', + 'Old password error' => 'Old password error', + 'Data updated successfully~' => 'Data updated successfully', + 'Please input correct password' => 'Please enter the correct password', + 'nicknameChsDash' => 'Usernames can only be Chinese characters, letters, numbers, underscores_ and dashes-.', + 'Password has been changed~' => 'Password has been changed~', + 'Password has been changed, please login again~' => 'Password has been changed, please login again~', + 'Account does not exist~' => 'Account does not exist', + 'Failed to modify password, please try again later~' => 'Failed to modify password, please try again later~', + 'Please enter the correct verification code' => 'Please enter the correct Captcha', + '%s has been registered' => '%s has been registered, please login directly.', +]; \ No newline at end of file diff --git a/app/api/lang/en/ems.php b/app/api/lang/en/ems.php new file mode 100644 index 0000000..46c7fb3 --- /dev/null +++ b/app/api/lang/en/ems.php @@ -0,0 +1,16 @@ + 'email format error', + 'user_register' => 'Member registration verification', + 'user_retrieve_pwd' => 'Retrieve password verification', + 'user_change_email' => 'Modify mailbox validation', + 'user_email_verify' => 'Member Email Verification', + 'Your verification code is: %s' => 'Your Captcha is: %s,valid for 10 minutes~', + 'Mail sent successfully~' => 'Mail sent successfully', + 'Account does not exist~' => 'Account does not exist', + 'Mail sending service unavailable' => 'The mail sending service is not working, please contact the webmaster to configure it.', + 'Frequent email sending' => 'Frequent email sending', + 'Email has been registered, please log in directly' => 'Email has been registered, please log in directly~', + 'The email has been occupied' => 'The email has been occupied', + 'Email not registered' => 'Email not registered', +]; \ No newline at end of file diff --git a/app/api/lang/en/install.php b/app/api/lang/en/install.php new file mode 100644 index 0000000..0175147 --- /dev/null +++ b/app/api/lang/en/install.php @@ -0,0 +1,44 @@ + 'Install the controller', + 'need' => 'Need', + 'Click to see how to solve it' => 'Click to see how to solve.', + 'Please check the config directory permissions' => 'Please check the Config directory permissions', + 'Please check the public directory permissions' => 'Please check the Public directory permissions', + 'open' => 'Open', + 'close' => 'Close', + 'The installation can continue, and some operations need to be completed manually' => 'You can continue to install, and some operations need to be completed manually ', + 'Allow execution' => 'Allow execution', + 'disabled' => 'Disabled', + 'Allow operation' => 'Allow operation', + 'Acquisition failed' => 'Access failed', + 'Click Install %s' => 'Click Install %s', + 'Writable' => 'Writable', + 'No write permission' => 'No write permissions', + 'already installed' => 'Installed', + 'Not installed' => 'Not installed', + 'File has no write permission:%s' => 'File has no write permission:%s', + 'The system has completed installation. If you need to reinstall, please delete the %s file first' => 'The system has been installed, if you need to reinstall, please delete the %s file first.', + 'Database connection failed:%s' => 'Database connection failure:%s', + 'Failed to install SQL execution:%s' => 'Installation SQL execution failed:%s', + 'unknown' => 'Unknown', + 'Database does not exist' => 'Database does not exist!', + 'No built front-end file found, please rebuild manually!' => 'No built front-end file found, please rebuild manually.', + 'Failed to move the front-end file, please move it manually!' => 'Failed to move the front-end file, please move manually!', + 'How to solve?' => 'How to solve?', + 'View reason' => 'View reasons', + 'Click to view the reason' => 'Click to see the reason', + 'PDO extensions need to be installed' => 'pdo_mysql extensions need to be installed.', + 'proc_open or proc_close functions in PHP Ini is disabled' => 'proc_open and proc_close functions in PHP.Ini is disabled.', + 'How to modify' => 'How to modify?', + 'Click to view how to modify' => 'Click to see how to modify.', + 'Security assurance?' => 'Security assurance?', + 'Using the installation service correctly will not cause any potential security problems. Click to view the details' => 'The correct use of the installation service will not cause any potential security issues. Click to view the details.', + 'Please install NPM first' => 'Please install NPM first.', + 'Installation error:%s' => 'Installation error:%s', + 'Failed to switch package manager. Please modify the configuration file manually:%s' => 'Package manager switch failed, please modify the configuration file manually:%s.', + 'Please upgrade %s version' => 'Please upgrade the %s version', + 'nothing' => 'Nothing', + 'The gd extension and freeType library need to be installed' => 'The gd2 extension and freeType library need to be installed', + 'The .env file with database configuration was detected. Please clean up and try again!' => 'The .env file with database configuration was detected. Please clean up and try again!', +]; \ No newline at end of file diff --git a/app/api/lang/en/user.php b/app/api/lang/en/user.php new file mode 100644 index 0000000..d857baf --- /dev/null +++ b/app/api/lang/en/user.php @@ -0,0 +1,13 @@ + 'Captcha', + 'captchaId' => 'Captcha ID', + 'Please input correct username' => 'Please enter the correct username.', + 'Please input correct password' => 'Please enter the correct password.', + 'Registration parameter error' => 'Wrong registration parameter', + 'Login succeeded!' => 'Login succeeded!', + 'Please enter the correct verification code' => 'Please enter the correct Captcha.', + 'You have already logged in. There is no need to log in again~' => 'You have already logged in, no need to log in again.', + 'Check in failed, please try again or contact the website administrator~' => 'Check in failed,please try again or contact the webmaster.', + 'Member center disabled' => 'The member centre has been disabled, please contact the webmaster to turn it on.', +]; \ No newline at end of file diff --git a/app/api/lang/zh-cn.php b/app/api/lang/zh-cn.php new file mode 100644 index 0000000..a125c99 --- /dev/null +++ b/app/api/lang/zh-cn.php @@ -0,0 +1,47 @@ + '%d秒前', + '%d minute%s ago' => '%d分钟前', + '%d hour%s ago' => '%d小时前', + '%d day%s ago' => '%d天前', + '%d week%s ago' => '%d周前', + '%d month%s ago' => '%d月前', + '%d year%s ago' => '%d年前', + '%d second%s after' => '%d秒后', + '%d minute%s after' => '%d分钟后', + '%d hour%s after' => '%d小时后', + '%d day%s after' => '%d天后', + '%d week%s after' => '%d周后', + '%d month%s after' => '%d月后', + '%d year%s after' => '%d年后', + // 时间格式化-e + // 文件上传-s + 'File uploaded successfully' => '文件上传成功!', + 'No files were uploaded' => '没有文件被上传', + 'The uploaded file format is not allowed' => '上传的文件格式未被允许', + 'The uploaded image file is not a valid image' => '上传的图片文件不是有效的图像', + 'The uploaded file is too large (%sMiB), Maximum file size:%sMiB' => '上传的文件太大(%sM),最大文件大小:%sM', + 'No files have been uploaded or the file size exceeds the upload limit of the server' => '没有文件被上传或文件大小超出服务器上传限制!', + 'Topic format error' => '上传存储子目录格式错误!', + 'Driver %s not supported' => '不支持的驱动:%s', + // 文件上传-e + 'Username' => '用户名', + 'Email' => '邮箱', + 'Mobile' => '手机号', + 'Password' => '密码', + 'Login expired, please login again.' => '登录过期,请重新登录。', + 'Account not exist' => '帐户不存在', + 'Account disabled' => '帐户已禁用', + 'Token login failed' => '令牌登录失败', + 'Please try again after 1 day' => '登录失败次数超限,请在1天后再试', + 'Password is incorrect' => '密码不正确', + 'You are not logged in' => '你没有登录', + 'Unknown operation' => '未知操作', + 'No action available, please contact the administrator~' => '没有可用操作,请联系管理员~', + 'Please login first' => '请先登录!', + 'You have no permission' => '没有权限操作!', + 'Parameter error' => '参数错误!', + 'Token expiration' => '登录态过期,请重新登录!', + 'Captcha error' => '验证码错误!', +]; \ No newline at end of file diff --git a/app/api/lang/zh-cn/account.php b/app/api/lang/zh-cn/account.php new file mode 100644 index 0000000..4f8be69 --- /dev/null +++ b/app/api/lang/zh-cn/account.php @@ -0,0 +1,22 @@ + '昵称', + 'birthday' => '生日', + 'captcha' => '验证码', + 'Old password error' => '旧密码错误', + 'Data updated successfully~' => '资料更新成功~', + 'Please input correct password' => '请输入正确的密码', + 'nicknameChsDash' => '用户名只能是汉字、字母、数字和下划线_及破折号-', + 'Password has been changed~' => '密码已修改~', + 'Password has been changed, please login again~' => '密码已修改,请重新登录~', + 'Account does not exist~' => '账户不存在~', + 'Failed to modify password, please try again later~' => '修改密码失败,请稍后重试~', + 'Please enter the correct verification code' => '请输入正确的验证码!', + '%s has been registered' => '%s已被注册,请直接登录~', + 'email format error' => '电子邮箱格式错误!', + 'mobile format error' => '手机号格式错误!', + 'You need to verify your account before modifying the binding information' => '您需要先通过账户验证才能修改绑定信息!', + 'Password error' => '密码错误!', + 'email is occupied' => '电子邮箱地址已被占用!', + 'mobile is occupied' => '手机号已被占用!', +]; \ No newline at end of file diff --git a/app/api/lang/zh-cn/ems.php b/app/api/lang/zh-cn/ems.php new file mode 100644 index 0000000..e75a328 --- /dev/null +++ b/app/api/lang/zh-cn/ems.php @@ -0,0 +1,18 @@ + '电子邮箱格式错误', + 'user_register' => '会员注册验证', + 'user_change_email' => '修改邮箱验证', + 'user_retrieve_pwd' => '找回密码验证', + 'user_email_verify' => '会员身份验证', + 'Your verification code is: %s' => '您的验证码是:%s,十分钟内有效~', + 'Mail sent successfully~' => '邮件发送成功~', + 'Account does not exist~' => '账户不存在~', + 'Mail sending service unavailable' => '邮件发送服务不可用,请联系网站管理员进行配置~', + 'Frequent email sending' => '频繁发送电子邮件', + 'Email has been registered, please log in directly' => '电子邮箱已注册,请直接登录~', + 'The email has been occupied' => '电子邮箱已被占用!', + 'Email not registered' => '电子邮箱未注册', + 'Please use the account registration email to send the verification code' => '请使用账户注册邮箱发送验证码!', + 'Password error' => '密码错误!', +]; \ No newline at end of file diff --git a/app/api/lang/zh-cn/install.php b/app/api/lang/zh-cn/install.php new file mode 100644 index 0000000..18117ea --- /dev/null +++ b/app/api/lang/zh-cn/install.php @@ -0,0 +1,44 @@ + '安装控制器', + 'need' => '需要', + 'Click to see how to solve it' => '点击查看如何解决', + 'Please check the config directory permissions' => '请检查 config 目录权限', + 'Please check the public directory permissions' => '请检查 public 目录权限', + 'open' => '开启', + 'close' => '关闭', + 'The installation can continue, and some operations need to be completed manually' => '可以继续安装,部分操作需手动完成', + 'Allow execution' => '允许执行', + 'disabled' => '已禁用', + 'Allow operation' => '允许操作', + 'Acquisition failed' => '获取失败', + 'Click Install %s' => '点击安装%s', + 'Writable' => '可写', + 'No write permission' => '无写权限', + 'already installed' => '已安装', + 'Not installed' => '未安装', + 'File has no write permission:%s' => '文件无写入权限:%s', + 'The system has completed installation. If you need to reinstall, please delete the %s file first' => '系统已完成安装。如果需要重新安装,请先删除 %s 文件', + 'Database connection failed:%s' => '数据库连接失败:%s', + 'Failed to install SQL execution:%s' => '安装SQL执行失败:%s', + 'unknown' => '未知', + 'Database does not exist' => '数据库不存在!', + 'No built front-end file found, please rebuild manually!' => '没有找到构建好的前端文件,请手动重新构建!', + 'Failed to move the front-end file, please move it manually!' => '移动前端文件失败,请手动移动!', + 'How to solve?' => '如何解决?', + 'View reason' => '查看原因', + 'Click to view the reason' => '点击查看原因', + 'PDO extensions need to be installed' => '需要安装 pdo_mysql 扩展', + 'proc_open or proc_close functions in PHP Ini is disabled' => 'proc_open和proc_close函数在php.ini中被禁用掉了', + 'How to modify' => '如何修改', + 'Click to view how to modify' => '点击查看如何修改', + 'Security assurance?' => '安全保证?', + 'Using the installation service correctly will not cause any potential security problems. Click to view the details' => '安装服务使用正确不会造成任何潜在安全问题,点击查看详情', + 'Please install NPM first' => '请先安装npm', + 'Installation error:%s' => '安装出错:%s', + 'Failed to switch package manager. Please modify the configuration file manually:%s' => '包管理器切换失败,请手动修改配置文件:%s', + 'Please upgrade %s version' => '请升级%s版本', + 'nothing' => '无', + 'The gd extension and freeType library need to be installed' => '需要gd2扩展和freeType库', + 'The .env file with database configuration was detected. Please clean up and try again!' => '检测到带有数据库配置的 .env 文件。请清理后再试一次!', +]; \ No newline at end of file diff --git a/app/api/lang/zh-cn/user.php b/app/api/lang/zh-cn/user.php new file mode 100644 index 0000000..3bb8591 --- /dev/null +++ b/app/api/lang/zh-cn/user.php @@ -0,0 +1,14 @@ + '验证码', + 'captchaId' => '验证码标识', + 'Register type' => '注册类型', + 'Please input correct username' => '请输入正确的用户名', + 'Please input correct password' => '请输入正确的密码', + 'Registration parameter error' => '注册参数错误', + 'Login succeeded!' => '登录成功', + 'Please enter the correct verification code' => '请输入正确的验证码', + 'You have already logged in. There is no need to log in again~' => '您已经登录过了,无需重复登录~', + 'Check in failed, please try again or contact the website administrator~' => '签入失败,请重试或联系网站管理员~', + 'Member center disabled' => '会员中心已禁用,请联系网站管理员开启。', +]; \ No newline at end of file diff --git a/app/api/middleware.php b/app/api/middleware.php new file mode 100644 index 0000000..8b6c89a --- /dev/null +++ b/app/api/middleware.php @@ -0,0 +1,5 @@ + 'require|regex:^[a-zA-Z][a-zA-Z0-9_]{2,15}$|unique:user', + 'nickname' => 'require|chsDash', + 'birthday' => 'date', + 'email' => 'require|email|unique:user', + 'mobile' => 'require|mobile|unique:user', + 'password' => 'require|regex:^(?!.*[&<>"\'\n\r]).{6,32}$', + 'account' => 'require', + 'captcha' => 'require', + ]; + + /** + * 验证场景 + */ + protected $scene = [ + 'edit' => ['username', 'nickname', 'birthday'], + 'changePassword' => ['password'], + 'retrievePassword' => ['account', 'captcha', 'password'], + ]; + + public function __construct() + { + $this->field = [ + 'username' => __('Username'), + 'email' => __('Email'), + 'mobile' => __('Mobile'), + 'password' => __('Password'), + 'nickname' => __('nickname'), + 'birthday' => __('birthday'), + ]; + $this->message = array_merge($this->message, [ + 'nickname.chsDash' => __('nicknameChsDash'), + 'password.regex' => __('Please input correct password') + ]); + parent::__construct(); + } +} \ No newline at end of file diff --git a/app/api/validate/User.php b/app/api/validate/User.php new file mode 100644 index 0000000..4182945 --- /dev/null +++ b/app/api/validate/User.php @@ -0,0 +1,67 @@ + 'require|regex:^[a-zA-Z][a-zA-Z0-9_]{2,15}$|unique:user', + 'password' => 'require|regex:^(?!.*[&<>"\'\n\r]).{6,32}$', + 'registerType' => 'require|in:email,mobile', + 'email' => 'email|unique:user|requireIf:registerType,email', + 'mobile' => 'mobile|unique:user|requireIf:registerType,mobile', + // 注册邮箱或手机验证码 + 'captcha' => 'require', + // 登录点选验证码 + 'captchaId' => 'require', + 'captchaInfo' => 'require', + ]; + + /** + * 验证场景 + */ + protected $scene = [ + 'register' => ['username', 'password', 'registerType', 'email', 'mobile', 'captcha'], + ]; + + /** + * 登录验证场景 + */ + public function sceneLogin(): User + { + $fields = ['username', 'password']; + + // 根据系统配置的登录验证码开关调整验证场景的字段 + $userLoginCaptchaSwitch = Config::get('buildadmin.user_login_captcha'); + if ($userLoginCaptchaSwitch) { + $fields[] = 'captchaId'; + $fields[] = 'captchaInfo'; + } + + return $this->only($fields)->remove('username', ['regex', 'unique']); + } + + public function __construct() + { + $this->field = [ + 'username' => __('Username'), + 'email' => __('Email'), + 'mobile' => __('Mobile'), + 'password' => __('Password'), + 'captcha' => __('captcha'), + 'captchaId' => __('captchaId'), + 'captchaInfo' => __('captcha'), + 'registerType' => __('Register type'), + ]; + $this->message = array_merge($this->message, [ + 'username.regex' => __('Please input correct username'), + 'password.regex' => __('Please input correct password') + ]); + parent::__construct(); + } +} \ No newline at end of file diff --git a/app/common.php b/app/common.php new file mode 100644 index 0000000..f4e3b21 --- /dev/null +++ b/app/common.php @@ -0,0 +1,508 @@ +removeEvilAttributes(['style']); + + // 检查到 xss 代码之后使用 cleanXss 替换它 + $antiXss->setReplacement('cleanXss'); + + return $antiXss->xss_clean($string); + } +} + +if (!function_exists('htmlspecialchars_decode_improve')) { + /** + * html解码增强 + * 被 filter函数 内的 htmlspecialchars 编码的字符串,需要用此函数才能完全解码 + * @param string $string + * @param int $flags + * @return string + */ + function htmlspecialchars_decode_improve(string $string, int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401): string + { + return htmlspecialchars_decode($string, $flags); + } +} + +if (!function_exists('get_sys_config')) { + + /** + * 获取站点的系统配置,不传递参数则获取所有配置项 + * @param string $name 变量名 + * @param string $group 变量分组,传递此参数来获取某个分组的所有配置项 + * @param bool $concise 是否开启简洁模式,简洁模式下,获取多项配置时只返回配置的键值对 + * @return mixed + * @throws Throwable + */ + function get_sys_config(string $name = '', string $group = '', bool $concise = true): mixed + { + if ($name) { + // 直接使用->value('value')不能使用到模型的类型格式化 + $config = configModel::cache($name, null, configModel::$cacheTag)->where('name', $name)->find(); + if ($config) $config = $config['value']; + } else { + if ($group) { + $temp = configModel::cache('group' . $group, null, configModel::$cacheTag)->where('group', $group)->select()->toArray(); + } else { + $temp = configModel::cache('sys_config_all', null, configModel::$cacheTag)->order('weigh desc')->select()->toArray(); + } + if ($concise) { + $config = []; + foreach ($temp as $item) { + $config[$item['name']] = $item['value']; + } + } else { + $config = $temp; + } + } + return $config; + } +} + +if (!function_exists('get_route_remark')) { + + /** + * 获取当前路由后台菜单规则的备注信息 + * @return string + */ + function get_route_remark(): string + { + $controllerName = request()->controller(true); + $actionName = request()->action(true); + $path = str_replace('.', '/', $controllerName); + + $remark = Db::name('admin_rule') + ->where('name', $path) + ->whereOr('name', $path . '/' . $actionName) + ->value('remark'); + return __((string)$remark); + } +} + +if (!function_exists('full_url')) { + + /** + * 获取资源完整url地址;若安装了云存储或 config/buildadmin.php 配置了CdnUrl,则自动使用对应的CdnUrl + * @param string $relativeUrl 资源相对地址 不传入则获取域名 + * @param string|bool $domain 是否携带域名 或者直接传入域名 + * @param string $default 默认值 + * @return string + */ + function full_url(string $relativeUrl = '', string|bool $domain = true, string $default = ''): string + { + // 存储/上传资料配置 + Event::trigger('uploadConfigInit', App::getInstance()); + + $cdnUrl = Config::get('buildadmin.cdn_url'); + if (!$cdnUrl) { + $cdnUrl = request()->upload['cdn'] ?? '//' . request()->host(); + } + + if ($domain === true) { + $domain = $cdnUrl; + } elseif ($domain === false) { + $domain = ''; + } + + $relativeUrl = $relativeUrl ?: $default; + if (!$relativeUrl) return $domain; + + $regex = "/^((?:[a-z]+:)?\/\/|data:image\/)(.*)/i"; + if (preg_match('/^http(s)?:\/\//', $relativeUrl) || preg_match($regex, $relativeUrl) || $domain === false) { + return $relativeUrl; + } + + $url = $domain . $relativeUrl; + $cdnUrlParams = Config::get('buildadmin.cdn_url_params'); + if ($domain === $cdnUrl && $cdnUrlParams) { + $separator = str_contains($url, '?') ? '&' : '?'; + $url .= $separator . $cdnUrlParams; + } + + return $url; + } +} + +if (!function_exists('encrypt_password')) { + + /** + * 加密密码 + * @deprecated 使用 hash_password 代替 + */ + function encrypt_password($password, $salt = '', $encrypt = 'md5') + { + return $encrypt($encrypt($password) . $salt); + } +} + +if (!function_exists('hash_password')) { + + /** + * 创建密码散列(hash) + */ + function hash_password(string $password): string + { + return password_hash($password, PASSWORD_DEFAULT); + } +} + +if (!function_exists('verify_password')) { + + /** + * 验证密码是否和散列值匹配 + * @param string $password 密码 + * @param string $hash 散列值 + * @param array $extend 扩展数据 + */ + function verify_password(string $password, string $hash, array $extend = []): bool + { + // 第一个表达式直接检查是否为 password_hash 函数创建的 hash 的典型格式,即:$algo$cost$salt.hash + if (str_starts_with($hash, '$') || password_get_info($hash)['algoName'] != 'unknown') { + return password_verify($password, $hash); + } else { + // 兼容旧版 md5 加密的密码 + return encrypt_password($password, $extend['salt'] ?? '') === $hash; + } + } +} + +if (!function_exists('str_attr_to_array')) { + + /** + * 将字符串属性列表转为数组 + * @param string $attr 属性,一行一个,无需引号,比如:class=input-class + * @return array + */ + function str_attr_to_array(string $attr): array + { + if (!$attr) return []; + $attr = explode("\n", trim(str_replace("\r\n", "\n", $attr))); + $attrTemp = []; + foreach ($attr as $item) { + $item = explode('=', $item); + if (isset($item[0]) && isset($item[1])) { + $attrVal = $item[1]; + if ($item[1] === 'false' || $item[1] === 'true') { + $attrVal = !($item[1] === 'false'); + } elseif (is_numeric($item[1])) { + $attrVal = (float)$item[1]; + } + if (strpos($item[0], '.')) { + $attrKey = explode('.', $item[0]); + if (isset($attrKey[0]) && isset($attrKey[1])) { + $attrTemp[$attrKey[0]][$attrKey[1]] = $attrVal; + continue; + } + } + $attrTemp[$item[0]] = $attrVal; + } + } + return $attrTemp; + } +} + +if (!function_exists('action_in_arr')) { + + /** + * 检测一个方法是否在传递的数组内 + * @param array $arr + * @return bool + */ + function action_in_arr(array $arr = []): bool + { + $arr = is_array($arr) ? $arr : explode(',', $arr); + if (!$arr) { + return false; + } + $arr = array_map('strtolower', $arr); + if (in_array(strtolower(request()->action()), $arr) || in_array('*', $arr)) { + return true; + } + return false; + } +} + +if (!function_exists('build_suffix_svg')) { + + /** + * 构建文件后缀的svg图片 + * @param string $suffix 文件后缀 + * @param ?string $background 背景颜色,如:rgb(255,255,255) + * @return string + */ + function build_suffix_svg(string $suffix = 'file', ?string $background = null): string + { + $suffix = mb_substr(strtoupper($suffix), 0, 4); + $total = unpack('L', hash('adler32', $suffix, true))[1]; + $hue = $total % 360; + [$r, $g, $b] = hsv2rgb($hue / 360, 0.3, 0.9); + + $background = $background ?: "rgb($r,$g,$b)"; + + return ' + + + + + + ' . $suffix . ' + '; + } +} + +if (!function_exists('get_area')) { + + /** + * 获取省份地区数据 + * @throws Throwable + */ + function get_area(): array + { + $province = request()->get('province', ''); + $city = request()->get('city', ''); + $where = ['pid' => 0, 'level' => 1]; + if ($province !== '') { + $where['pid'] = $province; + $where['level'] = 2; + if ($city !== '') { + $where['pid'] = $city; + $where['level'] = 3; + } + } + return Db::name('area') + ->where($where) + ->field('id as value,name as label') + ->select() + ->toArray(); + } +} + +if (!function_exists('hsv2rgb')) { + function hsv2rgb($h, $s, $v): array + { + $r = $g = $b = 0; + + $i = floor($h * 6); + $f = $h * 6 - $i; + $p = $v * (1 - $s); + $q = $v * (1 - $f * $s); + $t = $v * (1 - (1 - $f) * $s); + + switch ($i % 6) { + case 0: + $r = $v; + $g = $t; + $b = $p; + break; + case 1: + $r = $q; + $g = $v; + $b = $p; + break; + case 2: + $r = $p; + $g = $v; + $b = $t; + break; + case 3: + $r = $p; + $g = $q; + $b = $v; + break; + case 4: + $r = $t; + $g = $p; + $b = $v; + break; + case 5: + $r = $v; + $g = $p; + $b = $q; + break; + } + + return [ + floor($r * 255), + floor($g * 255), + floor($b * 255) + ]; + } +} + +if (!function_exists('ip_check')) { + + /** + * IP检查 + * @throws Throwable + */ + function ip_check($ip = null): void + { + $ip = is_null($ip) ? request()->ip() : $ip; + $noAccess = get_sys_config('no_access_ip'); + $noAccess = !$noAccess ? [] : array_filter(explode("\n", str_replace("\r\n", "\n", $noAccess))); + if ($noAccess && IpUtils::checkIp($ip, $noAccess)) { + $response = Response::create(['msg' => 'No permission request'], 'json', 403); + throw new HttpResponseException($response); + } + } +} + +if (!function_exists('set_timezone')) { + + /** + * 设置时区 + * @throws Throwable + */ + function set_timezone($timezone = null): void + { + $defaultTimezone = Config::get('app.default_timezone'); + $timezone = is_null($timezone) ? get_sys_config('time_zone') : $timezone; + if ($timezone && $defaultTimezone != $timezone) { + Config::set([ + 'app.default_timezone' => $timezone + ]); + date_default_timezone_set($timezone); + } + } +} + +if (!function_exists('get_upload_config')) { + + /** + * 获取上传配置 + * @return array + */ + function get_upload_config(): array + { + // 存储/上传资料配置 + Event::trigger('uploadConfigInit', App::getInstance()); + + $uploadConfig = Config::get('upload'); + $uploadConfig['max_size'] = Filesystem::fileUnitToByte($uploadConfig['max_size']); + + $upload = request()->upload; + if (!$upload) { + $uploadConfig['mode'] = 'local'; + return $uploadConfig; + } + unset($upload['cdn']); + return array_merge($upload, $uploadConfig); + } +} + +if (!function_exists('get_auth_token')) { + + /** + * 获取鉴权 token + * @param array $names + * @return string + */ + function get_auth_token(array $names = ['ba', 'token']): string + { + $separators = [ + 'header' => ['', '-'], // batoken、ba-token【ba_token 不在 header 的接受列表内因为兼容性不高,改用 http_ba_token】 + 'param' => ['', '-', '_'], // batoken、ba-token、ba_token + 'server' => ['_'], // http_ba_token + ]; + + $tokens = []; + $request = request(); + foreach ($separators as $fun => $sps) { + foreach ($sps as $sp) { + $tokens[] = $request->$fun(($fun == 'server' ? 'http_' : '') . implode($sp, $names)); + } + } + $tokens = array_filter($tokens); + return array_values($tokens)[0] ?? ''; + } +} + +if (!function_exists('keys_to_camel_case')) { + + /** + * 将数组 key 的命名方式转换为小写驼峰 + * @param array $array 被转换的数组 + * @param array $keys 要转换的 key,默认所有 + * @return array + */ + function keys_to_camel_case(array $array, array $keys = []): array + { + $result = []; + foreach ($array as $key => $value) { + // 将键名转换为驼峰命名 + $camelCaseKey = $keys && in_array($key, $keys) ? parse_name($key, 1, false) : $key; + + if (is_array($value)) { + // 如果值是数组,递归转换 + $result[$camelCaseKey] = keys_to_camel_case($value); + } else { + $result[$camelCaseKey] = $value; + } + } + return $result; + } +} diff --git a/app/common/controller/Api.php b/app/common/controller/Api.php new file mode 100644 index 0000000..7c6abd0 --- /dev/null +++ b/app/common/controller/Api.php @@ -0,0 +1,117 @@ +useSystemSettings) { + // 检查数据库连接 + try { + Db::execute("SELECT 1"); + } catch (PDOException $e) { + $this->error(mb_convert_encoding($e->getMessage(), 'UTF-8', 'UTF-8,GBK,GB2312,BIG5')); + } + + ip_check(); // ip检查 + set_timezone(); // 时区设定 + } + + parent::initialize(); + + // 加载控制器语言包 + $langSet = $this->app->lang->getLangSet(); + $this->app->lang->load([ + app_path() . 'lang' . DIRECTORY_SEPARATOR . $langSet . DIRECTORY_SEPARATOR . (str_replace('/', DIRECTORY_SEPARATOR, $this->app->request->controllerPath)) . '.php' + ]); + } + + /** + * 操作成功 + * @param string $msg 提示消息 + * @param mixed $data 返回数据 + * @param int $code 错误码 + * @param string|null $type 输出类型 + * @param array $header 发送的 header 信息 + * @param array $options Response 输出参数 + */ + protected function success(string $msg = '', mixed $data = null, int $code = 1, ?string $type = null, array $header = [], array $options = []): void + { + $this->result($msg, $data, $code, $type, $header, $options); + } + + /** + * 操作失败 + * @param string $msg 提示消息 + * @param mixed $data 返回数据 + * @param int $code 错误码 + * @param string|null $type 输出类型 + * @param array $header 发送的 header 信息 + * @param array $options Response 输出参数 + */ + protected function error(string $msg = '', mixed $data = null, int $code = 0, ?string $type = null, array $header = [], array $options = []): void + { + $this->result($msg, $data, $code, $type, $header, $options); + } + + /** + * 返回 API 数据 + * @param string $msg 提示消息 + * @param mixed $data 返回数据 + * @param int $code 错误码 + * @param string|null $type 输出类型 + * @param array $header 发送的 header 信息 + * @param array $options Response 输出参数 + */ + public function result(string $msg, mixed $data = null, int $code = 0, ?string $type = null, array $header = [], array $options = []) + { + $result = [ + 'code' => $code, + 'msg' => $msg, + 'time' => $this->request->server('REQUEST_TIME'), + 'data' => $data, + ]; + + $type = $type ?: $this->responseType; + $code = $header['statusCode'] ?? 200; + + $response = Response::create($result, $type, $code)->header($header)->options($options); + throw new HttpResponseException($response); + } + +} diff --git a/app/common/controller/Backend.php b/app/common/controller/Backend.php new file mode 100644 index 0000000..8e1a266 --- /dev/null +++ b/app/common/controller/Backend.php @@ -0,0 +1,383 @@ + 'desc'] + */ + protected string|array $defaultSortField = []; + + /** + * 有序保证 + * 查询数据时总是需要指定 ORDER BY 子句,否则 MySQL 不保证排序,即先查到哪行就输出哪行且不保证多次查询中的输出顺序 + * 将以下配置作为数据有序保证(用于无排序字段时、默认排序字段相同时继续保持数据有序),不设置将自动使用 pk 字段 + * @var string|array id,desc 或 ['id' => 'desc'](有更方便的格式,此处为了保持和 $defaultSortField 属性的配置格式一致) + */ + protected string|array $orderGuarantee = []; + + /** + * 快速搜索字段 + * @var string|array + */ + protected string|array $quickSearchField = 'id'; + + /** + * 是否开启模型验证 + * @var bool + */ + protected bool $modelValidate = true; + + /** + * 是否开启模型场景验证 + * @var bool + */ + protected bool $modelSceneValidate = false; + + /** + * 关联查询方法名,方法应定义在模型中 + * @var array + */ + protected array $withJoinTable = []; + + /** + * 关联查询JOIN方式 + * @var string + */ + protected string $withJoinType = 'LEFT'; + + /** + * 开启数据限制 + * false=关闭 + * personal=仅限个人 + * allAuth=拥有某管理员所有的权限时 + * allAuthAndOthers=拥有某管理员所有的权限并且还有其他权限时 + * parent=上级分组中的管理员可查 + * 指定分组中的管理员可查,比如 $dataLimit = 2; + * 启用请确保数据表内存在 admin_id 字段,可以查询/编辑数据的管理员为admin_id对应的管理员+数据限制所表示的管理员们 + * @var bool|string|int + */ + protected bool|string|int $dataLimit = false; + + /** + * 数据限制字段 + * @var string + */ + protected string $dataLimitField = 'admin_id'; + + /** + * 数据限制开启时自动填充字段值为当前管理员id + * @var bool + */ + protected bool $dataLimitFieldAutoFill = true; + + /** + * 查看请求返回的主表字段控制 + * @var string|array + */ + protected string|array $indexField = ['*']; + + /** + * 引入traits + * traits内实现了index、add、edit等方法 + */ + use \app\admin\library\traits\Backend; + + /** + * 初始化 + * @throws Throwable + */ + public function initialize(): void + { + parent::initialize(); + + $needLogin = !action_in_arr($this->noNeedLogin); + + try { + + // 初始化管理员鉴权实例 + $this->auth = Auth::instance(); + $token = get_auth_token(); + if ($token) $this->auth->init($token); + + } catch (TokenExpirationException) { + if ($needLogin) { + $this->error(__('Token expiration'), [], 409); + } + } + + if ($needLogin) { + if (!$this->auth->isLogin()) { + $this->error(__('Please login first'), [ + 'type' => $this->auth::NEED_LOGIN + ], $this->auth::LOGIN_RESPONSE_CODE); + } + if (!action_in_arr($this->noNeedPermission)) { + $routePath = ($this->app->request->controllerPath ?? '') . '/' . $this->request->action(true); + if (!$this->auth->check($routePath)) { + $this->error(__('You have no permission'), [], 401); + } + } + } + + // 管理员验权和登录标签位 + Event::trigger('backendInit', $this->auth); + } + + /** + * 查询参数构建器 + * @throws Throwable + */ + public function queryBuilder(): array + { + if (empty($this->model)) { + return []; + } + $pk = $this->model->getPk(); + $quickSearch = $this->request->get("quickSearch/s", ''); + $limit = $this->request->get("limit/d", 10); + $search = $this->request->get("search/a", []); + $initKey = $this->request->get("initKey/s", $pk); + $initValue = $this->request->get("initValue", ''); + $initOperator = $this->request->get("initOperator/s", 'in'); + + $where = []; + $modelTable = strtolower($this->model->getTable()); + $alias[$modelTable] = parse_name(basename(str_replace('\\', '/', get_class($this->model)))); + $mainTableAlias = $alias[$modelTable] . '.'; + + // 快速搜索 + if ($quickSearch) { + $quickSearchArr = is_array($this->quickSearchField) ? $this->quickSearchField : explode(',', $this->quickSearchField); + foreach ($quickSearchArr as $k => $v) { + $quickSearchArr[$k] = str_contains($v, '.') ? $v : $mainTableAlias . $v; + } + $where[] = [implode("|", $quickSearchArr), "LIKE", '%' . str_replace('%', '\%', $quickSearch) . '%']; + } + if ($initValue) { + $where[] = [$initKey, $initOperator, $initValue]; + $limit = 999999; + } + + // 通用搜索组装 + foreach ($search as $field) { + if (!is_array($field) || !isset($field['operator']) || !isset($field['field']) || !isset($field['val'])) { + continue; + } + + $field['operator'] = $this->getOperatorByAlias($field['operator']); + + // 查询关联表字段,转换表别名(驼峰转小写下划线) + if (str_contains($field['field'], '.')) { + $fieldNameParts = explode('.', $field['field']); + $fieldNamePartsLastKey = array_key_last($fieldNameParts); + + // 忽略最后一个元素(字段名) + foreach ($fieldNameParts as $fieldNamePartsKey => $fieldNamePart) { + if ($fieldNamePartsKey !== $fieldNamePartsLastKey) { + $fieldNameParts[$fieldNamePartsKey] = parse_name($fieldNamePart); + } + } + + $fieldName = implode('.', $fieldNameParts); + } else { + $fieldName = $mainTableAlias . $field['field']; + } + + // 日期时间 + if (isset($field['render']) && $field['render'] == 'datetime') { + if ($field['operator'] == 'RANGE') { + $datetimeArr = explode(',', $field['val']); + if (!isset($datetimeArr[1])) { + continue; + } + $datetimeArr = array_filter(array_map("strtotime", $datetimeArr)); + $where[] = [$fieldName, str_replace('RANGE', 'BETWEEN', $field['operator']), $datetimeArr]; + continue; + } + $where[] = [$fieldName, '=', strtotime($field['val'])]; + continue; + } + + // 范围查询 + if ($field['operator'] == 'RANGE' || $field['operator'] == 'NOT RANGE') { + $arr = explode(',', $field['val']); + // 重新确定操作符 + if (!isset($arr[0]) || $arr[0] === '') { + $operator = $field['operator'] == 'RANGE' ? '<=' : '>'; + $arr = $arr[1]; + } elseif (!isset($arr[1]) || $arr[1] === '') { + $operator = $field['operator'] == 'RANGE' ? '>=' : '<'; + $arr = $arr[0]; + } else { + $operator = str_replace('RANGE', 'BETWEEN', $field['operator']); + } + $where[] = [$fieldName, $operator, $arr]; + continue; + } + + switch ($field['operator']) { + case '=': + case '<>': + $where[] = [$fieldName, $field['operator'], (string)$field['val']]; + break; + case 'LIKE': + case 'NOT LIKE': + $where[] = [$fieldName, $field['operator'], '%' . str_replace('%', '\%', $field['val']) . '%']; + break; + case '>': + case '>=': + case '<': + case '<=': + $where[] = [$fieldName, $field['operator'], intval($field['val'])]; + break; + case 'FIND_IN_SET': + if (is_array($field['val'])) { + foreach ($field['val'] as $val) { + $where[] = [$fieldName, 'find in set', $val]; + } + } else { + $where[] = [$fieldName, 'find in set', $field['val']]; + } + break; + case 'IN': + case 'NOT IN': + $where[] = [$fieldName, $field['operator'], is_array($field['val']) ? $field['val'] : explode(',', $field['val'])]; + break; + case 'NULL': + case 'NOT NULL': + $where[] = [$fieldName, strtolower($field['operator']), '']; + break; + } + } + + // 数据权限 + $dataLimitAdminIds = $this->getDataLimitAdminIds(); + if ($dataLimitAdminIds) { + $where[] = [$mainTableAlias . $this->dataLimitField, 'in', $dataLimitAdminIds]; + } + + return [$where, $alias, $limit, $this->queryOrderBuilder()]; + } + + /** + * 查询的排序参数构建器 + */ + public function queryOrderBuilder() + { + $pk = $this->model->getPk(); + $order = $this->request->get("order/s") ?: $this->defaultSortField; + + if ($order && is_string($order)) { + $order = explode(',', $order); + $order = [$order[0] => $order[1] ?? 'asc']; + } + if (!$this->orderGuarantee) { + $this->orderGuarantee = [$pk => 'desc']; + } elseif (is_string($this->orderGuarantee)) { + $this->orderGuarantee = explode(',', $this->orderGuarantee); + $this->orderGuarantee = [$this->orderGuarantee[0] => $this->orderGuarantee[1] ?? 'asc']; + } + $orderGuaranteeKey = array_key_first($this->orderGuarantee); + if (!array_key_exists($orderGuaranteeKey, $order)) { + $order[$orderGuaranteeKey] = $this->orderGuarantee[$orderGuaranteeKey]; + } + + return $order; + } + + /** + * 数据权限控制-获取有权限访问的管理员Ids + * @throws Throwable + */ + protected function getDataLimitAdminIds(): array + { + if (!$this->dataLimit || $this->auth->isSuperAdmin()) { + return []; + } + $adminIds = []; + if ($this->dataLimit == 'parent') { + // 取得当前管理员的下级分组们 + $parentGroups = $this->auth->getAdminChildGroups(); + if ($parentGroups) { + // 取得分组内的所有管理员 + $adminIds = $this->auth->getGroupAdmins($parentGroups); + } + } elseif (is_numeric($this->dataLimit) && $this->dataLimit > 0) { + // 在组内,可查看所有,不在组内,可查看自己的 + $adminIds = $this->auth->getGroupAdmins([$this->dataLimit]); + return in_array($this->auth->id, $adminIds) ? [] : [$this->auth->id]; + } elseif ($this->dataLimit == 'allAuth' || $this->dataLimit == 'allAuthAndOthers') { + // 取得拥有他所有权限的分组 + $allAuthGroups = $this->auth->getAllAuthGroups($this->dataLimit); + // 取得分组内的所有管理员 + $adminIds = $this->auth->getGroupAdmins($allAuthGroups); + } + $adminIds[] = $this->auth->id; + return array_unique($adminIds); + } + + /** + * 从别名获取原始的逻辑运算符 + * @param string $operator 逻辑运算符别名 + * @return string 原始的逻辑运算符,无别名则原样返回 + */ + protected function getOperatorByAlias(string $operator): string + { + $alias = [ + 'ne' => '<>', + 'eq' => '=', + 'gt' => '>', + 'egt' => '>=', + 'lt' => '<', + 'elt' => '<=', + ]; + + return $alias[$operator] ?? $operator; + } +} \ No newline at end of file diff --git a/app/common/controller/Frontend.php b/app/common/controller/Frontend.php new file mode 100644 index 0000000..909d1ae --- /dev/null +++ b/app/common/controller/Frontend.php @@ -0,0 +1,73 @@ +noNeedLogin); + + try { + + // 初始化会员鉴权实例 + $this->auth = Auth::instance(); + $token = get_auth_token(['ba', 'user', 'token']); + if ($token) $this->auth->init($token); + + } catch (TokenExpirationException) { + if ($needLogin) { + $this->error(__('Token expiration'), [], 409); + } + } + + if ($needLogin) { + if (!$this->auth->isLogin()) { + $this->error(__('Please login first'), [ + 'type' => $this->auth::NEED_LOGIN + ], $this->auth::LOGIN_RESPONSE_CODE); + } + if (!action_in_arr($this->noNeedPermission)) { + $routePath = ($this->app->request->controllerPath ?? '') . '/' . $this->request->action(true); + if (!$this->auth->check($routePath)) { + $this->error(__('You have no permission'), [], 401); + } + } + } + + // 会员验权和登录标签位 + Event::trigger('frontendInit', $this->auth); + } +} \ No newline at end of file diff --git a/app/common/event/Security.php b/app/common/event/Security.php new file mode 100644 index 0000000..712d643 --- /dev/null +++ b/app/common/event/Security.php @@ -0,0 +1,139 @@ +action(true); + if (!in_array($action, $this->listenAction) || (!$request->isPost() && !$request->isDelete())) { + return true; + } + + if ($action == 'del') { + $dataIds = $request->param('ids'); + try { + $recycle = DataRecycle::where('status', 1) + ->where('controller_as', $request->controllerPath) + ->find(); + if (!$recycle) { + return true; + } + + $recycleData = Db::connect(TableManager::getConnection($recycle['connection'])) + ->name($recycle['data_table']) + ->whereIn($recycle['primary_key'], $dataIds) + ->select() + ->toArray(); + $recycleDataArr = []; + $auth = Auth::instance(); + $adminId = $auth->isLogin() ? $auth->id : 0; + foreach ($recycleData as $recycleDatum) { + $recycleDataArr[] = [ + 'admin_id' => $adminId, + 'recycle_id' => $recycle['id'], + 'data' => json_encode($recycleDatum, JSON_UNESCAPED_UNICODE), + 'connection' => $recycle['connection'], + 'data_table' => $recycle['data_table'], + 'primary_key' => $recycle['primary_key'], + 'ip' => $request->ip(), + 'useragent' => substr($request->server('HTTP_USER_AGENT'), 0, 255), + ]; + } + if (!$recycleDataArr) { + return true; + } + + // saveAll 方法自带事务 + $dataRecycleLogModel = new DataRecycleLog(); + if (!$dataRecycleLogModel->saveAll($recycleDataArr)) { + Log::record('[ DataSecurity ] Failed to recycle data:' . var_export($recycleDataArr, true), 'warning'); + } + } catch (Throwable $e) { + Log::record('[ DataSecurity ]' . $e->getMessage(), 'warning'); + } + return true; + } + + try { + $sensitiveData = SensitiveData::where('status', 1) + ->where('controller_as', $request->controllerPath) + ->find(); + if (!$sensitiveData) { + return true; + } + + $sensitiveData = $sensitiveData->toArray(); + $dataId = $request->param($sensitiveData['primary_key']); + $editData = Db::connect(TableManager::getConnection($sensitiveData['connection'])) + ->name($sensitiveData['data_table']) + ->field(array_keys($sensitiveData['data_fields'])) + ->where($sensitiveData['primary_key'], $dataId) + ->find(); + if (!$editData) { + return true; + } + + $auth = Auth::instance(); + $adminId = $auth->isLogin() ? $auth->id : 0; + $newData = $request->post(); + foreach ($sensitiveData['data_fields'] as $field => $title) { + if (isset($editData[$field]) && isset($newData[$field]) && $editData[$field] != $newData[$field]) { + + /* + * 其他跳过规则可添加至此处 + * 1. 如果字段名中包含 password,修改值为空则忽略,修改值不为空,则密码记录为 ****** + */ + if (stripos('password', $field) !== false) { + if (!$newData[$field]) { + continue; + } else { + $newData[$field] = "******"; + } + } + + $sensitiveDataLog[] = [ + 'admin_id' => $adminId, + 'sensitive_id' => $sensitiveData['id'], + 'connection' => $sensitiveData['connection'], + 'data_table' => $sensitiveData['data_table'], + 'primary_key' => $sensitiveData['primary_key'], + 'data_field' => $field, + 'data_comment' => $title, + 'id_value' => $dataId, + 'before' => $editData[$field], + 'after' => $newData[$field], + 'ip' => $request->ip(), + 'useragent' => substr($request->server('HTTP_USER_AGENT'), 0, 255), + ]; + } + } + + if (!isset($sensitiveDataLog) || !$sensitiveDataLog) { + return true; + } + + $sensitiveDataLogModel = new SensitiveDataLog(); + if (!$sensitiveDataLogModel->saveAll($sensitiveDataLog)) { + Log::record('[ DataSecurity ] Sensitive data recording failed:' . var_export($sensitiveDataLog, true), 'warning'); + } + } catch (Throwable $e) { + Log::record('[ DataSecurity ]' . $e->getMessage(), 'warning'); + } + return true; + } +} \ No newline at end of file diff --git a/app/common/facade/Token.php b/app/common/facade/Token.php new file mode 100644 index 0000000..bfa0a57 --- /dev/null +++ b/app/common/facade/Token.php @@ -0,0 +1,24 @@ + 'user_group', // 用户组数据表名 + 'auth_group_access' => '', // 用户-用户组关系表(关系字段) + 'auth_rule' => 'user_rule', // 权限规则表 + ], $config)); + + $this->setKeepTime((int)Config::get('buildadmin.user_token_keep_time')); + } + + /** + * 魔术方法-会员信息字段 + * @param $name + * @return mixed 字段信息 + */ + public function __get($name): mixed + { + return $this->model?->$name; + } + + /** + * 初始化 + * @access public + * @param array $options 传递给 /ba/Auth 的参数 + * @return Auth + */ + public static function instance(array $options = []): Auth + { + $request = request(); + if (!isset($request->userAuth)) { + $request->userAuth = new static($options); + } + return $request->userAuth; + } + + /** + * 根据Token初始化会员登录态 + * @param $token + * @return bool + * @throws Throwable + */ + public function init($token): bool + { + $tokenData = Token::get($token); + if ($tokenData) { + + /** + * 过期检查,过期则抛出 @see TokenExpirationException + */ + Token::tokenExpirationCheck($tokenData); + + $userId = intval($tokenData['user_id']); + if ($tokenData['type'] == self::TOKEN_TYPE && $userId > 0) { + $this->model = User::where('id', $userId)->find(); + if (!$this->model) { + $this->setError('Account not exist'); + return false; + } + if ($this->model->status != 'enable') { + $this->setError('Account disabled'); + return false; + } + $this->token = $token; + $this->loginSuccessful(); + return true; + } + } + + $this->setError('Token login failed'); + $this->reset(); + return false; + } + + /** + * 会员注册,可使用关键词参数方式调用:$auth->register('u18888888888', email: 'test@qq.com') + * @param string $username + * @param string $password + * @param string $mobile + * @param string $email + * @param int $group 会员分组 ID 号 + * @param array $extend 扩展数据,如 ['status' => 'disable'] + * @return bool + */ + public function register(string $username, string $password = '', string $mobile = '', string $email = '', int $group = 1, array $extend = []): bool + { + $validate = Validate::rule([ + 'email|' . __('Email') => 'email|unique:user', + 'mobile|' . __('Mobile') => 'mobile|unique:user', + 'username|' . __('Username') => 'require|regex:^[a-zA-Z][a-zA-Z0-9_]{2,15}$|unique:user', + 'password|' . __('Password') => 'regex:^(?!.*[&<>"\'\n\r]).{6,32}$', + ]); + $params = [ + 'username' => $username, + 'password' => $password, + 'mobile' => $mobile, + 'email' => $email, + ]; + if (!$validate->check($params)) { + $this->setError($validate->getError()); + return false; + } + + // 用户昵称 + $nickname = preg_replace_callback('/1[3-9]\d{9}/', function ($matches) { + // 对 username 中出现的所有手机号进行脱敏处理 + $mobile = $matches[0]; + return substr($mobile, 0, 3) . '****' . substr($mobile, 7); + }, $username); + + $ip = request()->ip(); + $time = time(); + $data = [ + 'group_id' => $group, + 'nickname' => $nickname, + 'join_ip' => $ip, + 'join_time' => $time, + 'last_login_ip' => $ip, + 'last_login_time' => $time, + 'status' => 'enable', // 状态:enable=启用,disable=禁用,使用 string 存储可以自定义其他状态 + ]; + $data = array_merge($params, $data); + $data = array_merge($data, $extend); + + Db::startTrans(); + try { + $this->model = User::create($data); + $this->token = Random::uuid(); + Token::set($this->token, self::TOKEN_TYPE, $this->model->id, $this->keepTime); + Db::commit(); + + if ($password) { + $this->model->resetPassword($this->model->id, $password); + } + + Event::trigger('userRegisterSuccess', $this->model); + } catch (Throwable $e) { + $this->setError($e->getMessage()); + Db::rollback(); + return false; + } + return true; + } + + /** + * 会员登录 + * @param string $username 用户名 + * @param string $password 密码 + * @param bool $keep 是否保持登录 + * @return bool + * @throws Throwable + */ + public function login(string $username, string $password, bool $keep): bool + { + // 判断账户类型 + $accountType = false; + $validate = Validate::rule([ + 'mobile' => 'mobile', + 'email' => 'email', + 'username' => 'regex:^[a-zA-Z][a-zA-Z0-9_]{2,15}$', + ]); + if ($validate->check(['mobile' => $username])) $accountType = 'mobile'; + if ($validate->check(['email' => $username])) $accountType = 'email'; + if ($validate->check(['username' => $username])) $accountType = 'username'; + if (!$accountType) { + $this->setError('Account not exist'); + return false; + } + + $this->model = User::where($accountType, $username)->find(); + if (!$this->model) { + $this->setError('Account not exist'); + return false; + } + if ($this->model->status == 'disable') { + $this->setError('Account disabled'); + return false; + } + + // 登录失败重试检查 + $userLoginRetry = Config::get('buildadmin.user_login_retry'); + if ($userLoginRetry && $this->model->last_login_time) { + // 重置失败次数 + if ($this->model->login_failure > 0 && time() - $this->model->last_login_time >= 86400) { + $this->model->login_failure = 0; + $this->model->save(); + + // 重获模型实例,避免单实例多次更新 + $this->model = User::where($accountType, $username)->find(); + } + + if ($this->model->login_failure >= $userLoginRetry) { + $this->setError('Please try again after 1 day'); + return false; + } + } + + // 密码检查 + if (!verify_password($password, $this->model->password, ['salt' => $this->model->salt])) { + $this->loginFailed(); + $this->setError('Password is incorrect'); + return false; + } + + // 清理 token + if (Config::get('buildadmin.user_sso')) { + Token::clear(self::TOKEN_TYPE, $this->model->id); + Token::clear(self::TOKEN_TYPE . '-refresh', $this->model->id); + } + + if ($keep) { + $this->setRefreshToken($this->refreshTokenKeepTime); + } + $this->loginSuccessful(); + return true; + } + + /** + * 直接登录会员账号 + * @param int $userId 用户ID + * @return bool + * @throws Throwable + */ + public function direct(int $userId): bool + { + $this->model = User::find($userId); + if (!$this->model) return false; + if (Config::get('buildadmin.user_sso')) { + Token::clear(self::TOKEN_TYPE, $this->model->id); + Token::clear(self::TOKEN_TYPE . '-refresh', $this->model->id); + } + return $this->loginSuccessful(); + } + + /** + * 检查旧密码是否正确 + * @param $password + * @return bool + * @deprecated 请使用 verify_password 公共函数代替 + */ + public function checkPassword($password): bool + { + return verify_password($password, $this->model->password, ['salt' => $this->model->salt]); + } + + /** + * 登录成功 + * @return bool + */ + public function loginSuccessful(): bool + { + if (!$this->model) { + return false; + } + $this->model->startTrans(); + try { + $this->model->login_failure = 0; + $this->model->last_login_time = time(); + $this->model->last_login_ip = request()->ip(); + $this->model->save(); + $this->loginEd = true; + + if (!$this->token) { + $this->token = Random::uuid(); + Token::set($this->token, self::TOKEN_TYPE, $this->model->id, $this->keepTime); + } + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->setError($e->getMessage()); + return false; + } + return true; + } + + /** + * 登录失败 + * @return bool + */ + public function loginFailed(): bool + { + if (!$this->model) return false; + $this->model->startTrans(); + try { + $this->model->login_failure++; + $this->model->last_login_time = time(); + $this->model->last_login_ip = request()->ip(); + $this->model->save(); + $this->model->commit(); + } catch (Throwable $e) { + $this->model->rollback(); + $this->setError($e->getMessage()); + return false; + } + return $this->reset(); + } + + /** + * 退出登录 + * @return bool + */ + public function logout(): bool + { + if (!$this->loginEd) { + $this->setError('You are not logged in'); + return false; + } + return $this->reset(); + } + + /** + * 是否登录 + * @return bool + */ + public function isLogin(): bool + { + return $this->loginEd; + } + + /** + * 获取会员模型 + * @return User + */ + public function getUser(): User + { + return $this->model; + } + + /** + * 获取会员Token + * @return string + */ + public function getToken(): string + { + return $this->token; + } + + /** + * 设置刷新Token + * @param int $keepTime + * @return void + */ + public function setRefreshToken(int $keepTime = 0): void + { + $this->refreshToken = Random::uuid(); + Token::set($this->refreshToken, self::TOKEN_TYPE . '-refresh', $this->model->id, $keepTime); + } + + /** + * 获取会员刷新Token + * @return string + */ + public function getRefreshToken(): string + { + return $this->refreshToken; + } + + /** + * 获取会员信息 - 只输出允许输出的字段 + * @return array + */ + public function getUserInfo(): array + { + if (!$this->model) return []; + $info = $this->model->toArray(); + $info = array_intersect_key($info, array_flip($this->getAllowFields())); + $info['token'] = $this->getToken(); + $info['refresh_token'] = $this->getRefreshToken(); + return $info; + } + + /** + * 获取允许输出字段 + * @return array + */ + public function getAllowFields(): array + { + return $this->allowFields; + } + + /** + * 设置允许输出字段 + * @param $fields + * @return void + */ + public function setAllowFields($fields): void + { + $this->allowFields = $fields; + } + + /** + * 设置Token有效期 + * @param int $keepTime + * @return void + */ + public function setKeepTime(int $keepTime = 0): void + { + $this->keepTime = $keepTime; + } + + public function check(string $name, int $uid = 0, string $relation = 'or', string $mode = 'url'): bool + { + return parent::check($name, $uid ?: $this->id, $relation, $mode); + } + + public function getRuleList(int $uid = 0): array + { + return parent::getRuleList($uid ?: $this->id); + } + + public function getRuleIds(int $uid = 0): array + { + return parent::getRuleIds($uid ?: $this->id); + } + + public function getMenus(int $uid = 0): array + { + return parent::getMenus($uid ?: $this->id); + } + + /** + * 是否是拥有所有权限的会员 + * @return bool + * @throws Throwable + */ + public function isSuperUser(): bool + { + return in_array('*', $this->getRuleIds()); + } + + /** + * 设置错误消息 + * @param string $error + * @return Auth + */ + public function setError(string $error): Auth + { + $this->error = $error; + return $this; + } + + /** + * 获取错误消息 + * @return string + */ + public function getError(): string + { + return $this->error ? __($this->error) : ''; + } + + /** + * 属性重置(注销、登录失败、重新初始化等将单例数据销毁) + */ + protected function reset(bool $deleteToken = true): bool + { + if ($deleteToken && $this->token) { + Token::delete($this->token); + } + + $this->token = ''; + $this->loginEd = false; + $this->model = null; + $this->refreshToken = ''; + $this->setError(''); + $this->setKeepTime((int)Config::get('buildadmin.user_token_keep_time')); + return true; + } +} \ No newline at end of file diff --git a/app/common/library/Email.php b/app/common/library/Email.php new file mode 100644 index 0000000..4852564 --- /dev/null +++ b/app/common/library/Email.php @@ -0,0 +1,71 @@ + 'utf-8', //编码格式 + 'debug' => true, //调式模式 + 'lang' => 'zh_cn', + ]; + + /** + * 构造函数 + * @param array $options + * @throws Throwable + */ + public function __construct(array $options = []) + { + $this->options = array_merge($this->options, $options); + + parent::__construct($this->options['debug']); + $langSet = Lang::getLangSet(); + if ($langSet == 'zh-cn' || !$langSet) $langSet = 'zh_cn'; + $this->options['lang'] = $this->options['lang'] ?: $langSet; + + $this->setLanguage($this->options['lang'], root_path() . 'vendor' . DIRECTORY_SEPARATOR . 'phpmailer' . DIRECTORY_SEPARATOR . 'phpmailer' . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR); + $this->CharSet = $this->options['charset']; + + $sysMailConfig = get_sys_config('', 'mail'); + $this->configured = true; + foreach ($sysMailConfig as $item) { + if (!$item) { + $this->configured = false; + } + } + if ($this->configured) { + $this->Host = $sysMailConfig['smtp_server']; + $this->SMTPAuth = true; + $this->Username = $sysMailConfig['smtp_user']; + $this->Password = $sysMailConfig['smtp_pass']; + $this->SMTPSecure = $sysMailConfig['smtp_verification'] == 'SSL' ? self::ENCRYPTION_SMTPS : self::ENCRYPTION_STARTTLS; + $this->Port = $sysMailConfig['smtp_port']; + + $this->setFrom($sysMailConfig['smtp_sender_mail'], $sysMailConfig['smtp_user']); + } + } + + public function setSubject($subject): void + { + $this->Subject = "=?utf-8?B?" . base64_encode($subject) . "?="; + } +} \ No newline at end of file diff --git a/app/common/library/Menu.php b/app/common/library/Menu.php new file mode 100644 index 0000000..1c22a3b --- /dev/null +++ b/app/common/library/Menu.php @@ -0,0 +1,156 @@ +where((is_numeric($parent) ? 'id' : 'name'), $parent)->find(); + if ($parentRule) { + $pid = $parentRule['id']; + } + foreach ($menu as $item) { + if (!self::requiredAttrCheck($item)) { + continue; + } + + // 属性 + $item['status'] = 1; + if (!isset($item['pid'])) { + $item['pid'] = $pid; + } + + $sameOldMenu = $model->where('name', $item['name'])->find(); + if ($sameOldMenu) { + // 存在相同名称的菜单规则 + if ($mode == 'cover') { + $sameOldMenu->save($item); + } elseif ($mode == 'rename') { + $count = $model->where('name', $item['name'])->count(); + $item['name'] = $item['name'] . '-CONFLICT-' . $count; + $item['path'] = $item['path'] . '-CONFLICT-' . $count; + $item['title'] = $item['title'] . '-CONFLICT-' . $count; + $sameOldMenu = $model->create($item); + } elseif ($mode == 'ignore') { + // 忽略同名菜单时,当前 pid 下没有同名菜单,则创建同名新菜单,以保证所有新增菜单的上下级结构 + $sameOldMenu = $model + ->where('name', $item['name']) + ->where('pid', $item['pid']) + ->find(); + + if (!$sameOldMenu) { + $sameOldMenu = $model->create($item); + } + } + } else { + $sameOldMenu = $model->create($item); + } + if (!empty($item['children'])) { + self::create($item['children'], $sameOldMenu['id'], $mode, $position); + } + } + } + + /** + * 删菜单 + * @param string|int $id 规则name或id + * @param bool $recursion 是否递归删除子级菜单、是否删除自身,是否删除上级空菜单 + * @param string $position 位置:backend=后台,frontend=前台 + * @return bool + * @throws Throwable + */ + public static function delete(string|int $id, bool $recursion = false, string $position = 'backend'): bool + { + if (!$id) { + return true; + } + $model = $position == 'backend' ? new AdminRule() : new UserRule(); + $menuRule = $model->where((is_numeric($id) ? 'id' : 'name'), $id)->find(); + if (!$menuRule) { + return true; + } + + $children = $model->where('pid', $menuRule['id'])->select()->toArray(); + if ($recursion && $children) { + foreach ($children as $child) { + self::delete($child['id'], true, $position); + } + } + + if (!$children || $recursion) { + $menuRule->delete(); + self::delete($menuRule->pid, false, $position); + } + return true; + } + + /** + * 启用菜单 + * @param string|int $id 规则name或id + * @param string $position 位置:backend=后台,frontend=前台 + * @return bool + * @throws Throwable + */ + public static function enable(string|int $id, string $position = 'backend'): bool + { + $model = $position == 'backend' ? new AdminRule() : new UserRule(); + $menuRule = $model->where((is_numeric($id) ? 'id' : 'name'), $id)->find(); + if (!$menuRule) { + return false; + } + $menuRule->status = 1; + $menuRule->save(); + return true; + } + + /** + * 禁用菜单 + * @param string|int $id 规则name或id + * @param string $position 位置:backend=后台,frontend=前台 + * @return bool + * @throws Throwable + */ + public static function disable(string|int $id, string $position = 'backend'): bool + { + $model = $position == 'backend' ? new AdminRule() : new UserRule(); + $menuRule = $model->where((is_numeric($id) ? 'id' : 'name'), $id)->find(); + if (!$menuRule) { + return false; + } + $menuRule->status = 0; + $menuRule->save(); + return true; + } + + public static function requiredAttrCheck($menu): bool + { + $attrs = ['type', 'title', 'name']; + foreach ($attrs as $attr) { + if (!array_key_exists($attr, $menu)) { + return false; + } + if (!$menu[$attr]) { + return false; + } + } + return true; + } +} \ No newline at end of file diff --git a/app/common/library/SnowFlake.php b/app/common/library/SnowFlake.php new file mode 100644 index 0000000..0d9307b --- /dev/null +++ b/app/common/library/SnowFlake.php @@ -0,0 +1,87 @@ +handler)) { + return $this->handler; + } + $name = $name ?: $this->getDefaultDriver(); + + if (is_null($name)) { + throw new InvalidArgumentException( + sprintf( + 'Unable to resolve NULL driver for [%s].', + static::class + ) + ); + } + + return $this->createDriver($name); + } + + /** + * 创建驱动句柄 + * @param string $name + * @return object + */ + protected function createDriver(string $name): object + { + $type = $this->resolveType($name); + + $method = 'create' . Str::studly($type) . 'Driver'; + + $params = $this->resolveParams($name); + + if (method_exists($this, $method)) { + return $this->$method(...$params); + } + + $class = $this->resolveClass($type); + + if (isset($this->instance[$type])) { + return $this->instance[$type]; + } + + return new $class(...$params); + } + + /** + * 默认驱动 + * @return string + */ + protected function getDefaultDriver(): string + { + return $this->getConfig('default'); + } + + /** + * 获取驱动配置 + * @param string|null $name 要获取的配置项,不传递获取完整token配置 + * @param mixed $default + * @return array|string + */ + protected function getConfig(?string $name = null, $default = null): array|string + { + if (!is_null($name)) { + return Config::get('buildadmin.token.' . $name, $default); + } + + return Config::get('buildadmin.token'); + } + + /** + * 获取驱动配置参数 + * @param $name + * @return array + */ + protected function resolveParams($name): array + { + $config = $this->getStoreConfig($name); + return [$config]; + } + + /** + * 获取驱动类 + * @param string $type + * @return string + */ + protected function resolveClass(string $type): string + { + if ($this->namespace || str_contains($type, '\\')) { + $class = str_contains($type, '\\') ? $type : $this->namespace . Str::studly($type); + + if (class_exists($class)) { + return $class; + } + } + + throw new InvalidArgumentException("Driver [$type] not supported."); + } + + /** + * 获取驱动配置 + * @param string $store + * @param string|null $name + * @param mixed $default + * @return array|string + */ + protected function getStoreConfig(string $store, ?string $name = null, $default = null): array|string + { + if ($config = $this->getConfig("stores.$store")) { + return Arr::get($config, $name, $default); + } + + throw new InvalidArgumentException("Store [$store] not found."); + } + + /** + * 获取驱动类型 + * @param string $name + * @return string + */ + protected function resolveType(string $name): string + { + return $this->getStoreConfig($name, 'type', 'Mysql'); + } + + /** + * 设置token + * @param string $token + * @param string $type + * @param int $user_id + * @param int|null $expire + * @return bool + */ + public function set(string $token, string $type, int $user_id, ?int $expire = null): bool + { + return $this->getDriver()->set($token, $type, $user_id, $expire); + } + + /** + * 获取token + * @param string $token + * @param bool $expirationException + * @return array + */ + public function get(string $token, bool $expirationException = true): array + { + return $this->getDriver()->get($token, $expirationException); + } + + /** + * 检查token + * @param string $token + * @param string $type + * @param int $user_id + * @param bool $expirationException + * @return bool + */ + public function check(string $token, string $type, int $user_id, bool $expirationException = true): bool + { + return $this->getDriver()->check($token, $type, $user_id, $expirationException); + } + + /** + * 删除token + * @param string $token + * @return bool + */ + public function delete(string $token): bool + { + return $this->getDriver()->delete($token); + } + + /** + * 清理指定用户token + * @param string $type + * @param int $user_id + * @return bool + */ + public function clear(string $type, int $user_id): bool + { + return $this->getDriver()->clear($type, $user_id); + } + + /** + * Token过期检查 + * @throws TokenExpirationException + */ + public function tokenExpirationCheck(array $token): void + { + if (isset($token['expire_time']) && $token['expire_time'] <= time()) { + throw new TokenExpirationException(); + } + } +} diff --git a/app/common/library/Upload.php b/app/common/library/Upload.php new file mode 100644 index 0000000..312ae34 --- /dev/null +++ b/app/common/library/Upload.php @@ -0,0 +1,341 @@ + 'local', // 默认驱动:local=本地 + 'handler' => [], // 驱动句柄 + 'namespace' => '\\app\\common\\library\\upload\\driver\\', // 驱动类的命名空间 + ]; + + /** + * 存储子目录 + */ + protected string $topic = 'default'; + + /** + * 构造方法 + * @param ?UploadedFile $file 上传的文件 + * @param array $config 配置 + * @throws Throwable + */ + public function __construct(?UploadedFile $file = null, array $config = []) + { + $upload = Config::get('upload'); + $this->config = array_merge($upload, $config); + + if ($file) { + $this->setFile($file); + } + } + + /** + * 设置上传文件 + * @param ?UploadedFile $file + * @return Upload + * @throws Throwable + */ + public function setFile(?UploadedFile $file): Upload + { + if (empty($file)) { + throw new Exception(__('No files were uploaded')); + } + + $suffix = strtolower($file->extension()); + $suffix = $suffix && preg_match("/^[a-zA-Z0-9]+$/", $suffix) ? $suffix : 'file'; + $fileInfo['suffix'] = $suffix; + $fileInfo['type'] = $file->getMime(); + $fileInfo['size'] = $file->getSize(); + $fileInfo['name'] = $file->getOriginalName(); + $fileInfo['sha1'] = $file->sha1(); + + $this->file = $file; + $this->fileInfo = $fileInfo; + return $this; + } + + /** + * 设置上传驱动 + */ + public function setDriver(string $driver): Upload + { + $this->driver['name'] = $driver; + return $this; + } + + /** + * 获取上传驱动句柄 + * @param ?string $driver 驱动名称 + * @param bool $noDriveException 找不到驱动是否抛出异常 + * @return bool|Driver + */ + public function getDriver(?string $driver = null, bool $noDriveException = true): bool|Driver + { + if (is_null($driver)) { + $driver = $this->driver['name']; + } + if (!isset($this->driver['handler'][$driver])) { + $class = $this->resolveDriverClass($driver); + if ($class) { + $this->driver['handler'][$driver] = new $class(); + } elseif ($noDriveException) { + throw new InvalidArgumentException(__('Driver %s not supported', [$driver])); + } + } + return $this->driver['handler'][$driver] ?? false; + } + + /** + * 获取驱动类 + */ + protected function resolveDriverClass(string $driver): bool|string + { + if ($this->driver['namespace'] || str_contains($driver, '\\')) { + $class = str_contains($driver, '\\') ? $driver : $this->driver['namespace'] . Str::studly($driver); + if (class_exists($class)) { + return $class; + } + } + return false; + } + + /** + * 设置存储子目录 + */ + public function setTopic(string $topic): Upload + { + $this->topic = $topic; + return $this; + } + + /** + * 检查是否是图片并设置好相关属性 + * @return bool + * @throws Throwable + */ + protected function checkIsImage(): bool + { + if (in_array($this->fileInfo['type'], ['image/gif', 'image/jpg', 'image/jpeg', 'image/bmp', 'image/png', 'image/webp']) || in_array($this->fileInfo['suffix'], ['gif', 'jpg', 'jpeg', 'bmp', 'png', 'webp'])) { + $imgInfo = getimagesize($this->file->getPathname()); + if (!$imgInfo || !isset($imgInfo[0]) || !isset($imgInfo[1])) { + throw new Exception(__('The uploaded image file is not a valid image')); + } + $this->fileInfo['width'] = $imgInfo[0]; + $this->fileInfo['height'] = $imgInfo[1]; + $this->isImage = true; + return true; + } + return false; + } + + /** + * 上传的文件是否为图片 + * @return bool + */ + public function isImage(): bool + { + return $this->isImage; + } + + /** + * 获取文件后缀 + * @return string + */ + public function getSuffix(): string + { + return $this->fileInfo['suffix'] ?: 'file'; + } + + /** + * 获取文件保存路径和名称 + * @param ?string $saveName + * @param ?string $filename + * @param ?string $sha1 + * @return string + */ + public function getSaveName(?string $saveName = null, ?string $filename = null, ?string $sha1 = null): string + { + if ($filename) { + $suffix = strtolower(pathinfo($filename, PATHINFO_EXTENSION)); + $suffix = $suffix && preg_match("/^[a-zA-Z0-9]+$/", $suffix) ? $suffix : 'file'; + } else { + $suffix = $this->fileInfo['suffix']; + } + $filename = $filename ?: $this->fileInfo['name']; + $sha1 = $sha1 ?: $this->fileInfo['sha1']; + $replaceArr = [ + '{topic}' => $this->topic, + '{year}' => date("Y"), + '{mon}' => date("m"), + '{day}' => date("d"), + '{hour}' => date("H"), + '{min}' => date("i"), + '{sec}' => date("s"), + '{random}' => Random::build(), + '{random32}' => Random::build('alnum', 32), + '{fileName}' => $this->getFileNameSubstr($filename, $suffix), + '{suffix}' => $suffix, + '{.suffix}' => $suffix ? '.' . $suffix : '', + '{fileSha1}' => $sha1, + ]; + $saveName = $saveName ?: $this->config['save_name']; + return Filesystem::fsFit(str_replace(array_keys($replaceArr), array_values($replaceArr), $saveName)); + } + + /** + * 验证文件是否符合上传配置要求 + * @throws Throwable + */ + public function validates(): void + { + if (empty($this->file)) { + throw new Exception(__('No files have been uploaded or the file size exceeds the upload limit of the server')); + } + + $size = Filesystem::fileUnitToByte($this->config['max_size']); + $mime = $this->checkConfig($this->config['allowed_mime_types']); + $suffix = $this->checkConfig($this->config['allowed_suffixes']); + + // 文件大小 + $fileValidateRule = ValidateRule::fileSize($size, __('The uploaded file is too large (%sMiB), Maximum file size:%sMiB', [ + round($this->fileInfo['size'] / pow(1024, 2), 2), + round($size / pow(1024, 2), 2) + ])); + + // 文件后缀 + if ($suffix) { + $fileValidateRule->fileExt($suffix, __('The uploaded file format is not allowed')); + } + // 文件 MIME 类型 + if ($mime) { + $fileValidateRule->fileMime($mime, __('The uploaded file format is not allowed')); + } + + // 图片文件利用tp内置规则做一些额外检查 + if ($this->checkIsImage()) { + $fileValidateRule->image("{$this->fileInfo['width']},{$this->fileInfo['height']}", __('The uploaded image file is not a valid image')); + } + + Validate::failException() + ->rule([ + 'file' => $fileValidateRule, + 'topic' => ValidateRule::is('alphaDash', __('Topic format error')), + 'driver' => ValidateRule::is('alphaDash', __('Driver %s not supported', [$this->driver['name']])), + ]) + ->check([ + 'file' => $this->file, + 'topic' => $this->topic, + 'driver' => $this->driver['name'], + ]); + } + + /** + * 上传文件 + * @param ?string $saveName + * @param int $adminId + * @param int $userId + * @return array + * @throws Throwable + */ + public function upload(?string $saveName = null, int $adminId = 0, int $userId = 0): array + { + $this->validates(); + + $driver = $this->getDriver(); + $saveName = $saveName ?: $this->getSaveName(); + $params = [ + 'topic' => $this->topic, + 'admin_id' => $adminId, + 'user_id' => $userId, + 'url' => $driver->url($saveName, false), + 'width' => $this->fileInfo['width'] ?? 0, + 'height' => $this->fileInfo['height'] ?? 0, + 'name' => $this->getFileNameSubstr($this->fileInfo['name'], $this->fileInfo['suffix'], 100) . ".{$this->fileInfo['suffix']}", + 'size' => $this->fileInfo['size'], + 'mimetype' => $this->fileInfo['type'], + 'storage' => $this->driver['name'], + 'sha1' => $this->fileInfo['sha1'] + ]; + + // 附件数据入库 - 不依赖模型新增前事件,确保入库前文件已经移动完成 + $attachment = Attachment::where('sha1', $params['sha1']) + ->where('topic', $params['topic']) + ->where('storage', $params['storage']) + ->find(); + if ($attachment && $driver->exists($attachment->url)) { + $attachment->quote++; + $attachment->last_upload_time = time(); + } else { + $driver->save($this->file, $saveName); + $attachment = new Attachment(); + $attachment->data(array_filter($params)); + } + $attachment->save(); + return $attachment->toArray(); + } + + /** + * 获取文件名称字符串的子串 + */ + public function getFileNameSubstr(string $fileName, string $suffix, int $length = 15): string + { + // 对 $fileName 中不利于传输的字符串进行过滤 + $pattern = "/[\s:@#?&\/=',+]+/u"; + $fileName = str_replace(".$suffix", '', $fileName); + $fileName = preg_replace($pattern, '', $fileName); + return mb_substr(htmlspecialchars(strip_tags($fileName)), 0, $length); + } + + /** + * 检查配置项,将 string 类型的配置转换为 array,并且将所有字母转换为小写 + */ + protected function checkConfig($configItem): array + { + if (is_array($configItem)) { + return array_map('strtolower', $configItem); + } else { + return explode(',', strtolower($configItem)); + } + } +} diff --git a/app/common/library/token/Driver.php b/app/common/library/token/Driver.php new file mode 100644 index 0000000..85ce40f --- /dev/null +++ b/app/common/library/token/Driver.php @@ -0,0 +1,92 @@ +handler; + } + + /** + * @param string $token + * @return string + */ + protected function getEncryptedToken(string $token): string + { + $config = Config::get('buildadmin.token'); + return hash_hmac($config['algo'], $token, $config['key']); + } + + /** + * @param int $expireTime + * @return int + */ + protected function getExpiredIn(int $expireTime): int + { + return $expireTime ? max(0, $expireTime - time()) : 365 * 86400; + } +} \ No newline at end of file diff --git a/app/common/library/token/TokenExpirationException.php b/app/common/library/token/TokenExpirationException.php new file mode 100644 index 0000000..ce91e6d --- /dev/null +++ b/app/common/library/token/TokenExpirationException.php @@ -0,0 +1,16 @@ +options = array_merge($this->options, $options); + } + + if ($this->options['name']) { + $this->handler = Db::connect($this->options['name'])->name($this->options['table']); + } else { + $this->handler = Db::name($this->options['table']); + } + } + + /** + * @throws Throwable + */ + public function set(string $token, string $type, int $userId, ?int $expire = null): bool + { + if (is_null($expire)) { + $expire = $this->options['expire']; + } + $expireTime = $expire !== 0 ? time() + $expire : 0; + $token = $this->getEncryptedToken($token); + $this->handler->insert([ + 'token' => $token, + 'type' => $type, + 'user_id' => $userId, + 'create_time' => time(), + 'expire_time' => $expireTime, + ]); + + // 每隔48小时清理一次过期Token + $time = time(); + $lastCacheCleanupTime = Cache::get('last_cache_cleanup_time'); + if (!$lastCacheCleanupTime || $lastCacheCleanupTime < $time - 172800) { + Cache::set('last_cache_cleanup_time', $time); + $this->handler->where('expire_time', '<', time())->where('expire_time', '>', 0)->delete(); + } + return true; + } + + /** + * @throws Throwable + */ + public function get(string $token): array + { + $data = $this->handler->where('token', $this->getEncryptedToken($token))->find(); + if (!$data) { + return []; + } + + $data['token'] = $token; // 返回未加密的token给客户端使用 + $data['expires_in'] = $this->getExpiredIn($data['expire_time'] ?? 0); // 返回剩余有效时间 + return $data; + } + + /** + * @throws Throwable + */ + public function check(string $token, string $type, int $userId): bool + { + $data = $this->get($token); + if (!$data || ($data['expire_time'] && $data['expire_time'] <= time())) return false; + return $data['type'] == $type && $data['user_id'] == $userId; + } + + /** + * @throws Throwable + */ + public function delete(string $token): bool + { + $this->handler->where('token', $this->getEncryptedToken($token))->delete(); + return true; + } + + /** + * @throws Throwable + */ + public function clear(string $type, int $userId): bool + { + $this->handler->where('type', $type)->where('user_id', $userId)->delete(); + return true; + } +} \ No newline at end of file diff --git a/app/common/library/token/driver/Redis.php b/app/common/library/token/driver/Redis.php new file mode 100644 index 0000000..fa9ea89 --- /dev/null +++ b/app/common/library/token/driver/Redis.php @@ -0,0 +1,146 @@ +options = array_merge($this->options, $options); + } + $this->handler = new \Redis(); + if ($this->options['persistent']) { + $this->handler->pconnect($this->options['host'], $this->options['port'], $this->options['timeout'], 'persistent_id_' . $this->options['select']); + } else { + $this->handler->connect($this->options['host'], $this->options['port'], $this->options['timeout']); + } + + if ('' != $this->options['password']) { + $this->handler->auth($this->options['password']); + } + + if (false !== $this->options['select']) { + $this->handler->select($this->options['select']); + } + } + + /** + * @throws Throwable + */ + public function set(string $token, string $type, int $userId, ?int $expire = null): bool + { + if (is_null($expire)) { + $expire = $this->options['expire']; + } + $expireTime = $expire !== 0 ? time() + $expire : 0; + $token = $this->getEncryptedToken($token); + $tokenInfo = [ + 'token' => $token, + 'type' => $type, + 'user_id' => $userId, + 'create_time' => time(), + 'expire_time' => $expireTime, + ]; + $tokenInfo = json_encode($tokenInfo, JSON_UNESCAPED_UNICODE); + if ($expire) { + $expire += $this->expiredHold; + $result = $this->handler->setex($token, $expire, $tokenInfo); + } else { + $result = $this->handler->set($token, $tokenInfo); + } + $this->handler->sAdd($this->getUserKey($type, $userId), $token); + return $result; + } + + /** + * @throws Throwable + */ + public function get(string $token): array + { + $key = $this->getEncryptedToken($token); + $data = $this->handler->get($key); + if (is_null($data) || false === $data) { + return []; + } + $data = json_decode($data, true); + + $data['token'] = $token; // 返回未加密的token给客户端使用 + $data['expires_in'] = $this->getExpiredIn($data['expire_time'] ?? 0); // 过期时间 + return $data; + } + + /** + * @throws Throwable + */ + public function check(string $token, string $type, int $userId): bool + { + $data = $this->get($token); + if (!$data || ($data['expire_time'] && $data['expire_time'] <= time())) return false; + return $data['type'] == $type && $data['user_id'] == $userId; + } + + /** + * @throws Throwable + */ + public function delete(string $token): bool + { + $data = $this->get($token); + if ($data) { + $key = $this->getEncryptedToken($token); + $this->handler->del($key); + $this->handler->sRem($this->getUserKey($data['type'], $data['user_id']), $key); + } + return true; + } + + /** + * @throws Throwable + */ + public function clear(string $type, int $userId): bool + { + $userKey = $this->getUserKey($type, $userId); + $keys = $this->handler->sMembers($userKey); + $this->handler->del($userKey); + $this->handler->del($keys); + return true; + } + + /** + * 获取会员的key + * @param $type + * @param $userId + * @return string + */ + protected function getUserKey($type, $userId): string + { + return $this->options['prefix'] . $type . '-' . $userId; + } +} \ No newline at end of file diff --git a/app/common/library/upload/Driver.php b/app/common/library/upload/Driver.php new file mode 100644 index 0000000..f0a8a3e --- /dev/null +++ b/app/common/library/upload/Driver.php @@ -0,0 +1,47 @@ +options = Config::get('filesystem.disks.public'); + if (!empty($options)) { + $this->options = array_merge($this->options, $options); + } + } + + /** + * 保存文件 + * @param UploadedFile $file + * @param string $saveName + * @return bool + */ + public function save(UploadedFile $file, string $saveName): bool + { + $savePathInfo = pathinfo($saveName); + $saveFullPath = $this->getFullPath($saveName); + + // cgi 直接 move + if (request()->isCgi()) { + $file->move($saveFullPath, $savePathInfo['basename']); + return true; + } + + set_error_handler(function ($type, $msg) use (&$error) { + $error = $msg; + }); + + // 建立文件夹 + if (!is_dir($saveFullPath) && !mkdir($saveFullPath, 0755, true)) { + restore_error_handler(); + throw new FileException(sprintf('Unable to create the "%s" directory (%s)', $saveFullPath, strip_tags($error))); + } + + // cli 使用 rename + $saveName = $this->getFullPath($saveName, true); + if (!rename($file->getPathname(), $saveName)) { + restore_error_handler(); + throw new FileException(sprintf('Could not move the file "%s" to "%s" (%s)', $file->getPathname(), $saveName, strip_tags($error))); + } + + restore_error_handler(); + @chmod($saveName, 0666 & ~umask()); + return true; + } + + /** + * 删除文件 + * @param string $saveName + * @return bool + */ + public function delete(string $saveName): bool + { + $saveFullName = $this->getFullPath($saveName, true); + if ($this->exists($saveFullName)) { + @unlink($saveFullName); + } + Filesystem::delEmptyDir(dirname($saveFullName)); + return true; + } + + /** + * 获取资源 URL 地址 + * @param string $saveName 资源保存名称 + * @param string|bool $domain 是否携带域名 或者直接传入域名 + * @param string $default 默认值 + * @return string + */ + public function url(string $saveName, string|bool $domain = true, string $default = ''): string + { + $saveName = $this->clearRootPath($saveName); + + if ($domain === true) { + $domain = '//' . request()->host(); + } elseif ($domain === false) { + $domain = ''; + } + + $saveName = $saveName ?: $default; + if (!$saveName) return $domain; + + $regex = "/^((?:[a-z]+:)?\/\/|data:image\/)(.*)/i"; + if (preg_match('/^http(s)?:\/\//', $saveName) || preg_match($regex, $saveName) || $domain === false) { + return $saveName; + } + return str_replace('\\', '/', $domain . $saveName); + } + + /** + * 文件是否存在 + * @param string $saveName + * @return bool + */ + public function exists(string $saveName): bool + { + $saveFullName = $this->getFullPath($saveName, true); + return file_exists($saveFullName); + } + + /** + * 获取文件的完整存储路径 + * @param string $saveName + * @param bool $baseName 是否包含文件名 + * @return string + */ + public function getFullPath(string $saveName, bool $baseName = false): string + { + $savePathInfo = pathinfo($saveName); + $root = $this->getRootPath(); + $dirName = $savePathInfo['dirname'] . '/'; + + // 以 root 路径开始时单独返回,避免重复调用此方法时造成 $dirName 的错误拼接 + if (str_starts_with($saveName, $root)) { + return Filesystem::fsFit($baseName || !isset($savePathInfo['extension']) ? $saveName : $dirName); + } + + return Filesystem::fsFit($root . $dirName . ($baseName ? $savePathInfo['basename'] : '')); + } + + public function clearRootPath(string $saveName): string + { + return str_replace($this->getRootPath(), '', Filesystem::fsFit($saveName)); + } + + public function getRootPath(): string + { + return Filesystem::fsFit(str_replace($this->options['url'], '', $this->options['root'])); + } +} \ No newline at end of file diff --git a/app/common/middleware/AdminLog.php b/app/common/middleware/AdminLog.php new file mode 100644 index 0000000..2525460 --- /dev/null +++ b/app/common/middleware/AdminLog.php @@ -0,0 +1,24 @@ +isPost() || $request->isDelete()) && Config::get('buildadmin.auto_write_admin_log')) { + AdminLogModel::instance()->record(); + } + return $response; + } +} \ No newline at end of file diff --git a/app/common/middleware/AllowCrossDomain.php b/app/common/middleware/AllowCrossDomain.php new file mode 100644 index 0000000..9fa0401 --- /dev/null +++ b/app/common/middleware/AllowCrossDomain.php @@ -0,0 +1,66 @@ + +// +---------------------------------------------------------------------- +declare (strict_types=1); + +namespace app\common\middleware; + +use Closure; +use think\Request; +use think\Response; +use think\facade\Config; + +/** + * 跨域请求支持 + * 安全起见,只支持了配置中的域名 + */ +class AllowCrossDomain +{ + protected array $header = [ + 'Access-Control-Allow-Credentials' => 'true', + 'Access-Control-Max-Age' => 1800, + 'Access-Control-Allow-Methods' => '*', + 'Access-Control-Allow-Headers' => '*', + ]; + + /** + * 跨域请求检测 + * @access public + * @param Request $request + * @param Closure $next + * @param array|null $header + * @return Response + */ + public function handle(Request $request, Closure $next, ?array $header = []): Response + { + $header = !empty($header) ? array_merge($this->header, $header) : $this->header; + + $origin = $request->header('origin'); + if ($origin && !isset($header['Access-Control-Allow-Origin'])) { + $info = parse_url($origin); + + // 获取跨域配置 + $corsDomain = explode(',', Config::get('buildadmin.cors_request_domain')); + $corsDomain[] = $request->host(true); + + if (in_array("*", $corsDomain) || in_array($origin, $corsDomain) || (isset($info['host']) && in_array($info['host'], $corsDomain))) { + $header['Access-Control-Allow-Origin'] = $origin; + } + } + + if ($request->isOptions()) { + return response('', 204, $header); + } + + $request->allowCrossDomainHeaders = $header; + + return $next($request)->header($header); + } +} diff --git a/app/common/model/Attachment.php b/app/common/model/Attachment.php new file mode 100644 index 0000000..cc8a461 --- /dev/null +++ b/app/common/model/Attachment.php @@ -0,0 +1,115 @@ +getDriver($row['storage'], false); + return $driver ? $driver->url($row['url']) : full_url($row['url']); + } + + /** + * 新增前 + * @throws Throwable + */ + protected static function onBeforeInsert($model): bool + { + $repeat = $model->where([ + ['sha1', '=', $model->sha1], + ['topic', '=', $model->topic], + ['storage', '=', $model->storage], + ])->find(); + if ($repeat) { + $driver = self::$upload->getDriver($repeat->storage, false); + if ($driver && !$driver->exists($repeat->url)) { + $repeat->delete(); + return true; + } else { + $repeat->quote++; + $repeat->last_upload_time = time(); + $repeat->save(); + return false; + } + } + return true; + } + + /** + * 新增后 + */ + protected static function onAfterInsert($model): void + { + Event::trigger('AttachmentInsert', $model); + + if (!$model->last_upload_time) { + $model->quote = 1; + $model->last_upload_time = time(); + $model->save(); + } + } + + /** + * 删除后 + */ + protected static function onAfterDelete($model): void + { + Event::trigger('AttachmentDel', $model); + + $driver = self::$upload->getDriver($model->storage, false); + if ($driver && $driver->exists($model->url)) { + $driver->delete($model->url); + } + } + + public function admin(): BelongsTo + { + return $this->belongsTo(Admin::class); + } + + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } +} \ No newline at end of file diff --git a/app/common/model/Config.php b/app/common/model/Config.php new file mode 100644 index 0000000..a9a8682 --- /dev/null +++ b/app/common/model/Config.php @@ -0,0 +1,83 @@ +find()) return false; + return self::removeArrayItem('config_group', $key); + } + + /** + * 添加系统快捷配置入口 + * @throws Throwable + */ + public static function addQuickEntrance(string $key, string $value): bool + { + return self::addArrayItem('config_quick_entrance', $key, $value); + } + + /** + * 删除系统快捷配置入口 + * @throws Throwable + */ + public static function removeQuickEntrance(string $key): bool + { + return self::removeArrayItem('config_quick_entrance', $key); + } + + /** + * 为Array类型的配置项添加元素 + * @throws Throwable + */ + public static function addArrayItem(string $name, string $key, string $value): bool + { + $configRow = adminConfigModel::where('name', $name)->find(); + foreach ($configRow->value as $item) { + if ($item['key'] == $key) { + return false; + } + } + $configRow->value = array_merge($configRow->value, [['key' => $key, 'value' => $value]]); + $configRow->save(); + return true; + } + + /** + * 删除Array类型配置项的一个元素 + * @throws Throwable + */ + public static function removeArrayItem(string $name, string $key): bool + { + $configRow = adminConfigModel::where('name', $name)->find(); + $configRowValue = $configRow->value; + foreach ($configRowValue as $iKey => $item) { + if ($item['key'] == $key) { + unset($configRowValue[$iKey]); + } + } + $configRow->value = $configRowValue; + $configRow->save(); + return true; + } + +} \ No newline at end of file diff --git a/app/common/model/User.php b/app/common/model/User.php new file mode 100644 index 0000000..09d7f28 --- /dev/null +++ b/app/common/model/User.php @@ -0,0 +1,51 @@ +where(['id' => $uid])->update(['password' => hash_password($newPassword), 'salt' => '']); + } + + public function getMoneyAttr($value): string + { + return bcdiv($value, 100, 2); + } + + /** + * 用户的余额是不可以直接进行修改的,请通过 UserMoneyLog 模型插入记录来实现自动修改余额 + * 此处定义上 money 的修改器仅为防止直接对余额的修改造成数据错乱 + */ + public function setMoneyAttr($value): string + { + return bcmul($value, 100, 2); + } +} \ No newline at end of file diff --git a/app/common/model/UserMoneyLog.php b/app/common/model/UserMoneyLog.php new file mode 100644 index 0000000..c465e71 --- /dev/null +++ b/app/common/model/UserMoneyLog.php @@ -0,0 +1,41 @@ +moduleAppInit(); + } + + public function moduleAppInit(): void + { + $installed = Server::installedList(root_path() . 'modules' . DIRECTORY_SEPARATOR); + foreach ($installed as $item) { + if ($item['state'] != 1) { + continue; + } + $moduleClass = Server::getClass($item['uid']); + if (class_exists($moduleClass)) { + if (method_exists($moduleClass, 'AppInit')) { + Event::listen('AppInit', function () use ($moduleClass) { + $handle = new $moduleClass(); + $handle->AppInit(); + }); + } + } + } + } +} \ No newline at end of file diff --git a/app/event.php b/app/event.php new file mode 100644 index 0000000..95717d8 --- /dev/null +++ b/app/event.php @@ -0,0 +1,17 @@ + [ + ], + + 'listen' => [ + 'AppInit' => [], + 'HttpRun' => [], + 'HttpEnd' => [], + 'LogLevel' => [], + 'LogWrite' => [], + ], + + 'subscribe' => [ + ], +]; diff --git a/app/middleware.php b/app/middleware.php new file mode 100644 index 0000000..456f05b --- /dev/null +++ b/app/middleware.php @@ -0,0 +1,11 @@ + Request::class, + 'think\exception\Handle' => ExceptionHandle::class, +]; diff --git a/app/service.php b/app/service.php new file mode 100644 index 0000000..7280ac7 --- /dev/null +++ b/app/service.php @@ -0,0 +1,11 @@ +=8.2.0", + "topthink/framework": "8.1.4", + "topthink/think-orm": "3.0.33", + "topthink/think-multi-app": "1.1.1", + "topthink/think-throttle": "2.0.2", + "topthink/think-migration": "3.1.1", + "symfony/http-foundation": "^7.3|v8.0", + "phpmailer/phpmailer": "^6.8", + "guzzlehttp/guzzle": "^7.8.1", + "build-admin/anti-xss": "dev-master", + "voku/portable-utf8": "dev-master", + "nelexa/zip": "^4.0.0", + "ext-bcmath": "*", + "ext-iconv": "*", + "ext-json": "*", + "ext-gd": "*" + }, + "require-dev": { + "symfony/var-dumper": "^5.4", + "topthink/think-trace": "^1.0" + }, + "autoload": { + "psr-4": { + "app\\": "app", + "modules\\": "modules" + }, + "psr-0": { + "": "extend/" + } + }, + "config": { + "preferred-install": "dist" + }, + "scripts": { + "post-autoload-dump": [ + "@php think service:discover", + "@php think vendor:publish" + ] + } +} diff --git a/config/app.php b/config/app.php new file mode 100644 index 0000000..148f45b --- /dev/null +++ b/config/app.php @@ -0,0 +1,32 @@ + env('app.host', ''), + // 应用的命名空间 + 'app_namespace' => '', + // 是否启用路由 + 'with_route' => true, + // 默认应用 + 'default_app' => 'api', + // 默认时区 + 'default_timezone' => 'Asia/Shanghai', + + // 应用映射(自动多应用模式有效) + 'app_map' => [], + // 域名绑定(自动多应用模式有效) + 'domain_bind' => [], + // 禁止URL访问的应用列表(自动多应用模式有效) + 'deny_app_list' => ['common'], + + // 异常页面的模板文件 + 'exception_tmpl' => app()->getThinkPath() . 'tpl/think_exception.tpl', + + // 错误显示信息,非调试模式有效 + 'error_message' => '页面错误!请稍后再试~', + // 显示错误信息 + 'show_error_msg' => false, +]; diff --git a/config/buildadmin.php b/config/buildadmin.php new file mode 100644 index 0000000..b1167fc --- /dev/null +++ b/config/buildadmin.php @@ -0,0 +1,86 @@ + 'localhost,127.0.0.1', + // 是否开启会员登录验证码 + 'user_login_captcha' => true, + // 是否开启管理员登录验证码 + 'admin_login_captcha' => true, + // 会员登录失败可重试次数,false则无限 + 'user_login_retry' => 10, + // 管理员登录失败可重试次数,false则无限 + 'admin_login_retry' => 10, + // 开启管理员单处登录它处失效 + 'admin_sso' => false, + // 开启会员单处登录它处失效 + 'user_sso' => false, + // 会员登录态保持时间(非刷新token,3天) + 'user_token_keep_time' => 60 * 60 * 24 * 3, + // 管理员登录态保持时间(非刷新token,3天) + 'admin_token_keep_time' => 60 * 60 * 24 * 3, + // 开启前台会员中心 + 'open_member_center' => true, + // 模块纯净安装(安装时移动模块文件而不是复制) + 'module_pure_install' => true, + // 点选验证码配置 + 'click_captcha' => [ + // 模式:text=文字,icon=图标(若只有icon则适用于国际化站点) + 'mode' => ['text', 'icon'], + // 长度 + 'length' => 2, + // 混淆点长度 + 'confuse_length' => 2, + ], + // 代理服务器IP(\think\Request 类将尝试获取这些代理服务器发送过来的真实IP) + 'proxy_server_ip' => [], + // Token 配置 + 'token' => [ + // 默认驱动方式 + 'default' => 'mysql', + // 加密key + 'key' => 'tcbDgmqLVzuAdNH39o0QnhOisvSCFZ7I', + // 加密方式 + 'algo' => 'ripemd160', + // 驱动 + 'stores' => [ + 'mysql' => [ + 'type' => 'Mysql', + // 留空表示使用默认的 Mysql 数据库,也可以填写其他数据库连接配置的`name` + 'name' => '', + // 存储token的表名 + 'table' => 'token', + // 默认 token 有效时间 + 'expire' => 2592000, + ], + 'redis' => [ + 'type' => 'Redis', + 'host' => '127.0.0.1', + 'port' => 6379, + 'password' => '', + // Db索引,非 0 以避免数据被意外清理 + 'select' => 1, + 'timeout' => 0, + // 默认 token 有效时间 + 'expire' => 2592000, + 'persistent' => false, + 'prefix' => 'tk:', + ], + ] + ], + // 自动写入管理员操作日志 + 'auto_write_admin_log' => true, + // 缺省头像图片路径 + 'default_avatar' => '/static/images/avatar.png', + // 内容分发网络URL,末尾不带`/` + 'cdn_url' => '', + // 内容分发网络URL参数,将自动添加 `?`,之后拼接到 cdn_url 的结尾(例如 `imageMogr2/format/heif`) + 'cdn_url_params' => '', + // 版本号 + 'version' => 'v2.3.6', + // 中心接口地址(用于请求模块市场的数据等用途) + 'api_url' => 'https://api.buildadmin.com', +]; \ No newline at end of file diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 0000000..a8d69d2 --- /dev/null +++ b/config/cache.php @@ -0,0 +1,29 @@ + env('cache.driver', 'file'), + + // 缓存连接方式配置 + 'stores' => [ + 'file' => [ + // 驱动方式 + 'type' => 'File', + // 缓存保存目录 + 'path' => '', + // 缓存前缀 + 'prefix' => '', + // 缓存有效期 0表示永久缓存 + 'expire' => 0, + // 缓存标签前缀 + 'tag_prefix' => 'tag:', + // 序列化机制 例如 ['serialize', 'unserialize'] + 'serialize' => [], + ], + // 更多的缓存连接 + ], +]; diff --git a/config/console.php b/config/console.php new file mode 100644 index 0000000..3368757 --- /dev/null +++ b/config/console.php @@ -0,0 +1,8 @@ + [], +]; diff --git a/config/cookie.php b/config/cookie.php new file mode 100644 index 0000000..d3b3aab --- /dev/null +++ b/config/cookie.php @@ -0,0 +1,20 @@ + 0, + // cookie 保存路径 + 'path' => '/', + // cookie 有效域名 + 'domain' => '', + // cookie 启用安全传输 + 'secure' => false, + // httponly设置 + 'httponly' => false, + // 是否使用 setcookie + 'setcookie' => true, + // samesite 设置,支持 'strict' 'lax' + 'samesite' => '', +]; diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..aa7e77c --- /dev/null +++ b/config/database.php @@ -0,0 +1,63 @@ + env('database.driver', 'mysql'), + + // 自定义时间查询规则 + 'time_query_rule' => [], + + // 自动写入时间戳字段 + // true为自动识别类型 false关闭 + // 字符串则明确指定时间字段类型 支持 int timestamp datetime date + 'auto_timestamp' => true, + + // 时间字段取出后的默认时间格式 + 'datetime_format' => false, + + // 时间字段配置 配置格式:create_time,update_time + 'datetime_field' => '', + + // 数据库连接配置信息 + 'connections' => [ + 'mysql' => [ + // 数据库类型 + 'type' => env('database.type', 'mysql'), + // 服务器地址 + 'hostname' => env('database.hostname', '127.0.0.1'), + // 数据库名 + 'database' => env('database.database', 'buildadmin_com'), + // 用户名 + 'username' => env('database.username', 'root'), + // 密码 + 'password' => env('database.password', 'admin888'), + // 端口 + 'hostport' => env('database.hostport', '3306'), + // 数据库连接参数 + 'params' => [], + // 数据库编码默认采用utf8mb4 + 'charset' => env('database.charset', 'utf8mb4'), + // 数据库表前缀 + 'prefix' => env('database.prefix', 'ba_'), + + // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) + 'deploy' => 0, + // 数据库读写是否分离 主从式有效 + 'rw_separate' => false, + // 读写分离后 主服务器数量 + 'master_num' => 1, + // 指定从服务器序号 + 'slave_no' => '', + // 是否严格检查字段是否存在 + 'fields_strict' => true, + // 是否需要断线重连 + 'break_reconnect' => true, + // 监听SQL + 'trigger_sql' => env('app_debug', false), + // 开启字段缓存 + 'fields_cache' => false, + ], + + // 更多的数据库配置信息 + ], +]; diff --git a/config/filesystem.php b/config/filesystem.php new file mode 100644 index 0000000..965297e --- /dev/null +++ b/config/filesystem.php @@ -0,0 +1,24 @@ + env('filesystem.driver', 'local'), + // 磁盘列表 + 'disks' => [ + 'local' => [ + 'type' => 'local', + 'root' => app()->getRuntimePath() . 'storage', + ], + 'public' => [ + // 磁盘类型 + 'type' => 'local', + // 磁盘路径 + 'root' => app()->getRootPath() . 'public/storage', + // 磁盘路径对应的外部URL路径 + 'url' => '/storage', + // 可见性 + 'visibility' => 'public', + ], + // 更多的磁盘配置信息 + ], +]; diff --git a/config/lang.php b/config/lang.php new file mode 100644 index 0000000..497718a --- /dev/null +++ b/config/lang.php @@ -0,0 +1,27 @@ + env('lang.default_lang', 'zh-cn'), + // 允许的语言列表 + 'allow_lang_list' => ['zh-cn', 'en'], + // 多语言自动侦测变量名 + 'detect_var' => 'lang', + // 是否使用Cookie记录-开启后 ob_flush() 等操作会报错 + 'use_cookie' => false, + // 多语言cookie变量 + 'cookie_var' => 'think_lang', + // 多语言header变量 + 'header_var' => 'think-lang', + // 扩展语言包 + 'extend_list' => [], + // Accept-Language转义为对应语言包名称 + 'accept_language' => [ + 'zh-hans-cn' => 'zh-cn', + ], + // 是否支持语言分组 + 'allow_group' => false, +]; diff --git a/config/log.php b/config/log.php new file mode 100644 index 0000000..ea24ff9 --- /dev/null +++ b/config/log.php @@ -0,0 +1,45 @@ + env('log.channel', 'file'), + // 日志记录级别 + 'level' => [], + // 日志类型记录的通道 ['error'=>'email',...] + 'type_channel' => [], + // 关闭全局日志写入 + 'close' => false, + // 全局日志处理 支持闭包 + 'processor' => null, + + // 日志通道列表 + 'channels' => [ + 'file' => [ + // 日志记录方式 + 'type' => 'File', + // 日志保存目录 + 'path' => '', + // 单文件日志写入 + 'single' => false, + // 独立日志级别 + 'apart_level' => [], + // 最大日志文件数量 + 'max_files' => 0, + // 使用JSON格式记录 + 'json' => false, + // 日志处理 + 'processor' => null, + // 关闭通道日志写入 + 'close' => false, + // 日志输出格式化 + 'format' => '[%s][%s] %s', + // 是否实时写入 + 'realtime_write' => false, + ], + // 其它日志通道配置 + ], + +]; diff --git a/config/middleware.php b/config/middleware.php new file mode 100644 index 0000000..7e1972f --- /dev/null +++ b/config/middleware.php @@ -0,0 +1,8 @@ + [], + // 优先级设置,此数组中的中间件会按照数组中的顺序优先执行 + 'priority' => [], +]; diff --git a/config/route.php b/config/route.php new file mode 100644 index 0000000..2f4cd12 --- /dev/null +++ b/config/route.php @@ -0,0 +1,45 @@ + '/', + // URL伪静态后缀 + 'url_html_suffix' => 'html', + // URL普通方式参数 用于自动生成 + 'url_common_param' => true, + // 是否开启路由延迟解析 + 'url_lazy_route' => false, + // 是否强制使用路由 + 'url_route_must' => false, + // 合并路由规则 + 'route_rule_merge' => false, + // 路由是否完全匹配 + 'route_complete_match' => false, + // 访问控制器层名称 + 'controller_layer' => 'controller', + // 空控制器名 + 'empty_controller' => 'Error', + // 是否使用控制器后缀 + 'controller_suffix' => false, + // 默认的路由变量规则 + 'default_route_pattern' => '[\w\.]+', + // 是否开启请求缓存 true自动缓存 支持设置请求缓存规则 + 'request_cache_key' => false, + // 请求缓存有效期 + 'request_cache_expire' => null, + // 全局请求缓存排除规则 + 'request_cache_except' => [], + // 默认控制器名 + 'default_controller' => 'Index', + // 默认操作名 + 'default_action' => 'index', + // 操作方法后缀 + 'action_suffix' => '', + // 默认JSONP格式返回的处理方法 + 'default_jsonp_handler' => 'jsonpReturn', + // 默认JSONP处理方法 + 'var_jsonp_handler' => 'callback', +]; diff --git a/config/session.php b/config/session.php new file mode 100644 index 0000000..c1ef6e1 --- /dev/null +++ b/config/session.php @@ -0,0 +1,19 @@ + 'PHPSESSID', + // SESSION_ID的提交变量,解决flash上传跨域 + 'var_session_id' => '', + // 驱动方式 支持file cache + 'type' => 'file', + // 存储连接标识 当type使用cache的时候有效 + 'store' => null, + // 过期时间 + 'expire' => 1440, + // 前缀 + 'prefix' => '', +]; diff --git a/config/terminal.php b/config/terminal.php new file mode 100644 index 0000000..006142e --- /dev/null +++ b/config/terminal.php @@ -0,0 +1,169 @@ +param('extend') 取值,以 ~~ 分割多个参数后使用 sprintf 函数替换进完整的命令字符串 +// | 3. 命令主体千万不能使用 %s %f 等占位符,参数使用占位符时,系统将自动使用 escapeshellarg 对参数值进行转义来防止命令注入攻击 +// +---------------------------------------------------------------------- + +return [ + // npm包管理器 + 'npm_package_manager' => 'pnpm', + // 允许执行的命令 + 'commands' => [ + // 数据库迁移命令 + 'migrate' => [ + 'run' => [ + 'cwd' => '', + 'command' => 'php think migrate:run', + 'notes' => 'Start the database migration' + ], + 'rollback' => 'php think migrate:rollback', + 'breakpoint' => 'php think migrate:breakpoint', + ], + // 安装包管理器的命令 + 'install' => [ + 'cnpm' => 'npm install cnpm -g --registry=https://registry.npmmirror.com', + 'yarn' => 'npm install -g yarn', + 'pnpm' => 'npm install -g pnpm', + 'ni' => 'npm install -g @antfu/ni', + ], + // 查看版本的命令 + 'version' => [ + 'npm' => 'npm -v', + 'cnpm' => 'cnpm -v', + 'yarn' => 'yarn -v', + 'pnpm' => 'pnpm -v', + 'node' => 'node -v', + ], + // 测试命令 + 'test' => [ + 'npm' => [ + 'cwd' => 'public/npm-install-test', + 'command' => 'npm install', + ], + 'cnpm' => [ + 'cwd' => 'public/npm-install-test', + 'command' => 'cnpm install', + ], + 'yarn' => [ + 'cwd' => 'public/npm-install-test', + 'command' => 'yarn install', + ], + 'pnpm' => [ + 'cwd' => 'public/npm-install-test', + 'command' => 'pnpm install', + ], + 'ni' => [ + 'cwd' => 'public/npm-install-test', + 'command' => 'ni install', + ], + ], + // 安装 WEB 依赖包 + 'web-install' => [ + 'npm' => [ + 'cwd' => 'web', + 'command' => 'npm install', + ], + 'cnpm' => [ + 'cwd' => 'web', + 'command' => 'cnpm install', + ], + 'yarn' => [ + 'cwd' => 'web', + 'command' => 'yarn install', + ], + 'pnpm' => [ + 'cwd' => 'web', + 'command' => 'pnpm install', + ], + 'ni' => [ + 'cwd' => 'web', + 'command' => 'ni install', + ], + ], + // 安装 Web-Nuxt 依赖包 + 'nuxt-install' => [ + 'npm' => [ + 'cwd' => 'web-nuxt', + 'command' => 'npm install', + ], + 'cnpm' => [ + 'cwd' => 'web-nuxt', + 'command' => 'cnpm install', + ], + 'yarn' => [ + 'cwd' => 'web-nuxt', + 'command' => 'yarn install', + ], + 'pnpm' => [ + 'cwd' => 'web-nuxt', + 'command' => 'pnpm install', + ], + 'ni' => [ + 'cwd' => 'web-nuxt', + 'command' => 'ni install', + ], + ], + // 构建 WEB 端 + 'web-build' => [ + 'npm' => [ + 'cwd' => 'web', + 'command' => 'npm run build', + 'notes' => 'Start executing the build command of the web project', + ], + 'cnpm' => [ + 'cwd' => 'web', + 'command' => 'cnpm run build', + 'notes' => 'Start executing the build command of the web project', + ], + 'yarn' => [ + 'cwd' => 'web', + 'command' => 'yarn run build', + 'notes' => 'Start executing the build command of the web project', + ], + 'pnpm' => [ + 'cwd' => 'web', + 'command' => 'pnpm run build', + 'notes' => 'Start executing the build command of the web project', + ], + 'ni' => [ + 'cwd' => 'web', + 'command' => 'nr build', + 'notes' => 'Start executing the build command of the web project', + ], + ], + // 设置 NPM 源 + 'set-npm-registry' => [ + 'npm' => 'npm config set registry https://registry.npmjs.org/ && npm config get registry', + 'taobao' => 'npm config set registry https://registry.npmmirror.com/ && npm config get registry', + 'tencent' => 'npm config set registry https://mirrors.cloud.tencent.com/npm/ && npm config get registry' + ], + // 设置 composer 源 + 'set-composer-registry' => [ + 'composer' => 'composer config --unset repos.packagist', + 'aliyun' => 'composer config -g repos.packagist composer https://mirrors.aliyun.com/composer/', + 'tencent' => 'composer config -g repos.packagist composer https://mirrors.cloud.tencent.com/composer/', + 'huawei' => 'composer config -g repos.packagist composer https://mirrors.huaweicloud.com/repository/php/', + 'kkame' => 'composer config -g repos.packagist composer https://packagist.kr', + ], + 'npx' => [ + 'prettier' => [ + 'cwd' => 'web', + 'command' => 'npx prettier --write %s', + 'notes' => 'Start formatting the web project code', + ], + ], + 'composer' => [ + 'update' => [ + 'cwd' => '', + 'command' => 'composer update --no-interaction', + 'notes' => 'Start installing the composer dependencies' + ] + ], + 'ping' => [ + 'baidu' => 'ping baidu.com', + 'localhost' => 'ping 127.0.0.1 -n 6', + ] + ], +]; diff --git a/config/throttle.php b/config/throttle.php new file mode 100644 index 0000000..fc004f3 --- /dev/null +++ b/config/throttle.php @@ -0,0 +1,42 @@ + 'throttle_', + // 缓存的键,true 表示使用来源ip + 'key' => true, + // 要被限制的请求类型, eg: GET POST PUT DELETE HEAD 等 + 'visit_method' => ['GET', 'HEAD'], + // 设置访问频率,例如 '10/m' 指的是允许每分钟请求10次;'10/60'指允许每60秒请求10次。值 null 表示不限制, eg: null 10/m 20/h 300/d 200/300 + 'visit_rate' => '120/m', + /* + * 设置节流算法,组件提供了四种算法: + * - CounterFixed :计数固定窗口 + * - CounterSlider: 滑动窗口 + * - TokenBucket : 令牌桶算法 + * - LeakyBucket : 漏桶限流算法 + */ + 'driver_name' => CounterFixed::class, + // 响应体中设置速率限制的头部信息,含义见:https://docs.github.com/en/rest/overview/resources-in-the-rest-api#rate-limiting + 'visit_enable_show_rate_limit' => true, + // 访问受限时返回的响应 + 'visit_fail_response' => function (Throttle $throttle, Request $request, int $wait_seconds) { + return Response::create([ + 'code' => 0, + 'msg' => 'Please do not request frequently. Try again in ' . $wait_seconds . ' seconds.', + ], 'json')->header([ + 'Access-Control-Allow-Credentials' => 'true', + 'Access-Control-Max-Age' => 0, + 'Access-Control-Allow-Methods' => '*', + 'Access-Control-Allow-Headers' => '*', + 'Access-Control-Allow-Origin' => '*', + ]); + }, +]; diff --git a/config/trace.php b/config/trace.php new file mode 100644 index 0000000..fad2392 --- /dev/null +++ b/config/trace.php @@ -0,0 +1,10 @@ + 'Html', + // 读取的日志通道名 + 'channel' => '', +]; diff --git a/config/upload.php b/config/upload.php new file mode 100644 index 0000000..8b5e216 --- /dev/null +++ b/config/upload.php @@ -0,0 +1,21 @@ + '10mb', + // 文件保存格式化方法:topic=存储子目录,fileName=文件名前15个字符 + 'save_name' => '/storage/{topic}/{year}{mon}{day}/{fileName}{fileSha1}{.suffix}', + + /** + * 上传文件的后缀和 MIME类型 白名单 + * 0. 永远使用最少配置 + * 1. 此处不支持通配符 + * 2. 千万不要允许 php,php5,.htaccess,.user.ini 等可执行或配置文件 + * 3. 允许 pdf,ppt,docx 等可能含有脚本的文件时,请先从服务器配置此类文件直接下载而不是预览 + */ + 'allowed_suffixes' => 'jpg,png,bmp,jpeg,gif,webp,zip,rar,wav,mp4,mp3', + 'allowed_mime_types' => [], +]; \ No newline at end of file diff --git a/config/view.php b/config/view.php new file mode 100644 index 0000000..01259a0 --- /dev/null +++ b/config/view.php @@ -0,0 +1,25 @@ + 'Think', + // 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写 3 保持操作方法 + 'auto_rule' => 1, + // 模板目录名 + 'view_dir_name' => 'view', + // 模板后缀 + 'view_suffix' => 'html', + // 模板文件名分隔符 + 'view_depr' => DIRECTORY_SEPARATOR, + // 模板引擎普通标签开始标记 + 'tpl_begin' => '{', + // 模板引擎普通标签结束标记 + 'tpl_end' => '}', + // 标签库标签开始标记 + 'taglib_begin' => '{', + // 标签库标签结束标记 + 'taglib_end' => '}', +]; diff --git a/database/migrations/20230620180908_install.php b/database/migrations/20230620180908_install.php new file mode 100644 index 0000000..2884854 --- /dev/null +++ b/database/migrations/20230620180908_install.php @@ -0,0 +1,575 @@ +admin(); + $this->adminGroup(); + $this->adminGroupAccess(); + $this->adminLog(); + $this->area(); + $this->attachment(); + $this->captcha(); + $this->config(); + $this->menuRule(); + $this->securityDataRecycle(); + $this->securityDataRecycleLog(); + $this->securitySensitiveData(); + $this->securitySensitiveDataLog(); + $this->testBuild(); + $this->token(); + $this->user(); + $this->userGroup(); + $this->userMoneyLog(); + $this->userRule(); + $this->userScoreLog(); + $this->crudLog(); + } + + public function admin(): void + { + if (!$this->hasTable('admin')) { + $table = $this->table('admin', [ + 'id' => false, + 'comment' => '管理员表', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'id', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('id', 'integer', ['comment' => 'ID', 'signed' => false, 'identity' => true, 'null' => false]) + ->addColumn('username', 'string', ['limit' => 20, 'default' => '', 'comment' => '用户名', 'null' => false]) + ->addColumn('nickname', 'string', ['limit' => 50, 'default' => '', 'comment' => '昵称', 'null' => false]) + ->addColumn('avatar', 'string', ['limit' => 255, 'default' => '', 'comment' => '头像', 'null' => false]) + ->addColumn('email', 'string', ['limit' => 50, 'default' => '', 'comment' => '邮箱', 'null' => false]) + ->addColumn('mobile', 'string', ['limit' => 11, 'default' => '', 'comment' => '手机', 'null' => false]) + ->addColumn('loginfailure', 'integer', ['signed' => false, 'limit' => MysqlAdapter::INT_TINY, 'default' => 0, 'comment' => '登录失败次数', 'null' => false]) + ->addColumn('lastlogintime', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '上次登录时间']) + ->addColumn('lastloginip', 'string', ['limit' => 50, 'default' => '', 'comment' => '上次登录IP', 'null' => false]) + ->addColumn('password', 'string', ['limit' => 32, 'default' => '', 'comment' => '密码', 'null' => false]) + ->addColumn('salt', 'string', ['limit' => 30, 'default' => '', 'comment' => '密码盐', 'null' => false]) + ->addColumn('motto', 'string', ['limit' => 255, 'default' => '', 'comment' => '签名', 'null' => false]) + ->addColumn('status', 'enum', ['values' => '0,1', 'default' => '1', 'comment' => '状态:0=禁用,1=启用', 'null' => false]) + ->addColumn('createtime', 'integer', ['limit' => 10, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间']) + ->addColumn('updatetime', 'integer', ['limit' => 10, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->addIndex(['username'], [ + 'unique' => true, + ]) + ->create(); + } + } + + public function adminGroup(): void + { + if (!$this->hasTable('admin_group')) { + $table = $this->table('admin_group', [ + 'id' => false, + 'comment' => '管理分组表', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'id', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('id', 'integer', ['comment' => 'ID', 'signed' => false, 'identity' => true, 'null' => false]) + ->addColumn('pid', 'integer', ['comment' => '上级分组', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('name', 'string', ['limit' => 100, 'default' => '', 'comment' => '组名', 'null' => false]) + ->addColumn('rules', 'text', ['null' => true, 'default' => null, 'comment' => '权限规则ID']) + ->addColumn('status', 'enum', ['values' => '0,1', 'default' => '1', 'comment' => '状态:0=禁用,1=启用', 'null' => false]) + ->addColumn('updatetime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间']) + ->addColumn('createtime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->create(); + } + } + + public function adminGroupAccess(): void + { + if (!$this->hasTable('admin_group_access')) { + $table = $this->table('admin_group_access', [ + 'id' => false, + 'comment' => '管理分组映射表', + 'row_format' => 'DYNAMIC', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('uid', 'integer', ['comment' => '管理员ID', 'signed' => false, 'null' => false]) + ->addColumn('group_id', 'integer', ['comment' => '分组ID', 'signed' => false, 'null' => false]) + ->addIndex(['uid'], [ + 'type' => 'BTREE', + ]) + ->addIndex(['group_id'], [ + 'type' => 'BTREE', + ]) + ->create(); + } + } + + public function adminLog(): void + { + if (!$this->hasTable('admin_log')) { + $table = $this->table('admin_log', [ + 'id' => false, + 'comment' => '管理员日志表', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'id', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('id', 'integer', ['comment' => 'ID', 'signed' => false, 'identity' => true, 'null' => false]) + ->addColumn('admin_id', 'integer', ['comment' => '管理员ID', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('username', 'string', ['limit' => 20, 'default' => '', 'comment' => '管理员用户名', 'null' => false]) + ->addColumn('url', 'string', ['limit' => 1500, 'default' => '', 'comment' => '操作Url', 'null' => false]) + ->addColumn('title', 'string', ['limit' => 100, 'default' => '', 'comment' => '日志标题', 'null' => false]) + ->addColumn('data', 'text', ['limit' => MysqlAdapter::TEXT_LONG, 'null' => true, 'default' => null, 'comment' => '请求数据']) + ->addColumn('ip', 'string', ['limit' => 50, 'default' => '', 'comment' => 'IP', 'null' => false]) + ->addColumn('useragent', 'string', ['limit' => 255, 'default' => '', 'comment' => 'User-Agent', 'null' => false]) + ->addColumn('createtime', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->create(); + } + } + + public function area(): void + { + if (!$this->hasTable('area')) { + $table = $this->table('area', [ + 'id' => false, + 'comment' => '省份地区表', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'id', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('id', 'integer', ['comment' => 'ID', 'signed' => false, 'identity' => true, 'null' => false]) + ->addColumn('pid', 'integer', ['comment' => '父id', 'null' => true, 'default' => null, 'signed' => false]) + ->addColumn('shortname', 'string', ['limit' => 100, 'null' => true, 'default' => null, 'comment' => '简称']) + ->addColumn('name', 'string', ['limit' => 100, 'null' => true, 'default' => null, 'comment' => '名称']) + ->addColumn('mergename', 'string', ['limit' => 255, 'null' => true, 'default' => null, 'comment' => '全称']) + ->addColumn('level', 'integer', ['signed' => false, 'limit' => MysqlAdapter::INT_TINY, 'null' => true, 'default' => null, 'comment' => '层级:1=省,2=市,3=区/县']) + ->addColumn('pinyin', 'string', ['limit' => 100, 'null' => true, 'default' => null, 'comment' => '拼音']) + ->addColumn('code', 'string', ['limit' => 100, 'null' => true, 'default' => null, 'comment' => '长途区号']) + ->addColumn('zip', 'string', ['limit' => 100, 'null' => true, 'default' => null, 'comment' => '邮编']) + ->addColumn('first', 'string', ['limit' => 50, 'null' => true, 'default' => null, 'comment' => '首字母']) + ->addColumn('lng', 'string', ['limit' => 50, 'null' => true, 'default' => null, 'comment' => '经度']) + ->addColumn('lat', 'string', ['limit' => 50, 'null' => true, 'default' => null, 'comment' => '纬度']) + ->addIndex(['pid'], [ + 'type' => 'BTREE', + ]) + ->create(); + } + } + + public function attachment(): void + { + if (!$this->hasTable('attachment')) { + $table = $this->table('attachment', [ + 'id' => false, + 'comment' => '附件表', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'id', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('id', 'integer', ['comment' => 'ID', 'signed' => false, 'identity' => true, 'null' => false]) + ->addColumn('topic', 'string', ['limit' => 20, 'default' => '', 'comment' => '细目', 'null' => false]) + ->addColumn('admin_id', 'integer', ['comment' => '上传管理员ID', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('user_id', 'integer', ['comment' => '上传用户ID', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('url', 'string', ['limit' => 255, 'default' => '', 'comment' => '物理路径', 'null' => false]) + ->addColumn('width', 'integer', ['comment' => '宽度', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('height', 'integer', ['comment' => '高度', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('name', 'string', ['limit' => 100, 'default' => '', 'comment' => '原始名称', 'null' => false]) + ->addColumn('size', 'integer', ['comment' => '大小', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('mimetype', 'string', ['limit' => 100, 'default' => '', 'comment' => 'mime类型', 'null' => false]) + ->addColumn('quote', 'integer', ['comment' => '上传(引用)次数', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('storage', 'string', ['limit' => 50, 'default' => '', 'comment' => '存储方式', 'null' => false]) + ->addColumn('sha1', 'string', ['limit' => 40, 'default' => '', 'comment' => 'sha1编码', 'null' => false]) + ->addColumn('createtime', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->addColumn('lastuploadtime', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '最后上传时间']) + ->create(); + } + } + + public function captcha(): void + { + if (!$this->hasTable('captcha')) { + $table = $this->table('captcha', [ + 'id' => false, + 'comment' => '验证码表', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'key', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('key', 'string', ['limit' => 32, 'default' => '', 'comment' => '验证码Key', 'null' => false]) + ->addColumn('code', 'string', ['limit' => 32, 'default' => '', 'comment' => '验证码(加密后)', 'null' => false]) + ->addColumn('captcha', 'text', ['limit' => MysqlAdapter::TEXT_LONG, 'null' => true, 'default' => null, 'comment' => '验证码数据']) + ->addColumn('createtime', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->addColumn('expiretime', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '过期时间']) + ->create(); + } + } + + public function config(): void + { + if (!$this->hasTable('config')) { + $table = $this->table('config', [ + 'id' => false, + 'comment' => '系统配置', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'id', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('id', 'integer', ['comment' => 'ID', 'signed' => false, 'identity' => true, 'null' => false]) + ->addColumn('name', 'string', ['limit' => 30, 'default' => '', 'comment' => '变量名', 'null' => false]) + ->addColumn('group', 'string', ['limit' => 30, 'default' => '', 'comment' => '分组', 'null' => false]) + ->addColumn('title', 'string', ['limit' => 50, 'default' => '', 'comment' => '变量标题', 'null' => false]) + ->addColumn('tip', 'string', ['limit' => 100, 'default' => '', 'comment' => '变量描述', 'null' => false]) + ->addColumn('type', 'string', ['limit' => 30, 'default' => '', 'comment' => '变量输入组件类型', 'null' => false]) + ->addColumn('value', 'text', ['limit' => MysqlAdapter::TEXT_LONG, 'null' => true, 'default' => null, 'comment' => '变量值']) + ->addColumn('content', 'text', ['limit' => MysqlAdapter::TEXT_LONG, 'null' => true, 'default' => null, 'comment' => '字典数据']) + ->addColumn('rule', 'string', ['limit' => 100, 'default' => '', 'comment' => '验证规则', 'null' => false]) + ->addColumn('extend', 'string', ['limit' => 255, 'default' => '', 'comment' => '扩展属性', 'null' => false]) + ->addColumn('allow_del', 'integer', ['signed' => false, 'limit' => MysqlAdapter::INT_TINY, 'default' => 0, 'comment' => '允许删除:0=否,1=是', 'null' => false]) + ->addColumn('weigh', 'integer', ['comment' => '权重', 'default' => 0, 'null' => false]) + ->addIndex(['name'], [ + 'unique' => true, + ]) + ->create(); + } + } + + public function menuRule(): void + { + if (!$this->hasTable('menu_rule') && !$this->hasTable('admin_rule')) { + $table = $this->table('menu_rule', [ + 'id' => false, + 'comment' => '菜单和权限规则表', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'id', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('id', 'integer', ['comment' => 'ID', 'signed' => false, 'identity' => true, 'null' => false]) + ->addColumn('pid', 'integer', ['comment' => '上级菜单', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('type', 'enum', ['values' => 'menu_dir,menu,button', 'default' => 'menu', 'comment' => '类型:menu_dir=菜单目录,menu=菜单项,button=页面按钮', 'null' => false]) + ->addColumn('title', 'string', ['limit' => 50, 'default' => '', 'comment' => '标题', 'null' => false]) + ->addColumn('name', 'string', ['limit' => 50, 'default' => '', 'comment' => '规则名称', 'null' => false]) + ->addColumn('path', 'string', ['limit' => 100, 'default' => '', 'comment' => '路由路径', 'null' => false]) + ->addColumn('icon', 'string', ['limit' => 50, 'default' => '', 'comment' => '图标', 'null' => false]) + ->addColumn('menu_type', 'enum', ['values' => 'tab,link,iframe', 'null' => true, 'default' => null, 'comment' => '菜单类型:tab=选项卡,link=链接,iframe=Iframe']) + ->addColumn('url', 'string', ['limit' => 255, 'default' => '', 'comment' => 'Url', 'null' => false]) + ->addColumn('component', 'string', ['limit' => 100, 'default' => '', 'comment' => '组件路径', 'null' => false]) + ->addColumn('keepalive', 'integer', ['signed' => false, 'limit' => MysqlAdapter::INT_TINY, 'default' => 0, 'comment' => '缓存:0=关闭,1=开启', 'null' => false]) + ->addColumn('extend', 'enum', ['values' => 'none,add_rules_only,add_menu_only', 'default' => 'none', 'comment' => '扩展属性:none=无,add_rules_only=只添加为路由,add_menu_only=只添加为菜单', 'null' => false]) + ->addColumn('remark', 'string', ['limit' => 255, 'default' => '', 'comment' => '备注', 'null' => false]) + ->addColumn('weigh', 'integer', ['comment' => '权重', 'default' => 0, 'null' => false]) + ->addColumn('status', 'enum', ['values' => '0,1', 'default' => '1', 'comment' => '状态:0=禁用,1=启用', 'null' => false]) + ->addColumn('updatetime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间']) + ->addColumn('createtime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->addIndex(['pid'], [ + 'type' => 'BTREE', + ]) + ->create(); + } + } + + public function securityDataRecycle(): void + { + if (!$this->hasTable('security_data_recycle')) { + $table = $this->table('security_data_recycle', [ + 'id' => false, + 'comment' => '回收规则表', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'id', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('id', 'integer', ['comment' => 'ID', 'signed' => false, 'identity' => true, 'null' => false]) + ->addColumn('name', 'string', ['limit' => 50, 'default' => '', 'comment' => '规则名称', 'null' => false]) + ->addColumn('controller', 'string', ['limit' => 100, 'default' => '', 'comment' => '控制器', 'null' => false]) + ->addColumn('controller_as', 'string', ['limit' => 100, 'default' => '', 'comment' => '控制器别名', 'null' => false]) + ->addColumn('data_table', 'string', ['limit' => 100, 'default' => '', 'comment' => '对应数据表', 'null' => false]) + ->addColumn('primary_key', 'string', ['limit' => 50, 'default' => '', 'comment' => '数据表主键', 'null' => false]) + ->addColumn('status', 'enum', ['values' => '0,1', 'default' => '1', 'comment' => '状态:0=禁用,1=启用', 'null' => false]) + ->addColumn('updatetime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间']) + ->addColumn('createtime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->create(); + } + } + + public function securityDataRecycleLog(): void + { + if (!$this->hasTable('security_data_recycle_log')) { + $table = $this->table('security_data_recycle_log', [ + 'id' => false, + 'comment' => '数据回收记录表', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'id', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('id', 'integer', ['comment' => 'ID', 'signed' => false, 'identity' => true, 'null' => false]) + ->addColumn('admin_id', 'integer', ['comment' => '操作管理员', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('recycle_id', 'integer', ['comment' => '回收规则ID', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('data', 'text', ['null' => true, 'default' => null, 'comment' => '回收的数据']) + ->addColumn('data_table', 'string', ['limit' => 100, 'default' => '', 'comment' => '数据表', 'null' => false]) + ->addColumn('primary_key', 'string', ['limit' => 50, 'default' => '', 'comment' => '数据表主键', 'null' => false]) + ->addColumn('is_restore', 'integer', ['signed' => false, 'limit' => MysqlAdapter::INT_TINY, 'default' => 0, 'comment' => '是否已还原:0=否,1=是', 'null' => false]) + ->addColumn('ip', 'string', ['limit' => 50, 'default' => '', 'comment' => '操作者IP', 'null' => false]) + ->addColumn('useragent', 'string', ['limit' => 255, 'default' => '', 'comment' => 'User-Agent', 'null' => false]) + ->addColumn('createtime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->create(); + } + } + + public function securitySensitiveData(): void + { + if (!$this->hasTable('security_sensitive_data')) { + $table = $this->table('security_sensitive_data', [ + 'id' => false, + 'comment' => '敏感数据规则表', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'id', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('id', 'integer', ['comment' => 'ID', 'signed' => false, 'identity' => true, 'null' => false]) + ->addColumn('name', 'string', ['limit' => 50, 'default' => '', 'comment' => '规则名称', 'null' => false]) + ->addColumn('controller', 'string', ['limit' => 100, 'default' => '', 'comment' => '控制器', 'null' => false]) + ->addColumn('controller_as', 'string', ['limit' => 100, 'default' => '', 'comment' => '控制器别名', 'null' => false]) + ->addColumn('data_table', 'string', ['limit' => 100, 'default' => '', 'comment' => '对应数据表', 'null' => false]) + ->addColumn('primary_key', 'string', ['limit' => 50, 'default' => '', 'comment' => '数据表主键', 'null' => false]) + ->addColumn('data_fields', 'text', ['null' => true, 'default' => null, 'comment' => '敏感数据字段']) + ->addColumn('status', 'enum', ['values' => '0,1', 'default' => '1', 'comment' => '状态:0=禁用,1=启用', 'null' => false]) + ->addColumn('updatetime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间']) + ->addColumn('createtime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->create(); + } + } + + public function securitySensitiveDataLog(): void + { + if (!$this->hasTable('security_sensitive_data_log')) { + $table = $this->table('security_sensitive_data_log', [ + 'id' => false, + 'comment' => '敏感数据修改记录', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'id', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('id', 'integer', ['comment' => 'ID', 'signed' => false, 'identity' => true, 'null' => false]) + ->addColumn('admin_id', 'integer', ['comment' => '操作管理员', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('sensitive_id', 'integer', ['comment' => '敏感数据规则ID', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('data_table', 'string', ['limit' => 100, 'default' => '', 'comment' => '数据表', 'null' => false]) + ->addColumn('primary_key', 'string', ['limit' => 50, 'default' => '', 'comment' => '数据表主键', 'null' => false]) + ->addColumn('data_field', 'string', ['limit' => 50, 'default' => '', 'comment' => '被修改字段', 'null' => false]) + ->addColumn('data_comment', 'string', ['limit' => 50, 'default' => '', 'comment' => '被修改项', 'null' => false]) + ->addColumn('id_value', 'integer', ['comment' => '被修改项主键值', 'default' => 0, 'null' => false]) + ->addColumn('before', 'text', ['null' => true, 'default' => null, 'comment' => '修改前']) + ->addColumn('after', 'text', ['null' => true, 'default' => null, 'comment' => '修改后']) + ->addColumn('ip', 'string', ['limit' => 50, 'default' => '', 'comment' => '操作者IP', 'null' => false]) + ->addColumn('useragent', 'string', ['limit' => 255, 'default' => '', 'comment' => 'User-Agent', 'null' => false]) + ->addColumn('is_rollback', 'integer', ['signed' => false, 'limit' => MysqlAdapter::INT_TINY, 'default' => 0, 'comment' => '是否已回滚:0=否,1=是', 'null' => false]) + ->addColumn('createtime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->create(); + } + } + + public function testBuild(): void + { + if (!$this->hasTable('test_build')) { + $table = $this->table('test_build', [ + 'id' => false, + 'comment' => '知识库表', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'id', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('id', 'integer', ['comment' => 'ID', 'signed' => false, 'identity' => true, 'null' => false]) + ->addColumn('title', 'string', ['limit' => 100, 'default' => '', 'comment' => '标题', 'null' => false]) + ->addColumn('keyword_rows', 'string', ['limit' => 100, 'default' => '', 'comment' => '关键词', 'null' => false]) + ->addColumn('content', 'text', ['null' => true, 'default' => null, 'comment' => '内容']) + ->addColumn('views', 'integer', ['comment' => '浏览量', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('likes', 'integer', ['comment' => '有帮助数', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('dislikes', 'integer', ['comment' => '无帮助数', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('note_textarea', 'string', ['limit' => 100, 'default' => '', 'comment' => '备注', 'null' => false]) + ->addColumn('status', 'enum', ['values' => '0,1', 'default' => '1', 'comment' => '状态:0=隐藏,1=正常', 'null' => false]) + ->addColumn('weigh', 'integer', ['comment' => '权重', 'default' => 0, 'null' => false]) + ->addColumn('update_time', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间']) + ->addColumn('create_time', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->create(); + } + } + + public function token(): void + { + if (!$this->hasTable('token')) { + $table = $this->table('token', [ + 'id' => false, + 'comment' => '用户Token表', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'token', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('token', 'string', ['limit' => 50, 'default' => '', 'comment' => 'Token', 'null' => false]) + ->addColumn('type', 'string', ['limit' => 15, 'default' => '', 'comment' => '类型', 'null' => false]) + ->addColumn('user_id', 'integer', ['comment' => '用户ID', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('createtime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->addColumn('expiretime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '过期时间']) + ->create(); + } + } + + public function user(): void + { + if (!$this->hasTable('user')) { + $table = $this->table('user', [ + 'id' => false, + 'comment' => '会员表', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'id', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('id', 'integer', ['comment' => 'ID', 'signed' => false, 'identity' => true, 'null' => false]) + ->addColumn('group_id', 'integer', ['comment' => '分组ID', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('username', 'string', ['limit' => 32, 'default' => '', 'comment' => '用户名', 'null' => false]) + ->addColumn('nickname', 'string', ['limit' => 50, 'default' => '', 'comment' => '昵称', 'null' => false]) + ->addColumn('email', 'string', ['limit' => 50, 'default' => '', 'comment' => '邮箱', 'null' => false]) + ->addColumn('mobile', 'string', ['limit' => 11, 'default' => '', 'comment' => '手机', 'null' => false]) + ->addColumn('avatar', 'string', ['limit' => 255, 'default' => '', 'comment' => '头像', 'null' => false]) + ->addColumn('gender', 'integer', ['signed' => false, 'limit' => MysqlAdapter::INT_TINY, 'default' => 0, 'comment' => '性别:0=未知,1=男,2=女', 'null' => false]) + ->addColumn('birthday', 'date', ['null' => true, 'default' => null, 'comment' => '生日']) + ->addColumn('money', 'integer', ['comment' => '余额', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('score', 'integer', ['comment' => '积分', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('lastlogintime', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '上次登录时间']) + ->addColumn('lastloginip', 'string', ['limit' => 50, 'default' => '', 'comment' => '上次登录IP', 'null' => false]) + ->addColumn('loginfailure', 'integer', ['signed' => false, 'limit' => MysqlAdapter::INT_TINY, 'default' => 0, 'comment' => '登录失败次数', 'null' => false]) + ->addColumn('joinip', 'string', ['limit' => 50, 'default' => '', 'comment' => '加入IP', 'null' => false]) + ->addColumn('jointime', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '加入时间']) + ->addColumn('motto', 'string', ['limit' => 255, 'default' => '', 'comment' => '签名', 'null' => false]) + ->addColumn('password', 'string', ['limit' => 32, 'default' => '', 'comment' => '密码', 'null' => false]) + ->addColumn('salt', 'string', ['limit' => 30, 'default' => '', 'comment' => '密码盐', 'null' => false]) + ->addColumn('status', 'string', ['limit' => 30, 'default' => '', 'comment' => '状态', 'null' => false]) + ->addColumn('updatetime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间']) + ->addColumn('createtime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->addIndex(['username'], [ + 'unique' => true, + ]) + ->addIndex(['email'], [ + 'unique' => true, + ]) + ->addIndex(['mobile'], [ + 'unique' => true, + ]) + ->create(); + } + } + + public function userGroup(): void + { + if (!$this->hasTable('user_group')) { + $table = $this->table('user_group', [ + 'id' => false, + 'comment' => '会员组表', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'id', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('id', 'integer', ['comment' => 'ID', 'signed' => false, 'identity' => true, 'null' => false]) + ->addColumn('name', 'string', ['limit' => 50, 'default' => '', 'comment' => '组名', 'null' => false]) + ->addColumn('rules', 'text', ['null' => true, 'default' => null, 'comment' => '权限节点']) + ->addColumn('status', 'enum', ['values' => '0,1', 'default' => '1', 'comment' => '状态:0=禁用,1=启用', 'null' => false]) + ->addColumn('updatetime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间']) + ->addColumn('createtime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->create(); + } + } + + public function userMoneyLog(): void + { + if (!$this->hasTable('user_money_log')) { + $table = $this->table('user_money_log', [ + 'id' => false, + 'comment' => '会员余额变动表', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'id', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('id', 'integer', ['comment' => 'ID', 'signed' => false, 'identity' => true, 'null' => false]) + ->addColumn('user_id', 'integer', ['comment' => '会员ID', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('money', 'integer', ['comment' => '变更余额', 'default' => 0, 'null' => false]) + ->addColumn('before', 'integer', ['comment' => '变更前余额', 'default' => 0, 'null' => false]) + ->addColumn('after', 'integer', ['comment' => '变更后余额', 'default' => 0, 'null' => false]) + ->addColumn('memo', 'string', ['limit' => 255, 'default' => '', 'comment' => '备注', 'null' => false]) + ->addColumn('createtime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->create(); + } + } + + public function userRule(): void + { + if (!$this->hasTable('user_rule')) { + $table = $this->table('user_rule', [ + 'id' => false, + 'comment' => '会员菜单权限规则表', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'id', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('id', 'integer', ['comment' => 'ID', 'signed' => false, 'identity' => true, 'null' => false]) + ->addColumn('pid', 'integer', ['comment' => '上级菜单', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('type', 'enum', ['values' => 'route,menu_dir,menu,nav_user_menu,nav,button', 'default' => 'menu', 'comment' => '类型:route=路由,menu_dir=菜单目录,menu=菜单项,nav_user_menu=顶栏会员菜单下拉项,nav=顶栏菜单项,button=页面按钮', 'null' => false]) + ->addColumn('title', 'string', ['limit' => 50, 'default' => '', 'comment' => '标题', 'null' => false]) + ->addColumn('name', 'string', ['limit' => 50, 'default' => '', 'comment' => '规则名称', 'null' => false]) + ->addColumn('path', 'string', ['limit' => 100, 'default' => '', 'comment' => '路由路径', 'null' => false]) + ->addColumn('icon', 'string', ['limit' => 50, 'default' => '', 'comment' => '图标', 'null' => false]) + ->addColumn('menu_type', 'enum', ['values' => 'tab,link,iframe', 'default' => 'tab', 'comment' => '菜单类型:tab=选项卡,link=链接,iframe=Iframe', 'null' => false]) + ->addColumn('url', 'string', ['limit' => 255, 'default' => '', 'comment' => 'Url', 'null' => false]) + ->addColumn('component', 'string', ['limit' => 100, 'default' => '', 'comment' => '组件路径', 'null' => false]) + ->addColumn('no_login_valid', 'integer', ['signed' => false, 'limit' => MysqlAdapter::INT_TINY, 'default' => 0, 'comment' => '未登录有效:0=否,1=是', 'null' => false]) + ->addColumn('extend', 'enum', ['values' => 'none,add_rules_only,add_menu_only', 'default' => 'none', 'comment' => '扩展属性:none=无,add_rules_only=只添加为路由,add_menu_only=只添加为菜单', 'null' => false]) + ->addColumn('remark', 'string', ['limit' => 255, 'default' => '', 'comment' => '备注', 'null' => false]) + ->addColumn('weigh', 'integer', ['comment' => '权重', 'default' => 0, 'null' => false]) + ->addColumn('status', 'enum', ['values' => '0,1', 'default' => '1', 'comment' => '状态:0=禁用,1=启用', 'null' => false]) + ->addColumn('updatetime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间']) + ->addColumn('createtime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->addIndex(['pid'], [ + 'type' => 'BTREE', + ]) + ->create(); + } + } + + public function userScoreLog(): void + { + if (!$this->hasTable('user_score_log')) { + $table = $this->table('user_score_log', [ + 'id' => false, + 'comment' => '会员积分变动表', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'id', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('id', 'integer', ['comment' => 'ID', 'signed' => false, 'identity' => true, 'null' => false]) + ->addColumn('user_id', 'integer', ['comment' => '会员ID', 'default' => 0, 'signed' => false, 'null' => false]) + ->addColumn('score', 'integer', ['comment' => '变更积分', 'default' => 0, 'null' => false]) + ->addColumn('before', 'integer', ['comment' => '变更前积分', 'default' => 0, 'null' => false]) + ->addColumn('after', 'integer', ['comment' => '变更后积分', 'default' => 0, 'null' => false]) + ->addColumn('memo', 'string', ['limit' => 255, 'default' => '', 'comment' => '备注', 'null' => false]) + ->addColumn('createtime', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->create(); + } + } + + public function crudLog(): void + { + if (!$this->hasTable('crud_log')) { + $table = $this->table('crud_log', [ + 'id' => false, + 'comment' => 'CRUD记录表', + 'row_format' => 'DYNAMIC', + 'primary_key' => 'id', + 'collation' => 'utf8mb4_unicode_ci', + ]); + $table->addColumn('id', 'integer', ['comment' => 'ID', 'signed' => false, 'identity' => true, 'null' => false]) + ->addColumn('table_name', 'string', ['limit' => 200, 'default' => '', 'comment' => '数据表名', 'null' => false]) + ->addColumn('table', 'text', ['null' => true, 'default' => null, 'comment' => '数据表数据']) + ->addColumn('fields', 'text', ['null' => true, 'default' => null, 'comment' => '字段数据']) + ->addColumn('status', 'enum', ['values' => 'delete,success,error,start', 'default' => 'start', 'comment' => '状态:delete=已删除,success=成功,error=失败,start=生成中', 'null' => false]) + ->addColumn('create_time', 'biginteger', ['signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->create(); + } + } +} diff --git a/database/migrations/20230620180916_install_data.php b/database/migrations/20230620180916_install_data.php new file mode 100644 index 0000000..61e3f6f --- /dev/null +++ b/database/migrations/20230620180916_install_data.php @@ -0,0 +1,1418 @@ +nowTime = time(); + $this->admin(); + $this->adminGroup(); + $this->adminGroupAccess(); + $this->config(); + $this->menuRule(); + $this->securityDataRecycle(); + $this->securitySensitiveData(); + $this->user(); + $this->userGroup(); + $this->userRule(); + } + + public function admin(): void + { + $table = $this->table('admin'); + $rows = [ + [ + 'id' => 1, + 'username' => 'admin', + 'nickname' => 'Admin', + 'email' => 'admin@buildadmin.com', + 'mobile' => '18888888888', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ] + ]; + $exist = Db::name('admin')->where('id', 1)->value('id'); + if (!$exist) { + $table->insert($rows)->saveData(); + } + } + + public function adminGroup(): void + { + $table = $this->table('admin_group'); + $rows = [ + [ + 'id' => 1, + 'pid' => 0, + 'name' => '超级管理组', + 'rules' => '*', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => 2, + 'pid' => 1, + 'name' => '一级管理员', + 'rules' => '1,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,77,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => 3, + 'pid' => 2, + 'name' => '二级管理员', + 'rules' => '21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => 4, + 'pid' => 3, + 'name' => '三级管理员', + 'rules' => '55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + ]; + $exist = Db::name('admin_group')->where('id', 1)->value('id'); + if (!$exist) { + $table->insert($rows)->saveData(); + } + } + + public function adminGroupAccess(): void + { + $table = $this->table('admin_group_access'); + $rows = [ + [ + 'uid' => 1, + 'group_id' => 1, + ] + ]; + $exist = Db::name('admin_group_access')->where('uid', 1)->value('uid'); + if (!$exist) { + $table->insert($rows)->saveData(); + } + } + + public function config(): void + { + $table = $this->table('config'); + $rows = [ + [ + 'id' => 1, + 'name' => 'config_group', + 'group' => 'basics', + 'title' => 'Config group', + 'type' => 'array', + 'value' => '[{"key":"basics","value":"Basics"},{"key":"mail","value":"Mail"},{"key":"config_quick_entrance","value":"Config Quick entrance"}]', + 'rule' => 'required', + 'weigh' => -1, + ], + [ + 'id' => 2, + 'name' => 'site_name', + 'group' => 'basics', + 'title' => 'Site Name', + 'tip' => '', + 'type' => 'string', + 'value' => '站点名称', + 'rule' => 'required', + 'weigh' => 99, + ], + [ + 'id' => 3, + 'name' => 'record_number', + 'group' => 'basics', + 'title' => 'Record number', + 'tip' => '域名备案号', + 'type' => 'string', + 'value' => '渝ICP备8888888号-1', + ], + [ + 'id' => 4, + 'name' => 'version', + 'group' => 'basics', + 'title' => 'Version number', + 'tip' => '系统版本号', + 'type' => 'string', + 'value' => 'v1.0.0', + 'rule' => 'required', + ], + [ + 'id' => 5, + 'name' => 'time_zone', + 'group' => 'basics', + 'title' => 'time zone', + 'type' => 'string', + 'value' => 'Asia/Shanghai', + 'rule' => 'required', + ], + [ + 'id' => 6, + 'name' => 'no_access_ip', + 'group' => 'basics', + 'title' => 'No access ip', + 'tip' => '禁止访问站点的ip列表,一行一个', + 'type' => 'textarea', + ], + [ + 'id' => 7, + 'name' => 'smtp_server', + 'group' => 'mail', + 'title' => 'smtp server', + 'type' => 'string', + 'value' => 'smtp.qq.com', + 'weigh' => 9, + ], + [ + 'id' => 8, + 'name' => 'smtp_port', + 'group' => 'mail', + 'title' => 'smtp port', + 'type' => 'string', + 'value' => '465', + 'weigh' => 8, + ], + [ + 'id' => 9, + 'name' => 'smtp_user', + 'group' => 'mail', + 'title' => 'smtp user', + 'type' => 'string', + 'weigh' => 7, + ], + [ + 'id' => 10, + 'name' => 'smtp_pass', + 'group' => 'mail', + 'title' => 'smtp pass', + 'type' => 'string', + 'weigh' => 6, + ], + [ + 'id' => 11, + 'name' => 'smtp_verification', + 'group' => 'mail', + 'title' => 'smtp verification', + 'type' => 'select', + 'value' => 'SSL', + 'content' => '{"SSL":"SSL","TLS":"TLS"}', + 'weigh' => 5, + ], + [ + 'id' => 12, + 'name' => 'smtp_sender_mail', + 'group' => 'mail', + 'title' => 'smtp sender mail', + 'type' => 'string', + 'rule' => 'email', + 'weigh' => 4, + ], + [ + 'id' => 13, + 'name' => 'config_quick_entrance', + 'group' => 'config_quick_entrance', + 'title' => 'Config Quick entrance', + 'type' => 'array', + 'value' => '[{"key":"数据回收规则配置","value":"/admin/security/dataRecycle"},{"key":"敏感数据规则配置","value":"/admin/security/sensitiveData"}]', + ], + ]; + $exist = Db::name('config')->where('id', 1)->value('id'); + if (!$exist) { + $table->insert($rows)->saveData(); + } + } + + public function menuRule(): void + { + if (!$this->hasTable('menu_rule')) return; + $table = $this->table('menu_rule'); + $rows = [ + [ + 'id' => '1', + 'type' => 'menu', + 'title' => '控制台', + 'name' => 'dashboard/dashboard', + 'path' => 'dashboard', + 'icon' => 'fa fa-dashboard', + 'menu_type' => 'tab', + 'component' => '/src/views/backend/dashboard.vue', + 'keepalive' => '1', + 'remark' => 'Remark lang', + 'weigh' => '999', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '2', + 'type' => 'menu_dir', + 'title' => '权限管理', + 'name' => 'auth', + 'path' => 'auth', + 'icon' => 'fa fa-group', + 'weigh' => '100', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '3', + 'pid' => '2', + 'type' => 'menu', + 'title' => '角色组管理', + 'name' => 'auth/group', + 'path' => 'auth/group', + 'icon' => 'fa fa-group', + 'menu_type' => 'tab', + 'component' => '/src/views/backend/auth/group/index.vue', + 'keepalive' => '1', + 'weigh' => '99', + 'remark' => 'Remark lang', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '4', + 'pid' => '3', + 'type' => 'button', + 'title' => '查看', + 'name' => 'auth/group/index', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '5', + 'pid' => '3', + 'type' => 'button', + 'title' => '添加', + 'name' => 'auth/group/add', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '6', + 'pid' => '3', + 'type' => 'button', + 'title' => '编辑', + 'name' => 'auth/group/edit', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '7', + 'pid' => '3', + 'type' => 'button', + 'title' => '删除', + 'name' => 'auth/group/del', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '8', + 'pid' => '2', + 'type' => 'menu', + 'title' => '管理员管理', + 'name' => 'auth/admin', + 'path' => 'auth/admin', + 'icon' => 'el-icon-UserFilled', + 'menu_type' => 'tab', + 'component' => '/src/views/backend/auth/admin/index.vue', + 'keepalive' => '1', + 'weigh' => '98', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '9', + 'pid' => '8', + 'type' => 'button', + 'title' => '查看', + 'name' => 'auth/admin/index', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '10', + 'pid' => '8', + 'type' => 'button', + 'title' => '添加', + 'name' => 'auth/admin/add', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '11', + 'pid' => '8', + 'type' => 'button', + 'title' => '编辑', + 'name' => 'auth/admin/edit', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '12', + 'pid' => '8', + 'type' => 'button', + 'title' => '删除', + 'name' => 'auth/admin/del', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '13', + 'pid' => '2', + 'type' => 'menu', + 'title' => '菜单规则管理', + 'name' => 'auth/menu', + 'path' => 'auth/menu', + 'icon' => 'el-icon-Grid', + 'menu_type' => 'tab', + 'component' => '/src/views/backend/auth/menu/index.vue', + 'keepalive' => '1', + 'weigh' => '97', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '14', + 'pid' => '13', + 'type' => 'button', + 'title' => '查看', + 'name' => 'auth/menu/index', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '15', + 'pid' => '13', + 'type' => 'button', + 'title' => '添加', + 'name' => 'auth/menu/add', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '16', + 'pid' => '13', + 'type' => 'button', + 'title' => '编辑', + 'name' => 'auth/menu/edit', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '17', + 'pid' => '13', + 'type' => 'button', + 'title' => '删除', + 'name' => 'auth/menu/del', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '18', + 'pid' => '13', + 'type' => 'button', + 'title' => '快速排序', + 'name' => 'auth/menu/sortable', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '19', + 'pid' => '2', + 'type' => 'menu', + 'title' => '管理员日志管理', + 'name' => 'auth/adminLog', + 'path' => 'auth/adminLog', + 'icon' => 'el-icon-List', + 'menu_type' => 'tab', + 'component' => '/src/views/backend/auth/adminLog/index.vue', + 'keepalive' => '1', + 'weigh' => '96', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '20', + 'pid' => '19', + 'type' => 'button', + 'title' => '查看', + 'name' => 'auth/adminLog/index', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '21', + 'type' => 'menu_dir', + 'title' => '会员管理', + 'name' => 'user', + 'path' => 'user', + 'icon' => 'fa fa-drivers-license', + 'weigh' => '95', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '22', + 'pid' => '21', + 'type' => 'menu', + 'title' => '会员管理', + 'name' => 'user/user', + 'path' => 'user/user', + 'icon' => 'fa fa-user', + 'menu_type' => 'tab', + 'component' => '/src/views/backend/user/user/index.vue', + 'keepalive' => '1', + 'weigh' => '94', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '23', + 'pid' => '22', + 'type' => 'button', + 'title' => '查看', + 'name' => 'user/user/index', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '24', + 'pid' => '22', + 'type' => 'button', + 'title' => '添加', + 'name' => 'user/user/add', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '25', + 'pid' => '22', + 'type' => 'button', + 'title' => '编辑', + 'name' => 'user/user/edit', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '26', + 'pid' => '22', + 'type' => 'button', + 'title' => '删除', + 'name' => 'user/user/del', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '27', + 'pid' => '21', + 'type' => 'menu', + 'title' => '会员分组管理', + 'name' => 'user/group', + 'path' => 'user/group', + 'icon' => 'fa fa-group', + 'menu_type' => 'tab', + 'component' => '/src/views/backend/user/group/index.vue', + 'keepalive' => '1', + 'weigh' => '93', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '28', + 'pid' => '27', + 'type' => 'button', + 'title' => '查看', + 'name' => 'user/group/index', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '29', + 'pid' => '27', + 'type' => 'button', + 'title' => '添加', + 'name' => 'user/group/add', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '30', + 'pid' => '27', + 'type' => 'button', + 'title' => '编辑', + 'name' => 'user/group/edit', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '31', + 'pid' => '27', + 'type' => 'button', + 'title' => '删除', + 'name' => 'user/group/del', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '32', + 'pid' => '21', + 'type' => 'menu', + 'title' => '会员规则管理', + 'name' => 'user/rule', + 'path' => 'user/rule', + 'icon' => 'fa fa-th-list', + 'menu_type' => 'tab', + 'component' => '/src/views/backend/user/rule/index.vue', + 'keepalive' => '1', + 'weigh' => '92', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '33', + 'pid' => '32', + 'type' => 'button', + 'title' => '查看', + 'name' => 'user/rule/index', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '34', + 'pid' => '32', + 'type' => 'button', + 'title' => '添加', + 'name' => 'user/rule/add', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '35', + 'pid' => '32', + 'type' => 'button', + 'title' => '编辑', + 'name' => 'user/rule/edit', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '36', + 'pid' => '32', + 'type' => 'button', + 'title' => '删除', + 'name' => 'user/rule/del', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '37', + 'pid' => '32', + 'type' => 'button', + 'title' => '快速排序', + 'name' => 'user/rule/sortable', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '38', + 'pid' => '21', + 'type' => 'menu', + 'title' => '会员余额管理', + 'name' => 'user/moneyLog', + 'path' => 'user/moneyLog', + 'icon' => 'el-icon-Money', + 'menu_type' => 'tab', + 'component' => '/src/views/backend/user/moneyLog/index.vue', + 'keepalive' => '1', + 'weigh' => '91', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '39', + 'pid' => '38', + 'type' => 'button', + 'title' => '查看', + 'name' => 'user/moneyLog/index', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '40', + 'pid' => '38', + 'type' => 'button', + 'title' => '添加', + 'name' => 'user/moneyLog/add', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '41', + 'pid' => '21', + 'type' => 'menu', + 'title' => '会员积分管理', + 'name' => 'user/scoreLog', + 'path' => 'user/scoreLog', + 'icon' => 'el-icon-Discount', + 'menu_type' => 'tab', + 'component' => '/src/views/backend/user/scoreLog/index.vue', + 'keepalive' => '1', + 'weigh' => '90', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '42', + 'pid' => '41', + 'type' => 'button', + 'title' => '查看', + 'name' => 'user/scoreLog/index', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '43', + 'pid' => '41', + 'type' => 'button', + 'title' => '添加', + 'name' => 'user/scoreLog/add', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '44', + 'type' => 'menu_dir', + 'title' => '常规管理', + 'name' => 'routine', + 'path' => 'routine', + 'icon' => 'fa fa-cogs', + 'weigh' => '89', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '45', + 'pid' => '44', + 'type' => 'menu', + 'title' => '系统配置', + 'name' => 'routine/config', + 'path' => 'routine/config', + 'icon' => 'el-icon-Tools', + 'menu_type' => 'tab', + 'component' => '/src/views/backend/routine/config/index.vue', + 'keepalive' => '1', + 'weigh' => '88', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '46', + 'pid' => '45', + 'type' => 'button', + 'title' => '查看', + 'name' => 'routine/config/index', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '47', + 'pid' => '45', + 'type' => 'button', + 'title' => '编辑', + 'name' => 'routine/config/edit', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '48', + 'pid' => '44', + 'type' => 'menu', + 'title' => '附件管理', + 'name' => 'routine/attachment', + 'path' => 'routine/attachment', + 'icon' => 'fa fa-folder', + 'menu_type' => 'tab', + 'component' => '/src/views/backend/routine/attachment/index.vue', + 'keepalive' => '1', + 'remark' => 'Remark lang', + 'weigh' => '87', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '49', + 'pid' => '48', + 'type' => 'button', + 'title' => '查看', + 'name' => 'routine/attachment/index', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '50', + 'pid' => '48', + 'type' => 'button', + 'title' => '编辑', + 'name' => 'routine/attachment/edit', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '51', + 'pid' => '48', + 'type' => 'button', + 'title' => '删除', + 'name' => 'routine/attachment/del', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '52', + 'pid' => '44', + 'type' => 'menu', + 'title' => '个人资料', + 'name' => 'routine/adminInfo', + 'path' => 'routine/adminInfo', + 'icon' => 'fa fa-user', + 'menu_type' => 'tab', + 'component' => '/src/views/backend/routine/adminInfo.vue', + 'keepalive' => '1', + 'weigh' => '86', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '53', + 'pid' => '52', + 'type' => 'button', + 'title' => '查看', + 'name' => 'routine/adminInfo/index', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '54', + 'pid' => '52', + 'type' => 'button', + 'title' => '编辑', + 'name' => 'routine/adminInfo/edit', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '55', + 'type' => 'menu_dir', + 'title' => '数据安全管理', + 'name' => 'security', + 'path' => 'security', + 'icon' => 'fa fa-shield', + 'weigh' => '85', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '56', + 'pid' => '55', + 'type' => 'menu', + 'title' => '数据回收站', + 'name' => 'security/dataRecycleLog', + 'path' => 'security/dataRecycleLog', + 'icon' => 'fa fa-database', + 'menu_type' => 'tab', + 'component' => '/src/views/backend/security/dataRecycleLog/index.vue', + 'keepalive' => '1', + 'weigh' => '84', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '57', + 'pid' => '56', + 'type' => 'button', + 'title' => '查看', + 'name' => 'security/dataRecycleLog/index', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '58', + 'pid' => '56', + 'type' => 'button', + 'title' => '删除', + 'name' => 'security/dataRecycleLog/del', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '59', + 'pid' => '56', + 'type' => 'button', + 'title' => '还原', + 'name' => 'security/dataRecycleLog/restore', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '60', + 'pid' => '56', + 'type' => 'button', + 'title' => '查看详情', + 'name' => 'security/dataRecycleLog/info', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '61', + 'pid' => '55', + 'type' => 'menu', + 'title' => '敏感数据修改记录', + 'name' => 'security/sensitiveDataLog', + 'path' => 'security/sensitiveDataLog', + 'icon' => 'fa fa-expeditedssl', + 'menu_type' => 'tab', + 'component' => '/src/views/backend/security/sensitiveDataLog/index.vue', + 'keepalive' => '1', + 'weigh' => '83', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '62', + 'pid' => '61', + 'type' => 'button', + 'title' => '查看', + 'name' => 'security/sensitiveDataLog/index', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '63', + 'pid' => '61', + 'type' => 'button', + 'title' => '删除', + 'name' => 'security/sensitiveDataLog/del', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '64', + 'pid' => '61', + 'type' => 'button', + 'title' => '回滚', + 'name' => 'security/sensitiveDataLog/rollback', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '65', + 'pid' => '61', + 'type' => 'button', + 'title' => '查看详情', + 'name' => 'security/sensitiveDataLog/info', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '66', + 'pid' => '55', + 'type' => 'menu', + 'title' => '数据回收规则管理', + 'name' => 'security/dataRecycle', + 'path' => 'security/dataRecycle', + 'icon' => 'fa fa-database', + 'menu_type' => 'tab', + 'component' => '/src/views/backend/security/dataRecycle/index.vue', + 'keepalive' => '1', + 'remark' => 'Remark lang', + 'weigh' => '82', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '67', + 'pid' => '66', + 'type' => 'button', + 'title' => '查看', + 'name' => 'security/dataRecycle/index', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '68', + 'pid' => '66', + 'type' => 'button', + 'title' => '添加', + 'name' => 'security/dataRecycle/add', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '69', + 'pid' => '66', + 'type' => 'button', + 'title' => '编辑', + 'name' => 'security/dataRecycle/edit', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '70', + 'pid' => '66', + 'type' => 'button', + 'title' => '删除', + 'name' => 'security/dataRecycle/del', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '71', + 'pid' => '55', + 'type' => 'menu', + 'title' => '敏感字段规则管理', + 'name' => 'security/sensitiveData', + 'path' => 'security/sensitiveData', + 'icon' => 'fa fa-expeditedssl', + 'menu_type' => 'tab', + 'component' => '/src/views/backend/security/sensitiveData/index.vue', + 'keepalive' => '1', + 'remark' => 'Remark lang', + 'weigh' => '81', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '72', + 'pid' => '71', + 'type' => 'button', + 'title' => '查看', + 'name' => 'security/sensitiveData/index', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '73', + 'pid' => '71', + 'type' => 'button', + 'title' => '添加', + 'name' => 'security/sensitiveData/add', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '74', + 'pid' => '71', + 'type' => 'button', + 'title' => '编辑', + 'name' => 'security/sensitiveData/edit', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '75', + 'pid' => '71', + 'type' => 'button', + 'title' => '删除', + 'name' => 'security/sensitiveData/del', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '76', + 'type' => 'menu', + 'title' => 'BuildAdmin', + 'name' => 'buildadmin/buildadmin', + 'path' => 'buildadmin', + 'icon' => 'local-logo', + 'menu_type' => 'link', + 'url' => 'https://doc.buildadmin.com', + 'status' => '0', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '77', + 'pid' => '45', + 'type' => 'button', + 'title' => '添加', + 'name' => 'routine/config/add', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '78', + 'type' => 'menu', + 'title' => '模块市场', + 'name' => 'moduleStore/moduleStore', + 'path' => 'moduleStore', + 'icon' => 'el-icon-GoodsFilled', + 'menu_type' => 'tab', + 'component' => '/src/views/backend/module/index.vue', + 'keepalive' => '1', + 'weigh' => '86', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '79', + 'pid' => '78', + 'type' => 'button', + 'title' => '查看', + 'name' => 'moduleStore/moduleStore/index', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '80', + 'pid' => '78', + 'type' => 'button', + 'title' => '安装', + 'name' => 'moduleStore/moduleStore/install', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '81', + 'pid' => '78', + 'type' => 'button', + 'title' => '调整状态', + 'name' => 'moduleStore/moduleStore/changeState', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '82', + 'pid' => '78', + 'type' => 'button', + 'title' => '卸载', + 'name' => 'moduleStore/moduleStore/uninstall', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '83', + 'pid' => '78', + 'type' => 'button', + 'title' => '更新', + 'name' => 'moduleStore/moduleStore/update', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '84', + 'type' => 'menu', + 'title' => 'CRUD代码生成', + 'name' => 'crud/crud', + 'path' => 'crud/crud', + 'icon' => 'fa fa-code', + 'menu_type' => 'tab', + 'component' => '/src/views/backend/crud/index.vue', + 'keepalive' => '1', + 'weigh' => '80', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '85', + 'pid' => '84', + 'type' => 'button', + 'title' => '查看', + 'name' => 'crud/crud/index', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '86', + 'pid' => '84', + 'type' => 'button', + 'title' => '生成', + 'name' => 'crud/crud/generate', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '87', + 'pid' => '84', + 'type' => 'button', + 'title' => '删除', + 'name' => 'crud/crud/delete', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => '88', + 'pid' => '45', + 'type' => 'button', + 'title' => '删除', + 'name' => 'routine/config/del', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + ]; + $exist = Db::name('menu_rule')->where('id', 1)->value('id'); + if (!$exist) { + $table->insert($rows)->saveData(); + } + } + + public function securityDataRecycle(): void + { + $table = $this->table('security_data_recycle'); + $rows = [ + [ + 'id' => 1, + 'name' => '管理员', + 'controller' => 'auth/Admin.php', + 'controller_as' => 'auth/admin', + 'data_table' => 'admin', + 'primary_key' => 'id', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => 2, + 'name' => '管理员日志', + 'controller' => 'auth/AdminLog.php', + 'controller_as' => 'auth/adminlog', + 'data_table' => 'admin_log', + 'primary_key' => 'id', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => 3, + 'name' => '菜单规则', + 'controller' => 'auth/Menu.php', + 'controller_as' => 'auth/menu', + 'data_table' => 'menu_rule', + 'primary_key' => 'id', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => 4, + 'name' => '系统配置项', + 'controller' => 'routine/Config.php', + 'controller_as' => 'routine/config', + 'data_table' => 'config', + 'primary_key' => 'id', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => 5, + 'name' => '会员', + 'controller' => 'user/User.php', + 'controller_as' => 'user/user', + 'data_table' => 'user', + 'primary_key' => 'id', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => 6, + 'name' => '数据回收规则', + 'controller' => 'security/DataRecycle.php', + 'controller_as' => 'security/datarecycle', + 'data_table' => 'security_data_recycle', + 'primary_key' => 'id', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + ]; + $exist = Db::name('security_data_recycle')->where('id', 1)->value('id'); + if (!$exist) { + $table->insert($rows)->saveData(); + } + } + + public function securitySensitiveData(): void + { + $table = $this->table('security_sensitive_data'); + $rows = [ + [ + 'id' => 1, + 'name' => '管理员数据', + 'controller' => 'auth/Admin.php', + 'controller_as' => 'auth/admin', + 'data_table' => 'admin', + 'primary_key' => 'id', + 'data_fields' => '{"username":"用户名","mobile":"手机","password":"密码","status":"状态"}', + 'status' => '1', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => 2, + 'name' => '会员数据', + 'controller' => 'user/User.php', + 'controller_as' => 'user/user', + 'data_table' => 'user', + 'primary_key' => 'id', + 'data_fields' => '{"username":"用户名","mobile":"手机号","password":"密码","status":"状态","email":"邮箱地址"}', + 'status' => '1', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => 3, + 'name' => '管理员权限', + 'controller' => 'auth/Group.php', + 'controller_as' => 'auth/group', + 'data_table' => 'admin_group', + 'primary_key' => 'id', + 'data_fields' => '{"rules":"权限规则ID"}', + 'status' => '1', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + ]; + $exist = Db::name('security_sensitive_data')->where('id', 1)->value('id'); + if (!$exist) { + $table->insert($rows)->saveData(); + } + } + + public function user(): void + { + $table = $this->table('user'); + $rows = [ + [ + 'id' => 1, + 'group_id' => 1, + 'username' => 'user', + 'nickname' => 'User', + 'email' => '18888888888@qq.com', + 'mobile' => '18888888888', + 'gender' => '2', + 'birthday' => date('Y-m-d'), + 'status' => 'enable', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ] + ]; + $exist = Db::name('user')->where('id', 1)->value('id'); + if (!$exist) { + $table->insert($rows)->saveData(); + } + } + + public function userGroup(): void + { + $table = $this->table('user_group'); + $rows = [ + [ + 'id' => 1, + 'name' => '默认分组', + 'rules' => '*', + 'status' => '1', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ] + ]; + $exist = Db::name('user_group')->where('id', 1)->value('id'); + if (!$exist) { + $table->insert($rows)->saveData(); + } + } + + public function userRule(): void + { + $table = $this->table('user_rule'); + $rows = [ + [ + 'id' => 1, + 'pid' => 0, + 'type' => 'menu_dir', + 'title' => '我的账户', + 'name' => 'account', + 'path' => 'account', + 'icon' => 'fa fa-user-circle', + 'menu_type' => 'tab', + 'weigh' => '98', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => 2, + 'pid' => 1, + 'type' => 'menu', + 'title' => '账户概览', + 'name' => 'account/overview', + 'path' => 'account/overview', + 'icon' => 'fa fa-home', + 'menu_type' => 'tab', + 'component' => '/src/views/frontend/user/account/overview.vue', + 'weigh' => '99', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => 3, + 'pid' => 1, + 'type' => 'menu', + 'title' => '个人资料', + 'name' => 'account/profile', + 'path' => 'account/profile', + 'icon' => 'fa fa-user-circle-o', + 'menu_type' => 'tab', + 'component' => '/src/views/frontend/user/account/profile.vue', + 'weigh' => '98', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => 4, + 'pid' => 1, + 'type' => 'menu', + 'title' => '修改密码', + 'name' => 'account/changePassword', + 'path' => 'account/changePassword', + 'icon' => 'fa fa-shield', + 'menu_type' => 'tab', + 'component' => '/src/views/frontend/user/account/changePassword.vue', + 'weigh' => '97', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => 5, + 'pid' => 1, + 'type' => 'menu', + 'title' => '积分记录', + 'name' => 'account/integral', + 'path' => 'account/integral', + 'icon' => 'fa fa-tag', + 'menu_type' => 'tab', + 'component' => '/src/views/frontend/user/account/integral.vue', + 'weigh' => '96', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ], + [ + 'id' => 6, + 'pid' => 1, + 'type' => 'menu', + 'title' => '余额记录', + 'name' => 'account/balance', + 'path' => 'account/balance', + 'icon' => 'fa fa-money', + 'menu_type' => 'tab', + 'component' => '/src/views/frontend/user/account/balance.vue', + 'weigh' => '95', + 'updatetime' => $this->nowTime, + 'createtime' => $this->nowTime, + ] + ]; + $exist = Db::name('user_rule')->where('id', 1)->value('id'); + if (!$exist) { + $table->insert($rows)->saveData(); + } + } +} diff --git a/database/migrations/20230622221507_version200.php b/database/migrations/20230622221507_version200.php new file mode 100644 index 0000000..ecab8d1 --- /dev/null +++ b/database/migrations/20230622221507_version200.php @@ -0,0 +1,179 @@ +table('admin'); + if ($admin->hasColumn('loginfailure')) { + // 字段改名 + $admin->renameColumn('loginfailure', 'login_failure') + ->renameColumn('lastlogintime', 'last_login_time') + ->renameColumn('lastloginip', 'last_login_ip') + ->renameColumn('updatetime', 'update_time') + ->renameColumn('createtime', 'create_time') + ->changeColumn('update_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间']) + ->changeColumn('create_time', 'biginteger', ['after' => 'update_time', 'limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->save(); + } + + $adminGroup = $this->table('admin_group'); + if ($adminGroup->hasColumn('updatetime')) { + $adminGroup->renameColumn('updatetime', 'update_time') + ->renameColumn('createtime', 'create_time') + ->changeColumn('update_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间']) + ->changeColumn('create_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->save(); + } + + $adminLog = $this->table('admin_log'); + if ($adminLog->hasColumn('createtime')) { + $adminLog->renameColumn('createtime', 'create_time') + ->changeColumn('create_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->changeColumn('data', 'text', ['limit' => MysqlAdapter::TEXT_LONG, 'null' => true, 'default' => null, 'comment' => '请求数据']) + ->save(); + } + + $attachment = $this->table('attachment'); + if ($attachment->hasColumn('createtime')) { + $attachment->renameColumn('createtime', 'create_time') + ->renameColumn('lastuploadtime', 'last_upload_time') + ->changeColumn('create_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->changeColumn('last_upload_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '最后上传时间']) + ->save(); + } + + $captcha = $this->table('captcha'); + if ($captcha->hasColumn('createtime')) { + $captcha->renameColumn('createtime', 'create_time') + ->renameColumn('expiretime', 'expire_time') + ->changeColumn('create_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->changeColumn('expire_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '过期时间']) + ->changeColumn('captcha', 'text', ['limit' => MysqlAdapter::TEXT_REGULAR, 'null' => true, 'default' => null, 'comment' => '验证码数据']) + ->save(); + } + + if ($this->hasTable('menu_rule')) { + $menuRule = $this->table('menu_rule'); + if ($menuRule->hasColumn('updatetime') && $this->hasTable('menu_rule')) { + $menuRule->renameColumn('updatetime', 'update_time') + ->renameColumn('createtime', 'create_time') + ->changeColumn('update_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间']) + ->changeColumn('create_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->save(); + $menuRule->rename('admin_rule')->save(); + Db::name('admin_rule') + ->where('name', 'auth/menu') + ->update([ + 'name' => 'auth/rule', + 'path' => 'auth/rule', + 'component' => '/src/views/backend/auth/rule/index.vue', + ]); + Db::name('admin_rule')->where('name', 'auth/menu/index')->update(['name' => 'auth/rule/index']); + Db::name('admin_rule')->where('name', 'auth/menu/add')->update(['name' => 'auth/rule/add']); + Db::name('admin_rule')->where('name', 'auth/menu/edit')->update(['name' => 'auth/rule/edit']); + Db::name('admin_rule')->where('name', 'auth/menu/del')->update(['name' => 'auth/rule/del']); + Db::name('admin_rule')->where('name', 'auth/menu/sortable')->update(['name' => 'auth/rule/sortable']); + Db::name('admin_rule')->whereIn('name', [ + 'dashboard/dashboard', + 'routine/attachment', + ])->update(['remark' => 'Remark lang']); + } + } + + $securityDataRecycle = $this->table('security_data_recycle'); + if ($securityDataRecycle->hasColumn('updatetime')) { + $securityDataRecycle->renameColumn('updatetime', 'update_time') + ->renameColumn('createtime', 'create_time') + ->changeColumn('update_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间']) + ->changeColumn('create_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->save(); + } + + $securityDataRecycleLog = $this->table('security_data_recycle_log'); + if ($securityDataRecycleLog->hasColumn('createtime')) { + $securityDataRecycleLog->renameColumn('createtime', 'create_time') + ->changeColumn('create_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->save(); + } + + $securitySensitiveData = $this->table('security_sensitive_data'); + if ($securitySensitiveData->hasColumn('updatetime')) { + $securitySensitiveData->renameColumn('updatetime', 'update_time') + ->renameColumn('createtime', 'create_time') + ->changeColumn('update_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间']) + ->changeColumn('create_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->save(); + } + + $securitySensitiveDataLog = $this->table('security_sensitive_data_log'); + if ($securitySensitiveDataLog->hasColumn('createtime')) { + $securitySensitiveDataLog->renameColumn('createtime', 'create_time') + ->changeColumn('create_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->save(); + } + + $token = $this->table('token'); + if ($token->hasColumn('createtime')) { + $token->renameColumn('createtime', 'create_time') + ->renameColumn('expiretime', 'expire_time') + ->changeColumn('create_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->changeColumn('expire_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '过期时间']) + ->save(); + } + + $userGroup = $this->table('user_group'); + if ($userGroup->hasColumn('createtime')) { + $userGroup->renameColumn('updatetime', 'update_time') + ->renameColumn('createtime', 'create_time') + ->changeColumn('update_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间']) + ->changeColumn('create_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->save(); + } + + $userMoneyLog = $this->table('user_money_log'); + if ($userMoneyLog->hasColumn('createtime')) { + $userMoneyLog->renameColumn('createtime', 'create_time') + ->changeColumn('create_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->save(); + } + + $userRule = $this->table('user_rule'); + if ($userRule->hasColumn('createtime')) { + $userRule->renameColumn('updatetime', 'update_time') + ->renameColumn('createtime', 'create_time') + ->changeColumn('update_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间']) + ->changeColumn('create_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->changeColumn('type', 'enum', ['values' => 'route,menu_dir,menu,nav_user_menu,nav,button', 'default' => 'menu', 'comment' => '类型:route=路由,menu_dir=菜单目录,menu=菜单项,nav_user_menu=顶栏会员菜单下拉项,nav=顶栏菜单项,button=页面按钮', 'null' => false]); + if (!$userRule->hasColumn('no_login_valid')) { + $userRule->addColumn('no_login_valid', 'integer', ['signed' => false, 'limit' => MysqlAdapter::INT_TINY, 'default' => 0, 'comment' => '未登录有效:0=否,1=是']); + } + $userRule->save(); + } + + $userScoreLog = $this->table('user_score_log'); + if ($userScoreLog->hasColumn('createtime')) { + $userScoreLog->renameColumn('createtime', 'create_time') + ->changeColumn('create_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->save(); + } + + $user = $this->table('user'); + if ($user->hasColumn('loginfailure')) { + $user->renameColumn('lastlogintime', 'last_login_time') + ->renameColumn('lastloginip', 'last_login_ip') + ->renameColumn('loginfailure', 'login_failure') + ->renameColumn('joinip', 'join_ip') + ->renameColumn('jointime', 'join_time') + ->renameColumn('updatetime', 'update_time') + ->renameColumn('createtime', 'create_time') + ->changeColumn('update_time', 'biginteger', ['limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '更新时间']) + ->changeColumn('create_time', 'biginteger', ['after' => 'update_time', 'limit' => 16, 'signed' => false, 'null' => true, 'default' => null, 'comment' => '创建时间']) + ->save(); + } + } +} diff --git a/database/migrations/20230719211338_version201.php b/database/migrations/20230719211338_version201.php new file mode 100644 index 0000000..d780d79 --- /dev/null +++ b/database/migrations/20230719211338_version201.php @@ -0,0 +1,16 @@ +table('user'); + if ($user->hasIndex('email')) { + $user->removeIndexByName('email') + ->removeIndexByName('mobile') + ->update(); + } + } +} diff --git a/database/migrations/20230905060702_version202.php b/database/migrations/20230905060702_version202.php new file mode 100644 index 0000000..226f6a9 --- /dev/null +++ b/database/migrations/20230905060702_version202.php @@ -0,0 +1,68 @@ +where('name', 'dashboard/dashboard') + ->lock(true) + ->value('id'); + if ($dashboardId) { + // 修改name + Db::name('admin_rule') + ->where('name', 'dashboard/dashboard') + ->update([ + 'name' => 'dashboard', + ]); + + // 增加一个查看的权限节点 + $dashboardIndexId = Db::name('admin_rule')->insertGetId([ + 'pid' => $dashboardId, + 'type' => 'button', + 'title' => '查看', + 'name' => 'dashboard/index', + 'update_time' => time(), + 'create_time' => time(), + ]); + + // 原本有控制台权限的管理员,给予新增的查看权限 + $group = Db::name('admin_group') + ->where('rules', 'find in set', $dashboardId) + ->select(); + foreach ($group as $item) { + + $newRules = trim($item['rules'], ','); + $newRules = $newRules . ',' . $dashboardIndexId; + + Db::name('admin_group') + ->where('id', $item['id']) + ->update([ + 'rules' => $newRules + ]); + } + } + + // 修改name + Db::name('admin_rule') + ->where('name', 'buildadmin/buildadmin') + ->update([ + 'name' => 'buildadmin', + ]); + + Db::commit(); + } catch (Throwable $e) { + Db::rollback(); + throw $e; + } + } +} diff --git a/database/migrations/20231112093414_version205.php b/database/migrations/20231112093414_version205.php new file mode 100644 index 0000000..6cf80e5 --- /dev/null +++ b/database/migrations/20231112093414_version205.php @@ -0,0 +1,24 @@ +find(); + $value = $configQuickEntrance->value; + foreach ($value as &$item) { + if (str_starts_with($item['value'], '/admin/')) { + $pathData = Db::name('admin_rule')->where('path', substr($item['value'], 7))->find(); + if ($pathData) { + $item['value'] = $pathData['name']; + } + } + } + $configQuickEntrance->value = $value; + $configQuickEntrance->save(); + } +} diff --git a/database/migrations/20231229043002_version206.php b/database/migrations/20231229043002_version206.php new file mode 100644 index 0000000..d36f141 --- /dev/null +++ b/database/migrations/20231229043002_version206.php @@ -0,0 +1,60 @@ +where('name', 'backend_entrance')->value('id'); + if (!$exist) { + $rows = [ + [ + 'name' => 'backend_entrance', + 'group' => 'basics', + 'title' => 'Backend entrance', + 'type' => 'string', + 'value' => '/admin', + 'rule' => 'required', + 'weigh' => 1, + ], + ]; + $table = $this->table('config'); + $table->insert($rows)->saveData(); + } + + $crudLog = $this->table('crud_log'); + if (!$crudLog->hasColumn('connection')) { + $crudLog->addColumn('connection', 'string', ['limit' => 100, 'default' => '', 'comment' => '数据库连接配置标识', 'null' => false, 'after' => 'status']); + $crudLog->save(); + } + + $securityDataRecycle = $this->table('security_data_recycle'); + if (!$securityDataRecycle->hasColumn('connection')) { + $securityDataRecycle->addColumn('connection', 'string', ['limit' => 100, 'default' => '', 'comment' => '数据库连接配置标识', 'null' => false, 'after' => 'data_table']); + $securityDataRecycle->save(); + } + + $securityDataRecycleLog = $this->table('security_data_recycle_log'); + if (!$securityDataRecycleLog->hasColumn('connection')) { + $securityDataRecycleLog->addColumn('connection', 'string', ['limit' => 100, 'default' => '', 'comment' => '数据库连接配置标识', 'null' => false, 'after' => 'data_table']); + $securityDataRecycleLog->save(); + } + + $securitySensitiveData = $this->table('security_sensitive_data'); + if (!$securitySensitiveData->hasColumn('connection')) { + $securitySensitiveData->addColumn('connection', 'string', ['limit' => 100, 'default' => '', 'comment' => '数据库连接配置标识', 'null' => false, 'after' => 'data_table']); + $securitySensitiveData->save(); + } + + $securitySensitiveDataLog = $this->table('security_sensitive_data_log'); + if (!$securitySensitiveDataLog->hasColumn('connection')) { + $securitySensitiveDataLog->addColumn('connection', 'string', ['limit' => 100, 'default' => '', 'comment' => '数据库连接配置标识', 'null' => false, 'after' => 'data_table']); + $securitySensitiveDataLog->save(); + } + } +} diff --git a/database/migrations/20250412134127_version222.php b/database/migrations/20250412134127_version222.php new file mode 100644 index 0000000..60ace92 --- /dev/null +++ b/database/migrations/20250412134127_version222.php @@ -0,0 +1,80 @@ +table('attachment'); + $attachment->changeColumn('name', 'string', ['limit' => 120, 'default' => '', 'comment' => '原始名称', 'null' => false])->save(); + + /** + * 用户表 + * 1. status 注释优化 + * 2. password 增加长度至 password_hash 建议值 + * 3. salt 注释中标记废弃待删除 + */ + $user = $this->table('user'); + $user->changeColumn('status', 'string', ['limit' => 30, 'default' => '', 'comment' => '状态:enable=启用,disable=禁用', 'null' => false]) + ->changeColumn('password', 'string', ['limit' => 255, 'default' => '', 'comment' => '密码', 'null' => false]) + ->changeColumn('salt', 'string', ['limit' => 30, 'default' => '', 'comment' => '密码盐(废弃待删)', 'null' => false]) + ->save(); + + /** + * 管理员表 + * 1. status 改为字符串存储 + * 2. 其他和以上用户表的改动相同 + */ + $admin = $this->table('admin'); + $admin->changeColumn('status', 'string', ['limit' => 30, 'default' => '', 'comment' => '状态:enable=启用,disable=禁用', 'null' => false]) + ->changeColumn('password', 'string', ['limit' => 255, 'default' => '', 'comment' => '密码', 'null' => false]) + ->changeColumn('salt', 'string', ['limit' => 30, 'default' => '', 'comment' => '密码盐(废弃待删)', 'null' => false]) + ->save(); + + Db::name('admin')->where('status', '0')->update(['status' => 'disable']); + Db::name('admin')->where('status', '1')->update(['status' => 'enable']); + + /** + * CRUD 历史记录表 + */ + $crudLog = $this->table('crud_log'); + if (!$crudLog->hasColumn('comment')) { + $crudLog + ->addColumn('comment', 'string', ['limit' => 255, 'default' => '', 'comment' => '注释', 'null' => false, 'after' => 'table_name']) + ->addColumn('sync', 'integer', ['default' => 0, 'signed' => false, 'comment' => '同步记录', 'null' => false, 'after' => 'fields']) + ->save(); + + $logs = CrudLog::select(); + foreach ($logs as $log) { + if ($log->table['comment']) { + $log->comment = $log->table['comment']; + $log->save(); + } + } + } + + /** + * 多个数据表的 status 字段类型修改为更合理的类型 + */ + $tables = ['admin_group', 'admin_rule', 'user_group', 'user_rule', 'security_data_recycle', 'security_sensitive_data', 'test_build']; + foreach ($tables as $table) { + if ($this->hasTable($table)) { + $mTable = $this->table($table); + $mTable->changeColumn('status', 'boolean', ['default' => 1, 'signed' => false, 'comment' => '状态:0=禁用,1=启用', 'null' => false])->save(); + + // 原状态值兼容至新类型 + Db::name($table)->where('status', 1)->update(['status' => 0]); + Db::name($table)->where('status', 2)->update(['status' => 1]); + } + } + } +} diff --git a/extend/ba/Auth.php b/extend/ba/Auth.php new file mode 100644 index 0000000..b1fdb65 --- /dev/null +++ b/extend/ba/Auth.php @@ -0,0 +1,241 @@ + 'admin_group', // 用户组数据表名 + 'auth_group_access' => 'admin_group_access', // 用户-用户组关系表 + 'auth_rule' => 'admin_rule', // 权限规则表 + ]; + + /** + * 子菜单规则数组 + * @var array + */ + protected array $children = []; + + /** + * 构造方法 + * @param array $config + */ + public function __construct(array $config = []) + { + $this->config = array_merge($this->config, $config); + } + + /** + * 魔术方法-获取当前配置 + * @param $name + * @return mixed + */ + public function __get($name): mixed + { + return $this->config[$name]; + } + + /** + * 获取菜单规则列表 + * @access public + * @param int $uid 用户ID + * @return array + * @throws Throwable + */ + public function getMenus(int $uid): array + { + $this->children = []; + $originAuthRules = $this->getOriginAuthRules($uid); + foreach ($originAuthRules as $rule) { + $this->children[$rule['pid']][] = $rule; + } + + // 没有根菜单规则 + if (!isset($this->children[0])) return []; + + return $this->getChildren($this->children[0]); + } + + /** + * 获取传递的菜单规则的子规则 + * @param array $rules 菜单规则 + * @return array + */ + private function getChildren(array $rules): array + { + foreach ($rules as $key => $rule) { + if (array_key_exists($rule['id'], $this->children)) { + $rules[$key]['children'] = $this->getChildren($this->children[$rule['id']]); + } + } + return $rules; + } + + /** + * 检查是否有某权限 + * @param string $name 菜单规则的 name,可以传递两个,以','号隔开 + * @param int $uid 用户ID + * @param string $relation 如果出现两个 name,是两个都通过(and)还是一个通过即可(or) + * @param string $mode 如果不使用 url 则菜单规则name匹配到即通过 + * @return bool + * @throws Throwable + */ + public function check(string $name, int $uid, string $relation = 'or', string $mode = 'url'): bool + { + // 获取用户需要验证的所有有效规则列表 + $ruleList = $this->getRuleList($uid); + if (in_array('*', $ruleList)) { + return true; + } + + if ($name) { + $name = strtolower($name); + if (str_contains($name, ',')) { + $name = explode(',', $name); + } else { + $name = [$name]; + } + } + $list = []; //保存验证通过的规则名 + if ('url' == $mode) { + $REQUEST = json_decode(strtolower(json_encode(request()->param(), JSON_UNESCAPED_UNICODE)), true); + } + foreach ($ruleList as $rule) { + $query = preg_replace('/^.+\?/U', '', $rule); + if ('url' == $mode && $query != $rule) { + parse_str($query, $param); //解析规则中的param + $intersect = array_intersect_assoc($REQUEST, $param); + $rule = preg_replace('/\?.*$/U', '', $rule); + if (in_array($rule, $name) && $intersect == $param) { + // 如果节点相符且url参数满足 + $list[] = $rule; + } + } elseif (in_array($rule, $name)) { + $list[] = $rule; + } + } + if ('or' == $relation && !empty($list)) { + return true; + } + $diff = array_diff($name, $list); + if ('and' == $relation && empty($diff)) { + return true; + } + + return false; + } + + /** + * 获得权限规则列表 + * @param int $uid 用户id + * @return array + * @throws Throwable + */ + public function getRuleList(int $uid): array + { + // 读取用户规则节点 + $ids = $this->getRuleIds($uid); + if (empty($ids)) return []; + + $originAuthRules = $this->getOriginAuthRules($uid); + + // 用户规则 + $rules = []; + if (in_array('*', $ids)) { + $rules[] = "*"; + } + foreach ($originAuthRules as $rule) { + $rules[$rule['id']] = strtolower($rule['name']); + } + return array_unique($rules); + } + + /** + * 获得权限规则原始数据 + * @param int $uid 用户id + * @return array + * @throws Throwable + */ + public function getOriginAuthRules(int $uid): array + { + $ids = $this->getRuleIds($uid); + if (empty($ids)) return []; + + $where = []; + $where[] = ['status', '=', '1']; + // 如果没有 * 则只获取用户拥有的规则 + if (!in_array('*', $ids)) { + $where[] = ['id', 'in', $ids]; + } + $rules = Db::name($this->config['auth_rule']) + ->withoutField(['remark', 'status', 'weigh', 'update_time', 'create_time']) + ->where($where) + ->order('weigh desc,id asc') + ->select() + ->toArray(); + foreach ($rules as $key => $rule) { + if (!empty($rule['keepalive'])) { + $rules[$key]['keepalive'] = $rule['name']; + } + } + + return $rules; + } + + /** + * 获取权限规则ids + * @param int $uid + * @return array + * @throws Throwable + */ + public function getRuleIds(int $uid): array + { + // 用户的组别和规则ID + $groups = $this->getGroups($uid); + $ids = []; + foreach ($groups as $g) { + $ids = array_merge($ids, explode(',', trim($g['rules'], ','))); + } + return array_unique($ids); + } + + /** + * 获取用户所有分组和对应权限规则 + * @param int $uid + * @return array + * @throws Throwable + */ + public function getGroups(int $uid): array + { + $dbName = $this->config['auth_group_access'] ?: 'user'; + if ($this->config['auth_group_access']) { + $userGroups = Db::name($dbName) + ->alias('aga') + ->join($this->config['auth_group'] . ' ag', 'aga.group_id = ag.id', 'LEFT') + ->field('aga.uid,aga.group_id,ag.id,ag.pid,ag.name,ag.rules') + ->where("aga.uid='$uid' and ag.status='1'") + ->select() + ->toArray(); + } else { + $userGroups = Db::name($dbName) + ->alias('u') + ->join($this->config['auth_group'] . ' ag', 'u.group_id = ag.id', 'LEFT') + ->field('u.id as uid,u.group_id,ag.id,ag.name,ag.rules') + ->where("u.id='$uid' and ag.status='1'") + ->select() + ->toArray(); + } + + return $userGroups; + } +} \ No newline at end of file diff --git a/extend/ba/Captcha.php b/extend/ba/Captcha.php new file mode 100644 index 0000000..ed05c83 --- /dev/null +++ b/extend/ba/Captcha.php @@ -0,0 +1,441 @@ + +// +---------------------------------------------------------------------- +// | 妙码生花在 2022-2-26 进行修订,通过Mysql保存验证码而不是Session以更好的支持API访问 +// | 使用Cache不能清理过期验证码,且一旦执行清理缓存操作,验证码将失效 +// +---------------------------------------------------------------------- + +namespace ba; + +use GdImage; +use Throwable; +use think\Response; +use think\facade\Db; + +/** + * 验证码类(图形验证码、继续流程验证码) + * @property string $seKey 验证码加密密钥 + * @property string $codeSet 验证码字符集合 + * @property int $expire 验证码过期时间(s) + * @property bool $useZh 使用中文验证码 + * @property string $zhSet 中文验证码字符串 + * @property bool $useImgBg 使用背景图片 + * @property int $fontSize 验证码字体大小(px) + * @property bool $useCurve 是否画混淆曲线 + * @property bool $useNoise 是否添加杂点 + * @property int $imageH 验证码图片高度 + * @property int $imageW 验证码图片宽度 + * @property int $length 验证码位数 + * @property string $fontTtf 验证码字体,不设置随机获取 + * @property array $bg 背景颜色 + * @property bool $reset 验证成功后是否重置 + */ +class Captcha +{ + protected array $config = [ + // 验证码加密密钥 + 'seKey' => 'BuildAdmin', + // 验证码字符集合 + 'codeSet' => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY', + // 验证码过期时间(s) + 'expire' => 600, + // 使用中文验证码 + 'useZh' => false, + // 中文验证码字符串 + 'zhSet' => '们以我到他会作时要动国产的一是工就年阶义发成部民可出能方进在了不和有大这主中人上为来分生对于学下级地个用同行面说种过命度革而多子后自社加小机也经力线本电高量长党得实家定深法表着水理化争现所二起政三好十战无农使性前等反体合斗路图把结第里正新开论之物从当两些还天资事队批点育重其思与间内去因件日利相由压员气业代全组数果期导平各基或月毛然如应形想制心样干都向变关问比展那它最及外没看治提五解系林者米群头意只明四道马认次文通但条较克又公孔领军流入接席位情运器并飞原油放立题质指建区验活众很教决特此常石强极土少已根共直团统式转别造切九你取西持总料连任志观调七么山程百报更见必真保热委手改管处己将修支识病象几先老光专什六型具示复安带每东增则完风回南广劳轮科北打积车计给节做务被整联步类集号列温装即毫知轴研单色坚据速防史拉世设达尔场织历花受求传口断况采精金界品判参层止边清至万确究书术状厂须离再目海交权且儿青才证低越际八试规斯近注办布门铁需走议县兵固除般引齿千胜细影济白格效置推空配刀叶率述今选养德话查差半敌始片施响收华觉备名红续均药标记难存测士身紧液派准斤角降维板许破述技消底床田势端感往神便贺村构照容非搞亚磨族火段算适讲按值美态黄易彪服早班麦削信排台声该击素张密害侯草何树肥继右属市严径螺检左页抗苏显苦英快称坏移约巴材省黑武培著河帝仅针怎植京助升王眼她抓含苗副杂普谈围食射源例致酸旧却充足短划剂宣环落首尺波承粉践府鱼随考刻靠够满夫失包住促枝局菌杆周护岩师举曲春元超负砂封换太模贫减阳扬江析亩木言球朝医校古呢稻宋听唯输滑站另卫字鼓刚写刘微略范供阿块某功套友限项余倒卷创律雨让骨远帮初皮播优占死毒圈伟季训控激找叫云互跟裂粮粒母练塞钢顶策双留误础吸阻故寸盾晚丝女散焊功株亲院冷彻弹错散商视艺灭版烈零室轻血倍缺厘泵察绝富城冲喷壤简否柱李望盘磁雄似困巩益洲脱投送奴侧润盖挥距触星松送获兴独官混纪依未突架宽冬章湿偏纹吃执阀矿寨责熟稳夺硬价努翻奇甲预职评读背协损棉侵灰虽矛厚罗泥辟告卵箱掌氧恩爱停曾溶营终纲孟钱待尽俄缩沙退陈讨奋械载胞幼哪剥迫旋征槽倒握担仍呀鲜吧卡粗介钻逐弱脚怕盐末阴丰雾冠丙街莱贝辐肠付吉渗瑞惊顿挤秒悬姆烂森糖圣凹陶词迟蚕亿矩康遵牧遭幅园腔订香肉弟屋敏恢忘编印蜂急拿扩伤飞露核缘游振操央伍域甚迅辉异序免纸夜乡久隶缸夹念兰映沟乙吗儒杀汽磷艰晶插埃燃欢铁补咱芽永瓦倾阵碳演威附牙芽永瓦斜灌欧献顺猪洋腐请透司危括脉宜笑若尾束壮暴企菜穗楚汉愈绿拖牛份染既秋遍锻玉夏疗尖殖井费州访吹荣铜沿替滚客召旱悟刺脑措贯藏敢令隙炉壳硫煤迎铸粘探临薄旬善福纵择礼愿伏残雷延烟句纯渐耕跑泽慢栽鲁赤繁境潮横掉锥希池败船假亮谓托伙哲怀割摆贡呈劲财仪沉炼麻罪祖息车穿货销齐鼠抽画饲龙库守筑房歌寒喜哥洗蚀废纳腹乎录镜妇恶脂庄擦险赞钟摇典柄辩竹谷卖乱虚桥奥伯赶垂途额壁网截野遗静谋弄挂课镇妄盛耐援扎虑键归符庆聚绕摩忙舞遇索顾胶羊湖钉仁音迹碎伸灯避泛亡答勇频皇柳哈揭甘诺概宪浓岛袭谁洪谢炮浇斑讯懂灵蛋闭孩释乳巨徒私银伊景坦累匀霉杜乐勒隔弯绩招绍胡呼痛峰零柴簧午跳居尚丁秦稍追梁折耗碱殊岗挖氏刃剧堆赫荷胸衡勤膜篇登驻案刊秧缓凸役剪川雪链渔啦脸户洛孢勃盟买杨宗焦赛旗滤硅炭股坐蒸凝竟陷枪黎救冒暗洞犯筒您宋弧爆谬涂味津臂障褐陆啊健尊豆拔莫抵桑坡缝警挑污冰柬嘴啥饭塑寄赵喊垫丹渡耳刨虎笔稀昆浪萨茶滴浅拥穴覆伦娘吨浸袖珠雌妈紫戏塔锤震岁貌洁剖牢锋疑霸闪埔猛诉刷狠忽灾闹乔唐漏闻沈熔氯荒茎男凡抢像浆旁玻亦忠唱蒙予纷捕锁尤乘乌智淡允叛畜俘摸锈扫毕璃宝芯爷鉴秘净蒋钙肩腾枯抛轨堂拌爸循诱祝励肯酒绳穷塘燥泡袋朗喂铝软渠颗惯贸粪综墙趋彼届墨碍启逆卸航衣孙龄岭骗休借', + // 使用背景图片 + 'useImgBg' => false, + // 验证码字体大小(px) + 'fontSize' => 25, + // 是否画混淆曲线 + 'useCurve' => true, + // 是否添加杂点 + 'useNoise' => true, + // 验证码图片高度 + 'imageH' => 0, + // 验证码图片宽度 + 'imageW' => 0, + // 验证码位数 + 'length' => 4, + // 验证码字体,不设置随机获取 + 'fontTtf' => '', + // 背景颜色 + 'bg' => [243, 251, 254], + // 验证成功后是否重置 + 'reset' => true, + ]; + + /** + * 验证码图片实例 + * @var GdImage|resource|null + */ + private $image = null; + + /** + * 验证码字体颜色 + * @var bool|int|null + */ + private bool|int|null $color = null; + + /** + * 架构方法 设置参数 + * @param array $config 配置参数 + * @throws Throwable + */ + public function __construct(array $config = []) + { + $this->config = array_merge($this->config, $config); + + // 清理过期的验证码 + Db::name('captcha') + ->where('expire_time', '<', time()) + ->delete(); + } + + /** + * 使用 $this->name 获取配置 + * @param string $name 配置名称 + * @return mixed 配置值 + */ + public function __get(string $name): mixed + { + return $this->config[$name]; + } + + /** + * 设置验证码配置 + * @param string $name 配置名称 + * @param mixed $value 配置值 + * @return void + */ + public function __set(string $name, mixed $value): void + { + if (isset($this->config[$name])) { + $this->config[$name] = $value; + } + } + + /** + * 检查配置 + * @param string $name 配置名称 + * @return bool + */ + public function __isset(string $name): bool + { + return isset($this->config[$name]); + } + + /** + * 验证验证码是否正确 + * @param string $code 用户验证码 + * @param string $id 验证码标识 + * @return bool 用户验证码是否正确 + * @throws Throwable + */ + public function check(string $code, string $id): bool + { + $key = $this->authCode($this->seKey, $id); + $seCode = Db::name('captcha')->where('key', $key)->find(); + + // 验证码为空 + if (empty($code) || empty($seCode)) { + return false; + } + + // 验证码过期 + if (time() > $seCode['expire_time']) { + Db::name('captcha')->where('key', $key)->delete(); + return false; + } + + if ($this->authCode(strtoupper($code), $id) == $seCode['code']) { + $this->reset && Db::name('captcha')->where('key', $key)->delete(); + return true; + } + + return false; + } + + /** + * 创建一个逻辑验证码可供后续验证(非图形) + * @param string $id 验证码标识 + * @param string|bool $captcha 验证码,不传递则自动生成 + * @return string 生成的验证码,发送出去或做它用... + * @throws Throwable + */ + public function create(string $id, string|bool $captcha = false): string + { + $nowTime = time(); + $key = $this->authCode($this->seKey, $id); + $captchaTemp = Db::name('captcha')->where('key', $key)->find(); + if ($captchaTemp) { + // 重复的为同一标识创建验证码 + Db::name('captcha')->where('key', $key)->delete(); + } + $captcha = $this->generate($captcha); + $code = $this->authCode($captcha, $id); + Db::name('captcha') + ->insert([ + 'key' => $key, + 'code' => $code, + 'captcha' => $captcha, + 'create_time' => $nowTime, + 'expire_time' => $nowTime + $this->expire + ]); + return $captcha; + } + + /** + * 获取验证码数据 + * @param string $id 验证码标识 + * @return array + * @throws Throwable + */ + public function getCaptchaData(string $id): array + { + $key = $this->authCode($this->seKey, $id); + $seCode = Db::name('captcha')->where('key', $key)->find(); + return $seCode ?: []; + } + + /** + * 输出图形验证码并把验证码的值保存的Mysql中 + * @param string $id 要生成验证码的标识 + * @return Response + * @throws Throwable + */ + public function entry(string $id): Response + { + $nowTime = time(); + // 图片宽(px) + $this->imageW || $this->imageW = $this->length * $this->fontSize * 1.5 + $this->length * $this->fontSize / 2; + // 图片高(px) + $this->imageH || $this->imageH = $this->fontSize * 2.5; + // 建立一幅 $this->imageW x $this->imageH 的图像 + $this->image = imagecreate($this->imageW, $this->imageH); + // 设置背景 + imagecolorallocate($this->image, $this->bg[0], $this->bg[1], $this->bg[2]); + + // 验证码字体随机颜色 + $this->color = imagecolorallocate($this->image, mt_rand(1, 150), mt_rand(1, 150), mt_rand(1, 150)); + // 验证码使用随机字体 + $ttfPath = public_path() . 'static' . DIRECTORY_SEPARATOR . 'fonts' . DIRECTORY_SEPARATOR . ($this->useZh ? 'zhttfs' : 'ttfs') . DIRECTORY_SEPARATOR; + + if (empty($this->fontTtf)) { + $dir = dir($ttfPath); + $ttfFiles = []; + while (false !== ($file = $dir->read())) { + if ('.' != $file[0] && str_ends_with($file, '.ttf')) { + $ttfFiles[] = $file; + } + } + $dir->close(); + $this->fontTtf = $ttfFiles[array_rand($ttfFiles)]; + } + $this->fontTtf = $ttfPath . $this->fontTtf; + + if ($this->useImgBg) { + $this->background(); + } + + if ($this->useNoise) { + // 绘杂点 + $this->writeNoise(); + } + if ($this->useCurve) { + // 绘干扰线 + $this->writeCurve(); + } + + $key = $this->authCode($this->seKey, $id); + $captcha = Db::name('captcha')->where('key', $key)->find(); + + // 绘验证码 + if ($captcha && $nowTime <= $captcha['expire_time']) { + $this->writeText($captcha['captcha']); + } else { + $captcha = $this->writeText(); + + // 保存验证码 + $code = $this->authCode(strtoupper(implode('', $captcha)), $id); + Db::name('captcha')->insert([ + 'key' => $key, + 'code' => $code, + 'captcha' => strtoupper(implode('', $captcha)), + 'create_time' => $nowTime, + 'expire_time' => $nowTime + $this->expire + ]); + } + + ob_start(); + // 输出图像 + imagepng($this->image); + $content = ob_get_clean(); + + return response($content, 200, ['Content-Length' => strlen($content)])->contentType('image/png'); + } + + /** + * 绘验证码 + * @param string $captcha 验证码 + * @return array|string 验证码 + */ + private function writeText(string $captcha = ''): array|string + { + $code = []; // 验证码 + $codeNX = 0; // 验证码第N个字符的左边距 + if ($this->useZh) { + // 中文验证码 + for ($i = 0; $i < $this->length; $i++) { + $code[$i] = $captcha ? $captcha[$i] : iconv_substr($this->zhSet, floor(mt_rand(0, mb_strlen($this->zhSet, 'utf-8') - 1)), 1, 'utf-8'); + imagettftext($this->image, $this->fontSize, mt_rand(-40, 40), $this->fontSize * ($i + 1) * 1.5, $this->fontSize + mt_rand(10, 20), (int)$this->color, $this->fontTtf, $code[$i]); + } + } else { + for ($i = 0; $i < $this->length; $i++) { + $code[$i] = $captcha ? $captcha[$i] : $this->codeSet[mt_rand(0, strlen($this->codeSet) - 1)]; + $codeNX += mt_rand((int)($this->fontSize * 1.2), (int)($this->fontSize * 1.6)); + imagettftext($this->image, $this->fontSize, mt_rand(-40, 40), $codeNX, (int)($this->fontSize * 1.6), (int)$this->color, $this->fontTtf, $code[$i]); + } + } + return $captcha ?: $code; + } + + /** + * 画一条由两条连在一起构成的随机正弦函数曲线作干扰线(你可以改成更帅的曲线函数) + * 正弦型函数解析式:y=Asin(ωx+φ)+b + * 各常数值对函数图像的影响: + * A:决定峰值(即纵向拉伸压缩的倍数) + * b:表示波形在Y轴的位置关系或纵向移动距离(上加下减) + * φ:决定波形与X轴位置关系或横向移动距离(左加右减) + * ω:决定周期(最小正周期T=2π/∣ω∣) + */ + private function writeCurve(): void + { + $py = 0; + + // 曲线前部分 + $A = mt_rand(1, $this->imageH / 2); // 振幅 + $b = mt_rand(-$this->imageH / 4, $this->imageH / 4); // Y轴方向偏移量 + $f = mt_rand(-$this->imageH / 4, $this->imageH / 4); // X轴方向偏移量 + $T = mt_rand($this->imageH, $this->imageW * 2); // 周期 + $w = (2 * M_PI) / $T; + + $px1 = 0; // 曲线横坐标起始位置 + $px2 = mt_rand($this->imageW / 2, $this->imageW * 0.8); // 曲线横坐标结束位置 + + for ($px = $px1; $px <= $px2; $px = $px + 1) { + if (0 != $w) { + $py = $A * sin($w * $px + $f) + $b + $this->imageH / 2; // y = Asin(ωx+φ) + b + $i = (int)($this->fontSize / 5); + while ($i > 0) { + imagesetpixel($this->image, $px + $i, $py + $i, (int)$this->color); // 这里(while)循环画像素点比imagettftext和imagestring用字体大小一次画出(不用这while循环)性能要好很多 + $i--; + } + } + } + + // 曲线后部分 + $A = mt_rand(1, $this->imageH / 2); // 振幅 + $f = mt_rand(-$this->imageH / 4, $this->imageH / 4); // X轴方向偏移量 + $T = mt_rand($this->imageH, $this->imageW * 2); // 周期 + $w = (2 * M_PI) / $T; + $b = $py - $A * sin($w * $px + $f) - $this->imageH / 2; + $px1 = $px2; + $px2 = $this->imageW; + + for ($px = $px1; $px <= $px2; $px = $px + 1) { + if (0 != $w) { + $py = $A * sin($w * $px + $f) + $b + $this->imageH / 2; // y = Asin(ωx+φ) + b + $i = (int)($this->fontSize / 5); + while ($i > 0) { + imagesetpixel($this->image, $px + $i, $py + $i, (int)$this->color); + $i--; + } + } + } + } + + /** + * 绘杂点,往图片上写不同颜色的字母或数字 + */ + private function writeNoise(): void + { + $codeSet = '2345678abcdefhijkmnpqrstuvwxyz'; + for ($i = 0; $i < 10; $i++) { + //杂点颜色 + $noiseColor = imagecolorallocate($this->image, mt_rand(150, 225), mt_rand(150, 225), mt_rand(150, 225)); + for ($j = 0; $j < 5; $j++) { + // 绘制 + imagestring($this->image, 5, mt_rand(-10, $this->imageW), mt_rand(-10, $this->imageH), $codeSet[mt_rand(0, 29)], $noiseColor); + } + } + } + + /** + * 绘制背景图片 + * + * 注:如果验证码输出图片比较大,将占用比较多的系统资源 + */ + private function background(): void + { + $path = Filesystem::fsFit(public_path() . 'static/images/captcha/image/'); + $dir = dir($path); + + $bgs = []; + while (false !== ($file = $dir->read())) { + if ('.' != $file[0] && str_ends_with($file, '.jpg')) { + $bgs[] = $path . $file; + } + } + $dir->close(); + + $gb = $bgs[array_rand($bgs)]; + + list($width, $height) = @getimagesize($gb); + // Resample + $bgImage = @imagecreatefromjpeg($gb); + @imagecopyresampled($this->image, $bgImage, 0, 0, 0, 0, $this->imageW, $this->imageH, $width, $height); + } + + + /** + * 加密验证码 + * @param string $str 验证码字符串 + * @param string $id 验证码标识 + */ + private function authCode(string $str, string $id): string + { + $key = substr(md5($this->seKey), 5, 8); + $str = substr(md5($str), 8, 10); + return md5($key . $str . $id); + } + + /** + * 生成验证码随机字符 + * @param bool|string $captcha + * @return string + */ + private function generate(bool|string $captcha = false): string + { + $code = []; // 验证码 + if ($this->useZh) { + // 中文验证码 + for ($i = 0; $i < $this->length; $i++) { + $code[$i] = $captcha ? $captcha[$i] : iconv_substr($this->zhSet, floor(mt_rand(0, mb_strlen($this->zhSet, 'utf-8') - 1)), 1, 'utf-8'); + } + } else { + for ($i = 0; $i < $this->length; $i++) { + $code[$i] = $captcha ? $captcha[$i] : $this->codeSet[mt_rand(0, strlen($this->codeSet) - 1)]; + } + } + $captcha = $captcha ?: implode('', $code); + return strtoupper($captcha); + } +} \ No newline at end of file diff --git a/extend/ba/ClickCaptcha.php b/extend/ba/ClickCaptcha.php new file mode 100644 index 0000000..7330fd7 --- /dev/null +++ b/extend/ba/ClickCaptcha.php @@ -0,0 +1,335 @@ + '飞机', + 'apple' => '苹果', + 'banana' => '香蕉', + 'bell' => '铃铛', + 'bicycle' => '自行车', + 'bird' => '小鸟', + 'bomb' => '炸弹', + 'butterfly' => '蝴蝶', + 'candy' => '糖果', + 'crab' => '螃蟹', + 'cup' => '杯子', + 'dolphin' => '海豚', + 'fire' => '火', + 'guitar' => '吉他', + 'hexagon' => '六角形', + 'pear' => '梨', + 'rocket' => '火箭', + 'sailboat' => '帆船', + 'snowflake' => '雪花', + 'wolf head' => '狼头', + ]; + + /** + * 配置 + * @var array + */ + private array $config = [ + // 透明度 + 'alpha' => 36, + // 中文字符集 + 'zhSet' => '们以我到他会作时要动国产的是工就年阶义发成部民可出能方进在和有大这主中为来分生对于学级地用同行面说种过命度革而多子后自社加小机也经力线本电高量长党得实家定深法表着水理化争现所起政好十战无农使前等反体合斗路图把结第里正新开论之物从当两些还天资事队点育重其思与间内去因件利相由压员气业代全组数果期导平各基或月然如应形想制心样都向变关问比展那它最及外没看治提五解系林者米群头意只明四道马认次文通但条较克又公孔领军流接席位情运器并飞原油放立题质指建区验活众很教决特此常石强极已根共直团统式转别造切九你取西持总料连任志观调么山程百报更见必真保热委手改管处己将修支识象先老光专什六型具示复安带每东增则完风回南劳轮科北打积车计给节做务被整联步类集号列温装即毫知轴研单坚据速防史拉世设达尔场织历花求传断况采精金界品判参层止边清至万确究书术状须离再目海权且青才证低越际八试规斯近注办布门铁需走议县兵固除般引齿胜细影济白格效置推空配叶率述今选养德话查差半敌始片施响收华觉备名红续均药标记难存测身紧液派准斤角降维板许破述技消底床田势端感往神便贺村构照容非亚磨族段算适讲按值美态易彪服早班麦削信排台声该击素张密害侯何树肥继右属市严径螺检左页抗苏显苦英快称坏移巴材省黑武培著河帝仅针怎植京助升王眼她抓苗副杂普谈围食源例致酸旧却充足短划剂宣环落首尺波承粉践府鱼随考刻靠够满夫失包住促枝局菌杆周护岩师举曲春元超负砂封换太模贫减阳扬江析亩木言球朝医校古呢稻宋听唯输滑站另卫字鼓刚写刘微略范供阿块某功友限项余倒卷创律雨让骨远帮初皮播优占圈伟季训控激找叫云互跟粮粒母练塞钢顶策双留误础阻故寸盾晚丝女散焊功株亲院冷彻弹错散商视艺版烈零室轻倍缺厘泵察绝富城冲喷壤简否柱李望盘磁雄似困巩益洲脱投送侧润盖挥距触星松送获兴独官混纪依未突架宽冬章偏纹吃执阀矿寨责熟稳夺硬价努翻奇甲预职评读背协损棉侵灰虽矛厚罗泥辟告箱掌氧恩爱停曾溶营终纲孟钱待尽俄缩沙退陈讨奋械载胞哪旋征槽倒握担仍呀鲜吧卡粗介钻逐弱脚怕盐末丰雾冠丙街莱贝辐肠付吉渗瑞惊顿挤秒悬姆森糖圣凹陶词迟蚕亿矩康遵牧遭幅园腔订香肉弟屋敏恢忘编印蜂急拿扩飞露核缘游振操央伍域甚迅辉异序免纸夜乡久隶念兰映沟乙吗儒汽磷艰晶埃燃欢铁补咱芽永瓦倾阵碳演威附牙芽永瓦斜灌欧献顺猪洋腐请透司括脉宜笑若尾束壮暴企菜穗楚汉愈绿拖牛份染既秋遍锻玉夏疗尖井费州访吹荣铜沿替滚客召旱悟刺脑措贯藏敢令隙炉壳硫煤迎铸粘探临薄旬善福纵择礼愿伏残雷延烟句纯渐耕跑泽慢栽鲁赤繁境潮横掉锥希池败船假亮谓托伙哲怀摆贡呈劲财仪沉炼麻祖息车穿货销齐鼠抽画饲龙库守筑房歌寒喜哥洗蚀废纳腹乎录镜脂庄擦险赞钟摇典柄辩竹谷乱虚桥奥伯赶垂途额壁网截野遗静谋弄挂课镇妄盛耐扎虑键归符庆聚绕摩忙舞遇索顾胶羊湖钉仁音迹碎伸灯避泛答勇频皇柳哈揭甘诺概宪浓岛袭谁洪谢炮浇斑讯懂灵蛋闭孩释巨徒私银伊景坦累匀霉杜乐勒隔弯绩招绍胡呼峰零柴簧午跳居尚秦稍追梁折耗碱殊岗挖氏刃剧堆赫荷胸衡勤膜篇登驻案刊秧缓凸役剪川雪链渔啦脸户洛孢勃盟买杨宗焦赛旗滤硅炭股坐蒸凝竟枪黎救冒暗洞犯筒您宋弧爆谬涂味津臂障褐陆啊健尊豆拔莫抵桑坡缝警挑冰柬嘴啥饭塑寄赵喊垫丹渡耳虎笔稀昆浪萨茶滴浅拥覆伦娘吨浸袖珠雌妈紫戏塔锤震岁貌洁剖牢锋疑霸闪埔猛诉刷忽闹乔唐漏闻沈熔氯荒茎男凡抢像浆旁玻亦忠唱蒙予纷捕锁尤乘乌智淡允叛畜俘摸锈扫毕璃宝芯爷鉴秘净蒋钙肩腾枯抛轨堂拌爸循诱祝励肯酒绳塘燥泡袋朗喂铝软渠颗惯贸综墙趋彼届墨碍启逆卸航衣孙龄岭休借', + ]; + + /** + * 构造方法 + * @param array $config 点击验证码配置 + * @throws Throwable + */ + public function __construct(array $config = []) + { + $clickConfig = Config::get('buildadmin.click_captcha'); + $this->config = array_merge($clickConfig, $this->config, $config); + + // 清理过期的验证码 + Db::name('captcha')->where('expire_time', '<', time())->delete(); + } + + /** + * 创建图形验证码 + * @param string $id 验证码ID,开发者自定义 + * @return array 返回验证码图片的base64编码和验证码文字信息 + */ + public function creat(string $id): array + { + $imagePath = Filesystem::fsFit(public_path() . $this->bgPaths[mt_rand(0, count($this->bgPaths) - 1)]); + $fontPath = Filesystem::fsFit(public_path() . $this->fontPaths[mt_rand(0, count($this->fontPaths) - 1)]); + $randPoints = $this->randPoints($this->config['length'] + $this->config['confuse_length']); + + $lang = Lang::getLangSet(); + + foreach ($randPoints as $v) { + $tmp['size'] = rand(15, 30); + if (isset($this->iconDict[$v])) { + // 图标 + $tmp['icon'] = true; + $tmp['name'] = $v; + $tmp['text'] = $lang == 'zh-cn' ? "<{$this->iconDict[$v]}>" : "<$v>"; + $iconInfo = getimagesize(Filesystem::fsFit(public_path() . 'static/images/captcha/click/icons/' . $v . '.png')); + $tmp['width'] = $iconInfo[0]; + $tmp['height'] = $iconInfo[1]; + } else { + // 字符串文本框宽度和长度 + $fontArea = imagettfbbox($tmp['size'], 0, $fontPath, $v); + $textWidth = $fontArea[2] - $fontArea[0]; + $textHeight = $fontArea[1] - $fontArea[7]; + $tmp['icon'] = false; + $tmp['text'] = $v; + $tmp['width'] = $textWidth; + $tmp['height'] = $textHeight; + } + $textArr['text'][] = $tmp; + } + // 图片宽高和类型 + $imageInfo = getimagesize($imagePath); + $textArr['width'] = $imageInfo[0]; + $textArr['height'] = $imageInfo[1]; + // 随机生成验证点位置 + foreach ($textArr['text'] as &$v) { + list($x, $y) = $this->randPosition($textArr['text'], $textArr['width'], $textArr['height'], $v['width'], $v['height'], $v['icon']); + $v['x'] = $x; + $v['y'] = $y; + $text[] = $v['text']; + } + unset($v); + // 创建图片的实例 + $image = imagecreatefromstring(file_get_contents($imagePath)); + foreach ($textArr['text'] as $v) { + if ($v['icon']) { + $this->iconCover($image, $v); + } else { + //字体颜色 + $color = imagecolorallocatealpha($image, 239, 239, 234, 127 - intval($this->config['alpha'] * (127 / 100))); + // 绘画文字 + imagettftext($image, $v['size'], 0, $v['x'], $v['y'], $color, $fontPath, $v['text']); + } + } + $nowTime = time(); + $textArr['text'] = array_splice($textArr['text'], 0, $this->config['length']); + $text = array_splice($text, 0, $this->config['length']); + Db::name('captcha') + ->replace() + ->insert([ + 'key' => md5($id), + 'code' => md5(implode(',', $text)), + 'captcha' => json_encode($textArr, JSON_UNESCAPED_UNICODE), + 'create_time' => $nowTime, + 'expire_time' => $nowTime + $this->expire + ]); + + // 输出图片 + while (ob_get_level()) { + ob_end_clean(); + } + if (!ob_get_level()) ob_start(); + switch ($imageInfo[2]) { + case 1:// GIF + imagegif($image); + $content = ob_get_clean(); + break; + case 2:// JPG + imagejpeg($image); + $content = ob_get_clean(); + break; + case 3:// PNG + imagepng($image); + $content = ob_get_clean(); + break; + default: + $content = ''; + break; + } + return [ + 'id' => $id, + 'text' => $text, + 'base64' => 'data:' . $imageInfo['mime'] . ';base64,' . base64_encode($content), + 'width' => $textArr['width'], + 'height' => $textArr['height'], + ]; + } + + /** + * 检查验证码 + * @param string $id 开发者自定义的验证码ID + * @param string $info 验证信息 + * @param bool $unset 验证成功是否删除验证码 + * @return bool + * @throws Throwable + */ + public function check(string $id, string $info, bool $unset = true): bool + { + $key = md5($id); + $captcha = Db::name('captcha')->where('key', $key)->find(); + if ($captcha) { + // 验证码过期 + if (time() > $captcha['expire_time']) { + Db::name('captcha')->where('key', $key)->delete(); + return false; + } + $textArr = json_decode($captcha['captcha'], true); + list($xy, $w, $h) = explode(';', $info); + $xyArr = explode('-', $xy); + $xPro = $w / $textArr['width'];// 宽度比例 + $yPro = $h / $textArr['height'];// 高度比例 + foreach ($xyArr as $k => $v) { + $xy = explode(',', $v); + $x = $xy[0]; + $y = $xy[1]; + if ($x / $xPro < $textArr['text'][$k]['x'] || $x / $xPro > $textArr['text'][$k]['x'] + $textArr['text'][$k]['width']) { + return false; + } + $phStart = $textArr['text'][$k]['icon'] ? $textArr['text'][$k]['y'] : $textArr['text'][$k]['y'] - $textArr['text'][$k]['height']; + $phEnd = $textArr['text'][$k]['icon'] ? $textArr['text'][$k]['y'] + $textArr['text'][$k]['height'] : $textArr['text'][$k]['y']; + if ($y / $yPro < $phStart || $y / $yPro > $phEnd) { + return false; + } + } + if ($unset) Db::name('captcha')->where('key', $key)->delete(); + return true; + } else { + return false; + } + } + + /** + * 绘制Icon + */ + protected function iconCover($bgImg, $iconImgData): void + { + $iconImage = imagecreatefrompng(Filesystem::fsFit(public_path() . 'static/images/captcha/click/icons/' . $iconImgData['name'] . '.png')); + $trueColorImage = imagecreatetruecolor($iconImgData['width'], $iconImgData['height']); + imagecopy($trueColorImage, $bgImg, 0, 0, $iconImgData['x'], $iconImgData['y'], $iconImgData['width'], $iconImgData['height']); + imagecopy($trueColorImage, $iconImage, 0, 0, 0, 0, $iconImgData['width'], $iconImgData['height']); + imagecopymerge($bgImg, $trueColorImage, $iconImgData['x'], $iconImgData['y'], 0, 0, $iconImgData['width'], $iconImgData['height'], $this->config['alpha']); + } + + /** + * 随机生成验证点元素 + * @param int $length + * @return array + */ + public function randPoints(int $length = 4): array + { + $arr = []; + // 文字 + if (in_array('text', $this->config['mode'])) { + for ($i = 0; $i < $length; $i++) { + $arr[] = mb_substr($this->config['zhSet'], mt_rand(0, mb_strlen($this->config['zhSet'], 'utf-8') - 1), 1, 'utf-8'); + } + } + + // 图标 + if (in_array('icon', $this->config['mode'])) { + $icon = array_keys($this->iconDict); + shuffle($icon); + $icon = array_slice($icon, 0, $length); + $arr = array_merge($arr, $icon); + } + + shuffle($arr); + return array_slice($arr, 0, $length); + } + + /** + * 随机生成位置布局 + * @param array $textArr 点位数据 + * @param int $imgW 图片宽度 + * @param int $imgH 图片高度 + * @param int $fontW 文字宽度 + * @param int $fontH 文字高度 + * @param bool $isIcon 是否是图标 + * @return array + */ + private function randPosition(array $textArr, int $imgW, int $imgH, int $fontW, int $fontH, bool $isIcon): array + { + $x = rand(0, $imgW - $fontW); + $y = rand($fontH, $imgH - $fontH); + // 碰撞验证 + if (!$this->checkPosition($textArr, $x, $y, $fontW, $fontH, $isIcon)) { + $position = $this->randPosition($textArr, $imgW, $imgH, $fontW, $fontH, $isIcon); + } else { + $position = [$x, $y]; + } + return $position; + } + + /** + * 碰撞验证 + * @param array $textArr 验证点数据 + * @param int $x x轴位置 + * @param int $y y轴位置 + * @param int $w 验证点宽度 + * @param int $h 验证点高度 + * @param bool $isIcon 是否是图标 + * @return bool + */ + public function checkPosition(array $textArr, int $x, int $y, int $w, int $h, bool $isIcon): bool + { + $flag = true; + foreach ($textArr as $v) { + if (isset($v['x']) && isset($v['y'])) { + $flagX = false; + $flagY = false; + $historyPw = $v['x'] + $v['width']; + if (($x + $w) < $v['x'] || $x > $historyPw) { + $flagX = true; + } + + $currentPhStart = $isIcon ? $y : $y - $h; + $currentPhEnd = $isIcon ? $y + $v['height'] : $y; + $historyPhStart = $v['icon'] ? $v['y'] : ($v['y'] - $v['height']); + $historyPhEnd = $v['icon'] ? ($v['y'] + $v['height']) : $v['y']; + if ($currentPhEnd < $historyPhStart || $currentPhStart > $historyPhEnd) { + $flagY = true; + } + if (!$flagX && !$flagY) { + $flag = false; + } + } + } + return $flag; + } +} \ No newline at end of file diff --git a/extend/ba/Date.php b/extend/ba/Date.php new file mode 100644 index 0000000..9c168e2 --- /dev/null +++ b/extend/ba/Date.php @@ -0,0 +1,195 @@ +. + * @param string $remote timezone that to find the offset of + * @param string|null $local timezone used as the baseline + * @param string|int|null $now UNIX timestamp or date string + * @return int + * @throws Throwable + * @example $seconds = self::offset('America/Chicago', 'GMT'); + */ + public static function offset(string $remote, ?string $local = null, string|int|null $now = null): int + { + if ($local === null) { + // Use the default timezone + $local = date_default_timezone_get(); + } + if (is_int($now)) { + // Convert the timestamp into a string + $now = date(DateTimeInterface::RFC2822, $now); + } + // Create timezone objects + $zone_remote = new DateTimeZone($remote); + $zone_local = new DateTimeZone($local); + // Create date objects from timezones + $time_remote = new DateTime($now, $zone_remote); + $time_local = new DateTime($now, $zone_local); + // Find the offset + return $zone_remote->getOffset($time_remote) - $zone_local->getOffset($time_local); + } + + /** + * 计算两个时间戳之间相差的时间 + * + * $span = self::span(60, 182, 'minutes,seconds'); // array('minutes' => 2, 'seconds' => 2) + * $span = self::span(60, 182, 'minutes'); // 2 + * + * @param int $remote timestamp to find the span of + * @param int|null $local timestamp to use as the baseline + * @param string $output formatting string + * @return bool|array|string associative list of all outputs requested|when only a single output is requested + * @from https://github.com/kohana/ohanzee-helpers/blob/master/src/Date.php + */ + public static function span(int $remote, ?int $local = null, string $output = 'years,months,weeks,days,hours,minutes,seconds'): bool|array|string + { + // Normalize output + $output = trim(strtolower($output)); + if (!$output) { + // Invalid output + return false; + } + // Array with the output formats + $output = preg_split('/[^a-z]+/', $output); + // Convert the list of outputs to an associative array + $output = array_combine($output, array_fill(0, count($output), 0)); + // Make the output values into keys + extract(array_flip($output), EXTR_SKIP); + if ($local === null) { + // Calculate the span from the current time + $local = time(); + } + // Calculate timespan (seconds) + $timespan = abs($remote - $local); + if (isset($output['years'])) { + $timespan -= self::YEAR * ($output['years'] = (int)floor($timespan / self::YEAR)); + } + if (isset($output['months'])) { + $timespan -= self::MONTH * ($output['months'] = (int)floor($timespan / self::MONTH)); + } + if (isset($output['weeks'])) { + $timespan -= self::WEEK * ($output['weeks'] = (int)floor($timespan / self::WEEK)); + } + if (isset($output['days'])) { + $timespan -= self::DAY * ($output['days'] = (int)floor($timespan / self::DAY)); + } + if (isset($output['hours'])) { + $timespan -= self::HOUR * ($output['hours'] = (int)floor($timespan / self::HOUR)); + } + if (isset($output['minutes'])) { + $timespan -= self::MINUTE * ($output['minutes'] = (int)floor($timespan / self::MINUTE)); + } + // Seconds ago, 1 + if (isset($output['seconds'])) { + $output['seconds'] = $timespan; + } + if (count($output) === 1) { + // Only a single output was requested, return it + return array_pop($output); + } + // Return array + return $output; + } + + /** + * 格式化 UNIX 时间戳为人易读的字符串 + * + * @param int $remote Unix 时间戳 + * @param ?int $local 本地时间戳 + * @return string 格式化的日期字符串 + */ + public static function human(int $remote, ?int $local = null): string + { + $timeDiff = (is_null($local) ? time() : $local) - $remote; + $tense = $timeDiff < 0 ? 'after' : 'ago'; + $timeDiff = abs($timeDiff); + $chunks = [ + [60 * 60 * 24 * 365, 'year'], + [60 * 60 * 24 * 30, 'month'], + [60 * 60 * 24 * 7, 'week'], + [60 * 60 * 24, 'day'], + [60 * 60, 'hour'], + [60, 'minute'], + [1, 'second'], + ]; + + $count = 0; + $name = ''; + for ($i = 0, $j = count($chunks); $i < $j; $i++) { + $seconds = $chunks[$i][0]; + $name = $chunks[$i][1]; + if (($count = floor($timeDiff / $seconds)) != 0) { + break; + } + } + return __("%d $name%s $tense", [$count, $count > 1 ? 's' : '']); + } + + /** + * 获取一个基于时间偏移的Unix时间戳 + * + * @param string $type 时间类型,默认为day,可选minute,hour,day,week,month,quarter,year + * @param int $offset 时间偏移量 默认为0,正数表示当前type之后,负数表示当前type之前 + * @param string $position 时间的开始或结束,默认为begin,可选前(begin,start,first,front),end + * @param int|null $year 基准年,默认为null,即以当前年为基准 + * @param int|null $month 基准月,默认为null,即以当前月为基准 + * @param int|null $day 基准天,默认为null,即以当前天为基准 + * @param int|null $hour 基准小时,默认为null,即以当前年小时基准 + * @param int|null $minute 基准分钟,默认为null,即以当前分钟为基准 + * @return int 处理后的Unix时间戳 + */ + public static function unixTime(string $type = 'day', int $offset = 0, string $position = 'begin', ?int $year = null, ?int $month = null, ?int $day = null, ?int $hour = null, ?int $minute = null): int + { + $year = is_null($year) ? date('Y') : $year; + $month = is_null($month) ? date('m') : $month; + $day = is_null($day) ? date('d') : $day; + $hour = is_null($hour) ? date('H') : $hour; + $minute = is_null($minute) ? date('i') : $minute; + $position = in_array($position, ['begin', 'start', 'first', 'front']); + + return match ($type) { + 'minute' => $position ? mktime($hour, $minute + $offset, 0, $month, $day, $year) : mktime($hour, $minute + $offset, 59, $month, $day, $year), + 'hour' => $position ? mktime($hour + $offset, 0, 0, $month, $day, $year) : mktime($hour + $offset, 59, 59, $month, $day, $year), + 'day' => $position ? mktime(0, 0, 0, $month, $day + $offset, $year) : mktime(23, 59, 59, $month, $day + $offset, $year), + // 使用固定的 this week monday 而不是 $offset weeks monday 的语法才能确保准确性 + 'week' => $position ? strtotime('this week monday', mktime(0, 0, 0, $month, $day + ($offset * 7), $year)) : strtotime('this week sunday 23:59:59', mktime(0, 0, 0, $month, $day + ($offset * 7), $year)), + 'month' => $position ? mktime(0, 0, 0, $month + $offset, 1, $year) : mktime(23, 59, 59, $month + $offset, self::daysInMonth($month + $offset, $year), $year), + 'quarter' => $position ? + mktime(0, 0, 0, 1 + ((ceil(date('n', mktime(0, 0, 0, $month, $day, $year)) / 3) + $offset) - 1) * 3, 1, $year) : + mktime(23, 59, 59, (ceil(date('n', mktime(0, 0, 0, $month, $day, $year)) / 3) + $offset) * 3, self::daysInMonth((ceil(date('n', mktime(0, 0, 0, $month, $day, $year)) / 3) + $offset) * 3, $year), $year), + 'year' => $position ? mktime(0, 0, 0, 1, 1, $year + $offset) : mktime(23, 59, 59, 12, 31, $year + $offset), + default => mktime($hour, $minute, 0, $month, $day, $year), + }; + } + + /** + * 获取给定月份的天数 (28 到 31) + */ + public static function daysInMonth(int $month, ?int $year = null): int + { + return (int)date('t', mktime(0, 0, 0, $month, 1, $year)); + } +} \ No newline at end of file diff --git a/extend/ba/Depends.php b/extend/ba/Depends.php new file mode 100644 index 0000000..9bd078e --- /dev/null +++ b/extend/ba/Depends.php @@ -0,0 +1,212 @@ +json)) { + throw new Exception($this->json . ' file does not exist!'); + } + if ($this->jsonContent && !$realTime) return $this->jsonContent; + $content = @file_get_contents($this->json); + $this->jsonContent = json_decode($content, true); + if (!$this->jsonContent) { + throw new Exception($this->json . ' file read failure!'); + } + return $this->jsonContent; + } + + /** + * 设置 json 文件内容 + * @param array $content + * @throws Throwable + */ + public function setContent(array $content = []): void + { + if (!$content) $content = $this->jsonContent; + if (!isset($content['name'])) { + throw new Exception('Depend content file content is incomplete'); + } + $content = json_encode($content, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT); + $result = @file_put_contents($this->json, $content . PHP_EOL); + if (!$result) { + throw new Exception('File has no write permission:' . $this->json); + } + } + + /** + * 获取依赖项 + * @param bool $devEnv 是否是获取开发环境依赖 + * @return array + * @throws Throwable + */ + public function getDepends(bool $devEnv = false): array + { + try { + $content = $this->getContent(); + } catch (Throwable) { + return []; + } + + if ($this->type == 'npm') { + return $devEnv ? $content['devDependencies'] : $content['dependencies']; + } else { + return $devEnv ? $content['require-dev'] : $content['require']; + } + } + + /** + * 是否存在某个依赖 + * @param string $name 依赖名称 + * @param bool $devEnv 是否是获取开发环境依赖 + * @return bool|string false或者依赖版本号 + * @throws Throwable + */ + public function hasDepend(string $name, bool $devEnv = false): bool|string + { + $depends = $this->getDepends($devEnv); + return $depends[$name] ?? false; + } + + /** + * 添加依赖 + * @param array $depends 要添加的依赖数组["xxx" => ">=7.1.0",] + * @param bool $devEnv 是否添加为开发环境依赖 + * @param bool $cover 覆盖模式 + * @return void + * @throws Throwable + */ + public function addDepends(array $depends, bool $devEnv = false, bool $cover = false): void + { + $content = $this->getContent(true); + $dKey = $devEnv ? ($this->type == 'npm' ? 'devDependencies' : 'require-dev') : ($this->type == 'npm' ? 'dependencies' : 'require'); + if (!$cover) { + foreach ($depends as $key => $item) { + if (isset($content[$dKey][$key])) { + throw new Exception($key . ' depend already exists!'); + } + } + } + $content[$dKey] = array_merge($content[$dKey], $depends); + $this->setContent($content); + } + + /** + * 删除依赖 + * @param array $depends 要删除的依赖数组["php", "w7corp/easyWechat"] + * @param bool $devEnv 是否为开发环境删除依赖 + * @return void + * @throws Throwable + */ + public function removeDepends(array $depends, bool $devEnv = false): void + { + $content = $this->getContent(true); + $dKey = $devEnv ? ($this->type == 'npm' ? 'devDependencies' : 'require-dev') : ($this->type == 'npm' ? 'dependencies' : 'require'); + foreach ($depends as $item) { + if (isset($content[$dKey][$item])) { + unset($content[$dKey][$item]); + } + } + $this->setContent($content); + } + + /** + * 获取 composer.json 的 config 字段 + */ + public function getComposerConfig(): array + { + try { + $content = $this->getContent(); + } catch (Throwable) { + return []; + } + return $content['config']; + } + + /** + * 设置 composer.json 的 config 字段 + * @throws Throwable + */ + public function setComposerConfig(array $config, bool $cover = true): void + { + $content = $this->getContent(true); + + // 配置冲突检查 + if (!$cover) { + foreach ($config as $key => $item) { + if (is_array($item)) { + foreach ($item as $configKey => $configItem) { + if (isset($content['config'][$key][$configKey]) && $content['config'][$key][$configKey] != $configItem) { + throw new Exception(__('composer config %s conflict', [$configKey])); + } + } + } elseif (isset($content['config'][$key]) && $content['config'][$key] != $item) { + throw new Exception(__('composer config %s conflict', [$key])); + } + } + } + + foreach ($config as $key => $item) { + if (is_array($item)) { + foreach ($item as $configKey => $configItem) { + $content['config'][$key][$configKey] = $configItem; + } + } else { + $content['config'][$key] = $item; + } + } + $this->setContent($content); + } + + /** + * 删除 composer 配置项 + * @throws Throwable + */ + public function removeComposerConfig(array $config): void + { + if (!$config) return; + $content = $this->getContent(true); + foreach ($config as $key => $item) { + if (isset($content['config'][$key])) { + if (is_array($item)) { + foreach ($item as $configKey => $configItem) { + if (isset($content['config'][$key][$configKey])) unset($content['config'][$key][$configKey]); + } + + // 没有子级配置项了 + if (!$content['config'][$key]) { + unset($content['config'][$key]); + } + } else { + unset($content['config'][$key]); + } + } + } + $this->setContent($content); + } +} \ No newline at end of file diff --git a/extend/ba/Exception.php b/extend/ba/Exception.php new file mode 100644 index 0000000..ce2edce --- /dev/null +++ b/extend/ba/Exception.php @@ -0,0 +1,17 @@ +error(__($e->getMessage()), $e->getData(), $e->getCode()); + */ +class Exception extends E +{ + public function __construct(protected $message, protected $code = 0, protected $data = []) + { + parent::__construct($message, $code); + } +} \ No newline at end of file diff --git a/extend/ba/Filesystem.php b/extend/ba/Filesystem.php new file mode 100644 index 0000000..1f4c988 --- /dev/null +++ b/extend/ba/Filesystem.php @@ -0,0 +1,248 @@ +isDir()) { + self::delDir($fileInfo->getRealPath()); + } else { + @unlink($fileInfo->getRealPath()); + } + } + if ($delSelf) { + @rmdir($dir); + } + return true; + } + + /** + * 删除一个路径下的所有相对空文件夹(删除此路径中的所有空文件夹) + * @param string $path 相对于根目录的文件夹路径 如`c:BuildAdmin/a/b/` + * @return void + */ + public static function delEmptyDir(string $path): void + { + $path = str_replace(root_path(), '', rtrim(self::fsFit($path), DIRECTORY_SEPARATOR)); + $path = array_filter(explode(DIRECTORY_SEPARATOR, $path)); + for ($i = count($path) - 1; $i >= 0; $i--) { + $dirPath = root_path() . implode(DIRECTORY_SEPARATOR, $path); + if (!is_dir($dirPath)) { + unset($path[$i]); + continue; + } + if (self::dirIsEmpty($dirPath)) { + self::delDir($dirPath); + unset($path[$i]); + } else { + break; + } + } + } + + /** + * 检查目录/文件是否可写 + * @param $path + * @return bool + */ + public static function pathIsWritable($path): bool + { + if (DIRECTORY_SEPARATOR == '/' && !@ini_get('safe_mode')) { + return is_writable($path); + } + + if (is_dir($path)) { + $path = rtrim($path, '/') . '/' . md5(mt_rand(1, 100) . mt_rand(1, 100)); + if (($fp = @fopen($path, 'ab')) === false) { + return false; + } + + fclose($fp); + @chmod($path, 0777); + @unlink($path); + + return true; + } elseif (!is_file($path) || ($fp = @fopen($path, 'ab')) === false) { + return false; + } + + fclose($fp); + return true; + } + + /** + * 路径分隔符根据当前系统分隔符适配 + * @param string $path 路径 + * @return string 转换后的路径 + */ + public static function fsFit(string $path): string + { + return str_replace(['/', '\\'], DIRECTORY_SEPARATOR, $path); + } + + /** + * 解压Zip + * @param string $file ZIP文件路径 + * @param string $dir 解压路径 + * @return string 解压后的路径 + * @throws Throwable + */ + public static function unzip(string $file, string $dir = ''): string + { + if (!file_exists($file)) { + throw new Exception("Zip file not found"); + } + + $zip = new ZipFile(); + try { + $zip->openFile($file); + } catch (Throwable $e) { + $zip->close(); + throw new Exception('Unable to open the zip file', 0, ['msg' => $e->getMessage()]); + } + + $dir = $dir ?: substr($file, 0, strripos($file, '.zip')); + if (!is_dir($dir)) { + @mkdir($dir, 0755); + } + + try { + $zip->extractTo($dir); + } catch (Throwable $e) { + throw new Exception('Unable to extract ZIP file', 0, ['msg' => $e->getMessage()]); + } finally { + $zip->close(); + } + return $dir; + } + + /** + * 创建ZIP + * @param array $files 文件路径列表 + * @param string $fileName ZIP文件名称 + * @return bool + * @throws Throwable + */ + public static function zip(array $files, string $fileName): bool + { + $zip = new ZipFile(); + try { + foreach ($files as $v) { + if (is_array($v) && isset($v['file']) && isset($v['name'])) { + $zip->addFile(root_path() . str_replace(root_path(), '', Filesystem::fsFit($v['file'])), $v['name']); + } else { + $saveFile = str_replace(root_path(), '', Filesystem::fsFit($v)); + $zip->addFile(root_path() . $saveFile, $saveFile); + } + } + $zip->saveAsFile($fileName); + } catch (Throwable $e) { + throw new Exception('Unable to package zip file', 0, ['msg' => $e->getMessage(), 'file' => $fileName]); + } finally { + $zip->close(); + } + if (file_exists($fileName)) { + return true; + } else { + return false; + } + } + + /** + * 递归创建目录 + * @param string $dir 目录路径 + * @return bool + */ + public static function mkdir(string $dir): bool + { + if (!is_dir($dir)) { + return mkdir($dir, 0755, true); + } + return false; + } + + /** + * 获取一个目录内的文件列表 + * @param string $dir 目录路径 + * @param array $suffix 要获取的文件列表的后缀 + * @return array + */ + public static function getDirFiles(string $dir, array $suffix = []): array + { + $files = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::LEAVES_ONLY + ); + + $fileList = []; + foreach ($files as $file) { + if ($file->isDir()) { + continue; + } + if (!empty($suffix) && !in_array($file->getExtension(), $suffix)) { + continue; + } + $filePath = $file->getRealPath(); + $name = str_replace($dir, '', $filePath); + $name = str_replace(DIRECTORY_SEPARATOR, "/", $name); + $fileList[$name] = $name; + } + return $fileList; + } + + /** + * 将一个文件单位转为字节 + * @param string $unit 将b、kb、m、mb、g、gb的单位转为 byte + * @return int byte + */ + public static function fileUnitToByte(string $unit): int + { + preg_match('/([0-9.]+)(\w+)/', $unit, $matches); + if (!$matches) { + return 0; + } + $typeDict = ['b' => 0, 'k' => 1, 'kb' => 1, 'm' => 2, 'mb' => 2, 'gb' => 3, 'g' => 3]; + return (int)($matches[1] * pow(1024, $typeDict[strtolower($matches[2])] ?? 0)); + } +} diff --git a/extend/ba/Random.php b/extend/ba/Random.php new file mode 100644 index 0000000..4199ba1 --- /dev/null +++ b/extend/ba/Random.php @@ -0,0 +1,54 @@ + 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'alnum' => '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'numeric' => '0123456789', + 'noZero' => '123456789', + default => '', + }; + return substr(str_shuffle(str_repeat($pool, ceil($len / strlen($pool)))), 0, $len); + case 'unique': + case 'md5': + return md5(uniqid(mt_rand())); + case 'encrypt': + case 'sha1': + return sha1(uniqid(mt_rand(), true)); + } + return ''; + } + +} \ No newline at end of file diff --git a/extend/ba/TableManager.php b/extend/ba/TableManager.php new file mode 100644 index 0000000..a649eb9 --- /dev/null +++ b/extend/ba/TableManager.php @@ -0,0 +1,186 @@ +getAdapter($config['adapter'], $config); + if ($prefixWrapper) return $factory->getWrapper('prefix', $adapter); + return $adapter; + } + + /** + * 数据表名 + * @param string $table 表名,带不带前缀均可 + * @param bool $fullName 是否返回带前缀的表名 + * @param ?string $connection 连接配置标识 + * @return string 表名 + * @throws Exception + */ + public static function tableName(string $table, bool $fullName = true, ?string $connection = null): string + { + $connection = self::getConnectionConfig($connection); + $pattern = '/^' . $connection['prefix'] . '/i'; + return ($fullName ? $connection['prefix'] : '') . (preg_replace($pattern, '', $table)); + } + + /** + * 数据表列表 + * @param ?string $connection 连接配置标识 + * @throws Exception + */ + public static function getTableList(?string $connection = null): array + { + $tableList = []; + $config = self::getConnectionConfig($connection); + $connection = self::getConnection($connection); + $tables = Db::connect($connection)->query("SELECT TABLE_NAME,TABLE_COMMENT FROM information_schema.TABLES WHERE table_schema = ? ", [$config['database']]); + foreach ($tables as $row) { + $tableList[$row['TABLE_NAME']] = $row['TABLE_NAME'] . ($row['TABLE_COMMENT'] ? ' - ' . $row['TABLE_COMMENT'] : ''); + } + return $tableList; + } + + /** + * 获取数据表所有列 + * @param string $table 数据表名 + * @param bool $onlyCleanComment 只要干净的字段注释信息 + * @param ?string $connection 连接配置标识 + * @throws Throwable + */ + public static function getTableColumns(string $table, bool $onlyCleanComment = false, ?string $connection = null): array + { + if (!$table) return []; + + $table = self::tableName($table, true, $connection); + $config = self::getConnectionConfig($connection); + $connection = self::getConnection($connection); + + // 从数据库中获取表字段信息 + // Phinx 目前无法正确获取到列注释信息,故使用 sql + $sql = "SELECT * FROM `information_schema`.`columns` " + . "WHERE TABLE_SCHEMA = ? AND table_name = ? " + . "ORDER BY ORDINAL_POSITION"; + $columnList = Db::connect($connection)->query($sql, [$config['database'], $table]); + + $fieldList = []; + foreach ($columnList as $item) { + if ($onlyCleanComment) { + $fieldList[$item['COLUMN_NAME']] = ''; + if ($item['COLUMN_COMMENT']) { + $comment = explode(':', $item['COLUMN_COMMENT']); + $fieldList[$item['COLUMN_NAME']] = $comment[0]; + } + continue; + } + $fieldList[$item['COLUMN_NAME']] = $item; + } + return $fieldList; + } + + /** + * 系统是否存在多个数据库连接配置 + */ + public static function isMultiDatabase(): bool + { + return count(Config::get("database.connections")) > 1; + } + + /** + * 获取数据库连接配置标识 + * @param ?string $source + * @return string 连接配置标识 + */ + public static function getConnection(?string $source = null): string + { + if (!$source || $source === 'default') { + return Config::get('database.default'); + } + return $source; + } + + /** + * 获取某个数据库连接的配置数组 + * @param ?string $connection 连接配置标识 + * @throws Exception + */ + public static function getConnectionConfig(?string $connection = null): array + { + $connection = self::getConnection($connection); + $connection = config("database.connections.$connection"); + if (!is_array($connection)) { + throw new Exception('Database connection configuration error'); + } + + // 分布式 + if ($connection['deploy'] == 1) { + $keys = ['type', 'hostname', 'database', 'username', 'password', 'hostport', 'charset', 'prefix']; + foreach ($connection as $key => $item) { + if (in_array($key, $keys)) { + $connection[$key] = is_array($item) ? $item[0] : explode(',', $item)[0]; + } + } + } + return $connection; + } + + /** + * 获取 Phinx 适配器需要的数据库配置 + * @param ?string $connection 连接配置标识 + * @return array + * @throws Throwable + */ + protected static function getPhinxDbConfig(?string $connection = null): array + { + $config = self::getConnectionConfig($connection); + $connection = self::getConnection($connection); + $db = Db::connect($connection); + + // 数据库为懒连接,执行 sql 命令为 $db 实例连接数据库 + $db->query('SELECT 1'); + + $table = Config::get('database.migration_table', 'migrations'); + return [ + 'adapter' => $config['type'], + 'connection' => $db->getPdo(), + 'name' => $config['database'], + 'table_prefix' => $config['prefix'], + 'migration_table' => $config['prefix'] . $table, + ]; + } +} \ No newline at end of file diff --git a/extend/ba/Terminal.php b/extend/ba/Terminal.php new file mode 100644 index 0000000..3e063ae --- /dev/null +++ b/extend/ba/Terminal.php @@ -0,0 +1,510 @@ + +// +---------------------------------------------------------------------- + +namespace ba; + +use Throwable; +use think\Response; +use think\facade\Config; +use app\admin\library\Auth; +use app\admin\library\module\Manage; +use think\exception\HttpResponseException; +use app\common\library\token\TokenExpirationException; + +class Terminal +{ + /** + * @var ?Terminal 对象实例 + */ + protected static ?Terminal $instance = null; + + /** + * @var string 当前执行的命令 $command 的 key + */ + protected string $commandKey = ''; + + /** + * @var array proc_open 的参数 + */ + protected array $descriptorsPec = []; + + /** + * @var resource|bool proc_open 返回的 resource + */ + protected $process = false; + + /** + * @var array proc_open 的管道 + */ + protected array $pipes = []; + + /** + * @var int proc执行状态:0=未执行,1=执行中,2=执行完毕 + */ + protected int $procStatusMark = 0; + + /** + * @var array proc执行状态数据 + */ + protected array $procStatusData = []; + + /** + * @var string 命令在前台的uuid + */ + protected string $uuid = ''; + + /** + * @var string 扩展信息 + */ + protected string $extend = ''; + + /** + * @var string 命令执行输出文件 + */ + protected string $outputFile = ''; + + /** + * @var string 命令执行实时输出内容 + */ + protected string $outputContent = ''; + + /** + * @var string 自动构建的前端文件的 outDir(相对于根目录) + */ + protected static string $distDir = 'web' . DIRECTORY_SEPARATOR . 'dist'; + + /** + * @var array 状态标识 + */ + protected array $flag = [ + // 连接成功 + 'link-success' => 'command-link-success', + // 执行成功 + 'exec-success' => 'command-exec-success', + // 执行完成 + 'exec-completed' => 'command-exec-completed', + // 执行出错 + 'exec-error' => 'command-exec-error', + ]; + + /** + * 初始化 + */ + public static function instance(): Terminal + { + if (is_null(self::$instance)) { + self::$instance = new static(); + } + return self::$instance; + } + + /** + * 构造函数 + */ + public function __construct() + { + $this->uuid = request()->param('uuid', ''); + $this->extend = request()->param('extend', ''); + + // 初始化日志文件 + $outputDir = root_path() . 'runtime' . DIRECTORY_SEPARATOR . 'terminal'; + $this->outputFile = $outputDir . DIRECTORY_SEPARATOR . 'exec.log'; + if (!is_dir($outputDir)) { + mkdir($outputDir, 0755, true); + } + file_put_contents($this->outputFile, ''); + + /** + * 命令执行结果输出到文件而不是管道 + * 因为输出到管道时有延迟,而文件虽然需要频繁读取和对比内容,但是输出实时的 + */ + $this->descriptorsPec = [0 => ['pipe', 'r'], 1 => ['file', $this->outputFile, 'w'], 2 => ['file', $this->outputFile, 'w']]; + } + + /** + * 获取命令 + * @param string $key 命令key + * @return array|bool + */ + public static function getCommand(string $key): bool|array + { + if (!$key) { + return false; + } + + $commands = Config::get('terminal.commands'); + if (stripos($key, '.')) { + $key = explode('.', $key); + if (!array_key_exists($key[0], $commands) || !is_array($commands[$key[0]]) || !array_key_exists($key[1], $commands[$key[0]])) { + return false; + } + $command = $commands[$key[0]][$key[1]]; + } else { + if (!array_key_exists($key, $commands)) { + return false; + } + $command = $commands[$key]; + } + if (!is_array($command)) { + $command = [ + 'cwd' => root_path(), + 'command' => $command, + ]; + } else { + $command['cwd'] = root_path() . $command['cwd']; + } + + if (str_contains($command['command'], '%')) { + $args = request()->param('extend', ''); + $args = explode('~~', $args); + $args = array_map('escapeshellarg', $args); + + array_unshift($args, $command['command']); + $command['command'] = call_user_func_array('sprintf', $args); + } + + $command['cwd'] = str_replace(['/', '\\'], DIRECTORY_SEPARATOR, $command['cwd']); + return $command; + } + + /** + * 执行命令 + * @param bool $authentication 是否鉴权 + * @throws Throwable + */ + public function exec(bool $authentication = true): void + { + $this->sendHeader(); + + while (ob_get_level()) { + ob_end_clean(); + } + if (!ob_get_level()) ob_start(); + + $this->commandKey = request()->param('command'); + + $command = self::getCommand($this->commandKey); + if (!$command) { + $this->execError('The command was not allowed to be executed', true); + } + + if ($authentication) { + try { + $token = get_auth_token(); + $auth = Auth::instance(); + $auth->init($token); + + if (!$auth->isLogin() || !$auth->isSuperAdmin()) { + $this->execError("You are not super administrator or not logged in", true); + } + } catch (TokenExpirationException) { + $this->execError(__('Token expiration')); + } + } + + $this->beforeExecution(); + $this->outputFlag('link-success'); + + if (!empty($command['notes'])) { + $this->output('> ' . __($command['notes']), false); + } + $this->output('> ' . $command['command'], false); + + $this->process = proc_open($command['command'], $this->descriptorsPec, $this->pipes, $command['cwd']); + if (!is_resource($this->process)) { + $this->execError('Failed to execute', true); + } + while ($this->getProcStatus()) { + $contents = file_get_contents($this->outputFile); + if (strlen($contents) && $this->outputContent != $contents) { + $newOutput = str_replace($this->outputContent, '', $contents); + $this->checkOutput($contents, $newOutput); + if (preg_match('/\r\n|\r|\n/', $newOutput)) { + $this->output($newOutput); + $this->outputContent = $contents; + } + } + + // 输出执行状态信息 + if ($this->procStatusMark === 2) { + $this->output('exitCode: ' . $this->procStatusData['exitcode']); + if ($this->procStatusData['exitcode'] === 0) { + if ($this->successCallback()) { + $this->outputFlag('exec-success'); + } else { + $this->output('Error: Command execution succeeded, but callback execution failed'); + $this->outputFlag('exec-error'); + } + } else { + $this->outputFlag('exec-error'); + } + } + + usleep(500000); + } + foreach ($this->pipes as $pipe) { + fclose($pipe); + } + proc_close($this->process); + $this->outputFlag('exec-completed'); + } + + /** + * 获取执行状态 + * @throws Throwable + */ + public function getProcStatus(): bool + { + $this->procStatusData = proc_get_status($this->process); + if ($this->procStatusData['running']) { + $this->procStatusMark = 1; + return true; + } elseif ($this->procStatusMark === 1) { + $this->procStatusMark = 2; + return true; + } else { + return false; + } + } + + /** + * 输出 EventSource 数据 + * @param string $data + * @param bool $callback + */ + public function output(string $data, bool $callback = true): void + { + $data = self::outputFilter($data); + $data = [ + 'data' => $data, + 'uuid' => $this->uuid, + 'extend' => $this->extend, + 'key' => $this->commandKey, + ]; + $data = json_encode($data, JSON_UNESCAPED_UNICODE); + if ($data) { + $this->finalOutput($data); + if ($callback) $this->outputCallback($data); + @ob_flush();// 刷新浏览器缓冲区 + } + } + + + /** + * 检查输出 + * @param string $outputs 全部输出内容 + * @param string $rowOutput 当前输出内容(行) + */ + public function checkOutput(string $outputs, string $rowOutput): void + { + if (str_contains($rowOutput, '(Y/n)')) { + $this->execError('Interactive output detected, please manually execute the command to confirm the situation.', true); + } + } + + /** + * 输出状态标记 + * @param string $flag + */ + public function outputFlag(string $flag): void + { + $this->output($this->flag[$flag], false); + } + + /** + * 输出后回调 + */ + public function outputCallback($data): void + { + + } + + /** + * 成功后回调 + * @return bool + * @throws Throwable + */ + public function successCallback(): bool + { + if (stripos($this->commandKey, '.')) { + $commandKeyArr = explode('.', $this->commandKey); + $commandPKey = $commandKeyArr[0] ?? ''; + } else { + $commandPKey = $this->commandKey; + } + + if ($commandPKey == 'web-build') { + if (!self::mvDist()) { + $this->output('Build succeeded, but move file failed. Please operate manually.'); + return false; + } + } elseif ($commandPKey == 'web-install' && $this->extend) { + [$type, $value] = explode(':', $this->extend); + if ($type == 'module-install' && $value) { + Manage::instance($value)->dependentInstallComplete('npm'); + } + } elseif ($commandPKey == 'composer' && $this->extend) { + [$type, $value] = explode(':', $this->extend); + if ($type == 'module-install' && $value) { + Manage::instance($value)->dependentInstallComplete('composer'); + } + } elseif ($commandPKey == 'nuxt-install' && $this->extend) { + [$type, $value] = explode(':', $this->extend); + if ($type == 'module-install' && $value) { + Manage::instance($value)->dependentInstallComplete('nuxt_npm'); + } + } + return true; + } + + /** + * 执行前埋点 + */ + public function beforeExecution(): void + { + if ($this->commandKey == 'test.pnpm') { + @unlink(root_path() . 'public' . DIRECTORY_SEPARATOR . 'npm-install-test' . DIRECTORY_SEPARATOR . 'pnpm-lock.yaml'); + } elseif ($this->commandKey == 'web-install.pnpm') { + @unlink(root_path() . 'web' . DIRECTORY_SEPARATOR . 'pnpm-lock.yaml'); + } + } + + /** + * 输出过滤 + */ + public static function outputFilter($str): string + { + $str = trim($str); + $preg = '/\[(.*?)m/i'; + $str = preg_replace($preg, '', $str); + $str = str_replace(["\r\n", "\r", "\n"], "\n", $str); + return mb_convert_encoding($str, 'UTF-8', 'UTF-8,GBK,GB2312,BIG5'); + } + + /** + * 执行错误 + */ + public function execError($error, $break = false): void + { + $this->output('Error:' . $error); + $this->outputFlag('exec-error'); + if ($break) $this->break(); + } + + /** + * 退出执行 + */ + public function break(): void + { + throw new HttpResponseException(Response::create()->contentType('text/event-stream')); + } + + /** + * 执行一个命令并以字符串的方式返回执行输出 + * 代替 exec 使用,这样就只需要解除 proc_open 的函数禁用了 + * @param $commandKey + * @return string|bool + */ + public static function getOutputFromProc($commandKey): bool|string + { + if (!function_exists('proc_open') || !function_exists('proc_close')) { + return false; + } + $command = self::getCommand($commandKey); + if (!$command) { + return false; + } + $descriptorsPec = [1 => ['pipe', 'w'], 2 => ['pipe', 'w']]; + $process = proc_open($command['command'], $descriptorsPec, $pipes, null, null); + if (is_resource($process)) { + $info = stream_get_contents($pipes[1]); + $info .= stream_get_contents($pipes[2]); + fclose($pipes[1]); + fclose($pipes[2]); + proc_close($process); + return self::outputFilter($info); + } + return ''; + } + + public static function mvDist(): bool + { + $distPath = root_path() . self::$distDir . DIRECTORY_SEPARATOR; + $indexHtmlPath = $distPath . 'index.html'; + $assetsPath = $distPath . 'assets'; + if (!file_exists($indexHtmlPath) || !file_exists($assetsPath)) { + return false; + } + + $toIndexHtmlPath = root_path() . 'public' . DIRECTORY_SEPARATOR . 'index.html'; + $toAssetsPath = root_path() . 'public' . DIRECTORY_SEPARATOR . 'assets'; + @unlink($toIndexHtmlPath); + Filesystem::delDir($toAssetsPath); + + if (rename($indexHtmlPath, $toIndexHtmlPath) && rename($assetsPath, $toAssetsPath)) { + Filesystem::delDir($distPath); + return true; + } else { + return false; + } + } + + public static function changeTerminalConfig($config = []): bool + { + // 不保存在数据库中,因为切换包管理器时,数据库资料可能还未配置 + $oldPackageManager = Config::get('terminal.npm_package_manager'); + $newPackageManager = request()->post('manager', $config['manager'] ?? $oldPackageManager); + + if ($oldPackageManager == $newPackageManager) { + return true; + } + + $buildConfigFile = config_path() . 'terminal.php'; + $buildConfigContent = @file_get_contents($buildConfigFile); + $buildConfigContent = preg_replace("/'npm_package_manager'(\s+)=>(\s+)'$oldPackageManager'/", "'npm_package_manager'\$1=>\$2'$newPackageManager'", $buildConfigContent); + $result = @file_put_contents($buildConfigFile, $buildConfigContent); + return (bool)$result; + } + + /** + * 最终输出 + */ + public function finalOutput(string $data): void + { + $app = app(); + if (!empty($app->worker) && !empty($app->connection)) { + $app->connection->send(new \Workerman\Protocols\Http\ServerSentEvents(['event' => 'message', 'data' => $data])); + } else { + echo 'data: ' . $data . "\n\n"; + } + } + + /** + * 发送响应头 + */ + public function sendHeader(): void + { + $headers = array_merge(request()->allowCrossDomainHeaders ?? [], [ + 'X-Accel-Buffering' => 'no', + 'Content-Type' => 'text/event-stream', + 'Cache-Control' => 'no-cache', + ]); + + $app = app(); + if (!empty($app->worker) && !empty($app->connection)) { + $app->connection->send(new \Workerman\Protocols\Http\Response(200, $headers, "\r\n")); + } else { + foreach ($headers as $name => $val) { + header($name . (!is_null($val) ? ':' . $val : '')); + } + } + } +} \ No newline at end of file diff --git a/extend/ba/Tree.php b/extend/ba/Tree.php new file mode 100644 index 0000000..8eac879 --- /dev/null +++ b/extend/ba/Tree.php @@ -0,0 +1,145 @@ +assembleChild()方法组装 + * @param array $arr 要改为树状的数组 + * @param string $field '树枝'字段 + * @param int $level 递归数组层次,无需手动维护 + * @param bool $superiorEnd 递归上一级树枝是否结束,无需手动维护 + * @return array + */ + public static function getTreeArray(array $arr, string $field = 'name', int $level = 0, bool $superiorEnd = false): array + { + $level++; + $number = 1; + $total = count($arr); + foreach ($arr as $key => $item) { + $prefix = ($number == $total) ? self::$icon[2] : self::$icon[1]; + if ($level == 2) { + $arr[$key][$field] = str_pad('', 4) . $prefix . $item[$field]; + } elseif ($level >= 3) { + $arr[$key][$field] = str_pad('', 4) . ($superiorEnd ? '' : self::$icon[0]) . str_pad('', ($level - 2) * 4) . $prefix . $item[$field]; + } + + if (isset($item['children']) && $item['children']) { + $arr[$key]['children'] = self::getTreeArray($item['children'], $field, $level, $number == $total); + } + $number++; + } + return $arr; + } + + /** + * 递归合并树状数组(根据children多维变二维方便渲染) + * @param array $data 要合并的数组 ['id' => 1, 'pid' => 0, 'title' => '标题1', 'children' => ['id' => 2, 'pid' => 1, 'title' => ' └标题1-1']] + * @return array [['id' => 1, 'pid' => 0, 'title' => '标题1'], ['id' => 2, 'pid' => 1, 'title' => ' └标题1-1']] + */ + public static function assembleTree(array $data): array + { + $arr = []; + foreach ($data as $v) { + $children = $v['children'] ?? []; + unset($v['children']); + $arr[] = $v; + if ($children) { + $arr = array_merge($arr, self::assembleTree($children)); + } + } + return $arr; + } + + /** + * 递归的根据指定字段组装 children 数组 + * @param array $data 数据源 例如:[['id' => 1, 'pid' => 0, title => '标题1'], ['id' => 2, 'pid' => 1, title => '标题1-1']] + * @param string $pid 存储上级id的字段 + * @param string $pk 主键字段 + * @return array ['id' => 1, 'pid' => 0, 'title' => '标题1', 'children' => ['id' => 2, 'pid' => 1, 'title' => '标题1-1']] + */ + public function assembleChild(array $data, string $pid = 'pid', string $pk = 'id'): array + { + if (!$data) return []; + + $pks = []; + $topLevelData = []; // 顶级数据 + $this->children = []; // 置空子级数据 + foreach ($data as $item) { + $pks[] = $item[$pk]; + + // 以pid组成children + $this->children[$item[$pid]][] = $item; + } + // 上级不存在的就是顶级,只获取它们的 children + foreach ($data as $item) { + if (!in_array($item[$pid], $pks)) { + $topLevelData[] = $item; + } + } + + if (count($this->children) > 0) { + foreach ($topLevelData as $key => $item) { + $topLevelData[$key]['children'] = $this->getChildren($this->children[$item[$pk]] ?? [], $pk); + } + return $topLevelData; + } else { + return $data; + } + } + + /** + * 获取 children 数组 + * 辅助 assembleChild 组装 children + * @param array $data + * @param string $pk + * @return array + */ + protected function getChildren(array $data, string $pk = 'id'): array + { + if (!$data) return []; + foreach ($data as $key => $item) { + if (array_key_exists($item[$pk], $this->children)) { + $data[$key]['children'] = $this->getChildren($this->children[$item[$pk]], $pk); + } + } + return $data; + } +} \ No newline at end of file diff --git a/extend/ba/Version.php b/extend/ba/Version.php new file mode 100644 index 0000000..8a29bc3 --- /dev/null +++ b/extend/ba/Version.php @@ -0,0 +1,133 @@ + $v2[$i]) { + return false; + } + if ($v1[$i] < $v2[$i]) { + return true; + } + } + if (count($v1) != count($v2)) { + return !(count($v1) > count($v2)); + } + return false; + } + + /** + * 是否是一个数字版本号 + * @param $version + * @return bool + */ + public static function checkDigitalVersion($version): bool + { + if (!$version) { + return false; + } + if (strtolower($version[0]) == 'v') { + $version = substr($version, 1); + } + + $rule1 = '/\.{2,10}/'; // 是否有两个的`.` + $rule2 = '/^\d+(\.\d+){0,10}$/'; + if (!preg_match($rule1, (string)$version)) { + return !!preg_match($rule2, (string)$version); + } + return false; + } + + /** + * @return string + */ + public static function getCnpmVersion(): string + { + $execOut = Terminal::getOutputFromProc('version.cnpm'); + if ($execOut) { + $preg = '/cnpm@(.+?) \(/is'; + preg_match($preg, $execOut, $result); + return $result[1] ?? ''; + } else { + return ''; + } + } + + /** + * 获取依赖版本号 + * @param string $name 支持:npm、cnpm、yarn、pnpm、node + * @return string + */ + public static function getVersion(string $name): string + { + if ($name == 'cnpm') { + return self::getCnpmVersion(); + } elseif (in_array($name, ['npm', 'yarn', 'pnpm', 'node'])) { + $execOut = Terminal::getOutputFromProc('version.' . $name); + if ($execOut) { + if (strripos($execOut, 'npm WARN') !== false) { + $preg = '/\d+(\.\d+){0,2}/'; + preg_match($preg, $execOut, $matches); + if (isset($matches[0]) && self::checkDigitalVersion($matches[0])) { + return $matches[0]; + } + } + $execOut = preg_split('/\r\n|\r|\n/', $execOut); + // 检测两行,第一行可能会是个警告消息 + for ($i = 0; $i < 2; $i++) { + if (isset($execOut[$i]) && self::checkDigitalVersion($execOut[$i])) { + return $execOut[$i]; + } + } + } else { + return ''; + } + } + return ''; + } +} \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df30868d602492075d3b86a2c106d517651fdb75 GIT binary patch literal 4286 zcmc&&X>3$g6uyKI5;4IgA;F;F5~C()G%-OISzawrN@-`NKm`g0B_I_;=@hAjj zWmCFwr!(!$RJuT`P|9X0P?4ozp^^fIMh$`+RRfge&hec4=FPk}^TxLRvE*>yd-vS) zopbJY&b=*TJ@DV4L5%)qWe+gck1_TP3VvdvQ0Tk-!MTU~sG@#g3;>wey$~fmAoQ$% z*S_mVoZn+-qGtX;QS=UodWcGvJVp8_MU6?IFPsF;~1%BL?Ad$XiH z)o;CS7-lfW?&62psm;LnGnwFHKoq_TqBf(4%!l57XV2Y=Ux&|?eu676h_WepBL5YT z;!Cc;Z!eYs~7(!TgbaqN;P zHjtMAK1Rn+GhOSo9uWCMLV0&0?+A~Cp2-gyDF>dUQ>Hf5`sgKnFvI7{VAFN(IETd9 zhV>@nMI7QlY2s$RpwLUnaVLCoUu!CbIyLdJ@=3rr!)4Zpc>Tl=-C;2!_+3#7xIwK zzTo-Cm6!-!pY3zC&*}RN#bvGfdz&?T-n^S&c^#m`m$DkaIgPbRTtvQlt$QQvawWk8 zKf$2qj9HBDcO~yM&J`lBTyejX-j+qJ=V!ll8&YQZVg1tcSLIrF{Er4M()mF7a*fY1 z*yhSqll&(dbi9_MA`ku7YKzX=0_?G#q)#un({pFI&cK3XfV8v@NS*<3t9rgua-Mu7 zUCn1%kBQ$IY;z^WB>uRdPD%VK*=OjC3)-PGCgBq4ENZO2ZoBgtB)eN+^caA$Eyn?V z$hafdQ|%LGkc;Fu)++Hh#4j7231Ry`EI411aM@UIbk^b->z=TDU+L!Zq$?#btaUfk z{IUj4y1s<=!&?E)tptC){Q&m9EIgC_hJB-cKs*lN$C~8-aXIg`;JpH4)p)Gco7Z}X z=4Z9+fS229p!{4RK*LAB!D+|O(7F`h)H;CEA7kH%Uxu8kj>21Cz=!8e;_r!b>3Fwj z7jh2+oTs>*F}G=5!A{>dgRhlCWpfc?<-onl)Z81~k_{~miB0%$%yB_t6py=Zs9UAFoqBvky?L$_%~|(bC7>@fA(4{ zLVJcj%N{RzyJ44Weew3oxoX^$?YQzfEgy3)fiF^S%A(rkijU z^FTgQj_T%lG2aK#);+vC+(qe-LjIIbdn1VNNwi|_D@5_wBJ9~D#pv@fJYNf2cQ`8l zYWScD4%-_=!~2b*KJ%a!bNG0*di6dyo_+$3WSzhqo%Pqwb&JwT8&K~E)?We2M%>Sh z=mQttB%6j$BkF|9gZOQ3IL3c?e;3#EM={vfV@JU!{az>&Q6kU9u6?uN+WS!q*!12- zd~MwmxMnI!SN)idy3Z0$H0dV3W`} +// +---------------------------------------------------------------------- + +// [ 应用入口文件 ] +namespace think; + +$server = isset($_REQUEST['server']) || isset($_SERVER['HTTP_SERVER']) || substr($_SERVER['REQUEST_URI'], 1, 9) == 'index.php' || $_SERVER['REQUEST_METHOD'] == 'OPTIONS'; +if (!$server) { + /* + * 用户访问前端 + * 不在tp加载后判断,为了安全的使用 exit()(常驻内存运行时不走本文件) + */ + $rootPath = $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR; + + // 安装检测-s + if (!is_file($rootPath . 'install.lock') && is_file($rootPath . 'install' . DIRECTORY_SEPARATOR . 'index.html')) { + header("location:" . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR); + exit(); + } + // 安装检测-e + + // 检测是否已编译前端(如果存在 index.html,则访问)-s + if (is_file($rootPath . 'index.html')) { + header("location:" . DIRECTORY_SEPARATOR . 'index.html'); + exit(); + } + // 检测是否已编译前端-e +} + +require __DIR__ . '/../vendor/autoload.php'; + +// 执行HTTP应用并响应 +$http = (new App())->http; + +$response = $http->run(); + +$response->send(); + +$http->end($response); diff --git a/public/install/assets/index.css b/public/install/assets/index.css new file mode 100644 index 0000000..05ae6b0 --- /dev/null +++ b/public/install/assets/index.css @@ -0,0 +1 @@ +.command[data-v-c55edab5]{font-size:var(--el-font-size-large);font-weight:700;margin-left:10px}.exec-message[data-v-c55edab5]{color:#fff;font-size:12px;line-height:16px;padding:6px;background-color:#424251;margin-top:10px;min-height:30px;max-height:200px;overflow:auto}.exec-message[data-v-c55edab5]::-webkit-scrollbar{width:5px;height:5px}.exec-message[data-v-c55edab5]::-webkit-scrollbar-thumb{background:#c8c9cc;border-radius:4px;box-shadow:none;-webkit-box-shadow:none}.exec-message[data-v-c55edab5]::-webkit-scrollbar-track{background:#f5f5f5}.exec-message[data-v-c55edab5]:hover::-webkit-scrollbar-thumb:hover{background:#909399}@supports not (selector(::-webkit-scrollbar)){.exec-message[data-v-c55edab5]{scrollbar-width:thin;scrollbar-color:#c8c9cc #eaeaea}}.toggle-message-display[data-v-c55edab5]{padding-top:10px;font-size:13px;color:var(--color-secondary);display:flex;align-items:center;justify-content:center;cursor:pointer}.task-opt[data-v-c55edab5]{display:none;float:right}.task-item.task-status-0:hover .task-opt[data-v-c55edab5],.task-item.task-status-3:hover .task-opt[data-v-c55edab5],.task-item.task-status-4:hover .task-opt[data-v-c55edab5],.task-item.task-status-5:hover .task-opt[data-v-c55edab5]{display:inline}.block-on-failure-tag[data-v-c55edab5]{margin-left:10px}.terminal-menu-item[data-v-c55edab5]{margin-bottom:10px}.ba-terminal-dialog{width:42%!important}@media screen and (max-width: 768px){.ba-terminal-dialog{width:80%!important}}@media screen and (max-width: 540px){.ba-terminal-dialog{width:94%!important}}.lang[data-v-631c568f]{position:fixed;top:10px;right:10px;width:86px}.lang:hover .lang-list[data-v-631c568f],.lang .lang-list:hover .lang-list[data-v-631c568f]{display:block}.lang img[data-v-631c568f]{display:block;margin:0 auto;width:30px;height:30px}.lang .lang-list[data-v-631c568f]{display:none;margin-top:5px;background-color:#fff;position:relative;border-radius:4px;transition:all .5s ease}.lang .lang-list .lang-list-arrow[data-v-631c568f]{top:-4px;width:10px;height:10px;position:absolute;left:38px}.lang .lang-list .lang-list-arrow[data-v-631c568f]:before{border-bottom-color:transparent!important;border-right-color:transparent!important;border-top-left-radius:2px;border:1px solid #fff;background:#fff;right:0;position:absolute;width:10px;height:10px;z-index:-1;content:" ";transform:rotate(45deg);box-sizing:border-box}.lang .lang-list .lang-item[data-v-631c568f]{cursor:pointer;padding:10px 15px;border-bottom:1px solid #ebeef5}.lang .lang-list .lang-item[data-v-631c568f]:hover{background-color:#f5f5f5}.lang .lang-list .lang-item[data-v-631c568f]:last-child{border:none}.logo-box[data-v-631c568f]{margin-top:10px}.logo-box .logo[data-v-631c568f]{display:block;margin:0 auto;width:110px;height:110px}.logo-box .title[data-v-631c568f]{display:block;text-align:center;font-size:28px;color:#606266}.container[data-v-e96f3865]{margin-top:20px}.container .table-title[data-v-e96f3865]{display:block;text-align:center;font-size:20px;color:#303133}.container .table[data-v-e96f3865]{max-width:560px;padding:20px;margin:10px auto}.container .global-warning[data-v-e96f3865]{margin-bottom:10px}.container .table-item[data-v-e96f3865]{color:#303133;display:flex;align-items:center;justify-content:space-between;background-color:#fff;padding:13px 15px;margin-bottom:2px;border-radius:5px;transition:all .2s ease}.container .table-item[data-v-e96f3865]:hover{background-color:#fcfcfc}.container .table-item .table-label[data-v-e96f3865]{font-size:15px}.container .table-item .label-need[data-v-e96f3865]{font-size:12px;color:#f56c6c;cursor:pointer;padding:0 4px}.container .table-item .label-need.faq[data-v-e96f3865],.container .table-item .label-need.install-cnpm[data-v-e96f3865]{color:#3f6ad8}.container .table-item .label-need.faq[data-v-e96f3865]:hover,.container .table-item .label-need.install-cnpm[data-v-e96f3865]:hover{text-decoration:underline}.container .table-item .label-need.text[data-v-e96f3865]{cursor:text}.container .table-item.error[data-v-e96f3865]{background-color:#f56c6c;color:#fff}.container .table-item.success[data-v-e96f3865]{background-color:#67c23a;color:#fff}.container .table-value[data-v-e96f3865]{font-size:13px;display:flex;align-items:center}.container .data-state[data-v-e96f3865]{width:20px;height:20px;-webkit-user-select:none;user-select:none;margin-left:5px}.check-done[data-v-e96f3865]{font-size:14px;margin-top:20px;text-align:right}.check-done.ok[data-v-e96f3865]{color:#67c23a}.check-done.fail[data-v-e96f3865]{color:#f56c6c}.button[data-v-e96f3865]{padding:15px;text-align:center;font-size:16px;background-color:#409eff;border-radius:5px;color:#fff;margin-top:20px;opacity:.4;cursor:pointer;transition:all .2s ease}.button.pass[data-v-e96f3865]{opacity:1}.start-install[data-v-e96f3865]{margin-left:10px}.w100[data-v-e96f3865]{width:100%}.start-from[data-v-e96f3865] .el-input__inner{line-height:29px}.block-help[data-v-e96f3865]{font-size:13px;color:#606266;padding-top:5px;line-height:15px}.phinx-fail-box[data-v-efc9ce06]{display:block;padding:15px;margin:15px auto;background-color:#fff;border-radius:4px}.phinx-fail-box .content-item[data-v-efc9ce06]{line-height:1.3;border-radius:4px;padding:10px;background-color:#f5f5f5;word-break:break-all;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;margin:15px 0}.phinx-fail-box .content-item .command[data-v-efc9ce06]{line-height:2;font-weight:700}.phinx-fail-box .content-item .block-help[data-v-efc9ce06]{display:inline-block;line-height:2;font-size:13px;color:#909399}.phinx-fail-box .content-item .text[data-v-efc9ce06]{padding:6px 0;font-size:14px}.phinx-fail-box .content-item .output-box[data-v-efc9ce06]{position:relative;border-radius:5px;box-shadow:#0005 0 2px 2px;padding:5px;font-size:13px;background-color:#282c34}.phinx-fail-box .content-item .output[data-v-efc9ce06]{color:#a9b7c6}.phinx-fail-box .content-item .mt10[data-v-efc9ce06]{margin-top:10px}.phinx-fail-footer-button[data-v-efc9ce06]{width:100%;display:flex;align-items:center;justify-content:center}.container[data-v-efc9ce06]{margin-top:10px}.container .table-title[data-v-efc9ce06]{display:block;text-align:center;font-size:20px;color:#303133}.container .table[data-v-efc9ce06]{max-width:560px;padding:20px;margin:0 auto}.container .table .table-item-br[data-v-efc9ce06]{height:20px}.container .table .table-item[data-v-efc9ce06]:focus-within{border:2px solid #4e73df}.container .table .table-item:focus-within .table-input[data-v-efc9ce06]{color:#303133}.container .table .table-column[data-v-efc9ce06]{padding:12px;border-radius:3px;border:2px solid #fff;transition:all .3s ease}.container .table .table-error[data-v-efc9ce06]{display:flex;align-items:center;justify-content:center;margin-bottom:10px;background-color:#f56c6c;color:#fff}.container .table .table-item[data-v-efc9ce06]{display:flex;align-items:center;margin-bottom:2px;background-color:#fff;color:#909399}.container .table .table-item .table-label[data-v-efc9ce06]{flex:1;font-size:15px;margin-bottom:0}.container .table .table-item .table-label .block-help[data-v-efc9ce06]{display:block;width:100%;color:#909399;font-size:13px;line-height:16px;padding:0 11px}.container .footer-buttons[data-v-efc9ce06]{margin-top:20px;width:100%;display:flex;align-items:center;justify-content:center}.container .footer-buttons .button[data-v-efc9ce06]{width:50%;height:42px}.container .connecting-prompt[data-v-efc9ce06]{position:fixed;top:60px;right:100px;font-size:14px;margin-top:20px;text-align:right;color:#606266}.container[data-v-efc9ce06] .el-input__wrapper,.container[data-v-efc9ce06] .el-input__wrapper.is-focus,.container[data-v-efc9ce06] .el-form-item.is-error .el-input__wrapper{box-shadow:none}.container[data-v-efc9ce06] .el-form-item__error{left:11px;margin-top:-6px}.container[data-v-efc9ce06] .el-input__inner{line-height:29px}.install-tips-box[data-v-efc9ce06]{padding:0 20px}.install-tips-box .install-tips-close[data-v-efc9ce06]{position:absolute;width:22px;height:22px;top:-11px;right:-11px;border:1px solid #d50600;border-radius:50%}.install-tips-box .install-tips[data-v-efc9ce06]{position:relative;padding:10px;background-color:#ffcdcd;color:#d50600;max-width:570px;margin:20px auto 0;border-radius:4px;font-size:14px}.install-tips-box .install-tips .install-tips-title[data-v-efc9ce06],.install-tips-box .install-tips .install-tips-item[data-v-efc9ce06]{text-indent:1em;background-color:#ffe5e5;padding:8px;border-radius:4px;margin-bottom:5px}.install-tips-box .install-tips .install-tips-item[data-v-efc9ce06]:last-child{margin-bottom:0}.install-tips-box .change-route[data-v-efc9ce06]{cursor:pointer;color:#3f6ad8}.container[data-v-e1e72612]{margin-top:20px;padding:20px}.container .table-title[data-v-e1e72612]{display:block;text-align:center;font-size:20px;color:#67c23a}.container .text-warning[data-v-e1e72612]{max-width:500px;margin:20px auto}.container .done-box[data-v-e1e72612]{display:block;max-width:500px;margin:20px auto;background-color:#ffcdcd;padding:20px;border-radius:6px;text-align:center;color:#d9534f;font-size:15px}.container .done-box .reload-tips[data-v-e1e72612]{font-size:13px;color:#909399}.container .done-box .reload-tips .reload[data-v-e1e72612]{cursor:pointer;color:#409eff}.container .admin-url[data-v-e1e72612]{background-color:#fcfcfc;font-size:16px;text-align:center;padding:5px;border-radius:4px;margin:10px 0;cursor:pointer;word-wrap:break-word;white-space:normal;word-break:break-all}.container .admin-url[data-v-e1e72612]:hover{text-decoration:underline}.container .done-button[data-v-e1e72612]{display:flex;justify-content:space-around;max-width:500px;margin:0 auto}.container .done-button button[data-v-e1e72612]{width:130px}.container[data-v-292784ff]{padding:20px}.container .title[data-v-292784ff]{display:block;text-align:center;font-size:20px;color:#303133}.container .reload-tips[data-v-292784ff]{padding:10px 0;text-align:center;font-size:14px;color:#909399}.container .reload-tips .reload[data-v-292784ff]{cursor:pointer;color:#409eff}.container .content[data-v-292784ff]{display:block;max-width:560px;padding:15px;margin:15px auto;background-color:#fff;border-radius:4px;font-size:15px}.container .content .content-item[data-v-292784ff]{line-height:1.3;border-radius:4px;padding:10px;background-color:#f5f5f5;word-break:break-all;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;margin:15px 0}.container .content .content-item .command[data-v-292784ff]{line-height:2;font-weight:700}.container .content .content-item .block-help[data-v-292784ff]{display:inline-block;line-height:2;font-size:13px;color:#303133}.container .content .content-item .block-help.link[data-v-292784ff]{color:#3f6ad8;cursor:pointer}.container .content .content-item .min-help[data-v-292784ff]{color:#909399;font-size:12px}.container .content .content-item .size-15[data-v-292784ff]{font-size:15px}.container .content .content-item .step-box[data-v-292784ff]{padding-bottom:10px}.container .content .content-item .step-box .step[data-v-292784ff]{font-size:14px;line-height:1.5}.container .content .content-item[data-v-292784ff]:last-child{margin-bottom:0}[data-v-292784ff] .text-bold{font-weight:700;padding:0 2px}.loading[data-v-292784ff]{font-size:13px;color:#909399;text-align:right}*{margin:0;padding:0;box-sizing:border-box;outline:none!important}html,body,#app{margin:0;padding:0;width:100%;height:100%;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,SimSun,sans-serif;font-weight:400;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;background-color:#f5f5f5;font-size:14px;overflow-y:auto;position:relative}.slide-bottom-enter-active,.slide-bottom-leave-active{will-change:transform;transition:all .6s ease}.slide-bottom-enter-from{opacity:0;transform:translateY(-30px)}.slide-bottom-leave-to{opacity:0;transform:translateY(30px)}.ba-terminal{position:fixed;right:40px;bottom:200px;height:40px;width:40px;-webkit-user-select:none;user-select:none;border-radius:50%;cursor:pointer;animation:pulse 2s infinite}.terminal-logo{height:38px;width:38px}@-webkit-keyframes pulse{0%{-webkit-box-shadow:0 0 0 0 rgba(13,130,255,.4)}70%{-webkit-box-shadow:0 0 0 10px rgba(13,130,255,0)}to{-webkit-box-shadow:0 0 0 0 rgba(13,130,255,0)}}@keyframes pulse{0%{-moz-box-shadow:0 0 0 0 rgba(13,130,255,.4);box-shadow:0 0 #0d82ff66}70%{-moz-box-shadow:0 0 0 10px rgba(13,130,255,0);box-shadow:0 0 0 10px #0d82ff00}to{-moz-box-shadow:0 0 0 0 rgba(13,130,255,0);box-shadow:0 0 #0d82ff00}}:root{--el-color-white:#ffffff;--el-color-black:#000000;--el-color-primary-rgb:64,158,255;--el-color-success-rgb:103,194,58;--el-color-warning-rgb:230,162,60;--el-color-danger-rgb:245,108,108;--el-color-error-rgb:245,108,108;--el-color-info-rgb:144,147,153;--el-font-size-extra-large:20px;--el-font-size-large:18px;--el-font-size-medium:16px;--el-font-size-base:14px;--el-font-size-small:13px;--el-font-size-extra-small:12px;--el-font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;--el-font-weight-primary:500;--el-font-line-height-primary:24px;--el-index-normal:1;--el-index-top:1000;--el-index-popper:2000;--el-border-radius-base:4px;--el-border-radius-small:2px;--el-border-radius-round:20px;--el-border-radius-circle:100%;--el-transition-duration:.3s;--el-transition-duration-fast:.2s;--el-transition-function-ease-in-out-bezier:cubic-bezier(.645,.045,.355,1);--el-transition-function-fast-bezier:cubic-bezier(.23,1,.32,1);--el-transition-all:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);--el-transition-fade:opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-md-fade:transform var(--el-transition-duration) var(--el-transition-function-fast-bezier),opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-fade-linear:opacity var(--el-transition-duration-fast) linear;--el-transition-border:border-color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-box-shadow:box-shadow var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-color:color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-component-size-large:40px;--el-component-size:32px;--el-component-size-small:24px;color-scheme:light;--el-color-primary:#409eff;--el-color-primary-light-3:#79bbff;--el-color-primary-light-5:#a0cfff;--el-color-primary-light-7:#c6e2ff;--el-color-primary-light-8:#d9ecff;--el-color-primary-light-9:#ecf5ff;--el-color-primary-dark-2:#337ecc;--el-color-success:#67c23a;--el-color-success-light-3:#95d475;--el-color-success-light-5:#b3e19d;--el-color-success-light-7:#d1edc4;--el-color-success-light-8:#e1f3d8;--el-color-success-light-9:#f0f9eb;--el-color-success-dark-2:#529b2e;--el-color-warning:#e6a23c;--el-color-warning-light-3:#eebe77;--el-color-warning-light-5:#f3d19e;--el-color-warning-light-7:#f8e3c5;--el-color-warning-light-8:#faecd8;--el-color-warning-light-9:#fdf6ec;--el-color-warning-dark-2:#b88230;--el-color-danger:#f56c6c;--el-color-danger-light-3:#f89898;--el-color-danger-light-5:#fab6b6;--el-color-danger-light-7:#fcd3d3;--el-color-danger-light-8:#fde2e2;--el-color-danger-light-9:#fef0f0;--el-color-danger-dark-2:#c45656;--el-color-error:#f56c6c;--el-color-error-light-3:#f89898;--el-color-error-light-5:#fab6b6;--el-color-error-light-7:#fcd3d3;--el-color-error-light-8:#fde2e2;--el-color-error-light-9:#fef0f0;--el-color-error-dark-2:#c45656;--el-color-info:#909399;--el-color-info-light-3:#b1b3b8;--el-color-info-light-5:#c8c9cc;--el-color-info-light-7:#dedfe0;--el-color-info-light-8:#e9e9eb;--el-color-info-light-9:#f4f4f5;--el-color-info-dark-2:#73767a;--el-bg-color:#ffffff;--el-bg-color-page:#f2f3f5;--el-bg-color-overlay:#ffffff;--el-text-color-primary:#303133;--el-text-color-regular:#606266;--el-text-color-secondary:#909399;--el-text-color-placeholder:#a8abb2;--el-text-color-disabled:#c0c4cc;--el-border-color:#dcdfe6;--el-border-color-light:#e4e7ed;--el-border-color-lighter:#ebeef5;--el-border-color-extra-light:#f2f6fc;--el-border-color-dark:#d4d7de;--el-border-color-darker:#cdd0d6;--el-fill-color:#f0f2f5;--el-fill-color-light:#f5f7fa;--el-fill-color-lighter:#fafafa;--el-fill-color-extra-light:#fafcff;--el-fill-color-dark:#ebedf0;--el-fill-color-darker:#e6e8eb;--el-fill-color-blank:#ffffff;--el-box-shadow:0px 12px 32px 4px rgba(0,0,0,.04),0px 8px 20px rgba(0,0,0,.08);--el-box-shadow-light:0px 0px 12px rgba(0,0,0,.12);--el-box-shadow-lighter:0px 0px 6px rgba(0,0,0,.12);--el-box-shadow-dark:0px 16px 48px 16px rgba(0,0,0,.08),0px 12px 32px rgba(0,0,0,.12),0px 8px 16px -8px rgba(0,0,0,.16);--el-disabled-bg-color:var(--el-fill-color-light);--el-disabled-text-color:var(--el-text-color-placeholder);--el-disabled-border-color:var(--el-border-color-light);--el-overlay-color:rgba(0,0,0,.8);--el-overlay-color-light:rgba(0,0,0,.7);--el-overlay-color-lighter:rgba(0,0,0,.5);--el-mask-color:rgba(255,255,255,.9);--el-mask-color-extra-light:rgba(255,255,255,.3);--el-border-width:1px;--el-border-style:solid;--el-border-color-hover:var(--el-text-color-disabled);--el-border:var(--el-border-width) var(--el-border-style) var(--el-border-color);--el-svg-monochrome-grey:var(--el-border-color)}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transform-origin:center top;transition:var(--el-transition-md-fade)}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:center bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transform-origin:center bottom;transition:var(--el-transition-md-fade)}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1);transform-origin:top left;transition:var(--el-transition-md-fade)}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-enter-active,.el-collapse-transition-leave-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-icon-loading{animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.el-icon{--color:inherit;align-items:center;display:inline-flex;height:1em;justify-content:center;line-height:1em;position:relative;width:1em;fill:currentColor;color:var(--color);font-size:inherit}.el-icon.is-loading{animation:rotating 2s linear infinite}.el-icon svg{height:1em;width:1em}.el-affix--fixed{position:fixed}.el-alert{--el-alert-padding:8px 16px;--el-alert-border-radius-base:var(--el-border-radius-base);--el-alert-title-font-size:14px;--el-alert-title-with-description-font-size:16px;--el-alert-description-font-size:14px;--el-alert-close-font-size:16px;--el-alert-close-customed-font-size:14px;--el-alert-icon-size:16px;--el-alert-icon-large-size:28px;align-items:center;background-color:var(--el-color-white);border-radius:var(--el-alert-border-radius-base);box-sizing:border-box;display:flex;margin:0;opacity:1;overflow:hidden;padding:var(--el-alert-padding);position:relative;transition:opacity var(--el-transition-duration-fast);width:100%}.el-alert.is-light .el-alert__close-btn{color:var(--el-text-color-placeholder)}.el-alert.is-dark .el-alert__close-btn,.el-alert.is-dark .el-alert__description{color:var(--el-color-white)}.el-alert.is-center{justify-content:center}.el-alert--success{--el-alert-bg-color:var(--el-color-success-light-9)}.el-alert--success.is-light{background-color:var(--el-alert-bg-color)}.el-alert--success.is-light,.el-alert--success.is-light .el-alert__description{color:var(--el-color-success)}.el-alert--success.is-dark{background-color:var(--el-color-success);color:var(--el-color-white)}.el-alert--info{--el-alert-bg-color:var(--el-color-info-light-9)}.el-alert--info.is-light{background-color:var(--el-alert-bg-color)}.el-alert--info.is-light,.el-alert--info.is-light .el-alert__description{color:var(--el-color-info)}.el-alert--info.is-dark{background-color:var(--el-color-info);color:var(--el-color-white)}.el-alert--warning{--el-alert-bg-color:var(--el-color-warning-light-9)}.el-alert--warning.is-light{background-color:var(--el-alert-bg-color)}.el-alert--warning.is-light,.el-alert--warning.is-light .el-alert__description{color:var(--el-color-warning)}.el-alert--warning.is-dark{background-color:var(--el-color-warning);color:var(--el-color-white)}.el-alert--error{--el-alert-bg-color:var(--el-color-error-light-9)}.el-alert--error.is-light{background-color:var(--el-alert-bg-color)}.el-alert--error.is-light,.el-alert--error.is-light .el-alert__description{color:var(--el-color-error)}.el-alert--error.is-dark{background-color:var(--el-color-error);color:var(--el-color-white)}.el-alert__content{display:flex;flex-direction:column;gap:4px}.el-alert .el-alert__icon{font-size:var(--el-alert-icon-size);margin-right:8px;width:var(--el-alert-icon-size)}.el-alert .el-alert__icon.is-big{font-size:var(--el-alert-icon-large-size);margin-right:12px;width:var(--el-alert-icon-large-size)}.el-alert__title{font-size:var(--el-alert-title-font-size);line-height:24px}.el-alert__title.with-description{font-size:var(--el-alert-title-with-description-font-size)}.el-alert .el-alert__description{font-size:var(--el-alert-description-font-size);margin:0}.el-alert .el-alert__close-btn{cursor:pointer;font-size:var(--el-alert-close-font-size);opacity:1;position:absolute;right:16px;top:12px}.el-alert .el-alert__close-btn.is-customed{font-size:var(--el-alert-close-customed-font-size);font-style:normal;line-height:24px;top:8px}.el-alert-fade-enter-from,.el-alert-fade-leave-active{opacity:0}.el-aside{box-sizing:border-box;flex-shrink:0;overflow:auto;width:var(--el-aside-width,300px)}.el-autocomplete{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;display:inline-block;position:relative;width:var(--el-input-width)}.el-autocomplete__popper.el-popper{background:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-autocomplete__popper.el-popper,.el-autocomplete__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-autocomplete__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-autocomplete-suggestion{border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-autocomplete-suggestion__wrap{box-sizing:border-box;max-height:280px;padding:10px 0}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-base);line-height:34px;list-style:none;margin:0;overflow:hidden;padding:0 20px;text-align:left;text-overflow:ellipsis;white-space:nowrap}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:var(--el-fill-color-light)}.el-autocomplete-suggestion li.divider{border-top:1px solid var(--el-color-black);margin-top:6px}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{color:var(--el-text-color-secondary);font-size:20px;height:100px;line-height:100px;text-align:center}.el-autocomplete-suggestion.is-loading li:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:var(--el-bg-color-overlay)}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-avatar{--el-avatar-text-color:var(--el-color-white);--el-avatar-bg-color:var(--el-text-color-disabled);--el-avatar-text-size:14px;--el-avatar-icon-size:18px;--el-avatar-border-radius:var(--el-border-radius-base);--el-avatar-size-large:56px;--el-avatar-size-small:24px;--el-avatar-size:40px;align-items:center;background:var(--el-avatar-bg-color);box-sizing:border-box;color:var(--el-avatar-text-color);display:inline-flex;font-size:var(--el-avatar-text-size);height:var(--el-avatar-size);justify-content:center;overflow:hidden;text-align:center;width:var(--el-avatar-size)}.el-avatar>img{display:block;height:100%;width:100%}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:var(--el-avatar-border-radius)}.el-avatar--icon{font-size:var(--el-avatar-icon-size)}.el-avatar--small{--el-avatar-size:24px}.el-avatar--large{--el-avatar-size:56px}.el-backtop{--el-backtop-bg-color:var(--el-bg-color-overlay);--el-backtop-text-color:var(--el-color-primary);--el-backtop-hover-bg-color:var(--el-border-color-extra-light);align-items:center;background-color:var(--el-backtop-bg-color);border-radius:50%;box-shadow:var(--el-box-shadow-lighter);color:var(--el-backtop-text-color);cursor:pointer;display:flex;font-size:20px;height:40px;justify-content:center;position:fixed;width:40px;z-index:5}.el-backtop:hover{background-color:var(--el-backtop-hover-bg-color)}.el-backtop__icon{font-size:20px}.el-badge{--el-badge-bg-color:var(--el-color-danger);--el-badge-radius:10px;--el-badge-font-size:12px;--el-badge-padding:6px;--el-badge-size:18px;display:inline-block;position:relative;vertical-align:middle;width:-moz-fit-content;width:fit-content}.el-badge__content{align-items:center;background-color:var(--el-badge-bg-color);border:1px solid var(--el-bg-color);border-radius:var(--el-badge-radius);color:var(--el-color-white);display:inline-flex;font-size:var(--el-badge-font-size);height:var(--el-badge-size);justify-content:center;padding:0 var(--el-badge-padding);white-space:nowrap}.el-badge__content.is-fixed{position:absolute;right:calc(1px + var(--el-badge-size)/2);top:0;transform:translateY(-50%) translate(100%);z-index:var(--el-index-normal)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{border-radius:50%;height:8px;padding:0;right:0;width:8px}.el-badge__content--primary{background-color:var(--el-color-primary)}.el-badge__content--success{background-color:var(--el-color-success)}.el-badge__content--warning{background-color:var(--el-color-warning)}.el-badge__content--info{background-color:var(--el-color-info)}.el-badge__content--danger{background-color:var(--el-color-danger)}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{content:"";display:table}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{color:var(--el-text-color-placeholder);font-weight:700;margin:0 9px}.el-breadcrumb__separator.el-icon{font-weight:400;margin:0 6px}.el-breadcrumb__separator.el-icon svg{vertical-align:middle}.el-breadcrumb__item{align-items:center;display:inline-flex;float:left}.el-breadcrumb__inner{color:var(--el-text-color-regular)}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{color:var(--el-text-color-primary);font-weight:700;text-decoration:none;transition:var(--el-transition-color)}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:var(--el-color-primary);cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{color:var(--el-text-color-regular);cursor:text;font-weight:400}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group:after,.el-button-group:before{content:"";display:table}.el-button-group:after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.el-button-group>.el-button:last-child{border-bottom-left-radius:0;border-top-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-bottom-left-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base);border-top-left-radius:var(--el-border-radius-base);border-top-right-radius:var(--el-border-radius-base)}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:var(--el-border-radius-round)}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button.is-active,.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-bottom-left-radius:0;border-left-color:var(--el-button-divide-border-color);border-top-left-radius:0}.el-button-group .el-button--primary:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button{--el-button-font-weight:var(--el-font-weight-primary);--el-button-border-color:var(--el-border-color);--el-button-bg-color:var(--el-fill-color-blank);--el-button-text-color:var(--el-text-color-regular);--el-button-disabled-text-color:var(--el-disabled-text-color);--el-button-disabled-bg-color:var(--el-fill-color-blank);--el-button-disabled-border-color:var(--el-border-color-light);--el-button-divide-border-color:rgba(255,255,255,.5);--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-color-primary-light-9);--el-button-hover-border-color:var(--el-color-primary-light-7);--el-button-active-text-color:var(--el-button-hover-text-color);--el-button-active-border-color:var(--el-color-primary);--el-button-active-bg-color:var(--el-button-hover-bg-color);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-hover-link-text-color:var(--el-color-info);--el-button-active-color:var(--el-text-color-primary);align-items:center;-webkit-appearance:none;background-color:var(--el-button-bg-color);border:var(--el-border);border-color:var(--el-button-border-color);box-sizing:border-box;color:var(--el-button-text-color);cursor:pointer;display:inline-flex;font-weight:var(--el-button-font-weight);height:32px;justify-content:center;line-height:1;outline:none;text-align:center;transition:.1s;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-button:hover{background-color:var(--el-button-hover-bg-color);border-color:var(--el-button-hover-border-color);color:var(--el-button-hover-text-color);outline:none}.el-button:active{background-color:var(--el-button-active-bg-color);border-color:var(--el-button-active-border-color);color:var(--el-button-active-text-color);outline:none}.el-button:focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset 0s,outline 0s}.el-button>span{align-items:center;display:inline-flex}.el-button+.el-button{margin-left:12px}.el-button{border-radius:var(--el-border-radius-base);font-size:var(--el-font-size-base)}.el-button,.el-button.is-round{padding:8px 15px}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon]+span{margin-left:6px}.el-button [class*=el-icon] svg{vertical-align:bottom}.el-button.is-plain{--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-fill-color-blank);--el-button-hover-border-color:var(--el-color-primary)}.el-button.is-active{background-color:var(--el-button-active-bg-color);border-color:var(--el-button-active-border-color);color:var(--el-button-active-text-color);outline:none}.el-button.is-disabled,.el-button.is-disabled:hover{background-color:var(--el-button-disabled-bg-color);background-image:none;border-color:var(--el-button-disabled-border-color);color:var(--el-button-disabled-text-color);cursor:not-allowed}.el-button.is-loading{pointer-events:none;position:relative}.el-button.is-loading:before{background-color:var(--el-mask-color-extra-light);border-radius:inherit;bottom:-1px;content:"";left:-1px;pointer-events:none;position:absolute;right:-1px;top:-1px;z-index:1}.el-button.is-round{border-radius:var(--el-border-radius-round)}.el-button.is-circle{border-radius:50%;padding:8px;width:32px}.el-button.is-text{background-color:transparent;border:0 solid transparent;color:var(--el-button-text-color)}.el-button.is-text.is-disabled{background-color:transparent!important;color:var(--el-button-disabled-text-color)}.el-button.is-text:not(.is-disabled):hover{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled):focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset 0s,outline 0s}.el-button.is-text:not(.is-disabled):active{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled).is-has-bg:hover{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg:active{background-color:var(--el-fill-color-dark)}.el-button__text--expand{letter-spacing:.3em;margin-right:-.3em}.el-button.is-link{background:transparent;border-color:transparent;color:var(--el-button-text-color);height:auto;padding:2px}.el-button.is-link:hover{color:var(--el-button-hover-link-text-color)}.el-button.is-link.is-disabled{background-color:transparent!important;border-color:transparent!important;color:var(--el-button-disabled-text-color)}.el-button.is-link:not(.is-disabled):active,.el-button.is-link:not(.is-disabled):hover{background-color:transparent;border-color:transparent}.el-button.is-link:not(.is-disabled):active{color:var(--el-button-active-color)}.el-button--text{background:transparent;border-color:transparent;color:var(--el-color-primary);padding-left:0;padding-right:0}.el-button--text.is-disabled{background-color:transparent!important;border-color:transparent!important;color:var(--el-button-disabled-text-color)}.el-button--text:not(.is-disabled):hover{background-color:transparent;border-color:transparent;color:var(--el-color-primary-light-3)}.el-button--text:not(.is-disabled):active{background-color:transparent;border-color:transparent;color:var(--el-color-primary-dark-2)}.el-button__link--expand{letter-spacing:.3em;margin-right:-.3em}.el-button--primary{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-primary);--el-button-border-color:var(--el-color-primary);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-active-color:var(--el-color-primary-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-primary-light-5);--el-button-hover-bg-color:var(--el-color-primary-light-3);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-bg-color:var(--el-color-primary-dark-2);--el-button-active-border-color:var(--el-color-primary-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-primary-light-5);--el-button-disabled-border-color:var(--el-color-primary-light-5)}.el-button--primary.is-link,.el-button--primary.is-plain,.el-button--primary.is-text{--el-button-text-color:var(--el-color-primary);--el-button-bg-color:var(--el-color-primary-light-9);--el-button-border-color:var(--el-color-primary-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-primary);--el-button-hover-border-color:var(--el-color-primary);--el-button-active-text-color:var(--el-color-white)}.el-button--primary.is-link.is-disabled,.el-button--primary.is-link.is-disabled:active,.el-button--primary.is-link.is-disabled:focus,.el-button--primary.is-link.is-disabled:hover,.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover,.el-button--primary.is-text.is-disabled,.el-button--primary.is-text.is-disabled:active,.el-button--primary.is-text.is-disabled:focus,.el-button--primary.is-text.is-disabled:hover{background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8);color:var(--el-color-primary-light-5)}.el-button--success{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-success);--el-button-border-color:var(--el-color-success);--el-button-outline-color:var(--el-color-success-light-5);--el-button-active-color:var(--el-color-success-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-success-light-5);--el-button-hover-bg-color:var(--el-color-success-light-3);--el-button-hover-border-color:var(--el-color-success-light-3);--el-button-active-bg-color:var(--el-color-success-dark-2);--el-button-active-border-color:var(--el-color-success-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-success-light-5);--el-button-disabled-border-color:var(--el-color-success-light-5)}.el-button--success.is-link,.el-button--success.is-plain,.el-button--success.is-text{--el-button-text-color:var(--el-color-success);--el-button-bg-color:var(--el-color-success-light-9);--el-button-border-color:var(--el-color-success-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-success);--el-button-hover-border-color:var(--el-color-success);--el-button-active-text-color:var(--el-color-white)}.el-button--success.is-link.is-disabled,.el-button--success.is-link.is-disabled:active,.el-button--success.is-link.is-disabled:focus,.el-button--success.is-link.is-disabled:hover,.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover,.el-button--success.is-text.is-disabled,.el-button--success.is-text.is-disabled:active,.el-button--success.is-text.is-disabled:focus,.el-button--success.is-text.is-disabled:hover{background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8);color:var(--el-color-success-light-5)}.el-button--warning{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-warning);--el-button-border-color:var(--el-color-warning);--el-button-outline-color:var(--el-color-warning-light-5);--el-button-active-color:var(--el-color-warning-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-warning-light-5);--el-button-hover-bg-color:var(--el-color-warning-light-3);--el-button-hover-border-color:var(--el-color-warning-light-3);--el-button-active-bg-color:var(--el-color-warning-dark-2);--el-button-active-border-color:var(--el-color-warning-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-warning-light-5);--el-button-disabled-border-color:var(--el-color-warning-light-5)}.el-button--warning.is-link,.el-button--warning.is-plain,.el-button--warning.is-text{--el-button-text-color:var(--el-color-warning);--el-button-bg-color:var(--el-color-warning-light-9);--el-button-border-color:var(--el-color-warning-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-warning);--el-button-hover-border-color:var(--el-color-warning);--el-button-active-text-color:var(--el-color-white)}.el-button--warning.is-link.is-disabled,.el-button--warning.is-link.is-disabled:active,.el-button--warning.is-link.is-disabled:focus,.el-button--warning.is-link.is-disabled:hover,.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover,.el-button--warning.is-text.is-disabled,.el-button--warning.is-text.is-disabled:active,.el-button--warning.is-text.is-disabled:focus,.el-button--warning.is-text.is-disabled:hover{background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8);color:var(--el-color-warning-light-5)}.el-button--danger{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-danger);--el-button-border-color:var(--el-color-danger);--el-button-outline-color:var(--el-color-danger-light-5);--el-button-active-color:var(--el-color-danger-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-danger-light-5);--el-button-hover-bg-color:var(--el-color-danger-light-3);--el-button-hover-border-color:var(--el-color-danger-light-3);--el-button-active-bg-color:var(--el-color-danger-dark-2);--el-button-active-border-color:var(--el-color-danger-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-danger-light-5);--el-button-disabled-border-color:var(--el-color-danger-light-5)}.el-button--danger.is-link,.el-button--danger.is-plain,.el-button--danger.is-text{--el-button-text-color:var(--el-color-danger);--el-button-bg-color:var(--el-color-danger-light-9);--el-button-border-color:var(--el-color-danger-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-danger);--el-button-hover-border-color:var(--el-color-danger);--el-button-active-text-color:var(--el-color-white)}.el-button--danger.is-link.is-disabled,.el-button--danger.is-link.is-disabled:active,.el-button--danger.is-link.is-disabled:focus,.el-button--danger.is-link.is-disabled:hover,.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover,.el-button--danger.is-text.is-disabled,.el-button--danger.is-text.is-disabled:active,.el-button--danger.is-text.is-disabled:focus,.el-button--danger.is-text.is-disabled:hover{background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8);color:var(--el-color-danger-light-5)}.el-button--info{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-info);--el-button-border-color:var(--el-color-info);--el-button-outline-color:var(--el-color-info-light-5);--el-button-active-color:var(--el-color-info-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-info-light-5);--el-button-hover-bg-color:var(--el-color-info-light-3);--el-button-hover-border-color:var(--el-color-info-light-3);--el-button-active-bg-color:var(--el-color-info-dark-2);--el-button-active-border-color:var(--el-color-info-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-info-light-5);--el-button-disabled-border-color:var(--el-color-info-light-5)}.el-button--info.is-link,.el-button--info.is-plain,.el-button--info.is-text{--el-button-text-color:var(--el-color-info);--el-button-bg-color:var(--el-color-info-light-9);--el-button-border-color:var(--el-color-info-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-info);--el-button-hover-border-color:var(--el-color-info);--el-button-active-text-color:var(--el-color-white)}.el-button--info.is-link.is-disabled,.el-button--info.is-link.is-disabled:active,.el-button--info.is-link.is-disabled:focus,.el-button--info.is-link.is-disabled:hover,.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover,.el-button--info.is-text.is-disabled,.el-button--info.is-text.is-disabled:active,.el-button--info.is-text.is-disabled:focus,.el-button--info.is-text.is-disabled:hover{background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8);color:var(--el-color-info-light-5)}.el-button--large{--el-button-size:40px;height:var(--el-button-size)}.el-button--large [class*=el-icon]+span{margin-left:8px}.el-button--large{border-radius:var(--el-border-radius-base);font-size:var(--el-font-size-base);padding:12px 19px}.el-button--large.is-round{padding:12px 19px}.el-button--large.is-circle{padding:12px;width:var(--el-button-size)}.el-button--small{--el-button-size:24px;height:var(--el-button-size)}.el-button--small [class*=el-icon]+span{margin-left:4px}.el-button--small{border-radius:calc(var(--el-border-radius-base) - 1px);font-size:12px;padding:5px 11px}.el-button--small.is-round{padding:5px 11px}.el-button--small.is-circle{padding:5px;width:var(--el-button-size)}.el-calendar{--el-calendar-border:var(--el-table-border,1px solid var(--el-border-color-lighter));--el-calendar-header-border-bottom:var(--el-calendar-border);--el-calendar-selected-bg-color:var(--el-color-primary-light-9);--el-calendar-cell-width:85px;background-color:var(--el-fill-color-blank)}.el-calendar__header{border-bottom:var(--el-calendar-header-border-bottom);display:flex;justify-content:space-between;padding:12px 20px}.el-calendar__title{align-self:center;color:var(--el-text-color)}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{color:var(--el-text-color-regular);font-weight:400;padding:12px 0}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:var(--el-text-color-placeholder)}.el-calendar-table td{border-bottom:var(--el-calendar-border);border-right:var(--el-calendar-border);transition:background-color var(--el-transition-duration-fast) ease;vertical-align:top}.el-calendar-table td.is-selected{background-color:var(--el-calendar-selected-bg-color)}.el-calendar-table td.is-today{color:var(--el-color-primary)}.el-calendar-table tr:first-child td{border-top:var(--el-calendar-border)}.el-calendar-table tr td:first-child{border-left:var(--el-calendar-border)}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{box-sizing:border-box;height:var(--el-calendar-cell-width);padding:8px}.el-calendar-table .el-calendar-day:hover{background-color:var(--el-calendar-selected-bg-color);cursor:pointer}.el-card{--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-padding:20px;--el-card-bg-color:var(--el-fill-color-blank);background-color:var(--el-card-bg-color);border:1px solid var(--el-card-border-color);border-radius:var(--el-card-border-radius);color:var(--el-text-color-primary);overflow:hidden;transition:var(--el-transition-duration)}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{box-shadow:var(--el-box-shadow-light)}.el-card__header{border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box;padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding)}.el-card__body{padding:var(--el-card-padding)}.el-card__footer{border-top:1px solid var(--el-card-border-color);box-sizing:border-box;padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding)}.el-carousel__item{display:inline-block;height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%}.el-carousel__item,.el-carousel__item.is-active{z-index:calc(var(--el-index-normal) - 1)}.el-carousel__item--card,.el-carousel__item.is-animating{transition:transform .4s ease-in-out}.el-carousel__item--card{width:50%}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:var(--el-index-normal)}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:calc(var(--el-index-normal) + 1)}.el-carousel__item--card-vertical{height:50%;width:100%}.el-carousel__mask{background-color:var(--el-color-white);height:100%;left:0;opacity:.24;position:absolute;top:0;transition:var(--el-transition-duration-fast);width:100%}.el-carousel{--el-carousel-arrow-font-size:12px;--el-carousel-arrow-size:36px;--el-carousel-arrow-background:rgba(31,45,61,.11);--el-carousel-arrow-hover-background:rgba(31,45,61,.23);--el-carousel-indicator-width:30px;--el-carousel-indicator-height:2px;--el-carousel-indicator-padding-horizontal:4px;--el-carousel-indicator-padding-vertical:12px;--el-carousel-indicator-out-color:var(--el-border-color-hover);position:relative}.el-carousel--horizontal,.el-carousel--vertical{overflow:hidden}.el-carousel__container{height:300px;position:relative}.el-carousel__arrow{align-items:center;background-color:var(--el-carousel-arrow-background);border:none;border-radius:50%;color:#fff;cursor:pointer;display:inline-flex;font-size:var(--el-carousel-arrow-font-size);height:var(--el-carousel-arrow-size);justify-content:center;margin:0;outline:none;padding:0;position:absolute;text-align:center;top:50%;transform:translateY(-50%);transition:var(--el-transition-duration);width:var(--el-carousel-arrow-size);z-index:10}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:var(--el-carousel-arrow-hover-background)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{list-style:none;margin:0;padding:0;position:absolute;z-index:calc(var(--el-index-normal) + 1)}.el-carousel__indicators--horizontal{bottom:0;left:50%;transform:translate(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:calc(var(--el-carousel-indicator-height) + var(--el-carousel-indicator-padding-vertical)*2);position:static;text-align:center;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:var(--el-carousel-indicator-out-color);opacity:.24}.el-carousel__indicators--right{right:0}.el-carousel__indicators--labels{left:0;right:0;text-align:center;transform:none}.el-carousel__indicators--labels .el-carousel__button{color:#000;font-size:12px;height:auto;padding:2px 18px;width:auto}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:var(--el-carousel-indicator-padding-vertical) var(--el-carousel-indicator-padding-horizontal)}.el-carousel__indicator--vertical{padding:var(--el-carousel-indicator-padding-horizontal) var(--el-carousel-indicator-padding-vertical)}.el-carousel__indicator--vertical .el-carousel__button{height:calc(var(--el-carousel-indicator-width)/2);width:var(--el-carousel-indicator-height)}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{background-color:#fff;border:none;cursor:pointer;display:block;height:var(--el-carousel-indicator-height);margin:0;opacity:.48;outline:none;padding:0;transition:var(--el-transition-duration);width:var(--el-carousel-indicator-width)}.carousel-arrow-left-enter-from,.carousel-arrow-left-leave-active{opacity:0;transform:translateY(-50%) translate(-10px)}.carousel-arrow-right-enter-from,.carousel-arrow-right-leave-active{opacity:0;transform:translateY(-50%) translate(10px)}.el-transitioning{filter:url(#elCarouselHorizontal)}.el-transitioning-vertical{filter:url(#elCarouselVertical)}.el-cascader-panel{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);border-radius:var(--el-cascader-menu-radius);display:flex;font-size:var(--el-cascader-menu-font-size)}.el-cascader-panel.is-bordered{border:var(--el-cascader-menu-border);border-radius:var(--el-cascader-menu-radius)}.el-cascader-menu{border-right:var(--el-cascader-menu-border);box-sizing:border-box;color:var(--el-cascader-menu-text-color);min-width:180px}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap.el-scrollbar__wrap{height:204px}.el-cascader-menu__list{box-sizing:border-box;list-style:none;margin:0;min-height:100%;padding:6px 0;position:relative}.el-cascader-menu__hover-zone{height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%}.el-cascader-menu__empty-text{align-items:center;color:var(--el-cascader-color-empty);display:flex;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.el-cascader-menu__empty-text .is-loading{margin-right:2px}.el-cascader-node{align-items:center;display:flex;height:34px;line-height:34px;outline:none;padding:0 30px 0 20px;position:relative}.el-cascader-node.is-selectable.in-active-path{color:var(--el-cascader-menu-text-color)}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:var(--el-cascader-menu-selected-text-color);font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:var(--el-cascader-node-background-hover)}.el-cascader-node.is-disabled{color:var(--el-cascader-node-color-disabled);cursor:not-allowed}.el-cascader-node__prefix{left:10px;position:absolute}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{flex:1;overflow:hidden;padding:0 8px;text-align:left;text-overflow:ellipsis;white-space:nowrap}.el-cascader-node>.el-checkbox,.el-cascader-node>.el-radio{margin-right:0}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-cascader{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);display:inline-block;font-size:var(--el-font-size-base);line-height:32px;outline:none;position:relative;vertical-align:middle}.el-cascader:not(.is-disabled):hover .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset;cursor:pointer}.el-cascader .el-input{cursor:pointer;display:flex}.el-cascader .el-input .el-input__inner{cursor:pointer;text-overflow:ellipsis}.el-cascader .el-input .el-input__suffix-inner .el-icon{height:calc(100% - 2px)}.el-cascader .el-input .el-input__suffix-inner .el-icon svg{vertical-align:middle}.el-cascader .el-input .icon-arrow-down{font-size:14px;transition:transform var(--el-transition-duration)}.el-cascader .el-input .icon-arrow-down.is-reverse{transform:rotate(180deg)}.el-cascader .el-input .icon-circle-close:hover{color:var(--el-input-clear-hover-color,var(--el-text-color-secondary))}.el-cascader .el-input.is-focus .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-cascader--large{font-size:14px;line-height:40px}.el-cascader--small{font-size:12px;line-height:24px}.el-cascader.is-disabled .el-cascader__label{color:var(--el-disabled-text-color);z-index:calc(var(--el-index-normal) + 1)}.el-cascader__dropdown{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);border-radius:var(--el-cascader-menu-radius);font-size:var(--el-cascader-menu-font-size)}.el-cascader__dropdown.el-popper{background:var(--el-cascader-menu-fill)}.el-cascader__dropdown.el-popper,.el-cascader__dropdown.el-popper .el-popper__arrow:before{border:var(--el-cascader-menu-border)}.el-cascader__dropdown.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-cascader__dropdown.el-popper{box-shadow:var(--el-cascader-menu-shadow)}.el-cascader__tags{box-sizing:border-box;display:flex;flex-wrap:wrap;left:0;line-height:normal;position:absolute;right:30px;text-align:left;top:50%;transform:translateY(-50%)}.el-cascader__tags .el-tag{align-items:center;background:var(--el-cascader-tag-background);display:inline-flex;margin:2px 0 2px 6px;max-width:100%;text-overflow:ellipsis}.el-cascader__tags .el-tag.el-tag--dark,.el-cascader__tags .el-tag.el-tag--plain{background-color:var(--el-tag-bg-color)}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag:not(.is-hit).el-tag--dark,.el-cascader__tags .el-tag:not(.is-hit).el-tag--plain{border-color:var(--el-tag-border-color)}.el-cascader__tags .el-tag>span{flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);color:var(--el-color-white);flex:none}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-cascader__tags.is-validate{right:55px}.el-cascader__collapse-tags{white-space:normal;z-index:var(--el-index-normal)}.el-cascader__collapse-tags .el-tag{align-items:center;background:var(--el-fill-color);display:inline-flex;margin:2px 0 2px 6px;max-width:100%;text-overflow:ellipsis}.el-cascader__collapse-tags .el-tag.el-tag--dark,.el-cascader__collapse-tags .el-tag.el-tag--plain{background-color:var(--el-tag-bg-color)}.el-cascader__collapse-tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__collapse-tags .el-tag:not(.is-hit).el-tag--dark,.el-cascader__collapse-tags .el-tag:not(.is-hit).el-tag--plain{border-color:var(--el-tag-border-color)}.el-cascader__collapse-tags .el-tag>span{flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__collapse-tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);color:var(--el-color-white);flex:none}.el-cascader__collapse-tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-cascader__suggestion-panel{border-radius:var(--el-cascader-menu-radius)}.el-cascader__suggestion-list{color:var(--el-cascader-menu-text-color);font-size:var(--el-font-size-base);margin:0;max-height:204px;padding:6px 0;text-align:center}.el-cascader__suggestion-item{align-items:center;cursor:pointer;display:flex;height:34px;justify-content:space-between;outline:none;padding:0 15px;text-align:left}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:var(--el-cascader-node-background-hover)}.el-cascader__suggestion-item.is-checked{color:var(--el-cascader-menu-selected-text-color);font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{color:var(--el-cascader-color-empty);margin:10px 0}.el-cascader__search-input{background:transparent;border:none;box-sizing:border-box;color:var(--el-cascader-menu-text-color);flex:1;height:24px;margin:2px 0 2px 11px;min-width:60px;outline:none;padding:0}.el-cascader__search-input::-moz-placeholder{color:transparent}.el-cascader__search-input::placeholder{color:transparent}.el-check-tag{background-color:var(--el-color-info-light-9);border-radius:var(--el-border-radius-base);color:var(--el-color-info);cursor:pointer;display:inline-block;font-size:var(--el-font-size-base);font-weight:700;line-height:var(--el-font-size-base);padding:7px 15px;transition:var(--el-transition-all)}.el-check-tag:hover{background-color:var(--el-color-info-light-7)}.el-check-tag.is-checked.el-check-tag--primary{background-color:var(--el-color-primary-light-8);color:var(--el-color-primary)}.el-check-tag.is-checked.el-check-tag--primary:hover{background-color:var(--el-color-primary-light-7)}.el-check-tag.is-checked.el-check-tag--success{background-color:var(--el-color-success-light-8);color:var(--el-color-success)}.el-check-tag.is-checked.el-check-tag--success:hover{background-color:var(--el-color-success-light-7)}.el-check-tag.is-checked.el-check-tag--warning{background-color:var(--el-color-warning-light-8);color:var(--el-color-warning)}.el-check-tag.is-checked.el-check-tag--warning:hover{background-color:var(--el-color-warning-light-7)}.el-check-tag.is-checked.el-check-tag--danger{background-color:var(--el-color-danger-light-8);color:var(--el-color-danger)}.el-check-tag.is-checked.el-check-tag--danger:hover{background-color:var(--el-color-danger-light-7)}.el-check-tag.is-checked.el-check-tag--error{background-color:var(--el-color-error-light-8);color:var(--el-color-error)}.el-check-tag.is-checked.el-check-tag--error:hover{background-color:var(--el-color-error-light-7)}.el-check-tag.is-checked.el-check-tag--info{background-color:var(--el-color-info-light-8);color:var(--el-color-info)}.el-check-tag.is-checked.el-check-tag--info:hover{background-color:var(--el-color-info-light-7)}.el-checkbox-button{--el-checkbox-button-checked-bg-color:var(--el-color-primary);--el-checkbox-button-checked-text-color:var(--el-color-white);--el-checkbox-button-checked-border-color:var(--el-color-primary);display:inline-block;position:relative}.el-checkbox-button__inner{-webkit-appearance:none;background:var(--el-button-bg-color,var(--el-fill-color-blank));border:var(--el-border);border-left-color:transparent;border-radius:0;box-sizing:border-box;color:var(--el-button-text-color,var(--el-text-color-regular));cursor:pointer;display:inline-block;font-size:var(--el-font-size-base);font-weight:var(--el-checkbox-font-weight);line-height:1;margin:0;outline:none;padding:8px 15px;position:relative;text-align:center;transition:var(--el-transition-all);-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-checkbox-button__inner.is-round{padding:8px 15px}.el-checkbox-button__inner:hover{color:var(--el-color-primary)}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{margin:0;opacity:0;outline:none;position:absolute;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{background-color:var(--el-checkbox-button-checked-bg-color);border-color:var(--el-checkbox-button-checked-border-color);box-shadow:-1px 0 0 0 var(--el-color-primary-light-7);color:var(--el-checkbox-button-checked-text-color)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button.is-disabled .el-checkbox-button__inner{background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));background-image:none;border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none;color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:var(--el-button-disabled-border-color,var(--el-border-color-light))}.el-checkbox-button:first-child .el-checkbox-button__inner{border-bottom-left-radius:var(--el-border-radius-base);border-left:var(--el-border);border-top-left-radius:var(--el-border-radius-base);box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button:last-child .el-checkbox-button__inner{border-bottom-right-radius:var(--el-border-radius-base);border-top-right-radius:var(--el-border-radius-base)}.el-checkbox-button--large .el-checkbox-button__inner{border-radius:0;font-size:var(--el-font-size-base);padding:12px 19px}.el-checkbox-button--large .el-checkbox-button__inner.is-round{padding:12px 19px}.el-checkbox-button--small .el-checkbox-button__inner{border-radius:0;font-size:12px;padding:5px 11px}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:5px 11px}.el-checkbox-group{font-size:0;line-height:0}.el-checkbox{--el-checkbox-font-size:14px;--el-checkbox-font-weight:var(--el-font-weight-primary);--el-checkbox-text-color:var(--el-text-color-regular);--el-checkbox-input-height:14px;--el-checkbox-input-width:14px;--el-checkbox-border-radius:var(--el-border-radius-small);--el-checkbox-bg-color:var(--el-fill-color-blank);--el-checkbox-input-border:var(--el-border);--el-checkbox-disabled-border-color:var(--el-border-color);--el-checkbox-disabled-input-fill:var(--el-fill-color-light);--el-checkbox-disabled-icon-color:var(--el-text-color-placeholder);--el-checkbox-disabled-checked-input-fill:var(--el-border-color-extra-light);--el-checkbox-disabled-checked-input-border-color:var(--el-border-color);--el-checkbox-disabled-checked-icon-color:var(--el-text-color-placeholder);--el-checkbox-checked-text-color:var(--el-color-primary);--el-checkbox-checked-input-border-color:var(--el-color-primary);--el-checkbox-checked-bg-color:var(--el-color-primary);--el-checkbox-checked-icon-color:var(--el-color-white);--el-checkbox-input-border-color-hover:var(--el-color-primary);align-items:center;color:var(--el-checkbox-text-color);cursor:pointer;display:inline-flex;font-size:var(--el-font-size-base);font-weight:var(--el-checkbox-font-weight);height:var(--el-checkbox-height,32px);margin-right:30px;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.el-checkbox.is-disabled{cursor:not-allowed}.el-checkbox.is-bordered{border:var(--el-border);border-radius:var(--el-border-radius-base);box-sizing:border-box;padding:0 15px 0 9px}.el-checkbox.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-checkbox.is-bordered.is-disabled{border-color:var(--el-border-color-lighter)}.el-checkbox.is-bordered.el-checkbox--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__label{font-size:var(--el-font-size-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{border-radius:calc(var(--el-border-radius-base) - 1px);padding:0 11px 0 7px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox input:focus-visible+.el-checkbox__inner{border-radius:var(--el-checkbox-border-radius);outline:2px solid var(--el-checkbox-input-border-color-hover);outline-offset:1px}.el-checkbox__input{cursor:pointer;display:inline-flex;outline:none;position:relative;white-space:nowrap}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:var(--el-checkbox-disabled-input-fill);border-color:var(--el-checkbox-disabled-border-color);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-icon-color);cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-disabled-checked-icon-color);border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-checked-icon-color);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:var(--el-checkbox-checked-text-color)}.el-checkbox__input.is-focus:not(.is-checked) .el-checkbox__original:not(:focus-visible){border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-checked-icon-color);content:"";display:block;height:2px;left:0;position:absolute;right:0;top:5px;transform:scale(.5)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{background-color:var(--el-checkbox-bg-color);border:var(--el-checkbox-input-border);border-radius:var(--el-checkbox-border-radius);box-sizing:border-box;display:inline-block;height:var(--el-checkbox-input-height);position:relative;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46),outline .25s cubic-bezier(.71,-.46,.29,1.46);width:var(--el-checkbox-input-width);z-index:var(--el-index-normal)}.el-checkbox__inner:hover{border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__inner:after{border:1px solid transparent;border-left:0;border-top:0;box-sizing:content-box;content:"";height:7px;left:4px;position:absolute;top:1px;transform:rotate(45deg) scaleY(0);transform-origin:center;transition:transform .15s ease-in .05s;width:3px}.el-checkbox__original{height:0;margin:0;opacity:0;outline:none;position:absolute;width:0;z-index:-1}.el-checkbox__label{display:inline-block;font-size:var(--el-checkbox-font-size);line-height:1;padding-left:8px}.el-checkbox.el-checkbox--large{height:40px}.el-checkbox.el-checkbox--large .el-checkbox__label{font-size:14px}.el-checkbox.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.el-checkbox--small{height:24px}.el-checkbox.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.el-checkbox--small .el-checkbox__input.is-indeterminate .el-checkbox__inner:before{top:4px}.el-checkbox.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox:last-of-type{margin-right:0}[class*=el-col-]{box-sizing:border-box}[class*=el-col-].is-guttered{display:block;min-height:1px}.el-col-0{flex:0 0 0%;max-width:0}.el-col-0,.el-col-0.is-guttered{display:none}.el-col-offset-0{margin-left:0}.el-col-pull-0{position:relative;right:0}.el-col-push-0{left:0;position:relative}.el-col-1{flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-1,.el-col-1.is-guttered{display:block}.el-col-offset-1{margin-left:4.1666666667%}.el-col-pull-1{position:relative;right:4.1666666667%}.el-col-push-1{left:4.1666666667%;position:relative}.el-col-2{flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-2,.el-col-2.is-guttered{display:block}.el-col-offset-2{margin-left:8.3333333333%}.el-col-pull-2{position:relative;right:8.3333333333%}.el-col-push-2{left:8.3333333333%;position:relative}.el-col-3{flex:0 0 12.5%;max-width:12.5%}.el-col-3,.el-col-3.is-guttered{display:block}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{position:relative;right:12.5%}.el-col-push-3{left:12.5%;position:relative}.el-col-4{flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-4,.el-col-4.is-guttered{display:block}.el-col-offset-4{margin-left:16.6666666667%}.el-col-pull-4{position:relative;right:16.6666666667%}.el-col-push-4{left:16.6666666667%;position:relative}.el-col-5{flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-5,.el-col-5.is-guttered{display:block}.el-col-offset-5{margin-left:20.8333333333%}.el-col-pull-5{position:relative;right:20.8333333333%}.el-col-push-5{left:20.8333333333%;position:relative}.el-col-6{flex:0 0 25%;max-width:25%}.el-col-6,.el-col-6.is-guttered{display:block}.el-col-offset-6{margin-left:25%}.el-col-pull-6{position:relative;right:25%}.el-col-push-6{left:25%;position:relative}.el-col-7{flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-7,.el-col-7.is-guttered{display:block}.el-col-offset-7{margin-left:29.1666666667%}.el-col-pull-7{position:relative;right:29.1666666667%}.el-col-push-7{left:29.1666666667%;position:relative}.el-col-8{flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-8,.el-col-8.is-guttered{display:block}.el-col-offset-8{margin-left:33.3333333333%}.el-col-pull-8{position:relative;right:33.3333333333%}.el-col-push-8{left:33.3333333333%;position:relative}.el-col-9{flex:0 0 37.5%;max-width:37.5%}.el-col-9,.el-col-9.is-guttered{display:block}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{position:relative;right:37.5%}.el-col-push-9{left:37.5%;position:relative}.el-col-10{flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-10,.el-col-10.is-guttered{display:block}.el-col-offset-10{margin-left:41.6666666667%}.el-col-pull-10{position:relative;right:41.6666666667%}.el-col-push-10{left:41.6666666667%;position:relative}.el-col-11{flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-11,.el-col-11.is-guttered{display:block}.el-col-offset-11{margin-left:45.8333333333%}.el-col-pull-11{position:relative;right:45.8333333333%}.el-col-push-11{left:45.8333333333%;position:relative}.el-col-12{flex:0 0 50%;max-width:50%}.el-col-12,.el-col-12.is-guttered{display:block}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{left:50%;position:relative}.el-col-13{flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-13,.el-col-13.is-guttered{display:block}.el-col-offset-13{margin-left:54.1666666667%}.el-col-pull-13{position:relative;right:54.1666666667%}.el-col-push-13{left:54.1666666667%;position:relative}.el-col-14{flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-14,.el-col-14.is-guttered{display:block}.el-col-offset-14{margin-left:58.3333333333%}.el-col-pull-14{position:relative;right:58.3333333333%}.el-col-push-14{left:58.3333333333%;position:relative}.el-col-15{flex:0 0 62.5%;max-width:62.5%}.el-col-15,.el-col-15.is-guttered{display:block}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{position:relative;right:62.5%}.el-col-push-15{left:62.5%;position:relative}.el-col-16{flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-16,.el-col-16.is-guttered{display:block}.el-col-offset-16{margin-left:66.6666666667%}.el-col-pull-16{position:relative;right:66.6666666667%}.el-col-push-16{left:66.6666666667%;position:relative}.el-col-17{flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-17,.el-col-17.is-guttered{display:block}.el-col-offset-17{margin-left:70.8333333333%}.el-col-pull-17{position:relative;right:70.8333333333%}.el-col-push-17{left:70.8333333333%;position:relative}.el-col-18{flex:0 0 75%;max-width:75%}.el-col-18,.el-col-18.is-guttered{display:block}.el-col-offset-18{margin-left:75%}.el-col-pull-18{position:relative;right:75%}.el-col-push-18{left:75%;position:relative}.el-col-19{flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-19,.el-col-19.is-guttered{display:block}.el-col-offset-19{margin-left:79.1666666667%}.el-col-pull-19{position:relative;right:79.1666666667%}.el-col-push-19{left:79.1666666667%;position:relative}.el-col-20{flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-20,.el-col-20.is-guttered{display:block}.el-col-offset-20{margin-left:83.3333333333%}.el-col-pull-20{position:relative;right:83.3333333333%}.el-col-push-20{left:83.3333333333%;position:relative}.el-col-21{flex:0 0 87.5%;max-width:87.5%}.el-col-21,.el-col-21.is-guttered{display:block}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{position:relative;right:87.5%}.el-col-push-21{left:87.5%;position:relative}.el-col-22{flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-22,.el-col-22.is-guttered{display:block}.el-col-offset-22{margin-left:91.6666666667%}.el-col-pull-22{position:relative;right:91.6666666667%}.el-col-push-22{left:91.6666666667%;position:relative}.el-col-23{flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-23,.el-col-23.is-guttered{display:block}.el-col-offset-23{margin-left:95.8333333333%}.el-col-pull-23{position:relative;right:95.8333333333%}.el-col-push-23{left:95.8333333333%;position:relative}.el-col-24{flex:0 0 100%;max-width:100%}.el-col-24,.el-col-24.is-guttered{display:block}.el-col-offset-24{margin-left:100%}.el-col-pull-24{position:relative;right:100%}.el-col-push-24{left:100%;position:relative}@media only screen and (max-width:767px){.el-col-xs-0{display:none;flex:0 0 0%;max-width:0}.el-col-xs-0.is-guttered{display:none}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{left:0;position:relative}.el-col-xs-1{flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-xs-1,.el-col-xs-1.is-guttered{display:block}.el-col-xs-offset-1{margin-left:4.1666666667%}.el-col-xs-pull-1{position:relative;right:4.1666666667%}.el-col-xs-push-1{left:4.1666666667%;position:relative}.el-col-xs-2{flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-xs-2,.el-col-xs-2.is-guttered{display:block}.el-col-xs-offset-2{margin-left:8.3333333333%}.el-col-xs-pull-2{position:relative;right:8.3333333333%}.el-col-xs-push-2{left:8.3333333333%;position:relative}.el-col-xs-3{flex:0 0 12.5%;max-width:12.5%}.el-col-xs-3,.el-col-xs-3.is-guttered{display:block}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{left:12.5%;position:relative}.el-col-xs-4{flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-xs-4,.el-col-xs-4.is-guttered{display:block}.el-col-xs-offset-4{margin-left:16.6666666667%}.el-col-xs-pull-4{position:relative;right:16.6666666667%}.el-col-xs-push-4{left:16.6666666667%;position:relative}.el-col-xs-5{flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-xs-5,.el-col-xs-5.is-guttered{display:block}.el-col-xs-offset-5{margin-left:20.8333333333%}.el-col-xs-pull-5{position:relative;right:20.8333333333%}.el-col-xs-push-5{left:20.8333333333%;position:relative}.el-col-xs-6{flex:0 0 25%;max-width:25%}.el-col-xs-6,.el-col-xs-6.is-guttered{display:block}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{left:25%;position:relative}.el-col-xs-7{flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-xs-7,.el-col-xs-7.is-guttered{display:block}.el-col-xs-offset-7{margin-left:29.1666666667%}.el-col-xs-pull-7{position:relative;right:29.1666666667%}.el-col-xs-push-7{left:29.1666666667%;position:relative}.el-col-xs-8{flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-xs-8,.el-col-xs-8.is-guttered{display:block}.el-col-xs-offset-8{margin-left:33.3333333333%}.el-col-xs-pull-8{position:relative;right:33.3333333333%}.el-col-xs-push-8{left:33.3333333333%;position:relative}.el-col-xs-9{flex:0 0 37.5%;max-width:37.5%}.el-col-xs-9,.el-col-xs-9.is-guttered{display:block}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{left:37.5%;position:relative}.el-col-xs-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-xs-10.is-guttered{display:block}.el-col-xs-offset-10{margin-left:41.6666666667%}.el-col-xs-pull-10{position:relative;right:41.6666666667%}.el-col-xs-push-10{left:41.6666666667%;position:relative}.el-col-xs-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-xs-11.is-guttered{display:block}.el-col-xs-offset-11{margin-left:45.8333333333%}.el-col-xs-pull-11{position:relative;right:45.8333333333%}.el-col-xs-push-11{left:45.8333333333%;position:relative}.el-col-xs-12{display:block;flex:0 0 50%;max-width:50%}.el-col-xs-12.is-guttered{display:block}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{left:50%;position:relative}.el-col-xs-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-xs-13.is-guttered{display:block}.el-col-xs-offset-13{margin-left:54.1666666667%}.el-col-xs-pull-13{position:relative;right:54.1666666667%}.el-col-xs-push-13{left:54.1666666667%;position:relative}.el-col-xs-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-xs-14.is-guttered{display:block}.el-col-xs-offset-14{margin-left:58.3333333333%}.el-col-xs-pull-14{position:relative;right:58.3333333333%}.el-col-xs-push-14{left:58.3333333333%;position:relative}.el-col-xs-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-xs-15.is-guttered{display:block}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{left:62.5%;position:relative}.el-col-xs-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-xs-16.is-guttered{display:block}.el-col-xs-offset-16{margin-left:66.6666666667%}.el-col-xs-pull-16{position:relative;right:66.6666666667%}.el-col-xs-push-16{left:66.6666666667%;position:relative}.el-col-xs-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-xs-17.is-guttered{display:block}.el-col-xs-offset-17{margin-left:70.8333333333%}.el-col-xs-pull-17{position:relative;right:70.8333333333%}.el-col-xs-push-17{left:70.8333333333%;position:relative}.el-col-xs-18{display:block;flex:0 0 75%;max-width:75%}.el-col-xs-18.is-guttered{display:block}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{left:75%;position:relative}.el-col-xs-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-xs-19.is-guttered{display:block}.el-col-xs-offset-19{margin-left:79.1666666667%}.el-col-xs-pull-19{position:relative;right:79.1666666667%}.el-col-xs-push-19{left:79.1666666667%;position:relative}.el-col-xs-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-xs-20.is-guttered{display:block}.el-col-xs-offset-20{margin-left:83.3333333333%}.el-col-xs-pull-20{position:relative;right:83.3333333333%}.el-col-xs-push-20{left:83.3333333333%;position:relative}.el-col-xs-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-xs-21.is-guttered{display:block}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{left:87.5%;position:relative}.el-col-xs-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-xs-22.is-guttered{display:block}.el-col-xs-offset-22{margin-left:91.6666666667%}.el-col-xs-pull-22{position:relative;right:91.6666666667%}.el-col-xs-push-22{left:91.6666666667%;position:relative}.el-col-xs-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-xs-23.is-guttered{display:block}.el-col-xs-offset-23{margin-left:95.8333333333%}.el-col-xs-pull-23{position:relative;right:95.8333333333%}.el-col-xs-push-23{left:95.8333333333%;position:relative}.el-col-xs-24{display:block;flex:0 0 100%;max-width:100%}.el-col-xs-24.is-guttered{display:block}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{left:100%;position:relative}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;flex:0 0 0%;max-width:0}.el-col-sm-0.is-guttered{display:none}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{left:0;position:relative}.el-col-sm-1{flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-sm-1,.el-col-sm-1.is-guttered{display:block}.el-col-sm-offset-1{margin-left:4.1666666667%}.el-col-sm-pull-1{position:relative;right:4.1666666667%}.el-col-sm-push-1{left:4.1666666667%;position:relative}.el-col-sm-2{flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-sm-2,.el-col-sm-2.is-guttered{display:block}.el-col-sm-offset-2{margin-left:8.3333333333%}.el-col-sm-pull-2{position:relative;right:8.3333333333%}.el-col-sm-push-2{left:8.3333333333%;position:relative}.el-col-sm-3{flex:0 0 12.5%;max-width:12.5%}.el-col-sm-3,.el-col-sm-3.is-guttered{display:block}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{left:12.5%;position:relative}.el-col-sm-4{flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-sm-4,.el-col-sm-4.is-guttered{display:block}.el-col-sm-offset-4{margin-left:16.6666666667%}.el-col-sm-pull-4{position:relative;right:16.6666666667%}.el-col-sm-push-4{left:16.6666666667%;position:relative}.el-col-sm-5{flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-sm-5,.el-col-sm-5.is-guttered{display:block}.el-col-sm-offset-5{margin-left:20.8333333333%}.el-col-sm-pull-5{position:relative;right:20.8333333333%}.el-col-sm-push-5{left:20.8333333333%;position:relative}.el-col-sm-6{flex:0 0 25%;max-width:25%}.el-col-sm-6,.el-col-sm-6.is-guttered{display:block}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{left:25%;position:relative}.el-col-sm-7{flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-sm-7,.el-col-sm-7.is-guttered{display:block}.el-col-sm-offset-7{margin-left:29.1666666667%}.el-col-sm-pull-7{position:relative;right:29.1666666667%}.el-col-sm-push-7{left:29.1666666667%;position:relative}.el-col-sm-8{flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-sm-8,.el-col-sm-8.is-guttered{display:block}.el-col-sm-offset-8{margin-left:33.3333333333%}.el-col-sm-pull-8{position:relative;right:33.3333333333%}.el-col-sm-push-8{left:33.3333333333%;position:relative}.el-col-sm-9{flex:0 0 37.5%;max-width:37.5%}.el-col-sm-9,.el-col-sm-9.is-guttered{display:block}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{left:37.5%;position:relative}.el-col-sm-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-sm-10.is-guttered{display:block}.el-col-sm-offset-10{margin-left:41.6666666667%}.el-col-sm-pull-10{position:relative;right:41.6666666667%}.el-col-sm-push-10{left:41.6666666667%;position:relative}.el-col-sm-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-sm-11.is-guttered{display:block}.el-col-sm-offset-11{margin-left:45.8333333333%}.el-col-sm-pull-11{position:relative;right:45.8333333333%}.el-col-sm-push-11{left:45.8333333333%;position:relative}.el-col-sm-12{display:block;flex:0 0 50%;max-width:50%}.el-col-sm-12.is-guttered{display:block}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{left:50%;position:relative}.el-col-sm-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-sm-13.is-guttered{display:block}.el-col-sm-offset-13{margin-left:54.1666666667%}.el-col-sm-pull-13{position:relative;right:54.1666666667%}.el-col-sm-push-13{left:54.1666666667%;position:relative}.el-col-sm-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-sm-14.is-guttered{display:block}.el-col-sm-offset-14{margin-left:58.3333333333%}.el-col-sm-pull-14{position:relative;right:58.3333333333%}.el-col-sm-push-14{left:58.3333333333%;position:relative}.el-col-sm-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-sm-15.is-guttered{display:block}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{left:62.5%;position:relative}.el-col-sm-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-sm-16.is-guttered{display:block}.el-col-sm-offset-16{margin-left:66.6666666667%}.el-col-sm-pull-16{position:relative;right:66.6666666667%}.el-col-sm-push-16{left:66.6666666667%;position:relative}.el-col-sm-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-sm-17.is-guttered{display:block}.el-col-sm-offset-17{margin-left:70.8333333333%}.el-col-sm-pull-17{position:relative;right:70.8333333333%}.el-col-sm-push-17{left:70.8333333333%;position:relative}.el-col-sm-18{display:block;flex:0 0 75%;max-width:75%}.el-col-sm-18.is-guttered{display:block}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{left:75%;position:relative}.el-col-sm-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-sm-19.is-guttered{display:block}.el-col-sm-offset-19{margin-left:79.1666666667%}.el-col-sm-pull-19{position:relative;right:79.1666666667%}.el-col-sm-push-19{left:79.1666666667%;position:relative}.el-col-sm-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-sm-20.is-guttered{display:block}.el-col-sm-offset-20{margin-left:83.3333333333%}.el-col-sm-pull-20{position:relative;right:83.3333333333%}.el-col-sm-push-20{left:83.3333333333%;position:relative}.el-col-sm-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-sm-21.is-guttered{display:block}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{left:87.5%;position:relative}.el-col-sm-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-sm-22.is-guttered{display:block}.el-col-sm-offset-22{margin-left:91.6666666667%}.el-col-sm-pull-22{position:relative;right:91.6666666667%}.el-col-sm-push-22{left:91.6666666667%;position:relative}.el-col-sm-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-sm-23.is-guttered{display:block}.el-col-sm-offset-23{margin-left:95.8333333333%}.el-col-sm-pull-23{position:relative;right:95.8333333333%}.el-col-sm-push-23{left:95.8333333333%;position:relative}.el-col-sm-24{display:block;flex:0 0 100%;max-width:100%}.el-col-sm-24.is-guttered{display:block}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{left:100%;position:relative}}@media only screen and (min-width:992px){.el-col-md-0{display:none;flex:0 0 0%;max-width:0}.el-col-md-0.is-guttered{display:none}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{left:0;position:relative}.el-col-md-1{flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-md-1,.el-col-md-1.is-guttered{display:block}.el-col-md-offset-1{margin-left:4.1666666667%}.el-col-md-pull-1{position:relative;right:4.1666666667%}.el-col-md-push-1{left:4.1666666667%;position:relative}.el-col-md-2{flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-md-2,.el-col-md-2.is-guttered{display:block}.el-col-md-offset-2{margin-left:8.3333333333%}.el-col-md-pull-2{position:relative;right:8.3333333333%}.el-col-md-push-2{left:8.3333333333%;position:relative}.el-col-md-3{flex:0 0 12.5%;max-width:12.5%}.el-col-md-3,.el-col-md-3.is-guttered{display:block}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{left:12.5%;position:relative}.el-col-md-4{flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-md-4,.el-col-md-4.is-guttered{display:block}.el-col-md-offset-4{margin-left:16.6666666667%}.el-col-md-pull-4{position:relative;right:16.6666666667%}.el-col-md-push-4{left:16.6666666667%;position:relative}.el-col-md-5{flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-md-5,.el-col-md-5.is-guttered{display:block}.el-col-md-offset-5{margin-left:20.8333333333%}.el-col-md-pull-5{position:relative;right:20.8333333333%}.el-col-md-push-5{left:20.8333333333%;position:relative}.el-col-md-6{flex:0 0 25%;max-width:25%}.el-col-md-6,.el-col-md-6.is-guttered{display:block}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{left:25%;position:relative}.el-col-md-7{flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-md-7,.el-col-md-7.is-guttered{display:block}.el-col-md-offset-7{margin-left:29.1666666667%}.el-col-md-pull-7{position:relative;right:29.1666666667%}.el-col-md-push-7{left:29.1666666667%;position:relative}.el-col-md-8{flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-md-8,.el-col-md-8.is-guttered{display:block}.el-col-md-offset-8{margin-left:33.3333333333%}.el-col-md-pull-8{position:relative;right:33.3333333333%}.el-col-md-push-8{left:33.3333333333%;position:relative}.el-col-md-9{flex:0 0 37.5%;max-width:37.5%}.el-col-md-9,.el-col-md-9.is-guttered{display:block}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{left:37.5%;position:relative}.el-col-md-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-md-10.is-guttered{display:block}.el-col-md-offset-10{margin-left:41.6666666667%}.el-col-md-pull-10{position:relative;right:41.6666666667%}.el-col-md-push-10{left:41.6666666667%;position:relative}.el-col-md-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-md-11.is-guttered{display:block}.el-col-md-offset-11{margin-left:45.8333333333%}.el-col-md-pull-11{position:relative;right:45.8333333333%}.el-col-md-push-11{left:45.8333333333%;position:relative}.el-col-md-12{display:block;flex:0 0 50%;max-width:50%}.el-col-md-12.is-guttered{display:block}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{left:50%;position:relative}.el-col-md-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-md-13.is-guttered{display:block}.el-col-md-offset-13{margin-left:54.1666666667%}.el-col-md-pull-13{position:relative;right:54.1666666667%}.el-col-md-push-13{left:54.1666666667%;position:relative}.el-col-md-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-md-14.is-guttered{display:block}.el-col-md-offset-14{margin-left:58.3333333333%}.el-col-md-pull-14{position:relative;right:58.3333333333%}.el-col-md-push-14{left:58.3333333333%;position:relative}.el-col-md-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-md-15.is-guttered{display:block}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{left:62.5%;position:relative}.el-col-md-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-md-16.is-guttered{display:block}.el-col-md-offset-16{margin-left:66.6666666667%}.el-col-md-pull-16{position:relative;right:66.6666666667%}.el-col-md-push-16{left:66.6666666667%;position:relative}.el-col-md-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-md-17.is-guttered{display:block}.el-col-md-offset-17{margin-left:70.8333333333%}.el-col-md-pull-17{position:relative;right:70.8333333333%}.el-col-md-push-17{left:70.8333333333%;position:relative}.el-col-md-18{display:block;flex:0 0 75%;max-width:75%}.el-col-md-18.is-guttered{display:block}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{left:75%;position:relative}.el-col-md-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-md-19.is-guttered{display:block}.el-col-md-offset-19{margin-left:79.1666666667%}.el-col-md-pull-19{position:relative;right:79.1666666667%}.el-col-md-push-19{left:79.1666666667%;position:relative}.el-col-md-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-md-20.is-guttered{display:block}.el-col-md-offset-20{margin-left:83.3333333333%}.el-col-md-pull-20{position:relative;right:83.3333333333%}.el-col-md-push-20{left:83.3333333333%;position:relative}.el-col-md-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-md-21.is-guttered{display:block}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{left:87.5%;position:relative}.el-col-md-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-md-22.is-guttered{display:block}.el-col-md-offset-22{margin-left:91.6666666667%}.el-col-md-pull-22{position:relative;right:91.6666666667%}.el-col-md-push-22{left:91.6666666667%;position:relative}.el-col-md-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-md-23.is-guttered{display:block}.el-col-md-offset-23{margin-left:95.8333333333%}.el-col-md-pull-23{position:relative;right:95.8333333333%}.el-col-md-push-23{left:95.8333333333%;position:relative}.el-col-md-24{display:block;flex:0 0 100%;max-width:100%}.el-col-md-24.is-guttered{display:block}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{left:100%;position:relative}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;flex:0 0 0%;max-width:0}.el-col-lg-0.is-guttered{display:none}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{left:0;position:relative}.el-col-lg-1{flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-lg-1,.el-col-lg-1.is-guttered{display:block}.el-col-lg-offset-1{margin-left:4.1666666667%}.el-col-lg-pull-1{position:relative;right:4.1666666667%}.el-col-lg-push-1{left:4.1666666667%;position:relative}.el-col-lg-2{flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-lg-2,.el-col-lg-2.is-guttered{display:block}.el-col-lg-offset-2{margin-left:8.3333333333%}.el-col-lg-pull-2{position:relative;right:8.3333333333%}.el-col-lg-push-2{left:8.3333333333%;position:relative}.el-col-lg-3{flex:0 0 12.5%;max-width:12.5%}.el-col-lg-3,.el-col-lg-3.is-guttered{display:block}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{left:12.5%;position:relative}.el-col-lg-4{flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-lg-4,.el-col-lg-4.is-guttered{display:block}.el-col-lg-offset-4{margin-left:16.6666666667%}.el-col-lg-pull-4{position:relative;right:16.6666666667%}.el-col-lg-push-4{left:16.6666666667%;position:relative}.el-col-lg-5{flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-lg-5,.el-col-lg-5.is-guttered{display:block}.el-col-lg-offset-5{margin-left:20.8333333333%}.el-col-lg-pull-5{position:relative;right:20.8333333333%}.el-col-lg-push-5{left:20.8333333333%;position:relative}.el-col-lg-6{flex:0 0 25%;max-width:25%}.el-col-lg-6,.el-col-lg-6.is-guttered{display:block}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{left:25%;position:relative}.el-col-lg-7{flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-lg-7,.el-col-lg-7.is-guttered{display:block}.el-col-lg-offset-7{margin-left:29.1666666667%}.el-col-lg-pull-7{position:relative;right:29.1666666667%}.el-col-lg-push-7{left:29.1666666667%;position:relative}.el-col-lg-8{flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-lg-8,.el-col-lg-8.is-guttered{display:block}.el-col-lg-offset-8{margin-left:33.3333333333%}.el-col-lg-pull-8{position:relative;right:33.3333333333%}.el-col-lg-push-8{left:33.3333333333%;position:relative}.el-col-lg-9{flex:0 0 37.5%;max-width:37.5%}.el-col-lg-9,.el-col-lg-9.is-guttered{display:block}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{left:37.5%;position:relative}.el-col-lg-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-lg-10.is-guttered{display:block}.el-col-lg-offset-10{margin-left:41.6666666667%}.el-col-lg-pull-10{position:relative;right:41.6666666667%}.el-col-lg-push-10{left:41.6666666667%;position:relative}.el-col-lg-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-lg-11.is-guttered{display:block}.el-col-lg-offset-11{margin-left:45.8333333333%}.el-col-lg-pull-11{position:relative;right:45.8333333333%}.el-col-lg-push-11{left:45.8333333333%;position:relative}.el-col-lg-12{display:block;flex:0 0 50%;max-width:50%}.el-col-lg-12.is-guttered{display:block}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{left:50%;position:relative}.el-col-lg-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-lg-13.is-guttered{display:block}.el-col-lg-offset-13{margin-left:54.1666666667%}.el-col-lg-pull-13{position:relative;right:54.1666666667%}.el-col-lg-push-13{left:54.1666666667%;position:relative}.el-col-lg-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-lg-14.is-guttered{display:block}.el-col-lg-offset-14{margin-left:58.3333333333%}.el-col-lg-pull-14{position:relative;right:58.3333333333%}.el-col-lg-push-14{left:58.3333333333%;position:relative}.el-col-lg-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-lg-15.is-guttered{display:block}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{left:62.5%;position:relative}.el-col-lg-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-lg-16.is-guttered{display:block}.el-col-lg-offset-16{margin-left:66.6666666667%}.el-col-lg-pull-16{position:relative;right:66.6666666667%}.el-col-lg-push-16{left:66.6666666667%;position:relative}.el-col-lg-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-lg-17.is-guttered{display:block}.el-col-lg-offset-17{margin-left:70.8333333333%}.el-col-lg-pull-17{position:relative;right:70.8333333333%}.el-col-lg-push-17{left:70.8333333333%;position:relative}.el-col-lg-18{display:block;flex:0 0 75%;max-width:75%}.el-col-lg-18.is-guttered{display:block}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{left:75%;position:relative}.el-col-lg-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-lg-19.is-guttered{display:block}.el-col-lg-offset-19{margin-left:79.1666666667%}.el-col-lg-pull-19{position:relative;right:79.1666666667%}.el-col-lg-push-19{left:79.1666666667%;position:relative}.el-col-lg-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-lg-20.is-guttered{display:block}.el-col-lg-offset-20{margin-left:83.3333333333%}.el-col-lg-pull-20{position:relative;right:83.3333333333%}.el-col-lg-push-20{left:83.3333333333%;position:relative}.el-col-lg-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-lg-21.is-guttered{display:block}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{left:87.5%;position:relative}.el-col-lg-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-lg-22.is-guttered{display:block}.el-col-lg-offset-22{margin-left:91.6666666667%}.el-col-lg-pull-22{position:relative;right:91.6666666667%}.el-col-lg-push-22{left:91.6666666667%;position:relative}.el-col-lg-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-lg-23.is-guttered{display:block}.el-col-lg-offset-23{margin-left:95.8333333333%}.el-col-lg-pull-23{position:relative;right:95.8333333333%}.el-col-lg-push-23{left:95.8333333333%;position:relative}.el-col-lg-24{display:block;flex:0 0 100%;max-width:100%}.el-col-lg-24.is-guttered{display:block}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{left:100%;position:relative}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;flex:0 0 0%;max-width:0}.el-col-xl-0.is-guttered{display:none}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{left:0;position:relative}.el-col-xl-1{flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-xl-1,.el-col-xl-1.is-guttered{display:block}.el-col-xl-offset-1{margin-left:4.1666666667%}.el-col-xl-pull-1{position:relative;right:4.1666666667%}.el-col-xl-push-1{left:4.1666666667%;position:relative}.el-col-xl-2{flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-xl-2,.el-col-xl-2.is-guttered{display:block}.el-col-xl-offset-2{margin-left:8.3333333333%}.el-col-xl-pull-2{position:relative;right:8.3333333333%}.el-col-xl-push-2{left:8.3333333333%;position:relative}.el-col-xl-3{flex:0 0 12.5%;max-width:12.5%}.el-col-xl-3,.el-col-xl-3.is-guttered{display:block}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{left:12.5%;position:relative}.el-col-xl-4{flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-xl-4,.el-col-xl-4.is-guttered{display:block}.el-col-xl-offset-4{margin-left:16.6666666667%}.el-col-xl-pull-4{position:relative;right:16.6666666667%}.el-col-xl-push-4{left:16.6666666667%;position:relative}.el-col-xl-5{flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-xl-5,.el-col-xl-5.is-guttered{display:block}.el-col-xl-offset-5{margin-left:20.8333333333%}.el-col-xl-pull-5{position:relative;right:20.8333333333%}.el-col-xl-push-5{left:20.8333333333%;position:relative}.el-col-xl-6{flex:0 0 25%;max-width:25%}.el-col-xl-6,.el-col-xl-6.is-guttered{display:block}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{left:25%;position:relative}.el-col-xl-7{flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-xl-7,.el-col-xl-7.is-guttered{display:block}.el-col-xl-offset-7{margin-left:29.1666666667%}.el-col-xl-pull-7{position:relative;right:29.1666666667%}.el-col-xl-push-7{left:29.1666666667%;position:relative}.el-col-xl-8{flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-xl-8,.el-col-xl-8.is-guttered{display:block}.el-col-xl-offset-8{margin-left:33.3333333333%}.el-col-xl-pull-8{position:relative;right:33.3333333333%}.el-col-xl-push-8{left:33.3333333333%;position:relative}.el-col-xl-9{flex:0 0 37.5%;max-width:37.5%}.el-col-xl-9,.el-col-xl-9.is-guttered{display:block}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{left:37.5%;position:relative}.el-col-xl-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-xl-10.is-guttered{display:block}.el-col-xl-offset-10{margin-left:41.6666666667%}.el-col-xl-pull-10{position:relative;right:41.6666666667%}.el-col-xl-push-10{left:41.6666666667%;position:relative}.el-col-xl-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-xl-11.is-guttered{display:block}.el-col-xl-offset-11{margin-left:45.8333333333%}.el-col-xl-pull-11{position:relative;right:45.8333333333%}.el-col-xl-push-11{left:45.8333333333%;position:relative}.el-col-xl-12{display:block;flex:0 0 50%;max-width:50%}.el-col-xl-12.is-guttered{display:block}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{left:50%;position:relative}.el-col-xl-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-xl-13.is-guttered{display:block}.el-col-xl-offset-13{margin-left:54.1666666667%}.el-col-xl-pull-13{position:relative;right:54.1666666667%}.el-col-xl-push-13{left:54.1666666667%;position:relative}.el-col-xl-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-xl-14.is-guttered{display:block}.el-col-xl-offset-14{margin-left:58.3333333333%}.el-col-xl-pull-14{position:relative;right:58.3333333333%}.el-col-xl-push-14{left:58.3333333333%;position:relative}.el-col-xl-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-xl-15.is-guttered{display:block}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{left:62.5%;position:relative}.el-col-xl-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-xl-16.is-guttered{display:block}.el-col-xl-offset-16{margin-left:66.6666666667%}.el-col-xl-pull-16{position:relative;right:66.6666666667%}.el-col-xl-push-16{left:66.6666666667%;position:relative}.el-col-xl-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-xl-17.is-guttered{display:block}.el-col-xl-offset-17{margin-left:70.8333333333%}.el-col-xl-pull-17{position:relative;right:70.8333333333%}.el-col-xl-push-17{left:70.8333333333%;position:relative}.el-col-xl-18{display:block;flex:0 0 75%;max-width:75%}.el-col-xl-18.is-guttered{display:block}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{left:75%;position:relative}.el-col-xl-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-xl-19.is-guttered{display:block}.el-col-xl-offset-19{margin-left:79.1666666667%}.el-col-xl-pull-19{position:relative;right:79.1666666667%}.el-col-xl-push-19{left:79.1666666667%;position:relative}.el-col-xl-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-xl-20.is-guttered{display:block}.el-col-xl-offset-20{margin-left:83.3333333333%}.el-col-xl-pull-20{position:relative;right:83.3333333333%}.el-col-xl-push-20{left:83.3333333333%;position:relative}.el-col-xl-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-xl-21.is-guttered{display:block}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{left:87.5%;position:relative}.el-col-xl-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-xl-22.is-guttered{display:block}.el-col-xl-offset-22{margin-left:91.6666666667%}.el-col-xl-pull-22{position:relative;right:91.6666666667%}.el-col-xl-push-22{left:91.6666666667%;position:relative}.el-col-xl-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-xl-23.is-guttered{display:block}.el-col-xl-offset-23{margin-left:95.8333333333%}.el-col-xl-pull-23{position:relative;right:95.8333333333%}.el-col-xl-push-23{left:95.8333333333%;position:relative}.el-col-xl-24{display:block;flex:0 0 100%;max-width:100%}.el-col-xl-24.is-guttered{display:block}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{left:100%;position:relative}}.el-collapse{--el-collapse-border-color:var(--el-border-color-lighter);--el-collapse-header-height:48px;--el-collapse-header-bg-color:var(--el-fill-color-blank);--el-collapse-header-text-color:var(--el-text-color-primary);--el-collapse-header-font-size:13px;--el-collapse-content-bg-color:var(--el-fill-color-blank);--el-collapse-content-font-size:13px;--el-collapse-content-text-color:var(--el-text-color-primary);border-bottom:1px solid var(--el-collapse-border-color);border-top:1px solid var(--el-collapse-border-color)}.el-collapse-item.is-disabled .el-collapse-item__header{color:var(--el-text-color-disabled);cursor:not-allowed}.el-collapse-item__header{align-items:center;background-color:var(--el-collapse-header-bg-color);border:none;border-bottom:1px solid var(--el-collapse-border-color);color:var(--el-collapse-header-text-color);cursor:pointer;display:flex;font-size:var(--el-collapse-header-font-size);font-weight:500;height:var(--el-collapse-header-height);line-height:var(--el-collapse-header-height);outline:none;padding:0;transition:border-bottom-color var(--el-transition-duration);width:100%}.el-collapse-item__arrow{font-weight:300;margin:0 8px 0 auto;transition:transform var(--el-transition-duration)}.el-collapse-item__arrow.is-active{transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:var(--el-color-primary)}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{background-color:var(--el-collapse-content-bg-color);border-bottom:1px solid var(--el-collapse-border-color);box-sizing:border-box;overflow:hidden;will-change:height}.el-collapse-item__content{color:var(--el-collapse-content-text-color);font-size:var(--el-collapse-content-font-size);line-height:1.7692307692;padding-bottom:25px}.el-collapse-item:last-child{margin-bottom:-1px}.el-color-predefine{display:flex;font-size:12px;margin-top:8px;width:280px}.el-color-predefine__colors{display:flex;flex:1;flex-wrap:wrap}.el-color-predefine__color-selector{border-radius:4px;cursor:pointer;height:20px;margin:0 0 8px 8px;width:20px}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{box-shadow:0 0 3px 2px var(--el-color-primary)}.el-color-predefine__color-selector>div{border-radius:3px;display:flex;height:100%}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{background-color:red;box-sizing:border-box;float:right;height:12px;padding:0 2px;position:relative;width:280px}.el-color-hue-slider__bar{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff,#00f 67%,#f0f 83%,red);height:100%;position:relative}.el-color-hue-slider__thumb{background:#fff;border:1px solid var(--el-border-color-lighter);border-radius:1px;box-shadow:0 0 2px #0009;box-sizing:border-box;cursor:pointer;height:100%;left:0;position:absolute;top:0;width:4px;z-index:1}.el-color-hue-slider.is-vertical{height:180px;padding:2px 0;width:12px}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:linear-gradient(180deg,red 0,#ff0 17%,#0f0 33%,#0ff,#00f 67%,#f0f 83%,red)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{height:4px;left:0;top:0;width:100%}.el-color-svpanel{height:180px;position:relative;width:280px}.el-color-svpanel__black,.el-color-svpanel__white{bottom:0;left:0;position:absolute;right:0;top:0}.el-color-svpanel__white{background:linear-gradient(90deg,#fff,#fff0)}.el-color-svpanel__black{background:linear-gradient(0deg,#000,#0000)}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{border-radius:50%;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px #0000004d,0 0 1px 2px #0006;cursor:head;height:4px;transform:translate(-2px,-2px);width:4px}.el-color-alpha-slider{background-image:linear-gradient(45deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(45deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%);background-position:0 0,6px 0,6px -6px,0 6px;background-size:12px 12px;box-sizing:border-box;height:12px;position:relative;width:280px}.el-color-alpha-slider__bar{background:linear-gradient(to right,rgba(255,255,255,0) 0,var(--el-bg-color) 100%);height:100%;position:relative}.el-color-alpha-slider__thumb{background:#fff;border:1px solid var(--el-border-color-lighter);border-radius:1px;box-shadow:0 0 2px #0009;box-sizing:border-box;cursor:pointer;height:100%;left:0;position:absolute;top:0;width:4px;z-index:1}.el-color-alpha-slider.is-vertical{height:180px;width:20px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:linear-gradient(180deg,#fff0 0,#fff)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{height:4px;left:0;top:0;width:100%}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper:after{clear:both;content:"";display:table}.el-color-dropdown__btns{margin-top:12px;text-align:right}.el-color-dropdown__value{color:#000;float:left;font-size:12px;line-height:26px;width:160px}.el-color-picker{display:inline-block;line-height:normal;outline:none;position:relative}.el-color-picker:hover:not(.is-disabled,.is-focused) .el-color-picker__trigger{border-color:var(--el-border-color-hover)}.el-color-picker:focus-visible:not(.is-disabled) .el-color-picker__trigger{outline:2px solid var(--el-color-primary);outline-offset:1px}.el-color-picker.is-focused .el-color-picker__trigger{border-color:var(--el-color-primary)}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--large{height:40px}.el-color-picker--large .el-color-picker__trigger{height:40px;width:40px}.el-color-picker--large .el-color-picker__mask{height:38px;width:38px}.el-color-picker--small{height:24px}.el-color-picker--small .el-color-picker__trigger{height:24px;width:24px}.el-color-picker--small .el-color-picker__mask{height:22px;width:22px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{transform:scale(.8)}.el-color-picker__mask{background-color:#ffffffb3;border-radius:4px;cursor:not-allowed;height:30px;left:1px;position:absolute;top:1px;width:30px;z-index:1}.el-color-picker__trigger{align-items:center;border:1px solid var(--el-border-color);border-radius:4px;box-sizing:border-box;cursor:pointer;display:inline-flex;font-size:0;height:32px;justify-content:center;padding:4px;position:relative;width:32px}.el-color-picker__color{border:1px solid var(--el-text-color-secondary);border-radius:var(--el-border-radius-small);box-sizing:border-box;display:block;height:100%;position:relative;text-align:center;width:100%}.el-color-picker__color.is-alpha{background-image:linear-gradient(45deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(45deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%);background-position:0 0,6px 0,6px -6px,0 6px;background-size:12px 12px}.el-color-picker__color-inner{align-items:center;display:inline-flex;height:100%;justify-content:center;width:100%}.el-color-picker .el-color-picker__empty{color:var(--el-text-color-secondary);font-size:12px}.el-color-picker .el-color-picker__icon{align-items:center;color:#fff;display:inline-flex;font-size:12px;justify-content:center}.el-color-picker__panel{background-color:#fff;border-radius:var(--el-border-radius-base);box-shadow:var(--el-box-shadow-light);box-sizing:content-box;padding:6px;position:absolute;z-index:10}.el-color-picker__panel.el-popper{border:1px solid var(--el-border-color-lighter)}.el-color-picker,.el-color-picker__panel{--el-color-picker-alpha-bg-a:#ccc;--el-color-picker-alpha-bg-b:transparent}.dark .el-color-picker,.dark .el-color-picker__panel{--el-color-picker-alpha-bg-a:#333333}.el-container{box-sizing:border-box;display:flex;flex:1;flex-basis:auto;flex-direction:row;min-width:0}.el-container.is-vertical{flex-direction:column}.el-date-table{font-size:12px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:var(--el-datepicker-text-color)}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child .el-date-table-cell{border-bottom-left-radius:15px;border-top-left-radius:15px;margin-left:5px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child .el-date-table-cell{border-bottom-right-radius:15px;border-top-right-radius:15px;margin-right:5px}.el-date-table.is-week-mode .el-date-table__row.current .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table td{box-sizing:border-box;cursor:pointer;height:30px;padding:4px 0;position:relative;text-align:center;width:32px}.el-date-table td .el-date-table-cell{box-sizing:border-box;height:30px;padding:3px 0}.el-date-table td .el-date-table-cell .el-date-table-cell__text{border-radius:50%;display:block;height:24px;left:50%;line-height:24px;margin:0 auto;position:absolute;transform:translate(-50%);width:24px}.el-date-table td.next-month,.el-date-table td.prev-month{color:var(--el-datepicker-off-text-color)}.el-date-table td.today{position:relative}.el-date-table td.today .el-date-table-cell__text{color:var(--el-color-primary);font-weight:700}.el-date-table td.today.end-date .el-date-table-cell__text,.el-date-table td.today.start-date .el-date-table-cell__text{color:#fff}.el-date-table td.available:hover{color:var(--el-datepicker-hover-text-color)}.el-date-table td.in-range .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table td.in-range .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-date-table td.current:not(.disabled) .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);color:#fff}.el-date-table td.current:not(.disabled):focus-visible .el-date-table-cell__text{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-date-table td.end-date .el-date-table-cell,.el-date-table td.start-date .el-date-table-cell{color:#fff}.el-date-table td.end-date .el-date-table-cell__text,.el-date-table td.start-date .el-date-table-cell__text{background-color:var(--el-datepicker-active-color)}.el-date-table td.start-date .el-date-table-cell{border-bottom-left-radius:15px;border-top-left-radius:15px;margin-left:5px}.el-date-table td.end-date .el-date-table-cell{border-bottom-right-radius:15px;border-top-right-radius:15px;margin-right:5px}.el-date-table td.disabled .el-date-table-cell{background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);cursor:not-allowed;opacity:1}.el-date-table td.selected .el-date-table-cell{border-radius:15px;margin-left:5px;margin-right:5px}.el-date-table td.selected .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);border-radius:15px;color:#fff}.el-date-table td.week{color:var(--el-datepicker-header-text-color);font-size:80%}.el-date-table td:focus{outline:none}.el-date-table th{border-bottom:1px solid var(--el-border-color-lighter);color:var(--el-datepicker-header-text-color);font-weight:400;padding:5px}.el-month-table{border-collapse:collapse;font-size:12px;margin:-1px}.el-month-table td{cursor:pointer;padding:8px 0;position:relative;text-align:center;width:68px}.el-month-table td div{box-sizing:border-box;height:48px;padding:6px 0}.el-month-table td.today .cell{color:var(--el-color-primary);font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#fff}.el-month-table td.disabled .cell{background-color:var(--el-fill-color-light);cursor:not-allowed}.el-month-table td.disabled .cell,.el-month-table td.disabled .cell:hover{color:var(--el-text-color-placeholder)}.el-month-table td .cell{border-radius:18px;color:var(--el-datepicker-text-color);display:block;height:36px;left:50%;line-height:36px;margin:0 auto;position:absolute;transform:translate(-50%);width:54px}.el-month-table td .cell:hover{color:var(--el-datepicker-hover-text-color)}.el-month-table td.in-range div{background-color:var(--el-datepicker-inrange-bg-color)}.el-month-table td.in-range div:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#fff}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{background-color:var(--el-datepicker-active-color);color:#fff}.el-month-table td.start-date div{border-bottom-left-radius:24px;border-top-left-radius:24px;margin-left:3px}.el-month-table td.end-date div{border-bottom-right-radius:24px;border-top-right-radius:24px;margin-right:3px}.el-month-table td.current:not(.disabled) div{border-radius:24px;margin-left:3px;margin-right:3px}.el-month-table td.current:not(.disabled) .cell{background-color:var(--el-datepicker-active-color);color:#fff}.el-month-table td:focus-visible{outline:none}.el-month-table td:focus-visible .cell{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-year-table{border-collapse:collapse;font-size:12px;margin:-1px}.el-year-table .el-icon{color:var(--el-datepicker-icon-color)}.el-year-table td{cursor:pointer;padding:8px 0;position:relative;text-align:center;width:68px}.el-year-table td div{box-sizing:border-box;height:48px;padding:6px 0}.el-year-table td.today .cell{color:var(--el-color-primary);font-weight:700}.el-year-table td.disabled .cell{background-color:var(--el-fill-color-light);cursor:not-allowed}.el-year-table td.disabled .cell,.el-year-table td.disabled .cell:hover{color:var(--el-text-color-placeholder)}.el-year-table td .cell{border-radius:18px;color:var(--el-datepicker-text-color);display:block;height:36px;left:50%;line-height:36px;margin:0 auto;position:absolute;transform:translate(-50%);width:54px}.el-year-table td .cell:hover{color:var(--el-datepicker-hover-text-color)}.el-year-table td.current:not(.disabled) div{border-radius:24px;margin-left:3px;margin-right:3px}.el-year-table td.current:not(.disabled) .cell{background-color:var(--el-datepicker-active-color);color:#fff}.el-year-table td:focus-visible{outline:none}.el-year-table td:focus-visible .cell{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{display:inline-block;max-height:192px;overflow:auto;position:relative;vertical-align:top;width:50%}.el-time-spinner__wrapper.el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__wrapper.is-arrow{box-sizing:border-box;overflow:hidden;text-align:center}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.is-disabled):not(.is-active){background:var(--el-fill-color-light);cursor:default}.el-time-spinner__arrow{color:var(--el-text-color-secondary);cursor:pointer;font-size:12px;height:30px;left:0;line-height:30px;position:absolute;text-align:center;width:100%;z-index:var(--el-index-normal)}.el-time-spinner__arrow:hover{color:var(--el-color-primary)}.el-time-spinner__arrow.arrow-up{top:10px}.el-time-spinner__arrow.arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__list{list-style:none;margin:0}.el-time-spinner__list:after,.el-time-spinner__list:before{content:"";display:block;height:80px;width:100%}.el-time-spinner__item{color:var(--el-text-color-regular);font-size:12px;height:32px;line-height:32px}.el-time-spinner__item:hover:not(.is-disabled):not(.is-active){background:var(--el-fill-color-light);cursor:pointer}.el-time-spinner__item.is-active:not(.is-disabled){color:var(--el-text-color-primary);font-weight:700}.el-time-spinner__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-picker__popper{--el-datepicker-border-color:var(--el-disabled-border-color)}.el-picker__popper.el-popper{background:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-picker__popper.el-popper,.el-picker__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-datepicker-border-color)}.el-picker__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-date-editor{--el-date-editor-width:220px;--el-date-editor-monthrange-width:300px;--el-date-editor-daterange-width:350px;--el-date-editor-datetimerange-width:400px;--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;position:relative;text-align:left;vertical-align:middle}.el-date-editor.el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset}.el-date-editor.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-date-editor.el-input,.el-date-editor.el-input__wrapper{height:var(--el-input-height,var(--el-component-size));width:var(--el-date-editor-width)}.el-date-editor--monthrange{--el-date-editor-width:var(--el-date-editor-monthrange-width)}.el-date-editor--daterange,.el-date-editor--timerange{--el-date-editor-width:var(--el-date-editor-daterange-width)}.el-date-editor--datetimerange{--el-date-editor-width:var(--el-date-editor-datetimerange-width)}.el-date-editor--dates .el-input__wrapper{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .clear-icon,.el-date-editor .close-icon{cursor:pointer}.el-date-editor .clear-icon:hover{color:var(--el-text-color-secondary)}.el-date-editor .el-range__icon{color:var(--el-text-color-placeholder);float:left;font-size:14px;height:inherit}.el-date-editor .el-range__icon svg{vertical-align:middle}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;color:var(--el-text-color-regular);display:inline-block;font-size:var(--el-font-size-base);height:30px;line-height:30px;margin:0;outline:none;padding:0;text-align:center;width:39%}.el-date-editor .el-range-input::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-input::placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-separator{align-items:center;color:var(--el-text-color-primary);display:inline-flex;flex:1;font-size:14px;height:100%;justify-content:center;margin:0;overflow-wrap:break-word;padding:0 5px}.el-date-editor .el-range__close-icon{color:var(--el-text-color-placeholder);cursor:pointer;font-size:14px;height:inherit;width:unset}.el-date-editor .el-range__close-icon:hover{color:var(--el-text-color-secondary)}.el-date-editor .el-range__close-icon svg{vertical-align:middle}.el-date-editor .el-range__close-icon--hidden{opacity:0;visibility:hidden}.el-range-editor.el-input__wrapper{align-items:center;display:inline-flex;padding:0 10px}.el-range-editor.is-active,.el-range-editor.is-active:hover{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-range-editor--large{line-height:var(--el-component-size-large)}.el-range-editor--large.el-input__wrapper{height:var(--el-component-size-large)}.el-range-editor--large .el-range-separator{font-size:14px;line-height:40px}.el-range-editor--large .el-range-input{font-size:14px;height:38px;line-height:38px}.el-range-editor--small{line-height:var(--el-component-size-small)}.el-range-editor--small.el-input__wrapper{height:var(--el-component-size-small)}.el-range-editor--small .el-range-separator{font-size:12px;line-height:24px}.el-range-editor--small .el-range-input{font-size:12px;height:22px;line-height:22px}.el-range-editor.is-disabled{background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-range-editor.is-disabled,.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:var(--el-disabled-border-color)}.el-range-editor.is-disabled input{background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-range-editor.is-disabled input::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled input::placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled .el-range-separator{color:var(--el-disabled-text-color)}.el-picker-panel{background:var(--el-bg-color-overlay);border-radius:var(--el-border-radius-base);color:var(--el-text-color-regular);line-height:30px}.el-picker-panel .el-time-panel{background-color:var(--el-bg-color-overlay);border:1px solid var(--el-datepicker-border-color);box-shadow:var(--el-box-shadow-light);margin:5px 0}.el-picker-panel__body-wrapper:after,.el-picker-panel__body:after{clear:both;content:"";display:table}.el-picker-panel__content{margin:15px;position:relative}.el-picker-panel__footer{background-color:var(--el-bg-color-overlay);border-top:1px solid var(--el-datepicker-inner-border-color);font-size:0;padding:4px 12px;position:relative;text-align:right}.el-picker-panel__shortcut{background-color:transparent;border:0;color:var(--el-datepicker-text-color);cursor:pointer;display:block;font-size:14px;line-height:28px;outline:none;padding-left:12px;text-align:left;width:100%}.el-picker-panel__shortcut:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:var(--el-datepicker-active-color)}.el-picker-panel__btn{background-color:transparent;border:1px solid var(--el-fill-color-darker);border-radius:2px;color:var(--el-text-color-primary);cursor:pointer;font-size:12px;line-height:24px;outline:none;padding:0 20px}.el-picker-panel__btn[disabled]{color:var(--el-text-color-disabled);cursor:not-allowed}.el-picker-panel__icon-btn{background:transparent;border:0;color:var(--el-datepicker-icon-color);cursor:pointer;font-size:12px;margin-top:8px;outline:none}.el-picker-panel__icon-btn:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__icon-btn:focus-visible{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__icon-btn.is-disabled{color:var(--el-text-color-disabled)}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__icon-btn .el-icon{cursor:pointer;font-size:inherit}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{background-color:var(--el-bg-color-overlay);border-right:1px solid var(--el-datepicker-inner-border-color);bottom:0;box-sizing:border-box;overflow:auto;padding-top:6px;position:absolute;top:0;width:110px}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-date-picker{--el-datepicker-text-color:var(--el-text-color-regular);--el-datepicker-off-text-color:var(--el-text-color-placeholder);--el-datepicker-header-text-color:var(--el-text-color-regular);--el-datepicker-icon-color:var(--el-text-color-primary);--el-datepicker-border-color:var(--el-disabled-border-color);--el-datepicker-inner-border-color:var(--el-border-color-light);--el-datepicker-inrange-bg-color:var(--el-border-color-extra-light);--el-datepicker-inrange-hover-bg-color:var(--el-border-color-extra-light);--el-datepicker-active-color:var(--el-color-primary);--el-datepicker-hover-text-color:var(--el-color-primary);width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{display:table-cell;padding:0 5px;position:relative}.el-date-picker__time-header{border-bottom:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;display:table;font-size:12px;padding:8px 5px 5px;position:relative;width:100%}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{border-bottom:1px solid var(--el-border-color-lighter);margin-bottom:0;padding-bottom:12px}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{color:var(--el-text-color-regular);cursor:pointer;font-size:16px;font-weight:500;line-height:22px;padding:0 5px;text-align:center}.el-date-picker__header-label:hover{color:var(--el-datepicker-hover-text-color)}.el-date-picker__header-label:focus-visible{color:var(--el-datepicker-hover-text-color);outline:none}.el-date-picker__header-label.active{color:var(--el-datepicker-active-color)}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{cursor:pointer;float:left;line-height:30px;margin-left:10px}.el-date-picker .el-time-panel{position:absolute}.el-date-range-picker{--el-datepicker-text-color:var(--el-text-color-regular);--el-datepicker-off-text-color:var(--el-text-color-placeholder);--el-datepicker-header-text-color:var(--el-text-color-regular);--el-datepicker-icon-color:var(--el-text-color-primary);--el-datepicker-border-color:var(--el-disabled-border-color);--el-datepicker-inner-border-color:var(--el-border-color-light);--el-datepicker-inrange-bg-color:var(--el-border-color-extra-light);--el-datepicker-inrange-hover-bg-color:var(--el-border-color-extra-light);--el-datepicker-active-color:var(--el-color-primary);--el-datepicker-hover-text-color:var(--el-color-primary);width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{height:28px;position:relative;text-align:center}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{box-sizing:border-box;float:left;margin:0;padding:16px;width:50%}.el-date-range-picker__content.is-left{border-right:1px solid var(--el-datepicker-inner-border-color)}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{border-bottom:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;display:table;font-size:12px;padding:8px 5px 5px;position:relative;width:100%}.el-date-range-picker__time-header>.el-icon-arrow-right{color:var(--el-datepicker-icon-color);display:table-cell;font-size:20px;vertical-align:middle}.el-date-range-picker__time-picker-wrap{display:table-cell;padding:0 5px;position:relative}.el-date-range-picker__time-picker-wrap .el-picker-panel{background:#fff;position:absolute;right:0;top:13px;z-index:1}.el-date-range-picker__time-picker-wrap .el-time-panel{position:absolute}.el-time-range-picker{overflow:visible;width:354px}.el-time-range-picker__content{padding:10px;position:relative;text-align:center;z-index:1}.el-time-range-picker__cell{box-sizing:border-box;display:inline-block;margin:0;padding:4px 7px 7px;width:50%}.el-time-range-picker__header{font-size:14px;margin-bottom:5px;text-align:center}.el-time-range-picker__body{border:1px solid var(--el-datepicker-border-color);border-radius:2px}.el-time-panel{border-radius:2px;box-sizing:content-box;left:0;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:180px;z-index:var(--el-index-top)}.el-time-panel__content{font-size:0;overflow:hidden;position:relative}.el-time-panel__content:after,.el-time-panel__content:before{box-sizing:border-box;content:"";height:32px;left:0;margin-top:-16px;padding-top:6px;position:absolute;right:0;text-align:left;top:50%;z-index:-1}.el-time-panel__content:after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content:before{border-bottom:1px solid var(--el-border-color-light);border-top:1px solid var(--el-border-color-light);margin-left:12%;margin-right:12%;padding-left:50%}.el-time-panel__content.has-seconds:after{left:66.6666666667%}.el-time-panel__content.has-seconds:before{padding-left:33.3333333333%}.el-time-panel__footer{border-top:1px solid var(--el-timepicker-inner-border-color,var(--el-border-color-light));box-sizing:border-box;height:36px;line-height:25px;padding:4px;text-align:right}.el-time-panel__btn{background-color:transparent;border:none;color:var(--el-text-color-primary);cursor:pointer;font-size:12px;line-height:28px;margin:0 5px;outline:none;padding:0 5px}.el-time-panel__btn.confirm{color:var(--el-timepicker-active-color,var(--el-color-primary));font-weight:800}.el-descriptions{--el-descriptions-table-border:1px solid var(--el-border-color-lighter);--el-descriptions-item-bordered-label-background:var(--el-fill-color-light);box-sizing:border-box;color:var(--el-text-color-primary);font-size:var(--el-font-size-base)}.el-descriptions__header{align-items:center;display:flex;justify-content:space-between;margin-bottom:16px}.el-descriptions__title{color:var(--el-text-color-primary);font-size:16px;font-weight:700}.el-descriptions__body{background-color:var(--el-fill-color-blank)}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%}.el-descriptions__body .el-descriptions__table .el-descriptions__cell{box-sizing:border-box;font-size:14px;font-weight:400;line-height:23px;text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-right{text-align:right}.el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{border:var(--el-descriptions-table-border);padding:8px 11px}.el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:12px}.el-descriptions--large{font-size:14px}.el-descriptions--large .el-descriptions__header{margin-bottom:20px}.el-descriptions--large .el-descriptions__header .el-descriptions__title{font-size:16px}.el-descriptions--large .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:14px}.el-descriptions--large .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:12px 15px}.el-descriptions--large .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:16px}.el-descriptions--small{font-size:12px}.el-descriptions--small .el-descriptions__header{margin-bottom:12px}.el-descriptions--small .el-descriptions__header .el-descriptions__title{font-size:14px}.el-descriptions--small .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:12px}.el-descriptions--small .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:4px 7px}.el-descriptions--small .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:8px}.el-descriptions__label.el-descriptions__cell.is-bordered-label{background:var(--el-descriptions-item-bordered-label-background);color:var(--el-text-color-regular);font-weight:700}.el-descriptions__label:not(.is-bordered-label){color:var(--el-text-color-primary);margin-right:16px}.el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:6px}.el-descriptions__content.el-descriptions__cell.is-bordered-content{color:var(--el-text-color-primary)}.el-descriptions__content:not(.is-bordered-label){color:var(--el-text-color-regular)}.el-descriptions--large .el-descriptions__label:not(.is-bordered-label){margin-right:16px}.el-descriptions--large .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:8px}.el-descriptions--small .el-descriptions__label:not(.is-bordered-label){margin-right:12px}.el-descriptions--small .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:4px}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:.5}.v-modal-enter{animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{background:var(--el-popup-modal-bg-color);height:100%;left:0;opacity:var(--el-popup-modal-opacity);position:fixed;top:0;width:100%}.el-popup-parent--hidden{overflow:hidden}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:16px;--el-dialog-border-radius:var(--el-border-radius-small);background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;margin:var(--el-dialog-margin-top,15vh) auto 50px;overflow-wrap:break-word;padding:var(--el-dialog-padding-primary);position:relative;width:var(--el-dialog-width,50%)}.el-dialog:focus{outline:none!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;height:100%;margin-bottom:0;overflow:auto}.el-dialog__wrapper{bottom:0;left:0;margin:0;overflow:auto;position:fixed;right:0;top:0}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-dialog__header{padding-bottom:var(--el-dialog-padding-primary)}.el-dialog__header.show-close{padding-right:calc(var(--el-dialog-padding-primary) + var(--el-message-close-size, 16px))}.el-dialog__headerbtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:48px;outline:none;padding:0;position:absolute;right:0;top:0;width:48px}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{color:var(--el-text-color-primary);font-size:var(--el-dialog-title-font-size);line-height:var(--el-dialog-font-line-height)}.el-dialog__body{color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{box-sizing:border-box;padding-top:var(--el-dialog-padding-primary);text-align:right}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-overlay-dialog{bottom:0;left:0;overflow:auto;position:fixed;right:0;top:0}.dialog-fade-enter-active{animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{animation:dialog-fade-out var(--el-transition-duration)}@keyframes dialog-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes dialog-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.el-divider{position:relative}.el-divider--horizontal{border-top:1px var(--el-border-color) var(--el-border-style);display:block;height:1px;margin:24px 0;width:100%}.el-divider--vertical{border-left:1px var(--el-border-color) var(--el-border-style);display:inline-block;height:1em;margin:0 8px;position:relative;vertical-align:middle;width:1px}.el-divider__text{background-color:var(--el-bg-color);color:var(--el-text-color-primary);font-size:14px;font-weight:500;padding:0 20px;position:absolute}.el-divider__text.is-left{left:20px;transform:translateY(-50%)}.el-divider__text.is-center{left:50%;transform:translate(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;transform:translateY(-50%)}.el-drawer{--el-drawer-bg-color:var(--el-dialog-bg-color,var(--el-bg-color));--el-drawer-padding-primary:var(--el-dialog-padding-primary,20px);background-color:var(--el-drawer-bg-color);box-shadow:var(--el-box-shadow-dark);box-sizing:border-box;display:flex;flex-direction:column;overflow:hidden;position:absolute;transition:all var(--el-transition-duration)}.el-drawer .btt,.el-drawer .ltr,.el-drawer .rtl,.el-drawer .ttb{transform:translate(0)}.el-drawer__sr-focus:focus{outline:none!important}.el-drawer__header{align-items:center;color:#72767b;display:flex;margin-bottom:32px;padding:var(--el-drawer-padding-primary);padding-bottom:0}.el-drawer__header>:first-child{flex:1}.el-drawer__title{flex:1;font-size:16px;line-height:inherit;margin:0}.el-drawer__footer{padding:var(--el-drawer-padding-primary);padding-top:10px;text-align:right}.el-drawer__close-btn{background-color:transparent;border:none;color:inherit;cursor:pointer;display:inline-flex;font-size:var(--el-font-size-extra-large);outline:none}.el-drawer__close-btn:focus i,.el-drawer__close-btn:hover i{color:var(--el-color-primary)}.el-drawer__body{flex:1;overflow:auto;padding:var(--el-drawer-padding-primary)}.el-drawer__body>*{box-sizing:border-box}.el-drawer.ltr,.el-drawer.rtl{bottom:0;height:100%;top:0}.el-drawer.btt,.el-drawer.ttb{left:0;right:0;width:100%}.el-drawer.ltr{left:0}.el-drawer.rtl{right:0}.el-drawer.ttb{top:0}.el-drawer.btt{bottom:0}.el-drawer-fade-enter-active,.el-drawer-fade-leave-active{transition:all var(--el-transition-duration)}.el-drawer-fade-enter-active,.el-drawer-fade-enter-from,.el-drawer-fade-enter-to,.el-drawer-fade-leave-active,.el-drawer-fade-leave-from,.el-drawer-fade-leave-to{overflow:hidden!important}.el-drawer-fade-enter-from,.el-drawer-fade-leave-to{opacity:0}.el-drawer-fade-enter-to,.el-drawer-fade-leave-from{opacity:1}.el-drawer-fade-enter-from .rtl,.el-drawer-fade-leave-to .rtl{transform:translate(100%)}.el-drawer-fade-enter-from .ltr,.el-drawer-fade-leave-to .ltr{transform:translate(-100%)}.el-drawer-fade-enter-from .ttb,.el-drawer-fade-leave-to .ttb{transform:translateY(-100%)}.el-drawer-fade-enter-from .btt,.el-drawer-fade-leave-to .btt{transform:translateY(100%)}.el-dropdown{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10;color:var(--el-text-color-regular);display:inline-flex;font-size:var(--el-font-size-base);line-height:1;position:relative;vertical-align:top}.el-dropdown.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-dropdown__popper{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10}.el-dropdown__popper.el-popper{background:var(--el-bg-color-overlay);box-shadow:var(--el-dropdown-menu-box-shadow)}.el-dropdown__popper.el-popper,.el-dropdown__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-dropdown__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-dropdown__popper .el-dropdown-menu{border:none}.el-dropdown__popper .el-dropdown__popper-selfdefine{outline:none}.el-dropdown__popper .el-scrollbar__bar{z-index:calc(var(--el-dropdown-menu-index) + 1)}.el-dropdown__popper .el-dropdown__list{box-sizing:border-box;list-style:none;margin:0;padding:0}.el-dropdown .el-dropdown__caret-button{align-items:center;border-left:none;display:inline-flex;justify-content:center;padding-left:0;padding-right:0;width:32px}.el-dropdown .el-dropdown__caret-button>span{display:inline-flex}.el-dropdown .el-dropdown__caret-button:before{background:var(--el-overlay-color-lighter);bottom:-1px;content:"";display:block;left:0;position:absolute;top:-1px;width:1px}.el-dropdown .el-dropdown__caret-button.el-button:before{background:var(--el-border-color);opacity:.5}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{font-size:inherit;padding-left:0}.el-dropdown .el-dropdown-selfdefine{outline:none}.el-dropdown--large .el-dropdown__caret-button{width:40px}.el-dropdown--small .el-dropdown__caret-button{width:24px}.el-dropdown-menu{background-color:var(--el-bg-color-overlay);border:none;border-radius:var(--el-border-radius-base);box-shadow:none;left:0;list-style:none;margin:0;padding:5px 0;position:relative;top:0;z-index:var(--el-dropdown-menu-index)}.el-dropdown-menu__item{align-items:center;color:var(--el-text-color-regular);cursor:pointer;display:flex;font-size:var(--el-font-size-base);line-height:22px;list-style:none;margin:0;outline:none;padding:5px 16px;white-space:nowrap}.el-dropdown-menu__item:not(.is-disabled):focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:var(--el-dropdown-menuItem-hover-fill);color:var(--el-dropdown-menuItem-hover-color)}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{border-top:1px solid var(--el-border-color-lighter);margin:6px 0}.el-dropdown-menu__item.is-disabled{color:var(--el-text-color-disabled);cursor:not-allowed}.el-dropdown-menu--large{padding:7px 0}.el-dropdown-menu--large .el-dropdown-menu__item{font-size:14px;line-height:22px;padding:7px 20px}.el-dropdown-menu--large .el-dropdown-menu__item--divided{margin:8px 0}.el-dropdown-menu--small{padding:3px 0}.el-dropdown-menu--small .el-dropdown-menu__item{font-size:12px;line-height:20px;padding:2px 12px}.el-dropdown-menu--small .el-dropdown-menu__item--divided{margin:4px 0}.el-empty{--el-empty-padding:40px 0;--el-empty-image-width:160px;--el-empty-description-margin-top:20px;--el-empty-bottom-margin-top:20px;--el-empty-fill-color-0:var(--el-color-white);--el-empty-fill-color-1:#fcfcfd;--el-empty-fill-color-2:#f8f9fb;--el-empty-fill-color-3:#f7f8fc;--el-empty-fill-color-4:#eeeff3;--el-empty-fill-color-5:#edeef2;--el-empty-fill-color-6:#e9ebef;--el-empty-fill-color-7:#e5e7e9;--el-empty-fill-color-8:#e0e3e9;--el-empty-fill-color-9:#d5d7de;align-items:center;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;padding:var(--el-empty-padding);text-align:center}.el-empty__image{width:var(--el-empty-image-width)}.el-empty__image img{height:100%;-o-object-fit:contain;object-fit:contain;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:top;width:100%}.el-empty__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;height:100%;vertical-align:top;width:100%}.el-empty__description{margin-top:var(--el-empty-description-margin-top)}.el-empty__description p{color:var(--el-text-color-secondary);font-size:var(--el-font-size-base);margin:0}.el-empty__bottom{margin-top:var(--el-empty-bottom-margin-top)}.el-footer{--el-footer-padding:0 20px;--el-footer-height:60px;box-sizing:border-box;flex-shrink:0;height:var(--el-footer-height);padding:var(--el-footer-padding)}.el-form{--el-form-label-font-size:var(--el-font-size-base);--el-form-inline-content-width:220px}.el-form--inline .el-form-item{display:inline-flex;margin-right:32px;vertical-align:middle}.el-form--inline.el-form--label-top{display:flex;flex-wrap:wrap}.el-form--inline.el-form--label-top .el-form-item{display:block}.el-form-item{display:flex;--font-size:14px;margin-bottom:18px}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--large{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:22px}.el-form-item--large .el-form-item__label{height:40px;line-height:40px}.el-form-item--large .el-form-item__content{line-height:40px}.el-form-item--large .el-form-item__error{padding-top:4px}.el-form-item--default{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--default .el-form-item__label{height:32px;line-height:32px}.el-form-item--default .el-form-item__content{line-height:32px}.el-form-item--default .el-form-item__error{padding-top:2px}.el-form-item--small{--font-size:12px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--small .el-form-item__label{height:24px;line-height:24px}.el-form-item--small .el-form-item__content{line-height:24px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--label-left .el-form-item__label{justify-content:flex-start}.el-form-item--label-top{display:block}.el-form-item--label-top .el-form-item__label{display:block;height:auto;line-height:22px;margin-bottom:8px;text-align:left}.el-form-item__label-wrap{display:flex}.el-form-item__label{align-items:flex-start;box-sizing:border-box;color:var(--el-text-color-regular);display:inline-flex;flex:0 0 auto;font-size:var(--el-form-label-font-size);height:32px;justify-content:flex-end;line-height:32px;padding:0 12px 0 0}.el-form-item__content{align-items:center;display:flex;flex:1;flex-wrap:wrap;font-size:var(--font-size);line-height:32px;min-width:0;position:relative}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:var(--el-color-danger);font-size:12px;left:0;line-height:1;padding-top:2px;position:absolute;top:100%}.el-form-item__error--inline{display:inline-block;left:auto;margin-left:10px;position:relative;top:auto}.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label:before{color:var(--el-color-danger);content:"*";margin-right:4px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label-wrap>.el-form-item__label:after,.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label:after{color:var(--el-color-danger);content:"*";margin-left:4px}.el-form-item.is-error .el-input__wrapper,.el-form-item.is-error .el-input__wrapper.is-focus,.el-form-item.is-error .el-input__wrapper:focus,.el-form-item.is-error .el-input__wrapper:hover,.el-form-item.is-error .el-select__wrapper,.el-form-item.is-error .el-select__wrapper.is-focus,.el-form-item.is-error .el-select__wrapper:focus,.el-form-item.is-error .el-select__wrapper:hover,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner.is-focus,.el-form-item.is-error .el-textarea__inner:focus,.el-form-item.is-error .el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-input-group__append .el-input__wrapper,.el-form-item.is-error .el-input-group__prepend .el-input__wrapper{box-shadow:inset 0 0 0 1px transparent}.el-form-item.is-error .el-input-group__append .el-input__validateIcon,.el-form-item.is-error .el-input-group__prepend .el-input__validateIcon{display:none}.el-form-item.is-error .el-input__validateIcon{color:var(--el-color-danger)}.el-form-item--feedback .el-input__validateIcon{display:inline-flex}.el-header{--el-header-padding:0 20px;--el-header-height:60px;box-sizing:border-box;flex-shrink:0;height:var(--el-header-height);padding:var(--el-header-padding)}.el-image-viewer__wrapper{bottom:0;left:0;position:fixed;right:0;top:0}.el-image-viewer__btn{align-items:center;border-radius:50%;box-sizing:border-box;cursor:pointer;display:flex;justify-content:center;opacity:.8;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:1}.el-image-viewer__btn .el-icon{cursor:pointer;font-size:inherit}.el-image-viewer__close{font-size:40px;height:40px;right:40px;top:40px;width:40px}.el-image-viewer__canvas{align-items:center;display:flex;height:100%;justify-content:center;position:static;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.el-image-viewer__actions{background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px;bottom:30px;height:44px;left:50%;padding:0 23px;transform:translate(-50%);width:282px}.el-image-viewer__actions__inner{align-items:center;color:#fff;cursor:default;display:flex;font-size:23px;height:100%;justify-content:space-around;width:100%}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;top:50%;transform:translateY(-50%);width:44px}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__close{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;width:44px}.el-image-viewer__mask{background:#000;height:100%;left:0;opacity:.5;position:absolute;top:0;width:100%}.viewer-fade-enter-active{animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{animation:viewer-fade-out var(--el-transition-duration)}@keyframes viewer-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes viewer-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}.el-image__error,.el-image__inner,.el-image__placeholder,.el-image__wrapper{height:100%;width:100%}.el-image{display:inline-block;overflow:hidden;position:relative}.el-image__inner{opacity:1;vertical-align:top}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{left:0;position:absolute;top:0}.el-image__error,.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{align-items:center;color:var(--el-text-color-placeholder);display:flex;font-size:14px;justify-content:center;vertical-align:middle}.el-image__preview{cursor:pointer}.el-textarea{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;display:inline-block;font-size:var(--el-font-size-base);position:relative;vertical-align:bottom;width:100%}.el-textarea__inner{-webkit-appearance:none;background-color:var(--el-input-bg-color,var(--el-fill-color-blank));background-image:none;border:none;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;box-sizing:border-box;color:var(--el-input-text-color,var(--el-text-color-regular));display:block;font-family:inherit;font-size:inherit;line-height:1.5;padding:5px 11px;position:relative;resize:vertical;transition:var(--el-transition-box-shadow);width:100%}.el-textarea__inner::-moz-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-textarea__inner:focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset;outline:none}.el-textarea .el-input__count{background:var(--el-fill-color-blank);bottom:5px;color:var(--el-color-info);font-size:12px;line-height:14px;position:absolute;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:var(--el-disabled-bg-color);box-shadow:0 0 0 1px var(--el-disabled-border-color) inset;color:var(--el-disabled-text-color);cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-exceed .el-textarea__inner{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-textarea.is-exceed .el-input__count{color:var(--el-color-danger)}.el-input{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;--el-input-height:var(--el-component-size);box-sizing:border-box;display:inline-flex;font-size:var(--el-font-size-base);line-height:var(--el-input-height);position:relative;vertical-align:middle;width:var(--el-input-width)}.el-input::-webkit-scrollbar{width:6px;z-index:11}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{background:var(--el-text-color-disabled);border-radius:5px;width:6px}.el-input::-webkit-scrollbar-corner,.el-input::-webkit-scrollbar-track{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track-piece{background:var(--el-fill-color-blank);width:6px}.el-input .el-input__clear,.el-input .el-input__password{color:var(--el-input-icon-color);cursor:pointer;font-size:14px}.el-input .el-input__clear:hover,.el-input .el-input__password:hover{color:var(--el-input-clear-hover-color)}.el-input .el-input__count{align-items:center;color:var(--el-color-info);display:inline-flex;font-size:12px;height:100%}.el-input .el-input__count .el-input__count-inner{background:var(--el-fill-color-blank);display:inline-block;line-height:normal;padding-left:8px}.el-input__wrapper{align-items:center;background-color:var(--el-input-bg-color,var(--el-fill-color-blank));background-image:none;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;cursor:text;display:inline-flex;flex-grow:1;justify-content:center;padding:1px 11px;transform:translateZ(0);transition:var(--el-transition-box-shadow)}.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-input__inner{--el-input-inner-height:calc(var(--el-input-height, 32px) - 2px);-webkit-appearance:none;background:none;border:none;box-sizing:border-box;color:var(--el-input-text-color,var(--el-text-color-regular));flex-grow:1;font-size:inherit;height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);outline:none;padding:0;width:100%}.el-input__inner:focus{outline:none}.el-input__inner::-moz-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner[type=password]::-ms-reveal{display:none}.el-input__inner[type=number]{line-height:1}.el-input__prefix{color:var(--el-input-icon-color,var(--el-text-color-placeholder));display:inline-flex;flex-shrink:0;flex-wrap:nowrap;height:100%;pointer-events:none;text-align:center;transition:all var(--el-transition-duration);white-space:nowrap}.el-input__prefix-inner{align-items:center;display:inline-flex;justify-content:center;pointer-events:all}.el-input__prefix-inner>:last-child{margin-right:8px}.el-input__prefix-inner>:first-child,.el-input__prefix-inner>:first-child.el-input__icon{margin-left:0}.el-input__suffix{color:var(--el-input-icon-color,var(--el-text-color-placeholder));display:inline-flex;flex-shrink:0;flex-wrap:nowrap;height:100%;pointer-events:none;text-align:center;transition:all var(--el-transition-duration);white-space:nowrap}.el-input__suffix-inner{align-items:center;display:inline-flex;justify-content:center;pointer-events:all}.el-input__suffix-inner>:first-child{margin-left:8px}.el-input .el-input__icon{align-items:center;display:flex;height:inherit;justify-content:center;line-height:inherit;margin-left:8px;transition:all var(--el-transition-duration)}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-color, ) inset}.el-input.is-disabled{cursor:not-allowed}.el-input.is-disabled .el-input__wrapper{background-color:var(--el-disabled-bg-color);box-shadow:0 0 0 1px var(--el-disabled-border-color) inset}.el-input.is-disabled .el-input__inner{color:var(--el-disabled-text-color);-webkit-text-fill-color:var(--el-disabled-text-color);cursor:not-allowed}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__inner::placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__wrapper{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-input.is-exceed .el-input__suffix .el-input__count{color:var(--el-color-danger)}.el-input--large{--el-input-height:var(--el-component-size-large);font-size:14px}.el-input--large .el-input__wrapper{padding:1px 15px}.el-input--large .el-input__inner{--el-input-inner-height:calc(var(--el-input-height, 40px) - 2px)}.el-input--small{--el-input-height:var(--el-component-size-small);font-size:12px}.el-input--small .el-input__wrapper{padding:1px 7px}.el-input--small .el-input__inner{--el-input-inner-height:calc(var(--el-input-height, 24px) - 2px)}.el-input-group{align-items:stretch;display:inline-flex;width:100%}.el-input-group__append,.el-input-group__prepend{align-items:center;background-color:var(--el-fill-color-light);border-radius:var(--el-input-border-radius);color:var(--el-color-info);display:inline-flex;justify-content:center;min-height:100%;padding:0 20px;position:relative;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:none}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:0 -20px}.el-input-group__append button.el-button,.el-input-group__append button.el-button:hover,.el-input-group__append div.el-select .el-select__wrapper,.el-input-group__append div.el-select:hover .el-select__wrapper,.el-input-group__prepend button.el-button,.el-input-group__prepend button.el-button:hover,.el-input-group__prepend div.el-select .el-select__wrapper,.el-input-group__prepend div.el-select:hover .el-select__wrapper{background-color:transparent;border-color:transparent;color:inherit}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-bottom-right-radius:0;border-right:0;border-top-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group__append{border-left:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-group--prepend>.el-input__wrapper,.el-input-group__append{border-bottom-left-radius:0;border-top-left-radius:0}.el-input-group--prepend .el-input-group__prepend .el-select .el-select__wrapper{border-bottom-right-radius:0;border-top-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group--append>.el-input__wrapper{border-bottom-right-radius:0;border-top-right-radius:0}.el-input-group--append .el-input-group__append .el-select .el-select__wrapper{border-bottom-left-radius:0;border-top-left-radius:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-hidden{display:none!important}.el-input-number{display:inline-flex;line-height:30px;position:relative;width:150px}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;line-height:1;text-align:center}.el-input-number .el-input__inner::-webkit-inner-spin-button,.el-input-number .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-input-number__decrease,.el-input-number__increase{align-items:center;background:var(--el-fill-color-light);bottom:1px;color:var(--el-text-color-regular);cursor:pointer;display:flex;font-size:13px;height:auto;justify-content:center;position:absolute;top:1px;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:32px;z-index:1}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:var(--el-color-primary)}.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{border-left:var(--el-border);border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;right:1px}.el-input-number__decrease{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border);left:1px}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{line-height:38px;width:180px}.el-input-number--large .el-input-number__decrease,.el-input-number--large .el-input-number__increase{font-size:14px;width:40px}.el-input-number--large .el-input--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{line-height:22px;width:120px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{font-size:12px;width:24px}.el-input-number--small .el-input--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-bottom:var(--el-border);border-radius:0 var(--el-border-radius-base) 0 0;bottom:auto;left:auto}.el-input-number.is-controls-right .el-input-number__decrease{border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0;border-right:none;left:auto;right:1px;top:auto}.el-input-number.is-controls-right[class*=large] [class*=decrease],.el-input-number.is-controls-right[class*=large] [class*=increase]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{--el-input-number-controls-height:11px}.el-link{--el-link-font-size:var(--el-font-size-base);--el-link-font-weight:var(--el-font-weight-primary);--el-link-text-color:var(--el-text-color-regular);--el-link-hover-text-color:var(--el-color-primary);--el-link-disabled-text-color:var(--el-text-color-placeholder);align-items:center;color:var(--el-link-text-color);cursor:pointer;display:inline-flex;flex-direction:row;font-size:var(--el-link-font-size);font-weight:var(--el-link-font-weight);justify-content:center;outline:none;padding:0;position:relative;text-decoration:none;vertical-align:middle}.el-link:hover{color:var(--el-link-hover-text-color)}.el-link.is-underline:hover:after{border-bottom:1px solid var(--el-link-hover-text-color);bottom:0;content:"";height:0;left:0;position:absolute;right:0}.el-link.is-disabled{color:var(--el-link-disabled-text-color);cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default:after{border-color:var(--el-link-hover-text-color)}.el-link__inner{align-items:center;display:inline-flex;justify-content:center}.el-link.el-link--primary{--el-link-text-color:var(--el-color-primary);--el-link-hover-text-color:var(--el-color-primary-light-3);--el-link-disabled-text-color:var(--el-color-primary-light-5)}.el-link.el-link--primary.is-underline:hover:after,.el-link.el-link--primary:after{border-color:var(--el-link-text-color)}.el-link.el-link--success{--el-link-text-color:var(--el-color-success);--el-link-hover-text-color:var(--el-color-success-light-3);--el-link-disabled-text-color:var(--el-color-success-light-5)}.el-link.el-link--success.is-underline:hover:after,.el-link.el-link--success:after{border-color:var(--el-link-text-color)}.el-link.el-link--warning{--el-link-text-color:var(--el-color-warning);--el-link-hover-text-color:var(--el-color-warning-light-3);--el-link-disabled-text-color:var(--el-color-warning-light-5)}.el-link.el-link--warning.is-underline:hover:after,.el-link.el-link--warning:after{border-color:var(--el-link-text-color)}.el-link.el-link--danger{--el-link-text-color:var(--el-color-danger);--el-link-hover-text-color:var(--el-color-danger-light-3);--el-link-disabled-text-color:var(--el-color-danger-light-5)}.el-link.el-link--danger.is-underline:hover:after,.el-link.el-link--danger:after{border-color:var(--el-link-text-color)}.el-link.el-link--error{--el-link-text-color:var(--el-color-error);--el-link-hover-text-color:var(--el-color-error-light-3);--el-link-disabled-text-color:var(--el-color-error-light-5)}.el-link.el-link--error.is-underline:hover:after,.el-link.el-link--error:after{border-color:var(--el-link-text-color)}.el-link.el-link--info{--el-link-text-color:var(--el-color-info);--el-link-hover-text-color:var(--el-color-info-light-3);--el-link-disabled-text-color:var(--el-color-info-light-5)}.el-link.el-link--info.is-underline:hover:after,.el-link.el-link--info:after{border-color:var(--el-link-text-color)}:root{--el-loading-spinner-size:42px;--el-loading-fullscreen-spinner-size:50px}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{background-color:var(--el-mask-color);bottom:0;left:0;margin:0;position:absolute;right:0;top:0;transition:opacity var(--el-transition-duration);z-index:2000}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:calc((0px - var(--el-loading-fullscreen-spinner-size))/2)}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:var(--el-loading-fullscreen-spinner-size);width:var(--el-loading-fullscreen-spinner-size)}.el-loading-spinner{margin-top:calc((0px - var(--el-loading-spinner-size))/2);position:absolute;text-align:center;top:50%;width:100%}.el-loading-spinner .el-loading-text{color:var(--el-color-primary);font-size:14px;margin:3px 0}.el-loading-spinner .circular{animation:loading-rotate 2s linear infinite;display:inline;height:var(--el-loading-spinner-size);width:var(--el-loading-spinner-size)}.el-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:var(--el-color-primary);stroke-linecap:round}.el-loading-spinner i{color:var(--el-color-primary)}.el-loading-fade-enter-from,.el-loading-fade-leave-to{opacity:0}@keyframes loading-rotate{to{transform:rotate(1turn)}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-main{--el-main-padding:20px;box-sizing:border-box;display:block;flex:1;flex-basis:auto;overflow:auto;padding:var(--el-main-padding)}:root{--el-menu-active-color:var(--el-color-primary);--el-menu-text-color:var(--el-text-color-primary);--el-menu-hover-text-color:var(--el-color-primary);--el-menu-bg-color:var(--el-fill-color-blank);--el-menu-hover-bg-color:var(--el-color-primary-light-9);--el-menu-item-height:56px;--el-menu-sub-item-height:calc(var(--el-menu-item-height) - 6px);--el-menu-horizontal-height:60px;--el-menu-horizontal-sub-item-height:36px;--el-menu-item-font-size:var(--el-font-size-base);--el-menu-item-hover-fill:var(--el-color-primary-light-9);--el-menu-border-color:var(--el-border-color);--el-menu-base-level-padding:20px;--el-menu-level-padding:20px;--el-menu-icon-width:24px}.el-menu{background-color:var(--el-menu-bg-color);border-right:1px solid var(--el-menu-border-color);box-sizing:border-box;list-style:none;margin:0;padding-left:0;position:relative}.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item-group__title,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-sub-menu__title{padding-left:calc(var(--el-menu-base-level-padding) + var(--el-menu-level)*var(--el-menu-level-padding));white-space:nowrap}.el-menu:not(.el-menu--collapse) .el-sub-menu__title{padding-right:calc(var(--el-menu-base-level-padding) + var(--el-menu-icon-width))}.el-menu--horizontal{border-right:none;display:flex;flex-wrap:nowrap;height:var(--el-menu-horizontal-height)}.el-menu--horizontal.el-menu--popup-container{height:unset}.el-menu--horizontal.el-menu{border-bottom:1px solid var(--el-menu-border-color)}.el-menu--horizontal>.el-menu-item{align-items:center;border-bottom:2px solid transparent;color:var(--el-menu-text-color);display:inline-flex;height:100%;justify-content:center;margin:0}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-sub-menu:focus,.el-menu--horizontal>.el-sub-menu:hover{outline:none}.el-menu--horizontal>.el-sub-menu:hover .el-sub-menu__title{color:var(--el-menu-hover-text-color)}.el-menu--horizontal>.el-sub-menu.is-active .el-sub-menu__title{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title{border-bottom:2px solid transparent;color:var(--el-menu-text-color);height:100%}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title:hover{background-color:var(--el-menu-bg-color)}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-sub-menu__title{align-items:center;background-color:var(--el-menu-bg-color);color:var(--el-menu-text-color);display:flex;height:var(--el-menu-horizontal-sub-item-height);line-height:var(--el-menu-horizontal-sub-item-height);padding:0 10px}.el-menu--horizontal .el-menu .el-sub-menu__title{padding-right:40px}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title{color:var(--el-menu-active-color)}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{background-color:var(--el-menu-hover-bg-color);color:var(--el-menu-hover-text-color);outline:none}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)!important}.el-menu--collapse{width:calc(var(--el-menu-icon-width) + var(--el-menu-base-level-padding)*2)}.el-menu--collapse>.el-menu-item [class^=el-icon],.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title [class^=el-icon],.el-menu--collapse>.el-sub-menu>.el-sub-menu__title [class^=el-icon]{margin:0;text-align:center;vertical-align:middle;width:var(--el-menu-icon-width)}.el-menu--collapse>.el-menu-item .el-sub-menu__icon-arrow,.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title>span,.el-menu--collapse>.el-menu-item>span,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title>span{display:inline-block;height:0;overflow:hidden;visibility:hidden;width:0}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-sub-menu{min-width:200px}.el-menu--collapse .el-sub-menu.is-active .el-sub-menu__title{color:var(--el-menu-active-color)}.el-menu--popup{border:none;border-radius:var(--el-border-radius-small);box-shadow:var(--el-box-shadow-light);min-width:200px;padding:5px 0;z-index:100}.el-menu .el-icon{flex-shrink:0}.el-menu-item{align-items:center;box-sizing:border-box;color:var(--el-menu-text-color);cursor:pointer;display:flex;font-size:var(--el-menu-item-font-size);height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);list-style:none;padding:0 var(--el-menu-base-level-padding);position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);white-space:nowrap}.el-menu-item *{vertical-align:bottom}.el-menu-item i{color:inherit}.el-menu-item:focus,.el-menu-item:hover{outline:none}.el-menu-item:hover{background-color:var(--el-menu-hover-bg-color)}.el-menu-item.is-disabled{background:none!important;cursor:not-allowed;opacity:.25}.el-menu-item [class^=el-icon]{font-size:18px;margin-right:5px;text-align:center;vertical-align:middle;width:var(--el-menu-icon-width)}.el-menu-item.is-active{color:var(--el-menu-active-color)}.el-menu-item.is-active i{color:inherit}.el-menu-item .el-menu-tooltip__trigger{align-items:center;box-sizing:border-box;display:inline-flex;height:100%;left:0;padding:0 var(--el-menu-base-level-padding);position:absolute;top:0;width:100%}.el-sub-menu{list-style:none;margin:0;padding-left:0}.el-sub-menu__title{align-items:center;box-sizing:border-box;color:var(--el-menu-text-color);cursor:pointer;display:flex;font-size:var(--el-menu-item-font-size);height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);list-style:none;padding:0 var(--el-menu-base-level-padding);position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);white-space:nowrap}.el-sub-menu__title *{vertical-align:bottom}.el-sub-menu__title i{color:inherit}.el-sub-menu__title:focus,.el-sub-menu__title:hover{outline:none}.el-sub-menu__title.is-disabled{background:none!important;cursor:not-allowed;opacity:.25}.el-sub-menu__title:hover{background-color:var(--el-menu-hover-bg-color)}.el-sub-menu .el-menu{border:none}.el-sub-menu .el-menu-item{height:var(--el-menu-sub-item-height);line-height:var(--el-menu-sub-item-height)}.el-sub-menu__hide-arrow .el-sub-menu__icon-arrow{display:none!important}.el-sub-menu.is-active .el-sub-menu__title{border-bottom-color:var(--el-menu-active-color)}.el-sub-menu.is-disabled .el-menu-item,.el-sub-menu.is-disabled .el-sub-menu__title{background:none!important;cursor:not-allowed;opacity:.25}.el-sub-menu .el-icon{font-size:18px;margin-right:5px;text-align:center;vertical-align:middle;width:var(--el-menu-icon-width)}.el-sub-menu .el-icon.el-sub-menu__icon-more{margin-right:0!important}.el-sub-menu .el-sub-menu__icon-arrow{font-size:12px;margin-right:0;margin-top:-6px;position:absolute;right:var(--el-menu-base-level-padding);top:50%;transition:transform var(--el-transition-duration);width:inherit}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{color:var(--el-text-color-secondary);font-size:12px;line-height:normal;padding:7px 0 7px var(--el-menu-base-level-padding)}.horizontal-collapse-transition .el-sub-menu__title .el-sub-menu__icon-arrow{opacity:0;transition:var(--el-transition-duration-fast)}.el-message-box{--el-messagebox-title-color:var(--el-text-color-primary);--el-messagebox-width:420px;--el-messagebox-border-radius:4px;--el-messagebox-box-shadow:var(--el-box-shadow);--el-messagebox-font-size:var(--el-font-size-large);--el-messagebox-content-font-size:var(--el-font-size-base);--el-messagebox-content-color:var(--el-text-color-regular);--el-messagebox-error-font-size:12px;--el-messagebox-padding-primary:12px;--el-messagebox-font-line-height:var(--el-font-line-height-primary);backface-visibility:hidden;background-color:var(--el-bg-color);border-radius:var(--el-messagebox-border-radius);box-shadow:var(--el-messagebox-box-shadow);box-sizing:border-box;display:inline-block;font-size:var(--el-messagebox-font-size);max-width:var(--el-messagebox-width);overflow:hidden;overflow-wrap:break-word;padding:var(--el-messagebox-padding-primary);position:relative;text-align:left;vertical-align:middle;width:100%}.el-message-box:focus{outline:none!important}.el-overlay.is-message-box .el-overlay-message-box{bottom:0;left:0;overflow:auto;padding:16px;position:fixed;right:0;text-align:center;top:0}.el-overlay.is-message-box .el-overlay-message-box:after{content:"";display:inline-block;height:100%;vertical-align:middle;width:0}.el-message-box.is-draggable .el-message-box__header{cursor:move;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-message-box__header{padding-bottom:var(--el-messagebox-padding-primary)}.el-message-box__header.show-close{padding-right:calc(var(--el-messagebox-padding-primary) + var(--el-message-close-size, 16px))}.el-message-box__title{color:var(--el-messagebox-title-color);font-size:var(--el-messagebox-font-size);line-height:var(--el-messagebox-font-line-height)}.el-message-box__headerbtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:40px;outline:none;padding:0;position:absolute;right:0;top:0;width:40px}.el-message-box__headerbtn .el-message-box__close{color:var(--el-color-info);font-size:inherit}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:var(--el-color-primary)}.el-message-box__content{color:var(--el-messagebox-content-color);font-size:var(--el-messagebox-content-font-size)}.el-message-box__container{align-items:center;display:flex;gap:12px}.el-message-box__input{padding-top:12px}.el-message-box__input div.invalid>input,.el-message-box__input div.invalid>input:focus{border-color:var(--el-color-error)}.el-message-box__status{font-size:24px}.el-message-box__status.el-message-box-icon--success{--el-messagebox-color:var(--el-color-success);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--info{--el-messagebox-color:var(--el-color-info);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--warning{--el-messagebox-color:var(--el-color-warning);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--error{--el-messagebox-color:var(--el-color-error);color:var(--el-messagebox-color)}.el-message-box__message{margin:0}.el-message-box__message p{line-height:var(--el-messagebox-font-line-height);margin:0}.el-message-box__errormsg{color:var(--el-color-error);font-size:var(--el-messagebox-error-font-size);line-height:var(--el-messagebox-font-line-height)}.el-message-box__btns{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-end;padding-top:var(--el-messagebox-padding-primary)}.el-message-box--center .el-message-box__title{align-items:center;display:flex;gap:6px;justify-content:center}.el-message-box--center .el-message-box__status{font-size:inherit}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__container{justify-content:center}.fade-in-linear-enter-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration)}.fade-in-linear-leave-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration) reverse}@keyframes msgbox-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}.el-message{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-border-color-lighter);--el-message-padding:11px 15px;--el-message-close-size:16px;--el-message-close-icon-color:var(--el-text-color-placeholder);--el-message-close-hover-color:var(--el-text-color-secondary);align-items:center;background-color:var(--el-message-bg-color);border-color:var(--el-message-border-color);border-radius:var(--el-border-radius-base);border-style:var(--el-border-style);border-width:var(--el-border-width);box-sizing:border-box;display:flex;gap:8px;left:50%;max-width:calc(100% - 32px);padding:var(--el-message-padding);position:fixed;top:20px;transform:translate(-50%);transition:opacity var(--el-transition-duration),transform .4s,top .4s;width:-moz-fit-content;width:fit-content}.el-message.is-center{justify-content:center}.el-message.is-plain{background-color:var(--el-bg-color-overlay);border-color:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-message p{margin:0}.el-message--success{--el-message-bg-color:var(--el-color-success-light-9);--el-message-border-color:var(--el-color-success-light-8);--el-message-text-color:var(--el-color-success)}.el-message--success .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--success{color:var(--el-message-text-color)}.el-message--info{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-color-info-light-8);--el-message-text-color:var(--el-color-info)}.el-message--info .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--info{color:var(--el-message-text-color)}.el-message--warning{--el-message-bg-color:var(--el-color-warning-light-9);--el-message-border-color:var(--el-color-warning-light-8);--el-message-text-color:var(--el-color-warning)}.el-message--warning .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--warning{color:var(--el-message-text-color)}.el-message--error{--el-message-bg-color:var(--el-color-error-light-9);--el-message-border-color:var(--el-color-error-light-8);--el-message-text-color:var(--el-color-error)}.el-message--error .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--error{color:var(--el-message-text-color)}.el-message .el-message__badge{position:absolute;right:-8px;top:-8px}.el-message__content{font-size:14px;line-height:1;padding:0}.el-message__content:focus{outline-width:0}.el-message .el-message__closeBtn{color:var(--el-message-close-icon-color);cursor:pointer;font-size:var(--el-message-close-size)}.el-message .el-message__closeBtn:focus{outline-width:0}.el-message .el-message__closeBtn:hover{color:var(--el-message-close-hover-color)}.el-message-fade-enter-from,.el-message-fade-leave-to{opacity:0;transform:translate(-50%,-100%)}.el-notification{--el-notification-width:330px;--el-notification-padding:14px 26px 14px 13px;--el-notification-radius:8px;--el-notification-shadow:var(--el-box-shadow-light);--el-notification-border-color:var(--el-border-color-lighter);--el-notification-icon-size:24px;--el-notification-close-font-size:var(--el-message-close-size,16px);--el-notification-group-margin-left:13px;--el-notification-group-margin-right:8px;--el-notification-content-font-size:var(--el-font-size-base);--el-notification-content-color:var(--el-text-color-regular);--el-notification-title-font-size:16px;--el-notification-title-color:var(--el-text-color-primary);--el-notification-close-color:var(--el-text-color-secondary);--el-notification-close-hover-color:var(--el-text-color-regular);background-color:var(--el-bg-color-overlay);border:1px solid var(--el-notification-border-color);border-radius:var(--el-notification-radius);box-shadow:var(--el-notification-shadow);box-sizing:border-box;display:flex;overflow:hidden;overflow-wrap:break-word;padding:var(--el-notification-padding);position:fixed;transition:opacity var(--el-transition-duration),transform var(--el-transition-duration),left var(--el-transition-duration),right var(--el-transition-duration),top .4s,bottom var(--el-transition-duration);width:var(--el-notification-width);z-index:9999}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:var(--el-notification-group-margin-left);margin-right:var(--el-notification-group-margin-right)}.el-notification__title{color:var(--el-notification-title-color);font-size:var(--el-notification-title-font-size);font-weight:700;line-height:var(--el-notification-icon-size);margin:0}.el-notification__content{color:var(--el-notification-content-color);font-size:var(--el-notification-content-font-size);line-height:24px;margin:6px 0 0}.el-notification__content p{margin:0}.el-notification .el-notification__icon{font-size:var(--el-notification-icon-size);height:var(--el-notification-icon-size);width:var(--el-notification-icon-size)}.el-notification .el-notification__closeBtn{color:var(--el-notification-close-color);cursor:pointer;font-size:var(--el-notification-close-font-size);position:absolute;right:15px;top:18px}.el-notification .el-notification__closeBtn:hover{color:var(--el-notification-close-hover-color)}.el-notification .el-notification--success{--el-notification-icon-color:var(--el-color-success);color:var(--el-notification-icon-color)}.el-notification .el-notification--info{--el-notification-icon-color:var(--el-color-info);color:var(--el-notification-icon-color)}.el-notification .el-notification--warning{--el-notification-icon-color:var(--el-color-warning);color:var(--el-notification-icon-color)}.el-notification .el-notification--error{--el-notification-icon-color:var(--el-color-error);color:var(--el-notification-icon-color)}.el-notification-fade-enter-from.right{right:0;transform:translate(100%)}.el-notification-fade-enter-from.left{left:0;transform:translate(-100%)}.el-notification-fade-leave-to{opacity:0}.el-overlay{background-color:var(--el-overlay-color-lighter);bottom:0;height:100%;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:2000}.el-overlay .el-overlay-root{height:0}.el-page-header.is-contentful .el-page-header__main{border-top:1px solid var(--el-border-color-light);margin-top:16px}.el-page-header__header{align-items:center;display:flex;justify-content:space-between;line-height:24px}.el-page-header__left{align-items:center;display:flex;margin-right:40px;position:relative}.el-page-header__back{align-items:center;cursor:pointer;display:flex}.el-page-header__left .el-divider--vertical{margin:0 16px}.el-page-header__icon{align-items:center;display:flex;font-size:16px;margin-right:10px}.el-page-header__icon .el-icon{font-size:inherit}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{color:var(--el-text-color-primary);font-size:18px}.el-page-header__breadcrumb{margin-bottom:16px}.el-pagination{--el-pagination-font-size:14px;--el-pagination-bg-color:var(--el-fill-color-blank);--el-pagination-text-color:var(--el-text-color-primary);--el-pagination-border-radius:2px;--el-pagination-button-color:var(--el-text-color-primary);--el-pagination-button-width:32px;--el-pagination-button-height:32px;--el-pagination-button-disabled-color:var(--el-text-color-placeholder);--el-pagination-button-disabled-bg-color:var(--el-fill-color-blank);--el-pagination-button-bg-color:var(--el-fill-color);--el-pagination-hover-color:var(--el-color-primary);--el-pagination-font-size-small:12px;--el-pagination-button-width-small:24px;--el-pagination-button-height-small:24px;--el-pagination-button-width-large:40px;--el-pagination-button-height-large:40px;--el-pagination-item-gap:16px;align-items:center;color:var(--el-pagination-text-color);display:flex;font-size:var(--el-pagination-font-size);font-weight:400;white-space:nowrap}.el-pagination .el-input__inner{-moz-appearance:textfield;text-align:center}.el-pagination .el-select{width:128px}.el-pagination button{align-items:center;background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;display:flex;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pagination button *{pointer-events:none}.el-pagination button:focus{outline:none}.el-pagination button.is-active,.el-pagination button:hover{color:var(--el-pagination-hover-color)}.el-pagination button.is-active{cursor:default;font-weight:700}.el-pagination button.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pagination button.is-disabled,.el-pagination button:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pagination button:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700;width:inherit}.el-pagination>.is-first{margin-left:0!important}.el-pagination>.is-last{margin-right:0!important}.el-pagination .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination__sizes,.el-pagination__total{color:var(--el-text-color-regular);font-weight:400;margin-left:var(--el-pagination-item-gap)}.el-pagination__total[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__jump{align-items:center;color:var(--el-text-color-regular);display:flex;font-weight:400;margin-left:var(--el-pagination-item-gap)}.el-pagination__jump[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__goto{margin-right:8px}.el-pagination__editor{box-sizing:border-box;text-align:center}.el-pagination__editor.el-input{width:56px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination__classifier{margin-left:8px}.el-pagination__rightwrapper{align-items:center;display:flex;flex:1;justify-content:flex-end}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{background-color:var(--el-pagination-button-bg-color);margin:0 4px}.el-pagination.is-background .btn-next.is-active,.el-pagination.is-background .btn-prev.is-active,.el-pagination.is-background .el-pager li.is-active{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-pagination.is-background .btn-next.is-disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.is-disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.is-disabled,.el-pagination.is-background .el-pager li:disabled{background-color:var(--el-disabled-bg-color);color:var(--el-text-color-placeholder)}.el-pagination.is-background .btn-next.is-disabled.is-active,.el-pagination.is-background .btn-next:disabled.is-active,.el-pagination.is-background .btn-prev.is-disabled.is-active,.el-pagination.is-background .btn-prev:disabled.is-active,.el-pagination.is-background .el-pager li.is-disabled.is-active,.el-pagination.is-background .el-pager li:disabled.is-active{background-color:var(--el-fill-color-dark);color:var(--el-text-color-secondary)}.el-pagination.is-background .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li{font-size:var(--el-pagination-font-size-small);height:var(--el-pagination-button-height-small);line-height:var(--el-pagination-button-height-small);min-width:var(--el-pagination-button-width-small)}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){font-size:var(--el-pagination-font-size-small)}.el-pagination--small .el-select{width:100px}.el-pagination--large .btn-next,.el-pagination--large .btn-prev,.el-pagination--large .el-pager li{height:var(--el-pagination-button-height-large);line-height:var(--el-pagination-button-height-large);min-width:var(--el-pagination-button-width-large)}.el-pagination--large .el-select .el-input{width:160px}.el-pager{font-size:0;list-style:none;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-pager,.el-pager li{align-items:center;display:flex}.el-pager li{background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pager li *{pointer-events:none}.el-pager li:focus{outline:none}.el-pager li.is-active,.el-pager li:hover{color:var(--el-pagination-hover-color)}.el-pager li.is-active{cursor:default;font-weight:700}.el-pager li.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pager li.is-disabled,.el-pager li:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pager li:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-popconfirm__main{align-items:center;display:flex}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{margin-top:8px;text-align:right}.el-popover{--el-popover-bg-color:var(--el-bg-color-overlay);--el-popover-font-size:var(--el-font-size-base);--el-popover-border-color:var(--el-border-color-lighter);--el-popover-padding:12px;--el-popover-padding-large:18px 20px;--el-popover-title-font-size:16px;--el-popover-title-text-color:var(--el-text-color-primary);--el-popover-border-radius:4px}.el-popover.el-popper{background:var(--el-popover-bg-color);border:1px solid var(--el-popover-border-color);border-radius:var(--el-popover-border-radius);box-shadow:var(--el-box-shadow-light);box-sizing:border-box;color:var(--el-text-color-regular);font-size:var(--el-popover-font-size);line-height:1.4;min-width:150px;overflow-wrap:break-word;padding:var(--el-popover-padding);z-index:var(--el-index-popper)}.el-popover.el-popper--plain{padding:var(--el-popover-padding-large)}.el-popover__title{color:var(--el-popover-title-text-color);font-size:var(--el-popover-title-font-size);line-height:1;margin-bottom:12px}.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.el-popover.el-popper.is-dark{--el-popover-bg-color:var(--el-text-color-primary);--el-popover-border-color:var(--el-text-color-primary);--el-popover-title-text-color:var(--el-bg-color);color:var(--el-bg-color)}.el-popover.el-popper:focus,.el-popover.el-popper:focus:active{outline-width:0}.el-progress{align-items:center;display:flex;line-height:1;position:relative}.el-progress__text{color:var(--el-text-color-regular);font-size:14px;line-height:1;margin-left:5px;min-width:50px}.el-progress__text i{display:block;vertical-align:middle}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{left:0;margin:0;position:absolute;text-align:center;top:50%;transform:translateY(-50%);width:100%}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{display:inline-block;vertical-align:middle}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{display:block;margin-right:0;padding-right:0}.el-progress--text-inside .el-progress-bar{margin-right:0;padding-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:var(--el-color-success)}.el-progress.is-success .el-progress__text{color:var(--el-color-success)}.el-progress.is-warning .el-progress-bar__inner{background-color:var(--el-color-warning)}.el-progress.is-warning .el-progress__text{color:var(--el-color-warning)}.el-progress.is-exception .el-progress-bar__inner{background-color:var(--el-color-danger)}.el-progress.is-exception .el-progress__text{color:var(--el-color-danger)}.el-progress-bar{box-sizing:border-box;flex-grow:1}.el-progress-bar__outer{background-color:var(--el-border-color-lighter);border-radius:100px;height:6px;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{background-color:var(--el-color-primary);border-radius:100px;height:100%;left:0;line-height:1;position:absolute;text-align:right;top:0;transition:width .6s ease;white-space:nowrap}.el-progress-bar__inner:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-progress-bar__inner--indeterminate{animation:indeterminate 3s infinite;transform:translateZ(0)}.el-progress-bar__inner--striped{background-image:linear-gradient(45deg,rgba(0,0,0,.1) 25%,transparent 0,transparent 50%,rgba(0,0,0,.1) 0,rgba(0,0,0,.1) 75%,transparent 0,transparent);background-size:1.25em 1.25em}.el-progress-bar__inner--striped.el-progress-bar__inner--striped-flow{animation:striped-flow 3s linear infinite}.el-progress-bar__innerText{color:#fff;display:inline-block;font-size:12px;margin:0 5px;vertical-align:middle}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@keyframes indeterminate{0%{left:-100%}to{left:100%}}@keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}.el-radio-button{--el-radio-button-checked-bg-color:var(--el-color-primary);--el-radio-button-checked-text-color:var(--el-color-white);--el-radio-button-checked-border-color:var(--el-color-primary);--el-radio-button-disabled-checked-fill:var(--el-border-color-extra-light)}.el-radio-button,.el-radio-button__inner{display:inline-block;outline:none;position:relative}.el-radio-button__inner{-webkit-appearance:none;background:var(--el-button-bg-color,var(--el-fill-color-blank));border:var(--el-border);border-left:0;border-radius:0;box-sizing:border-box;color:var(--el-button-text-color,var(--el-text-color-regular));cursor:pointer;font-size:var(--el-font-size-base);font-weight:var(--el-button-font-weight,var(--el-font-weight-primary));line-height:1;margin:0;padding:8px 15px;text-align:center;transition:var(--el-transition-all);-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-radio-button__inner.is-round{padding:8px 15px}.el-radio-button__inner:hover{color:var(--el-color-primary)}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:var(--el-border);border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);box-shadow:none!important}.el-radio-button.is-active .el-radio-button__original-radio:not(:disabled)+.el-radio-button__inner{background-color:var(--el-radio-button-checked-bg-color,var(--el-color-primary));border-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));box-shadow:-1px 0 0 0 var(--el-radio-button-checked-border-color,var(--el-color-primary));color:var(--el-radio-button-checked-text-color,var(--el-color-white))}.el-radio-button__original-radio{opacity:0;outline:none;position:absolute;z-index:-1}.el-radio-button__original-radio:focus-visible+.el-radio-button__inner{border-left:var(--el-border);border-left-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));border-radius:var(--el-border-radius-base);box-shadow:none;outline:2px solid var(--el-radio-button-checked-border-color);outline-offset:1px;z-index:2}.el-radio-button__original-radio:disabled+.el-radio-button__inner{background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));background-image:none;border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none;color:var(--el-disabled-text-color);cursor:not-allowed}.el-radio-button__original-radio:disabled:checked+.el-radio-button__inner{background-color:var(--el-radio-button-disabled-checked-fill)}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:var(--el-border-radius-base)}.el-radio-button--large .el-radio-button__inner{border-radius:0;font-size:var(--el-font-size-base);padding:12px 19px}.el-radio-button--large .el-radio-button__inner.is-round{padding:12px 19px}.el-radio-button--small .el-radio-button__inner{border-radius:0;font-size:12px;padding:5px 11px}.el-radio-button--small .el-radio-button__inner.is-round{padding:5px 11px}.el-radio-group{align-items:center;display:inline-flex;flex-wrap:wrap;font-size:0}.el-radio{--el-radio-font-size:var(--el-font-size-base);--el-radio-text-color:var(--el-text-color-regular);--el-radio-font-weight:var(--el-font-weight-primary);--el-radio-input-height:14px;--el-radio-input-width:14px;--el-radio-input-border-radius:var(--el-border-radius-circle);--el-radio-input-bg-color:var(--el-fill-color-blank);--el-radio-input-border:var(--el-border);--el-radio-input-border-color:var(--el-border-color);--el-radio-input-border-color-hover:var(--el-color-primary);align-items:center;color:var(--el-radio-text-color);cursor:pointer;display:inline-flex;font-size:var(--el-font-size-base);font-weight:var(--el-radio-font-weight);height:32px;margin-right:32px;outline:none;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.el-radio.el-radio--large{height:40px}.el-radio.el-radio--small{height:24px}.el-radio.is-bordered{border:var(--el-border);border-radius:var(--el-border-radius-base);box-sizing:border-box;padding:0 15px 0 9px}.el-radio.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-radio.is-bordered.is-disabled{border-color:var(--el-border-color-lighter);cursor:not-allowed}.el-radio.is-bordered.el-radio--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-radio.is-bordered.el-radio--large .el-radio__label{font-size:var(--el-font-size-base)}.el-radio.is-bordered.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.is-bordered.el-radio--small{border-radius:var(--el-border-radius-base);padding:0 11px 0 7px}.el-radio.is-bordered.el-radio--small .el-radio__label{font-size:12px}.el-radio.is-bordered.el-radio--small .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{cursor:pointer;display:inline-flex;outline:none;position:relative;vertical-align:middle;white-space:nowrap}.el-radio__input.is-disabled .el-radio__inner{border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled .el-radio__inner:after{background-color:var(--el-disabled-bg-color);cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:var(--el-text-color-placeholder)}.el-radio__input.is-disabled+span.el-radio__label{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{background:var(--el-color-primary);border-color:var(--el-color-primary)}.el-radio__input.is-checked .el-radio__inner:after{transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:var(--el-color-primary)}.el-radio__input.is-focus .el-radio__inner{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner{background-color:var(--el-radio-input-bg-color);border:var(--el-radio-input-border);border-radius:var(--el-radio-input-border-radius);box-sizing:border-box;cursor:pointer;display:inline-block;height:var(--el-radio-input-height);position:relative;width:var(--el-radio-input-width)}.el-radio__inner:hover{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner:after{background-color:var(--el-color-white);border-radius:var(--el-radio-input-border-radius);content:"";height:4px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:transform .15s ease-in;width:4px}.el-radio__original{bottom:0;left:0;margin:0;opacity:0;outline:none;position:absolute;right:0;top:0;z-index:-1}.el-radio__original:focus-visible+.el-radio__inner{border-radius:var(--el-radio-input-border-radius);outline:2px solid var(--el-radio-input-border-color-hover);outline-offset:1px}.el-radio:focus:not(:focus-visible):not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{box-shadow:0 0 2px 2px var(--el-radio-input-border-color-hover)}.el-radio__label{font-size:var(--el-radio-font-size);padding-left:8px}.el-radio.el-radio--large .el-radio__label{font-size:14px}.el-radio.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.el-radio--small .el-radio__label{font-size:12px}.el-radio.el-radio--small .el-radio__inner{height:12px;width:12px}.el-rate{--el-rate-height:20px;--el-rate-font-size:var(--el-font-size-base);--el-rate-icon-size:18px;--el-rate-icon-margin:6px;--el-rate-void-color:var(--el-border-color-darker);--el-rate-fill-color:#f7ba2a;--el-rate-disabled-void-color:var(--el-fill-color);--el-rate-text-color:var(--el-text-color-primary);align-items:center;display:inline-flex;height:32px}.el-rate:active,.el-rate:focus{outline:none}.el-rate__item{color:var(--el-rate-void-color);cursor:pointer;display:inline-block;font-size:0;line-height:normal;position:relative;vertical-align:middle}.el-rate .el-rate__icon{display:inline-block;font-size:var(--el-rate-icon-size);margin-right:var(--el-rate-icon-margin);position:relative;transition:var(--el-transition-duration)}.el-rate .el-rate__icon.hover{transform:scale(1.15)}.el-rate .el-rate__icon .path2{left:0;position:absolute;top:0}.el-rate .el-rate__icon.is-active{color:var(--el-rate-fill-color)}.el-rate__decimal{color:var(--el-rate-fill-color);display:inline-block;overflow:hidden}.el-rate__decimal,.el-rate__decimal--box{left:0;position:absolute;top:0}.el-rate__text{color:var(--el-rate-text-color);font-size:var(--el-rate-font-size);vertical-align:middle}.el-rate--large{height:40px}.el-rate--small{height:24px}.el-rate--small .el-rate__icon{font-size:14px}.el-rate.is-disabled .el-rate__item{color:var(--el-rate-disabled-void-color);cursor:auto}.el-result{--el-result-padding:40px 30px;--el-result-icon-font-size:64px;--el-result-title-font-size:20px;--el-result-title-margin-top:20px;--el-result-subtitle-margin-top:10px;--el-result-extra-margin-top:30px;align-items:center;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;padding:var(--el-result-padding);text-align:center}.el-result__icon svg{height:var(--el-result-icon-font-size);width:var(--el-result-icon-font-size)}.el-result__title{margin-top:var(--el-result-title-margin-top)}.el-result__title p{color:var(--el-text-color-primary);font-size:var(--el-result-title-font-size);line-height:1.3;margin:0}.el-result__subtitle{margin-top:var(--el-result-subtitle-margin-top)}.el-result__subtitle p{color:var(--el-text-color-regular);font-size:var(--el-font-size-base);line-height:1.3;margin:0}.el-result__extra{margin-top:var(--el-result-extra-margin-top)}.el-result .icon-primary{--el-result-color:var(--el-color-primary);color:var(--el-result-color)}.el-result .icon-success{--el-result-color:var(--el-color-success);color:var(--el-result-color)}.el-result .icon-warning{--el-result-color:var(--el-color-warning);color:var(--el-result-color)}.el-result .icon-danger{--el-result-color:var(--el-color-danger);color:var(--el-result-color)}.el-result .icon-error{--el-result-color:var(--el-color-error);color:var(--el-result-color)}.el-result .icon-info{--el-result-color:var(--el-color-info);color:var(--el-result-color)}.el-row{box-sizing:border-box;display:flex;flex-wrap:wrap;position:relative}.el-row.is-justify-center{justify-content:center}.el-row.is-justify-end{justify-content:flex-end}.el-row.is-justify-space-between{justify-content:space-between}.el-row.is-justify-space-around{justify-content:space-around}.el-row.is-justify-space-evenly{justify-content:space-evenly}.el-row.is-align-top{align-items:flex-start}.el-row.is-align-middle{align-items:center}.el-row.is-align-bottom{align-items:flex-end}.el-scrollbar{--el-scrollbar-opacity:.3;--el-scrollbar-bg-color:var(--el-text-color-secondary);--el-scrollbar-hover-opacity:.5;--el-scrollbar-hover-bg-color:var(--el-text-color-secondary);height:100%;overflow:hidden;position:relative}.el-scrollbar__wrap{height:100%;overflow:auto}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{display:none}.el-scrollbar__thumb{background-color:var(--el-scrollbar-bg-color,var(--el-text-color-secondary));border-radius:inherit;cursor:pointer;display:block;height:0;opacity:var(--el-scrollbar-opacity,.3);position:relative;transition:var(--el-transition-duration) background-color;width:0}.el-scrollbar__thumb:hover{background-color:var(--el-scrollbar-hover-bg-color,var(--el-text-color-secondary));opacity:var(--el-scrollbar-hover-opacity,.5)}.el-scrollbar__bar{border-radius:4px;bottom:2px;position:absolute;right:2px;z-index:1}.el-scrollbar__bar.is-vertical{top:2px;width:6px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar-fade-enter-active{transition:opacity .34s ease-out}.el-scrollbar-fade-leave-active{transition:opacity .12s ease-out}.el-scrollbar-fade-enter-from,.el-scrollbar-fade-leave-active{opacity:0}.el-select-dropdown{border-radius:var(--el-border-radius-base);box-sizing:border-box;z-index:calc(var(--el-index-top) + 1)}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty,.el-select-dropdown__loading{color:var(--el-text-color-secondary);font-size:var(--el-select-font-size);margin:0;padding:10px 0;text-align:center}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{box-sizing:border-box;list-style:none;margin:0;padding:6px 0}.el-select-dropdown__list.el-vl__window{margin:6px 0;padding:0}.el-select-dropdown__header{border-bottom:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__footer{border-top:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__item{box-sizing:border-box;color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-base);height:34px;line-height:34px;overflow:hidden;padding:0 32px 0 20px;position:relative;text-overflow:ellipsis;white-space:nowrap}.el-select-dropdown__item.is-hovering{background-color:var(--el-fill-color-light)}.el-select-dropdown__item.is-selected{color:var(--el-color-primary);font-weight:700}.el-select-dropdown__item.is-disabled{background-color:unset;color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-selected:after{background-color:var(--el-color-primary);background-position:50%;background-repeat:no-repeat;border-right:none;border-top:none;content:"";height:12px;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;position:absolute;right:20px;top:50%;transform:translateY(-50%);width:12px}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-disabled:after{background-color:var(--el-text-color-placeholder)}.el-select-group{margin:0;padding:0}.el-select-group__wrap{list-style:none;margin:0;padding:0;position:relative}.el-select-group__title{color:var(--el-color-info);font-size:12px;line-height:34px;padding-left:20px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{--el-select-border-color-hover:var(--el-border-color-hover);--el-select-disabled-color:var(--el-disabled-text-color);--el-select-disabled-border:var(--el-disabled-border-color);--el-select-font-size:var(--el-font-size-base);--el-select-close-hover-color:var(--el-text-color-secondary);--el-select-input-color:var(--el-text-color-placeholder);--el-select-multiple-input-color:var(--el-text-color-regular);--el-select-input-focus-border-color:var(--el-color-primary);--el-select-input-font-size:14px;--el-select-width:100%;display:inline-block;position:relative;vertical-align:middle;width:var(--el-select-width)}.el-select__wrapper{align-items:center;background-color:var(--el-fill-color-blank);border-radius:var(--el-border-radius-base);box-shadow:0 0 0 1px var(--el-border-color) inset;box-sizing:border-box;cursor:pointer;display:flex;font-size:14px;gap:6px;line-height:24px;min-height:32px;padding:4px 12px;position:relative;text-align:left;transition:var(--el-transition-duration)}.el-select__wrapper:hover{box-shadow:0 0 0 1px var(--el-text-color) inset}.el-select__wrapper.is-filterable{cursor:text}.el-select__wrapper.is-focused{box-shadow:0 0 0 1px var(--el-color-primary) inset}.el-select__wrapper.is-hovering:not(.is-focused){box-shadow:0 0 0 1px var(--el-border-color-hover) inset}.el-select__wrapper.is-disabled{background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select__wrapper.is-disabled,.el-select__wrapper.is-disabled:hover{box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.el-select__wrapper.is-disabled.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-select__wrapper.is-disabled .el-select__selected-item{color:var(--el-select-disabled-color)}.el-select__wrapper.is-disabled .el-select__caret,.el-select__wrapper.is-disabled .el-tag{cursor:not-allowed}.el-select__prefix,.el-select__suffix{align-items:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));display:flex;flex-shrink:0;gap:6px}.el-select__caret{color:var(--el-select-input-color);cursor:pointer;font-size:var(--el-select-input-font-size);transform:rotate(0);transition:var(--el-transition-duration)}.el-select__caret.is-reverse{transform:rotate(180deg)}.el-select__selection{align-items:center;display:flex;flex:1;flex-wrap:wrap;gap:6px;min-width:0;position:relative}.el-select__selection.is-near{margin-left:-8px}.el-select__selection .el-tag{border-color:transparent;cursor:pointer}.el-select__selection .el-tag.el-tag--plain{border-color:var(--el-tag-border-color)}.el-select__selection .el-tag .el-tag__content{min-width:0}.el-select__selected-item{display:flex;flex-wrap:wrap;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-select__tags-text{line-height:normal}.el-select__placeholder,.el-select__tags-text{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-select__placeholder{color:var(--el-input-text-color,var(--el-text-color-regular));position:absolute;top:50%;transform:translateY(-50%);width:100%}.el-select__placeholder.is-transparent{color:var(--el-text-color-placeholder);-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-select__popper.el-popper{background:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-select__popper.el-popper,.el-select__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-select__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-select__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-select__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-select__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-select__input-wrapper{max-width:100%}.el-select__input-wrapper.is-hidden{opacity:0;position:absolute}.el-select__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;color:var(--el-select-multiple-input-color);font-family:inherit;font-size:inherit;height:24px;max-width:100%;outline:none;padding:0}.el-select__input.is-disabled{cursor:not-allowed}.el-select__input-calculator{left:0;max-width:100%;overflow:hidden;position:absolute;top:0;visibility:hidden;white-space:pre}.el-select--large .el-select__wrapper{font-size:14px;gap:6px;line-height:24px;min-height:40px;padding:8px 16px}.el-select--large .el-select__selection{gap:6px}.el-select--large .el-select__selection.is-near{margin-left:-8px}.el-select--large .el-select__prefix,.el-select--large .el-select__suffix{gap:6px}.el-select--large .el-select__input{height:24px}.el-select--small .el-select__wrapper{font-size:12px;gap:4px;line-height:20px;min-height:24px;padding:2px 8px}.el-select--small .el-select__selection{gap:4px}.el-select--small .el-select__selection.is-near{margin-left:-6px}.el-select--small .el-select__prefix,.el-select--small .el-select__suffix{gap:4px}.el-select--small .el-select__input{height:20px}.el-skeleton{--el-skeleton-circle-size:var(--el-avatar-size)}.el-skeleton__item{background:var(--el-skeleton-color);border-radius:var(--el-border-radius-base);display:inline-block;height:16px;width:100%}.el-skeleton__circle{border-radius:50%;height:var(--el-skeleton-circle-size);line-height:var(--el-skeleton-circle-size);width:var(--el-skeleton-circle-size)}.el-skeleton__button{border-radius:4px;height:40px;width:64px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{height:var(--el-font-size-small);width:100%}.el-skeleton__caption{height:var(--el-font-size-extra-small)}.el-skeleton__h1{height:var(--el-font-size-extra-large)}.el-skeleton__h3{height:var(--el-font-size-large)}.el-skeleton__h5{height:var(--el-font-size-medium)}.el-skeleton__image{align-items:center;border-radius:0;display:flex;justify-content:center;width:unset}.el-skeleton__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;height:22%;width:22%}.el-skeleton{--el-skeleton-color:var(--el-fill-color);--el-skeleton-to-color:var(--el-fill-color-darker)}@keyframes el-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.el-skeleton{width:100%}.el-skeleton__first-line,.el-skeleton__paragraph{background:var(--el-skeleton-color);height:16px;margin-top:16px}.el-skeleton.is-animated .el-skeleton__item{animation:el-skeleton-loading 1.4s ease infinite;background:linear-gradient(90deg,var(--el-skeleton-color) 25%,var(--el-skeleton-to-color) 37%,var(--el-skeleton-color) 63%);background-size:400% 100%}.el-slider{--el-slider-main-bg-color:var(--el-color-primary);--el-slider-runway-bg-color:var(--el-border-color-light);--el-slider-stop-bg-color:var(--el-color-white);--el-slider-disabled-color:var(--el-text-color-placeholder);--el-slider-border-radius:3px;--el-slider-height:6px;--el-slider-button-size:20px;--el-slider-button-wrapper-size:36px;--el-slider-button-wrapper-offset:-15px;align-items:center;display:flex;height:32px;width:100%}.el-slider__runway{background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);cursor:pointer;flex:1;height:var(--el-slider-height);position:relative}.el-slider__runway.show-input{margin-right:30px;width:auto}.el-slider__runway.is-disabled{cursor:default}.el-slider__runway.is-disabled .el-slider__bar{background-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button{border-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging,.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{transform:scale(1)}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{cursor:not-allowed}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{background-color:var(--el-slider-main-bg-color);border-bottom-left-radius:var(--el-slider-border-radius);border-top-left-radius:var(--el-slider-border-radius);height:var(--el-slider-height);position:absolute}.el-slider__button-wrapper{background-color:transparent;height:var(--el-slider-button-wrapper-size);line-height:normal;outline:none;position:absolute;text-align:center;top:var(--el-slider-button-wrapper-offset);transform:translate(-50%);-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--el-slider-button-wrapper-size);z-index:1}.el-slider__button-wrapper:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:grab}.el-slider__button-wrapper.dragging{cursor:grabbing}.el-slider__button{background-color:var(--el-color-white);border:2px solid var(--el-slider-main-bg-color);border-radius:50%;box-sizing:border-box;display:inline-block;height:var(--el-slider-button-size);transition:var(--el-transition-duration-fast);-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:var(--el-slider-button-size)}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:grab}.el-slider__button.dragging{cursor:grabbing}.el-slider__stop{background-color:var(--el-slider-stop-bg-color);border-radius:var(--el-border-radius-circle);height:var(--el-slider-height);position:absolute;transform:translate(-50%);width:var(--el-slider-height)}.el-slider__marks{height:100%;left:12px;top:0;width:18px}.el-slider__marks-text{color:var(--el-color-info);font-size:14px;margin-top:15px;position:absolute;transform:translate(-50%);white-space:pre}.el-slider.is-vertical{display:inline-flex;flex:0;height:100%;position:relative;width:auto}.el-slider.is-vertical .el-slider__runway{height:100%;margin:0 16px;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__bar{border-radius:0 0 3px 3px;height:auto;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__button-wrapper{left:var(--el-slider-button-wrapper-offset);top:auto;transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{left:15px;margin-top:0;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px}.el-space{display:inline-flex;vertical-align:top}.el-space__item{display:flex;flex-wrap:wrap}.el-space__item>*{flex:1}.el-space--vertical{flex-direction:column}.el-time-spinner{white-space:nowrap;width:100%}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{animation:rotate 2s linear infinite;height:50px;width:50px}.el-spinner-inner .path{stroke:var(--el-border-color-lighter);stroke-linecap:round;animation:dash 1.5s ease-in-out infinite}@keyframes rotate{to{transform:rotate(1turn)}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-step{flex-shrink:1;position:relative}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{flex-basis:auto!important;flex-grow:0;flex-shrink:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{border-color:var(--el-text-color-primary);color:var(--el-text-color-primary)}.el-step__head.is-wait{border-color:var(--el-text-color-placeholder);color:var(--el-text-color-placeholder)}.el-step__head.is-success{border-color:var(--el-color-success);color:var(--el-color-success)}.el-step__head.is-error{border-color:var(--el-color-danger);color:var(--el-color-danger)}.el-step__head.is-finish{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-step__icon{align-items:center;background:var(--el-bg-color);box-sizing:border-box;display:inline-flex;font-size:14px;height:24px;justify-content:center;position:relative;transition:.15s ease-out;width:24px;z-index:1}.el-step__icon.is-text{border:2px solid;border-color:inherit;border-radius:50%}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{color:inherit;display:inline-block;font-weight:700;line-height:1;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{transform:translateY(1px)}.el-step__line{background-color:var(--el-text-color-placeholder);border-color:inherit;position:absolute}.el-step__line-inner{border:1px solid;border-color:inherit;box-sizing:border-box;display:block;height:0;transition:.15s ease-out;width:0}.el-step__main{text-align:left;white-space:normal}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{color:var(--el-text-color-primary);font-weight:700}.el-step__title.is-wait{color:var(--el-text-color-placeholder)}.el-step__title.is-success{color:var(--el-color-success)}.el-step__title.is-error{color:var(--el-color-danger)}.el-step__title.is-finish{color:var(--el-color-primary)}.el-step__description{font-size:12px;font-weight:400;line-height:20px;margin-top:-5px;padding-right:10%}.el-step__description.is-process{color:var(--el-text-color-primary)}.el-step__description.is-wait{color:var(--el-text-color-placeholder)}.el-step__description.is-success{color:var(--el-color-success)}.el-step__description.is-error{color:var(--el-color-danger)}.el-step__description.is-finish{color:var(--el-color-primary)}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;left:0;right:0;top:11px}.el-step.is-vertical{display:flex}.el-step.is-vertical .el-step__head{flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{flex-grow:1;padding-left:10px}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{bottom:0;left:11px;top:0;width:2px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{align-items:center;display:flex}.el-step.is-simple .el-step__head{font-size:0;padding-right:10px;width:auto}.el-step.is-simple .el-step__icon{background:transparent;font-size:12px;height:16px;width:16px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{align-items:stretch;display:flex;flex-grow:1;position:relative}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;overflow-wrap:break-word}.el-step.is-simple .el-step__arrow{align-items:center;display:flex;flex-grow:1;justify-content:center}.el-step.is-simple .el-step__arrow:after,.el-step.is-simple .el-step__arrow:before{background:var(--el-text-color-placeholder);content:"";display:inline-block;height:15px;position:absolute;width:1px}.el-step.is-simple .el-step__arrow:before{transform:rotate(-45deg) translateY(-4px);transform-origin:0 0}.el-step.is-simple .el-step__arrow:after{transform:rotate(45deg) translateY(4px);transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-steps{display:flex}.el-steps--simple{background:var(--el-fill-color-light);border-radius:4px;padding:13px 8%}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{flex-flow:column;height:100%}.el-switch{--el-switch-on-color:var(--el-color-primary);--el-switch-off-color:var(--el-border-color);align-items:center;display:inline-flex;font-size:14px;height:32px;line-height:20px;position:relative;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{color:var(--el-text-color-primary);cursor:pointer;display:inline-block;font-size:14px;font-weight:500;height:20px;transition:var(--el-transition-duration-fast);vertical-align:middle}.el-switch__label.is-active{color:var(--el-color-primary)}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{display:inline-block;font-size:14px;line-height:1}.el-switch__label .el-icon{height:inherit}.el-switch__label .el-icon svg{vertical-align:middle}.el-switch__input{height:0;margin:0;opacity:0;position:absolute;width:0}.el-switch__input:focus-visible~.el-switch__core{outline:2px solid var(--el-switch-on-color);outline-offset:1px}.el-switch__core{align-items:center;background:var(--el-switch-off-color);border:1px solid var(--el-switch-border-color,var(--el-switch-off-color));border-radius:10px;box-sizing:border-box;cursor:pointer;display:inline-flex;height:20px;min-width:40px;outline:none;position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration)}.el-switch__core .el-switch__inner{align-items:center;display:flex;height:16px;justify-content:center;overflow:hidden;padding:0 4px 0 18px;transition:all var(--el-transition-duration);width:100%}.el-switch__core .el-switch__inner .is-icon,.el-switch__core .el-switch__inner .is-text{color:var(--el-color-white);font-size:12px;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.el-switch__core .el-switch__action{align-items:center;background-color:var(--el-color-white);border-radius:var(--el-border-radius-circle);color:var(--el-switch-off-color);display:flex;height:16px;justify-content:center;left:1px;position:absolute;transition:all var(--el-transition-duration);width:16px}.el-switch.is-checked .el-switch__core{background-color:var(--el-switch-on-color);border-color:var(--el-switch-border-color,var(--el-switch-on-color))}.el-switch.is-checked .el-switch__core .el-switch__action{color:var(--el-switch-on-color);left:calc(100% - 17px)}.el-switch.is-checked .el-switch__core .el-switch__inner{padding:0 18px 0 4px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter-from,.el-switch .label-fade-leave-active{opacity:0}.el-switch--large{font-size:14px;height:40px;line-height:24px}.el-switch--large .el-switch__label{font-size:14px;height:24px}.el-switch--large .el-switch__label *{font-size:14px}.el-switch--large .el-switch__core{border-radius:12px;height:24px;min-width:50px}.el-switch--large .el-switch__core .el-switch__inner{height:20px;padding:0 6px 0 22px}.el-switch--large .el-switch__core .el-switch__action{height:20px;width:20px}.el-switch--large.is-checked .el-switch__core .el-switch__action{left:calc(100% - 21px)}.el-switch--large.is-checked .el-switch__core .el-switch__inner{padding:0 22px 0 6px}.el-switch--small{font-size:12px;height:24px;line-height:16px}.el-switch--small .el-switch__label{font-size:12px;height:16px}.el-switch--small .el-switch__label *{font-size:12px}.el-switch--small .el-switch__core{border-radius:8px;height:16px;min-width:30px}.el-switch--small .el-switch__core .el-switch__inner{height:12px;padding:0 2px 0 14px}.el-switch--small .el-switch__core .el-switch__action{height:12px;width:12px}.el-switch--small.is-checked .el-switch__core .el-switch__action{left:calc(100% - 13px)}.el-switch--small.is-checked .el-switch__core .el-switch__inner{padding:0 14px 0 2px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{background-color:#fff;border:1px solid var(--el-border-color-lighter);border-radius:2px;box-shadow:var(--el-box-shadow-light);box-sizing:border-box}.el-table-filter__list{list-style:none;margin:0;min-width:100px;padding:5px 0}.el-table-filter__list-item{cursor:pointer;font-size:var(--el-font-size-base);line-height:36px;padding:0 10px}.el-table-filter__list-item:hover{background-color:var(--el-color-primary-light-9);color:var(--el-color-primary)}.el-table-filter__list-item.is-active{background-color:var(--el-color-primary);color:#fff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid var(--el-border-color-lighter);padding:8px}.el-table-filter__bottom button{background:transparent;border:none;color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-small);padding:0 3px}.el-table-filter__bottom button:hover{color:var(--el-color-primary)}.el-table-filter__bottom button:focus{outline:none}.el-table-filter__bottom button.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{align-items:center;display:flex;height:unset;margin-bottom:12px;margin-left:5px;margin-right:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-table{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-bg-color);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0,0,0,.15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0,0,0,.15);--el-table-index:var(--el-index-normal);background-color:var(--el-table-bg-color);box-sizing:border-box;color:var(--el-table-text-color);font-size:14px;height:-moz-fit-content;height:fit-content;max-width:100%;overflow:hidden;position:relative;width:100%}.el-table__inner-wrapper{display:flex;flex-direction:column;height:100%;position:relative}.el-table__inner-wrapper:before{bottom:0;height:1px;left:0}.el-table tbody:focus-visible{outline:none}.el-table.has-footer.el-table--fluid-height tr:last-child td.el-table__cell,.el-table.has-footer.el-table--scrollable-y tr:last-child td.el-table__cell{border-bottom-color:transparent}.el-table__empty-block{align-items:center;display:flex;justify-content:center;left:0;min-height:60px;position:sticky;text-align:center;width:100%}.el-table__empty-text{color:var(--el-text-color-secondary);line-height:60px;width:50%}.el-table__expand-column .cell{padding:0;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-table__expand-icon{color:var(--el-text-color-regular);cursor:pointer;font-size:12px;height:20px;position:relative;transition:transform var(--el-transition-duration-fast) ease-in-out}.el-table__expand-icon--expanded{transform:rotate(90deg)}.el-table__expand-icon>.el-icon{font-size:12px}.el-table__expanded-cell{background-color:var(--el-table-expanded-cell-bg-color)}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-bottom:0;border-right:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--fit .el-table__inner-wrapper:before{width:100%}.el-table thead{color:var(--el-table-header-text-color)}.el-table thead th{font-weight:600}.el-table thead.is-group th.el-table__cell{background:var(--el-fill-color-light)}.el-table .el-table__cell{box-sizing:border-box;min-width:0;padding:8px 0;position:relative;text-align:left;text-overflow:ellipsis;vertical-align:middle;z-index:var(--el-table-index)}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{border-bottom-width:0;border-right-width:0;padding:0;width:15px}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table .cell{box-sizing:border-box;line-height:23px;overflow:hidden;overflow-wrap:break-word;padding:0 12px;text-overflow:ellipsis;white-space:normal}.el-table .cell.el-tooltip{min-width:50px;white-space:nowrap}.el-table--large{font-size:var(--el-font-size-base)}.el-table--large .el-table__cell{padding:12px 0}.el-table--large .cell{padding:0 16px}.el-table--default{font-size:14px}.el-table--default .el-table__cell{padding:8px 0}.el-table--default .cell{padding:0 12px}.el-table--small{font-size:12px}.el-table--small .el-table__cell{padding:4px 0}.el-table--small .cell{padding:0 8px}.el-table tr{background-color:var(--el-table-tr-bg-color)}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:var(--el-table-border)}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{background-color:var(--el-table-header-bg-color)}.el-table th.el-table__cell>.cell.highlight{color:var(--el-color-primary)}.el-table th.el-table__cell.required>div:before{background:#ff4d51;border-radius:50%;content:"";display:inline-block;height:8px;margin-right:5px;vertical-align:middle;width:8px}.el-table td.el-table__cell div{box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table--border .el-table__inner-wrapper:after,.el-table--border:after,.el-table--border:before,.el-table__inner-wrapper:before{background-color:var(--el-table-border-color);content:"";position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table--border .el-table__inner-wrapper:after{height:1px;left:0;top:0;width:100%;z-index:calc(var(--el-table-index) + 2)}.el-table--border:before{height:100%;left:0;top:-1px;width:1px}.el-table--border:after{height:100%;right:0;top:-1px;width:1px}.el-table--border .el-table__inner-wrapper{border-bottom:none;border-right:none}.el-table--border .el-table__footer-wrapper{flex-shrink:0;position:relative}.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:var(--el-table-border);border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:var(--el-table-border)}.el-table--hidden{visibility:hidden}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__body-wrapper tr td.el-table-fixed-column--left,.el-table__body-wrapper tr td.el-table-fixed-column--right,.el-table__body-wrapper tr th.el-table-fixed-column--left,.el-table__body-wrapper tr th.el-table-fixed-column--right,.el-table__footer-wrapper tr td.el-table-fixed-column--left,.el-table__footer-wrapper tr td.el-table-fixed-column--right,.el-table__footer-wrapper tr th.el-table-fixed-column--left,.el-table__footer-wrapper tr th.el-table-fixed-column--right,.el-table__header-wrapper tr td.el-table-fixed-column--left,.el-table__header-wrapper tr td.el-table-fixed-column--right,.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background:inherit;position:sticky!important;z-index:calc(var(--el-table-index) + 1)}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{bottom:-1px;box-shadow:none;content:"";overflow-x:hidden;overflow-y:hidden;pointer-events:none;position:absolute;top:0;touch-action:none;width:10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before{left:-10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{box-shadow:none;right:-10px}.el-table__body-wrapper tr td.el-table__fixed-right-patch,.el-table__body-wrapper tr th.el-table__fixed-right-patch,.el-table__footer-wrapper tr td.el-table__fixed-right-patch,.el-table__footer-wrapper tr th.el-table__fixed-right-patch,.el-table__header-wrapper tr td.el-table__fixed-right-patch,.el-table__header-wrapper tr th.el-table__fixed-right-patch{background:#fff;position:sticky!important;right:0;z-index:calc(var(--el-table-index) + 1)}.el-table__header-wrapper{flex-shrink:0}.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body,.el-table__footer,.el-table__header{border-collapse:separate;table-layout:fixed}.el-table__header-wrapper{overflow:hidden}.el-table__header-wrapper tbody td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__footer-wrapper{flex-shrink:0;overflow:hidden}.el-table__footer-wrapper tfoot td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__body-wrapper .el-table-column--selection>.cell,.el-table__header-wrapper .el-table-column--selection>.cell{align-items:center;display:inline-flex;height:23px}.el-table__body-wrapper .el-table-column--selection .el-checkbox,.el-table__header-wrapper .el-table-column--selection .el-checkbox{height:unset}.el-table.is-scrolling-left .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-left.el-table--border .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:var(--el-table-border)}.el-table.is-scrolling-left th.el-table-fixed-column--left{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-right th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-middle .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-none .el-table-fixed-column--left.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--left.is-last-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-last-column:before{box-shadow:none}.el-table.is-scrolling-none th.el-table-fixed-column--left,.el-table.is-scrolling-none th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body-wrapper{flex:1;overflow:hidden;position:relative}.el-table__body-wrapper .el-scrollbar__bar{z-index:calc(var(--el-table-index) + 2)}.el-table .caret-wrapper{align-items:center;cursor:pointer;display:inline-flex;flex-direction:column;height:14px;overflow:initial;position:relative;vertical-align:middle;width:24px}.el-table .sort-caret{border:5px solid transparent;height:0;left:7px;position:absolute;width:0}.el-table .sort-caret.ascending{border-bottom-color:var(--el-text-color-placeholder);top:-5px}.el-table .sort-caret.descending{border-top-color:var(--el-text-color-placeholder);bottom:-3px}.el-table .ascending .sort-caret.ascending{border-bottom-color:var(--el-color-primary)}.el-table .descending .sort-caret.descending{border-top-color:var(--el-color-primary)}.el-table .hidden-columns{position:absolute;visibility:hidden;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:var(--el-fill-color-lighter)}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell,.el-table__body tr>td.hover-cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table.el-table--scrollable-y .el-table__body-header{position:sticky;top:0;z-index:calc(var(--el-table-index) + 2)}.el-table.el-table--scrollable-y .el-table__body-footer{bottom:0;position:sticky;z-index:calc(var(--el-table-index) + 2)}.el-table__column-resize-proxy{border-left:var(--el-table-border);bottom:0;left:200px;position:absolute;top:0;width:0;z-index:calc(var(--el-table-index) + 9)}.el-table__column-filter-trigger{cursor:pointer;display:inline-block}.el-table__column-filter-trigger i{color:var(--el-color-info);font-size:14px;vertical-align:middle}.el-table__border-left-patch{height:100%;top:0;width:1px}.el-table__border-bottom-patch,.el-table__border-left-patch{background-color:var(--el-table-border-color);left:0;position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table__border-bottom-patch{height:1px}.el-table__border-right-patch{background-color:var(--el-table-border-color);height:100%;position:absolute;top:0;width:1px;z-index:calc(var(--el-table-index) + 2)}.el-table--enable-row-transition .el-table__body td.el-table__cell{transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;height:12px;line-height:12px;margin-right:8px;text-align:center;width:12px}.el-table .el-table.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table:not(.el-table--border) .el-table__cell{border-right:none}.el-table:not(.el-table--border)>.el-table__inner-wrapper:after{content:none}.el-table-v2{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-bg-color);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0,0,0,.15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0,0,0,.15);--el-table-index:var(--el-index-normal);font-size:14px}.el-table-v2 *{box-sizing:border-box}.el-table-v2__root{position:relative}.el-table-v2__root:hover .el-table-v2__main .el-virtual-scrollbar{opacity:1}.el-table-v2__main{background-color:var(--el-bg-color);display:flex;flex-direction:column-reverse;left:0;overflow:hidden;position:absolute;top:0}.el-table-v2__main .el-vl__horizontal,.el-table-v2__main .el-vl__vertical{z-index:2}.el-table-v2__left{background-color:var(--el-bg-color);box-shadow:2px 0 4px #0000000f;display:flex;flex-direction:column-reverse;left:0;overflow:hidden;position:absolute;top:0}.el-table-v2__left .el-virtual-scrollbar{opacity:0}.el-table-v2__left .el-vl__horizontal,.el-table-v2__left .el-vl__vertical{z-index:-1}.el-table-v2__right{background-color:var(--el-bg-color);box-shadow:-2px 0 4px #0000000f;display:flex;flex-direction:column-reverse;overflow:hidden;position:absolute;right:0;top:0}.el-table-v2__right .el-virtual-scrollbar{opacity:0}.el-table-v2__right .el-vl__horizontal,.el-table-v2__right .el-vl__vertical{z-index:-1}.el-table-v2__header-row,.el-table-v2__row{padding-inline-end:var(--el-table-scrollbar-size)}.el-table-v2__header-wrapper{overflow:hidden}.el-table-v2__header{overflow:hidden;position:relative}.el-table-v2__footer{bottom:0;overflow:hidden;right:0}.el-table-v2__empty,.el-table-v2__footer,.el-table-v2__overlay{left:0;position:absolute}.el-table-v2__overlay{bottom:0;right:0;top:0;z-index:9999}.el-table-v2__header-row{border-bottom:var(--el-table-border);display:flex}.el-table-v2__header-cell{align-items:center;background-color:var(--el-table-header-bg-color);color:var(--el-table-header-text-color);display:flex;font-weight:700;height:100%;overflow:hidden;padding:0 8px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-table-v2__header-cell.is-align-center{justify-content:center;text-align:center}.el-table-v2__header-cell.is-align-right{justify-content:flex-end;text-align:right}.el-table-v2__header-cell.is-sortable{cursor:pointer}.el-table-v2__header-cell:hover .el-icon{display:block}.el-table-v2__sort-icon{display:none;opacity:.6;transition:opacity,display var(--el-transition-duration)}.el-table-v2__sort-icon.is-sorting{display:block;opacity:1}.el-table-v2__row{align-items:center;border-bottom:var(--el-table-border);display:flex;transition:background-color var(--el-transition-duration)}.el-table-v2__row.is-hovered,.el-table-v2__row:hover{background-color:var(--el-table-row-hover-bg-color)}.el-table-v2__row-cell{align-items:center;display:flex;height:100%;overflow:hidden;padding:0 8px}.el-table-v2__row-cell.is-align-center{justify-content:center;text-align:center}.el-table-v2__row-cell.is-align-right{justify-content:flex-end;text-align:right}.el-table-v2__expand-icon{cursor:pointer;margin:0 4px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-table-v2__expand-icon svg{transition:transform var(--el-transition-duration)}.el-table-v2__expand-icon.is-expanded svg{transform:rotate(90deg)}.el-table-v2:not(.is-dynamic) .el-table-v2__cell-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-table-v2.is-dynamic .el-table-v2__row{align-items:stretch;overflow:hidden}.el-table-v2.is-dynamic .el-table-v2__row .el-table-v2__row-cell{overflow-wrap:break-word}.el-tabs{--el-tabs-header-height:40px}.el-tabs__header{align-items:center;display:flex;justify-content:space-between;margin:0 0 15px;padding:0;position:relative}.el-tabs__header-vertical{flex-direction:column}.el-tabs__active-bar{background-color:var(--el-color-primary);bottom:0;height:2px;left:0;list-style:none;position:absolute;transition:width var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),transform var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);z-index:1}.el-tabs__new-tab{align-items:center;border:1px solid var(--el-border-color);border-radius:3px;color:var(--el-text-color-primary);cursor:pointer;display:flex;font-size:12px;height:20px;justify-content:center;line-height:20px;margin:10px 0 10px 10px;text-align:center;transition:all .15s;width:20px}.el-tabs__new-tab .is-icon-plus{height:inherit;transform:scale(.8);width:inherit}.el-tabs__new-tab .is-icon-plus svg{vertical-align:middle}.el-tabs__new-tab:hover{color:var(--el-color-primary)}.el-tabs__new-tab-vertical{margin-left:0}.el-tabs__nav-wrap{flex:1 auto;margin-bottom:-1px;overflow:hidden;position:relative}.el-tabs__nav-wrap:after{background-color:var(--el-border-color-light);bottom:0;content:"";height:2px;left:0;position:absolute;width:100%;z-index:var(--el-index-normal)}.el-tabs__nav-wrap.is-scrollable{box-sizing:border-box;padding:0 20px}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{color:var(--el-text-color-secondary);cursor:pointer;font-size:12px;line-height:44px;position:absolute;text-align:center;width:20px}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{display:flex;float:left;position:relative;transition:transform var(--el-transition-duration);white-space:nowrap;z-index:calc(var(--el-index-normal) + 1)}.el-tabs__nav.is-stretch{display:flex;min-width:100%}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{align-items:center;box-sizing:border-box;color:var(--el-text-color-primary);display:flex;font-size:var(--el-font-size-base);font-weight:500;height:var(--el-tabs-header-height);justify-content:center;list-style:none;padding:0 20px;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus-visible{border-radius:3px;box-shadow:0 0 2px 2px var(--el-color-primary) inset}.el-tabs__item .is-icon-close{border-radius:50%;margin-left:5px;text-align:center;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs__item .is-icon-close:before{display:inline-block;transform:scale(.9)}.el-tabs__item .is-icon-close:hover{background-color:var(--el-text-color-placeholder);color:#fff}.el-tabs__item.is-active,.el-tabs__item:hover{color:var(--el-color-primary)}.el-tabs__item:hover{cursor:pointer}.el-tabs__item.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid var(--el-border-color-light);height:var(--el-tabs-header-height)}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid var(--el-border-color-light);border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close{font-size:12px;height:14px;overflow:hidden;position:relative;right:-2px;transform-origin:100% 50%;width:0}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid var(--el-border-color-light);transition:color var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),padding var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .is-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:var(--el-bg-color)}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .is-icon-close{width:14px}.el-tabs--border-card{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-light);margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{border:1px solid transparent;color:var(--el-text-color-secondary);margin-top:-1px;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{background-color:var(--el-bg-color-overlay);border-left-color:var(--el-border-color);border-right-color:var(--el-border-color);color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:var(--el-disabled-text-color)}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2):not(.is-active).is-closable:hover{padding-left:13px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child:not(.is-active).is-closable:hover{padding-right:13px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid var(--el-border-color)}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-bottom:0;margin-top:-1px}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{bottom:auto;height:auto;top:0;width:2px}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{cursor:pointer;height:30px;line-height:30px;text-align:center;width:100%}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{bottom:0;right:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{bottom:auto;height:100%;top:0;width:2px}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{flex-direction:column}.el-tabs--left .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-left{justify-content:flex-end}.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-right{justify-content:flex-start}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-bottom:none;border-left:none;border-right:1px solid var(--el-border-color-light);border-top:1px solid var(--el-border-color-light);text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid var(--el-border-color-light);border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:none;border-right:1px solid #fff}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-radius:4px 0 0 4px;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid var(--el-border-color)}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:rgb(209,219,229) transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid var(--el-border-color-light)}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid var(--el-border-color-light);border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:1px solid #fff;border-right:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-left:none;border-radius:0 4px 4px 0}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid var(--el-border-color)}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:rgb(209,219,229) transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{animation:slideInRight-enter var(--el-transition-duration)}.slideInRight-leave{animation:slideInRight-leave var(--el-transition-duration);left:0;position:absolute;right:0}.slideInLeft-enter{animation:slideInLeft-enter var(--el-transition-duration)}.slideInLeft-leave{animation:slideInLeft-leave var(--el-transition-duration);left:0;position:absolute;right:0}@keyframes slideInRight-enter{0%{opacity:0;transform:translate(100%);transform-origin:0 0}to{opacity:1;transform:translate(0);transform-origin:0 0}}@keyframes slideInRight-leave{0%{opacity:1;transform:translate(0);transform-origin:0 0}to{opacity:0;transform:translate(100%);transform-origin:0 0}}@keyframes slideInLeft-enter{0%{opacity:0;transform:translate(-100%);transform-origin:0 0}to{opacity:1;transform:translate(0);transform-origin:0 0}}@keyframes slideInLeft-leave{0%{opacity:1;transform:translate(0);transform-origin:0 0}to{opacity:0;transform:translate(-100%);transform-origin:0 0}}.el-tag{--el-tag-font-size:12px;--el-tag-border-radius:4px;--el-tag-border-radius-rounded:9999px;align-items:center;background-color:var(--el-tag-bg-color);border-color:var(--el-tag-border-color);border-radius:var(--el-tag-border-radius);border-style:solid;border-width:1px;box-sizing:border-box;color:var(--el-tag-text-color);display:inline-flex;font-size:var(--el-tag-font-size);height:24px;justify-content:center;line-height:1;padding:0 9px;vertical-align:middle;white-space:nowrap;--el-icon-size:14px}.el-tag,.el-tag.el-tag--primary{--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-bg-color:var(--el-color-success-light-9);--el-tag-border-color:var(--el-color-success-light-8);--el-tag-hover-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-bg-color:var(--el-color-warning-light-9);--el-tag-border-color:var(--el-color-warning-light-8);--el-tag-hover-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-bg-color:var(--el-color-danger-light-9);--el-tag-border-color:var(--el-color-danger-light-8);--el-tag-hover-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-bg-color:var(--el-color-error-light-9);--el-tag-border-color:var(--el-color-error-light-8);--el-tag-hover-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-bg-color:var(--el-color-info-light-9);--el-tag-border-color:var(--el-color-info-light-8);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-hit{border-color:var(--el-color-primary)}.el-tag.is-round{border-radius:var(--el-tag-border-radius-rounded)}.el-tag .el-tag__close{color:var(--el-tag-text-color);flex-shrink:0}.el-tag .el-tag__close:hover{background-color:var(--el-tag-hover-color);color:var(--el-color-white)}.el-tag.el-tag--primary{--el-tag-text-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-text-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-text-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-text-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-text-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-text-color:var(--el-color-info)}.el-tag .el-icon{border-radius:50%;cursor:pointer;font-size:calc(var(--el-icon-size) - 2px);height:var(--el-icon-size);width:var(--el-icon-size)}.el-tag .el-tag__close{margin-left:6px}.el-tag--dark{--el-tag-text-color:var(--el-color-white)}.el-tag--dark,.el-tag--dark.el-tag--primary{--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3)}.el-tag--dark.el-tag--success{--el-tag-bg-color:var(--el-color-success);--el-tag-border-color:var(--el-color-success);--el-tag-hover-color:var(--el-color-success-light-3)}.el-tag--dark.el-tag--warning{--el-tag-bg-color:var(--el-color-warning);--el-tag-border-color:var(--el-color-warning);--el-tag-hover-color:var(--el-color-warning-light-3)}.el-tag--dark.el-tag--danger{--el-tag-bg-color:var(--el-color-danger);--el-tag-border-color:var(--el-color-danger);--el-tag-hover-color:var(--el-color-danger-light-3)}.el-tag--dark.el-tag--error{--el-tag-bg-color:var(--el-color-error);--el-tag-border-color:var(--el-color-error);--el-tag-hover-color:var(--el-color-error-light-3)}.el-tag--dark.el-tag--info{--el-tag-bg-color:var(--el-color-info);--el-tag-border-color:var(--el-color-info);--el-tag-hover-color:var(--el-color-info-light-3)}.el-tag--dark.el-tag--danger,.el-tag--dark.el-tag--error,.el-tag--dark.el-tag--info,.el-tag--dark.el-tag--primary,.el-tag--dark.el-tag--success,.el-tag--dark.el-tag--warning{--el-tag-text-color:var(--el-color-white)}.el-tag--plain,.el-tag--plain.el-tag--primary{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-primary-light-5);--el-tag-hover-color:var(--el-color-primary)}.el-tag--plain.el-tag--success{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-success-light-5);--el-tag-hover-color:var(--el-color-success)}.el-tag--plain.el-tag--warning{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-warning-light-5);--el-tag-hover-color:var(--el-color-warning)}.el-tag--plain.el-tag--danger{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-danger-light-5);--el-tag-hover-color:var(--el-color-danger)}.el-tag--plain.el-tag--error{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-error-light-5);--el-tag-hover-color:var(--el-color-error)}.el-tag--plain.el-tag--info{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-info-light-5);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-closable{padding-right:5px}.el-tag--large{height:32px;padding:0 11px;--el-icon-size:16px}.el-tag--large .el-tag__close{margin-left:8px}.el-tag--large.is-closable{padding-right:7px}.el-tag--small{height:20px;padding:0 7px;--el-icon-size:12px}.el-tag--small .el-tag__close{margin-left:4px}.el-tag--small.is-closable{padding-right:3px}.el-tag--small .el-icon-close{transform:scale(.8)}.el-tag.el-tag--primary.is-hit{border-color:var(--el-color-primary)}.el-tag.el-tag--success.is-hit{border-color:var(--el-color-success)}.el-tag.el-tag--warning.is-hit{border-color:var(--el-color-warning)}.el-tag.el-tag--danger.is-hit{border-color:var(--el-color-danger)}.el-tag.el-tag--error.is-hit{border-color:var(--el-color-error)}.el-tag.el-tag--info.is-hit{border-color:var(--el-color-info)}.el-text{--el-text-font-size:var(--el-font-size-base);--el-text-color:var(--el-text-color-regular);align-self:center;color:var(--el-text-color);font-size:var(--el-text-font-size);margin:0;overflow-wrap:break-word;padding:0}.el-text.is-truncated{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-text.is-line-clamp{display:-webkit-inline-box;-webkit-box-orient:vertical;overflow:hidden}.el-text--large{--el-text-font-size:var(--el-font-size-medium)}.el-text--default{--el-text-font-size:var(--el-font-size-base)}.el-text--small{--el-text-font-size:var(--el-font-size-extra-small)}.el-text.el-text--primary{--el-text-color:var(--el-color-primary)}.el-text.el-text--success{--el-text-color:var(--el-color-success)}.el-text.el-text--warning{--el-text-color:var(--el-color-warning)}.el-text.el-text--danger{--el-text-color:var(--el-color-danger)}.el-text.el-text--error{--el-text-color:var(--el-color-error)}.el-text.el-text--info{--el-text-color:var(--el-color-info)}.el-text>.el-icon{vertical-align:-2px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{margin:0;max-height:200px}.time-select-item{font-size:14px;line-height:20px;padding:8px 10px}.time-select-item.disabled{color:var(--el-datepicker-border-color);cursor:not-allowed}.time-select-item:hover{background-color:var(--el-fill-color-light);cursor:pointer;font-weight:700}.time-select .time-select-item.selected:not(.disabled){color:var(--el-color-primary);font-weight:700}.el-timeline-item{padding-bottom:20px;position:relative}.el-timeline-item__wrapper{padding-left:28px;position:relative;top:-3px}.el-timeline-item__tail{border-left:2px solid var(--el-timeline-node-color);height:100%;left:4px;position:absolute}.el-timeline-item .el-timeline-item__icon{color:var(--el-color-white);font-size:var(--el-font-size-small)}.el-timeline-item__node{align-items:center;background-color:var(--el-timeline-node-color);border-color:var(--el-timeline-node-color);border-radius:50%;box-sizing:border-box;display:flex;justify-content:center;position:absolute}.el-timeline-item__node--normal{height:var(--el-timeline-node-size-normal);left:-1px;width:var(--el-timeline-node-size-normal)}.el-timeline-item__node--large{height:var(--el-timeline-node-size-large);left:-2px;width:var(--el-timeline-node-size-large)}.el-timeline-item__node.is-hollow{background:var(--el-color-white);border-style:solid;border-width:2px}.el-timeline-item__node--primary{background-color:var(--el-color-primary);border-color:var(--el-color-primary)}.el-timeline-item__node--success{background-color:var(--el-color-success);border-color:var(--el-color-success)}.el-timeline-item__node--warning{background-color:var(--el-color-warning);border-color:var(--el-color-warning)}.el-timeline-item__node--danger{background-color:var(--el-color-danger);border-color:var(--el-color-danger)}.el-timeline-item__node--info{background-color:var(--el-color-info);border-color:var(--el-color-info)}.el-timeline-item__dot{align-items:center;display:flex;justify-content:center;position:absolute}.el-timeline-item__content{color:var(--el-text-color-primary)}.el-timeline-item__timestamp{color:var(--el-text-color-secondary);font-size:var(--el-font-size-small);line-height:1}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-timeline{--el-timeline-node-size-normal:12px;--el-timeline-node-size-large:14px;--el-timeline-node-color:var(--el-border-color-light);font-size:var(--el-font-size-base);list-style:none;margin:0}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline .el-timeline-item__center{align-items:center;display:flex}.el-timeline .el-timeline-item__center .el-timeline-item__wrapper{width:100%}.el-timeline .el-timeline-item__center .el-timeline-item__tail{top:0}.el-timeline .el-timeline-item__center:first-child .el-timeline-item__tail{height:calc(50% + 10px);top:calc(50% - 10px)}.el-timeline .el-timeline-item__center:last-child .el-timeline-item__tail{display:block;height:calc(50% - 10px)}.el-tooltip-v2__content{--el-tooltip-v2-padding:5px 10px;--el-tooltip-v2-border-radius:4px;--el-tooltip-v2-border-color:var(--el-border-color);background-color:var(--el-color-white);border:1px solid var(--el-border-color);border-radius:var(--el-tooltip-v2-border-radius);color:var(--el-color-black);padding:var(--el-tooltip-v2-padding)}.el-tooltip-v2__arrow{color:var(--el-color-white);height:var(--el-tooltip-v2-arrow-height);left:var(--el-tooltip-v2-arrow-x);pointer-events:none;position:absolute;top:var(--el-tooltip-v2-arrow-y);width:var(--el-tooltip-v2-arrow-width)}.el-tooltip-v2__arrow:after,.el-tooltip-v2__arrow:before{border:var(--el-tooltip-v2-arrow-border-width) solid transparent;content:"";height:0;position:absolute;width:0}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow{bottom:0}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow:before{border-bottom:0;border-top-color:var(--el-color-white);border-top-width:var(--el-tooltip-v2-arrow-border-width);top:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow:after{border-bottom:0;border-top-color:var(--el-border-color);border-top-width:var(--el-tooltip-v2-arrow-border-width);top:100%;z-index:-1}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow{top:0}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow:before{border-bottom-color:var(--el-color-white);border-bottom-width:var(--el-tooltip-v2-arrow-border-width);border-top:0;bottom:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow:after{border-bottom-color:var(--el-border-color);border-bottom-width:var(--el-tooltip-v2-arrow-border-width);border-top:0;bottom:100%;z-index:-1}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow{right:0}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow:before{border-left-color:var(--el-color-white);border-left-width:var(--el-tooltip-v2-arrow-border-width);border-right:0;left:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow:after{border-left-color:var(--el-border-color);border-left-width:var(--el-tooltip-v2-arrow-border-width);border-right:0;left:100%;z-index:-1}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow{left:0}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow:before{border-left:0;border-right-color:var(--el-color-white);border-right-width:var(--el-tooltip-v2-arrow-border-width);right:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow:after{border-left:0;border-right-color:var(--el-border-color);border-right-width:var(--el-tooltip-v2-arrow-border-width);right:100%;z-index:-1}.el-tooltip-v2__content.is-dark{--el-tooltip-v2-border-color:transparent;color:var(--el-color-white)}.el-tooltip-v2__content.is-dark,.el-tooltip-v2__content.is-dark .el-tooltip-v2__arrow{background-color:var(--el-color-black);border-color:transparent}.el-transfer{--el-transfer-border-color:var(--el-border-color-lighter);--el-transfer-border-radius:var(--el-border-radius-base);--el-transfer-panel-width:200px;--el-transfer-panel-header-height:40px;--el-transfer-panel-header-bg-color:var(--el-fill-color-light);--el-transfer-panel-footer-height:40px;--el-transfer-panel-body-height:278px;--el-transfer-item-height:30px;--el-transfer-filter-height:32px;font-size:var(--el-font-size-base)}.el-transfer__buttons{display:inline-block;padding:0 30px;vertical-align:middle}.el-transfer__button{vertical-align:top}.el-transfer__button:nth-child(2){margin:0 0 0 10px}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button .el-icon+span{margin-left:0}.el-transfer-panel{background:var(--el-bg-color-overlay);box-sizing:border-box;display:inline-block;max-height:100%;overflow:hidden;position:relative;text-align:left;vertical-align:middle;width:var(--el-transfer-panel-width)}.el-transfer-panel__body{border-bottom:1px solid var(--el-transfer-border-color);border-bottom-left-radius:var(--el-transfer-border-radius);border-bottom-right-radius:var(--el-transfer-border-radius);border-left:1px solid var(--el-transfer-border-color);border-right:1px solid var(--el-transfer-border-color);height:var(--el-transfer-panel-body-height);overflow:hidden}.el-transfer-panel__body.is-with-footer{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.el-transfer-panel__list{box-sizing:border-box;height:var(--el-transfer-panel-body-height);list-style:none;margin:0;overflow:auto;padding:6px 0}.el-transfer-panel__list.is-filterable{height:calc(100% - var(--el-transfer-filter-height) - 30px);padding-top:0}.el-transfer-panel__item{display:block!important;height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);padding-left:15px}.el-transfer-panel__item+.el-transfer-panel__item{margin-left:0}.el-transfer-panel__item.el-checkbox{color:var(--el-text-color-regular)}.el-transfer-panel__item:hover{color:var(--el-color-primary)}.el-transfer-panel__item.el-checkbox .el-checkbox__label{box-sizing:border-box;display:block;line-height:var(--el-transfer-item-height);overflow:hidden;padding-left:22px;text-overflow:ellipsis;white-space:nowrap;width:100%}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{box-sizing:border-box;padding:15px;text-align:center}.el-transfer-panel__filter .el-input__inner{border-radius:calc(var(--el-transfer-filter-height)/2);box-sizing:border-box;display:inline-block;font-size:12px;height:var(--el-transfer-filter-height);width:100%}.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-transfer-panel .el-transfer-panel__header{align-items:center;background:var(--el-transfer-panel-header-bg-color);border:1px solid var(--el-transfer-border-color);border-top-left-radius:var(--el-transfer-border-radius);border-top-right-radius:var(--el-transfer-border-radius);box-sizing:border-box;color:var(--el-color-black);display:flex;height:var(--el-transfer-panel-header-height);margin:0;padding-left:15px}.el-transfer-panel .el-transfer-panel__header .el-checkbox{align-items:center;display:flex;position:relative;width:100%}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{color:var(--el-text-color-primary);font-size:16px;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{color:var(--el-text-color-secondary);font-size:12px;font-weight:400;position:absolute;right:15px;top:50%;transform:translate3d(0,-50%,0)}.el-transfer-panel .el-transfer-panel__footer{background:var(--el-bg-color-overlay);border:1px solid var(--el-transfer-border-color);border-bottom-left-radius:var(--el-transfer-border-radius);border-bottom-right-radius:var(--el-transfer-border-radius);height:var(--el-transfer-panel-footer-height);margin:0;padding:0}.el-transfer-panel .el-transfer-panel__footer:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{color:var(--el-text-color-regular);padding-left:20px}.el-transfer-panel .el-transfer-panel__empty{color:var(--el-text-color-secondary);height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);margin:0;padding:6px 15px 0;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{border-radius:3px;height:14px;width:14px}.el-transfer-panel .el-checkbox__inner:after{height:6px;left:4px;width:3px}.el-tree{--el-tree-node-content-height:26px;--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder);background:var(--el-fill-color-blank);color:var(--el-tree-text-color);cursor:default;font-size:var(--el-font-size-base);position:relative}.el-tree__empty-block{height:100%;min-height:60px;position:relative;text-align:center;width:100%}.el-tree__empty-text{color:var(--el-text-color-secondary);font-size:var(--el-font-size-base);left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.el-tree__drop-indicator{background-color:var(--el-color-primary);height:1px;left:0;position:absolute;right:0}.el-tree-node{outline:none;white-space:nowrap}.el-tree-node:focus>.el-tree-node__content{background-color:var(--el-tree-node-hover-bg-color)}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:var(--el-color-primary);color:#fff}.el-tree-node__content{--el-checkbox-height:var(--el-tree-node-content-height);align-items:center;cursor:pointer;display:flex;height:var(--el-tree-node-content-height)}.el-tree-node__content>.el-tree-node__expand-icon{box-sizing:content-box;padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:var(--el-tree-node-hover-bg-color)}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{color:var(--el-tree-expand-icon-color);cursor:pointer;font-size:12px;transform:rotate(0);transition:transform var(--el-transition-duration) ease-in-out}.el-tree-node__expand-icon.expanded{transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default;visibility:hidden}.el-tree-node__expand-icon.is-hidden{visibility:hidden}.el-tree-node__loading-icon{color:var(--el-tree-expand-icon-color);font-size:var(--el-font-size-base);margin-right:8px}.el-tree-node>.el-tree-node__children{background-color:transparent;overflow:hidden}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:var(--el-color-primary-light-9)}.el-tree-select{--el-tree-node-content-height:26px;--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder)}.el-tree-select__popper .el-tree-node__expand-icon{margin-left:8px}.el-tree-select__popper .el-tree-node.is-checked>.el-tree-node__content .el-select-dropdown__item.selected:after{content:none}.el-tree-select__popper .el-select-dropdown__list>.el-select-dropdown__item{padding-left:32px}.el-tree-select__popper .el-select-dropdown__item{background:transparent!important;flex:1;height:20px;line-height:20px;padding-left:0}.el-upload{--el-upload-dragger-padding-horizontal:40px;--el-upload-dragger-padding-vertical:10px;align-items:center;cursor:pointer;display:inline-flex;justify-content:center;outline:none}.el-upload__input{display:none}.el-upload__tip{color:var(--el-text-color-regular);font-size:12px;margin-top:7px}.el-upload iframe{filter:alpha(opacity=0);left:0;opacity:0;position:absolute;top:0;z-index:-1}.el-upload--picture-card{--el-upload-picture-card-size:148px;align-items:center;background-color:var(--el-fill-color-lighter);border:1px dashed var(--el-border-color-darker);border-radius:6px;box-sizing:border-box;cursor:pointer;display:inline-flex;height:var(--el-upload-picture-card-size);justify-content:center;vertical-align:top;width:var(--el-upload-picture-card-size)}.el-upload--picture-card>i{color:var(--el-text-color-secondary);font-size:28px}.el-upload--picture-card:hover{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload.is-drag{display:block}.el-upload:focus{color:var(--el-color-primary)}.el-upload:focus,.el-upload:focus .el-upload-dragger{border-color:var(--el-color-primary)}.el-upload-dragger{background-color:var(--el-fill-color-blank);border:1px dashed var(--el-border-color);border-radius:6px;box-sizing:border-box;cursor:pointer;overflow:hidden;padding:var(--el-upload-dragger-padding-horizontal) var(--el-upload-dragger-padding-vertical);position:relative;text-align:center}.el-upload-dragger .el-icon--upload{color:var(--el-text-color-placeholder);font-size:67px;line-height:50px;margin-bottom:16px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:var(--el-border);margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:var(--el-text-color-regular);font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:var(--el-color-primary);font-style:normal}.el-upload-dragger:hover{border-color:var(--el-color-primary)}.el-upload-dragger.is-dragover{background-color:var(--el-color-primary-light-9);border:2px dashed var(--el-color-primary);padding:calc(var(--el-upload-dragger-padding-horizontal) - 1px) calc(var(--el-upload-dragger-padding-vertical) - 1px)}.el-upload-list{list-style:none;margin:10px 0 0;padding:0;position:relative}.el-upload-list__item{border-radius:4px;box-sizing:border-box;color:var(--el-text-color-regular);font-size:14px;margin-bottom:5px;position:relative;transition:all .5s cubic-bezier(.55,0,.1,1);width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item .el-icon--upload-success{color:var(--el-color-success)}.el-upload-list__item .el-icon--close{color:var(--el-text-color-regular);cursor:pointer;display:none;opacity:.75;position:absolute;right:5px;top:50%;transform:translateY(-50%);transition:opacity var(--el-transition-duration)}.el-upload-list__item .el-icon--close:hover{color:var(--el-color-primary);opacity:1}.el-upload-list__item .el-icon--close-tip{color:var(--el-color-primary);cursor:pointer;display:none;font-size:12px;font-style:normal;opacity:1;position:absolute;right:5px;top:1px}.el-upload-list__item:hover{background-color:var(--el-fill-color-light)}.el-upload-list__item:hover .el-icon--close{display:inline-flex}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item .el-upload-list__item-info{display:inline-flex;flex-direction:column;justify-content:center;margin-left:4px;width:calc(100% - 30px)}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:var(--el-color-primary);cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon--close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon--close-tip,.el-upload-list__item.is-success:not(.focusing):focus .el-icon--close-tip{display:none}.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label{display:none;opacity:0}.el-upload-list__item-name{align-items:center;color:var(--el-text-color-regular);display:inline-flex;font-size:var(--el-font-size-base);padding:0 4px;text-align:center;transition:color var(--el-transition-duration)}.el-upload-list__item-name .el-icon{color:var(--el-text-color-secondary);margin-right:6px}.el-upload-list__item-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-upload-list__item-status-label{align-items:center;display:none;height:100%;justify-content:center;line-height:inherit;position:absolute;right:5px;top:0;transition:opacity var(--el-transition-duration)}.el-upload-list__item-delete{color:var(--el-text-color-regular);display:none;font-size:12px;position:absolute;right:10px;top:0}.el-upload-list__item-delete:hover{color:var(--el-color-primary)}.el-upload-list--picture-card{--el-upload-list-picture-card-size:148px;display:inline-flex;flex-wrap:wrap;margin:0}.el-upload-list--picture-card .el-upload-list__item{background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:inline-flex;height:var(--el-upload-list-picture-card-size);margin:0 8px 8px 0;overflow:hidden;padding:0;width:var(--el-upload-list-picture-card-size)}.el-upload-list--picture-card .el-upload-list__item .el-icon--check,.el-upload-list--picture-card .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon--close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:block;opacity:0}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{height:100%;-o-object-fit:contain;object-fit:contain;width:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{align-items:center;background-color:var(--el-overlay-color-lighter);color:#fff;cursor:default;display:inline-flex;font-size:20px;height:100%;justify-content:center;left:0;opacity:0;position:absolute;top:0;transition:opacity var(--el-transition-duration);width:100%}.el-upload-list--picture-card .el-upload-list__item-actions span{cursor:pointer;display:none}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:16px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{color:inherit;font-size:inherit;position:static}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-flex}.el-upload-list--picture-card .el-progress{bottom:auto;left:50%;top:50%;transform:translate(-50%,-50%);width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{align-items:center;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:flex;margin-top:10px;overflow:hidden;padding:10px;z-index:0}.el-upload-list--picture .el-upload-list__item .el-icon--check,.el-upload-list--picture .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{display:inline-flex;opacity:0}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item .el-icon--close{top:5px;transform:translateY(0)}.el-upload-list--picture .el-upload-list__item-thumbnail{align-items:center;background-color:var(--el-color-white);display:inline-flex;height:70px;justify-content:center;-o-object-fit:contain;object-fit:contain;position:relative;width:70px;z-index:1}.el-upload-list--picture .el-upload-list__item-status-label{background:var(--el-color-success);height:26px;position:absolute;right:-17px;text-align:center;top:-7px;transform:rotate(45deg);width:46px}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{cursor:default;height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%;z-index:10}.el-upload-cover:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;height:100%;width:100%}.el-upload-cover__label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-cover__label i{color:#fff;font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-cover__progress{display:inline-block;position:static;vertical-align:middle;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{height:100%;left:0;position:absolute;top:0;width:100%}.el-upload-cover__interact{background-color:var(--el-overlay-color-light);bottom:0;height:100%;left:0;position:absolute;text-align:center;width:100%}.el-upload-cover__interact .btn{color:#fff;cursor:pointer;display:inline-block;font-size:14px;margin-top:60px;transition:var(--el-transition-md-fade);vertical-align:middle}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{background-color:#fff;bottom:0;color:var(--el-text-color-primary);font-size:14px;font-weight:400;height:36px;left:0;line-height:36px;margin:0;overflow:hidden;padding:0 10px;position:absolute;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-vl__wrapper{position:relative}.el-vl__wrapper.always-on .el-virtual-scrollbar,.el-vl__wrapper:hover .el-virtual-scrollbar{opacity:1}.el-vl__window{scrollbar-width:none}.el-vl__window::-webkit-scrollbar{display:none}.el-virtual-scrollbar{opacity:0;transition:opacity .34s ease-out}.el-virtual-scrollbar.always-on{opacity:1}.el-vg__wrapper{position:relative}.el-popper{--el-popper-border-radius:var(--el-popover-border-radius,4px);border-radius:var(--el-popper-border-radius);font-size:12px;line-height:20px;min-width:10px;overflow-wrap:break-word;padding:5px 11px;position:absolute;visibility:visible;z-index:2000}.el-popper.is-dark{color:var(--el-bg-color)}.el-popper.is-dark,.el-popper.is-dark .el-popper__arrow:before{background:var(--el-text-color-primary);border:1px solid var(--el-text-color-primary)}.el-popper.is-dark .el-popper__arrow:before{right:0}.el-popper.is-light,.el-popper.is-light .el-popper__arrow:before{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light)}.el-popper.is-light .el-popper__arrow:before{right:0}.el-popper.is-pure{padding:0}.el-popper__arrow,.el-popper__arrow:before{height:10px;position:absolute;width:10px;z-index:-1}.el-popper__arrow:before{background:var(--el-text-color-primary);box-sizing:border-box;content:" ";transform:rotate(45deg)}.el-popper[data-popper-placement^=top]>.el-popper__arrow{bottom:-5px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-bottom-right-radius:2px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow{top:-5px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-top-left-radius:2px}.el-popper[data-popper-placement^=left]>.el-popper__arrow{right:-5px}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-top-right-radius:2px}.el-popper[data-popper-placement^=right]>.el-popper__arrow{left:-5px}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-bottom-left-radius:2px}.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent!important;border-top-color:transparent!important}.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent!important;border-right-color:transparent!important}.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent!important;border-left-color:transparent!important}.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent!important;border-top-color:transparent!important}.el-statistic{--el-statistic-title-font-weight:400;--el-statistic-title-font-size:var(--el-font-size-extra-small);--el-statistic-title-color:var(--el-text-color-regular);--el-statistic-content-font-weight:400;--el-statistic-content-font-size:var(--el-font-size-extra-large);--el-statistic-content-color:var(--el-text-color-primary)}.el-statistic__head{color:var(--el-statistic-title-color);font-size:var(--el-statistic-title-font-size);font-weight:var(--el-statistic-title-font-weight);line-height:20px;margin-bottom:4px}.el-statistic__content{color:var(--el-statistic-content-color);font-size:var(--el-statistic-content-font-size);font-weight:var(--el-statistic-content-font-weight)}.el-statistic__value{display:inline-block}.el-statistic__prefix{display:inline-block;margin-right:4px}.el-statistic__suffix{display:inline-block;margin-left:4px}.el-tour{--el-tour-width:520px;--el-tour-padding-primary:12px;--el-tour-font-line-height:var(--el-font-line-height-primary);--el-tour-title-font-size:16px;--el-tour-title-text-color:var(--el-text-color-primary);--el-tour-title-font-weight:400;--el-tour-close-color:var(--el-color-info);--el-tour-font-size:14px;--el-tour-color:var(--el-text-color-primary);--el-tour-bg-color:var(--el-bg-color);--el-tour-border-radius:4px}.el-tour__hollow{transition:all var(--el-transition-duration) ease}.el-tour__content{border-radius:var(--el-tour-border-radius);box-shadow:var(--el-box-shadow-light);outline:none;overflow-wrap:break-word;padding:var(--el-tour-padding-primary);width:var(--el-tour-width)}.el-tour__arrow,.el-tour__content{background:var(--el-tour-bg-color);box-sizing:border-box}.el-tour__arrow{height:10px;pointer-events:none;position:absolute;transform:rotate(45deg);width:10px}.el-tour__content[data-side^=top] .el-tour__arrow{border-left-color:transparent;border-top-color:transparent}.el-tour__content[data-side^=bottom] .el-tour__arrow{border-bottom-color:transparent;border-right-color:transparent}.el-tour__content[data-side^=left] .el-tour__arrow{border-bottom-color:transparent;border-left-color:transparent}.el-tour__content[data-side^=right] .el-tour__arrow{border-right-color:transparent;border-top-color:transparent}.el-tour__content[data-side^=top] .el-tour__arrow{bottom:-5px}.el-tour__content[data-side^=bottom] .el-tour__arrow{top:-5px}.el-tour__content[data-side^=left] .el-tour__arrow{right:-5px}.el-tour__content[data-side^=right] .el-tour__arrow{left:-5px}.el-tour__closebtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:40px;outline:none;padding:0;position:absolute;right:0;top:0;width:40px}.el-tour__closebtn .el-tour__close{color:var(--el-tour-close-color);font-size:inherit}.el-tour__closebtn:focus .el-tour__close,.el-tour__closebtn:hover .el-tour__close{color:var(--el-color-primary)}.el-tour__header{padding-bottom:var(--el-tour-padding-primary)}.el-tour__header.show-close{padding-right:calc(var(--el-tour-padding-primary) + var(--el-message-close-size, 16px))}.el-tour__title{color:var(--el-tour-title-text-color);font-size:var(--el-tour-title-font-size);font-weight:var(--el-tour-title-font-weight);line-height:var(--el-tour-font-line-height)}.el-tour__body{color:var(--el-tour-text-color);font-size:var(--el-tour-font-size)}.el-tour__body img,.el-tour__body video{max-width:100%}.el-tour__footer{box-sizing:border-box;display:flex;justify-content:space-between;padding-top:var(--el-tour-padding-primary)}.el-tour__content .el-tour-indicators{display:inline-block;flex:1}.el-tour__content .el-tour-indicator{background:var(--el-color-info-light-9);border-radius:50%;display:inline-block;height:6px;margin-right:6px;width:6px}.el-tour__content .el-tour-indicator.is-active{background:var(--el-color-primary)}.el-tour.el-tour--primary{--el-tour-title-text-color:#fff;--el-tour-text-color:#fff;--el-tour-bg-color:var(--el-color-primary);--el-tour-close-color:#fff}.el-tour.el-tour--primary .el-tour__closebtn:focus .el-tour__close,.el-tour.el-tour--primary .el-tour__closebtn:hover .el-tour__close{color:var(--el-tour-title-text-color)}.el-tour.el-tour--primary .el-button--default{background:#fff;border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-tour.el-tour--primary .el-button--primary{border-color:#fff}.el-tour.el-tour--primary .el-tour-indicator{background:#ffffff26}.el-tour.el-tour--primary .el-tour-indicator.is-active{background:#fff}.el-tour-parent--hidden{overflow:hidden}.el-anchor{--el-anchor-bg-color:var(--el-bg-color);--el-anchor-padding-indent:14px;--el-anchor-line-height:22px;--el-anchor-font-size:12px;--el-anchor-color:var(--el-text-color-secondary);--el-anchor-active-color:var(--el-color-primary);--el-anchor-marker-bg-color:var(--el-color-primary);background-color:var(--el-anchor-bg-color);position:relative}.el-anchor__marker{background-color:var(--el-anchor-marker-bg-color);border-radius:4px;opacity:0;position:absolute;z-index:0}.el-anchor.el-anchor--vertical .el-anchor__marker{height:14px;left:0;top:8px;transition:top .25s ease-in-out,opacity .25s;width:4px}.el-anchor.el-anchor--vertical .el-anchor__list{padding-left:var(--el-anchor-padding-indent)}.el-anchor.el-anchor--vertical.el-anchor--underline:before{background-color:#0505050f;content:"";height:100%;left:0;position:absolute;width:2px}.el-anchor.el-anchor--vertical.el-anchor--underline .el-anchor__marker{border-radius:unset;width:2px}.el-anchor.el-anchor--horizontal .el-anchor__marker{bottom:0;height:2px;transition:left .25s ease-in-out,opacity .25s,width .25s;width:20px}.el-anchor.el-anchor--horizontal .el-anchor__list{display:flex;padding-bottom:4px}.el-anchor.el-anchor--horizontal .el-anchor__list .el-anchor__item{padding-left:16px}.el-anchor.el-anchor--horizontal .el-anchor__list .el-anchor__item:first-child{padding-left:0}.el-anchor.el-anchor--horizontal.el-anchor--underline:before{background-color:#0505050f;bottom:0;content:"";height:2px;position:absolute;width:100%}.el-anchor.el-anchor--horizontal.el-anchor--underline .el-anchor__marker{border-radius:unset;height:2px}.el-anchor__item{display:flex;flex-direction:column;overflow:hidden}.el-anchor__link{cursor:pointer;font-size:var(--el-anchor-font-size);line-height:var(--el-anchor-line-height);max-width:100%;outline:none;overflow:hidden;padding:4px 0;text-decoration:none;text-overflow:ellipsis;transition:color var(--el-transition-duration);white-space:nowrap}.el-anchor__link,.el-anchor__link:focus,.el-anchor__link:hover{color:var(--el-anchor-color)}.el-anchor__link.is-active{color:var(--el-anchor-active-color)}.el-anchor .el-anchor__list .el-anchor__item a{display:inline-block}.el-segmented{--el-segmented-color:var(--el-text-color-regular);--el-segmented-bg-color:var(--el-fill-color-light);--el-segmented-padding:2px;--el-segmented-item-selected-color:var(--el-color-white);--el-segmented-item-selected-bg-color:var(--el-color-primary);--el-segmented-item-selected-disabled-bg-color:var(--el-color-primary-light-5);--el-segmented-item-hover-color:var(--el-text-color-primary);--el-segmented-item-hover-bg-color:var(--el-fill-color-dark);--el-segmented-item-active-bg-color:var(--el-fill-color-darker);--el-segmented-item-disabled-color:var(--el-text-color-placeholder);align-items:stretch;background:var(--el-segmented-bg-color);border-radius:var(--el-border-radius-base);box-sizing:border-box;color:var(--el-segmented-color);display:inline-flex;font-size:14px;min-height:32px;padding:var(--el-segmented-padding)}.el-segmented__group{align-items:stretch;display:flex;position:relative;width:100%}.el-segmented__item-selected{background:var(--el-segmented-item-selected-bg-color);border-radius:calc(var(--el-border-radius-base) - 2px);height:100%;left:0;pointer-events:none;position:absolute;top:0;transition:all .3s;width:10px}.el-segmented__item-selected.is-disabled{background:var(--el-segmented-item-selected-disabled-bg-color)}.el-segmented__item-selected.is-focus-visible:before{border-radius:inherit;content:"";top:0;right:0;bottom:0;left:0;outline:2px solid var(--el-segmented-item-selected-bg-color);outline-offset:1px;position:absolute}.el-segmented__item{align-items:center;border-radius:calc(var(--el-border-radius-base) - 2px);cursor:pointer;display:flex;flex:1;padding:0 11px}.el-segmented__item:not(.is-disabled):not(.is-selected):hover{background:var(--el-segmented-item-hover-bg-color);color:var(--el-segmented-item-hover-color)}.el-segmented__item:not(.is-disabled):not(.is-selected):active{background:var(--el-segmented-item-active-bg-color)}.el-segmented__item.is-selected,.el-segmented__item.is-selected.is-disabled{color:var(--el-segmented-item-selected-color)}.el-segmented__item.is-disabled{color:var(--el-segmented-item-disabled-color);cursor:not-allowed}.el-segmented__item-input{height:0;margin:0;opacity:0;pointer-events:none;position:absolute;width:0}.el-segmented__item-label{flex:1;line-height:normal;overflow:hidden;text-align:center;text-overflow:ellipsis;transition:color .3s;white-space:nowrap;z-index:1}.el-segmented.is-block{display:flex}.el-segmented.is-block .el-segmented__item{min-width:0}.el-segmented--large{border-radius:var(--el-border-radius-base);font-size:16px;min-height:40px}.el-segmented--large .el-segmented__item,.el-segmented--large .el-segmented__item-selected{border-radius:calc(var(--el-border-radius-base) - 2px)}.el-segmented--large .el-segmented__item{padding:0 11px}.el-segmented--small{border-radius:calc(var(--el-border-radius-base) - 1px);font-size:14px;min-height:24px}.el-segmented--small .el-segmented__item,.el-segmented--small .el-segmented__item-selected{border-radius:calc(var(--el-border-radius-base) - 3px)}.el-segmented--small .el-segmented__item{padding:0 7px} diff --git a/public/install/assets/index.js b/public/install/assets/index.js new file mode 100644 index 0000000..fac1d87 --- /dev/null +++ b/public/install/assets/index.js @@ -0,0 +1,73 @@ +var _$=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var nue=_$((go,bo)=>{(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))o(r);new MutationObserver(r=>{for(const a of r)if(a.type==="childList")for(const l of a.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&o(l)}).observe(document,{childList:!0,subtree:!0});function n(r){const a={};return r.integrity&&(a.integrity=r.integrity),r.referrerPolicy&&(a.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?a.credentials="include":r.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function o(r){if(r.ep)return;r.ep=!0;const a=n(r);fetch(r.href,a)}})();function xd(e,t){const n=Object.create(null),o=e.split(",");for(let r=0;r!!n[r]}const Zt={},rs=[],Bt=()=>{},C$=()=>!1,S$=/^on[^a-z]/,yu=e=>S$.test(e),Lm=e=>e.startsWith("onUpdate:"),an=Object.assign,xm=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},k$=Object.prototype.hasOwnProperty,Tt=(e,t)=>k$.call(e,t),Pe=Array.isArray,as=e=>js(e)==="[object Map]",Il=e=>js(e)==="[object Set]",hl=e=>js(e)==="[object Date]",E$=e=>js(e)==="[object RegExp]",Xe=e=>typeof e=="function",nt=e=>typeof e=="string",zi=e=>typeof e=="symbol",dt=e=>e!==null&&typeof e=="object",vs=e=>dt(e)&&Xe(e.then)&&Xe(e.catch),gw=Object.prototype.toString,js=e=>gw.call(e),Tc=e=>js(e).slice(8,-1),nd=e=>js(e)==="[object Object]",Dm=e=>nt(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,$i=xd(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Dd=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},T$=/-(\w)/g,jn=Dd(e=>e.replace(T$,(t,n)=>n?n.toUpperCase():"")),$$=/\B([A-Z])/g,mo=Dd(e=>e.replace($$,"-$1").toLowerCase()),Ws=Dd(e=>e.charAt(0).toUpperCase()+e.slice(1)),ls=Dd(e=>e?`on${Ws(e)}`:""),gs=(e,t)=>!Object.is(e,t),ss=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},rd=e=>{const t=parseFloat(e);return isNaN(t)?e:t},ad=e=>{const t=nt(e)?Number(e):NaN;return isNaN(t)?e:t};let db;const Hp=()=>db||(db=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),O$="Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console",N$=xd(O$);function je(e){if(Pe(e)){const t={};for(let n=0;n{if(n){const o=n.split(M$);o.length>1&&(t[o[0].trim()]=o[1].trim())}}),t}function N(e){let t="";if(nt(e))t=e;else if(Pe(e))for(let n=0;nEa(n,t))}const le=e=>nt(e)?e:e==null?"":Pe(e)||dt(e)&&(e.toString===gw||!Xe(e.toString))?JSON.stringify(e,yw,2):String(e),yw=(e,t)=>t&&t.__v_isRef?yw(e,t.value):as(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[o,r])=>(n[`${o} =>`]=r,n),{})}:Il(t)?{[`Set(${t.size})`]:[...t.values()]}:dt(t)&&!Pe(t)&&!nd(t)?String(t):t;let po;class Fm{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=po,!t&&po&&(this.index=(po.scopes||(po.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=po;try{return po=this,t()}finally{po=n}}}on(){po=this}off(){po=this.parent}stop(t){if(this._active){let n,o;for(n=0,o=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},_w=e=>(e.w&Ta)>0,Cw=e=>(e.n&Ta)>0,D$=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let o=0;o{(f==="length"||f>=u)&&s.push(c)})}else switch(n!==void 0&&s.push(l.get(n)),t){case"add":Pe(e)?Dm(n)&&s.push(l.get("length")):(s.push(l.get(al)),as(e)&&s.push(l.get(jp)));break;case"delete":Pe(e)||(s.push(l.get(al)),as(e)&&s.push(l.get(jp)));break;case"set":as(e)&&s.push(l.get(al));break}if(s.length===1)s[0]&&Wp(s[0]);else{const u=[];for(const c of s)c&&u.push(...c);Wp(Bm(u))}}function Wp(e,t){const n=Pe(e)?e:[...e];for(const o of n)o.computed&&pb(o);for(const o of n)o.computed||pb(o)}function pb(e,t){(e!==Go||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}function H$(e,t){var n;return(n=ld.get(e))==null?void 0:n.get(t)}const z$=xd("__proto__,__v_isRef,__isVue"),Ew=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(zi)),j$=zd(),W$=zd(!1,!0),K$=zd(!0),U$=zd(!0,!0),hb=q$();function q$(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const o=Mt(this);for(let a=0,l=this.length;a{e[t]=function(...n){Ks();const o=Mt(this)[t].apply(this,n);return Us(),o}}),e}function Y$(e){const t=Mt(this);return uo(t,"has",e),t.hasOwnProperty(e)}function zd(e=!1,t=!1){return function(o,r,a){if(r==="__v_isReactive")return!e;if(r==="__v_isReadonly")return e;if(r==="__v_isShallow")return t;if(r==="__v_raw"&&a===(e?t?Aw:Mw:t?Iw:Nw).get(o))return o;const l=Pe(o);if(!e){if(l&&Tt(hb,r))return Reflect.get(hb,r,a);if(r==="hasOwnProperty")return Y$}const s=Reflect.get(o,r,a);return(zi(r)?Ew.has(r):z$(r))||(e||uo(o,"get",r),t)?s:xt(s)?l&&Dm(r)?s:s.value:dt(s)?e?Ml(s):Et(s):s}}const G$=Tw(),X$=Tw(!0);function Tw(e=!1){return function(n,o,r,a){let l=n[o];if(ml(l)&&xt(l)&&!xt(r))return!1;if(!e&&(!ji(r)&&!ml(r)&&(l=Mt(l),r=Mt(r)),!Pe(n)&&xt(l)&&!xt(r)))return l.value=r,!0;const s=Pe(n)&&Dm(o)?Number(o)e,jd=e=>Reflect.getPrototypeOf(e);function Gu(e,t,n=!1,o=!1){e=e.__v_raw;const r=Mt(e),a=Mt(t);n||(t!==a&&uo(r,"get",t),uo(r,"get",a));const{has:l}=jd(r),s=o?Vm:n?jm:Wi;if(l.call(r,t))return s(e.get(t));if(l.call(r,a))return s(e.get(a));e!==r&&e.get(t)}function Xu(e,t=!1){const n=this.__v_raw,o=Mt(n),r=Mt(e);return t||(e!==r&&uo(o,"has",e),uo(o,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function Ju(e,t=!1){return e=e.__v_raw,!t&&uo(Mt(e),"iterate",al),Reflect.get(e,"size",e)}function mb(e){e=Mt(e);const t=Mt(this);return jd(t).has.call(t,e)||(t.add(e),Kr(t,"add",e,e)),this}function vb(e,t){t=Mt(t);const n=Mt(this),{has:o,get:r}=jd(n);let a=o.call(n,e);a||(e=Mt(e),a=o.call(n,e));const l=r.call(n,e);return n.set(e,t),a?gs(t,l)&&Kr(n,"set",e,t):Kr(n,"add",e,t),this}function gb(e){const t=Mt(this),{has:n,get:o}=jd(t);let r=n.call(t,e);r||(e=Mt(e),r=n.call(t,e)),o&&o.call(t,e);const a=t.delete(e);return r&&Kr(t,"delete",e,void 0),a}function bb(){const e=Mt(this),t=e.size!==0,n=e.clear();return t&&Kr(e,"clear",void 0,void 0),n}function Zu(e,t){return function(o,r){const a=this,l=a.__v_raw,s=Mt(l),u=t?Vm:e?jm:Wi;return!e&&uo(s,"iterate",al),l.forEach((c,f)=>o.call(r,u(c),u(f),a))}}function Qu(e,t,n){return function(...o){const r=this.__v_raw,a=Mt(r),l=as(a),s=e==="entries"||e===Symbol.iterator&&l,u=e==="keys"&&l,c=r[e](...o),f=n?Vm:t?jm:Wi;return!t&&uo(a,"iterate",u?jp:al),{next(){const{value:d,done:p}=c.next();return p?{value:d,done:p}:{value:s?[f(d[0]),f(d[1])]:f(d),done:p}},[Symbol.iterator](){return this}}}}function aa(e){return function(...t){return e==="delete"?!1:this}}function nO(){const e={get(a){return Gu(this,a)},get size(){return Ju(this)},has:Xu,add:mb,set:vb,delete:gb,clear:bb,forEach:Zu(!1,!1)},t={get(a){return Gu(this,a,!1,!0)},get size(){return Ju(this)},has:Xu,add:mb,set:vb,delete:gb,clear:bb,forEach:Zu(!1,!0)},n={get(a){return Gu(this,a,!0)},get size(){return Ju(this,!0)},has(a){return Xu.call(this,a,!0)},add:aa("add"),set:aa("set"),delete:aa("delete"),clear:aa("clear"),forEach:Zu(!0,!1)},o={get(a){return Gu(this,a,!0,!0)},get size(){return Ju(this,!0)},has(a){return Xu.call(this,a,!0)},add:aa("add"),set:aa("set"),delete:aa("delete"),clear:aa("clear"),forEach:Zu(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(a=>{e[a]=Qu(a,!1,!1),n[a]=Qu(a,!0,!1),t[a]=Qu(a,!1,!0),o[a]=Qu(a,!0,!0)}),[e,n,t,o]}const[oO,rO,aO,lO]=nO();function Wd(e,t){const n=t?e?lO:aO:e?rO:oO;return(o,r,a)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?o:Reflect.get(Tt(n,r)&&r in o?n:o,r,a)}const sO={get:Wd(!1,!1)},iO={get:Wd(!1,!0)},uO={get:Wd(!0,!1)},cO={get:Wd(!0,!0)},Nw=new WeakMap,Iw=new WeakMap,Mw=new WeakMap,Aw=new WeakMap;function dO(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function fO(e){return e.__v_skip||!Object.isExtensible(e)?0:dO(Tc(e))}function Et(e){return ml(e)?e:Kd(e,!1,$w,sO,Nw)}function Hm(e){return Kd(e,!1,eO,iO,Iw)}function Ml(e){return Kd(e,!0,Ow,uO,Mw)}function pO(e){return Kd(e,!0,tO,cO,Aw)}function Kd(e,t,n,o,r){if(!dt(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const a=r.get(e);if(a)return a;const l=fO(e);if(l===0)return e;const s=new Proxy(e,l===2?o:n);return r.set(e,s),s}function jr(e){return ml(e)?jr(e.__v_raw):!!(e&&e.__v_isReactive)}function ml(e){return!!(e&&e.__v_isReadonly)}function ji(e){return!!(e&&e.__v_isShallow)}function zm(e){return jr(e)||ml(e)}function Mt(e){const t=e&&e.__v_raw;return t?Mt(t):e}function Po(e){return od(e,"__v_skip",!0),e}const Wi=e=>dt(e)?Et(e):e,jm=e=>dt(e)?Ml(e):e;function Wm(e){wa&&Go&&(e=Mt(e),kw(e.dep||(e.dep=Bm())))}function Ud(e,t){e=Mt(e);const n=e.dep;n&&Wp(n)}function xt(e){return!!(e&&e.__v_isRef===!0)}function R(e){return Pw(e,!1)}function Ut(e){return Pw(e,!0)}function Pw(e,t){return xt(e)?e:new hO(e,t)}class hO{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:Mt(t),this._value=n?t:Wi(t)}get value(){return Wm(this),this._value}set value(t){const n=this.__v_isShallow||ji(t)||ml(t);t=n?t:Mt(t),gs(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:Wi(t),Ud(this))}}function mO(e){Ud(e)}function i(e){return xt(e)?e.value:e}function vO(e){return Xe(e)?e():i(e)}const gO={get:(e,t,n)=>i(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const r=e[t];return xt(r)&&!xt(n)?(r.value=n,!0):Reflect.set(e,t,n,o)}};function Km(e){return jr(e)?e:new Proxy(e,gO)}class bO{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:o}=t(()=>Wm(this),()=>Ud(this));this._get=n,this._set=o}get value(){return this._get()}set value(t){this._set(t)}}function Rw(e){return new bO(e)}function Cn(e){const t=Pe(e)?new Array(e.length):{};for(const n in e)t[n]=Lw(e,n);return t}class yO{constructor(t,n,o){this._object=t,this._key=n,this._defaultValue=o,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return H$(Mt(this._object),this._key)}}class wO{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function Lt(e,t,n){return xt(e)?e:Xe(e)?new wO(e):dt(e)&&arguments.length>1?Lw(e,t,n):R(e)}function Lw(e,t,n){const o=e[t];return xt(o)?o:new yO(e,t,n)}class _O{constructor(t,n,o,r){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this._dirty=!0,this.effect=new wu(t,()=>{this._dirty||(this._dirty=!0,Ud(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=o}get value(){const t=Mt(this);return Wm(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function CO(e,t,n=!1){let o,r;const a=Xe(e);return a?(o=e,r=Bt):(o=e.get,r=e.set),new _O(o,r,a||!r,n)}function xw(e,...t){}function SO(e,t){}function Wr(e,t,n,o){let r;try{r=o?e(...o):e()}catch(a){Al(a,t,n)}return r}function yo(e,t,n,o){if(Xe(e)){const a=Wr(e,t,n,o);return a&&vs(a)&&a.catch(l=>{Al(l,t,n)}),a}const r=[];for(let a=0;a>>1;Ui(Hn[o])hr&&Hn.splice(t,1)}function qm(e){Pe(e)?is.push(...e):(!Br||!Br.includes(e,e.allowRecurse?qa+1:qa))&&is.push(e),Fw()}function yb(e,t=Ki?hr+1:0){for(;tUi(n)-Ui(o)),qa=0;qae.id==null?1/0:e.id,$O=(e,t)=>{const n=Ui(e)-Ui(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Bw(e){Kp=!1,Ki=!0,Hn.sort($O);try{for(hr=0;hrXl.emit(r,...a)),ec=[]):typeof window<"u"&&window.HTMLElement&&!((o=(n=window.navigator)==null?void 0:n.userAgent)!=null&&o.includes("jsdom"))?((t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(a=>{Vw(a,t)}),setTimeout(()=>{Xl||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,ec=[])},3e3)):ec=[]}function OO(e,t,...n){if(e.isUnmounted)return;const o=e.vnode.props||Zt;let r=n;const a=t.startsWith("update:"),l=a&&t.slice(7);if(l&&l in o){const f=`${l==="modelValue"?"model":l}Modifiers`,{number:d,trim:p}=o[f]||Zt;p&&(r=n.map(m=>nt(m)?m.trim():m)),d&&(r=n.map(rd))}let s,u=o[s=ls(t)]||o[s=ls(jn(t))];!u&&a&&(u=o[s=ls(mo(t))]),u&&yo(u,e,6,r);const c=o[s+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[s])return;e.emitted[s]=!0,yo(c,e,6,r)}}function Hw(e,t,n=!1){const o=t.emitsCache,r=o.get(e);if(r!==void 0)return r;const a=e.emits;let l={},s=!1;if(!Xe(e)){const u=c=>{const f=Hw(c,t,!0);f&&(s=!0,an(l,f))};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}return!a&&!s?(dt(e)&&o.set(e,null),null):(Pe(a)?a.forEach(u=>l[u]=null):an(l,a),dt(e)&&o.set(e,l),l)}function Yd(e,t){return!e||!yu(t)?!1:(t=t.slice(2).replace(/Once$/,""),Tt(e,t[0].toLowerCase()+t.slice(1))||Tt(e,mo(t))||Tt(e,t))}let In=null,Gd=null;function qi(e){const t=In;return In=e,Gd=e&&e.type.__scopeId||null,t}function Xd(e){Gd=e}function Jd(){Gd=null}const NO=e=>X;function X(e,t=In,n){if(!t||e._n)return e;const o=(...r)=>{o._d&&Zp(-1);const a=qi(t);let l;try{l=e(...r)}finally{qi(a),o._d&&Zp(1)}return l};return o._n=!0,o._c=!0,o._d=!0,o}function $c(e){const{type:t,vnode:n,proxy:o,withProxy:r,props:a,propsOptions:[l],slots:s,attrs:u,emit:c,render:f,renderCache:d,data:p,setupState:m,ctx:v,inheritAttrs:h}=e;let C,g;const y=qi(e);try{if(n.shapeFlag&4){const b=r||o;C=ho(f.call(b,b,d,a,m,p,v)),g=u}else{const b=t;C=ho(b.length>1?b(a,{attrs:u,slots:s,emit:c}):b(a,null)),g=t.props?u:MO(u)}}catch(b){Ii.length=0,Al(b,e,1),C=K(En)}let _=C;if(g&&h!==!1){const b=Object.keys(g),{shapeFlag:w}=_;b.length&&w&7&&(l&&b.some(Lm)&&(g=AO(g,l)),_=Qo(_,g))}return n.dirs&&(_=Qo(_),_.dirs=_.dirs?_.dirs.concat(n.dirs):n.dirs),n.transition&&(_.transition=n.transition),C=_,qi(y),C}function IO(e){let t;for(let n=0;n{let t;for(const n in e)(n==="class"||n==="style"||yu(n))&&((t||(t={}))[n]=e[n]);return t},AO=(e,t)=>{const n={};for(const o in e)(!Lm(o)||!(o.slice(9)in t))&&(n[o]=e[o]);return n};function PO(e,t,n){const{props:o,children:r,component:a}=e,{props:l,children:s,patchFlag:u}=t,c=a.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&u>=0){if(u&1024)return!0;if(u&16)return o?wb(o,l,c):!!l;if(u&8){const f=t.dynamicProps;for(let d=0;de.__isSuspense,RO={name:"Suspense",__isSuspense:!0,process(e,t,n,o,r,a,l,s,u,c){e==null?xO(t,n,o,r,a,l,s,u,c):DO(e,t,n,o,r,l,s,u,c)},hydrate:FO,create:Gm,normalize:BO},LO=RO;function Yi(e,t){const n=e.props&&e.props[t];Xe(n)&&n()}function xO(e,t,n,o,r,a,l,s,u){const{p:c,o:{createElement:f}}=u,d=f("div"),p=e.suspense=Gm(e,r,o,t,d,n,a,l,s,u);c(null,p.pendingBranch=e.ssContent,d,null,o,p,a,l),p.deps>0?(Yi(e,"onPending"),Yi(e,"onFallback"),c(null,e.ssFallback,t,n,o,null,a,l),us(p,e.ssFallback)):p.resolve(!1,!0)}function DO(e,t,n,o,r,a,l,s,{p:u,um:c,o:{createElement:f}}){const d=t.suspense=e.suspense;d.vnode=t,t.el=e.el;const p=t.ssContent,m=t.ssFallback,{activeBranch:v,pendingBranch:h,isInFallback:C,isHydrating:g}=d;if(h)d.pendingBranch=p,Xo(p,h)?(u(h,p,d.hiddenContainer,null,r,d,a,l,s),d.deps<=0?d.resolve():C&&(u(v,m,n,o,r,null,a,l,s),us(d,m))):(d.pendingId++,g?(d.isHydrating=!1,d.activeBranch=h):c(h,r,d),d.deps=0,d.effects.length=0,d.hiddenContainer=f("div"),C?(u(null,p,d.hiddenContainer,null,r,d,a,l,s),d.deps<=0?d.resolve():(u(v,m,n,o,r,null,a,l,s),us(d,m))):v&&Xo(p,v)?(u(v,p,n,o,r,d,a,l,s),d.resolve(!0)):(u(null,p,d.hiddenContainer,null,r,d,a,l,s),d.deps<=0&&d.resolve()));else if(v&&Xo(p,v))u(v,p,n,o,r,d,a,l,s),us(d,p);else if(Yi(t,"onPending"),d.pendingBranch=p,d.pendingId++,u(null,p,d.hiddenContainer,null,r,d,a,l,s),d.deps<=0)d.resolve();else{const{timeout:y,pendingId:_}=d;y>0?setTimeout(()=>{d.pendingId===_&&d.fallback(m)},y):y===0&&d.fallback(m)}}function Gm(e,t,n,o,r,a,l,s,u,c,f=!1){const{p:d,m:p,um:m,n:v,o:{parentNode:h,remove:C}}=c;let g;const y=VO(e);y&&t!=null&&t.pendingBranch&&(g=t.pendingId,t.deps++);const _=e.props?ad(e.props.timeout):void 0,b={vnode:e,parent:t,parentComponent:n,isSVG:l,container:o,hiddenContainer:r,anchor:a,deps:0,pendingId:0,timeout:typeof _=="number"?_:-1,activeBranch:null,pendingBranch:null,isInFallback:!0,isHydrating:f,isUnmounted:!1,effects:[],resolve(w=!1,S=!1){const{vnode:E,activeBranch:$,pendingBranch:O,pendingId:A,effects:M,parentComponent:D,container:U}=b;if(b.isHydrating)b.isHydrating=!1;else if(!w){const L=$&&O.transition&&O.transition.mode==="out-in";L&&($.transition.afterLeave=()=>{A===b.pendingId&&p(O,U,P,0)});let{anchor:P}=b;$&&(P=v($),m($,D,b,!0)),L||p(O,U,P,0)}us(b,O),b.pendingBranch=null,b.isInFallback=!1;let j=b.parent,W=!1;for(;j;){if(j.pendingBranch){j.effects.push(...M),W=!0;break}j=j.parent}W||qm(M),b.effects=[],y&&t&&t.pendingBranch&&g===t.pendingId&&(t.deps--,t.deps===0&&!S&&t.resolve()),Yi(E,"onResolve")},fallback(w){if(!b.pendingBranch)return;const{vnode:S,activeBranch:E,parentComponent:$,container:O,isSVG:A}=b;Yi(S,"onFallback");const M=v(E),D=()=>{b.isInFallback&&(d(null,w,O,M,$,null,A,s,u),us(b,w))},U=w.transition&&w.transition.mode==="out-in";U&&(E.transition.afterLeave=D),b.isInFallback=!0,m(E,$,null,!0),U||D()},move(w,S,E){b.activeBranch&&p(b.activeBranch,w,S,E),b.container=w},next(){return b.activeBranch&&v(b.activeBranch)},registerDep(w,S){const E=!!b.pendingBranch;E&&b.deps++;const $=w.vnode.el;w.asyncDep.catch(O=>{Al(O,w,0)}).then(O=>{if(w.isUnmounted||b.isUnmounted||b.pendingId!==w.suspenseId)return;w.asyncResolved=!0;const{vnode:A}=w;Qp(w,O,!1),$&&(A.el=$);const M=!$&&w.subTree.el;S(w,A,h($||w.subTree.el),$?null:v(w.subTree),b,l,u),M&&C(M),Ym(w,A.el),E&&--b.deps===0&&b.resolve()})},unmount(w,S){b.isUnmounted=!0,b.activeBranch&&m(b.activeBranch,n,w,S),b.pendingBranch&&m(b.pendingBranch,n,w,S)}};return b}function FO(e,t,n,o,r,a,l,s,u){const c=t.suspense=Gm(t,o,n,e.parentNode,document.createElement("div"),null,r,a,l,s,!0),f=u(e,c.pendingBranch=t.ssContent,n,c,a,l);return c.deps===0&&c.resolve(!1,!0),f}function BO(e){const{shapeFlag:t,children:n}=e,o=t&32;e.ssContent=_b(o?n.default:n),e.ssFallback=o?_b(n.fallback):K(En)}function _b(e){let t;if(Xe(e)){const n=gl&&e._c;n&&(e._d=!1,T()),e=e(),n&&(e._d=!0,t=ao,m_())}return Pe(e)&&(e=IO(e)),e=ho(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(n=>n!==e)),e}function jw(e,t){t&&t.pendingBranch?Pe(e)?t.effects.push(...e):t.effects.push(e):qm(e)}function us(e,t){e.activeBranch=t;const{vnode:n,parentComponent:o}=e,r=n.el=t.el;o&&o.subTree===n&&(o.vnode.el=r,Ym(o,r))}function VO(e){var t;return((t=e.props)==null?void 0:t.suspensible)!=null&&e.props.suspensible!==!1}function Mn(e,t){return _u(e,null,t)}function Ww(e,t){return _u(e,null,{flush:"post"})}function HO(e,t){return _u(e,null,{flush:"sync"})}const tc={};function ve(e,t,n){return _u(e,t,n)}function _u(e,t,{immediate:n,deep:o,flush:r,onTrack:a,onTrigger:l}=Zt){var s;const u=Vd()===((s=bn)==null?void 0:s.scope)?bn:null;let c,f=!1,d=!1;if(xt(e)?(c=()=>e.value,f=ji(e)):jr(e)?(c=()=>e,o=!0):Pe(e)?(d=!0,f=e.some(b=>jr(b)||ji(b)),c=()=>e.map(b=>{if(xt(b))return b.value;if(jr(b))return Ja(b);if(Xe(b))return Wr(b,u,2)})):Xe(e)?t?c=()=>Wr(e,u,2):c=()=>{if(!(u&&u.isUnmounted))return p&&p(),yo(e,u,3,[m])}:c=Bt,t&&o){const b=c;c=()=>Ja(b())}let p,m=b=>{p=y.onStop=()=>{Wr(b,u,4)}},v;if(ys)if(m=Bt,t?n&&yo(t,u,3,[c(),d?[]:void 0,m]):c(),r==="sync"){const b=k_();v=b.__watcherHandles||(b.__watcherHandles=[])}else return Bt;let h=d?new Array(e.length).fill(tc):tc;const C=()=>{if(y.active)if(t){const b=y.run();(o||f||(d?b.some((w,S)=>gs(w,h[S])):gs(b,h)))&&(p&&p(),yo(t,u,3,[b,h===tc?void 0:d&&h[0]===tc?[]:h,m]),h=b)}else y.run()};C.allowRecurse=!!t;let g;r==="sync"?g=C:r==="post"?g=()=>Pn(C,u&&u.suspense):(C.pre=!0,u&&(C.id=u.uid),g=()=>qd(C));const y=new wu(c,g);t?n?C():h=y.run():r==="post"?Pn(y.run.bind(y),u&&u.suspense):y.run();const _=()=>{y.stop(),u&&u.scope&&xm(u.scope.effects,y)};return v&&v.push(_),_}function zO(e,t,n){const o=this.proxy,r=nt(e)?e.includes(".")?Kw(o,e):()=>o[e]:e.bind(o,o);let a;Xe(t)?a=t:(a=t.handler,n=t);const l=bn;$a(this);const s=_u(r,a.bind(o),n);return l?$a(l):_a(),s}function Kw(e,t){const n=t.split(".");return()=>{let o=e;for(let r=0;r{Ja(n,t)});else if(nd(e))for(const n in e)Ja(e[n],t);return e}function tt(e,t){const n=In;if(n===null)return e;const o=tf(n)||n.proxy,r=e.dirs||(e.dirs=[]);for(let a=0;a{e.isMounted=!0}),zt(()=>{e.isUnmounting=!0}),e}const Eo=[Function,Array],Jm={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Eo,onEnter:Eo,onAfterEnter:Eo,onEnterCancelled:Eo,onBeforeLeave:Eo,onLeave:Eo,onAfterLeave:Eo,onLeaveCancelled:Eo,onBeforeAppear:Eo,onAppear:Eo,onAfterAppear:Eo,onAppearCancelled:Eo},jO={name:"BaseTransition",props:Jm,setup(e,{slots:t}){const n=lt(),o=Xm();let r;return()=>{const a=t.default&&Zd(t.default(),!0);if(!a||!a.length)return;let l=a[0];if(a.length>1){for(const h of a)if(h.type!==En){l=h;break}}const s=Mt(e),{mode:u}=s;if(o.isLeaving)return Jf(l);const c=Cb(l);if(!c)return Jf(l);const f=bs(c,s,o,n);vl(c,f);const d=n.subTree,p=d&&Cb(d);let m=!1;const{getTransitionKey:v}=c.type;if(v){const h=v();r===void 0?r=h:h!==r&&(r=h,m=!0)}if(p&&p.type!==En&&(!Xo(c,p)||m)){const h=bs(p,s,o,n);if(vl(p,h),u==="out-in")return o.isLeaving=!0,h.afterLeave=()=>{o.isLeaving=!1,n.update.active!==!1&&n.update()},Jf(l);u==="in-out"&&c.type!==En&&(h.delayLeave=(C,g,y)=>{const _=qw(o,p);_[String(p.key)]=p,C._leaveCb=()=>{g(),C._leaveCb=void 0,delete f.delayedLeave},f.delayedLeave=y})}return l}}},Uw=jO;function qw(e,t){const{leavingVNodes:n}=e;let o=n.get(t.type);return o||(o=Object.create(null),n.set(t.type,o)),o}function bs(e,t,n,o){const{appear:r,mode:a,persisted:l=!1,onBeforeEnter:s,onEnter:u,onAfterEnter:c,onEnterCancelled:f,onBeforeLeave:d,onLeave:p,onAfterLeave:m,onLeaveCancelled:v,onBeforeAppear:h,onAppear:C,onAfterAppear:g,onAppearCancelled:y}=t,_=String(e.key),b=qw(n,e),w=($,O)=>{$&&yo($,o,9,O)},S=($,O)=>{const A=O[1];w($,O),Pe($)?$.every(M=>M.length<=1)&&A():$.length<=1&&A()},E={mode:a,persisted:l,beforeEnter($){let O=s;if(!n.isMounted)if(r)O=h||s;else return;$._leaveCb&&$._leaveCb(!0);const A=b[_];A&&Xo(e,A)&&A.el._leaveCb&&A.el._leaveCb(),w(O,[$])},enter($){let O=u,A=c,M=f;if(!n.isMounted)if(r)O=C||u,A=g||c,M=y||f;else return;let D=!1;const U=$._enterCb=j=>{D||(D=!0,j?w(M,[$]):w(A,[$]),E.delayedLeave&&E.delayedLeave(),$._enterCb=void 0)};O?S(O,[$,U]):U()},leave($,O){const A=String(e.key);if($._enterCb&&$._enterCb(!0),n.isUnmounting)return O();w(d,[$]);let M=!1;const D=$._leaveCb=U=>{M||(M=!0,O(),U?w(v,[$]):w(m,[$]),$._leaveCb=void 0,b[A]===e&&delete b[A])};b[A]=e,p?S(p,[$,D]):D()},clone($){return bs($,t,n,o)}};return E}function Jf(e){if(Cu(e))return e=Qo(e),e.children=null,e}function Cb(e){return Cu(e)?e.children?e.children[0]:void 0:e}function vl(e,t){e.shapeFlag&6&&e.component?vl(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Zd(e,t=!1,n){let o=[],r=0;for(let a=0;a1)for(let a=0;a!!e.type.__asyncLoader;function WO(e){Xe(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:o,delay:r=200,timeout:a,suspensible:l=!0,onError:s}=e;let u=null,c,f=0;const d=()=>(f++,u=null,p()),p=()=>{let m;return u||(m=u=t().catch(v=>{if(v=v instanceof Error?v:new Error(String(v)),s)return new Promise((h,C)=>{s(v,()=>h(d()),()=>C(v),f+1)});throw v}).then(v=>m!==u&&u?u:(v&&(v.__esModule||v[Symbol.toStringTag]==="Module")&&(v=v.default),c=v,v)))};return Y({name:"AsyncComponentWrapper",__asyncLoader:p,get __asyncResolved(){return c},setup(){const m=bn;if(c)return()=>Zf(c,m);const v=y=>{u=null,Al(y,m,13,!o)};if(l&&m.suspense||ys)return p().then(y=>()=>Zf(y,m)).catch(y=>(v(y),()=>o?K(o,{error:y}):null));const h=R(!1),C=R(),g=R(!!r);return r&&setTimeout(()=>{g.value=!1},r),a!=null&&setTimeout(()=>{if(!h.value&&!C.value){const y=new Error(`Async component timed out after ${a}ms.`);v(y),C.value=y}},a),p().then(()=>{h.value=!0,m.parent&&Cu(m.parent.vnode)&&qd(m.parent.update)}).catch(y=>{v(y),C.value=y}),()=>{if(h.value&&c)return Zf(c,m);if(C.value&&o)return K(o,{error:C.value});if(n&&!g.value)return K(n)}}})}function Zf(e,t){const{ref:n,props:o,children:r,ce:a}=t.vnode,l=K(e,o,r);return l.ref=n,l.ce=a,delete t.vnode.ce,l}const Cu=e=>e.type.__isKeepAlive,KO={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=lt(),o=n.ctx;if(!o.renderer)return()=>{const y=t.default&&t.default();return y&&y.length===1?y[0]:y};const r=new Map,a=new Set;let l=null;const s=n.suspense,{renderer:{p:u,m:c,um:f,o:{createElement:d}}}=o,p=d("div");o.activate=(y,_,b,w,S)=>{const E=y.component;c(y,_,b,0,s),u(E.vnode,y,_,b,E,s,w,y.slotScopeIds,S),Pn(()=>{E.isDeactivated=!1,E.a&&ss(E.a);const $=y.props&&y.props.onVnodeMounted;$&&ro($,E.parent,y)},s)},o.deactivate=y=>{const _=y.component;c(y,p,null,1,s),Pn(()=>{_.da&&ss(_.da);const b=y.props&&y.props.onVnodeUnmounted;b&&ro(b,_.parent,y),_.isDeactivated=!0},s)};function m(y){Qf(y),f(y,n,s,!0)}function v(y){r.forEach((_,b)=>{const w=th(_.type);w&&(!y||!y(w))&&h(b)})}function h(y){const _=r.get(y);!l||!Xo(_,l)?m(_):l&&Qf(l),r.delete(y),a.delete(y)}ve(()=>[e.include,e.exclude],([y,_])=>{y&&v(b=>Ci(y,b)),_&&v(b=>!Ci(_,b))},{flush:"post",deep:!0});let C=null;const g=()=>{C!=null&&r.set(C,ep(n.subTree))};return at(g),ar(g),zt(()=>{r.forEach(y=>{const{subTree:_,suspense:b}=n,w=ep(_);if(y.type===w.type&&y.key===w.key){Qf(w);const S=w.component.da;S&&Pn(S,b);return}m(y)})}),()=>{if(C=null,!t.default)return null;const y=t.default(),_=y[0];if(y.length>1)return l=null,y;if(!Wt(_)||!(_.shapeFlag&4)&&!(_.shapeFlag&128))return l=null,_;let b=ep(_);const w=b.type,S=th(ll(b)?b.type.__asyncResolved||{}:w),{include:E,exclude:$,max:O}=e;if(E&&(!S||!Ci(E,S))||$&&S&&Ci($,S))return l=b,_;const A=b.key==null?w:b.key,M=r.get(A);return b.el&&(b=Qo(b),_.shapeFlag&128&&(_.ssContent=b)),C=A,M?(b.el=M.el,b.component=M.component,b.transition&&vl(b,b.transition),b.shapeFlag|=512,a.delete(A),a.add(A)):(a.add(A),O&&a.size>parseInt(O,10)&&h(a.values().next().value)),b.shapeFlag|=256,l=b,zw(_.type)?_:b}}},UO=KO;function Ci(e,t){return Pe(e)?e.some(n=>Ci(n,t)):nt(e)?e.split(",").includes(t):E$(e)?e.test(t):!1}function Zm(e,t){Yw(e,"a",t)}function Qm(e,t){Yw(e,"da",t)}function Yw(e,t,n=bn){const o=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Qd(t,o,n),n){let r=n.parent;for(;r&&r.parent;)Cu(r.parent.vnode)&&qO(o,t,n,r),r=r.parent}}function qO(e,t,n,o){const r=Qd(t,e,o,!0);lr(()=>{xm(o[t],r)},n)}function Qf(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function ep(e){return e.shapeFlag&128?e.ssContent:e}function Qd(e,t,n=bn,o=!1){if(n){const r=n[e]||(n[e]=[]),a=t.__weh||(t.__weh=(...l)=>{if(n.isUnmounted)return;Ks(),$a(n);const s=yo(t,n,e,l);return _a(),Us(),s});return o?r.unshift(a):r.push(a),a}}const Xr=e=>(t,n=bn)=>(!ys||e==="sp")&&Qd(e,(...o)=>t(...o),n),Su=Xr("bm"),at=Xr("m"),ev=Xr("bu"),ar=Xr("u"),zt=Xr("bum"),lr=Xr("um"),Gw=Xr("sp"),Xw=Xr("rtg"),Jw=Xr("rtc");function Zw(e,t=bn){Qd("ec",e,t)}const tv="components",YO="directives";function qe(e,t){return nv(tv,e,!0,t)||e}const Qw=Symbol.for("v-ndc");function pt(e){return nt(e)?nv(tv,e,!1)||e:e||Qw}function qs(e){return nv(YO,e)}function nv(e,t,n=!0,o=!1){const r=In||bn;if(r){const a=r.type;if(e===tv){const s=th(a,!1);if(s&&(s===t||s===jn(t)||s===Ws(jn(t))))return a}const l=Sb(r[e]||a[e],t)||Sb(r.appContext[e],t);return!l&&o?a:l}}function Sb(e,t){return e&&(e[t]||e[jn(t)]||e[Ws(jn(t))])}function bt(e,t,n,o){let r;const a=n&&n[o];if(Pe(e)||nt(e)){r=new Array(e.length);for(let l=0,s=e.length;lt(l,s,void 0,a&&a[s]));else{const l=Object.keys(e);r=new Array(l.length);for(let s=0,u=l.length;s{const a=o.fn(...r);return a&&(a.key=o.key),a}:o.fn)}return e}function ie(e,t,n={},o,r){if(In.isCE||In.parent&&ll(In.parent)&&In.parent.isCE)return t!=="default"&&(n.name=t),K("slot",n,o&&o());let a=e[t];a&&a._c&&(a._d=!1),T();const l=a&&e_(a(n)),s=re(Ve,{key:n.key||l&&l.key||`_${t}`},l||(o?o():[]),l&&e._===1?64:-2);return!r&&s.scopeId&&(s.slotScopeIds=[s.scopeId+"-s"]),a&&a._c&&(a._d=!0),s}function e_(e){return e.some(t=>Wt(t)?!(t.type===En||t.type===Ve&&!e_(t.children)):!0)?e:null}function t_(e,t){const n={};for(const o in e)n[t&&/[A-Z]/.test(o)?`on:${o}`:ls(o)]=e[o];return n}const Up=e=>e?y_(e)?tf(e)||e.proxy:Up(e.parent):null,Oi=an(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Up(e.parent),$root:e=>Up(e.root),$emit:e=>e.emit,$options:e=>ov(e),$forceUpdate:e=>e.f||(e.f=()=>qd(e.update)),$nextTick:e=>e.n||(e.n=We.bind(e.proxy)),$watch:e=>zO.bind(e)}),tp=(e,t)=>e!==Zt&&!e.__isScriptSetup&&Tt(e,t),qp={get({_:e},t){const{ctx:n,setupState:o,data:r,props:a,accessCache:l,type:s,appContext:u}=e;let c;if(t[0]!=="$"){const m=l[t];if(m!==void 0)switch(m){case 1:return o[t];case 2:return r[t];case 4:return n[t];case 3:return a[t]}else{if(tp(o,t))return l[t]=1,o[t];if(r!==Zt&&Tt(r,t))return l[t]=2,r[t];if((c=e.propsOptions[0])&&Tt(c,t))return l[t]=3,a[t];if(n!==Zt&&Tt(n,t))return l[t]=4,n[t];Yp&&(l[t]=0)}}const f=Oi[t];let d,p;if(f)return t==="$attrs"&&uo(e,"get",t),f(e);if((d=s.__cssModules)&&(d=d[t]))return d;if(n!==Zt&&Tt(n,t))return l[t]=4,n[t];if(p=u.config.globalProperties,Tt(p,t))return p[t]},set({_:e},t,n){const{data:o,setupState:r,ctx:a}=e;return tp(r,t)?(r[t]=n,!0):o!==Zt&&Tt(o,t)?(o[t]=n,!0):Tt(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(a[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:r,propsOptions:a}},l){let s;return!!n[l]||e!==Zt&&Tt(e,l)||tp(t,l)||(s=a[0])&&Tt(s,l)||Tt(o,l)||Tt(Oi,l)||Tt(r.config.globalProperties,l)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Tt(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}},GO=an({},qp,{get(e,t){if(t!==Symbol.unscopables)return qp.get(e,t,e)},has(e,t){return t[0]!=="_"&&!N$(t)}});function XO(){return null}function JO(){return null}function ZO(e){}function QO(e){}function eN(){return null}function tN(){}function nN(e,t){return null}function Sn(){return n_().slots}function xa(){return n_().attrs}function oN(e,t,n){const o=lt();if(n&&n.local){const r=R(e[t]);return ve(()=>e[t],a=>r.value=a),ve(r,a=>{a!==e[t]&&o.emit(`update:${t}`,a)}),r}else return{__v_isRef:!0,get value(){return e[t]},set value(r){o.emit(`update:${t}`,r)}}}function n_(){const e=lt();return e.setupContext||(e.setupContext=C_(e))}function Gi(e){return Pe(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}function rN(e,t){const n=Gi(e);for(const o in t){if(o.startsWith("__skip"))continue;let r=n[o];r?Pe(r)||Xe(r)?r=n[o]={type:r,default:t[o]}:r.default=t[o]:r===null&&(r=n[o]={default:t[o]}),r&&t[`__skip_${o}`]&&(r.skipFactory=!0)}return n}function aN(e,t){return!e||!t?e||t:Pe(e)&&Pe(t)?e.concat(t):an({},Gi(e),Gi(t))}function lN(e,t){const n={};for(const o in e)t.includes(o)||Object.defineProperty(n,o,{enumerable:!0,get:()=>e[o]});return n}function sN(e){const t=lt();let n=e();return _a(),vs(n)&&(n=n.catch(o=>{throw $a(t),o})),[n,()=>$a(t)]}let Yp=!0;function iN(e){const t=ov(e),n=e.proxy,o=e.ctx;Yp=!1,t.beforeCreate&&kb(t.beforeCreate,e,"bc");const{data:r,computed:a,methods:l,watch:s,provide:u,inject:c,created:f,beforeMount:d,mounted:p,beforeUpdate:m,updated:v,activated:h,deactivated:C,beforeDestroy:g,beforeUnmount:y,destroyed:_,unmounted:b,render:w,renderTracked:S,renderTriggered:E,errorCaptured:$,serverPrefetch:O,expose:A,inheritAttrs:M,components:D,directives:U,filters:j}=t;if(c&&uN(c,o,null),l)for(const P in l){const x=l[P];Xe(x)&&(o[P]=x.bind(n))}if(r){const P=r.call(n,n);dt(P)&&(e.data=Et(P))}if(Yp=!0,a)for(const P in a){const x=a[P],I=Xe(x)?x.bind(n,n):Xe(x.get)?x.get.bind(n,n):Bt,H=!Xe(x)&&Xe(x.set)?x.set.bind(n):Bt,G=k({get:I,set:H});Object.defineProperty(o,P,{enumerable:!0,configurable:!0,get:()=>G.value,set:J=>G.value=J})}if(s)for(const P in s)o_(s[P],o,n,P);if(u){const P=Xe(u)?u.call(n):u;Reflect.ownKeys(P).forEach(x=>{yt(x,P[x])})}f&&kb(f,e,"c");function L(P,x){Pe(x)?x.forEach(I=>P(I.bind(n))):x&&P(x.bind(n))}if(L(Su,d),L(at,p),L(ev,m),L(ar,v),L(Zm,h),L(Qm,C),L(Zw,$),L(Jw,S),L(Xw,E),L(zt,y),L(lr,b),L(Gw,O),Pe(A))if(A.length){const P=e.exposed||(e.exposed={});A.forEach(x=>{Object.defineProperty(P,x,{get:()=>n[x],set:I=>n[x]=I})})}else e.exposed||(e.exposed={});w&&e.render===Bt&&(e.render=w),M!=null&&(e.inheritAttrs=M),D&&(e.components=D),U&&(e.directives=U)}function uN(e,t,n=Bt){Pe(e)&&(e=Gp(e));for(const o in e){const r=e[o];let a;dt(r)?"default"in r?a=De(r.from||o,r.default,!0):a=De(r.from||o):a=De(r),xt(a)?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>a.value,set:l=>a.value=l}):t[o]=a}}function kb(e,t,n){yo(Pe(e)?e.map(o=>o.bind(t.proxy)):e.bind(t.proxy),t,n)}function o_(e,t,n,o){const r=o.includes(".")?Kw(n,o):()=>n[o];if(nt(e)){const a=t[e];Xe(a)&&ve(r,a)}else if(Xe(e))ve(r,e.bind(n));else if(dt(e))if(Pe(e))e.forEach(a=>o_(a,t,n,o));else{const a=Xe(e.handler)?e.handler.bind(n):t[e.handler];Xe(a)&&ve(r,a,e)}}function ov(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:r,optionsCache:a,config:{optionMergeStrategies:l}}=e.appContext,s=a.get(t);let u;return s?u=s:!r.length&&!n&&!o?u=t:(u={},r.length&&r.forEach(c=>id(u,c,l,!0)),id(u,t,l)),dt(t)&&a.set(t,u),u}function id(e,t,n,o=!1){const{mixins:r,extends:a}=t;a&&id(e,a,n,!0),r&&r.forEach(l=>id(e,l,n,!0));for(const l in t)if(!(o&&l==="expose")){const s=cN[l]||n&&n[l];e[l]=s?s(e[l],t[l]):t[l]}return e}const cN={data:Eb,props:Tb,emits:Tb,methods:Si,computed:Si,beforeCreate:Gn,created:Gn,beforeMount:Gn,mounted:Gn,beforeUpdate:Gn,updated:Gn,beforeDestroy:Gn,beforeUnmount:Gn,destroyed:Gn,unmounted:Gn,activated:Gn,deactivated:Gn,errorCaptured:Gn,serverPrefetch:Gn,components:Si,directives:Si,watch:fN,provide:Eb,inject:dN};function Eb(e,t){return t?e?function(){return an(Xe(e)?e.call(this,this):e,Xe(t)?t.call(this,this):t)}:t:e}function dN(e,t){return Si(Gp(e),Gp(t))}function Gp(e){if(Pe(e)){const t={};for(let n=0;n1)return n&&Xe(t)?t.call(o&&o.proxy):t}}function a_(){return!!(bn||In||Xi)}function mN(e,t,n,o=!1){const r={},a={};od(a,ef,1),e.propsDefaults=Object.create(null),l_(e,t,r,a);for(const l in e.propsOptions[0])l in r||(r[l]=void 0);n?e.props=o?r:Hm(r):e.type.props?e.props=r:e.props=a,e.attrs=a}function vN(e,t,n,o){const{props:r,attrs:a,vnode:{patchFlag:l}}=e,s=Mt(r),[u]=e.propsOptions;let c=!1;if((o||l>0)&&!(l&16)){if(l&8){const f=e.vnode.dynamicProps;for(let d=0;d{u=!0;const[p,m]=s_(d,t,!0);an(l,p),m&&s.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!a&&!u)return dt(e)&&o.set(e,rs),rs;if(Pe(a))for(let f=0;f-1,m[1]=h<0||v-1||Tt(m,"default"))&&s.push(d)}}}const c=[l,s];return dt(e)&&o.set(e,c),c}function $b(e){return e[0]!=="$"}function Ob(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function Nb(e,t){return Ob(e)===Ob(t)}function Ib(e,t){return Pe(t)?t.findIndex(n=>Nb(n,e)):Xe(t)&&Nb(t,e)?0:-1}const i_=e=>e[0]==="_"||e==="$stable",rv=e=>Pe(e)?e.map(ho):[ho(e)],gN=(e,t,n)=>{if(t._n)return t;const o=X((...r)=>rv(t(...r)),n);return o._c=!1,o},u_=(e,t,n)=>{const o=e._ctx;for(const r in e){if(i_(r))continue;const a=e[r];if(Xe(a))t[r]=gN(r,a,o);else if(a!=null){const l=rv(a);t[r]=()=>l}}},c_=(e,t)=>{const n=rv(t);e.slots.default=()=>n},bN=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=Mt(t),od(t,"_",n)):u_(t,e.slots={})}else e.slots={},t&&c_(e,t);od(e.slots,ef,1)},yN=(e,t,n)=>{const{vnode:o,slots:r}=e;let a=!0,l=Zt;if(o.shapeFlag&32){const s=t._;s?n&&s===1?a=!1:(an(r,t),!n&&s===1&&delete r._):(a=!t.$stable,u_(t,r)),l=t}else t&&(c_(e,t),l={default:1});if(a)for(const s in r)!i_(s)&&!(s in l)&&delete r[s]};function ud(e,t,n,o,r=!1){if(Pe(e)){e.forEach((p,m)=>ud(p,t&&(Pe(t)?t[m]:t),n,o,r));return}if(ll(o)&&!r)return;const a=o.shapeFlag&4?tf(o.component)||o.component.proxy:o.el,l=r?null:a,{i:s,r:u}=e,c=t&&t.r,f=s.refs===Zt?s.refs={}:s.refs,d=s.setupState;if(c!=null&&c!==u&&(nt(c)?(f[c]=null,Tt(d,c)&&(d[c]=null)):xt(c)&&(c.value=null)),Xe(u))Wr(u,s,12,[l,f]);else{const p=nt(u),m=xt(u);if(p||m){const v=()=>{if(e.f){const h=p?Tt(d,u)?d[u]:f[u]:u.value;r?Pe(h)&&xm(h,a):Pe(h)?h.includes(a)||h.push(a):p?(f[u]=[a],Tt(d,u)&&(d[u]=f[u])):(u.value=[a],e.k&&(f[e.k]=u.value))}else p?(f[u]=l,Tt(d,u)&&(d[u]=l)):m&&(u.value=l,e.k&&(f[e.k]=l))};l?(v.id=-1,Pn(v,n)):v()}}}let la=!1;const nc=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",oc=e=>e.nodeType===8;function wN(e){const{mt:t,p:n,o:{patchProp:o,createText:r,nextSibling:a,parentNode:l,remove:s,insert:u,createComment:c}}=e,f=(g,y)=>{if(!y.hasChildNodes()){n(null,g,y),sd(),y._vnode=g;return}la=!1,d(y.firstChild,g,null,null,null),sd(),y._vnode=g,la&&console.error("Hydration completed but contains mismatches.")},d=(g,y,_,b,w,S=!1)=>{const E=oc(g)&&g.data==="[",$=()=>h(g,y,_,b,w,E),{type:O,ref:A,shapeFlag:M,patchFlag:D}=y;let U=g.nodeType;y.el=g,D===-2&&(S=!1,y.dynamicChildren=null);let j=null;switch(O){case Ur:U!==3?y.children===""?(u(y.el=r(""),l(g),g),j=g):j=$():(g.data!==y.children&&(la=!0,g.data=y.children),j=a(g));break;case En:U!==8||E?j=$():j=a(g);break;case sl:if(E&&(g=a(g),U=g.nodeType),U===1||U===3){j=g;const W=!y.children.length;for(let L=0;L{S=S||!!y.dynamicChildren;const{type:E,props:$,patchFlag:O,shapeFlag:A,dirs:M}=y,D=E==="input"&&M||E==="option";if(D||O!==-1){if(M&&pr(y,null,_,"created"),$)if(D||!S||O&48)for(const j in $)(D&&j.endsWith("value")||yu(j)&&!$i(j))&&o(g,j,null,$[j],!1,void 0,_);else $.onClick&&o(g,"onClick",null,$.onClick,!1,void 0,_);let U;if((U=$&&$.onVnodeBeforeMount)&&ro(U,_,y),M&&pr(y,null,_,"beforeMount"),((U=$&&$.onVnodeMounted)||M)&&jw(()=>{U&&ro(U,_,y),M&&pr(y,null,_,"mounted")},b),A&16&&!($&&($.innerHTML||$.textContent))){let j=m(g.firstChild,y,g,_,b,w,S);for(;j;){la=!0;const W=j;j=j.nextSibling,s(W)}}else A&8&&g.textContent!==y.children&&(la=!0,g.textContent=y.children)}return g.nextSibling},m=(g,y,_,b,w,S,E)=>{E=E||!!y.dynamicChildren;const $=y.children,O=$.length;for(let A=0;A{const{slotScopeIds:E}=y;E&&(w=w?w.concat(E):E);const $=l(g),O=m(a(g),y,$,_,b,w,S);return O&&oc(O)&&O.data==="]"?a(y.anchor=O):(la=!0,u(y.anchor=c("]"),$,O),O)},h=(g,y,_,b,w,S)=>{if(la=!0,y.el=null,S){const O=C(g);for(;;){const A=a(g);if(A&&A!==O)s(A);else break}}const E=a(g),$=l(g);return s(g),n(null,y,$,E,_,b,nc($),w),E},C=g=>{let y=0;for(;g;)if(g=a(g),g&&oc(g)&&(g.data==="["&&y++,g.data==="]")){if(y===0)return a(g);y--}return g};return[f,d]}const Pn=jw;function d_(e){return p_(e)}function f_(e){return p_(e,wN)}function p_(e,t){const n=Hp();n.__VUE__=!0;const{insert:o,remove:r,patchProp:a,createElement:l,createText:s,createComment:u,setText:c,setElementText:f,parentNode:d,nextSibling:p,setScopeId:m=Bt,insertStaticContent:v}=e,h=(q,B,z,Z=null,ue=null,se=null,me=!1,_e=null,$e=!!B.dynamicChildren)=>{if(q===B)return;q&&!Xo(q,B)&&(Z=ke(q),J(q,ue,se,!0),q=null),B.patchFlag===-2&&($e=!1,B.dynamicChildren=null);const{type:Ce,ref:ce,shapeFlag:de}=B;switch(Ce){case Ur:C(q,B,z,Z);break;case En:g(q,B,z,Z);break;case sl:q==null&&y(B,z,Z,me);break;case Ve:D(q,B,z,Z,ue,se,me,_e,$e);break;default:de&1?w(q,B,z,Z,ue,se,me,_e,$e):de&6?U(q,B,z,Z,ue,se,me,_e,$e):(de&64||de&128)&&Ce.process(q,B,z,Z,ue,se,me,_e,$e,Oe)}ce!=null&&ue&&ud(ce,q&&q.ref,se,B||q,!B)},C=(q,B,z,Z)=>{if(q==null)o(B.el=s(B.children),z,Z);else{const ue=B.el=q.el;B.children!==q.children&&c(ue,B.children)}},g=(q,B,z,Z)=>{q==null?o(B.el=u(B.children||""),z,Z):B.el=q.el},y=(q,B,z,Z)=>{[q.el,q.anchor]=v(q.children,B,z,Z,q.el,q.anchor)},_=({el:q,anchor:B},z,Z)=>{let ue;for(;q&&q!==B;)ue=p(q),o(q,z,Z),q=ue;o(B,z,Z)},b=({el:q,anchor:B})=>{let z;for(;q&&q!==B;)z=p(q),r(q),q=z;r(B)},w=(q,B,z,Z,ue,se,me,_e,$e)=>{me=me||B.type==="svg",q==null?S(B,z,Z,ue,se,me,_e,$e):O(q,B,ue,se,me,_e,$e)},S=(q,B,z,Z,ue,se,me,_e)=>{let $e,Ce;const{type:ce,props:de,shapeFlag:xe,transition:he,dirs:He}=q;if($e=q.el=l(q.type,se,de&&de.is,de),xe&8?f($e,q.children):xe&16&&$(q.children,$e,null,Z,ue,se&&ce!=="foreignObject",me,_e),He&&pr(q,null,Z,"created"),E($e,q,q.scopeId,me,Z),de){for(const rt in de)rt!=="value"&&!$i(rt)&&a($e,rt,null,de[rt],se,q.children,Z,ue,oe);"value"in de&&a($e,"value",null,de.value),(Ce=de.onVnodeBeforeMount)&&ro(Ce,Z,q)}He&&pr(q,null,Z,"beforeMount");const et=(!ue||ue&&!ue.pendingBranch)&&he&&!he.persisted;et&&he.beforeEnter($e),o($e,B,z),((Ce=de&&de.onVnodeMounted)||et||He)&&Pn(()=>{Ce&&ro(Ce,Z,q),et&&he.enter($e),He&&pr(q,null,Z,"mounted")},ue)},E=(q,B,z,Z,ue)=>{if(z&&m(q,z),Z)for(let se=0;se{for(let Ce=$e;Ce{const _e=B.el=q.el;let{patchFlag:$e,dynamicChildren:Ce,dirs:ce}=B;$e|=q.patchFlag&16;const de=q.props||Zt,xe=B.props||Zt;let he;z&&Ha(z,!1),(he=xe.onVnodeBeforeUpdate)&&ro(he,z,B,q),ce&&pr(B,q,z,"beforeUpdate"),z&&Ha(z,!0);const He=ue&&B.type!=="foreignObject";if(Ce?A(q.dynamicChildren,Ce,_e,z,Z,He,se):me||x(q,B,_e,null,z,Z,He,se,!1),$e>0){if($e&16)M(_e,B,de,xe,z,Z,ue);else if($e&2&&de.class!==xe.class&&a(_e,"class",null,xe.class,ue),$e&4&&a(_e,"style",de.style,xe.style,ue),$e&8){const et=B.dynamicProps;for(let rt=0;rt{he&&ro(he,z,B,q),ce&&pr(B,q,z,"updated")},Z)},A=(q,B,z,Z,ue,se,me)=>{for(let _e=0;_e{if(z!==Z){if(z!==Zt)for(const _e in z)!$i(_e)&&!(_e in Z)&&a(q,_e,z[_e],null,me,B.children,ue,se,oe);for(const _e in Z){if($i(_e))continue;const $e=Z[_e],Ce=z[_e];$e!==Ce&&_e!=="value"&&a(q,_e,Ce,$e,me,B.children,ue,se,oe)}"value"in Z&&a(q,"value",z.value,Z.value)}},D=(q,B,z,Z,ue,se,me,_e,$e)=>{const Ce=B.el=q?q.el:s(""),ce=B.anchor=q?q.anchor:s("");let{patchFlag:de,dynamicChildren:xe,slotScopeIds:he}=B;he&&(_e=_e?_e.concat(he):he),q==null?(o(Ce,z,Z),o(ce,z,Z),$(B.children,z,ce,ue,se,me,_e,$e)):de>0&&de&64&&xe&&q.dynamicChildren?(A(q.dynamicChildren,xe,z,ue,se,me,_e),(B.key!=null||ue&&B===ue.subTree)&&av(q,B,!0)):x(q,B,z,ce,ue,se,me,_e,$e)},U=(q,B,z,Z,ue,se,me,_e,$e)=>{B.slotScopeIds=_e,q==null?B.shapeFlag&512?ue.ctx.activate(B,z,Z,me,$e):j(B,z,Z,ue,se,me,$e):W(q,B,$e)},j=(q,B,z,Z,ue,se,me)=>{const _e=q.component=b_(q,Z,ue);if(Cu(q)&&(_e.ctx.renderer=Oe),w_(_e),_e.asyncDep){if(ue&&ue.registerDep(_e,L),!q.el){const $e=_e.subTree=K(En);g(null,$e,B,z)}return}L(_e,q,B,z,ue,se,me)},W=(q,B,z)=>{const Z=B.component=q.component;if(PO(q,B,z))if(Z.asyncDep&&!Z.asyncResolved){P(Z,B,z);return}else Z.next=B,TO(Z.update),Z.update();else B.el=q.el,Z.vnode=B},L=(q,B,z,Z,ue,se,me)=>{const _e=()=>{if(q.isMounted){let{next:ce,bu:de,u:xe,parent:he,vnode:He}=q,et=ce,rt;Ha(q,!1),ce?(ce.el=He.el,P(q,ce,me)):ce=He,de&&ss(de),(rt=ce.props&&ce.props.onVnodeBeforeUpdate)&&ro(rt,he,ce,He),Ha(q,!0);const wt=$c(q),Ze=q.subTree;q.subTree=wt,h(Ze,wt,d(Ze.el),ke(Ze),q,ue,se),ce.el=wt.el,et===null&&Ym(q,wt.el),xe&&Pn(xe,ue),(rt=ce.props&&ce.props.onVnodeUpdated)&&Pn(()=>ro(rt,he,ce,He),ue)}else{let ce;const{el:de,props:xe}=B,{bm:he,m:He,parent:et}=q,rt=ll(B);if(Ha(q,!1),he&&ss(he),!rt&&(ce=xe&&xe.onVnodeBeforeMount)&&ro(ce,et,B),Ha(q,!0),de&&ge){const wt=()=>{q.subTree=$c(q),ge(de,q.subTree,q,ue,null)};rt?B.type.__asyncLoader().then(()=>!q.isUnmounted&&wt()):wt()}else{const wt=q.subTree=$c(q);h(null,wt,z,Z,q,ue,se),B.el=wt.el}if(He&&Pn(He,ue),!rt&&(ce=xe&&xe.onVnodeMounted)){const wt=B;Pn(()=>ro(ce,et,wt),ue)}(B.shapeFlag&256||et&&ll(et.vnode)&&et.vnode.shapeFlag&256)&&q.a&&Pn(q.a,ue),q.isMounted=!0,B=z=Z=null}},$e=q.effect=new wu(_e,()=>qd(Ce),q.scope),Ce=q.update=()=>$e.run();Ce.id=q.uid,Ha(q,!0),Ce()},P=(q,B,z)=>{B.component=q;const Z=q.vnode.props;q.vnode=B,q.next=null,vN(q,B.props,Z,z),yN(q,B.children,z),Ks(),yb(),Us()},x=(q,B,z,Z,ue,se,me,_e,$e=!1)=>{const Ce=q&&q.children,ce=q?q.shapeFlag:0,de=B.children,{patchFlag:xe,shapeFlag:he}=B;if(xe>0){if(xe&128){H(Ce,de,z,Z,ue,se,me,_e,$e);return}else if(xe&256){I(Ce,de,z,Z,ue,se,me,_e,$e);return}}he&8?(ce&16&&oe(Ce,ue,se),de!==Ce&&f(z,de)):ce&16?he&16?H(Ce,de,z,Z,ue,se,me,_e,$e):oe(Ce,ue,se,!0):(ce&8&&f(z,""),he&16&&$(de,z,Z,ue,se,me,_e,$e))},I=(q,B,z,Z,ue,se,me,_e,$e)=>{q=q||rs,B=B||rs;const Ce=q.length,ce=B.length,de=Math.min(Ce,ce);let xe;for(xe=0;xece?oe(q,ue,se,!0,!1,de):$(B,z,Z,ue,se,me,_e,$e,de)},H=(q,B,z,Z,ue,se,me,_e,$e)=>{let Ce=0;const ce=B.length;let de=q.length-1,xe=ce-1;for(;Ce<=de&&Ce<=xe;){const he=q[Ce],He=B[Ce]=$e?va(B[Ce]):ho(B[Ce]);if(Xo(he,He))h(he,He,z,null,ue,se,me,_e,$e);else break;Ce++}for(;Ce<=de&&Ce<=xe;){const he=q[de],He=B[xe]=$e?va(B[xe]):ho(B[xe]);if(Xo(he,He))h(he,He,z,null,ue,se,me,_e,$e);else break;de--,xe--}if(Ce>de){if(Ce<=xe){const he=xe+1,He=hexe)for(;Ce<=de;)J(q[Ce],ue,se,!0),Ce++;else{const he=Ce,He=Ce,et=new Map;for(Ce=He;Ce<=xe;Ce++){const be=B[Ce]=$e?va(B[Ce]):ho(B[Ce]);be.key!=null&&et.set(be.key,Ce)}let rt,wt=0;const Ze=xe-He+1;let st=!1,Ee=0;const ye=new Array(Ze);for(Ce=0;Ce=Ze){J(be,ue,se,!0);continue}let Fe;if(be.key!=null)Fe=et.get(be.key);else for(rt=He;rt<=xe;rt++)if(ye[rt-He]===0&&Xo(be,B[rt])){Fe=rt;break}Fe===void 0?J(be,ue,se,!0):(ye[Fe-He]=Ce+1,Fe>=Ee?Ee=Fe:st=!0,h(be,B[Fe],z,null,ue,se,me,_e,$e),wt++)}const ne=st?_N(ye):rs;for(rt=ne.length-1,Ce=Ze-1;Ce>=0;Ce--){const be=He+Ce,Fe=B[be],vt=be+1{const{el:se,type:me,transition:_e,children:$e,shapeFlag:Ce}=q;if(Ce&6){G(q.component.subTree,B,z,Z);return}if(Ce&128){q.suspense.move(B,z,Z);return}if(Ce&64){me.move(q,B,z,Oe);return}if(me===Ve){o(se,B,z);for(let de=0;de<$e.length;de++)G($e[de],B,z,Z);o(q.anchor,B,z);return}if(me===sl){_(q,B,z);return}if(Z!==2&&Ce&1&&_e)if(Z===0)_e.beforeEnter(se),o(se,B,z),Pn(()=>_e.enter(se),ue);else{const{leave:de,delayLeave:xe,afterLeave:he}=_e,He=()=>o(se,B,z),et=()=>{de(se,()=>{He(),he&&he()})};xe?xe(se,He,et):et()}else o(se,B,z)},J=(q,B,z,Z=!1,ue=!1)=>{const{type:se,props:me,ref:_e,children:$e,dynamicChildren:Ce,shapeFlag:ce,patchFlag:de,dirs:xe}=q;if(_e!=null&&ud(_e,null,z,q,!0),ce&256){B.ctx.deactivate(q);return}const he=ce&1&&xe,He=!ll(q);let et;if(He&&(et=me&&me.onVnodeBeforeUnmount)&&ro(et,B,q),ce&6)Te(q.component,z,Z);else{if(ce&128){q.suspense.unmount(z,Z);return}he&&pr(q,null,B,"beforeUnmount"),ce&64?q.type.remove(q,B,z,ue,Oe,Z):Ce&&(se!==Ve||de>0&&de&64)?oe(Ce,B,z,!1,!0):(se===Ve&&de&384||!ue&&ce&16)&&oe($e,B,z),Z&&ee(q)}(He&&(et=me&&me.onVnodeUnmounted)||he)&&Pn(()=>{et&&ro(et,B,q),he&&pr(q,null,B,"unmounted")},z)},ee=q=>{const{type:B,el:z,anchor:Z,transition:ue}=q;if(B===Ve){fe(z,Z);return}if(B===sl){b(q);return}const se=()=>{r(z),ue&&!ue.persisted&&ue.afterLeave&&ue.afterLeave()};if(q.shapeFlag&1&&ue&&!ue.persisted){const{leave:me,delayLeave:_e}=ue,$e=()=>me(z,se);_e?_e(q.el,se,$e):$e()}else se()},fe=(q,B)=>{let z;for(;q!==B;)z=p(q),r(q),q=z;r(B)},Te=(q,B,z)=>{const{bum:Z,scope:ue,update:se,subTree:me,um:_e}=q;Z&&ss(Z),ue.stop(),se&&(se.active=!1,J(me,q,B,z)),_e&&Pn(_e,B),Pn(()=>{q.isUnmounted=!0},B),B&&B.pendingBranch&&!B.isUnmounted&&q.asyncDep&&!q.asyncResolved&&q.suspenseId===B.pendingId&&(B.deps--,B.deps===0&&B.resolve())},oe=(q,B,z,Z=!1,ue=!1,se=0)=>{for(let me=se;meq.shapeFlag&6?ke(q.component.subTree):q.shapeFlag&128?q.suspense.next():p(q.anchor||q.el),ae=(q,B,z)=>{q==null?B._vnode&&J(B._vnode,null,null,!0):h(B._vnode||null,q,B,null,null,null,z),yb(),sd(),B._vnode=q},Oe={p:h,um:J,m:G,r:ee,mt:j,mc:$,pc:x,pbc:A,n:ke,o:e};let we,ge;return t&&([we,ge]=t(Oe)),{render:ae,hydrate:we,createApp:hN(ae,we)}}function Ha({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function av(e,t,n=!1){const o=e.children,r=t.children;if(Pe(o)&&Pe(r))for(let a=0;a>1,e[n[s]]0&&(t[o]=n[a-1]),n[a]=o)}}for(a=n.length,l=n[a-1];a-- >0;)n[a]=l,l=t[l];return n}const CN=e=>e.__isTeleport,Ni=e=>e&&(e.disabled||e.disabled===""),Mb=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Jp=(e,t)=>{const n=e&&e.to;return nt(n)?t?t(n):null:n},SN={__isTeleport:!0,process(e,t,n,o,r,a,l,s,u,c){const{mc:f,pc:d,pbc:p,o:{insert:m,querySelector:v,createText:h,createComment:C}}=c,g=Ni(t.props);let{shapeFlag:y,children:_,dynamicChildren:b}=t;if(e==null){const w=t.el=h(""),S=t.anchor=h("");m(w,n,o),m(S,n,o);const E=t.target=Jp(t.props,v),$=t.targetAnchor=h("");E&&(m($,E),l=l||Mb(E));const O=(A,M)=>{y&16&&f(_,A,M,r,a,l,s,u)};g?O(n,S):E&&O(E,$)}else{t.el=e.el;const w=t.anchor=e.anchor,S=t.target=e.target,E=t.targetAnchor=e.targetAnchor,$=Ni(e.props),O=$?n:S,A=$?w:E;if(l=l||Mb(S),b?(p(e.dynamicChildren,b,O,r,a,l,s),av(e,t,!0)):u||d(e,t,O,A,r,a,l,s,!1),g)$||rc(t,n,w,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const M=t.target=Jp(t.props,v);M&&rc(t,M,null,c,0)}else $&&rc(t,S,E,c,1)}h_(t)},remove(e,t,n,o,{um:r,o:{remove:a}},l){const{shapeFlag:s,children:u,anchor:c,targetAnchor:f,target:d,props:p}=e;if(d&&a(f),(l||!Ni(p))&&(a(c),s&16))for(let m=0;m0?ao||rs:null,m_(),gl>0&&ao&&ao.push(e),e}function V(e,t,n,o,r,a){return v_(F(e,t,n,o,r,a,!0))}function re(e,t,n,o,r){return v_(K(e,t,n,o,r,!0))}function Wt(e){return e?e.__v_isVNode===!0:!1}function Xo(e,t){return e.type===t.type&&e.key===t.key}function EN(e){}const ef="__vInternal",g_=({key:e})=>e??null,Oc=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?nt(e)||xt(e)||Xe(e)?{i:In,r:e,k:t,f:!!n}:e:null);function F(e,t=null,n=null,o=0,r=null,a=e===Ve?0:1,l=!1,s=!1){const u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&g_(t),ref:t&&Oc(t),scopeId:Gd,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:a,patchFlag:o,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:In};return s?(lv(u,n),a&128&&e.normalize(u)):n&&(u.shapeFlag|=nt(n)?8:16),gl>0&&!l&&ao&&(u.patchFlag>0||a&6)&&u.patchFlag!==32&&ao.push(u),u}const K=TN;function TN(e,t=null,n=null,o=0,r=null,a=!1){if((!e||e===Qw)&&(e=En),Wt(e)){const s=Qo(e,t,!0);return n&&lv(s,n),gl>0&&!a&&ao&&(s.shapeFlag&6?ao[ao.indexOf(e)]=s:ao.push(s)),s.patchFlag|=-2,s}if(RN(e)&&(e=e.__vccOpts),t){t=bl(t);let{class:s,style:u}=t;s&&!nt(s)&&(t.class=N(s)),dt(u)&&(zm(u)&&!Pe(u)&&(u=an({},u)),t.style=je(u))}const l=nt(e)?1:zw(e)?128:CN(e)?64:dt(e)?4:Xe(e)?2:0;return F(e,t,n,o,r,l,a,!0)}function bl(e){return e?zm(e)||ef in e?an({},e):e:null}function Qo(e,t,n=!1){const{props:o,ref:r,patchFlag:a,children:l}=e,s=t?mt(o||{},t):o;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:s,key:s&&g_(s),ref:t&&t.ref?n&&r?Pe(r)?r.concat(Oc(t)):[r,Oc(t)]:Oc(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ve?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Qo(e.ssContent),ssFallback:e.ssFallback&&Qo(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Ge(e=" ",t=0){return K(Ur,null,e,t)}function $N(e,t){const n=K(sl,null,e);return n.staticCount=t,n}function te(e="",t=!1){return t?(T(),re(En,null,e)):K(En,null,e)}function ho(e){return e==null||typeof e=="boolean"?K(En):Pe(e)?K(Ve,null,e.slice()):typeof e=="object"?va(e):K(Ur,null,String(e))}function va(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Qo(e)}function lv(e,t){let n=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(Pe(t))n=16;else if(typeof t=="object")if(o&65){const r=t.default;r&&(r._c&&(r._d=!1),lv(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!(ef in t)?t._ctx=In:r===3&&In&&(In.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else Xe(t)?(t={default:t,_ctx:In},n=32):(t=String(t),o&64?(n=16,t=[Ge(t)]):n=8);e.children=t,e.shapeFlag|=n}function mt(...e){const t={};for(let n=0;nbn||In;let sv,jl,Ab="__VUE_INSTANCE_SETTERS__";(jl=Hp()[Ab])||(jl=Hp()[Ab]=[]),jl.push(e=>bn=e),sv=e=>{jl.length>1?jl.forEach(t=>t(e)):jl[0](e)};const $a=e=>{sv(e),e.scope.on()},_a=()=>{bn&&bn.scope.off(),sv(null)};function y_(e){return e.vnode.shapeFlag&4}let ys=!1;function w_(e,t=!1){ys=t;const{props:n,children:o}=e.vnode,r=y_(e);mN(e,n,r,t),bN(e,o);const a=r?IN(e,t):void 0;return ys=!1,a}function IN(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Po(new Proxy(e.ctx,qp));const{setup:o}=n;if(o){const r=e.setupContext=o.length>1?C_(e):null;$a(e),Ks();const a=Wr(o,e,0,[e.props,r]);if(Us(),_a(),vs(a)){if(a.then(_a,_a),t)return a.then(l=>{Qp(e,l,t)}).catch(l=>{Al(l,e,0)});e.asyncDep=a}else Qp(e,a,t)}else __(e,t)}function Qp(e,t,n){Xe(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:dt(t)&&(e.setupState=Km(t)),__(e,n)}let cd,eh;function MN(e){cd=e,eh=t=>{t.render._rc&&(t.withProxy=new Proxy(t.ctx,GO))}}const AN=()=>!cd;function __(e,t,n){const o=e.type;if(!e.render){if(!t&&cd&&!o.render){const r=o.template||ov(e).template;if(r){const{isCustomElement:a,compilerOptions:l}=e.appContext.config,{delimiters:s,compilerOptions:u}=o,c=an(an({isCustomElement:a,delimiters:s},l),u);o.render=cd(r,c)}}e.render=o.render||Bt,eh&&eh(e)}$a(e),Ks(),iN(e),Us(),_a()}function PN(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return uo(e,"get","$attrs"),t[n]}}))}function C_(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return PN(e)},slots:e.slots,emit:e.emit,expose:t}}function tf(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Km(Po(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Oi)return Oi[n](e)},has(t,n){return n in t||n in Oi}}))}function th(e,t=!0){return Xe(e)?e.displayName||e.name:e.name||t&&e.__name}function RN(e){return Xe(e)&&"__vccOpts"in e}const k=(e,t)=>CO(e,t,ys);function Ke(e,t,n){const o=arguments.length;return o===2?dt(t)&&!Pe(t)?Wt(t)?K(e,null,[t]):K(e,t):K(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):o===3&&Wt(n)&&(n=[n]),K(e,t,n))}const S_=Symbol.for("v-scx"),k_=()=>De(S_);function LN(){}function xN(e,t,n,o){const r=n[o];if(r&&E_(r,e))return r;const a=t();return a.memo=e.slice(),n[o]=a}function E_(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let o=0;o0&&ao&&ao.push(e),!0}const T_="3.3.4",DN={createComponentInstance:b_,setupComponent:w_,renderComponentRoot:$c,setCurrentRenderingInstance:qi,isVNode:Wt,normalizeVNode:ho},FN=DN,BN=null,VN=null,HN="http://www.w3.org/2000/svg",Ya=typeof document<"u"?document:null,Pb=Ya&&Ya.createElement("template"),zN={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const r=t?Ya.createElementNS(HN,e):Ya.createElement(e,n?{is:n}:void 0);return e==="select"&&o&&o.multiple!=null&&r.setAttribute("multiple",o.multiple),r},createText:e=>Ya.createTextNode(e),createComment:e=>Ya.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ya.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,o,r,a){const l=n?n.previousSibling:t.lastChild;if(r&&(r===a||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===a||!(r=r.nextSibling)););else{Pb.innerHTML=o?`${e}`:e;const s=Pb.content;if(o){const u=s.firstChild;for(;u.firstChild;)s.appendChild(u.firstChild);s.removeChild(u)}t.insertBefore(s,n)}return[l?l.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function jN(e,t,n){const o=e._vtc;o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function WN(e,t,n){const o=e.style,r=nt(n);if(n&&!r){if(t&&!nt(t))for(const a in t)n[a]==null&&nh(o,a,"");for(const a in n)nh(o,a,n[a])}else{const a=o.display;r?t!==n&&(o.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(o.display=a)}}const Rb=/\s*!important$/;function nh(e,t,n){if(Pe(n))n.forEach(o=>nh(e,t,o));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const o=KN(e,t);Rb.test(n)?e.setProperty(mo(o),n.replace(Rb,""),"important"):e[o]=n}}const Lb=["Webkit","Moz","ms"],np={};function KN(e,t){const n=np[t];if(n)return n;let o=jn(t);if(o!=="filter"&&o in e)return np[t]=o;o=Ws(o);for(let r=0;rop||(JN.then(()=>op=0),op=Date.now());function QN(e,t){const n=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=n.attached)return;yo(eI(o,n.value),t,5,[o])};return n.value=e,n.attached=ZN(),n}function eI(e,t){if(Pe(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(o=>r=>!r._stopped&&o&&o(r))}else return t}const Fb=/^on[a-z]/,tI=(e,t,n,o,r=!1,a,l,s,u)=>{t==="class"?jN(e,o,r):t==="style"?WN(e,n,o):yu(t)?Lm(t)||GN(e,t,n,o,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):nI(e,t,o,r))?qN(e,t,o,a,l,s,u):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),UN(e,t,o,r))};function nI(e,t,n,o){return o?!!(t==="innerHTML"||t==="textContent"||t in e&&Fb.test(t)&&Xe(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||Fb.test(t)&&nt(n)?!1:t in e}function $_(e,t){const n=Y(e);class o extends nf{constructor(a){super(n,a,t)}}return o.def=n,o}const oI=e=>$_(e,z_),rI=typeof HTMLElement<"u"?HTMLElement:class{};class nf extends rI{constructor(t,n={},o){super(),this._def=t,this._props=n,this._instance=null,this._connected=!1,this._resolved=!1,this._numberProps=null,this.shadowRoot&&o?o(this._createVNode(),this.shadowRoot):(this.attachShadow({mode:"open"}),this._def.__asyncLoader||this._resolveProps(this._def))}connectedCallback(){this._connected=!0,this._instance||(this._resolved?this._update():this._resolveDef())}disconnectedCallback(){this._connected=!1,We(()=>{this._connected||(er(null,this.shadowRoot),this._instance=null)})}_resolveDef(){this._resolved=!0;for(let o=0;o{for(const r of o)this._setAttr(r.attributeName)}).observe(this,{attributes:!0});const t=(o,r=!1)=>{const{props:a,styles:l}=o;let s;if(a&&!Pe(a))for(const u in a){const c=a[u];(c===Number||c&&c.type===Number)&&(u in this._props&&(this._props[u]=ad(this._props[u])),(s||(s=Object.create(null)))[jn(u)]=!0)}this._numberProps=s,r&&this._resolveProps(o),this._applyStyles(l),this._update()},n=this._def.__asyncLoader;n?n().then(o=>t(o,!0)):t(this._def)}_resolveProps(t){const{props:n}=t,o=Pe(n)?n:Object.keys(n||{});for(const r of Object.keys(this))r[0]!=="_"&&o.includes(r)&&this._setProp(r,this[r],!0,!1);for(const r of o.map(jn))Object.defineProperty(this,r,{get(){return this._getProp(r)},set(a){this._setProp(r,a)}})}_setAttr(t){let n=this.getAttribute(t);const o=jn(t);this._numberProps&&this._numberProps[o]&&(n=ad(n)),this._setProp(o,n,!1)}_getProp(t){return this._props[t]}_setProp(t,n,o=!0,r=!0){n!==this._props[t]&&(this._props[t]=n,r&&this._instance&&this._update(),o&&(n===!0?this.setAttribute(mo(t),""):typeof n=="string"||typeof n=="number"?this.setAttribute(mo(t),n+""):n||this.removeAttribute(mo(t))))}_update(){er(this._createVNode(),this.shadowRoot)}_createVNode(){const t=K(this._def,an({},this._props));return this._instance||(t.ce=n=>{this._instance=n,n.isCE=!0;const o=(a,l)=>{this.dispatchEvent(new CustomEvent(a,{detail:l}))};n.emit=(a,...l)=>{o(a,l),mo(a)!==a&&o(mo(a),l)};let r=this;for(;r=r&&(r.parentNode||r.host);)if(r instanceof nf){n.parent=r._instance,n.provides=r._instance.provides;break}}),t}_applyStyles(t){t&&t.forEach(n=>{const o=document.createElement("style");o.textContent=n,this.shadowRoot.appendChild(o)})}}function aI(e="$style"){{const t=lt();if(!t)return Zt;const n=t.type.__cssModules;if(!n)return Zt;const o=n[e];return o||Zt}}function lI(e){const t=lt();if(!t)return;const n=t.ut=(r=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(a=>rh(a,r))},o=()=>{const r=e(t.proxy);oh(t.subTree,r),n(r)};Ww(o),at(()=>{const r=new MutationObserver(o);r.observe(t.subTree.el.parentNode,{childList:!0}),lr(()=>r.disconnect())})}function oh(e,t){if(e.shapeFlag&128){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{oh(n.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)rh(e.el,t);else if(e.type===Ve)e.children.forEach(n=>oh(n,t));else if(e.type===sl){let{el:n,anchor:o}=e;for(;n&&(rh(n,t),n!==o);)n=n.nextSibling}}function rh(e,t){if(e.nodeType===1){const n=e.style;for(const o in t)n.setProperty(`--${o}`,t[o])}}const sa="transition",di="animation",fn=(e,{slots:t})=>Ke(Uw,N_(e),t);fn.displayName="Transition";const O_={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},sI=fn.props=an({},Jm,O_),za=(e,t=[])=>{Pe(e)?e.forEach(n=>n(...t)):e&&e(...t)},Bb=e=>e?Pe(e)?e.some(t=>t.length>1):e.length>1:!1;function N_(e){const t={};for(const D in e)D in O_||(t[D]=e[D]);if(e.css===!1)return t;const{name:n="v",type:o,duration:r,enterFromClass:a=`${n}-enter-from`,enterActiveClass:l=`${n}-enter-active`,enterToClass:s=`${n}-enter-to`,appearFromClass:u=a,appearActiveClass:c=l,appearToClass:f=s,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:m=`${n}-leave-to`}=e,v=iI(r),h=v&&v[0],C=v&&v[1],{onBeforeEnter:g,onEnter:y,onEnterCancelled:_,onLeave:b,onLeaveCancelled:w,onBeforeAppear:S=g,onAppear:E=y,onAppearCancelled:$=_}=t,O=(D,U,j)=>{da(D,U?f:s),da(D,U?c:l),j&&j()},A=(D,U)=>{D._isLeaving=!1,da(D,d),da(D,m),da(D,p),U&&U()},M=D=>(U,j)=>{const W=D?E:y,L=()=>O(U,D,j);za(W,[U,L]),Vb(()=>{da(U,D?u:a),Fr(U,D?f:s),Bb(W)||Hb(U,o,h,L)})};return an(t,{onBeforeEnter(D){za(g,[D]),Fr(D,a),Fr(D,l)},onBeforeAppear(D){za(S,[D]),Fr(D,u),Fr(D,c)},onEnter:M(!1),onAppear:M(!0),onLeave(D,U){D._isLeaving=!0;const j=()=>A(D,U);Fr(D,d),M_(),Fr(D,p),Vb(()=>{D._isLeaving&&(da(D,d),Fr(D,m),Bb(b)||Hb(D,o,C,j))}),za(b,[D,j])},onEnterCancelled(D){O(D,!1),za(_,[D])},onAppearCancelled(D){O(D,!0),za($,[D])},onLeaveCancelled(D){A(D),za(w,[D])}})}function iI(e){if(e==null)return null;if(dt(e))return[rp(e.enter),rp(e.leave)];{const t=rp(e);return[t,t]}}function rp(e){return ad(e)}function Fr(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function da(e,t){t.split(/\s+/).forEach(o=>o&&e.classList.remove(o));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Vb(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let uI=0;function Hb(e,t,n,o){const r=e._endId=++uI,a=()=>{r===e._endId&&o()};if(n)return setTimeout(a,n);const{type:l,timeout:s,propCount:u}=I_(e,t);if(!l)return o();const c=l+"end";let f=0;const d=()=>{e.removeEventListener(c,p),a()},p=m=>{m.target===e&&++f>=u&&d()};setTimeout(()=>{f(n[v]||"").split(", "),r=o(`${sa}Delay`),a=o(`${sa}Duration`),l=zb(r,a),s=o(`${di}Delay`),u=o(`${di}Duration`),c=zb(s,u);let f=null,d=0,p=0;t===sa?l>0&&(f=sa,d=l,p=a.length):t===di?c>0&&(f=di,d=c,p=u.length):(d=Math.max(l,c),f=d>0?l>c?sa:di:null,p=f?f===sa?a.length:u.length:0);const m=f===sa&&/\b(transform|all)(,|$)/.test(o(`${sa}Property`).toString());return{type:f,timeout:d,propCount:p,hasTransform:m}}function zb(e,t){for(;e.lengthjb(n)+jb(e[o])))}function jb(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function M_(){return document.body.offsetHeight}const A_=new WeakMap,P_=new WeakMap,R_={name:"TransitionGroup",props:an({},sI,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=lt(),o=Xm();let r,a;return ar(()=>{if(!r.length)return;const l=e.moveClass||`${e.name||"v"}-move`;if(!hI(r[0].el,n.vnode.el,l))return;r.forEach(dI),r.forEach(fI);const s=r.filter(pI);M_(),s.forEach(u=>{const c=u.el,f=c.style;Fr(c,l),f.transform=f.webkitTransform=f.transitionDuration="";const d=c._moveCb=p=>{p&&p.target!==c||(!p||/transform$/.test(p.propertyName))&&(c.removeEventListener("transitionend",d),c._moveCb=null,da(c,l))};c.addEventListener("transitionend",d)})}),()=>{const l=Mt(e),s=N_(l);let u=l.tag||Ve;r=a,a=t.default?Zd(t.default()):[];for(let c=0;cdelete e.mode;R_.props;const ku=R_;function dI(e){const t=e.el;t._moveCb&&t._moveCb(),t._enterCb&&t._enterCb()}function fI(e){P_.set(e,e.el.getBoundingClientRect())}function pI(e){const t=A_.get(e),n=P_.get(e),o=t.left-n.left,r=t.top-n.top;if(o||r){const a=e.el.style;return a.transform=a.webkitTransform=`translate(${o}px,${r}px)`,a.transitionDuration="0s",e}}function hI(e,t,n){const o=e.cloneNode();e._vtc&&e._vtc.forEach(l=>{l.split(/\s+/).forEach(s=>s&&o.classList.remove(s))}),n.split(/\s+/).forEach(l=>l&&o.classList.add(l)),o.style.display="none";const r=t.nodeType===1?t:t.parentNode;r.appendChild(o);const{hasTransform:a}=I_(o);return r.removeChild(o),a}const Oa=e=>{const t=e.props["onUpdate:modelValue"]||!1;return Pe(t)?n=>ss(t,n):t};function mI(e){e.target.composing=!0}function Wb(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const yl={created(e,{modifiers:{lazy:t,trim:n,number:o}},r){e._assign=Oa(r);const a=o||r.props&&r.props.type==="number";Hr(e,t?"change":"input",l=>{if(l.target.composing)return;let s=e.value;n&&(s=s.trim()),a&&(s=rd(s)),e._assign(s)}),n&&Hr(e,"change",()=>{e.value=e.value.trim()}),t||(Hr(e,"compositionstart",mI),Hr(e,"compositionend",Wb),Hr(e,"change",Wb))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:o,number:r}},a){if(e._assign=Oa(a),e.composing||document.activeElement===e&&e.type!=="range"&&(n||o&&e.value.trim()===t||(r||e.type==="number")&&rd(e.value)===t))return;const l=t??"";e.value!==l&&(e.value=l)}},wl={deep:!0,created(e,t,n){e._assign=Oa(n),Hr(e,"change",()=>{const o=e._modelValue,r=ws(e),a=e.checked,l=e._assign;if(Pe(o)){const s=Fd(o,r),u=s!==-1;if(a&&!u)l(o.concat(r));else if(!a&&u){const c=[...o];c.splice(s,1),l(c)}}else if(Il(o)){const s=new Set(o);a?s.add(r):s.delete(r),l(s)}else l(x_(e,a))})},mounted:Kb,beforeUpdate(e,t,n){e._assign=Oa(n),Kb(e,t,n)}};function Kb(e,{value:t,oldValue:n},o){e._modelValue=t,Pe(t)?e.checked=Fd(t,o.props.value)>-1:Il(t)?e.checked=t.has(o.props.value):t!==n&&(e.checked=Ea(t,x_(e,!0)))}const Eu={created(e,{value:t},n){e.checked=Ea(t,n.props.value),e._assign=Oa(n),Hr(e,"change",()=>{e._assign(ws(e))})},beforeUpdate(e,{value:t,oldValue:n},o){e._assign=Oa(o),t!==n&&(e.checked=Ea(t,o.props.value))}},L_={deep:!0,created(e,{value:t,modifiers:{number:n}},o){const r=Il(t);Hr(e,"change",()=>{const a=Array.prototype.filter.call(e.options,l=>l.selected).map(l=>n?rd(ws(l)):ws(l));e._assign(e.multiple?r?new Set(a):a:a[0])}),e._assign=Oa(o)},mounted(e,{value:t}){Ub(e,t)},beforeUpdate(e,t,n){e._assign=Oa(n)},updated(e,{value:t}){Ub(e,t)}};function Ub(e,t){const n=e.multiple;if(!(n&&!Pe(t)&&!Il(t))){for(let o=0,r=e.options.length;o-1:a.selected=t.has(l);else if(Ea(ws(a),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function ws(e){return"_value"in e?e._value:e.value}function x_(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const D_={created(e,t,n){ac(e,t,n,null,"created")},mounted(e,t,n){ac(e,t,n,null,"mounted")},beforeUpdate(e,t,n,o){ac(e,t,n,o,"beforeUpdate")},updated(e,t,n,o){ac(e,t,n,o,"updated")}};function F_(e,t){switch(e){case"SELECT":return L_;case"TEXTAREA":return yl;default:switch(t){case"checkbox":return wl;case"radio":return Eu;default:return yl}}}function ac(e,t,n,o,r){const l=F_(e.tagName,n.props&&n.props.type)[r];l&&l(e,t,n,o)}function vI(){yl.getSSRProps=({value:e})=>({value:e}),Eu.getSSRProps=({value:e},t)=>{if(t.props&&Ea(t.props.value,e))return{checked:!0}},wl.getSSRProps=({value:e},t)=>{if(Pe(e)){if(t.props&&Fd(e,t.props.value)>-1)return{checked:!0}}else if(Il(e)){if(t.props&&e.has(t.props.value))return{checked:!0}}else if(e)return{checked:!0}},D_.getSSRProps=(e,t)=>{if(typeof t.type!="string")return;const n=F_(t.type.toUpperCase(),t.props&&t.props.type);if(n.getSSRProps)return n.getSSRProps(e,t)}}const gI=["ctrl","shift","alt","meta"],bI={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>gI.some(n=>e[`${n}Key`]&&!t.includes(n))},Qe=(e,t)=>(n,...o)=>{for(let r=0;rn=>{if(!("key"in n))return;const o=mo(n.key);if(t.some(r=>r===o||yI[r]===o))return e(n)},kt={beforeMount(e,{value:t},{transition:n}){e._vod=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):fi(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:o}){!t!=!n&&(o?t?(o.beforeEnter(e),fi(e,!0),o.enter(e)):o.leave(e,()=>{fi(e,!1)}):fi(e,t))},beforeUnmount(e,{value:t}){fi(e,t)}};function fi(e,t){e.style.display=t?e._vod:"none"}function wI(){kt.getSSRProps=({value:e})=>{if(!e)return{style:{display:"none"}}}}const B_=an({patchProp:tI},zN);let Mi,qb=!1;function V_(){return Mi||(Mi=d_(B_))}function H_(){return Mi=qb?Mi:f_(B_),qb=!0,Mi}const er=(...e)=>{V_().render(...e)},z_=(...e)=>{H_().hydrate(...e)},iv=(...e)=>{const t=V_().createApp(...e),{mount:n}=t;return t.mount=o=>{const r=j_(o);if(!r)return;const a=t._component;!Xe(a)&&!a.render&&!a.template&&(a.template=r.innerHTML),r.innerHTML="";const l=n(r,!1,r instanceof SVGElement);return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),l},t},_I=(...e)=>{const t=H_().createApp(...e),{mount:n}=t;return t.mount=o=>{const r=j_(o);if(r)return n(r,!0,r instanceof SVGElement)},t};function j_(e){return nt(e)?document.querySelector(e):e}let Yb=!1;const CI=()=>{Yb||(Yb=!0,vI(),wI())},SI=()=>{},kI=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:Uw,BaseTransitionPropsValidators:Jm,Comment:En,EffectScope:Fm,Fragment:Ve,KeepAlive:UO,ReactiveEffect:wu,Static:sl,Suspense:LO,Teleport:Pl,Text:Ur,Transition:fn,TransitionGroup:ku,VueElement:nf,assertNumber:SO,callWithAsyncErrorHandling:yo,callWithErrorHandling:Wr,camelize:jn,capitalize:Ws,cloneVNode:Qo,compatUtils:VN,compile:SI,computed:k,createApp:iv,createBlock:re,createCommentVNode:te,createElementBlock:V,createElementVNode:F,createHydrationRenderer:f_,createPropsRestProxy:lN,createRenderer:d_,createSSRApp:_I,createSlots:Sr,createStaticVNode:$N,createTextVNode:Ge,createVNode:K,customRef:Rw,defineAsyncComponent:WO,defineComponent:Y,defineCustomElement:$_,defineEmits:JO,defineExpose:ZO,defineModel:tN,defineOptions:QO,defineProps:XO,defineSSRCustomElement:oI,defineSlots:eN,get devtools(){return Xl},effect:B$,effectScope:Bd,getCurrentInstance:lt,getCurrentScope:Vd,getTransitionRawChildren:Zd,guardReactiveProps:bl,h:Ke,handleError:Al,hasInjectionContext:a_,hydrate:z_,initCustomFormatter:LN,initDirectivesForSSR:CI,inject:De,isMemoSame:E_,isProxy:zm,isReactive:jr,isReadonly:ml,isRef:xt,isRuntimeOnly:AN,isShallow:ji,isVNode:Wt,markRaw:Po,mergeDefaults:rN,mergeModels:aN,mergeProps:mt,nextTick:We,normalizeClass:N,normalizeProps:vr,normalizeStyle:je,onActivated:Zm,onBeforeMount:Su,onBeforeUnmount:zt,onBeforeUpdate:ev,onDeactivated:Qm,onErrorCaptured:Zw,onMounted:at,onRenderTracked:Jw,onRenderTriggered:Xw,onScopeDispose:Hd,onServerPrefetch:Gw,onUnmounted:lr,onUpdated:ar,openBlock:T,popScopeId:Jd,provide:yt,proxyRefs:Km,pushScopeId:Xd,queuePostFlushCb:qm,reactive:Et,readonly:Ml,ref:R,registerRuntimeCompiler:MN,render:er,renderList:bt,renderSlot:ie,resolveComponent:qe,resolveDirective:qs,resolveDynamicComponent:pt,resolveFilter:BN,resolveTransitionHooks:bs,setBlockTracking:Zp,setDevtoolsHook:Vw,setTransitionHooks:vl,shallowReactive:Hm,shallowReadonly:pO,shallowRef:Ut,ssrContextKey:S_,ssrUtils:FN,stop:V$,toDisplayString:le,toHandlerKey:ls,toHandlers:t_,toRaw:Mt,toRef:Lt,toRefs:Cn,toValue:vO,transformVNodeArgs:EN,triggerRef:mO,unref:i,useAttrs:xa,useCssModule:aI,useCssVars:lI,useModel:oN,useSSRContext:k_,useSlots:Sn,useTransitionState:Xm,vModelCheckbox:wl,vModelDynamic:D_,vModelRadio:Eu,vModelSelect:L_,vModelText:yl,vShow:kt,version:T_,warn:xw,watch:ve,watchEffect:Mn,watchPostEffect:Ww,watchSyncEffect:HO,withAsyncContext:sN,withCtx:X,withDefaults:nN,withDirectives:tt,withKeys:Pt,withMemo:xN,withModifiers:Qe,withScopeId:NO},Symbol.toStringTag,{value:"Module"}));var EI=!1;/*! + * pinia v2.1.4 + * (c) 2023 Eduardo San Martin Morote + * @license MIT + */let W_;const of=e=>W_=e,K_=Symbol();function ah(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var Ai;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(Ai||(Ai={}));function TI(){const e=Bd(!0),t=e.run(()=>R({}));let n=[],o=[];const r=Po({install(a){of(r),r._a=a,a.provide(K_,r),a.config.globalProperties.$pinia=r,o.forEach(l=>n.push(l)),o=[]},use(a){return!this._a&&!EI?o.push(a):n.push(a),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return r}const U_=()=>{};function Gb(e,t,n,o=U_){e.push(t);const r=()=>{const a=e.indexOf(t);a>-1&&(e.splice(a,1),o())};return!n&&Vd()&&Hd(r),r}function Wl(e,...t){e.slice().forEach(n=>{n(...t)})}const $I=e=>e();function lh(e,t){e instanceof Map&&t instanceof Map&&t.forEach((n,o)=>e.set(o,n)),e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const o=t[n],r=e[n];ah(r)&&ah(o)&&e.hasOwnProperty(n)&&!xt(o)&&!jr(o)?e[n]=lh(r,o):e[n]=o}return e}const OI=Symbol();function NI(e){return!ah(e)||!e.hasOwnProperty(OI)}const{assign:fa}=Object;function II(e){return!!(xt(e)&&e.effect)}function MI(e,t,n,o){const{state:r,actions:a,getters:l}=t,s=n.state.value[e];let u;function c(){s||(n.state.value[e]=r?r():{});const f=Cn(n.state.value[e]);return fa(f,a,Object.keys(l||{}).reduce((d,p)=>(d[p]=Po(k(()=>{of(n);const m=n._s.get(e);return l[p].call(m,m)})),d),{}))}return u=q_(e,c,t,n,o,!0),u}function q_(e,t,n={},o,r,a){let l;const s=fa({actions:{}},n),u={deep:!0};let c,f,d=[],p=[],m;const v=o.state.value[e];!a&&!v&&(o.state.value[e]={}),R({});let h;function C($){let O;c=f=!1,typeof $=="function"?($(o.state.value[e]),O={type:Ai.patchFunction,storeId:e,events:m}):(lh(o.state.value[e],$),O={type:Ai.patchObject,payload:$,storeId:e,events:m});const A=h=Symbol();We().then(()=>{h===A&&(c=!0)}),f=!0,Wl(d,O,o.state.value[e])}const g=a?function(){const{state:O}=n,A=O?O():{};this.$patch(M=>{fa(M,A)})}:U_;function y(){l.stop(),d=[],p=[],o._s.delete(e)}function _($,O){return function(){of(o);const A=Array.from(arguments),M=[],D=[];function U(L){M.push(L)}function j(L){D.push(L)}Wl(p,{args:A,name:$,store:w,after:U,onError:j});let W;try{W=O.apply(this&&this.$id===e?this:w,A)}catch(L){throw Wl(D,L),L}return W instanceof Promise?W.then(L=>(Wl(M,L),L)).catch(L=>(Wl(D,L),Promise.reject(L))):(Wl(M,W),W)}}const b={_p:o,$id:e,$onAction:Gb.bind(null,p),$patch:C,$reset:g,$subscribe($,O={}){const A=Gb(d,$,O.detached,()=>M()),M=l.run(()=>ve(()=>o.state.value[e],D=>{(O.flush==="sync"?f:c)&&$({storeId:e,type:Ai.direct,events:m},D)},fa({},u,O)));return A},$dispose:y},w=Et(b);o._s.set(e,w);const S=o._a&&o._a.runWithContext||$I,E=o._e.run(()=>(l=Bd(),S(()=>l.run(t))));for(const $ in E){const O=E[$];if(xt(O)&&!II(O)||jr(O))a||(v&&NI(O)&&(xt(O)?O.value=v[$]:lh(O,v[$])),o.state.value[e][$]=O);else if(typeof O=="function"){const A=_($,O);E[$]=A,s.actions[$]=O}}return fa(w,E),fa(Mt(w),E),Object.defineProperty(w,"$state",{get:()=>o.state.value[e],set:$=>{C(O=>{fa(O,$)})}}),o._p.forEach($=>{fa(w,l.run(()=>$({store:w,app:o._a,pinia:o,options:s})))}),v&&a&&n.hydrate&&n.hydrate(w.$state,v),c=!0,f=!0,w}function Y_(e,t,n){let o,r;const a=typeof t=="function";typeof e=="string"?(o=e,r=a?n:t):(r=e,o=e.id);function l(s,u){const c=a_();return s=s||(c?De(K_,null):null),s&&of(s),s=W_,s._s.has(o)||(a?q_(o,t,r,s):MI(o,r,s)),s._s.get(o)}return l.$id=o,l}const AI="storeCommon",PI="storeTerminal",RI=(e=null,t="yyyy-mm-dd hh:MM:ss")=>{if(e=="none")return"无";e||(e=Number(new Date)),e.toString().length===10&&(e=+e*1e3);const n=new Date(e);let o;const r={"y+":n.getFullYear().toString(),"m+":(n.getMonth()+1).toString(),"d+":n.getDate().toString(),"h+":n.getHours().toString(),"M+":n.getMinutes().toString(),"s+":n.getSeconds().toString()};for(const a in r)o=new RegExp("("+a+")").exec(t),o&&(t=t.replace(o[1],o[1].length==1?r[a]:xI(r[a],o[1].length,"0")));return t},sh=[];for(let e=0;e<=15;e++)sh[e]=e.toString(16);function LI(){let e="";for(let t=1;t<=36;t++)t===9||t===14||t===19||t===24?e+="-":t===15?e+=4:t===20?e+=sh[Math.random()*4|8]:e+=sh[Math.random()*16|0];return e}const xI=(e,t,n=" ")=>{if(e.length>=t)return e;const o=t-e.length;let r=Math.ceil(o/n.length);for(;r>>=1;)n+=n,r===1&&(n+=n);return n.slice(0,o)+e},DI='a[href],button:not([disabled]),button:not([hidden]),:not([tabindex="-1"]),input:not([disabled]),input:not([type="hidden"]),select:not([disabled]),textarea:not([disabled])',FI=e=>getComputedStyle(e).position==="fixed"?!1:e.offsetParent!==null,Xb=e=>Array.from(e.querySelectorAll(DI)).filter(t=>BI(t)&&FI(t)),BI=e=>{if(e.tabIndex>0||e.tabIndex===0&&e.getAttribute("tabIndex")!==null)return!0;if(e.disabled)return!1;switch(e.nodeName){case"A":return!!e.href&&e.rel!=="ignore";case"INPUT":return!(e.type==="hidden"||e.type==="file");case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},Nc=function(e,t,...n){let o;t.includes("mouse")||t.includes("click")?o="MouseEvents":t.includes("key")?o="KeyboardEvent":o="HTMLEvents";const r=document.createEvent(o);return r.initEvent(t,...n),e.dispatchEvent(r),e},G_=e=>!e.getAttribute("aria-owns"),X_=(e,t,n)=>{const{parentNode:o}=e;if(!o)return null;const r=o.querySelectorAll(n),a=Array.prototype.indexOf.call(r,e);return r[a+t]||null},Ic=e=>{e&&(e.focus(),!G_(e)&&e.click())},on=(e,t,{checkForDefaultPrevented:n=!0}={})=>r=>{const a=e==null?void 0:e(r);if(n===!1||!a)return t==null?void 0:t(r)},Jb=e=>t=>t.pointerType==="mouse"?e(t):void 0;var VI=Object.defineProperty,HI=Object.defineProperties,zI=Object.getOwnPropertyDescriptors,Zb=Object.getOwnPropertySymbols,jI=Object.prototype.hasOwnProperty,WI=Object.prototype.propertyIsEnumerable,Qb=(e,t,n)=>t in e?VI(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,KI=(e,t)=>{for(var n in t||(t={}))jI.call(t,n)&&Qb(e,n,t[n]);if(Zb)for(var n of Zb(t))WI.call(t,n)&&Qb(e,n,t[n]);return e},UI=(e,t)=>HI(e,zI(t));function ey(e,t){var n;const o=Ut();return Mn(()=>{o.value=e()},UI(KI({},t),{flush:(n=void 0)!=null?n:"sync"})),Ml(o)}var ty;const Ct=typeof window<"u",qI=e=>typeof e<"u",ih=e=>typeof e=="function",YI=e=>typeof e=="string",_s=()=>{},uh=Ct&&((ty=window==null?void 0:window.navigator)==null?void 0:ty.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function Na(e){return typeof e=="function"?e():i(e)}function J_(e,t){function n(...o){return new Promise((r,a)=>{Promise.resolve(e(()=>t.apply(this,o),{fn:t,thisArg:this,args:o})).then(r).catch(a)})}return n}function GI(e,t={}){let n,o,r=_s;const a=s=>{clearTimeout(s),r(),r=_s};return s=>{const u=Na(e),c=Na(t.maxWait);return n&&a(n),u<=0||c!==void 0&&c<=0?(o&&(a(o),o=null),Promise.resolve(s())):new Promise((f,d)=>{r=t.rejectOnCancel?d:f,c&&!o&&(o=setTimeout(()=>{n&&a(n),o=null,f(s())},c)),n=setTimeout(()=>{o&&a(o),o=null,f(s())},u)})}}function XI(e,t=!0,n=!0,o=!1){let r=0,a,l=!0,s=_s,u;const c=()=>{a&&(clearTimeout(a),a=void 0,s(),s=_s)};return d=>{const p=Na(e),m=Date.now()-r,v=()=>u=d();return c(),p<=0?(r=Date.now(),v()):(m>p&&(n||!l)?(r=Date.now(),v()):t&&(u=new Promise((h,C)=>{s=o?C:h,a=setTimeout(()=>{r=Date.now(),l=!0,h(v()),c()},Math.max(0,p-m))})),!n&&!a&&(a=setTimeout(()=>l=!0,p)),l=!1,u)}}function JI(e){return e}function ZI(e,t){let n,o,r;const a=R(!0),l=()=>{a.value=!0,r()};ve(e,l,{flush:"sync"});const s=ih(t)?t:t.get,u=ih(t)?void 0:t.set,c=Rw((f,d)=>(o=f,r=d,{get(){return a.value&&(n=s(),a.value=!1),o(),n},set(p){u==null||u(p)}}));return Object.isExtensible(c)&&(c.trigger=l),c}function Tu(e){return Vd()?(Hd(e),!0):!1}function QI(e,t=200,n={}){return J_(GI(t,n),e)}function eM(e,t=200,n={}){const o=R(e.value),r=QI(()=>{o.value=e.value},t,n);return ve(e,()=>r()),o}function Z_(e,t=200,n=!1,o=!0,r=!1){return J_(XI(t,n,o,r),e)}function uv(e,t=!0){lt()?at(e):t?e():We(e)}function _l(e,t,n={}){const{immediate:o=!0}=n,r=R(!1);let a=null;function l(){a&&(clearTimeout(a),a=null)}function s(){r.value=!1,l()}function u(...c){l(),r.value=!0,a=setTimeout(()=>{r.value=!1,a=null,e(...c)},Na(t))}return o&&(r.value=!0,Ct&&u()),Tu(s),{isPending:Ml(r),start:u,stop:s}}function lo(e){var t;const n=Na(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Da=Ct?window:void 0,tM=Ct?window.document:void 0;function qt(...e){let t,n,o,r;if(YI(e[0])||Array.isArray(e[0])?([n,o,r]=e,t=Da):[t,n,o,r]=e,!t)return _s;Array.isArray(n)||(n=[n]),Array.isArray(o)||(o=[o]);const a=[],l=()=>{a.forEach(f=>f()),a.length=0},s=(f,d,p,m)=>(f.addEventListener(d,p,m),()=>f.removeEventListener(d,p,m)),u=ve(()=>[lo(t),Na(r)],([f,d])=>{l(),f&&a.push(...n.flatMap(p=>o.map(m=>s(f,p,m,d))))},{immediate:!0,flush:"post"}),c=()=>{u(),l()};return Tu(c),c}let ny=!1;function cv(e,t,n={}){const{window:o=Da,ignore:r=[],capture:a=!0,detectIframe:l=!1}=n;if(!o)return;uh&&!ny&&(ny=!0,Array.from(o.document.body.children).forEach(p=>p.addEventListener("click",_s)));let s=!0;const u=p=>r.some(m=>{if(typeof m=="string")return Array.from(o.document.querySelectorAll(m)).some(v=>v===p.target||p.composedPath().includes(v));{const v=lo(m);return v&&(p.target===v||p.composedPath().includes(v))}}),f=[qt(o,"click",p=>{const m=lo(e);if(!(!m||m===p.target||p.composedPath().includes(m))){if(p.detail===0&&(s=!u(p)),!s){s=!0;return}t(p)}},{passive:!0,capture:a}),qt(o,"pointerdown",p=>{const m=lo(e);m&&(s=!p.composedPath().includes(m)&&!u(p))},{passive:!0}),l&&qt(o,"blur",p=>{var m;const v=lo(e);((m=o.document.activeElement)==null?void 0:m.tagName)==="IFRAME"&&!(v!=null&&v.contains(o.document.activeElement))&&t(p)})].filter(Boolean);return()=>f.forEach(p=>p())}function nM(e={}){var t;const{window:n=Da}=e,o=(t=e.document)!=null?t:n==null?void 0:n.document,r=ZI(()=>null,()=>o==null?void 0:o.activeElement);return n&&(qt(n,"blur",a=>{a.relatedTarget===null&&r.trigger()},!0),qt(n,"focus",r.trigger,!0)),r}function Q_(e,t=!1){const n=R(),o=()=>n.value=!!e();return o(),uv(o,t),n}function oM(e){return JSON.parse(JSON.stringify(e))}const oy=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},ry="__vueuse_ssr_handlers__";oy[ry]=oy[ry]||{};function rM(e,t,{window:n=Da,initialValue:o=""}={}){const r=R(o),a=k(()=>{var l;return lo(t)||((l=n==null?void 0:n.document)==null?void 0:l.documentElement)});return ve([a,()=>Na(e)],([l,s])=>{var u;if(l&&n){const c=(u=n.getComputedStyle(l).getPropertyValue(s))==null?void 0:u.trim();r.value=c||o}},{immediate:!0}),ve(r,l=>{var s;(s=a.value)!=null&&s.style&&a.value.style.setProperty(Na(e),l)}),r}function aM({document:e=tM}={}){if(!e)return R("visible");const t=R(e.visibilityState);return qt(e,"visibilitychange",()=>{t.value=e.visibilityState}),t}var ay=Object.getOwnPropertySymbols,lM=Object.prototype.hasOwnProperty,sM=Object.prototype.propertyIsEnumerable,iM=(e,t)=>{var n={};for(var o in e)lM.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(e!=null&&ay)for(var o of ay(e))t.indexOf(o)<0&&sM.call(e,o)&&(n[o]=e[o]);return n};function Qt(e,t,n={}){const o=n,{window:r=Da}=o,a=iM(o,["window"]);let l;const s=Q_(()=>r&&"ResizeObserver"in r),u=()=>{l&&(l.disconnect(),l=void 0)},c=ve(()=>lo(e),d=>{u(),s.value&&r&&d&&(l=new ResizeObserver(t),l.observe(d,a))},{immediate:!0,flush:"post"}),f=()=>{u(),c()};return Tu(f),{isSupported:s,stop:f}}function ly(e,t={}){const{reset:n=!0,windowResize:o=!0,windowScroll:r=!0,immediate:a=!0}=t,l=R(0),s=R(0),u=R(0),c=R(0),f=R(0),d=R(0),p=R(0),m=R(0);function v(){const h=lo(e);if(!h){n&&(l.value=0,s.value=0,u.value=0,c.value=0,f.value=0,d.value=0,p.value=0,m.value=0);return}const C=h.getBoundingClientRect();l.value=C.height,s.value=C.bottom,u.value=C.left,c.value=C.right,f.value=C.top,d.value=C.width,p.value=C.x,m.value=C.y}return Qt(e,v),ve(()=>lo(e),h=>!h&&v()),r&&qt("scroll",v,{capture:!0,passive:!0}),o&&qt("resize",v,{passive:!0}),uv(()=>{a&&v()}),{height:l,bottom:s,left:u,right:c,top:f,width:d,x:p,y:m,update:v}}var sy=Object.getOwnPropertySymbols,uM=Object.prototype.hasOwnProperty,cM=Object.prototype.propertyIsEnumerable,dM=(e,t)=>{var n={};for(var o in e)uM.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(e!=null&&sy)for(var o of sy(e))t.indexOf(o)<0&&cM.call(e,o)&&(n[o]=e[o]);return n};function eC(e,t,n={}){const o=n,{window:r=Da}=o,a=dM(o,["window"]);let l;const s=Q_(()=>r&&"MutationObserver"in r),u=()=>{l&&(l.disconnect(),l=void 0)},c=ve(()=>lo(e),d=>{u(),s.value&&r&&d&&(l=new MutationObserver(t),l.observe(d,a))},{immediate:!0}),f=()=>{u(),c()};return Tu(f),{isSupported:s,stop:f}}var iy;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(iy||(iy={}));var fM=Object.defineProperty,uy=Object.getOwnPropertySymbols,pM=Object.prototype.hasOwnProperty,hM=Object.prototype.propertyIsEnumerable,cy=(e,t,n)=>t in e?fM(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,mM=(e,t)=>{for(var n in t||(t={}))pM.call(t,n)&&cy(e,n,t[n]);if(uy)for(var n of uy(t))hM.call(t,n)&&cy(e,n,t[n]);return e};const vM={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};mM({linear:JI},vM);function tC(e,t,n,o={}){var r,a,l;const{clone:s=!1,passive:u=!1,eventName:c,deep:f=!1,defaultValue:d}=o,p=lt(),m=n||(p==null?void 0:p.emit)||((r=p==null?void 0:p.$emit)==null?void 0:r.bind(p))||((l=(a=p==null?void 0:p.proxy)==null?void 0:a.$emit)==null?void 0:l.bind(p==null?void 0:p.proxy));let v=c;t||(t="modelValue"),v=c||v||`update:${t.toString()}`;const h=g=>s?ih(s)?s(g):oM(g):g,C=()=>qI(e[t])?h(e[t]):d;if(u){const g=C(),y=R(g);return ve(()=>e[t],_=>y.value=h(_)),ve(y,_=>{(_!==e[t]||f)&&m(v,_)},{deep:f}),y}else return k({get(){return C()},set(g){m(v,g)}})}function gM({window:e=Da}={}){if(!e)return R(!1);const t=R(e.document.hasFocus());return qt(e,"blur",()=>{t.value=!1}),qt(e,"focus",()=>{t.value=!0}),t}function bM(e={}){const{window:t=Da,initialWidth:n=1/0,initialHeight:o=1/0,listenOrientation:r=!0,includeScrollbar:a=!0}=e,l=R(n),s=R(o),u=()=>{t&&(a?(l.value=t.innerWidth,s.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,s.value=t.document.documentElement.clientHeight))};return u(),uv(u),qt("resize",u,{passive:!0}),r&&qt("orientationchange",u,{passive:!0}),{width:l,height:s}}const nC=()=>Ct&&/firefox/i.test(window.navigator.userAgent),yM=(e,t)=>{if(!Ct||!e||!t)return!1;const n=e.getBoundingClientRect();let o;return t instanceof Element?o=t.getBoundingClientRect():o={top:0,right:window.innerWidth,bottom:window.innerHeight,left:0},n.topo.top&&n.right>o.left&&n.left{let t=0,n=e;for(;n;)t+=n.offsetTop,n=n.offsetParent;return t},ch=(e,t)=>Math.abs(dy(e)-dy(t)),dv=e=>{let t,n;return e.type==="touchend"?(n=e.changedTouches[0].clientY,t=e.changedTouches[0].clientX):e.type.startsWith("touch")?(n=e.touches[0].clientY,t=e.touches[0].clientX):(n=e.clientY,t=e.clientX),{clientX:t,clientY:n}};function wM(e,t,n,o){const r=n-t;return e/=o/2,e<1?r/2*e*e*e+t:r/2*((e-=2)*e*e+2)+t}var oC=typeof global=="object"&&global&&global.Object===Object&&global,_M=typeof self=="object"&&self&&self.Object===Object&&self,sr=oC||_M||Function("return this")(),Do=sr.Symbol,rC=Object.prototype,CM=rC.hasOwnProperty,SM=rC.toString,pi=Do?Do.toStringTag:void 0;function kM(e){var t=CM.call(e,pi),n=e[pi];try{e[pi]=void 0;var o=!0}catch{}var r=SM.call(e);return o&&(t?e[pi]=n:delete e[pi]),r}var EM=Object.prototype,TM=EM.toString;function $M(e){return TM.call(e)}var OM="[object Null]",NM="[object Undefined]",fy=Do?Do.toStringTag:void 0;function Rl(e){return e==null?e===void 0?NM:OM:fy&&fy in Object(e)?kM(e):$M(e)}function kr(e){return e!=null&&typeof e=="object"}var IM="[object Symbol]";function rf(e){return typeof e=="symbol"||kr(e)&&Rl(e)==IM}function fv(e,t){for(var n=-1,o=e==null?0:e.length,r=Array(o);++n0){if(++t>=aA)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function uA(e){return function(){return e}}var dd=function(){try{var e=xl(Object,"defineProperty");return e({},"",{}),e}catch{}}(),cA=dd?function(e,t){return dd(e,"toString",{configurable:!0,enumerable:!1,value:uA(t),writable:!0})}:pv,sC=iA(cA);function dA(e,t){for(var n=-1,o=e==null?0:e.length;++n-1}var vA=9007199254740991,gA=/^(?:0|[1-9]\d*)$/;function af(e,t){var n=typeof e;return t=t??vA,!!t&&(n=="number"||n!="symbol"&&gA.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=wA}function Gs(e){return e!=null&&gv(e.length)&&!hv(e)}function _A(e,t,n){if(!eo(n))return!1;var o=typeof t;return(o=="number"?Gs(n)&&af(t,n.length):o=="string"&&t in n)?$u(n[t],e):!1}function CA(e){return cC(function(t,n){var o=-1,r=n.length,a=r>1?n[r-1]:void 0,l=r>2?n[2]:void 0;for(a=e.length>3&&typeof a=="function"?(r--,a):void 0,l&&_A(n[0],n[1],l)&&(a=r<3?void 0:a,r=1),t=Object(t);++o-1}function AP(e,t){var n=this.__data__,o=lf(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this}function Jr(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t0&&n(s)?t>1?Iu(s,t-1,n,o,r):Cv(r,s):o||(r[r.length]=s)}return r}function vC(e){var t=e==null?0:e.length;return t?Iu(e,1):[]}function gC(e){return sC(uC(e,void 0,vC),e+"")}var Sv=mC(Object.getPrototypeOf,Object),YP="[object Object]",GP=Function.prototype,XP=Object.prototype,bC=GP.toString,JP=XP.hasOwnProperty,ZP=bC.call(Object);function yC(e){if(!kr(e)||Rl(e)!=YP)return!1;var t=Sv(e);if(t===null)return!0;var n=JP.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&bC.call(n)==ZP}function QP(e,t,n){var o=-1,r=e.length;t<0&&(t=-t>r?0:r+t),n=n>r?r:n,n<0&&(n+=r),r=t>n?0:n-t>>>0,t>>>=0;for(var a=Array(r);++os))return!1;var c=a.get(e),f=a.get(t);if(c&&f)return c==t&&f==e;var d=-1,p=!0,m=n&RL?new tu:void 0;for(a.set(e,t),a.set(t,e);++d=t||E<0||d&&$>=a}function g(){var S=ip();if(C(S))return y(S);s=setTimeout(g,h(S))}function y(S){return s=void 0,p&&o?m(S):(o=r=void 0,l)}function _(){s!==void 0&&clearTimeout(s),c=0,o=u=r=s=void 0}function b(){return s===void 0?l:y(ip())}function w(){var S=ip(),E=C(S);if(o=arguments,r=this,u=S,E){if(s===void 0)return v(u);if(d)return clearTimeout(s),s=setTimeout(g,t),m(u)}return s===void 0&&(s=setTimeout(g,t)),l}return w.cancel=_,w.flush=b,w}function mh(e,t,n){(n!==void 0&&!$u(e[t],n)||n===void 0&&!(t in e))&&mv(e,t,n)}function FC(e){return kr(e)&&Gs(e)}function vh(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}function Sx(e){return Ys(e,Nu(e))}function kx(e,t,n,o,r,a,l){var s=vh(e,n),u=vh(t,n),c=l.get(u);if(c){mh(e,n,c);return}var f=a?a(s,u,n+"",e,t,l):void 0,d=f===void 0;if(d){var p=Qn(u),m=!p&&Zi(u),v=!p&&!m&&wv(u);f=u,p||m||v?Qn(s)?f=s:FC(s)?f=lC(s):m?(d=!1,f=_C(u,!0)):v?(d=!1,f=TC(u,!0)):f=[]:yC(u)||Ji(u)?(f=s,Ji(s)?f=Sx(s):(!eo(s)||hv(s))&&(f=$C(u))):d=!1}d&&(l.set(u,f),r(f,u,o,a,l),l.delete(u)),mh(e,n,f)}function BC(e,t,n,o,r){e!==t&&DC(t,function(a,l){if(r||(r=new Zo),eo(a))kx(e,t,l,n,BC,o,r);else{var s=o?o(vh(e,l),a,l+"",e,t,r):void 0;s===void 0&&(s=a),mh(e,l,s)}},Nu)}function Ex(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}function VC(e,t,n){var o=e==null?0:e.length;if(!o)return-1;var r=o-1;return iC(e,xC(t),r,!0)}function Tx(e,t){var n=-1,o=Gs(e)?Array(e.length):[];return yx(e,function(r,a,l){o[++n]=t(r,a,l)}),o}function $x(e,t){var n=Qn(e)?fv:Tx;return n(e,xC(t))}function Ox(e,t){return Iu($x(e,t),1)}var Nx=1/0;function Ix(e){var t=e==null?0:e.length;return t?Iu(e,Nx):[]}function hd(e){for(var t=-1,n=e==null?0:e.length,o={};++t1),a}),Ys(e,EC(e),n),o&&(n=ds(n,Lx|xx|Dx,Rx));for(var r=t.length;r--;)Px(n,t[r]);return n});function zC(e,t,n,o){if(!eo(e))return e;t=Xs(t,e);for(var r=-1,a=t.length,l=a-1,s=e;s!=null&&++r=Kx){var c=Wx(e);if(c)return Tv(c);l=!1,r=MC,u=new tu}else u=s;e:for(;++oe===void 0,dn=e=>typeof e=="boolean",Je=e=>typeof e=="number",Io=e=>!e&&e!==0||Pe(e)&&e.length===0||dt(e)&&!Object.keys(e).length,Fo=e=>typeof Element>"u"?!1:e instanceof Element,Sl=e=>Tn(e),qx=e=>nt(e)?!Number.isNaN(Number(e)):!1,ff=e=>e===window,Ma=e=>Ct?window.requestAnimationFrame(e):setTimeout(e,16),kl=e=>Ct?window.cancelAnimationFrame(e):clearTimeout(e),$v=(e="")=>e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d"),mr=e=>Ws(e),Ss=e=>Object.keys(e),Yx=e=>Object.entries(e),Mc=(e,t,n)=>({get value(){return un(e,t,n)},set value(o){Hx(e,t,o)}});class Gx extends Error{constructor(t){super(t),this.name="ElementPlusError"}}function vn(e,t){throw new Gx(`[${e}] ${t}`)}const jC=(e="")=>e.split(" ").filter(t=>!!t.trim()),wo=(e,t)=>{if(!e||!t)return!1;if(t.includes(" "))throw new Error("className should not contain space.");return e.classList.contains(t)},Mo=(e,t)=>{!e||!t.trim()||e.classList.add(...jC(t))},Kn=(e,t)=>{!e||!t.trim()||e.classList.remove(...jC(t))},ga=(e,t)=>{var n;if(!Ct||!e||!t)return"";let o=jn(t);o==="float"&&(o="cssFloat");try{const r=e.style[o];if(r)return r;const a=(n=document.defaultView)==null?void 0:n.getComputedStyle(e,"");return a?a[o]:""}catch{return e.style[o]}};function rn(e,t="px"){if(!e)return"";if(Je(e)||qx(e))return`${e}${t}`;if(nt(e))return e}const Xx=(e,t)=>{if(!Ct)return!1;const n={undefined:"overflow",true:"overflow-y",false:"overflow-x"}[String(t)],o=ga(e,n);return["scroll","auto","overlay"].some(r=>o.includes(r))},Ov=(e,t)=>{if(!Ct)return;let n=e;for(;n;){if([window,document,document.documentElement].includes(n))return window;if(Xx(n,t))return n;n=n.parentNode}return n};let sc;const WC=e=>{var t;if(!Ct)return 0;if(sc!==void 0)return sc;const n=document.createElement("div");n.className=`${e}-scrollbar__wrap`,n.style.visibility="hidden",n.style.width="100px",n.style.position="absolute",n.style.top="-9999px",document.body.appendChild(n);const o=n.offsetWidth;n.style.overflow="scroll";const r=document.createElement("div");r.style.width="100%",n.appendChild(r);const a=r.offsetWidth;return(t=n.parentNode)==null||t.removeChild(n),sc=o-a,sc};function KC(e,t){if(!Ct)return;if(!t){e.scrollTop=0;return}const n=[];let o=t.offsetParent;for(;o!==null&&e!==o&&e.contains(o);)n.push(o),o=o.offsetParent;const r=t.offsetTop+n.reduce((u,c)=>u+c.offsetTop,0),a=r+t.offsetHeight,l=e.scrollTop,s=l+e.clientHeight;rs&&(e.scrollTop=a-e.clientHeight)}function Jx(e,t,n,o,r){const a=Date.now();let l;const s=()=>{const c=Date.now()-a,f=wM(c>o?o:c,t,n,o);ff(e)?e.scrollTo(window.pageXOffset,f):e.scrollTop=f,c{l&&kl(l)}}const jy=(e,t)=>ff(t)?e.ownerDocument.documentElement:t,Wy=e=>ff(e)?window.scrollY:e.scrollTop,ic=e=>{if(!Ct||e==="")return null;if(nt(e))try{return document.querySelector(e)}catch{return null}return e};/*! Element Plus Icons Vue v2.3.1 */var Zx=Y({name:"ArrowDown",__name:"arrow-down",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z"})]))}}),Nr=Zx,Qx=Y({name:"ArrowLeft",__name:"arrow-left",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M609.408 149.376 277.76 489.6a32 32 0 0 0 0 44.672l331.648 340.352a29.12 29.12 0 0 0 41.728 0 30.592 30.592 0 0 0 0-42.752L339.264 511.936l311.872-319.872a30.592 30.592 0 0 0 0-42.688 29.12 29.12 0 0 0-41.728 0z"})]))}}),Aa=Qx,e4=Y({name:"ArrowRight",__name:"arrow-right",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z"})]))}}),Jn=e4,t4=Y({name:"ArrowUp",__name:"arrow-up",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0"})]))}}),pf=t4,n4=Y({name:"Back",__name:"back",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64"}),F("path",{fill:"currentColor",d:"m237.248 512 265.408 265.344a32 32 0 0 1-45.312 45.312l-288-288a32 32 0 0 1 0-45.312l288-288a32 32 0 1 1 45.312 45.312z"})]))}}),o4=n4,r4=Y({name:"Calendar",__name:"calendar",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M128 384v512h768V192H768v32a32 32 0 1 1-64 0v-32H320v32a32 32 0 0 1-64 0v-32H128v128h768v64zm192-256h384V96a32 32 0 1 1 64 0v32h160a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h160V96a32 32 0 0 1 64 0zm-32 384h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64"})]))}}),a4=r4,l4=Y({name:"CaretRight",__name:"caret-right",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M384 192v640l384-320.064z"})]))}}),UC=l4,s4=Y({name:"CaretTop",__name:"caret-top",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 320 192 704h639.936z"})]))}}),i4=s4,u4=Y({name:"Check",__name:"check",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M406.656 706.944 195.84 496.256a32 32 0 1 0-45.248 45.248l256 256 512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z"})]))}}),Mu=u4,c4=Y({name:"CircleCheckFilled",__name:"circle-check-filled",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),d4=c4,f4=Y({name:"CircleCheck",__name:"circle-check",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),F("path",{fill:"currentColor",d:"M745.344 361.344a32 32 0 0 1 45.312 45.312l-288 288a32 32 0 0 1-45.312 0l-160-160a32 32 0 1 1 45.312-45.312L480 626.752l265.344-265.408z"})]))}}),Nv=f4,p4=Y({name:"CircleCloseFilled",__name:"circle-close-filled",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"})]))}}),Iv=p4,h4=Y({name:"CircleClose",__name:"circle-close",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m466.752 512-90.496-90.496a32 32 0 0 1 45.248-45.248L512 466.752l90.496-90.496a32 32 0 1 1 45.248 45.248L557.248 512l90.496 90.496a32 32 0 1 1-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 0 1-45.248-45.248z"}),F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"})]))}}),Fa=h4,m4=Y({name:"Clock",__name:"clock",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),F("path",{fill:"currentColor",d:"M480 256a32 32 0 0 1 32 32v256a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32"}),F("path",{fill:"currentColor",d:"M480 512h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32"})]))}}),qC=m4,v4=Y({name:"Close",__name:"close",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})]))}}),tr=v4,g4=Y({name:"DArrowLeft",__name:"d-arrow-left",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224zm256 0a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224z"})]))}}),ks=g4,b4=Y({name:"DArrowRight",__name:"d-arrow-right",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M452.864 149.312a29.12 29.12 0 0 1 41.728.064L826.24 489.664a32 32 0 0 1 0 44.672L494.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L764.736 512 452.864 192a30.592 30.592 0 0 1 0-42.688m-256 0a29.12 29.12 0 0 1 41.728.064L570.24 489.664a32 32 0 0 1 0 44.672L238.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L508.736 512 196.864 192a30.592 30.592 0 0 1 0-42.688z"})]))}}),Es=b4,y4=Y({name:"Delete",__name:"delete",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32zm448-64v-64H416v64zM224 896h576V256H224zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32m192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32"})]))}}),YC=y4,w4=Y({name:"Document",__name:"document",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h160v64H320zm0 384h384v64H320z"})]))}}),_4=w4,C4=Y({name:"FullScreen",__name:"full-screen",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m160 96.064 192 .192a32 32 0 0 1 0 64l-192-.192V352a32 32 0 0 1-64 0V96h64zm0 831.872V928H96V672a32 32 0 1 1 64 0v191.936l192-.192a32 32 0 1 1 0 64zM864 96.064V96h64v256a32 32 0 1 1-64 0V160.064l-192 .192a32 32 0 1 1 0-64l192-.192zm0 831.872-192-.192a32 32 0 0 1 0-64l192 .192V672a32 32 0 1 1 64 0v256h-64z"})]))}}),S4=C4,k4=Y({name:"Hide",__name:"hide",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M876.8 156.8c0-9.6-3.2-16-9.6-22.4-6.4-6.4-12.8-9.6-22.4-9.6-9.6 0-16 3.2-22.4 9.6L736 220.8c-64-32-137.6-51.2-224-60.8-160 16-288 73.6-377.6 176C44.8 438.4 0 496 0 512s48 73.6 134.4 176c22.4 25.6 44.8 48 73.6 67.2l-86.4 89.6c-6.4 6.4-9.6 12.8-9.6 22.4 0 9.6 3.2 16 9.6 22.4 6.4 6.4 12.8 9.6 22.4 9.6 9.6 0 16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4Zm-646.4 528c-76.8-70.4-128-128-153.6-172.8 28.8-48 80-105.6 153.6-172.8C304 272 400 230.4 512 224c64 3.2 124.8 19.2 176 44.8l-54.4 54.4C598.4 300.8 560 288 512 288c-64 0-115.2 22.4-160 64s-64 96-64 160c0 48 12.8 89.6 35.2 124.8L256 707.2c-9.6-6.4-19.2-16-25.6-22.4Zm140.8-96c-12.8-22.4-19.2-48-19.2-76.8 0-44.8 16-83.2 48-112 32-28.8 67.2-48 112-48 28.8 0 54.4 6.4 73.6 19.2zM889.599 336c-12.8-16-28.8-28.8-41.6-41.6l-48 48c73.6 67.2 124.8 124.8 150.4 169.6-28.8 48-80 105.6-153.6 172.8-73.6 67.2-172.8 108.8-284.8 115.2-51.2-3.2-99.2-12.8-140.8-28.8l-48 48c57.6 22.4 118.4 38.4 188.8 44.8 160-16 288-73.6 377.6-176C979.199 585.6 1024 528 1024 512s-48.001-73.6-134.401-176Z"}),F("path",{fill:"currentColor",d:"M511.998 672c-12.8 0-25.6-3.2-38.4-6.4l-51.2 51.2c28.8 12.8 57.6 19.2 89.6 19.2 64 0 115.2-22.4 160-64 41.6-41.6 64-96 64-160 0-32-6.4-64-19.2-89.6l-51.2 51.2c3.2 12.8 6.4 25.6 6.4 38.4 0 44.8-16 83.2-48 112-32 28.8-67.2 48-112 48Z"})]))}}),E4=k4,T4=Y({name:"InfoFilled",__name:"info-filled",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.992 12.992 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"})]))}}),Mv=T4,$4=Y({name:"Loading",__name:"loading",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z"})]))}}),Er=$4,O4=Y({name:"Minus",__name:"minus",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64"})]))}}),N4=O4,I4=Y({name:"MoreFilled",__name:"more-filled",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M176 416a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224"})]))}}),Ky=I4,M4=Y({name:"More",__name:"more",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M176 416a112 112 0 1 0 0 224 112 112 0 0 0 0-224m0 64a48 48 0 1 1 0 96 48 48 0 0 1 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96"})]))}}),A4=M4,P4=Y({name:"PictureFilled",__name:"picture-filled",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M96 896a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h832a32 32 0 0 1 32 32v704a32 32 0 0 1-32 32zm315.52-228.48-68.928-68.928a32 32 0 0 0-45.248 0L128 768.064h778.688l-242.112-290.56a32 32 0 0 0-49.216 0L458.752 665.408a32 32 0 0 1-47.232 2.112M256 384a96 96 0 1 0 192.064-.064A96 96 0 0 0 256 384"})]))}}),R4=P4,L4=Y({name:"Plus",__name:"plus",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z"})]))}}),GC=L4,x4=Y({name:"Promotion",__name:"promotion",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m64 448 832-320-128 704-446.08-243.328L832 192 242.816 545.472zm256 512V657.024L512 768z"})]))}}),D4=x4,F4=Y({name:"QuestionFilled",__name:"question-filled",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592 0-42.944-14.08-76.736-42.24-101.376-28.16-25.344-65.472-37.312-111.232-37.312zm-12.672 406.208a54.272 54.272 0 0 0-38.72 14.784 49.408 49.408 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.848 54.848 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.968 51.968 0 0 0-15.488-38.016 55.936 55.936 0 0 0-39.424-14.784z"})]))}}),B4=F4,V4=Y({name:"RefreshLeft",__name:"refresh-left",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M289.088 296.704h92.992a32 32 0 0 1 0 64H232.96a32 32 0 0 1-32-32V179.712a32 32 0 0 1 64 0v50.56a384 384 0 0 1 643.84 282.88 384 384 0 0 1-383.936 384 384 384 0 0 1-384-384h64a320 320 0 1 0 640 0 320 320 0 0 0-555.712-216.448z"})]))}}),H4=V4,z4=Y({name:"RefreshRight",__name:"refresh-right",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88z"})]))}}),XC=z4,j4=Y({name:"ScaleToOriginal",__name:"scale-to-original",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M813.176 180.706a60.235 60.235 0 0 1 60.236 60.235v481.883a60.235 60.235 0 0 1-60.236 60.235H210.824a60.235 60.235 0 0 1-60.236-60.235V240.94a60.235 60.235 0 0 1 60.236-60.235h602.352zm0-60.235H210.824A120.47 120.47 0 0 0 90.353 240.94v481.883a120.47 120.47 0 0 0 120.47 120.47h602.353a120.47 120.47 0 0 0 120.471-120.47V240.94a120.47 120.47 0 0 0-120.47-120.47zm-120.47 180.705a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 0 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118zm-361.412 0a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 1 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118M512 361.412a30.118 30.118 0 0 0-30.118 30.117v30.118a30.118 30.118 0 0 0 60.236 0V391.53A30.118 30.118 0 0 0 512 361.412M512 512a30.118 30.118 0 0 0-30.118 30.118v30.117a30.118 30.118 0 0 0 60.236 0v-30.117A30.118 30.118 0 0 0 512 512"})]))}}),W4=j4,K4=Y({name:"Search",__name:"search",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704"})]))}}),U4=K4,q4=Y({name:"SortDown",__name:"sort-down",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M576 96v709.568L333.312 562.816A32 32 0 1 0 288 608l297.408 297.344A32 32 0 0 0 640 882.688V96a32 32 0 0 0-64 0"})]))}}),Y4=q4,G4=Y({name:"SortUp",__name:"sort-up",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M384 141.248V928a32 32 0 1 0 64 0V218.56l242.688 242.688A32 32 0 1 0 736 416L438.592 118.656A32 32 0 0 0 384 141.248"})]))}}),X4=G4,J4=Y({name:"StarFilled",__name:"star-filled",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M283.84 867.84 512 747.776l228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72z"})]))}}),uc=J4,Z4=Y({name:"Star",__name:"star",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m512 747.84 228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72zM313.6 924.48a70.4 70.4 0 0 1-102.144-74.24l37.888-220.928L88.96 472.96A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 126.208 0l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z"})]))}}),Q4=Z4,e3=Y({name:"SuccessFilled",__name:"success-filled",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),JC=e3,t3=Y({name:"View",__name:"view",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352m0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448m0 64a160.192 160.192 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160"})]))}}),n3=t3,o3=Y({name:"WarningFilled",__name:"warning-filled",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.432 58.432 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.432 58.432 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"})]))}}),hf=o3,r3=Y({name:"ZoomIn",__name:"zoom-in",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704m-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64z"})]))}}),ZC=r3,a3=Y({name:"ZoomOut",__name:"zoom-out",setup(e){return(t,n)=>(T(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704M352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64"})]))}}),l3=a3;const QC="__epPropKey",Q=e=>e,s3=e=>dt(e)&&!!e[QC],ir=(e,t)=>{if(!dt(e)||s3(e))return e;const{values:n,required:o,default:r,type:a,validator:l}=e,u={type:a,required:!!o,validator:n||l?c=>{let f=!1,d=[];if(n&&(d=Array.from(n),Tt(e,"default")&&d.push(r),f||(f=d.includes(c))),l&&(f||(f=l(c))),!f&&d.length>0){const p=[...new Set(d)].map(m=>JSON.stringify(m)).join(", ");xw(`Invalid prop: validation failed${t?` for prop "${t}"`:""}. Expected one of [${p}], got value ${JSON.stringify(c)}.`)}return f}:void 0,[QC]:!0};return Tt(e,"default")&&(u.default=r),u},Ne=e=>hd(Object.entries(e).map(([t,n])=>[t,ir(n,t)])),Dt=Q([String,Object,Function]),Av={Close:tr},Pv={Close:tr,SuccessFilled:JC,InfoFilled:Mv,WarningFilled:hf,CircleCloseFilled:Iv},Pa={success:JC,warning:hf,error:Iv,info:Mv},Rv={validating:Er,success:Nv,error:Fa},ut=(e,t)=>{if(e.install=n=>{for(const o of[e,...Object.values(t??{})])n.component(o.name,o)},t)for(const[n,o]of Object.entries(t))e[n]=o;return e},eS=(e,t)=>(e.install=n=>{e._context=n._context,n.config.globalProperties[t]=e},e),i3=(e,t)=>(e.install=n=>{n.directive(t,e)},e),tn=e=>(e.install=Bt,e),mf=(...e)=>t=>{e.forEach(n=>{Xe(n)?n(t):n.value=t})},Ue={tab:"Tab",enter:"Enter",space:"Space",left:"ArrowLeft",up:"ArrowUp",right:"ArrowRight",down:"ArrowDown",esc:"Escape",delete:"Delete",backspace:"Backspace",numpadEnter:"NumpadEnter",pageUp:"PageUp",pageDown:"PageDown",home:"Home",end:"End"},u3=["year","years","month","months","date","dates","week","datetime","datetimerange","daterange","monthrange"],cp=["sun","mon","tue","wed","thu","fri","sat"],ft="update:modelValue",Yt="change",Zn="input",Uy=Symbol("INSTALLED_KEY"),Ir=["","default","small","large"],tS=e=>["",...Ir].includes(e);var Oo=(e=>(e[e.TEXT=1]="TEXT",e[e.CLASS=2]="CLASS",e[e.STYLE=4]="STYLE",e[e.PROPS=8]="PROPS",e[e.FULL_PROPS=16]="FULL_PROPS",e[e.HYDRATE_EVENTS=32]="HYDRATE_EVENTS",e[e.STABLE_FRAGMENT=64]="STABLE_FRAGMENT",e[e.KEYED_FRAGMENT=128]="KEYED_FRAGMENT",e[e.UNKEYED_FRAGMENT=256]="UNKEYED_FRAGMENT",e[e.NEED_PATCH=512]="NEED_PATCH",e[e.DYNAMIC_SLOTS=1024]="DYNAMIC_SLOTS",e[e.HOISTED=-1]="HOISTED",e[e.BAIL=-2]="BAIL",e))(Oo||{});function gh(e){return Wt(e)&&e.type===Ve}function c3(e){return Wt(e)&&e.type===En}function d3(e){return Wt(e)&&!gh(e)&&!c3(e)}const f3=e=>{if(!Wt(e))return{};const t=e.props||{},n=(Wt(e.type)?e.type.props:void 0)||{},o={};return Object.keys(n).forEach(r=>{Tt(n[r],"default")&&(o[r]=n[r].default)}),Object.keys(t).forEach(r=>{o[jn(r)]=t[r]}),o},p3=e=>{if(!Pe(e)||e.length>1)throw new Error("expect to receive a single Vue element child");return e[0]},Ca=e=>{const t=Pe(e)?e:[e],n=[];return t.forEach(o=>{var r;Pe(o)?n.push(...Ca(o)):Wt(o)&&Pe(o.children)?n.push(...Ca(o.children)):(n.push(o),Wt(o)&&((r=o.component)!=null&&r.subTree)&&n.push(...Ca(o.component.subTree)))}),n},qy=e=>[...new Set(e)],Vn=e=>!e&&e!==0?[]:Array.isArray(e)?e:[e],Lv=e=>/([\uAC00-\uD7AF\u3130-\u318F])+/gi.test(e),en=e=>e;function h3(e){let t=0;const n=(...o)=>{t&&kl(t),t=Ma(()=>{e(...o),t=0})};return n.cancel=()=>{kl(t),t=0},n}const m3=["class","style"],v3=/^on[A-Z]/,xv=(e={})=>{const{excludeListeners:t=!1,excludeKeys:n}=e,o=k(()=>((n==null?void 0:n.value)||[]).concat(m3)),r=lt();return k(r?()=>{var a;return hd(Object.entries((a=r.proxy)==null?void 0:a.$attrs).filter(([l])=>!o.value.includes(l)&&!(t&&v3.test(l))))}:()=>({}))},wn=({from:e,replacement:t,scope:n,version:o,ref:r,type:a="API"},l)=>{ve(()=>i(l),s=>{},{immediate:!0})},nS=(e,t,n,o)=>{let r={offsetX:0,offsetY:0};const a=u=>{const c=u.clientX,f=u.clientY,{offsetX:d,offsetY:p}=r,m=e.value.getBoundingClientRect(),v=m.left,h=m.top,C=m.width,g=m.height,y=document.documentElement.clientWidth,_=document.documentElement.clientHeight,b=-v+d,w=-h+p,S=y-v-C+d,E=_-h-g+p,$=A=>{let M=d+A.clientX-c,D=p+A.clientY-f;o!=null&&o.value||(M=Math.min(Math.max(M,b),S),D=Math.min(Math.max(D,w),E)),r={offsetX:M,offsetY:D},e.value&&(e.value.style.transform=`translate(${rn(M)}, ${rn(D)})`)},O=()=>{document.removeEventListener("mousemove",$),document.removeEventListener("mouseup",O)};document.addEventListener("mousemove",$),document.addEventListener("mouseup",O)},l=()=>{t.value&&e.value&&t.value.addEventListener("mousedown",a)},s=()=>{t.value&&e.value&&t.value.removeEventListener("mousedown",a)};at(()=>{Mn(()=>{n.value?l():s()})}),zt(()=>{s()})};var oS={name:"en",el:{breadcrumb:{label:"Breadcrumb"},colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color."},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",week:"week",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum"},tour:{next:"Next",previous:"Previous",finish:"Finish"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"},carousel:{leftArrow:"Carousel arrow left",rightArrow:"Carousel arrow right",indicator:"Carousel switch to index {index}"}}};const g3=e=>(t,n)=>b3(t,n,i(e)),b3=(e,t,n)=>un(n,e,e).replace(/\{(\w+)\}/g,(o,r)=>{var a;return`${(a=t==null?void 0:t[r])!=null?a:`{${r}}`}`}),y3=e=>{const t=k(()=>i(e).name),n=xt(e)?e:R(e);return{lang:t,locale:n,t:g3(e)}},rS=Symbol("localeContextKey"),$t=e=>{const t=e||De(rS,R());return y3(k(()=>t.value||oS))},Ri="el",w3="is-",ja=(e,t,n,o,r)=>{let a=`${e}-${t}`;return n&&(a+=`-${n}`),o&&(a+=`__${o}`),r&&(a+=`--${r}`),a},aS=Symbol("namespaceContextKey"),Dv=e=>{const t=e||(lt()?De(aS,R(Ri)):R(Ri));return k(()=>i(t)||Ri)},Se=(e,t)=>{const n=Dv(t);return{namespace:n,b:(h="")=>ja(n.value,e,h,"",""),e:h=>h?ja(n.value,e,"",h,""):"",m:h=>h?ja(n.value,e,"","",h):"",be:(h,C)=>h&&C?ja(n.value,e,h,C,""):"",em:(h,C)=>h&&C?ja(n.value,e,"",h,C):"",bm:(h,C)=>h&&C?ja(n.value,e,h,"",C):"",bem:(h,C,g)=>h&&C&&g?ja(n.value,e,h,C,g):"",is:(h,...C)=>{const g=C.length>=1?C[0]:!0;return h&&g?`${w3}${h}`:""},cssVar:h=>{const C={};for(const g in h)h[g]&&(C[`--${n.value}-${g}`]=h[g]);return C},cssVarName:h=>`--${n.value}-${h}`,cssVarBlock:h=>{const C={};for(const g in h)h[g]&&(C[`--${n.value}-${e}-${g}`]=h[g]);return C},cssVarBlockName:h=>`--${n.value}-${e}-${h}`}},Fv=(e,t={})=>{xt(e)||vn("[useLockscreen]","You need to pass a ref param to this function");const n=t.ns||Se("popup"),o=k(()=>n.bm("parent","hidden"));if(!Ct||wo(document.body,o.value))return;let r=0,a=!1,l="0";const s=()=>{setTimeout(()=>{Kn(document==null?void 0:document.body,o.value),a&&document&&(document.body.style.width=l)},200)};ve(e,u=>{if(!u){s();return}a=!wo(document.body,o.value),a&&(l=document.body.style.width),r=WC(n.namespace.value);const c=document.documentElement.clientHeight0&&(c||f==="scroll")&&a&&(document.body.style.width=`calc(100% - ${r}px)`),Mo(document.body,o.value)}),Hd(()=>s())},_3=ir({type:Q(Boolean),default:null}),C3=ir({type:Q(Function)}),lS=e=>{const t=`update:${e}`,n=`onUpdate:${e}`,o=[t],r={[e]:_3,[n]:C3};return{useModelToggle:({indicator:l,toggleReason:s,shouldHideWhenRouteChanges:u,shouldProceed:c,onShow:f,onHide:d})=>{const p=lt(),{emit:m}=p,v=p.props,h=k(()=>Xe(v[n])),C=k(()=>v[e]===null),g=E=>{l.value!==!0&&(l.value=!0,s&&(s.value=E),Xe(f)&&f(E))},y=E=>{l.value!==!1&&(l.value=!1,s&&(s.value=E),Xe(d)&&d(E))},_=E=>{if(v.disabled===!0||Xe(c)&&!c())return;const $=h.value&&Ct;$&&m(t,!0),(C.value||!$)&&g(E)},b=E=>{if(v.disabled===!0||!Ct)return;const $=h.value&&Ct;$&&m(t,!1),(C.value||!$)&&y(E)},w=E=>{dn(E)&&(v.disabled&&E?h.value&&m(t,!1):l.value!==E&&(E?g():y()))},S=()=>{l.value?b():_()};return ve(()=>v[e],w),u&&p.appContext.config.globalProperties.$route!==void 0&&ve(()=>({...p.proxy.$route}),()=>{u.value&&l.value&&b()}),at(()=>{w(v[e])}),{hide:b,show:_,toggle:S,hasUpdateHandler:h}},useModelToggleProps:r,useModelToggleEmits:o}};lS("modelValue");const sS=e=>{const t=lt();return k(()=>{var n,o;return(o=(n=t==null?void 0:t.proxy)==null?void 0:n.$props)==null?void 0:o[e]})};var so="top",Bo="bottom",Vo="right",io="left",Bv="auto",Au=[so,Bo,Vo,io],Ts="start",nu="end",S3="clippingParents",iS="viewport",hi="popper",k3="reference",Yy=Au.reduce(function(e,t){return e.concat([t+"-"+Ts,t+"-"+nu])},[]),Dl=[].concat(Au,[Bv]).reduce(function(e,t){return e.concat([t,t+"-"+Ts,t+"-"+nu])},[]),E3="beforeRead",T3="read",$3="afterRead",O3="beforeMain",N3="main",I3="afterMain",M3="beforeWrite",A3="write",P3="afterWrite",R3=[E3,T3,$3,O3,N3,I3,M3,A3,P3];function Tr(e){return e?(e.nodeName||"").toLowerCase():null}function ur(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function $s(e){var t=ur(e).Element;return e instanceof t||e instanceof Element}function Ro(e){var t=ur(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function Vv(e){if(typeof ShadowRoot>"u")return!1;var t=ur(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function L3(e){var t=e.state;Object.keys(t.elements).forEach(function(n){var o=t.styles[n]||{},r=t.attributes[n]||{},a=t.elements[n];!Ro(a)||!Tr(a)||(Object.assign(a.style,o),Object.keys(r).forEach(function(l){var s=r[l];s===!1?a.removeAttribute(l):a.setAttribute(l,s===!0?"":s)}))})}function x3(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(o){var r=t.elements[o],a=t.attributes[o]||{},l=Object.keys(t.styles.hasOwnProperty(o)?t.styles[o]:n[o]),s=l.reduce(function(u,c){return u[c]="",u},{});!Ro(r)||!Tr(r)||(Object.assign(r.style,s),Object.keys(a).forEach(function(u){r.removeAttribute(u)}))})}}var uS={name:"applyStyles",enabled:!0,phase:"write",fn:L3,effect:x3,requires:["computeStyles"]};function _r(e){return e.split("-")[0]}var ul=Math.max,md=Math.min,Os=Math.round;function Ns(e,t){t===void 0&&(t=!1);var n=e.getBoundingClientRect(),o=1,r=1;if(Ro(e)&&t){var a=e.offsetHeight,l=e.offsetWidth;l>0&&(o=Os(n.width)/l||1),a>0&&(r=Os(n.height)/a||1)}return{width:n.width/o,height:n.height/r,top:n.top/r,right:n.right/o,bottom:n.bottom/r,left:n.left/o,x:n.left/o,y:n.top/r}}function Hv(e){var t=Ns(e),n=e.offsetWidth,o=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-o)<=1&&(o=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:o}}function cS(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Vv(n)){var o=t;do{if(o&&e.isSameNode(o))return!0;o=o.parentNode||o.host}while(o)}return!1}function qr(e){return ur(e).getComputedStyle(e)}function D3(e){return["table","td","th"].indexOf(Tr(e))>=0}function Ba(e){return(($s(e)?e.ownerDocument:e.document)||window.document).documentElement}function vf(e){return Tr(e)==="html"?e:e.assignedSlot||e.parentNode||(Vv(e)?e.host:null)||Ba(e)}function Gy(e){return!Ro(e)||qr(e).position==="fixed"?null:e.offsetParent}function F3(e){var t=navigator.userAgent.toLowerCase().indexOf("firefox")!==-1,n=navigator.userAgent.indexOf("Trident")!==-1;if(n&&Ro(e)){var o=qr(e);if(o.position==="fixed")return null}var r=vf(e);for(Vv(r)&&(r=r.host);Ro(r)&&["html","body"].indexOf(Tr(r))<0;){var a=qr(r);if(a.transform!=="none"||a.perspective!=="none"||a.contain==="paint"||["transform","perspective"].indexOf(a.willChange)!==-1||t&&a.willChange==="filter"||t&&a.filter&&a.filter!=="none")return r;r=r.parentNode}return null}function Pu(e){for(var t=ur(e),n=Gy(e);n&&D3(n)&&qr(n).position==="static";)n=Gy(n);return n&&(Tr(n)==="html"||Tr(n)==="body"&&qr(n).position==="static")?t:n||F3(e)||t}function zv(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Li(e,t,n){return ul(e,md(t,n))}function B3(e,t,n){var o=Li(e,t,n);return o>n?n:o}function dS(){return{top:0,right:0,bottom:0,left:0}}function fS(e){return Object.assign({},dS(),e)}function pS(e,t){return t.reduce(function(n,o){return n[o]=e,n},{})}var V3=function(e,t){return e=typeof e=="function"?e(Object.assign({},t.rects,{placement:t.placement})):e,fS(typeof e!="number"?e:pS(e,Au))};function H3(e){var t,n=e.state,o=e.name,r=e.options,a=n.elements.arrow,l=n.modifiersData.popperOffsets,s=_r(n.placement),u=zv(s),c=[io,Vo].indexOf(s)>=0,f=c?"height":"width";if(!(!a||!l)){var d=V3(r.padding,n),p=Hv(a),m=u==="y"?so:io,v=u==="y"?Bo:Vo,h=n.rects.reference[f]+n.rects.reference[u]-l[u]-n.rects.popper[f],C=l[u]-n.rects.reference[u],g=Pu(a),y=g?u==="y"?g.clientHeight||0:g.clientWidth||0:0,_=h/2-C/2,b=d[m],w=y-p[f]-d[v],S=y/2-p[f]/2+_,E=Li(b,S,w),$=u;n.modifiersData[o]=(t={},t[$]=E,t.centerOffset=E-S,t)}}function z3(e){var t=e.state,n=e.options,o=n.element,r=o===void 0?"[data-popper-arrow]":o;r!=null&&(typeof r=="string"&&(r=t.elements.popper.querySelector(r),!r)||!cS(t.elements.popper,r)||(t.elements.arrow=r))}var j3={name:"arrow",enabled:!0,phase:"main",fn:H3,effect:z3,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Is(e){return e.split("-")[1]}var W3={top:"auto",right:"auto",bottom:"auto",left:"auto"};function K3(e){var t=e.x,n=e.y,o=window,r=o.devicePixelRatio||1;return{x:Os(t*r)/r||0,y:Os(n*r)/r||0}}function Xy(e){var t,n=e.popper,o=e.popperRect,r=e.placement,a=e.variation,l=e.offsets,s=e.position,u=e.gpuAcceleration,c=e.adaptive,f=e.roundOffsets,d=e.isFixed,p=l.x,m=p===void 0?0:p,v=l.y,h=v===void 0?0:v,C=typeof f=="function"?f({x:m,y:h}):{x:m,y:h};m=C.x,h=C.y;var g=l.hasOwnProperty("x"),y=l.hasOwnProperty("y"),_=io,b=so,w=window;if(c){var S=Pu(n),E="clientHeight",$="clientWidth";if(S===ur(n)&&(S=Ba(n),qr(S).position!=="static"&&s==="absolute"&&(E="scrollHeight",$="scrollWidth")),S=S,r===so||(r===io||r===Vo)&&a===nu){b=Bo;var O=d&&S===w&&w.visualViewport?w.visualViewport.height:S[E];h-=O-o.height,h*=u?1:-1}if(r===io||(r===so||r===Bo)&&a===nu){_=Vo;var A=d&&S===w&&w.visualViewport?w.visualViewport.width:S[$];m-=A-o.width,m*=u?1:-1}}var M=Object.assign({position:s},c&&W3),D=f===!0?K3({x:m,y:h}):{x:m,y:h};if(m=D.x,h=D.y,u){var U;return Object.assign({},M,(U={},U[b]=y?"0":"",U[_]=g?"0":"",U.transform=(w.devicePixelRatio||1)<=1?"translate("+m+"px, "+h+"px)":"translate3d("+m+"px, "+h+"px, 0)",U))}return Object.assign({},M,(t={},t[b]=y?h+"px":"",t[_]=g?m+"px":"",t.transform="",t))}function U3(e){var t=e.state,n=e.options,o=n.gpuAcceleration,r=o===void 0?!0:o,a=n.adaptive,l=a===void 0?!0:a,s=n.roundOffsets,u=s===void 0?!0:s,c={placement:_r(t.placement),variation:Is(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:r,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,Xy(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:l,roundOffsets:u})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,Xy(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:u})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}var hS={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:U3,data:{}},cc={passive:!0};function q3(e){var t=e.state,n=e.instance,o=e.options,r=o.scroll,a=r===void 0?!0:r,l=o.resize,s=l===void 0?!0:l,u=ur(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return a&&c.forEach(function(f){f.addEventListener("scroll",n.update,cc)}),s&&u.addEventListener("resize",n.update,cc),function(){a&&c.forEach(function(f){f.removeEventListener("scroll",n.update,cc)}),s&&u.removeEventListener("resize",n.update,cc)}}var mS={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:q3,data:{}},Y3={left:"right",right:"left",bottom:"top",top:"bottom"};function Ac(e){return e.replace(/left|right|bottom|top/g,function(t){return Y3[t]})}var G3={start:"end",end:"start"};function Jy(e){return e.replace(/start|end/g,function(t){return G3[t]})}function jv(e){var t=ur(e),n=t.pageXOffset,o=t.pageYOffset;return{scrollLeft:n,scrollTop:o}}function Wv(e){return Ns(Ba(e)).left+jv(e).scrollLeft}function X3(e){var t=ur(e),n=Ba(e),o=t.visualViewport,r=n.clientWidth,a=n.clientHeight,l=0,s=0;return o&&(r=o.width,a=o.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(l=o.offsetLeft,s=o.offsetTop)),{width:r,height:a,x:l+Wv(e),y:s}}function J3(e){var t,n=Ba(e),o=jv(e),r=(t=e.ownerDocument)==null?void 0:t.body,a=ul(n.scrollWidth,n.clientWidth,r?r.scrollWidth:0,r?r.clientWidth:0),l=ul(n.scrollHeight,n.clientHeight,r?r.scrollHeight:0,r?r.clientHeight:0),s=-o.scrollLeft+Wv(e),u=-o.scrollTop;return qr(r||n).direction==="rtl"&&(s+=ul(n.clientWidth,r?r.clientWidth:0)-a),{width:a,height:l,x:s,y:u}}function Kv(e){var t=qr(e),n=t.overflow,o=t.overflowX,r=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+r+o)}function vS(e){return["html","body","#document"].indexOf(Tr(e))>=0?e.ownerDocument.body:Ro(e)&&Kv(e)?e:vS(vf(e))}function xi(e,t){var n;t===void 0&&(t=[]);var o=vS(e),r=o===((n=e.ownerDocument)==null?void 0:n.body),a=ur(o),l=r?[a].concat(a.visualViewport||[],Kv(o)?o:[]):o,s=t.concat(l);return r?s:s.concat(xi(vf(l)))}function bh(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function Z3(e){var t=Ns(e);return t.top=t.top+e.clientTop,t.left=t.left+e.clientLeft,t.bottom=t.top+e.clientHeight,t.right=t.left+e.clientWidth,t.width=e.clientWidth,t.height=e.clientHeight,t.x=t.left,t.y=t.top,t}function Zy(e,t){return t===iS?bh(X3(e)):$s(t)?Z3(t):bh(J3(Ba(e)))}function Q3(e){var t=xi(vf(e)),n=["absolute","fixed"].indexOf(qr(e).position)>=0,o=n&&Ro(e)?Pu(e):e;return $s(o)?t.filter(function(r){return $s(r)&&cS(r,o)&&Tr(r)!=="body"}):[]}function eD(e,t,n){var o=t==="clippingParents"?Q3(e):[].concat(t),r=[].concat(o,[n]),a=r[0],l=r.reduce(function(s,u){var c=Zy(e,u);return s.top=ul(c.top,s.top),s.right=md(c.right,s.right),s.bottom=md(c.bottom,s.bottom),s.left=ul(c.left,s.left),s},Zy(e,a));return l.width=l.right-l.left,l.height=l.bottom-l.top,l.x=l.left,l.y=l.top,l}function gS(e){var t=e.reference,n=e.element,o=e.placement,r=o?_r(o):null,a=o?Is(o):null,l=t.x+t.width/2-n.width/2,s=t.y+t.height/2-n.height/2,u;switch(r){case so:u={x:l,y:t.y-n.height};break;case Bo:u={x:l,y:t.y+t.height};break;case Vo:u={x:t.x+t.width,y:s};break;case io:u={x:t.x-n.width,y:s};break;default:u={x:t.x,y:t.y}}var c=r?zv(r):null;if(c!=null){var f=c==="y"?"height":"width";switch(a){case Ts:u[c]=u[c]-(t[f]/2-n[f]/2);break;case nu:u[c]=u[c]+(t[f]/2-n[f]/2);break}}return u}function ou(e,t){t===void 0&&(t={});var n=t,o=n.placement,r=o===void 0?e.placement:o,a=n.boundary,l=a===void 0?S3:a,s=n.rootBoundary,u=s===void 0?iS:s,c=n.elementContext,f=c===void 0?hi:c,d=n.altBoundary,p=d===void 0?!1:d,m=n.padding,v=m===void 0?0:m,h=fS(typeof v!="number"?v:pS(v,Au)),C=f===hi?k3:hi,g=e.rects.popper,y=e.elements[p?C:f],_=eD($s(y)?y:y.contextElement||Ba(e.elements.popper),l,u),b=Ns(e.elements.reference),w=gS({reference:b,element:g,strategy:"absolute",placement:r}),S=bh(Object.assign({},g,w)),E=f===hi?S:b,$={top:_.top-E.top+h.top,bottom:E.bottom-_.bottom+h.bottom,left:_.left-E.left+h.left,right:E.right-_.right+h.right},O=e.modifiersData.offset;if(f===hi&&O){var A=O[r];Object.keys($).forEach(function(M){var D=[Vo,Bo].indexOf(M)>=0?1:-1,U=[so,Bo].indexOf(M)>=0?"y":"x";$[M]+=A[U]*D})}return $}function tD(e,t){t===void 0&&(t={});var n=t,o=n.placement,r=n.boundary,a=n.rootBoundary,l=n.padding,s=n.flipVariations,u=n.allowedAutoPlacements,c=u===void 0?Dl:u,f=Is(o),d=f?s?Yy:Yy.filter(function(v){return Is(v)===f}):Au,p=d.filter(function(v){return c.indexOf(v)>=0});p.length===0&&(p=d);var m=p.reduce(function(v,h){return v[h]=ou(e,{placement:h,boundary:r,rootBoundary:a,padding:l})[_r(h)],v},{});return Object.keys(m).sort(function(v,h){return m[v]-m[h]})}function nD(e){if(_r(e)===Bv)return[];var t=Ac(e);return[Jy(e),t,Jy(t)]}function oD(e){var t=e.state,n=e.options,o=e.name;if(!t.modifiersData[o]._skip){for(var r=n.mainAxis,a=r===void 0?!0:r,l=n.altAxis,s=l===void 0?!0:l,u=n.fallbackPlacements,c=n.padding,f=n.boundary,d=n.rootBoundary,p=n.altBoundary,m=n.flipVariations,v=m===void 0?!0:m,h=n.allowedAutoPlacements,C=t.options.placement,g=_r(C),y=g===C,_=u||(y||!v?[Ac(C)]:nD(C)),b=[C].concat(_).reduce(function(fe,Te){return fe.concat(_r(Te)===Bv?tD(t,{placement:Te,boundary:f,rootBoundary:d,padding:c,flipVariations:v,allowedAutoPlacements:h}):Te)},[]),w=t.rects.reference,S=t.rects.popper,E=new Map,$=!0,O=b[0],A=0;A=0,W=j?"width":"height",L=ou(t,{placement:M,boundary:f,rootBoundary:d,altBoundary:p,padding:c}),P=j?U?Vo:io:U?Bo:so;w[W]>S[W]&&(P=Ac(P));var x=Ac(P),I=[];if(a&&I.push(L[D]<=0),s&&I.push(L[P]<=0,L[x]<=0),I.every(function(fe){return fe})){O=M,$=!1;break}E.set(M,I)}if($)for(var H=v?3:1,G=function(fe){var Te=b.find(function(oe){var ke=E.get(oe);if(ke)return ke.slice(0,fe).every(function(ae){return ae})});if(Te)return O=Te,"break"},J=H;J>0;J--){var ee=G(J);if(ee==="break")break}t.placement!==O&&(t.modifiersData[o]._skip=!0,t.placement=O,t.reset=!0)}}var rD={name:"flip",enabled:!0,phase:"main",fn:oD,requiresIfExists:["offset"],data:{_skip:!1}};function Qy(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function e0(e){return[so,Vo,Bo,io].some(function(t){return e[t]>=0})}function aD(e){var t=e.state,n=e.name,o=t.rects.reference,r=t.rects.popper,a=t.modifiersData.preventOverflow,l=ou(t,{elementContext:"reference"}),s=ou(t,{altBoundary:!0}),u=Qy(l,o),c=Qy(s,r,a),f=e0(u),d=e0(c);t.modifiersData[n]={referenceClippingOffsets:u,popperEscapeOffsets:c,isReferenceHidden:f,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":f,"data-popper-escaped":d})}var lD={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:aD};function sD(e,t,n){var o=_r(e),r=[io,so].indexOf(o)>=0?-1:1,a=typeof n=="function"?n(Object.assign({},t,{placement:e})):n,l=a[0],s=a[1];return l=l||0,s=(s||0)*r,[io,Vo].indexOf(o)>=0?{x:s,y:l}:{x:l,y:s}}function iD(e){var t=e.state,n=e.options,o=e.name,r=n.offset,a=r===void 0?[0,0]:r,l=Dl.reduce(function(f,d){return f[d]=sD(d,t.rects,a),f},{}),s=l[t.placement],u=s.x,c=s.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=u,t.modifiersData.popperOffsets.y+=c),t.modifiersData[o]=l}var uD={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:iD};function cD(e){var t=e.state,n=e.name;t.modifiersData[n]=gS({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}var bS={name:"popperOffsets",enabled:!0,phase:"read",fn:cD,data:{}};function dD(e){return e==="x"?"y":"x"}function fD(e){var t=e.state,n=e.options,o=e.name,r=n.mainAxis,a=r===void 0?!0:r,l=n.altAxis,s=l===void 0?!1:l,u=n.boundary,c=n.rootBoundary,f=n.altBoundary,d=n.padding,p=n.tether,m=p===void 0?!0:p,v=n.tetherOffset,h=v===void 0?0:v,C=ou(t,{boundary:u,rootBoundary:c,padding:d,altBoundary:f}),g=_r(t.placement),y=Is(t.placement),_=!y,b=zv(g),w=dD(b),S=t.modifiersData.popperOffsets,E=t.rects.reference,$=t.rects.popper,O=typeof h=="function"?h(Object.assign({},t.rects,{placement:t.placement})):h,A=typeof O=="number"?{mainAxis:O,altAxis:O}:Object.assign({mainAxis:0,altAxis:0},O),M=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,D={x:0,y:0};if(S){if(a){var U,j=b==="y"?so:io,W=b==="y"?Bo:Vo,L=b==="y"?"height":"width",P=S[b],x=P+C[j],I=P-C[W],H=m?-$[L]/2:0,G=y===Ts?E[L]:$[L],J=y===Ts?-$[L]:-E[L],ee=t.elements.arrow,fe=m&&ee?Hv(ee):{width:0,height:0},Te=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:dS(),oe=Te[j],ke=Te[W],ae=Li(0,E[L],fe[L]),Oe=_?E[L]/2-H-ae-oe-A.mainAxis:G-ae-oe-A.mainAxis,we=_?-E[L]/2+H+ae+ke+A.mainAxis:J+ae+ke+A.mainAxis,ge=t.elements.arrow&&Pu(t.elements.arrow),q=ge?b==="y"?ge.clientTop||0:ge.clientLeft||0:0,B=(U=M==null?void 0:M[b])!=null?U:0,z=P+Oe-B-q,Z=P+we-B,ue=Li(m?md(x,z):x,P,m?ul(I,Z):I);S[b]=ue,D[b]=ue-P}if(s){var se,me=b==="x"?so:io,_e=b==="x"?Bo:Vo,$e=S[w],Ce=w==="y"?"height":"width",ce=$e+C[me],de=$e-C[_e],xe=[so,io].indexOf(g)!==-1,he=(se=M==null?void 0:M[w])!=null?se:0,He=xe?ce:$e-E[Ce]-$[Ce]-he+A.altAxis,et=xe?$e+E[Ce]+$[Ce]-he-A.altAxis:de,rt=m&&xe?B3(He,$e,et):Li(m?He:ce,$e,m?et:de);S[w]=rt,D[w]=rt-$e}t.modifiersData[o]=D}}var pD={name:"preventOverflow",enabled:!0,phase:"main",fn:fD,requiresIfExists:["offset"]};function hD(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function mD(e){return e===ur(e)||!Ro(e)?jv(e):hD(e)}function vD(e){var t=e.getBoundingClientRect(),n=Os(t.width)/e.offsetWidth||1,o=Os(t.height)/e.offsetHeight||1;return n!==1||o!==1}function gD(e,t,n){n===void 0&&(n=!1);var o=Ro(t),r=Ro(t)&&vD(t),a=Ba(t),l=Ns(e,r),s={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(o||!o&&!n)&&((Tr(t)!=="body"||Kv(a))&&(s=mD(t)),Ro(t)?(u=Ns(t,!0),u.x+=t.clientLeft,u.y+=t.clientTop):a&&(u.x=Wv(a))),{x:l.left+s.scrollLeft-u.x,y:l.top+s.scrollTop-u.y,width:l.width,height:l.height}}function bD(e){var t=new Map,n=new Set,o=[];e.forEach(function(a){t.set(a.name,a)});function r(a){n.add(a.name);var l=[].concat(a.requires||[],a.requiresIfExists||[]);l.forEach(function(s){if(!n.has(s)){var u=t.get(s);u&&r(u)}}),o.push(a)}return e.forEach(function(a){n.has(a.name)||r(a)}),o}function yD(e){var t=bD(e);return R3.reduce(function(n,o){return n.concat(t.filter(function(r){return r.phase===o}))},[])}function wD(e){var t;return function(){return t||(t=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})})),t}}function _D(e){var t=e.reduce(function(n,o){var r=n[o.name];return n[o.name]=r?Object.assign({},r,o,{options:Object.assign({},r.options,o.options),data:Object.assign({},r.data,o.data)}):o,n},{});return Object.keys(t).map(function(n){return t[n]})}var t0={placement:"bottom",modifiers:[],strategy:"absolute"};function n0(){for(var e=arguments.length,t=new Array(e),n=0;n{const o={name:"updateState",enabled:!0,phase:"write",fn:({state:u})=>{const c=TD(u);Object.assign(l.value,c)},requires:["computeStyles"]},r=k(()=>{const{onFirstUpdate:u,placement:c,strategy:f,modifiers:d}=i(n);return{onFirstUpdate:u,placement:c||"bottom",strategy:f||"absolute",modifiers:[...d||[],o,{name:"applyStyles",enabled:!1}]}}),a=Ut(),l=R({styles:{popper:{position:i(r).strategy,left:"0",top:"0"},arrow:{position:"absolute"}},attributes:{}}),s=()=>{a.value&&(a.value.destroy(),a.value=void 0)};return ve(r,u=>{const c=i(a);c&&c.setOptions(u)},{deep:!0}),ve([e,t],([u,c])=>{s(),!(!u||!c)&&(a.value=kD(u,c,i(r)))}),zt(()=>{s()}),{state:k(()=>{var u;return{...((u=i(a))==null?void 0:u.state)||{}}}),styles:k(()=>i(l).styles),attributes:k(()=>i(l).attributes),update:()=>{var u;return(u=i(a))==null?void 0:u.update()},forceUpdate:()=>{var u;return(u=i(a))==null?void 0:u.forceUpdate()},instanceRef:k(()=>i(a))}};function TD(e){const t=Object.keys(e.elements),n=hd(t.map(r=>[r,e.styles[r]||{}])),o=hd(t.map(r=>[r,e.attributes[r]]));return{styles:n,attributes:o}}const qv=e=>{if(!e)return{onClick:Bt,onMousedown:Bt,onMouseup:Bt};let t=!1,n=!1;return{onClick:l=>{t&&n&&e(l),t=n=!1},onMousedown:l=>{t=l.target===l.currentTarget},onMouseup:l=>{n=l.target===l.currentTarget}}},$D=(e,t=0)=>{if(t===0)return e;const n=R(!1);let o=0;const r=()=>{o&&clearTimeout(o),o=window.setTimeout(()=>{n.value=e.value},t)};return at(r),ve(()=>e.value,a=>{a?r():n.value=a}),n};function o0(){let e;const t=(o,r)=>{n(),e=window.setTimeout(o,r)},n=()=>window.clearTimeout(e);return Tu(()=>n()),{registerTimeout:t,cancelTimeout:n}}const r0={prefix:Math.floor(Math.random()*1e4),current:0},OD=Symbol("elIdInjection"),Yv=()=>lt()?De(OD,r0):r0,xn=e=>{const t=Yv(),n=Dv();return k(()=>i(e)||`${n.value}-id-${t.prefix}-${t.current++}`)};let Jl=[];const a0=e=>{const t=e;t.key===Ue.esc&&Jl.forEach(n=>n(t))},ND=e=>{at(()=>{Jl.length===0&&document.addEventListener("keydown",a0),Ct&&Jl.push(e)}),zt(()=>{Jl=Jl.filter(t=>t!==e),Jl.length===0&&Ct&&document.removeEventListener("keydown",a0)})};let l0;const yS=()=>{const e=Dv(),t=Yv(),n=k(()=>`${e.value}-popper-container-${t.prefix}`),o=k(()=>`#${n.value}`);return{id:n,selector:o}},ID=e=>{const t=document.createElement("div");return t.id=e,document.body.appendChild(t),t},MD=()=>{const{id:e,selector:t}=yS();return Su(()=>{Ct&&!l0&&!document.body.querySelector(t.value)&&(l0=ID(e.value))}),{id:e,selector:t}},AD=Ne({showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0}}),PD=({showAfter:e,hideAfter:t,autoClose:n,open:o,close:r})=>{const{registerTimeout:a}=o0(),{registerTimeout:l,cancelTimeout:s}=o0();return{onOpen:f=>{a(()=>{o(f);const d=i(n);Je(d)&&d>0&&l(()=>{r(f)},d)},i(e))},onClose:f=>{s(),a(()=>{r(f)},i(t))}}},wS=Symbol("elForwardRef"),RD=e=>{yt(wS,{setForwardRef:n=>{e.value=n}})},LD=e=>({mounted(t){e(t)},updated(t){e(t)},unmounted(){e(null)}}),s0={current:0},i0=R(0),_S=2e3,u0=Symbol("elZIndexContextKey"),CS=Symbol("zIndexContextKey"),Zs=e=>{const t=lt()?De(u0,s0):s0,n=e||(lt()?De(CS,void 0):void 0),o=k(()=>{const l=i(n);return Je(l)?l:_S}),r=k(()=>o.value+i0.value),a=()=>(t.current++,i0.value=t.current,r.value);return!Ct&&De(u0),{initialZIndex:o,currentZIndex:r,nextZIndex:a}},Ms=Math.min,cl=Math.max,vd=Math.round,dc=Math.floor,Ra=e=>({x:e,y:e}),xD={left:"right",right:"left",bottom:"top",top:"bottom"},DD={start:"end",end:"start"};function yh(e,t,n){return cl(e,Ms(t,n))}function Ru(e,t){return typeof e=="function"?e(t):e}function El(e){return e.split("-")[0]}function Lu(e){return e.split("-")[1]}function SS(e){return e==="x"?"y":"x"}function Gv(e){return e==="y"?"height":"width"}function As(e){return["top","bottom"].includes(El(e))?"y":"x"}function Xv(e){return SS(As(e))}function FD(e,t,n){n===void 0&&(n=!1);const o=Lu(e),r=Xv(e),a=Gv(r);let l=r==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return t.reference[a]>t.floating[a]&&(l=gd(l)),[l,gd(l)]}function BD(e){const t=gd(e);return[wh(e),t,wh(t)]}function wh(e){return e.replace(/start|end/g,t=>DD[t])}function VD(e,t,n){const o=["left","right"],r=["right","left"],a=["top","bottom"],l=["bottom","top"];switch(e){case"top":case"bottom":return n?t?r:o:t?o:r;case"left":case"right":return t?a:l;default:return[]}}function HD(e,t,n,o){const r=Lu(e);let a=VD(El(e),n==="start",o);return r&&(a=a.map(l=>l+"-"+r),t&&(a=a.concat(a.map(wh)))),a}function gd(e){return e.replace(/left|right|bottom|top/g,t=>xD[t])}function zD(e){return{top:0,right:0,bottom:0,left:0,...e}}function kS(e){return typeof e!="number"?zD(e):{top:e,right:e,bottom:e,left:e}}function bd(e){const{x:t,y:n,width:o,height:r}=e;return{width:o,height:r,top:n,left:t,right:t+o,bottom:n+r,x:t,y:n}}function c0(e,t,n){let{reference:o,floating:r}=e;const a=As(t),l=Xv(t),s=Gv(l),u=El(t),c=a==="y",f=o.x+o.width/2-r.width/2,d=o.y+o.height/2-r.height/2,p=o[s]/2-r[s]/2;let m;switch(u){case"top":m={x:f,y:o.y-r.height};break;case"bottom":m={x:f,y:o.y+o.height};break;case"right":m={x:o.x+o.width,y:d};break;case"left":m={x:o.x-r.width,y:d};break;default:m={x:o.x,y:o.y}}switch(Lu(t)){case"start":m[l]-=p*(n&&c?-1:1);break;case"end":m[l]+=p*(n&&c?-1:1);break}return m}const jD=async(e,t,n)=>{const{placement:o="bottom",strategy:r="absolute",middleware:a=[],platform:l}=n,s=a.filter(Boolean),u=await(l.isRTL==null?void 0:l.isRTL(t));let c=await l.getElementRects({reference:e,floating:t,strategy:r}),{x:f,y:d}=c0(c,o,u),p=o,m={},v=0;for(let h=0;h({name:"arrow",options:e,async fn(t){const{x:n,y:o,placement:r,rects:a,platform:l,elements:s,middlewareData:u}=t,{element:c,padding:f=0}=Ru(e,t)||{};if(c==null)return{};const d=kS(f),p={x:n,y:o},m=Xv(r),v=Gv(m),h=await l.getDimensions(c),C=m==="y",g=C?"top":"left",y=C?"bottom":"right",_=C?"clientHeight":"clientWidth",b=a.reference[v]+a.reference[m]-p[m]-a.floating[v],w=p[m]-a.reference[m],S=await(l.getOffsetParent==null?void 0:l.getOffsetParent(c));let E=S?S[_]:0;(!E||!await(l.isElement==null?void 0:l.isElement(S)))&&(E=s.floating[_]||a.floating[v]);const $=b/2-w/2,O=E/2-h[v]/2-1,A=Ms(d[g],O),M=Ms(d[y],O),D=A,U=E-h[v]-M,j=E/2-h[v]/2+$,W=yh(D,j,U),L=!u.arrow&&Lu(r)!=null&&j!==W&&a.reference[v]/2-(jj<=0)){var M,D;const j=(((M=a.flip)==null?void 0:M.index)||0)+1,W=E[j];if(W)return{data:{index:j,overflows:A},reset:{placement:W}};let L=(D=A.filter(P=>P.overflows[0]<=0).sort((P,x)=>P.overflows[1]-x.overflows[1])[0])==null?void 0:D.placement;if(!L)switch(m){case"bestFit":{var U;const P=(U=A.filter(x=>{if(S){const I=As(x.placement);return I===y||I==="y"}return!0}).map(x=>[x.placement,x.overflows.filter(I=>I>0).reduce((I,H)=>I+H,0)]).sort((x,I)=>x[1]-I[1])[0])==null?void 0:U[0];P&&(L=P);break}case"initialPlacement":L=s;break}if(r!==L)return{reset:{placement:L}}}return{}}}};async function UD(e,t){const{placement:n,platform:o,elements:r}=e,a=await(o.isRTL==null?void 0:o.isRTL(r.floating)),l=El(n),s=Lu(n),u=As(n)==="y",c=["left","top"].includes(l)?-1:1,f=a&&u?-1:1,d=Ru(t,e);let{mainAxis:p,crossAxis:m,alignmentAxis:v}=typeof d=="number"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...d};return s&&typeof v=="number"&&(m=s==="end"?v*-1:v),u?{x:m*f,y:p*c}:{x:p*c,y:m*f}}const qD=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,o;const{x:r,y:a,placement:l,middlewareData:s}=t,u=await UD(t,e);return l===((n=s.offset)==null?void 0:n.placement)&&(o=s.arrow)!=null&&o.alignmentOffset?{}:{x:r+u.x,y:a+u.y,data:{...u,placement:l}}}}},YD=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:o,placement:r}=t,{mainAxis:a=!0,crossAxis:l=!1,limiter:s={fn:C=>{let{x:g,y}=C;return{x:g,y}}},...u}=Ru(e,t),c={x:n,y:o},f=await Jv(t,u),d=As(El(r)),p=SS(d);let m=c[p],v=c[d];if(a){const C=p==="y"?"top":"left",g=p==="y"?"bottom":"right",y=m+f[C],_=m-f[g];m=yh(y,m,_)}if(l){const C=d==="y"?"top":"left",g=d==="y"?"bottom":"right",y=v+f[C],_=v-f[g];v=yh(y,v,_)}const h=s.fn({...t,[p]:m,[d]:v});return{...h,data:{x:h.x-n,y:h.y-o}}}}};function Qs(e){return ES(e)?(e.nodeName||"").toLowerCase():"#document"}function _o(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function Qr(e){var t;return(t=(ES(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function ES(e){return e instanceof Node||e instanceof _o(e).Node}function nr(e){return e instanceof Element||e instanceof _o(e).Element}function $r(e){return e instanceof HTMLElement||e instanceof _o(e).HTMLElement}function d0(e){return typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof _o(e).ShadowRoot}function xu(e){const{overflow:t,overflowX:n,overflowY:o,display:r}=or(e);return/auto|scroll|overlay|hidden|clip/.test(t+o+n)&&!["inline","contents"].includes(r)}function GD(e){return["table","td","th"].includes(Qs(e))}function gf(e){return[":popover-open",":modal"].some(t=>{try{return e.matches(t)}catch{return!1}})}function Zv(e){const t=Qv(),n=nr(e)?or(e):e;return n.transform!=="none"||n.perspective!=="none"||(n.containerType?n.containerType!=="normal":!1)||!t&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!t&&(n.filter?n.filter!=="none":!1)||["transform","perspective","filter"].some(o=>(n.willChange||"").includes(o))||["paint","layout","strict","content"].some(o=>(n.contain||"").includes(o))}function XD(e){let t=La(e);for(;$r(t)&&!Ps(t);){if(Zv(t))return t;if(gf(t))return null;t=La(t)}return null}function Qv(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function Ps(e){return["html","body","#document"].includes(Qs(e))}function or(e){return _o(e).getComputedStyle(e)}function bf(e){return nr(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function La(e){if(Qs(e)==="html")return e;const t=e.assignedSlot||e.parentNode||d0(e)&&e.host||Qr(e);return d0(t)?t.host:t}function TS(e){const t=La(e);return Ps(t)?e.ownerDocument?e.ownerDocument.body:e.body:$r(t)&&xu(t)?t:TS(t)}function ru(e,t,n){var o;t===void 0&&(t=[]),n===void 0&&(n=!0);const r=TS(e),a=r===((o=e.ownerDocument)==null?void 0:o.body),l=_o(r);if(a){const s=_h(l);return t.concat(l,l.visualViewport||[],xu(r)?r:[],s&&n?ru(s):[])}return t.concat(r,ru(r,[],n))}function _h(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function $S(e){const t=or(e);let n=parseFloat(t.width)||0,o=parseFloat(t.height)||0;const r=$r(e),a=r?e.offsetWidth:n,l=r?e.offsetHeight:o,s=vd(n)!==a||vd(o)!==l;return s&&(n=a,o=l),{width:n,height:o,$:s}}function eg(e){return nr(e)?e:e.contextElement}function fs(e){const t=eg(e);if(!$r(t))return Ra(1);const n=t.getBoundingClientRect(),{width:o,height:r,$:a}=$S(t);let l=(a?vd(n.width):n.width)/o,s=(a?vd(n.height):n.height)/r;return(!l||!Number.isFinite(l))&&(l=1),(!s||!Number.isFinite(s))&&(s=1),{x:l,y:s}}const JD=Ra(0);function OS(e){const t=_o(e);return!Qv()||!t.visualViewport?JD:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function ZD(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==_o(e)?!1:t}function Tl(e,t,n,o){t===void 0&&(t=!1),n===void 0&&(n=!1);const r=e.getBoundingClientRect(),a=eg(e);let l=Ra(1);t&&(o?nr(o)&&(l=fs(o)):l=fs(e));const s=ZD(a,n,o)?OS(a):Ra(0);let u=(r.left+s.x)/l.x,c=(r.top+s.y)/l.y,f=r.width/l.x,d=r.height/l.y;if(a){const p=_o(a),m=o&&nr(o)?_o(o):o;let v=p,h=_h(v);for(;h&&o&&m!==v;){const C=fs(h),g=h.getBoundingClientRect(),y=or(h),_=g.left+(h.clientLeft+parseFloat(y.paddingLeft))*C.x,b=g.top+(h.clientTop+parseFloat(y.paddingTop))*C.y;u*=C.x,c*=C.y,f*=C.x,d*=C.y,u+=_,c+=b,v=_o(h),h=_h(v)}}return bd({width:f,height:d,x:u,y:c})}function QD(e){let{elements:t,rect:n,offsetParent:o,strategy:r}=e;const a=r==="fixed",l=Qr(o),s=t?gf(t.floating):!1;if(o===l||s&&a)return n;let u={scrollLeft:0,scrollTop:0},c=Ra(1);const f=Ra(0),d=$r(o);if((d||!d&&!a)&&((Qs(o)!=="body"||xu(l))&&(u=bf(o)),$r(o))){const p=Tl(o);c=fs(o),f.x=p.x+o.clientLeft,f.y=p.y+o.clientTop}return{width:n.width*c.x,height:n.height*c.y,x:n.x*c.x-u.scrollLeft*c.x+f.x,y:n.y*c.y-u.scrollTop*c.y+f.y}}function e8(e){return Array.from(e.getClientRects())}function NS(e){return Tl(Qr(e)).left+bf(e).scrollLeft}function t8(e){const t=Qr(e),n=bf(e),o=e.ownerDocument.body,r=cl(t.scrollWidth,t.clientWidth,o.scrollWidth,o.clientWidth),a=cl(t.scrollHeight,t.clientHeight,o.scrollHeight,o.clientHeight);let l=-n.scrollLeft+NS(e);const s=-n.scrollTop;return or(o).direction==="rtl"&&(l+=cl(t.clientWidth,o.clientWidth)-r),{width:r,height:a,x:l,y:s}}function n8(e,t){const n=_o(e),o=Qr(e),r=n.visualViewport;let a=o.clientWidth,l=o.clientHeight,s=0,u=0;if(r){a=r.width,l=r.height;const c=Qv();(!c||c&&t==="fixed")&&(s=r.offsetLeft,u=r.offsetTop)}return{width:a,height:l,x:s,y:u}}function o8(e,t){const n=Tl(e,!0,t==="fixed"),o=n.top+e.clientTop,r=n.left+e.clientLeft,a=$r(e)?fs(e):Ra(1),l=e.clientWidth*a.x,s=e.clientHeight*a.y,u=r*a.x,c=o*a.y;return{width:l,height:s,x:u,y:c}}function f0(e,t,n){let o;if(t==="viewport")o=n8(e,n);else if(t==="document")o=t8(Qr(e));else if(nr(t))o=o8(t,n);else{const r=OS(e);o={...t,x:t.x-r.x,y:t.y-r.y}}return bd(o)}function IS(e,t){const n=La(e);return n===t||!nr(n)||Ps(n)?!1:or(n).position==="fixed"||IS(n,t)}function r8(e,t){const n=t.get(e);if(n)return n;let o=ru(e,[],!1).filter(s=>nr(s)&&Qs(s)!=="body"),r=null;const a=or(e).position==="fixed";let l=a?La(e):e;for(;nr(l)&&!Ps(l);){const s=or(l),u=Zv(l);!u&&s.position==="fixed"&&(r=null),(a?!u&&!r:!u&&s.position==="static"&&!!r&&["absolute","fixed"].includes(r.position)||xu(l)&&!u&&IS(e,l))?o=o.filter(f=>f!==l):r=s,l=La(l)}return t.set(e,o),o}function a8(e){let{element:t,boundary:n,rootBoundary:o,strategy:r}=e;const l=[...n==="clippingAncestors"?gf(t)?[]:r8(t,this._c):[].concat(n),o],s=l[0],u=l.reduce((c,f)=>{const d=f0(t,f,r);return c.top=cl(d.top,c.top),c.right=Ms(d.right,c.right),c.bottom=Ms(d.bottom,c.bottom),c.left=cl(d.left,c.left),c},f0(t,s,r));return{width:u.right-u.left,height:u.bottom-u.top,x:u.left,y:u.top}}function l8(e){const{width:t,height:n}=$S(e);return{width:t,height:n}}function s8(e,t,n){const o=$r(t),r=Qr(t),a=n==="fixed",l=Tl(e,!0,a,t);let s={scrollLeft:0,scrollTop:0};const u=Ra(0);if(o||!o&&!a)if((Qs(t)!=="body"||xu(r))&&(s=bf(t)),o){const d=Tl(t,!0,a,t);u.x=d.x+t.clientLeft,u.y=d.y+t.clientTop}else r&&(u.x=NS(r));const c=l.left+s.scrollLeft-u.x,f=l.top+s.scrollTop-u.y;return{x:c,y:f,width:l.width,height:l.height}}function dp(e){return or(e).position==="static"}function p0(e,t){return!$r(e)||or(e).position==="fixed"?null:t?t(e):e.offsetParent}function MS(e,t){const n=_o(e);if(gf(e))return n;if(!$r(e)){let r=La(e);for(;r&&!Ps(r);){if(nr(r)&&!dp(r))return r;r=La(r)}return n}let o=p0(e,t);for(;o&&GD(o)&&dp(o);)o=p0(o,t);return o&&Ps(o)&&dp(o)&&!Zv(o)?n:o||XD(e)||n}const i8=async function(e){const t=this.getOffsetParent||MS,n=this.getDimensions,o=await n(e.floating);return{reference:s8(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function u8(e){return or(e).direction==="rtl"}const c8={convertOffsetParentRelativeRectToViewportRelativeRect:QD,getDocumentElement:Qr,getClippingRect:a8,getOffsetParent:MS,getElementRects:i8,getClientRects:e8,getDimensions:l8,getScale:fs,isElement:nr,isRTL:u8};function d8(e,t){let n=null,o;const r=Qr(e);function a(){var s;clearTimeout(o),(s=n)==null||s.disconnect(),n=null}function l(s,u){s===void 0&&(s=!1),u===void 0&&(u=1),a();const{left:c,top:f,width:d,height:p}=e.getBoundingClientRect();if(s||t(),!d||!p)return;const m=dc(f),v=dc(r.clientWidth-(c+d)),h=dc(r.clientHeight-(f+p)),C=dc(c),y={rootMargin:-m+"px "+-v+"px "+-h+"px "+-C+"px",threshold:cl(0,Ms(1,u))||1};let _=!0;function b(w){const S=w[0].intersectionRatio;if(S!==u){if(!_)return l();S?l(!1,S):o=setTimeout(()=>{l(!1,1e-7)},1e3)}_=!1}try{n=new IntersectionObserver(b,{...y,root:r.ownerDocument})}catch{n=new IntersectionObserver(b,y)}n.observe(e)}return l(!0),a}function f8(e,t,n,o){o===void 0&&(o={});const{ancestorScroll:r=!0,ancestorResize:a=!0,elementResize:l=typeof ResizeObserver=="function",layoutShift:s=typeof IntersectionObserver=="function",animationFrame:u=!1}=o,c=eg(e),f=r||a?[...c?ru(c):[],...ru(t)]:[];f.forEach(g=>{r&&g.addEventListener("scroll",n,{passive:!0}),a&&g.addEventListener("resize",n)});const d=c&&s?d8(c,n):null;let p=-1,m=null;l&&(m=new ResizeObserver(g=>{let[y]=g;y&&y.target===c&&m&&(m.unobserve(t),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var _;(_=m)==null||_.observe(t)})),n()}),c&&!u&&m.observe(c),m.observe(t));let v,h=u?Tl(e):null;u&&C();function C(){const g=Tl(e);h&&(g.x!==h.x||g.y!==h.y||g.width!==h.width||g.height!==h.height)&&n(),h=g,v=requestAnimationFrame(C)}return n(),()=>{var g;f.forEach(y=>{r&&y.removeEventListener("scroll",n),a&&y.removeEventListener("resize",n)}),d==null||d(),(g=m)==null||g.disconnect(),m=null,u&&cancelAnimationFrame(v)}}const p8=Jv,AS=qD,h8=YD,m8=KD,PS=WD,RS=(e,t,n)=>{const o=new Map,r={platform:c8,...n},a={...r.platform,_c:o};return jD(e,t,{...r,platform:a})};Ne({});const v8=e=>{if(!Ct)return;if(!e)return e;const t=lo(e);return t||(xt(e)?t:e)},g8=({middleware:e,placement:t,strategy:n})=>{const o=R(),r=R(),a=R(),l=R(),s=R({}),u={x:a,y:l,placement:t,strategy:n,middlewareData:s},c=async()=>{if(!Ct)return;const f=v8(o),d=lo(r);if(!f||!d)return;const p=await RS(f,d,{placement:i(t),strategy:i(n),middleware:i(e)});Ss(u).forEach(m=>{u[m].value=p[m]})};return at(()=>{Mn(()=>{c()})}),{...u,update:c,referenceRef:o,contentRef:r}},b8=({arrowRef:e,padding:t})=>({name:"arrow",options:{element:e,padding:t},fn(n){const o=i(e);return o?PS({element:o,padding:t}).fn(n):{}}});function y8(e){const t=R();function n(){if(e.value==null)return;const{selectionStart:r,selectionEnd:a,value:l}=e.value;if(r==null||a==null)return;const s=l.slice(0,Math.max(0,r)),u=l.slice(Math.max(0,a));t.value={selectionStart:r,selectionEnd:a,value:l,beforeTxt:s,afterTxt:u}}function o(){if(e.value==null||t.value==null)return;const{value:r}=e.value,{beforeTxt:a,afterTxt:l,selectionStart:s}=t.value;if(a==null||l==null||s==null)return;let u=r.length;if(r.endsWith(l))u=r.length-l.length;else if(r.startsWith(a))u=a.length;else{const c=a[s-1],f=r.indexOf(c,s-1);f!==-1&&(u=f+1)}e.value.setSelectionRange(u,u)}return[n,o]}const w8=(e,t,n)=>Ca(e.subTree).filter(a=>{var l;return Wt(a)&&((l=a.type)==null?void 0:l.name)===t&&!!a.component}).map(a=>a.component.uid).map(a=>n[a]).filter(a=>!!a),tg=(e,t)=>{const n={},o=Ut([]);return{children:o,addChild:l=>{n[l.uid]=l,o.value=w8(e,t,n)},removeChild:l=>{delete n[l],o.value=o.value.filter(s=>s.uid!==l)}}},gn=ir({type:String,values:Ir,required:!1}),LS=Symbol("size"),xS=()=>{const e=De(LS,{});return k(()=>i(e.size)||"")};function yf(e,{afterFocus:t,beforeBlur:n,afterBlur:o}={}){const r=lt(),{emit:a}=r,l=Ut(),s=R(!1),u=d=>{s.value||(s.value=!0,a("focus",d),t==null||t())},c=d=>{var p;Xe(n)&&n(d)||d.relatedTarget&&((p=l.value)!=null&&p.contains(d.relatedTarget))||(s.value=!1,a("blur",d),o==null||o())},f=()=>{var d;(d=e.value)==null||d.focus()};return ve(l,d=>{d&&d.setAttribute("tabindex","-1")}),qt(l,"click",f),{wrapperRef:l,isFocused:s,handleFocus:u,handleBlur:c}}const DS=Symbol("emptyValuesContextKey"),_8=["",void 0,null],C8=void 0,ei=Ne({emptyValues:Array,valueOnClear:{type:[String,Number,Boolean,Function],default:void 0,validator:e=>Xe(e)?!e():!e}}),wf=(e,t)=>{const n=lt()?De(DS,R({})):R({}),o=k(()=>e.emptyValues||n.value.emptyValues||_8),r=k(()=>Xe(e.valueOnClear)?e.valueOnClear():e.valueOnClear!==void 0?e.valueOnClear:Xe(n.value.valueOnClear)?n.value.valueOnClear():n.value.valueOnClear!==void 0?n.value.valueOnClear:t!==void 0?t:C8),a=l=>o.value.includes(l);return o.value.includes(r.value),{emptyValues:o,valueOnClear:r,isEmptyValue:a}},S8=Ne({ariaLabel:String,ariaOrientation:{type:String,values:["horizontal","vertical","undefined"]},ariaControls:String}),An=e=>gr(S8,e),FS=Symbol(),yd=R();function _f(e,t=void 0){const n=lt()?De(FS,yd):yd;return e?k(()=>{var o,r;return(r=(o=n.value)==null?void 0:o[e])!=null?r:t}):n}function Cf(e,t){const n=_f(),o=Se(e,k(()=>{var s;return((s=n.value)==null?void 0:s.namespace)||Ri})),r=$t(k(()=>{var s;return(s=n.value)==null?void 0:s.locale})),a=Zs(k(()=>{var s;return((s=n.value)==null?void 0:s.zIndex)||_S})),l=k(()=>{var s;return i(t)||((s=n.value)==null?void 0:s.size)||""});return ng(k(()=>i(n)||{})),{ns:o,locale:r,zIndex:a,size:l}}const ng=(e,t,n=!1)=>{var o;const r=!!lt(),a=r?_f():void 0,l=(o=t==null?void 0:t.provide)!=null?o:r?yt:void 0;if(!l)return;const s=k(()=>{const u=i(e);return a!=null&&a.value?k8(a.value,u):u});return l(FS,s),l(rS,k(()=>s.value.locale)),l(aS,k(()=>s.value.namespace)),l(CS,k(()=>s.value.zIndex)),l(LS,{size:k(()=>s.value.size||"")}),l(DS,k(()=>({emptyValues:s.value.emptyValues,valueOnClear:s.value.valueOnClear}))),(n||!yd.value)&&(yd.value=s.value),s},k8=(e,t)=>{const n=[...new Set([...Ss(e),...Ss(t)])],o={};for(const r of n)o[r]=t[r]!==void 0?t[r]:e[r];return o},E8=Ne({a11y:{type:Boolean,default:!0},locale:{type:Q(Object)},size:gn,button:{type:Q(Object)},experimentalFeatures:{type:Q(Object)},keyboardNavigation:{type:Boolean,default:!0},message:{type:Q(Object)},zIndex:Number,namespace:{type:String,default:"el"},...ei}),Ch={},T8=Y({name:"ElConfigProvider",props:E8,setup(e,{slots:t}){ve(()=>e.message,o=>{Object.assign(Ch,o??{})},{immediate:!0,deep:!0});const n=ng(e);return()=>ie(t,"default",{config:n==null?void 0:n.value})}}),$8=ut(T8),O8="2.7.8",N8=(e=[])=>({version:O8,install:(n,o)=>{n[Uy]||(n[Uy]=!0,e.forEach(r=>n.use(r)),o&&ng(o,n,!0))}}),I8=Ne({zIndex:{type:Q([Number,String]),default:100},target:{type:String,default:""},offset:{type:Number,default:0},position:{type:String,values:["top","bottom"],default:"top"}}),M8={scroll:({scrollTop:e,fixed:t})=>Je(e)&&dn(t),[Yt]:e=>dn(e)};var Ie=(e,t)=>{const n=e.__vccOpts||e;for(const[o,r]of t)n[o]=r;return n};const BS="ElAffix",A8=Y({name:BS}),P8=Y({...A8,props:I8,emits:M8,setup(e,{expose:t,emit:n}){const o=e,r=Se("affix"),a=Ut(),l=Ut(),s=Ut(),{height:u}=bM(),{height:c,width:f,top:d,bottom:p,update:m}=ly(l,{windowScroll:!1}),v=ly(a),h=R(!1),C=R(0),g=R(0),y=k(()=>({height:h.value?`${c.value}px`:"",width:h.value?`${f.value}px`:""})),_=k(()=>{if(!h.value)return{};const S=o.offset?rn(o.offset):0;return{height:`${c.value}px`,width:`${f.value}px`,top:o.position==="top"?S:"",bottom:o.position==="bottom"?S:"",transform:g.value?`translateY(${g.value}px)`:"",zIndex:o.zIndex}}),b=()=>{if(s.value)if(C.value=s.value instanceof Window?document.documentElement.scrollTop:s.value.scrollTop||0,o.position==="top")if(o.target){const S=v.bottom.value-o.offset-c.value;h.value=o.offset>d.value&&v.bottom.value>0,g.value=S<0?S:0}else h.value=o.offset>d.value;else if(o.target){const S=u.value-v.top.value-o.offset-c.value;h.value=u.value-o.offsetv.top.value,g.value=S<0?-S:0}else h.value=u.value-o.offset{m(),n("scroll",{scrollTop:C.value,fixed:h.value})};return ve(h,S=>n("change",S)),at(()=>{var S;o.target?(a.value=(S=document.querySelector(o.target))!=null?S:void 0,a.value||vn(BS,`Target does not exist: ${o.target}`)):a.value=document.documentElement,s.value=Ov(l.value,!0),m()}),qt(s,"scroll",w),Mn(b),t({update:b,updateRoot:m}),(S,E)=>(T(),V("div",{ref_key:"root",ref:l,class:N(i(r).b()),style:je(i(y))},[F("div",{class:N({[i(r).m("fixed")]:h.value}),style:je(i(_))},[ie(S.$slots,"default")],6)],6))}});var R8=Ie(P8,[["__file","affix.vue"]]);const L8=ut(R8),x8=Ne({size:{type:Q([Number,String])},color:{type:String}}),D8=Y({name:"ElIcon",inheritAttrs:!1}),F8=Y({...D8,props:x8,setup(e){const t=e,n=Se("icon"),o=k(()=>{const{size:r,color:a}=t;return!r&&!a?{}:{fontSize:pn(r)?void 0:rn(r),"--color":a}});return(r,a)=>(T(),V("i",mt({class:i(n).b(),style:i(o)},r.$attrs),[ie(r.$slots,"default")],16))}});var B8=Ie(F8,[["__file","icon.vue"]]);const ze=ut(B8),V8=["light","dark"],H8=Ne({title:{type:String,default:""},description:{type:String,default:""},type:{type:String,values:Ss(Pa),default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,values:V8,default:"light"}}),z8={close:e=>e instanceof MouseEvent},j8=Y({name:"ElAlert"}),W8=Y({...j8,props:H8,emits:z8,setup(e,{emit:t}){const n=e,{Close:o}=Pv,r=Sn(),a=Se("alert"),l=R(!0),s=k(()=>Pa[n.type]),u=k(()=>[a.e("icon"),{[a.is("big")]:!!n.description||!!r.default}]),c=k(()=>({"with-description":n.description||r.default})),f=d=>{l.value=!1,t("close",d)};return(d,p)=>(T(),re(fn,{name:i(a).b("fade"),persisted:""},{default:X(()=>[tt(F("div",{class:N([i(a).b(),i(a).m(d.type),i(a).is("center",d.center),i(a).is(d.effect)]),role:"alert"},[d.showIcon&&i(s)?(T(),re(i(ze),{key:0,class:N(i(u))},{default:X(()=>[(T(),re(pt(i(s))))]),_:1},8,["class"])):te("v-if",!0),F("div",{class:N(i(a).e("content"))},[d.title||d.$slots.title?(T(),V("span",{key:0,class:N([i(a).e("title"),i(c)])},[ie(d.$slots,"title",{},()=>[Ge(le(d.title),1)])],2)):te("v-if",!0),d.$slots.default||d.description?(T(),V("p",{key:1,class:N(i(a).e("description"))},[ie(d.$slots,"default",{},()=>[Ge(le(d.description),1)])],2)):te("v-if",!0),d.closable?(T(),V(Ve,{key:2},[d.closeText?(T(),V("div",{key:0,class:N([i(a).e("close-btn"),i(a).is("customed")]),onClick:f},le(d.closeText),3)):(T(),re(i(ze),{key:1,class:N(i(a).e("close-btn")),onClick:f},{default:X(()=>[K(i(o))]),_:1},8,["class"]))],64)):te("v-if",!0)],2)],2),[[kt,l.value]])]),_:3},8,["name"]))}});var K8=Ie(W8,[["__file","alert.vue"]]);const U8=ut(K8),Fl=Symbol("formContextKey"),Or=Symbol("formItemContextKey"),hn=(e,t={})=>{const n=R(void 0),o=t.prop?n:sS("size"),r=t.global?n:xS(),a=t.form?{size:void 0}:De(Fl,void 0),l=t.formItem?{size:void 0}:De(Or,void 0);return k(()=>o.value||i(e)||(l==null?void 0:l.size)||(a==null?void 0:a.size)||r.value||"")},to=e=>{const t=sS("disabled"),n=De(Fl,void 0);return k(()=>t.value||i(e)||(n==null?void 0:n.disabled)||!1)},qn=()=>{const e=De(Fl,void 0),t=De(Or,void 0);return{form:e,formItem:t}},cr=(e,{formItemContext:t,disableIdGeneration:n,disableIdManagement:o})=>{n||(n=R(!1)),o||(o=R(!1));const r=R();let a;const l=k(()=>{var s;return!!(!(e.label||e.ariaLabel)&&t&&t.inputIds&&((s=t.inputIds)==null?void 0:s.length)<=1)});return at(()=>{a=ve([Lt(e,"id"),n],([s,u])=>{const c=s??(u?void 0:xn().value);c!==r.value&&(t!=null&&t.removeInputId&&(r.value&&t.removeInputId(r.value),!(o!=null&&o.value)&&!u&&c&&t.addInputId(c)),r.value=c)},{immediate:!0})}),lr(()=>{a&&a(),t!=null&&t.removeInputId&&r.value&&t.removeInputId(r.value)}),{isLabeledByFormItem:l,inputId:r}},q8=Ne({size:{type:String,values:Ir},disabled:Boolean}),Y8=Ne({...q8,model:Object,rules:{type:Q(Object)},labelPosition:{type:String,values:["left","right","top"],default:"right"},requireAsteriskPosition:{type:String,values:["left","right"],default:"left"},labelWidth:{type:[String,Number],default:""},labelSuffix:{type:String,default:""},inline:Boolean,inlineMessage:Boolean,statusIcon:Boolean,showMessage:{type:Boolean,default:!0},validateOnRuleChange:{type:Boolean,default:!0},hideRequiredAsterisk:Boolean,scrollToError:Boolean,scrollIntoViewOptions:{type:[Object,Boolean]}}),G8={validate:(e,t,n)=>(Pe(e)||nt(e))&&dn(t)&&nt(n)};function X8(){const e=R([]),t=k(()=>{if(!e.value.length)return"0";const a=Math.max(...e.value);return a?`${a}px`:""});function n(a){const l=e.value.indexOf(a);return l===-1&&t.value,l}function o(a,l){if(a&&l){const s=n(l);e.value.splice(s,1,a)}else a&&e.value.push(a)}function r(a){const l=n(a);l>-1&&e.value.splice(l,1)}return{autoLabelWidth:t,registerLabelWidth:o,deregisterLabelWidth:r}}const fc=(e,t)=>{const n=Ia(t);return n.length>0?e.filter(o=>o.prop&&n.includes(o.prop)):e},J8="ElForm",Z8=Y({name:J8}),Q8=Y({...Z8,props:Y8,emits:G8,setup(e,{expose:t,emit:n}){const o=e,r=[],a=hn(),l=Se("form"),s=k(()=>{const{labelPosition:_,inline:b}=o;return[l.b(),l.m(a.value||"default"),{[l.m(`label-${_}`)]:_,[l.m("inline")]:b}]}),u=_=>r.find(b=>b.prop===_),c=_=>{r.push(_)},f=_=>{_.prop&&r.splice(r.indexOf(_),1)},d=(_=[])=>{o.model&&fc(r,_).forEach(b=>b.resetField())},p=(_=[])=>{fc(r,_).forEach(b=>b.clearValidate())},m=k(()=>!!o.model),v=_=>{if(r.length===0)return[];const b=fc(r,_);return b.length?b:[]},h=async _=>g(void 0,_),C=async(_=[])=>{if(!m.value)return!1;const b=v(_);if(b.length===0)return!0;let w={};for(const S of b)try{await S.validate("")}catch(E){w={...w,...E}}return Object.keys(w).length===0?!0:Promise.reject(w)},g=async(_=[],b)=>{const w=!Xe(b);try{const S=await C(_);return S===!0&&await(b==null?void 0:b(S)),S}catch(S){if(S instanceof Error)throw S;const E=S;return o.scrollToError&&y(Object.keys(E)[0]),await(b==null?void 0:b(!1,E)),w&&Promise.reject(E)}},y=_=>{var b;const w=fc(r,_)[0];w&&((b=w.$el)==null||b.scrollIntoView(o.scrollIntoViewOptions))};return ve(()=>o.rules,()=>{o.validateOnRuleChange&&h().catch(_=>void 0)},{deep:!0}),yt(Fl,Et({...Cn(o),emit:n,resetFields:d,clearValidate:p,validateField:g,getField:u,addField:c,removeField:f,...X8()})),t({validate:h,validateField:g,resetFields:d,clearValidate:p,scrollToField:y,fields:r}),(_,b)=>(T(),V("form",{class:N(i(s))},[ie(_.$slots,"default")],2))}});var eF=Ie(Q8,[["__file","form.vue"]]);function Za(){return Za=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Pc(e,t,n){return nF()?Pc=Reflect.construct.bind():Pc=function(r,a,l){var s=[null];s.push.apply(s,a);var u=Function.bind.apply(r,s),c=new u;return l&&au(c,l.prototype),c},Pc.apply(null,arguments)}function oF(e){return Function.toString.call(e).indexOf("[native code]")!==-1}function kh(e){var t=typeof Map=="function"?new Map:void 0;return kh=function(o){if(o===null||!oF(o))return o;if(typeof o!="function")throw new TypeError("Super expression must either be null or a function");if(typeof t<"u"){if(t.has(o))return t.get(o);t.set(o,r)}function r(){return Pc(o,arguments,Sh(this).constructor)}return r.prototype=Object.create(o.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),au(r,o)},kh(e)}var rF=/%[sdj%]/g,aF=function(){};function Eh(e){if(!e||!e.length)return null;var t={};return e.forEach(function(n){var o=n.field;t[o]=t[o]||[],t[o].push(n)}),t}function vo(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o=a)return s;switch(s){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch{return"[Circular]"}break;default:return s}});return l}return e}function lF(e){return e==="string"||e==="url"||e==="hex"||e==="email"||e==="date"||e==="pattern"}function On(e,t){return!!(e==null||t==="array"&&Array.isArray(e)&&!e.length||lF(t)&&typeof e=="string"&&!e)}function sF(e,t,n){var o=[],r=0,a=e.length;function l(s){o.push.apply(o,s||[]),r++,r===a&&n(o)}e.forEach(function(s){t(s,l)})}function h0(e,t,n){var o=0,r=e.length;function a(l){if(l&&l.length){n(l);return}var s=o;o=o+1,s()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/,hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},ki={integer:function(t){return ki.number(t)&&parseInt(t,10)===t},float:function(t){return ki.number(t)&&!ki.integer(t)},array:function(t){return Array.isArray(t)},regexp:function(t){if(t instanceof RegExp)return!0;try{return!!new RegExp(t)}catch{return!1}},date:function(t){return typeof t.getTime=="function"&&typeof t.getMonth=="function"&&typeof t.getYear=="function"&&!isNaN(t.getTime())},number:function(t){return isNaN(t)?!1:typeof t=="number"},object:function(t){return typeof t=="object"&&!ki.array(t)},method:function(t){return typeof t=="function"},email:function(t){return typeof t=="string"&&t.length<=320&&!!t.match(b0.email)},url:function(t){return typeof t=="string"&&t.length<=2048&&!!t.match(pF())},hex:function(t){return typeof t=="string"&&!!t.match(b0.hex)}},hF=function(t,n,o,r,a){if(t.required&&n===void 0){VS(t,n,o,r,a);return}var l=["integer","float","array","regexp","object","method","email","number","date","url","hex"],s=t.type;l.indexOf(s)>-1?ki[s](n)||r.push(vo(a.messages.types[s],t.fullField,t.type)):s&&typeof n!==t.type&&r.push(vo(a.messages.types[s],t.fullField,t.type))},mF=function(t,n,o,r,a){var l=typeof t.len=="number",s=typeof t.min=="number",u=typeof t.max=="number",c=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=n,d=null,p=typeof n=="number",m=typeof n=="string",v=Array.isArray(n);if(p?d="number":m?d="string":v&&(d="array"),!d)return!1;v&&(f=n.length),m&&(f=n.replace(c,"_").length),l?f!==t.len&&r.push(vo(a.messages[d].len,t.fullField,t.len)):s&&!u&&ft.max?r.push(vo(a.messages[d].max,t.fullField,t.max)):s&&u&&(ft.max)&&r.push(vo(a.messages[d].range,t.fullField,t.min,t.max))},Kl="enum",vF=function(t,n,o,r,a){t[Kl]=Array.isArray(t[Kl])?t[Kl]:[],t[Kl].indexOf(n)===-1&&r.push(vo(a.messages[Kl],t.fullField,t[Kl].join(", ")))},gF=function(t,n,o,r,a){if(t.pattern){if(t.pattern instanceof RegExp)t.pattern.lastIndex=0,t.pattern.test(n)||r.push(vo(a.messages.pattern.mismatch,t.fullField,n,t.pattern));else if(typeof t.pattern=="string"){var l=new RegExp(t.pattern);l.test(n)||r.push(vo(a.messages.pattern.mismatch,t.fullField,n,t.pattern))}}},Vt={required:VS,whitespace:fF,type:hF,range:mF,enum:vF,pattern:gF},bF=function(t,n,o,r,a){var l=[],s=t.required||!t.required&&r.hasOwnProperty(t.field);if(s){if(On(n,"string")&&!t.required)return o();Vt.required(t,n,r,l,a,"string"),On(n,"string")||(Vt.type(t,n,r,l,a),Vt.range(t,n,r,l,a),Vt.pattern(t,n,r,l,a),t.whitespace===!0&&Vt.whitespace(t,n,r,l,a))}o(l)},yF=function(t,n,o,r,a){var l=[],s=t.required||!t.required&&r.hasOwnProperty(t.field);if(s){if(On(n)&&!t.required)return o();Vt.required(t,n,r,l,a),n!==void 0&&Vt.type(t,n,r,l,a)}o(l)},wF=function(t,n,o,r,a){var l=[],s=t.required||!t.required&&r.hasOwnProperty(t.field);if(s){if(n===""&&(n=void 0),On(n)&&!t.required)return o();Vt.required(t,n,r,l,a),n!==void 0&&(Vt.type(t,n,r,l,a),Vt.range(t,n,r,l,a))}o(l)},_F=function(t,n,o,r,a){var l=[],s=t.required||!t.required&&r.hasOwnProperty(t.field);if(s){if(On(n)&&!t.required)return o();Vt.required(t,n,r,l,a),n!==void 0&&Vt.type(t,n,r,l,a)}o(l)},CF=function(t,n,o,r,a){var l=[],s=t.required||!t.required&&r.hasOwnProperty(t.field);if(s){if(On(n)&&!t.required)return o();Vt.required(t,n,r,l,a),On(n)||Vt.type(t,n,r,l,a)}o(l)},SF=function(t,n,o,r,a){var l=[],s=t.required||!t.required&&r.hasOwnProperty(t.field);if(s){if(On(n)&&!t.required)return o();Vt.required(t,n,r,l,a),n!==void 0&&(Vt.type(t,n,r,l,a),Vt.range(t,n,r,l,a))}o(l)},kF=function(t,n,o,r,a){var l=[],s=t.required||!t.required&&r.hasOwnProperty(t.field);if(s){if(On(n)&&!t.required)return o();Vt.required(t,n,r,l,a),n!==void 0&&(Vt.type(t,n,r,l,a),Vt.range(t,n,r,l,a))}o(l)},EF=function(t,n,o,r,a){var l=[],s=t.required||!t.required&&r.hasOwnProperty(t.field);if(s){if(n==null&&!t.required)return o();Vt.required(t,n,r,l,a,"array"),n!=null&&(Vt.type(t,n,r,l,a),Vt.range(t,n,r,l,a))}o(l)},TF=function(t,n,o,r,a){var l=[],s=t.required||!t.required&&r.hasOwnProperty(t.field);if(s){if(On(n)&&!t.required)return o();Vt.required(t,n,r,l,a),n!==void 0&&Vt.type(t,n,r,l,a)}o(l)},$F="enum",OF=function(t,n,o,r,a){var l=[],s=t.required||!t.required&&r.hasOwnProperty(t.field);if(s){if(On(n)&&!t.required)return o();Vt.required(t,n,r,l,a),n!==void 0&&Vt[$F](t,n,r,l,a)}o(l)},NF=function(t,n,o,r,a){var l=[],s=t.required||!t.required&&r.hasOwnProperty(t.field);if(s){if(On(n,"string")&&!t.required)return o();Vt.required(t,n,r,l,a),On(n,"string")||Vt.pattern(t,n,r,l,a)}o(l)},IF=function(t,n,o,r,a){var l=[],s=t.required||!t.required&&r.hasOwnProperty(t.field);if(s){if(On(n,"date")&&!t.required)return o();if(Vt.required(t,n,r,l,a),!On(n,"date")){var u;n instanceof Date?u=n:u=new Date(n),Vt.type(t,u,r,l,a),u&&Vt.range(t,u.getTime(),r,l,a)}}o(l)},MF=function(t,n,o,r,a){var l=[],s=Array.isArray(n)?"array":typeof n;Vt.required(t,n,r,l,a,s),o(l)},fp=function(t,n,o,r,a){var l=t.type,s=[],u=t.required||!t.required&&r.hasOwnProperty(t.field);if(u){if(On(n,l)&&!t.required)return o();Vt.required(t,n,r,s,a,l),On(n,l)||Vt.type(t,n,r,s,a)}o(s)},AF=function(t,n,o,r,a){var l=[],s=t.required||!t.required&&r.hasOwnProperty(t.field);if(s){if(On(n)&&!t.required)return o();Vt.required(t,n,r,l,a)}o(l)},Di={string:bF,method:yF,number:wF,boolean:_F,regexp:CF,integer:SF,float:kF,array:EF,object:TF,enum:OF,pattern:NF,date:IF,url:fp,hex:fp,email:fp,required:MF,any:AF};function Th(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var t=JSON.parse(JSON.stringify(this));return t.clone=this.clone,t}}}var $h=Th(),Du=function(){function e(n){this.rules=null,this._messages=$h,this.define(n)}var t=e.prototype;return t.define=function(o){var r=this;if(!o)throw new Error("Cannot configure a schema with no rules");if(typeof o!="object"||Array.isArray(o))throw new Error("Rules must be an object");this.rules={},Object.keys(o).forEach(function(a){var l=o[a];r.rules[a]=Array.isArray(l)?l:[l]})},t.messages=function(o){return o&&(this._messages=g0(Th(),o)),this._messages},t.validate=function(o,r,a){var l=this;r===void 0&&(r={}),a===void 0&&(a=function(){});var s=o,u=r,c=a;if(typeof u=="function"&&(c=u,u={}),!this.rules||Object.keys(this.rules).length===0)return c&&c(null,s),Promise.resolve(s);function f(h){var C=[],g={};function y(b){if(Array.isArray(b)){var w;C=(w=C).concat.apply(w,b)}else C.push(b)}for(var _=0;_");const r=Se("form"),a=R(),l=R(0),s=()=>{var f;if((f=a.value)!=null&&f.firstElementChild){const d=window.getComputedStyle(a.value.firstElementChild).width;return Math.ceil(Number.parseFloat(d))}else return 0},u=(f="update")=>{We(()=>{t.default&&e.isAutoWidth&&(f==="update"?l.value=s():f==="remove"&&(n==null||n.deregisterLabelWidth(l.value)))})},c=()=>u("update");return at(()=>{c()}),zt(()=>{u("remove")}),ar(()=>c()),ve(l,(f,d)=>{e.updateAll&&(n==null||n.registerLabelWidth(f,d))}),Qt(k(()=>{var f,d;return(d=(f=a.value)==null?void 0:f.firstElementChild)!=null?d:null}),c),()=>{var f,d;if(!t)return null;const{isAutoWidth:p}=e;if(p){const m=n==null?void 0:n.autoLabelWidth,v=o==null?void 0:o.hasLabel,h={};if(v&&m&&m!=="auto"){const C=Math.max(0,Number.parseInt(m,10)-l.value),y=(o.labelPosition||n.labelPosition)==="left"?"marginRight":"marginLeft";C&&(h[y]=`${C}px`)}return K("div",{ref:a,class:[r.be("item","label-wrap")],style:h},[(f=t.default)==null?void 0:f.call(t)])}else return K(Ve,{ref:a},[(d=t.default)==null?void 0:d.call(t)])}}});const xF=["role","aria-labelledby"],DF=Y({name:"ElFormItem"}),FF=Y({...DF,props:RF,setup(e,{expose:t}){const n=e,o=Sn(),r=De(Fl,void 0),a=De(Or,void 0),l=hn(void 0,{formItem:!1}),s=Se("form-item"),u=xn().value,c=R([]),f=R(""),d=eM(f,100),p=R(""),m=R();let v,h=!1;const C=k(()=>n.labelPosition||(r==null?void 0:r.labelPosition)),g=k(()=>{if(C.value==="top")return{};const ae=rn(n.labelWidth||(r==null?void 0:r.labelWidth)||"");return ae?{width:ae}:{}}),y=k(()=>{if(C.value==="top"||r!=null&&r.inline)return{};if(!n.label&&!n.labelWidth&&A)return{};const ae=rn(n.labelWidth||(r==null?void 0:r.labelWidth)||"");return!n.label&&!o.label?{marginLeft:ae}:{}}),_=k(()=>[s.b(),s.m(l.value),s.is("error",f.value==="error"),s.is("validating",f.value==="validating"),s.is("success",f.value==="success"),s.is("required",W.value||n.required),s.is("no-asterisk",r==null?void 0:r.hideRequiredAsterisk),(r==null?void 0:r.requireAsteriskPosition)==="right"?"asterisk-right":"asterisk-left",{[s.m("feedback")]:r==null?void 0:r.statusIcon,[s.m(`label-${C.value}`)]:C.value}]),b=k(()=>dn(n.inlineMessage)?n.inlineMessage:(r==null?void 0:r.inlineMessage)||!1),w=k(()=>[s.e("error"),{[s.em("error","inline")]:b.value}]),S=k(()=>n.prop?nt(n.prop)?n.prop:n.prop.join("."):""),E=k(()=>!!(n.label||o.label)),$=k(()=>n.for||(c.value.length===1?c.value[0]:void 0)),O=k(()=>!$.value&&E.value),A=!!a,M=k(()=>{const ae=r==null?void 0:r.model;if(!(!ae||!n.prop))return Mc(ae,n.prop).value}),D=k(()=>{const{required:ae}=n,Oe=[];n.rules&&Oe.push(...Ia(n.rules));const we=r==null?void 0:r.rules;if(we&&n.prop){const ge=Mc(we,n.prop).value;ge&&Oe.push(...Ia(ge))}if(ae!==void 0){const ge=Oe.map((q,B)=>[q,B]).filter(([q])=>Object.keys(q).includes("required"));if(ge.length>0)for(const[q,B]of ge)q.required!==ae&&(Oe[B]={...q,required:ae});else Oe.push({required:ae})}return Oe}),U=k(()=>D.value.length>0),j=ae=>D.value.filter(we=>!we.trigger||!ae?!0:Array.isArray(we.trigger)?we.trigger.includes(ae):we.trigger===ae).map(({trigger:we,...ge})=>ge),W=k(()=>D.value.some(ae=>ae.required)),L=k(()=>{var ae;return d.value==="error"&&n.showMessage&&((ae=r==null?void 0:r.showMessage)!=null?ae:!0)}),P=k(()=>`${n.label||""}${(r==null?void 0:r.labelSuffix)||""}`),x=ae=>{f.value=ae},I=ae=>{var Oe,we;const{errors:ge,fields:q}=ae;(!ge||!q)&&console.error(ae),x("error"),p.value=ge?(we=(Oe=ge==null?void 0:ge[0])==null?void 0:Oe.message)!=null?we:`${n.prop} is required`:"",r==null||r.emit("validate",n.prop,!1,p.value)},H=()=>{x("success"),r==null||r.emit("validate",n.prop,!0,"")},G=async ae=>{const Oe=S.value;return new Du({[Oe]:ae}).validate({[Oe]:M.value},{firstFields:!0}).then(()=>(H(),!0)).catch(ge=>(I(ge),Promise.reject(ge)))},J=async(ae,Oe)=>{if(h||!n.prop)return!1;const we=Xe(Oe);if(!U.value)return Oe==null||Oe(!1),!1;const ge=j(ae);return ge.length===0?(Oe==null||Oe(!0),!0):(x("validating"),G(ge).then(()=>(Oe==null||Oe(!0),!0)).catch(q=>{const{fields:B}=q;return Oe==null||Oe(!1,B),we?!1:Promise.reject(B)}))},ee=()=>{x(""),p.value="",h=!1},fe=async()=>{const ae=r==null?void 0:r.model;if(!ae||!n.prop)return;const Oe=Mc(ae,n.prop);h=!0,Oe.value=Fy(v),await We(),ee(),h=!1},Te=ae=>{c.value.includes(ae)||c.value.push(ae)},oe=ae=>{c.value=c.value.filter(Oe=>Oe!==ae)};ve(()=>n.error,ae=>{p.value=ae||"",x(ae?"error":"")},{immediate:!0}),ve(()=>n.validateStatus,ae=>x(ae||""));const ke=Et({...Cn(n),$el:m,size:l,validateState:f,labelId:u,inputIds:c,isGroup:O,hasLabel:E,fieldValue:M,addInputId:Te,removeInputId:oe,resetField:fe,clearValidate:ee,validate:J});return yt(Or,ke),at(()=>{n.prop&&(r==null||r.addField(ke),v=Fy(M.value))}),zt(()=>{r==null||r.removeField(ke)}),t({size:l,validateMessage:p,validateState:f,validate:J,clearValidate:ee,resetField:fe}),(ae,Oe)=>{var we;return T(),V("div",{ref_key:"formItemRef",ref:m,class:N(i(_)),role:i(O)?"group":void 0,"aria-labelledby":i(O)?i(u):void 0},[K(i(LF),{"is-auto-width":i(g).width==="auto","update-all":((we=i(r))==null?void 0:we.labelWidth)==="auto"},{default:X(()=>[i(E)?(T(),re(pt(i($)?"label":"div"),{key:0,id:i(u),for:i($),class:N(i(s).e("label")),style:je(i(g))},{default:X(()=>[ie(ae.$slots,"label",{label:i(P)},()=>[Ge(le(i(P)),1)])]),_:3},8,["id","for","class","style"])):te("v-if",!0)]),_:3},8,["is-auto-width","update-all"]),F("div",{class:N(i(s).e("content")),style:je(i(y))},[ie(ae.$slots,"default"),K(ku,{name:`${i(s).namespace.value}-zoom-in-top`},{default:X(()=>[i(L)?ie(ae.$slots,"error",{key:0,error:p.value},()=>[F("div",{class:N(i(w))},le(p.value),3)]):te("v-if",!0)]),_:3},8,["name"])],6)],10,xF)}}});var HS=Ie(FF,[["__file","form-item.vue"]]);const zS=ut(eF,{FormItem:HS}),BF=tn(HS);let Uo;const VF=` + height:0 !important; + visibility:hidden !important; + ${nC()?"":"overflow:hidden !important;"} + position:absolute !important; + z-index:-1000 !important; + top:0 !important; + right:0 !important; +`,HF=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function zF(e){const t=window.getComputedStyle(e),n=t.getPropertyValue("box-sizing"),o=Number.parseFloat(t.getPropertyValue("padding-bottom"))+Number.parseFloat(t.getPropertyValue("padding-top")),r=Number.parseFloat(t.getPropertyValue("border-bottom-width"))+Number.parseFloat(t.getPropertyValue("border-top-width"));return{contextStyle:HF.map(l=>`${l}:${t.getPropertyValue(l)}`).join(";"),paddingSize:o,borderSize:r,boxSizing:n}}function w0(e,t=1,n){var o;Uo||(Uo=document.createElement("textarea"),document.body.appendChild(Uo));const{paddingSize:r,borderSize:a,boxSizing:l,contextStyle:s}=zF(e);Uo.setAttribute("style",`${s};${VF}`),Uo.value=e.value||e.placeholder||"";let u=Uo.scrollHeight;const c={};l==="border-box"?u=u+a:l==="content-box"&&(u=u-r),Uo.value="";const f=Uo.scrollHeight-r;if(Je(t)){let d=f*t;l==="border-box"&&(d=d+r+a),u=Math.max(d,u),c.minHeight=`${d}px`}if(Je(n)){let d=f*n;l==="border-box"&&(d=d+r+a),u=Math.min(d,u)}return c.height=`${u}px`,(o=Uo.parentNode)==null||o.removeChild(Uo),Uo=void 0,c}const jF=Ne({id:{type:String,default:void 0},size:gn,disabled:Boolean,modelValue:{type:Q([String,Number,Object]),default:""},maxlength:{type:[String,Number]},minlength:{type:[String,Number]},type:{type:String,default:"text"},resize:{type:String,values:["none","both","horizontal","vertical"]},autosize:{type:Q([Boolean,Object]),default:!1},autocomplete:{type:String,default:"off"},formatter:{type:Function},parser:{type:Function},placeholder:{type:String},form:{type:String},readonly:Boolean,clearable:Boolean,showPassword:Boolean,showWordLimit:Boolean,suffixIcon:{type:Dt},prefixIcon:{type:Dt},containerRole:{type:String,default:void 0},label:{type:String,default:void 0},tabindex:{type:[String,Number],default:0},validateEvent:{type:Boolean,default:!0},inputStyle:{type:Q([Object,Array,String]),default:()=>en({})},autofocus:Boolean,rows:{type:Number,default:2},...An(["ariaLabel"])}),WF={[ft]:e=>nt(e),input:e=>nt(e),change:e=>nt(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,mouseleave:e=>e instanceof MouseEvent,mouseenter:e=>e instanceof MouseEvent,keydown:e=>e instanceof Event,compositionstart:e=>e instanceof CompositionEvent,compositionupdate:e=>e instanceof CompositionEvent,compositionend:e=>e instanceof CompositionEvent},KF=["role"],UF=["id","minlength","maxlength","type","disabled","readonly","autocomplete","tabindex","aria-label","placeholder","form","autofocus"],qF=["id","minlength","maxlength","tabindex","disabled","readonly","autocomplete","aria-label","placeholder","form","autofocus","rows"],YF=Y({name:"ElInput",inheritAttrs:!1}),GF=Y({...YF,props:jF,emits:WF,setup(e,{expose:t,emit:n}){const o=e,r=xa(),a=Sn(),l=k(()=>{const he={};return o.containerRole==="combobox"&&(he["aria-haspopup"]=r["aria-haspopup"],he["aria-owns"]=r["aria-owns"],he["aria-expanded"]=r["aria-expanded"]),he}),s=k(()=>[o.type==="textarea"?C.b():h.b(),h.m(m.value),h.is("disabled",v.value),h.is("exceed",fe.value),{[h.b("group")]:a.prepend||a.append,[h.m("prefix")]:a.prefix||o.prefixIcon,[h.m("suffix")]:a.suffix||o.suffixIcon||o.clearable||o.showPassword,[h.bm("suffix","password-clear")]:H.value&&G.value,[h.b("hidden")]:o.type==="hidden"},r.class]),u=k(()=>[h.e("wrapper"),h.is("focus",A.value)]),c=xv({excludeKeys:k(()=>Object.keys(l.value))}),{form:f,formItem:d}=qn(),{inputId:p}=cr(o,{formItemContext:d}),m=hn(),v=to(),h=Se("input"),C=Se("textarea"),g=Ut(),y=Ut(),_=R(!1),b=R(!1),w=R(!1),S=R(),E=Ut(o.inputStyle),$=k(()=>g.value||y.value),{wrapperRef:O,isFocused:A,handleFocus:M,handleBlur:D}=yf($,{afterBlur(){var he;o.validateEvent&&((he=d==null?void 0:d.validate)==null||he.call(d,"blur").catch(He=>void 0))}}),U=k(()=>{var he;return(he=f==null?void 0:f.statusIcon)!=null?he:!1}),j=k(()=>(d==null?void 0:d.validateState)||""),W=k(()=>j.value&&Rv[j.value]),L=k(()=>w.value?n3:E4),P=k(()=>[r.style]),x=k(()=>[o.inputStyle,E.value,{resize:o.resize}]),I=k(()=>Tn(o.modelValue)?"":String(o.modelValue)),H=k(()=>o.clearable&&!v.value&&!o.readonly&&!!I.value&&(A.value||_.value)),G=k(()=>o.showPassword&&!v.value&&!o.readonly&&!!I.value&&(!!I.value||A.value)),J=k(()=>o.showWordLimit&&!!o.maxlength&&(o.type==="text"||o.type==="textarea")&&!v.value&&!o.readonly&&!o.showPassword),ee=k(()=>I.value.length),fe=k(()=>!!J.value&&ee.value>Number(o.maxlength)),Te=k(()=>!!a.suffix||!!o.suffixIcon||H.value||o.showPassword||J.value||!!j.value&&U.value),[oe,ke]=y8(g);Qt(y,he=>{if(we(),!J.value||o.resize!=="both")return;const He=he[0],{width:et}=He.contentRect;S.value={right:`calc(100% - ${et+15+6}px)`}});const ae=()=>{const{type:he,autosize:He}=o;if(!(!Ct||he!=="textarea"||!y.value))if(He){const et=dt(He)?He.minRows:void 0,rt=dt(He)?He.maxRows:void 0,wt=w0(y.value,et,rt);E.value={overflowY:"hidden",...wt},We(()=>{y.value.offsetHeight,E.value=wt})}else E.value={minHeight:w0(y.value).minHeight}},we=(he=>{let He=!1;return()=>{var et;if(He||!o.autosize)return;((et=y.value)==null?void 0:et.offsetParent)===null||(he(),He=!0)}})(ae),ge=()=>{const he=$.value,He=o.formatter?o.formatter(I.value):I.value;!he||he.value===He||(he.value=He)},q=async he=>{oe();let{value:He}=he.target;if(o.formatter&&(He=o.parser?o.parser(He):He),!b.value){if(He===I.value){ge();return}n(ft,He),n("input",He),await We(),ge(),ke()}},B=he=>{n("change",he.target.value)},z=he=>{n("compositionstart",he),b.value=!0},Z=he=>{var He;n("compositionupdate",he);const et=(He=he.target)==null?void 0:He.value,rt=et[et.length-1]||"";b.value=!Lv(rt)},ue=he=>{n("compositionend",he),b.value&&(b.value=!1,q(he))},se=()=>{w.value=!w.value,me()},me=async()=>{var he;await We(),(he=$.value)==null||he.focus()},_e=()=>{var he;return(he=$.value)==null?void 0:he.blur()},$e=he=>{_.value=!1,n("mouseleave",he)},Ce=he=>{_.value=!0,n("mouseenter",he)},ce=he=>{n("keydown",he)},de=()=>{var he;(he=$.value)==null||he.select()},xe=()=>{n(ft,""),n("change",""),n("clear"),n("input","")};return ve(()=>o.modelValue,()=>{var he;We(()=>ae()),o.validateEvent&&((he=d==null?void 0:d.validate)==null||he.call(d,"change").catch(He=>void 0))}),ve(I,()=>ge()),ve(()=>o.type,async()=>{await We(),ge(),ae()}),at(()=>{!o.formatter&&o.parser,ge(),We(ae)}),wn({from:"label",replacement:"aria-label",version:"2.8.0",scope:"el-input",ref:"https://element-plus.org/en-US/component/input.html"},k(()=>!!o.label)),t({input:g,textarea:y,ref:$,textareaStyle:x,autosize:Lt(o,"autosize"),focus:me,blur:_e,select:de,clear:xe,resizeTextarea:ae}),(he,He)=>(T(),V("div",mt(i(l),{class:[i(s),{[i(h).bm("group","append")]:he.$slots.append,[i(h).bm("group","prepend")]:he.$slots.prepend}],style:i(P),role:he.containerRole,onMouseenter:Ce,onMouseleave:$e}),[te(" input "),he.type!=="textarea"?(T(),V(Ve,{key:0},[te(" prepend slot "),he.$slots.prepend?(T(),V("div",{key:0,class:N(i(h).be("group","prepend"))},[ie(he.$slots,"prepend")],2)):te("v-if",!0),F("div",{ref_key:"wrapperRef",ref:O,class:N(i(u))},[te(" prefix slot "),he.$slots.prefix||he.prefixIcon?(T(),V("span",{key:0,class:N(i(h).e("prefix"))},[F("span",{class:N(i(h).e("prefix-inner"))},[ie(he.$slots,"prefix"),he.prefixIcon?(T(),re(i(ze),{key:0,class:N(i(h).e("icon"))},{default:X(()=>[(T(),re(pt(he.prefixIcon)))]),_:1},8,["class"])):te("v-if",!0)],2)],2)):te("v-if",!0),F("input",mt({id:i(p),ref_key:"input",ref:g,class:i(h).e("inner")},i(c),{minlength:he.minlength,maxlength:he.maxlength,type:he.showPassword?w.value?"text":"password":he.type,disabled:i(v),readonly:he.readonly,autocomplete:he.autocomplete,tabindex:he.tabindex,"aria-label":he.label||he.ariaLabel,placeholder:he.placeholder,style:he.inputStyle,form:he.form,autofocus:he.autofocus,onCompositionstart:z,onCompositionupdate:Z,onCompositionend:ue,onInput:q,onFocus:He[0]||(He[0]=(...et)=>i(M)&&i(M)(...et)),onBlur:He[1]||(He[1]=(...et)=>i(D)&&i(D)(...et)),onChange:B,onKeydown:ce}),null,16,UF),te(" suffix slot "),i(Te)?(T(),V("span",{key:1,class:N(i(h).e("suffix"))},[F("span",{class:N(i(h).e("suffix-inner"))},[!i(H)||!i(G)||!i(J)?(T(),V(Ve,{key:0},[ie(he.$slots,"suffix"),he.suffixIcon?(T(),re(i(ze),{key:0,class:N(i(h).e("icon"))},{default:X(()=>[(T(),re(pt(he.suffixIcon)))]),_:1},8,["class"])):te("v-if",!0)],64)):te("v-if",!0),i(H)?(T(),re(i(ze),{key:1,class:N([i(h).e("icon"),i(h).e("clear")]),onMousedown:Qe(i(Bt),["prevent"]),onClick:xe},{default:X(()=>[K(i(Fa))]),_:1},8,["class","onMousedown"])):te("v-if",!0),i(G)?(T(),re(i(ze),{key:2,class:N([i(h).e("icon"),i(h).e("password")]),onClick:se},{default:X(()=>[(T(),re(pt(i(L))))]),_:1},8,["class"])):te("v-if",!0),i(J)?(T(),V("span",{key:3,class:N(i(h).e("count"))},[F("span",{class:N(i(h).e("count-inner"))},le(i(ee))+" / "+le(he.maxlength),3)],2)):te("v-if",!0),i(j)&&i(W)&&i(U)?(T(),re(i(ze),{key:4,class:N([i(h).e("icon"),i(h).e("validateIcon"),i(h).is("loading",i(j)==="validating")])},{default:X(()=>[(T(),re(pt(i(W))))]),_:1},8,["class"])):te("v-if",!0)],2)],2)):te("v-if",!0)],2),te(" append slot "),he.$slots.append?(T(),V("div",{key:1,class:N(i(h).be("group","append"))},[ie(he.$slots,"append")],2)):te("v-if",!0)],64)):(T(),V(Ve,{key:1},[te(" textarea "),F("textarea",mt({id:i(p),ref_key:"textarea",ref:y,class:[i(C).e("inner"),i(h).is("focus",i(A))]},i(c),{minlength:he.minlength,maxlength:he.maxlength,tabindex:he.tabindex,disabled:i(v),readonly:he.readonly,autocomplete:he.autocomplete,style:i(x),"aria-label":he.label||he.ariaLabel,placeholder:he.placeholder,form:he.form,autofocus:he.autofocus,rows:he.rows,onCompositionstart:z,onCompositionupdate:Z,onCompositionend:ue,onInput:q,onFocus:He[2]||(He[2]=(...et)=>i(M)&&i(M)(...et)),onBlur:He[3]||(He[3]=(...et)=>i(D)&&i(D)(...et)),onChange:B,onKeydown:ce}),null,16,qF),i(J)?(T(),V("span",{key:0,style:je(S.value),class:N(i(h).e("count"))},le(i(ee))+" / "+le(he.maxlength),7)):te("v-if",!0)],64))],16,KF))}});var XF=Ie(GF,[["__file","input.vue"]]);const zn=ut(XF),Ul=4,jS={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}},JF=({move:e,size:t,bar:n})=>({[n.size]:t,transform:`translate${n.axis}(${e}%)`}),og=Symbol("scrollbarContextKey"),ZF=Ne({vertical:Boolean,size:String,move:Number,ratio:{type:Number,required:!0},always:Boolean}),QF="Thumb",e6=Y({__name:"thumb",props:ZF,setup(e){const t=e,n=De(og),o=Se("scrollbar");n||vn(QF,"can not inject scrollbar context");const r=R(),a=R(),l=R({}),s=R(!1);let u=!1,c=!1,f=Ct?document.onselectstart:null;const d=k(()=>jS[t.vertical?"vertical":"horizontal"]),p=k(()=>JF({size:t.size,move:t.move,bar:d.value})),m=k(()=>r.value[d.value.offset]**2/n.wrapElement[d.value.scrollSize]/t.ratio/a.value[d.value.offset]),v=S=>{var E;if(S.stopPropagation(),S.ctrlKey||[1,2].includes(S.button))return;(E=window.getSelection())==null||E.removeAllRanges(),C(S);const $=S.currentTarget;$&&(l.value[d.value.axis]=$[d.value.offset]-(S[d.value.client]-$.getBoundingClientRect()[d.value.direction]))},h=S=>{if(!a.value||!r.value||!n.wrapElement)return;const E=Math.abs(S.target.getBoundingClientRect()[d.value.direction]-S[d.value.client]),$=a.value[d.value.offset]/2,O=(E-$)*100*m.value/r.value[d.value.offset];n.wrapElement[d.value.scroll]=O*n.wrapElement[d.value.scrollSize]/100},C=S=>{S.stopImmediatePropagation(),u=!0,document.addEventListener("mousemove",g),document.addEventListener("mouseup",y),f=document.onselectstart,document.onselectstart=()=>!1},g=S=>{if(!r.value||!a.value||u===!1)return;const E=l.value[d.value.axis];if(!E)return;const $=(r.value.getBoundingClientRect()[d.value.direction]-S[d.value.client])*-1,O=a.value[d.value.offset]-E,A=($-O)*100*m.value/r.value[d.value.offset];n.wrapElement[d.value.scroll]=A*n.wrapElement[d.value.scrollSize]/100},y=()=>{u=!1,l.value[d.value.axis]=0,document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",y),w(),c&&(s.value=!1)},_=()=>{c=!1,s.value=!!t.size},b=()=>{c=!0,s.value=u};zt(()=>{w(),document.removeEventListener("mouseup",y)});const w=()=>{document.onselectstart!==f&&(document.onselectstart=f)};return qt(Lt(n,"scrollbarElement"),"mousemove",_),qt(Lt(n,"scrollbarElement"),"mouseleave",b),(S,E)=>(T(),re(fn,{name:i(o).b("fade"),persisted:""},{default:X(()=>[tt(F("div",{ref_key:"instance",ref:r,class:N([i(o).e("bar"),i(o).is(i(d).key)]),onMousedown:h},[F("div",{ref_key:"thumb",ref:a,class:N(i(o).e("thumb")),style:je(i(p)),onMousedown:v},null,38)],34),[[kt,S.always||s.value]])]),_:1},8,["name"]))}});var _0=Ie(e6,[["__file","thumb.vue"]]);const t6=Ne({always:{type:Boolean,default:!0},minSize:{type:Number,required:!0}}),n6=Y({__name:"bar",props:t6,setup(e,{expose:t}){const n=e,o=De(og),r=R(0),a=R(0),l=R(""),s=R(""),u=R(1),c=R(1);return t({handleScroll:p=>{if(p){const m=p.offsetHeight-Ul,v=p.offsetWidth-Ul;a.value=p.scrollTop*100/m*u.value,r.value=p.scrollLeft*100/v*c.value}},update:()=>{const p=o==null?void 0:o.wrapElement;if(!p)return;const m=p.offsetHeight-Ul,v=p.offsetWidth-Ul,h=m**2/p.scrollHeight,C=v**2/p.scrollWidth,g=Math.max(h,n.minSize),y=Math.max(C,n.minSize);u.value=h/(m-h)/(g/(m-g)),c.value=C/(v-C)/(y/(v-y)),s.value=g+Ul(T(),V(Ve,null,[K(_0,{move:r.value,ratio:c.value,size:l.value,always:p.always},null,8,["move","ratio","size","always"]),K(_0,{move:a.value,ratio:u.value,size:s.value,vertical:"",always:p.always},null,8,["move","ratio","size","always"])],64))}});var o6=Ie(n6,[["__file","bar.vue"]]);const r6=Ne({height:{type:[String,Number],default:""},maxHeight:{type:[String,Number],default:""},native:{type:Boolean,default:!1},wrapStyle:{type:Q([String,Object,Array]),default:""},wrapClass:{type:[String,Array],default:""},viewClass:{type:[String,Array],default:""},viewStyle:{type:[String,Array,Object],default:""},noresize:Boolean,tag:{type:String,default:"div"},always:Boolean,minSize:{type:Number,default:20},id:String,role:String,...An(["ariaLabel","ariaOrientation"])}),a6={scroll:({scrollTop:e,scrollLeft:t})=>[e,t].every(Je)},l6="ElScrollbar",s6=Y({name:l6}),i6=Y({...s6,props:r6,emits:a6,setup(e,{expose:t,emit:n}){const o=e,r=Se("scrollbar");let a,l;const s=R(),u=R(),c=R(),f=R(),d=k(()=>{const _={};return o.height&&(_.height=rn(o.height)),o.maxHeight&&(_.maxHeight=rn(o.maxHeight)),[o.wrapStyle,_]}),p=k(()=>[o.wrapClass,r.e("wrap"),{[r.em("wrap","hidden-default")]:!o.native}]),m=k(()=>[r.e("view"),o.viewClass]),v=()=>{var _;u.value&&((_=f.value)==null||_.handleScroll(u.value),n("scroll",{scrollTop:u.value.scrollTop,scrollLeft:u.value.scrollLeft}))};function h(_,b){dt(_)?u.value.scrollTo(_):Je(_)&&Je(b)&&u.value.scrollTo(_,b)}const C=_=>{Je(_)&&(u.value.scrollTop=_)},g=_=>{Je(_)&&(u.value.scrollLeft=_)},y=()=>{var _;(_=f.value)==null||_.update()};return ve(()=>o.noresize,_=>{_?(a==null||a(),l==null||l()):({stop:a}=Qt(c,y),l=qt("resize",y))},{immediate:!0}),ve(()=>[o.maxHeight,o.height],()=>{o.native||We(()=>{var _;y(),u.value&&((_=f.value)==null||_.handleScroll(u.value))})}),yt(og,Et({scrollbarElement:s,wrapElement:u})),at(()=>{o.native||We(()=>{y()})}),ar(()=>y()),t({wrapRef:u,update:y,scrollTo:h,setScrollTop:C,setScrollLeft:g,handleScroll:v}),(_,b)=>(T(),V("div",{ref_key:"scrollbarRef",ref:s,class:N(i(r).b())},[F("div",{ref_key:"wrapRef",ref:u,class:N(i(p)),style:je(i(d)),onScroll:v},[(T(),re(pt(_.tag),{id:_.id,ref_key:"resizeRef",ref:c,class:N(i(m)),style:je(_.viewStyle),role:_.role,"aria-label":_.ariaLabel,"aria-orientation":_.ariaOrientation},{default:X(()=>[ie(_.$slots,"default")]),_:3},8,["id","class","style","role","aria-label","aria-orientation"]))],38),_.native?te("v-if",!0):(T(),re(o6,{key:0,ref_key:"barRef",ref:f,always:_.always,"min-size":_.minSize},null,8,["always","min-size"]))],2))}});var u6=Ie(i6,[["__file","scrollbar.vue"]]);const ea=ut(u6),rg=Symbol("popper"),WS=Symbol("popperContent"),c6=["dialog","grid","group","listbox","menu","navigation","tooltip","tree"],KS=Ne({role:{type:String,values:c6,default:"tooltip"}}),d6=Y({name:"ElPopper",inheritAttrs:!1}),f6=Y({...d6,props:KS,setup(e,{expose:t}){const n=e,o=R(),r=R(),a=R(),l=R(),s=k(()=>n.role),u={triggerRef:o,popperInstanceRef:r,contentRef:a,referenceRef:l,role:s};return t(u),yt(rg,u),(c,f)=>ie(c.$slots,"default")}});var p6=Ie(f6,[["__file","popper.vue"]]);const US=Ne({arrowOffset:{type:Number,default:5}}),h6=Y({name:"ElPopperArrow",inheritAttrs:!1}),m6=Y({...h6,props:US,setup(e,{expose:t}){const n=e,o=Se("popper"),{arrowOffset:r,arrowRef:a,arrowStyle:l}=De(WS,void 0);return ve(()=>n.arrowOffset,s=>{r.value=s}),zt(()=>{a.value=void 0}),t({arrowRef:a}),(s,u)=>(T(),V("span",{ref_key:"arrowRef",ref:a,class:N(i(o).e("arrow")),style:je(i(l)),"data-popper-arrow":""},null,6))}});var v6=Ie(m6,[["__file","arrow.vue"]]);const g6="ElOnlyChild",qS=Y({name:g6,setup(e,{slots:t,attrs:n}){var o;const r=De(wS),a=LD((o=r==null?void 0:r.setForwardRef)!=null?o:Bt);return()=>{var l;const s=(l=t.default)==null?void 0:l.call(t,n);if(!s||s.length>1)return null;const u=YS(s);return u?tt(Qo(u,n),[[a]]):null}}});function YS(e){if(!e)return null;const t=e;for(const n of t){if(dt(n))switch(n.type){case En:continue;case Ur:case"svg":return C0(n);case Ve:return YS(n.children);default:return n}return C0(n)}return null}function C0(e){const t=Se("only-child");return K("span",{class:t.e("content")},[e])}const GS=Ne({virtualRef:{type:Q(Object)},virtualTriggering:Boolean,onMouseenter:{type:Q(Function)},onMouseleave:{type:Q(Function)},onClick:{type:Q(Function)},onKeydown:{type:Q(Function)},onFocus:{type:Q(Function)},onBlur:{type:Q(Function)},onContextmenu:{type:Q(Function)},id:String,open:Boolean}),b6=Y({name:"ElPopperTrigger",inheritAttrs:!1}),y6=Y({...b6,props:GS,setup(e,{expose:t}){const n=e,{role:o,triggerRef:r}=De(rg,void 0);RD(r);const a=k(()=>s.value?n.id:void 0),l=k(()=>{if(o&&o.value==="tooltip")return n.open&&n.id?n.id:void 0}),s=k(()=>{if(o&&o.value!=="tooltip")return o.value}),u=k(()=>s.value?`${n.open}`:void 0);let c;return at(()=>{ve(()=>n.virtualRef,f=>{f&&(r.value=lo(f))},{immediate:!0}),ve(r,(f,d)=>{c==null||c(),c=void 0,Fo(f)&&(["onMouseenter","onMouseleave","onClick","onKeydown","onFocus","onBlur","onContextmenu"].forEach(p=>{var m;const v=n[p];v&&(f.addEventListener(p.slice(2).toLowerCase(),v),(m=d==null?void 0:d.removeEventListener)==null||m.call(d,p.slice(2).toLowerCase(),v))}),c=ve([a,l,s,u],p=>{["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach((m,v)=>{Tn(p[v])?f.removeAttribute(m):f.setAttribute(m,p[v])})},{immediate:!0})),Fo(d)&&["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach(p=>d.removeAttribute(p))},{immediate:!0})}),zt(()=>{c==null||c(),c=void 0}),t({triggerRef:r}),(f,d)=>f.virtualTriggering?te("v-if",!0):(T(),re(i(qS),mt({key:0},f.$attrs,{"aria-controls":i(a),"aria-describedby":i(l),"aria-expanded":i(u),"aria-haspopup":i(s)}),{default:X(()=>[ie(f.$slots,"default")]),_:3},16,["aria-controls","aria-describedby","aria-expanded","aria-haspopup"]))}});var w6=Ie(y6,[["__file","trigger.vue"]]);const pp="focus-trap.focus-after-trapped",hp="focus-trap.focus-after-released",_6="focus-trap.focusout-prevented",S0={cancelable:!0,bubbles:!1},C6={cancelable:!0,bubbles:!1},k0="focusAfterTrapped",E0="focusAfterReleased",ag=Symbol("elFocusTrap"),lg=R(),Sf=R(0),sg=R(0);let hc=0;const XS=e=>{const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:o=>{const r=o.tagName==="INPUT"&&o.type==="hidden";return o.disabled||o.hidden||r?NodeFilter.FILTER_SKIP:o.tabIndex>=0||o===document.activeElement?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t},T0=(e,t)=>{for(const n of e)if(!S6(n,t))return n},S6=(e,t)=>{if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1},k6=e=>{const t=XS(e),n=T0(t,e),o=T0(t.reverse(),e);return[n,o]},E6=e=>e instanceof HTMLInputElement&&"select"in e,pa=(e,t)=>{if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),sg.value=window.performance.now(),e!==n&&E6(e)&&t&&e.select()}};function $0(e,t){const n=[...e],o=e.indexOf(t);return o!==-1&&n.splice(o,1),n}const T6=()=>{let e=[];return{push:o=>{const r=e[0];r&&o!==r&&r.pause(),e=$0(e,o),e.unshift(o)},remove:o=>{var r,a;e=$0(e,o),(a=(r=e[0])==null?void 0:r.resume)==null||a.call(r)}}},$6=(e,t=!1)=>{const n=document.activeElement;for(const o of e)if(pa(o,t),document.activeElement!==n)return},O0=T6(),O6=()=>Sf.value>sg.value,mc=()=>{lg.value="pointer",Sf.value=window.performance.now()},N0=()=>{lg.value="keyboard",Sf.value=window.performance.now()},N6=()=>(at(()=>{hc===0&&(document.addEventListener("mousedown",mc),document.addEventListener("touchstart",mc),document.addEventListener("keydown",N0)),hc++}),zt(()=>{hc--,hc<=0&&(document.removeEventListener("mousedown",mc),document.removeEventListener("touchstart",mc),document.removeEventListener("keydown",N0))}),{focusReason:lg,lastUserFocusTimestamp:Sf,lastAutomatedFocusTimestamp:sg}),vc=e=>new CustomEvent(_6,{...C6,detail:e}),I6=Y({name:"ElFocusTrap",inheritAttrs:!1,props:{loop:Boolean,trapped:Boolean,focusTrapEl:Object,focusStartEl:{type:[Object,String],default:"first"}},emits:[k0,E0,"focusin","focusout","focusout-prevented","release-requested"],setup(e,{emit:t}){const n=R();let o,r;const{focusReason:a}=N6();ND(v=>{e.trapped&&!l.paused&&t("release-requested",v)});const l={paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}},s=v=>{if(!e.loop&&!e.trapped||l.paused)return;const{key:h,altKey:C,ctrlKey:g,metaKey:y,currentTarget:_,shiftKey:b}=v,{loop:w}=e,S=h===Ue.tab&&!C&&!g&&!y,E=document.activeElement;if(S&&E){const $=_,[O,A]=k6($);if(O&&A){if(!b&&E===A){const D=vc({focusReason:a.value});t("focusout-prevented",D),D.defaultPrevented||(v.preventDefault(),w&&pa(O,!0))}else if(b&&[O,$].includes(E)){const D=vc({focusReason:a.value});t("focusout-prevented",D),D.defaultPrevented||(v.preventDefault(),w&&pa(A,!0))}}else if(E===$){const D=vc({focusReason:a.value});t("focusout-prevented",D),D.defaultPrevented||v.preventDefault()}}};yt(ag,{focusTrapRef:n,onKeydown:s}),ve(()=>e.focusTrapEl,v=>{v&&(n.value=v)},{immediate:!0}),ve([n],([v],[h])=>{v&&(v.addEventListener("keydown",s),v.addEventListener("focusin",f),v.addEventListener("focusout",d)),h&&(h.removeEventListener("keydown",s),h.removeEventListener("focusin",f),h.removeEventListener("focusout",d))});const u=v=>{t(k0,v)},c=v=>t(E0,v),f=v=>{const h=i(n);if(!h)return;const C=v.target,g=v.relatedTarget,y=C&&h.contains(C);e.trapped||g&&h.contains(g)||(o=g),y&&t("focusin",v),!l.paused&&e.trapped&&(y?r=C:pa(r,!0))},d=v=>{const h=i(n);if(!(l.paused||!h))if(e.trapped){const C=v.relatedTarget;!Tn(C)&&!h.contains(C)&&setTimeout(()=>{if(!l.paused&&e.trapped){const g=vc({focusReason:a.value});t("focusout-prevented",g),g.defaultPrevented||pa(r,!0)}},0)}else{const C=v.target;C&&h.contains(C)||t("focusout",v)}};async function p(){await We();const v=i(n);if(v){O0.push(l);const h=v.contains(document.activeElement)?o:document.activeElement;if(o=h,!v.contains(h)){const g=new Event(pp,S0);v.addEventListener(pp,u),v.dispatchEvent(g),g.defaultPrevented||We(()=>{let y=e.focusStartEl;nt(y)||(pa(y),document.activeElement!==y&&(y="first")),y==="first"&&$6(XS(v),!0),(document.activeElement===h||y==="container")&&pa(v)})}}}function m(){const v=i(n);if(v){v.removeEventListener(pp,u);const h=new CustomEvent(hp,{...S0,detail:{focusReason:a.value}});v.addEventListener(hp,c),v.dispatchEvent(h),!h.defaultPrevented&&(a.value=="keyboard"||!O6()||v.contains(document.activeElement))&&pa(o??document.body),v.removeEventListener(hp,c),O0.remove(l)}}return at(()=>{e.trapped&&p(),ve(()=>e.trapped,v=>{v?p():m()})}),zt(()=>{e.trapped&&m()}),{onKeydown:s}}});function M6(e,t,n,o,r,a){return ie(e.$slots,"default",{handleKeydown:e.onKeydown})}var Fu=Ie(I6,[["render",M6],["__file","focus-trap.vue"]]);const A6=["fixed","absolute"],P6=Ne({boundariesPadding:{type:Number,default:0},fallbackPlacements:{type:Q(Array),default:void 0},gpuAcceleration:{type:Boolean,default:!0},offset:{type:Number,default:12},placement:{type:String,values:Dl,default:"bottom"},popperOptions:{type:Q(Object),default:()=>({})},strategy:{type:String,values:A6,default:"absolute"}}),JS=Ne({...P6,id:String,style:{type:Q([String,Array,Object])},className:{type:Q([String,Array,Object])},effect:{type:Q(String),default:"dark"},visible:Boolean,enterable:{type:Boolean,default:!0},pure:Boolean,focusOnShow:{type:Boolean,default:!1},trapping:{type:Boolean,default:!1},popperClass:{type:Q([String,Array,Object])},popperStyle:{type:Q([String,Array,Object])},referenceEl:{type:Q(Object)},triggerTargetEl:{type:Q(Object)},stopPopperMouseEvent:{type:Boolean,default:!0},virtualTriggering:Boolean,zIndex:Number,...An(["ariaLabel"])}),R6={mouseenter:e=>e instanceof MouseEvent,mouseleave:e=>e instanceof MouseEvent,focus:()=>!0,blur:()=>!0,close:()=>!0},L6=(e,t=[])=>{const{placement:n,strategy:o,popperOptions:r}=e,a={placement:n,strategy:o,...r,modifiers:[...D6(e),...t]};return F6(a,r==null?void 0:r.modifiers),a},x6=e=>{if(Ct)return lo(e)};function D6(e){const{offset:t,gpuAcceleration:n,fallbackPlacements:o}=e;return[{name:"offset",options:{offset:[0,t??12]}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5,fallbackPlacements:o}},{name:"computeStyles",options:{gpuAcceleration:n}}]}function F6(e,t){t&&(e.modifiers=[...e.modifiers,...t??[]])}const B6=0,V6=e=>{const{popperInstanceRef:t,contentRef:n,triggerRef:o,role:r}=De(rg,void 0),a=R(),l=R(),s=k(()=>({name:"eventListeners",enabled:!!e.visible})),u=k(()=>{var g;const y=i(a),_=(g=i(l))!=null?g:B6;return{name:"arrow",enabled:!HC(y),options:{element:y,padding:_}}}),c=k(()=>({onFirstUpdate:()=>{v()},...L6(e,[i(u),i(s)])})),f=k(()=>x6(e.referenceEl)||i(o)),{attributes:d,state:p,styles:m,update:v,forceUpdate:h,instanceRef:C}=ED(f,n,c);return ve(C,g=>t.value=g),at(()=>{ve(()=>{var g;return(g=i(f))==null?void 0:g.getBoundingClientRect()},()=>{v()})}),{attributes:d,arrowRef:a,contentRef:n,instanceRef:C,state:p,styles:m,role:r,forceUpdate:h,update:v}},H6=(e,{attributes:t,styles:n,role:o})=>{const{nextZIndex:r}=Zs(),a=Se("popper"),l=k(()=>i(t).popper),s=R(Je(e.zIndex)?e.zIndex:r()),u=k(()=>[a.b(),a.is("pure",e.pure),a.is(e.effect),e.popperClass]),c=k(()=>[{zIndex:i(s)},i(n).popper,e.popperStyle||{}]),f=k(()=>o.value==="dialog"?"false":void 0),d=k(()=>i(n).arrow||{});return{ariaModal:f,arrowStyle:d,contentAttrs:l,contentClass:u,contentStyle:c,contentZIndex:s,updateZIndex:()=>{s.value=Je(e.zIndex)?e.zIndex:r()}}},z6=(e,t)=>{const n=R(!1),o=R();return{focusStartRef:o,trapped:n,onFocusAfterReleased:c=>{var f;((f=c.detail)==null?void 0:f.focusReason)!=="pointer"&&(o.value="first",t("blur"))},onFocusAfterTrapped:()=>{t("focus")},onFocusInTrap:c=>{e.visible&&!n.value&&(c.target&&(o.value=c.target),n.value=!0)},onFocusoutPrevented:c=>{e.trapping||(c.detail.focusReason==="pointer"&&c.preventDefault(),n.value=!1)},onReleaseRequested:()=>{n.value=!1,t("close")}}},j6=Y({name:"ElPopperContent"}),W6=Y({...j6,props:JS,emits:R6,setup(e,{expose:t,emit:n}){const o=e,{focusStartRef:r,trapped:a,onFocusAfterReleased:l,onFocusAfterTrapped:s,onFocusInTrap:u,onFocusoutPrevented:c,onReleaseRequested:f}=z6(o,n),{attributes:d,arrowRef:p,contentRef:m,styles:v,instanceRef:h,role:C,update:g}=V6(o),{ariaModal:y,arrowStyle:_,contentAttrs:b,contentClass:w,contentStyle:S,updateZIndex:E}=H6(o,{styles:v,attributes:d,role:C}),$=De(Or,void 0),O=R();yt(WS,{arrowStyle:_,arrowRef:p,arrowOffset:O}),$&&yt(Or,{...$,addInputId:Bt,removeInputId:Bt});let A;const M=(U=!0)=>{g(),U&&E()},D=()=>{M(!1),o.visible&&o.focusOnShow?a.value=!0:o.visible===!1&&(a.value=!1)};return at(()=>{ve(()=>o.triggerTargetEl,(U,j)=>{A==null||A(),A=void 0;const W=i(U||m.value),L=i(j||m.value);Fo(W)&&(A=ve([C,()=>o.ariaLabel,y,()=>o.id],P=>{["role","aria-label","aria-modal","id"].forEach((x,I)=>{Tn(P[I])?W.removeAttribute(x):W.setAttribute(x,P[I])})},{immediate:!0})),L!==W&&Fo(L)&&["role","aria-label","aria-modal","id"].forEach(P=>{L.removeAttribute(P)})},{immediate:!0}),ve(()=>o.visible,D,{immediate:!0})}),zt(()=>{A==null||A(),A=void 0}),t({popperContentRef:m,popperInstanceRef:h,updatePopper:M,contentStyle:S}),(U,j)=>(T(),V("div",mt({ref_key:"contentRef",ref:m},i(b),{style:i(S),class:i(w),tabindex:"-1",onMouseenter:j[0]||(j[0]=W=>U.$emit("mouseenter",W)),onMouseleave:j[1]||(j[1]=W=>U.$emit("mouseleave",W))}),[K(i(Fu),{trapped:i(a),"trap-on-focus-in":!0,"focus-trap-el":i(m),"focus-start-el":i(r),onFocusAfterTrapped:i(s),onFocusAfterReleased:i(l),onFocusin:i(u),onFocusoutPrevented:i(c),onReleaseRequested:i(f)},{default:X(()=>[ie(U.$slots,"default")]),_:3},8,["trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusin","onFocusoutPrevented","onReleaseRequested"])],16))}});var K6=Ie(W6,[["__file","content.vue"]]);const ZS=ut(p6),kf=Symbol("elTooltip"),kn=Ne({...AD,...JS,appendTo:{type:Q([String,Object])},content:{type:String,default:""},rawContent:Boolean,persistent:Boolean,visible:{type:Q(Boolean),default:null},transition:String,teleported:{type:Boolean,default:!0},disabled:Boolean,...An(["ariaLabel"])}),lu=Ne({...GS,disabled:Boolean,trigger:{type:Q([String,Array]),default:"hover"},triggerKeys:{type:Q(Array),default:()=>[Ue.enter,Ue.space]}}),{useModelToggleProps:U6,useModelToggleEmits:q6,useModelToggle:Y6}=lS("visible"),G6=Ne({...KS,...U6,...kn,...lu,...US,showArrow:{type:Boolean,default:!0}}),X6=[...q6,"before-show","before-hide","show","hide","open","close"],J6=(e,t)=>Pe(e)?e.includes(t):e===t,ql=(e,t,n)=>o=>{J6(i(e),t)&&n(o)},Z6=Y({name:"ElTooltipTrigger"}),Q6=Y({...Z6,props:lu,setup(e,{expose:t}){const n=e,o=Se("tooltip"),{controlled:r,id:a,open:l,onOpen:s,onClose:u,onToggle:c}=De(kf,void 0),f=R(null),d=()=>{if(i(r)||n.disabled)return!0},p=Lt(n,"trigger"),m=on(d,ql(p,"hover",s)),v=on(d,ql(p,"hover",u)),h=on(d,ql(p,"click",b=>{b.button===0&&c(b)})),C=on(d,ql(p,"focus",s)),g=on(d,ql(p,"focus",u)),y=on(d,ql(p,"contextmenu",b=>{b.preventDefault(),c(b)})),_=on(d,b=>{const{code:w}=b;n.triggerKeys.includes(w)&&(b.preventDefault(),c(b))});return t({triggerRef:f}),(b,w)=>(T(),re(i(w6),{id:i(a),"virtual-ref":b.virtualRef,open:i(l),"virtual-triggering":b.virtualTriggering,class:N(i(o).e("trigger")),onBlur:i(g),onClick:i(h),onContextmenu:i(y),onFocus:i(C),onMouseenter:i(m),onMouseleave:i(v),onKeydown:i(_)},{default:X(()=>[ie(b.$slots,"default")]),_:3},8,["id","virtual-ref","open","virtual-triggering","class","onBlur","onClick","onContextmenu","onFocus","onMouseenter","onMouseleave","onKeydown"]))}});var eB=Ie(Q6,[["__file","trigger.vue"]]);const tB=Y({name:"ElTooltipContent",inheritAttrs:!1}),nB=Y({...tB,props:kn,setup(e,{expose:t}){const n=e,{selector:o}=yS(),r=Se("tooltip"),a=R(null),l=R(!1),{controlled:s,id:u,open:c,trigger:f,onClose:d,onOpen:p,onShow:m,onHide:v,onBeforeShow:h,onBeforeHide:C}=De(kf,void 0),g=k(()=>n.transition||`${r.namespace.value}-fade-in-linear`),y=k(()=>n.persistent);zt(()=>{l.value=!0});const _=k(()=>i(y)?!0:i(c)),b=k(()=>n.disabled?!1:i(c)),w=k(()=>n.appendTo||o.value),S=k(()=>{var P;return(P=n.style)!=null?P:{}}),E=k(()=>!i(c)),$=()=>{v()},O=()=>{if(i(s))return!0},A=on(O,()=>{n.enterable&&i(f)==="hover"&&p()}),M=on(O,()=>{i(f)==="hover"&&d()}),D=()=>{var P,x;(x=(P=a.value)==null?void 0:P.updatePopper)==null||x.call(P),h==null||h()},U=()=>{C==null||C()},j=()=>{m(),L=cv(k(()=>{var P;return(P=a.value)==null?void 0:P.popperContentRef}),()=>{if(i(s))return;i(f)!=="hover"&&d()})},W=()=>{n.virtualTriggering||d()};let L;return ve(()=>i(c),P=>{P||L==null||L()},{flush:"post"}),ve(()=>n.content,()=>{var P,x;(x=(P=a.value)==null?void 0:P.updatePopper)==null||x.call(P)}),t({contentRef:a}),(P,x)=>(T(),re(Pl,{disabled:!P.teleported,to:i(w)},[K(fn,{name:i(g),onAfterLeave:$,onBeforeEnter:D,onAfterEnter:j,onBeforeLeave:U},{default:X(()=>[i(_)?tt((T(),re(i(K6),mt({key:0,id:i(u),ref_key:"contentRef",ref:a},P.$attrs,{"aria-label":P.ariaLabel,"aria-hidden":i(E),"boundaries-padding":P.boundariesPadding,"fallback-placements":P.fallbackPlacements,"gpu-acceleration":P.gpuAcceleration,offset:P.offset,placement:P.placement,"popper-options":P.popperOptions,strategy:P.strategy,effect:P.effect,enterable:P.enterable,pure:P.pure,"popper-class":P.popperClass,"popper-style":[P.popperStyle,i(S)],"reference-el":P.referenceEl,"trigger-target-el":P.triggerTargetEl,visible:i(b),"z-index":P.zIndex,onMouseenter:i(A),onMouseleave:i(M),onBlur:W,onClose:i(d)}),{default:X(()=>[l.value?te("v-if",!0):ie(P.$slots,"default",{key:0})]),_:3},16,["id","aria-label","aria-hidden","boundaries-padding","fallback-placements","gpu-acceleration","offset","placement","popper-options","strategy","effect","enterable","pure","popper-class","popper-style","reference-el","trigger-target-el","visible","z-index","onMouseenter","onMouseleave","onClose"])),[[kt,i(b)]]):te("v-if",!0)]),_:3},8,["name"])],8,["disabled","to"]))}});var oB=Ie(nB,[["__file","content.vue"]]);const rB=["innerHTML"],aB={key:1},lB=Y({name:"ElTooltip"}),sB=Y({...lB,props:G6,emits:X6,setup(e,{expose:t,emit:n}){const o=e;MD();const r=xn(),a=R(),l=R(),s=()=>{var g;const y=i(a);y&&((g=y.popperInstanceRef)==null||g.update())},u=R(!1),c=R(),{show:f,hide:d,hasUpdateHandler:p}=Y6({indicator:u,toggleReason:c}),{onOpen:m,onClose:v}=PD({showAfter:Lt(o,"showAfter"),hideAfter:Lt(o,"hideAfter"),autoClose:Lt(o,"autoClose"),open:f,close:d}),h=k(()=>dn(o.visible)&&!p.value);yt(kf,{controlled:h,id:r,open:Ml(u),trigger:Lt(o,"trigger"),onOpen:g=>{m(g)},onClose:g=>{v(g)},onToggle:g=>{i(u)?v(g):m(g)},onShow:()=>{n("show",c.value)},onHide:()=>{n("hide",c.value)},onBeforeShow:()=>{n("before-show",c.value)},onBeforeHide:()=>{n("before-hide",c.value)},updatePopper:s}),ve(()=>o.disabled,g=>{g&&u.value&&(u.value=!1)});const C=g=>{var y,_;const b=(_=(y=l.value)==null?void 0:y.contentRef)==null?void 0:_.popperContentRef,w=(g==null?void 0:g.relatedTarget)||document.activeElement;return b&&b.contains(w)};return Qm(()=>u.value&&d()),t({popperRef:a,contentRef:l,isFocusInsideContent:C,updatePopper:s,onOpen:m,onClose:v,hide:d}),(g,y)=>(T(),re(i(ZS),{ref_key:"popperRef",ref:a,role:g.role},{default:X(()=>[K(eB,{disabled:g.disabled,trigger:g.trigger,"trigger-keys":g.triggerKeys,"virtual-ref":g.virtualRef,"virtual-triggering":g.virtualTriggering},{default:X(()=>[g.$slots.default?ie(g.$slots,"default",{key:0}):te("v-if",!0)]),_:3},8,["disabled","trigger","trigger-keys","virtual-ref","virtual-triggering"]),K(oB,{ref_key:"contentRef",ref:l,"aria-label":g.ariaLabel,"boundaries-padding":g.boundariesPadding,content:g.content,disabled:g.disabled,effect:g.effect,enterable:g.enterable,"fallback-placements":g.fallbackPlacements,"hide-after":g.hideAfter,"gpu-acceleration":g.gpuAcceleration,offset:g.offset,persistent:g.persistent,"popper-class":g.popperClass,"popper-style":g.popperStyle,placement:g.placement,"popper-options":g.popperOptions,pure:g.pure,"raw-content":g.rawContent,"reference-el":g.referenceEl,"trigger-target-el":g.triggerTargetEl,"show-after":g.showAfter,strategy:g.strategy,teleported:g.teleported,transition:g.transition,"virtual-triggering":g.virtualTriggering,"z-index":g.zIndex,"append-to":g.appendTo},{default:X(()=>[ie(g.$slots,"content",{},()=>[g.rawContent?(T(),V("span",{key:0,innerHTML:g.content},null,8,rB)):(T(),V("span",aB,le(g.content),1))]),g.showArrow?(T(),re(i(v6),{key:0,"arrow-offset":g.arrowOffset},null,8,["arrow-offset"])):te("v-if",!0)]),_:3},8,["aria-label","boundaries-padding","content","disabled","effect","enterable","fallback-placements","hide-after","gpu-acceleration","offset","persistent","popper-class","popper-style","placement","popper-options","pure","raw-content","reference-el","trigger-target-el","show-after","strategy","teleported","transition","virtual-triggering","z-index","append-to"])]),_:3},8,["role"]))}});var iB=Ie(sB,[["__file","tooltip.vue"]]);const Un=ut(iB),uB=Ne({valueKey:{type:String,default:"value"},modelValue:{type:[String,Number],default:""},debounce:{type:Number,default:300},placement:{type:Q(String),values:["top","top-start","top-end","bottom","bottom-start","bottom-end"],default:"bottom-start"},fetchSuggestions:{type:Q([Function,Array]),default:Bt},popperClass:{type:String,default:""},triggerOnFocus:{type:Boolean,default:!0},selectWhenUnmatched:{type:Boolean,default:!1},hideLoading:{type:Boolean,default:!1},teleported:kn.teleported,highlightFirstItem:{type:Boolean,default:!1},fitInputWidth:{type:Boolean,default:!1},clearable:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},name:String,...An(["ariaLabel"])}),cB={[ft]:e=>nt(e),[Zn]:e=>nt(e),[Yt]:e=>nt(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,select:e=>dt(e)},dB=["aria-expanded","aria-owns"],fB={key:0},pB=["id","aria-selected","onClick"],QS="ElAutocomplete",hB=Y({name:QS,inheritAttrs:!1}),mB=Y({...hB,props:uB,emits:cB,setup(e,{expose:t,emit:n}){const o=e,r=xv(),a=xa(),l=to(),s=Se("autocomplete"),u=R(),c=R(),f=R(),d=R();let p=!1,m=!1;const v=R([]),h=R(-1),C=R(""),g=R(!1),y=R(!1),_=R(!1),b=xn(),w=k(()=>a.style),S=k(()=>(v.value.length>0||_.value)&&g.value),E=k(()=>!o.hideLoading&&_.value),$=k(()=>u.value?Array.from(u.value.$el.querySelectorAll("input")):[]),O=()=>{S.value&&(C.value=`${u.value.$el.offsetWidth}px`)},A=()=>{h.value=-1},D=co(async oe=>{if(y.value)return;const ke=ae=>{_.value=!1,!y.value&&(Pe(ae)?(v.value=ae,h.value=o.highlightFirstItem?0:-1):vn(QS,"autocomplete suggestions must be an array"))};if(_.value=!0,Pe(o.fetchSuggestions))ke(o.fetchSuggestions);else{const ae=await o.fetchSuggestions(oe,ke);Pe(ae)&&ke(ae)}},o.debounce),U=oe=>{const ke=!!oe;if(n(Zn,oe),n(ft,oe),y.value=!1,g.value||(g.value=ke),!o.triggerOnFocus&&!oe){y.value=!0,v.value=[];return}D(oe)},j=oe=>{var ke;l.value||(((ke=oe.target)==null?void 0:ke.tagName)!=="INPUT"||$.value.includes(document.activeElement))&&(g.value=!0)},W=oe=>{n(Yt,oe)},L=oe=>{m?m=!1:(g.value=!0,n("focus",oe),o.triggerOnFocus&&!p&&D(String(o.modelValue)))},P=oe=>{setTimeout(()=>{var ke;if((ke=f.value)!=null&&ke.isFocusInsideContent()){m=!0;return}g.value&&G(),n("blur",oe)})},x=()=>{g.value=!1,n(ft,""),n("clear")},I=async()=>{S.value&&h.value>=0&&h.value{S.value&&(oe.preventDefault(),oe.stopPropagation(),G())},G=()=>{g.value=!1},J=()=>{var oe;(oe=u.value)==null||oe.focus()},ee=()=>{var oe;(oe=u.value)==null||oe.blur()},fe=async oe=>{n(Zn,oe[o.valueKey]),n(ft,oe[o.valueKey]),n("select",oe),v.value=[],h.value=-1},Te=oe=>{if(!S.value||_.value)return;if(oe<0){h.value=-1;return}oe>=v.value.length&&(oe=v.value.length-1);const ke=c.value.querySelector(`.${s.be("suggestion","wrap")}`),Oe=ke.querySelectorAll(`.${s.be("suggestion","list")} li`)[oe],we=ke.scrollTop,{offsetTop:ge,scrollHeight:q}=Oe;ge+q>we+ke.clientHeight&&(ke.scrollTop+=q),ge{S.value&&G()}),at(()=>{u.value.ref.setAttribute("role","textbox"),u.value.ref.setAttribute("aria-autocomplete","list"),u.value.ref.setAttribute("aria-controls","id"),u.value.ref.setAttribute("aria-activedescendant",`${b.value}-item-${h.value}`),p=u.value.ref.hasAttribute("readonly")}),t({highlightedIndex:h,activated:g,loading:_,inputRef:u,popperRef:f,suggestions:v,handleSelect:fe,handleKeyEnter:I,focus:J,blur:ee,close:G,highlight:Te}),(oe,ke)=>(T(),re(i(Un),{ref_key:"popperRef",ref:f,visible:i(S),placement:oe.placement,"fallback-placements":["bottom-start","top-start"],"popper-class":[i(s).e("popper"),oe.popperClass],teleported:oe.teleported,"gpu-acceleration":!1,pure:"","manual-mode":"",effect:"light",trigger:"click",transition:`${i(s).namespace.value}-zoom-in-top`,persistent:"",role:"listbox",onBeforeShow:O,onHide:A},{content:X(()=>[F("div",{ref_key:"regionRef",ref:c,class:N([i(s).b("suggestion"),i(s).is("loading",i(E))]),style:je({[oe.fitInputWidth?"width":"minWidth"]:C.value,outline:"none"}),role:"region"},[K(i(ea),{id:i(b),tag:"ul","wrap-class":i(s).be("suggestion","wrap"),"view-class":i(s).be("suggestion","list"),role:"listbox"},{default:X(()=>[i(E)?(T(),V("li",fB,[ie(oe.$slots,"loading",{},()=>[K(i(ze),{class:N(i(s).is("loading"))},{default:X(()=>[K(i(Er))]),_:1},8,["class"])])])):(T(!0),V(Ve,{key:1},bt(v.value,(ae,Oe)=>(T(),V("li",{id:`${i(b)}-item-${Oe}`,key:Oe,class:N({highlighted:h.value===Oe}),role:"option","aria-selected":h.value===Oe,onClick:we=>fe(ae)},[ie(oe.$slots,"default",{item:ae},()=>[Ge(le(ae[oe.valueKey]),1)])],10,pB))),128))]),_:3},8,["id","wrap-class","view-class"])],6)]),default:X(()=>[F("div",{ref_key:"listboxRef",ref:d,class:N([i(s).b(),oe.$attrs.class]),style:je(i(w)),role:"combobox","aria-haspopup":"listbox","aria-expanded":i(S),"aria-owns":i(b)},[K(i(zn),mt({ref_key:"inputRef",ref:u},i(r),{clearable:oe.clearable,disabled:i(l),name:oe.name,"model-value":oe.modelValue,"aria-label":oe.ariaLabel,onInput:U,onChange:W,onFocus:L,onBlur:P,onClear:x,onKeydown:[ke[0]||(ke[0]=Pt(Qe(ae=>Te(h.value-1),["prevent"]),["up"])),ke[1]||(ke[1]=Pt(Qe(ae=>Te(h.value+1),["prevent"]),["down"])),Pt(I,["enter"]),Pt(G,["tab"]),Pt(H,["esc"])],onMousedown:j}),Sr({_:2},[oe.$slots.prepend?{name:"prepend",fn:X(()=>[ie(oe.$slots,"prepend")])}:void 0,oe.$slots.append?{name:"append",fn:X(()=>[ie(oe.$slots,"append")])}:void 0,oe.$slots.prefix?{name:"prefix",fn:X(()=>[ie(oe.$slots,"prefix")])}:void 0,oe.$slots.suffix?{name:"suffix",fn:X(()=>[ie(oe.$slots,"suffix")])}:void 0]),1040,["clearable","disabled","name","model-value","aria-label","onKeydown"])],14,dB)]),_:3},8,["visible","placement","popper-class","teleported","transition"]))}});var vB=Ie(mB,[["__file","autocomplete.vue"]]);const gB=ut(vB),bB=Ne({size:{type:[Number,String],values:Ir,default:"",validator:e=>Je(e)},shape:{type:String,values:["circle","square"],default:"circle"},icon:{type:Dt},src:{type:String,default:""},alt:String,srcSet:String,fit:{type:Q(String),default:"cover"}}),yB={error:e=>e instanceof Event},wB=["src","alt","srcset"],_B=Y({name:"ElAvatar"}),CB=Y({..._B,props:bB,emits:yB,setup(e,{emit:t}){const n=e,o=Se("avatar"),r=R(!1),a=k(()=>{const{size:c,icon:f,shape:d}=n,p=[o.b()];return nt(c)&&p.push(o.m(c)),f&&p.push(o.m("icon")),d&&p.push(o.m(d)),p}),l=k(()=>{const{size:c}=n;return Je(c)?o.cssVarBlock({size:rn(c)||""}):void 0}),s=k(()=>({objectFit:n.fit}));ve(()=>n.src,()=>r.value=!1);function u(c){r.value=!0,t("error",c)}return(c,f)=>(T(),V("span",{class:N(i(a)),style:je(i(l))},[(c.src||c.srcSet)&&!r.value?(T(),V("img",{key:0,src:c.src,alt:c.alt,srcset:c.srcSet,style:je(i(s)),onError:u},null,44,wB)):c.icon?(T(),re(i(ze),{key:1},{default:X(()=>[(T(),re(pt(c.icon)))]),_:1})):ie(c.$slots,"default",{key:2})],6))}});var SB=Ie(CB,[["__file","avatar.vue"]]);const kB=ut(SB),EB={visibilityHeight:{type:Number,default:200},target:{type:String,default:""},right:{type:Number,default:40},bottom:{type:Number,default:40}},TB={click:e=>e instanceof MouseEvent},$B=(e,t,n)=>{const o=Ut(),r=Ut(),a=R(!1),l=()=>{o.value&&(a.value=o.value.scrollTop>=e.visibilityHeight)},s=c=>{var f;(f=o.value)==null||f.scrollTo({top:0,behavior:"smooth"}),t("click",c)},u=Z_(l,300,!0);return qt(r,"scroll",u),at(()=>{var c;r.value=document,o.value=document.documentElement,e.target&&(o.value=(c=document.querySelector(e.target))!=null?c:void 0,o.value||vn(n,`target does not exist: ${e.target}`),r.value=o.value),l()}),{visible:a,handleClick:s}},ek="ElBacktop",OB=Y({name:ek}),NB=Y({...OB,props:EB,emits:TB,setup(e,{emit:t}){const n=e,o=Se("backtop"),{handleClick:r,visible:a}=$B(n,t,ek),l=k(()=>({right:`${n.right}px`,bottom:`${n.bottom}px`}));return(s,u)=>(T(),re(fn,{name:`${i(o).namespace.value}-fade-in`},{default:X(()=>[i(a)?(T(),V("div",{key:0,style:je(i(l)),class:N(i(o).b()),onClick:u[0]||(u[0]=Qe((...c)=>i(r)&&i(r)(...c),["stop"]))},[ie(s.$slots,"default",{},()=>[K(i(ze),{class:N(i(o).e("icon"))},{default:X(()=>[K(i(i4))]),_:1},8,["class"])])],6)):te("v-if",!0)]),_:3},8,["name"]))}});var IB=Ie(NB,[["__file","backtop.vue"]]);const MB=ut(IB),AB=Ne({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:!0},color:String,dotStyle:{type:Q([String,Object,Array])},badgeStyle:{type:Q([String,Object,Array])},offset:{type:Q(Array),default:[0,0]},dotClass:{type:String},badgeClass:{type:String}}),PB=["textContent"],RB=Y({name:"ElBadge"}),LB=Y({...RB,props:AB,setup(e,{expose:t}){const n=e,o=Se("badge"),r=k(()=>n.isDot?"":Je(n.value)&&Je(n.max)?n.max{var l,s,u,c,f,d;return[{backgroundColor:n.color,marginRight:rn(-((s=(l=n.offset)==null?void 0:l[0])!=null?s:0)),marginTop:rn((c=(u=n.offset)==null?void 0:u[1])!=null?c:0)},(f=n.dotStyle)!=null?f:{},(d=n.badgeStyle)!=null?d:{}]});return wn({from:"dot-style",replacement:"badge-style",version:"2.8.0",scope:"el-badge",ref:"https://element-plus.org/en-US/component/badge.html"},k(()=>!!n.dotStyle)),wn({from:"dot-class",replacement:"badge-class",version:"2.8.0",scope:"el-badge",ref:"https://element-plus.org/en-US/component/badge.html"},k(()=>!!n.dotClass)),t({content:r}),(l,s)=>(T(),V("div",{class:N(i(o).b())},[ie(l.$slots,"default"),K(fn,{name:`${i(o).namespace.value}-zoom-in-center`,persisted:""},{default:X(()=>[tt(F("sup",{class:N([i(o).e("content"),i(o).em("content",l.type),i(o).is("fixed",!!l.$slots.default),i(o).is("dot",l.isDot),l.dotClass,l.badgeClass]),style:je(i(a)),textContent:le(i(r))},null,14,PB),[[kt,!l.hidden&&(i(r)||l.isDot)]])]),_:1},8,["name"])],2))}});var xB=Ie(LB,[["__file","badge.vue"]]);const tk=ut(xB),nk=Symbol("breadcrumbKey"),DB=Ne({separator:{type:String,default:"/"},separatorIcon:{type:Dt}}),FB=["aria-label"],BB=Y({name:"ElBreadcrumb"}),VB=Y({...BB,props:DB,setup(e){const t=e,{t:n}=$t(),o=Se("breadcrumb"),r=R();return yt(nk,t),at(()=>{const a=r.value.querySelectorAll(`.${o.e("item")}`);a.length&&a[a.length-1].setAttribute("aria-current","page")}),(a,l)=>(T(),V("div",{ref_key:"breadcrumb",ref:r,class:N(i(o).b()),"aria-label":i(n)("el.breadcrumb.label"),role:"navigation"},[ie(a.$slots,"default")],10,FB))}});var HB=Ie(VB,[["__file","breadcrumb.vue"]]);const zB=Ne({to:{type:Q([String,Object]),default:""},replace:Boolean}),jB=Y({name:"ElBreadcrumbItem"}),WB=Y({...jB,props:zB,setup(e){const t=e,n=lt(),o=De(nk,void 0),r=Se("breadcrumb"),a=n.appContext.config.globalProperties.$router,l=R(),s=()=>{!t.to||!a||(t.replace?a.replace(t.to):a.push(t.to))};return(u,c)=>{var f,d;return T(),V("span",{class:N(i(r).e("item"))},[F("span",{ref_key:"link",ref:l,class:N([i(r).e("inner"),i(r).is("link",!!u.to)]),role:"link",onClick:s},[ie(u.$slots,"default")],2),(f=i(o))!=null&&f.separatorIcon?(T(),re(i(ze),{key:0,class:N(i(r).e("separator"))},{default:X(()=>[(T(),re(pt(i(o).separatorIcon)))]),_:1},8,["class"])):(T(),V("span",{key:1,class:N(i(r).e("separator")),role:"presentation"},le((d=i(o))==null?void 0:d.separator),3))],2)}}});var ok=Ie(WB,[["__file","breadcrumb-item.vue"]]);const KB=ut(HB,{BreadcrumbItem:ok}),UB=tn(ok),rk=Symbol("buttonGroupContextKey"),qB=(e,t)=>{wn({from:"type.text",replacement:"link",version:"3.0.0",scope:"props",ref:"https://element-plus.org/en-US/component/button.html#button-attributes"},k(()=>e.type==="text"));const n=De(rk,void 0),o=_f("button"),{form:r}=qn(),a=hn(k(()=>n==null?void 0:n.size)),l=to(),s=R(),u=Sn(),c=k(()=>e.type||(n==null?void 0:n.type)||""),f=k(()=>{var v,h,C;return(C=(h=e.autoInsertSpace)!=null?h:(v=o.value)==null?void 0:v.autoInsertSpace)!=null?C:!1}),d=k(()=>e.tag==="button"?{ariaDisabled:l.value||e.loading,disabled:l.value||e.loading,autofocus:e.autofocus,type:e.nativeType}:{}),p=k(()=>{var v;const h=(v=u.default)==null?void 0:v.call(u);if(f.value&&(h==null?void 0:h.length)===1){const C=h[0];if((C==null?void 0:C.type)===Ur){const g=C.children;return new RegExp("^\\p{Unified_Ideograph}{2}$","u").test(g.trim())}}return!1});return{_disabled:l,_size:a,_type:c,_ref:s,_props:d,shouldAddSpace:p,handleClick:v=>{e.nativeType==="reset"&&(r==null||r.resetFields()),t("click",v)}}},Oh=["default","primary","success","warning","info","danger","text",""],YB=["button","submit","reset"],Nh=Ne({size:gn,disabled:Boolean,type:{type:String,values:Oh,default:""},icon:{type:Dt},nativeType:{type:String,values:YB,default:"button"},loading:Boolean,loadingIcon:{type:Dt,default:()=>Er},plain:Boolean,text:Boolean,link:Boolean,bg:Boolean,autofocus:Boolean,round:Boolean,circle:Boolean,color:String,dark:Boolean,autoInsertSpace:{type:Boolean,default:void 0},tag:{type:Q([String,Object]),default:"button"}}),GB={click:e=>e instanceof MouseEvent};function Ln(e,t){XB(e)&&(e="100%");var n=JB(e);return e=t===360?e:Math.min(t,Math.max(0,parseFloat(e))),n&&(e=parseInt(String(e*t),10)/100),Math.abs(e-t)<1e-6?1:(t===360?e=(e<0?e%t+t:e%t)/parseFloat(String(t)):e=e%t/parseFloat(String(t)),e)}function gc(e){return Math.min(1,Math.max(0,e))}function XB(e){return typeof e=="string"&&e.indexOf(".")!==-1&&parseFloat(e)===1}function JB(e){return typeof e=="string"&&e.indexOf("%")!==-1}function ak(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function bc(e){return e<=1?"".concat(Number(e)*100,"%"):e}function Qa(e){return e.length===1?"0"+e:String(e)}function ZB(e,t,n){return{r:Ln(e,255)*255,g:Ln(t,255)*255,b:Ln(n,255)*255}}function I0(e,t,n){e=Ln(e,255),t=Ln(t,255),n=Ln(n,255);var o=Math.max(e,t,n),r=Math.min(e,t,n),a=0,l=0,s=(o+r)/2;if(o===r)l=0,a=0;else{var u=o-r;switch(l=s>.5?u/(2-o-r):u/(o+r),o){case e:a=(t-n)/u+(t1&&(n-=1),n<1/6?e+(t-e)*(6*n):n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function QB(e,t,n){var o,r,a;if(e=Ln(e,360),t=Ln(t,100),n=Ln(n,100),t===0)r=n,a=n,o=n;else{var l=n<.5?n*(1+t):n+t-n*t,s=2*n-l;o=mp(s,l,e+1/3),r=mp(s,l,e),a=mp(s,l,e-1/3)}return{r:o*255,g:r*255,b:a*255}}function M0(e,t,n){e=Ln(e,255),t=Ln(t,255),n=Ln(n,255);var o=Math.max(e,t,n),r=Math.min(e,t,n),a=0,l=o,s=o-r,u=o===0?0:s/o;if(o===r)a=0;else{switch(o){case e:a=(t-n)/s+(t>16,g:(e&65280)>>8,b:e&255}}var Ih={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",goldenrod:"#daa520",gold:"#ffd700",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavenderblush:"#fff0f5",lavender:"#e6e6fa",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};function rV(e){var t={r:0,g:0,b:0},n=1,o=null,r=null,a=null,l=!1,s=!1;return typeof e=="string"&&(e=sV(e)),typeof e=="object"&&(xr(e.r)&&xr(e.g)&&xr(e.b)?(t=ZB(e.r,e.g,e.b),l=!0,s=String(e.r).substr(-1)==="%"?"prgb":"rgb"):xr(e.h)&&xr(e.s)&&xr(e.v)?(o=bc(e.s),r=bc(e.v),t=eV(e.h,o,r),l=!0,s="hsv"):xr(e.h)&&xr(e.s)&&xr(e.l)&&(o=bc(e.s),a=bc(e.l),t=QB(e.h,o,a),l=!0,s="hsl"),Object.prototype.hasOwnProperty.call(e,"a")&&(n=e.a)),n=ak(n),{ok:l,format:e.format||s,r:Math.min(255,Math.max(t.r,0)),g:Math.min(255,Math.max(t.g,0)),b:Math.min(255,Math.max(t.b,0)),a:n}}var aV="[-\\+]?\\d+%?",lV="[-\\+]?\\d*\\.\\d+%?",ba="(?:".concat(lV,")|(?:").concat(aV,")"),vp="[\\s|\\(]+(".concat(ba,")[,|\\s]+(").concat(ba,")[,|\\s]+(").concat(ba,")\\s*\\)?"),gp="[\\s|\\(]+(".concat(ba,")[,|\\s]+(").concat(ba,")[,|\\s]+(").concat(ba,")[,|\\s]+(").concat(ba,")\\s*\\)?"),qo={CSS_UNIT:new RegExp(ba),rgb:new RegExp("rgb"+vp),rgba:new RegExp("rgba"+gp),hsl:new RegExp("hsl"+vp),hsla:new RegExp("hsla"+gp),hsv:new RegExp("hsv"+vp),hsva:new RegExp("hsva"+gp),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};function sV(e){if(e=e.trim().toLowerCase(),e.length===0)return!1;var t=!1;if(Ih[e])e=Ih[e],t=!0;else if(e==="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var n=qo.rgb.exec(e);return n?{r:n[1],g:n[2],b:n[3]}:(n=qo.rgba.exec(e),n?{r:n[1],g:n[2],b:n[3],a:n[4]}:(n=qo.hsl.exec(e),n?{h:n[1],s:n[2],l:n[3]}:(n=qo.hsla.exec(e),n?{h:n[1],s:n[2],l:n[3],a:n[4]}:(n=qo.hsv.exec(e),n?{h:n[1],s:n[2],v:n[3]}:(n=qo.hsva.exec(e),n?{h:n[1],s:n[2],v:n[3],a:n[4]}:(n=qo.hex8.exec(e),n?{r:fo(n[1]),g:fo(n[2]),b:fo(n[3]),a:P0(n[4]),format:t?"name":"hex8"}:(n=qo.hex6.exec(e),n?{r:fo(n[1]),g:fo(n[2]),b:fo(n[3]),format:t?"name":"hex"}:(n=qo.hex4.exec(e),n?{r:fo(n[1]+n[1]),g:fo(n[2]+n[2]),b:fo(n[3]+n[3]),a:P0(n[4]+n[4]),format:t?"name":"hex8"}:(n=qo.hex3.exec(e),n?{r:fo(n[1]+n[1]),g:fo(n[2]+n[2]),b:fo(n[3]+n[3]),format:t?"name":"hex"}:!1)))))))))}function xr(e){return!!qo.CSS_UNIT.exec(String(e))}var lk=function(){function e(t,n){t===void 0&&(t=""),n===void 0&&(n={});var o;if(t instanceof e)return t;typeof t=="number"&&(t=oV(t)),this.originalInput=t;var r=rV(t);this.originalInput=t,this.r=r.r,this.g=r.g,this.b=r.b,this.a=r.a,this.roundA=Math.round(100*this.a)/100,this.format=(o=n.format)!==null&&o!==void 0?o:r.format,this.gradientType=n.gradientType,this.r<1&&(this.r=Math.round(this.r)),this.g<1&&(this.g=Math.round(this.g)),this.b<1&&(this.b=Math.round(this.b)),this.isValid=r.ok}return e.prototype.isDark=function(){return this.getBrightness()<128},e.prototype.isLight=function(){return!this.isDark()},e.prototype.getBrightness=function(){var t=this.toRgb();return(t.r*299+t.g*587+t.b*114)/1e3},e.prototype.getLuminance=function(){var t=this.toRgb(),n,o,r,a=t.r/255,l=t.g/255,s=t.b/255;return a<=.03928?n=a/12.92:n=Math.pow((a+.055)/1.055,2.4),l<=.03928?o=l/12.92:o=Math.pow((l+.055)/1.055,2.4),s<=.03928?r=s/12.92:r=Math.pow((s+.055)/1.055,2.4),.2126*n+.7152*o+.0722*r},e.prototype.getAlpha=function(){return this.a},e.prototype.setAlpha=function(t){return this.a=ak(t),this.roundA=Math.round(100*this.a)/100,this},e.prototype.isMonochrome=function(){var t=this.toHsl().s;return t===0},e.prototype.toHsv=function(){var t=M0(this.r,this.g,this.b);return{h:t.h*360,s:t.s,v:t.v,a:this.a}},e.prototype.toHsvString=function(){var t=M0(this.r,this.g,this.b),n=Math.round(t.h*360),o=Math.round(t.s*100),r=Math.round(t.v*100);return this.a===1?"hsv(".concat(n,", ").concat(o,"%, ").concat(r,"%)"):"hsva(".concat(n,", ").concat(o,"%, ").concat(r,"%, ").concat(this.roundA,")")},e.prototype.toHsl=function(){var t=I0(this.r,this.g,this.b);return{h:t.h*360,s:t.s,l:t.l,a:this.a}},e.prototype.toHslString=function(){var t=I0(this.r,this.g,this.b),n=Math.round(t.h*360),o=Math.round(t.s*100),r=Math.round(t.l*100);return this.a===1?"hsl(".concat(n,", ").concat(o,"%, ").concat(r,"%)"):"hsla(".concat(n,", ").concat(o,"%, ").concat(r,"%, ").concat(this.roundA,")")},e.prototype.toHex=function(t){return t===void 0&&(t=!1),A0(this.r,this.g,this.b,t)},e.prototype.toHexString=function(t){return t===void 0&&(t=!1),"#"+this.toHex(t)},e.prototype.toHex8=function(t){return t===void 0&&(t=!1),tV(this.r,this.g,this.b,this.a,t)},e.prototype.toHex8String=function(t){return t===void 0&&(t=!1),"#"+this.toHex8(t)},e.prototype.toHexShortString=function(t){return t===void 0&&(t=!1),this.a===1?this.toHexString(t):this.toHex8String(t)},e.prototype.toRgb=function(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}},e.prototype.toRgbString=function(){var t=Math.round(this.r),n=Math.round(this.g),o=Math.round(this.b);return this.a===1?"rgb(".concat(t,", ").concat(n,", ").concat(o,")"):"rgba(".concat(t,", ").concat(n,", ").concat(o,", ").concat(this.roundA,")")},e.prototype.toPercentageRgb=function(){var t=function(n){return"".concat(Math.round(Ln(n,255)*100),"%")};return{r:t(this.r),g:t(this.g),b:t(this.b),a:this.a}},e.prototype.toPercentageRgbString=function(){var t=function(n){return Math.round(Ln(n,255)*100)};return this.a===1?"rgb(".concat(t(this.r),"%, ").concat(t(this.g),"%, ").concat(t(this.b),"%)"):"rgba(".concat(t(this.r),"%, ").concat(t(this.g),"%, ").concat(t(this.b),"%, ").concat(this.roundA,")")},e.prototype.toName=function(){if(this.a===0)return"transparent";if(this.a<1)return!1;for(var t="#"+A0(this.r,this.g,this.b,!1),n=0,o=Object.entries(Ih);n=0,a=!n&&r&&(t.startsWith("hex")||t==="name");return a?t==="name"&&this.a===0?this.toName():this.toRgbString():(t==="rgb"&&(o=this.toRgbString()),t==="prgb"&&(o=this.toPercentageRgbString()),(t==="hex"||t==="hex6")&&(o=this.toHexString()),t==="hex3"&&(o=this.toHexString(!0)),t==="hex4"&&(o=this.toHex8String(!0)),t==="hex8"&&(o=this.toHex8String()),t==="name"&&(o=this.toName()),t==="hsl"&&(o=this.toHslString()),t==="hsv"&&(o=this.toHsvString()),o||this.toHexString())},e.prototype.toNumber=function(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)},e.prototype.clone=function(){return new e(this.toString())},e.prototype.lighten=function(t){t===void 0&&(t=10);var n=this.toHsl();return n.l+=t/100,n.l=gc(n.l),new e(n)},e.prototype.brighten=function(t){t===void 0&&(t=10);var n=this.toRgb();return n.r=Math.max(0,Math.min(255,n.r-Math.round(255*-(t/100)))),n.g=Math.max(0,Math.min(255,n.g-Math.round(255*-(t/100)))),n.b=Math.max(0,Math.min(255,n.b-Math.round(255*-(t/100)))),new e(n)},e.prototype.darken=function(t){t===void 0&&(t=10);var n=this.toHsl();return n.l-=t/100,n.l=gc(n.l),new e(n)},e.prototype.tint=function(t){return t===void 0&&(t=10),this.mix("white",t)},e.prototype.shade=function(t){return t===void 0&&(t=10),this.mix("black",t)},e.prototype.desaturate=function(t){t===void 0&&(t=10);var n=this.toHsl();return n.s-=t/100,n.s=gc(n.s),new e(n)},e.prototype.saturate=function(t){t===void 0&&(t=10);var n=this.toHsl();return n.s+=t/100,n.s=gc(n.s),new e(n)},e.prototype.greyscale=function(){return this.desaturate(100)},e.prototype.spin=function(t){var n=this.toHsl(),o=(n.h+t)%360;return n.h=o<0?360+o:o,new e(n)},e.prototype.mix=function(t,n){n===void 0&&(n=50);var o=this.toRgb(),r=new e(t).toRgb(),a=n/100,l={r:(r.r-o.r)*a+o.r,g:(r.g-o.g)*a+o.g,b:(r.b-o.b)*a+o.b,a:(r.a-o.a)*a+o.a};return new e(l)},e.prototype.analogous=function(t,n){t===void 0&&(t=6),n===void 0&&(n=30);var o=this.toHsl(),r=360/n,a=[this];for(o.h=(o.h-(r*t>>1)+720)%360;--t;)o.h=(o.h+r)%360,a.push(new e(o));return a},e.prototype.complement=function(){var t=this.toHsl();return t.h=(t.h+180)%360,new e(t)},e.prototype.monochromatic=function(t){t===void 0&&(t=6);for(var n=this.toHsv(),o=n.h,r=n.s,a=n.v,l=[],s=1/t;t--;)l.push(new e({h:o,s:r,v:a})),a=(a+s)%1;return l},e.prototype.splitcomplement=function(){var t=this.toHsl(),n=t.h;return[this,new e({h:(n+72)%360,s:t.s,l:t.l}),new e({h:(n+216)%360,s:t.s,l:t.l})]},e.prototype.onBackground=function(t){var n=this.toRgb(),o=new e(t).toRgb(),r=n.a+o.a*(1-n.a);return new e({r:(n.r*n.a+o.r*o.a*(1-n.a))/r,g:(n.g*n.a+o.g*o.a*(1-n.a))/r,b:(n.b*n.a+o.b*o.a*(1-n.a))/r,a:r})},e.prototype.triad=function(){return this.polyad(3)},e.prototype.tetrad=function(){return this.polyad(4)},e.prototype.polyad=function(t){for(var n=this.toHsl(),o=n.h,r=[this],a=360/t,l=1;l{let o={},r=e.color;if(r){const a=r.match(/var\((.*?)\)/);a&&(r=window.getComputedStyle(window.document.documentElement).getPropertyValue(a[1]));const l=new lk(r),s=e.dark?l.tint(20).toString():ia(l,20);if(e.plain)o=n.cssVarBlock({"bg-color":e.dark?ia(l,90):l.tint(90).toString(),"text-color":r,"border-color":e.dark?ia(l,50):l.tint(50).toString(),"hover-text-color":`var(${n.cssVarName("color-white")})`,"hover-bg-color":r,"hover-border-color":r,"active-bg-color":s,"active-text-color":`var(${n.cssVarName("color-white")})`,"active-border-color":s}),t.value&&(o[n.cssVarBlockName("disabled-bg-color")]=e.dark?ia(l,90):l.tint(90).toString(),o[n.cssVarBlockName("disabled-text-color")]=e.dark?ia(l,50):l.tint(50).toString(),o[n.cssVarBlockName("disabled-border-color")]=e.dark?ia(l,80):l.tint(80).toString());else{const u=e.dark?ia(l,30):l.tint(30).toString(),c=l.isDark()?`var(${n.cssVarName("color-white")})`:`var(${n.cssVarName("color-black")})`;if(o=n.cssVarBlock({"bg-color":r,"text-color":c,"border-color":r,"hover-bg-color":u,"hover-text-color":c,"hover-border-color":u,"active-bg-color":s,"active-border-color":s}),t.value){const f=e.dark?ia(l,50):l.tint(50).toString();o[n.cssVarBlockName("disabled-bg-color")]=f,o[n.cssVarBlockName("disabled-text-color")]=e.dark?"rgba(255, 255, 255, 0.5)":`var(${n.cssVarName("color-white")})`,o[n.cssVarBlockName("disabled-border-color")]=f}}}return o})}const uV=Y({name:"ElButton"}),cV=Y({...uV,props:Nh,emits:GB,setup(e,{expose:t,emit:n}){const o=e,r=iV(o),a=Se("button"),{_ref:l,_size:s,_type:u,_disabled:c,_props:f,shouldAddSpace:d,handleClick:p}=qB(o,n),m=k(()=>[a.b(),a.m(u.value),a.m(s.value),a.is("disabled",c.value),a.is("loading",o.loading),a.is("plain",o.plain),a.is("round",o.round),a.is("circle",o.circle),a.is("text",o.text),a.is("link",o.link),a.is("has-bg",o.bg)]);return t({ref:l,size:s,type:u,disabled:c,shouldAddSpace:d}),(v,h)=>(T(),re(pt(v.tag),mt({ref_key:"_ref",ref:l},i(f),{class:i(m),style:i(r),onClick:i(p)}),{default:X(()=>[v.loading?(T(),V(Ve,{key:0},[v.$slots.loading?ie(v.$slots,"loading",{key:0}):(T(),re(i(ze),{key:1,class:N(i(a).is("loading"))},{default:X(()=>[(T(),re(pt(v.loadingIcon)))]),_:1},8,["class"]))],64)):v.icon||v.$slots.icon?(T(),re(i(ze),{key:1},{default:X(()=>[v.icon?(T(),re(pt(v.icon),{key:0})):ie(v.$slots,"icon",{key:1})]),_:3})):te("v-if",!0),v.$slots.default?(T(),V("span",{key:2,class:N({[i(a).em("text","expand")]:i(d)})},[ie(v.$slots,"default")],2)):te("v-if",!0)]),_:3},16,["class","style","onClick"]))}});var dV=Ie(cV,[["__file","button.vue"]]);const fV={size:Nh.size,type:Nh.type},pV=Y({name:"ElButtonGroup"}),hV=Y({...pV,props:fV,setup(e){const t=e;yt(rk,Et({size:Lt(t,"size"),type:Lt(t,"type")}));const n=Se("button");return(o,r)=>(T(),V("div",{class:N(i(n).b("group"))},[ie(o.$slots,"default")],2))}});var sk=Ie(hV,[["__file","button-group.vue"]]);const $n=ut(dV,{ButtonGroup:sk}),ik=tn(sk);var rr=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function ta(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function mV(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var n=function o(){return this instanceof o?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach(function(o){var r=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(n,o,r.get?r:{enumerable:!0,get:function(){return e[o]}})}),n}var uk={exports:{}};(function(e,t){(function(n,o){e.exports=o()})(rr,function(){var n=1e3,o=6e4,r=36e5,a="millisecond",l="second",s="minute",u="hour",c="day",f="week",d="month",p="quarter",m="year",v="date",h="Invalid Date",C=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,y={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(j){var W=["th","st","nd","rd"],L=j%100;return"["+j+(W[(L-20)%10]||W[L]||W[0])+"]"}},_=function(j,W,L){var P=String(j);return!P||P.length>=W?j:""+Array(W+1-P.length).join(L)+j},b={s:_,z:function(j){var W=-j.utcOffset(),L=Math.abs(W),P=Math.floor(L/60),x=L%60;return(W<=0?"+":"-")+_(P,2,"0")+":"+_(x,2,"0")},m:function j(W,L){if(W.date()1)return j(H[0])}else{var G=W.name;S[G]=W,x=G}return!P&&x&&(w=x),x||!P&&w},A=function(j,W){if($(j))return j.clone();var L=typeof W=="object"?W:{};return L.date=j,L.args=arguments,new D(L)},M=b;M.l=O,M.i=$,M.w=function(j,W){return A(j,{locale:W.$L,utc:W.$u,x:W.$x,$offset:W.$offset})};var D=function(){function j(L){this.$L=O(L.locale,null,!0),this.parse(L),this.$x=this.$x||L.x||{},this[E]=!0}var W=j.prototype;return W.parse=function(L){this.$d=function(P){var x=P.date,I=P.utc;if(x===null)return new Date(NaN);if(M.u(x))return new Date;if(x instanceof Date)return new Date(x);if(typeof x=="string"&&!/Z$/i.test(x)){var H=x.match(C);if(H){var G=H[2]-1||0,J=(H[7]||"0").substring(0,3);return I?new Date(Date.UTC(H[1],G,H[3]||1,H[4]||0,H[5]||0,H[6]||0,J)):new Date(H[1],G,H[3]||1,H[4]||0,H[5]||0,H[6]||0,J)}}return new Date(x)}(L),this.init()},W.init=function(){var L=this.$d;this.$y=L.getFullYear(),this.$M=L.getMonth(),this.$D=L.getDate(),this.$W=L.getDay(),this.$H=L.getHours(),this.$m=L.getMinutes(),this.$s=L.getSeconds(),this.$ms=L.getMilliseconds()},W.$utils=function(){return M},W.isValid=function(){return this.$d.toString()!==h},W.isSame=function(L,P){var x=A(L);return this.startOf(P)<=x&&x<=this.endOf(P)},W.isAfter=function(L,P){return A(L)68?1900:2e3)},f=function(C){return function(g){this[C]=+g}},d=[/[+-]\d\d:?(\d\d)?|Z/,function(C){(this.zone||(this.zone={})).offset=function(g){if(!g||g==="Z")return 0;var y=g.match(/([+-]|\d\d)/g),_=60*y[1]+(+y[2]||0);return _===0?0:y[0]==="+"?-_:_}(C)}],p=function(C){var g=u[C];return g&&(g.indexOf?g:g.s.concat(g.f))},m=function(C,g){var y,_=u.meridiem;if(_){for(var b=1;b<=24;b+=1)if(C.indexOf(_(b,0,g))>-1){y=b>12;break}}else y=C===(g?"pm":"PM");return y},v={A:[s,function(C){this.afternoon=m(C,!1)}],a:[s,function(C){this.afternoon=m(C,!0)}],Q:[r,function(C){this.month=3*(C-1)+1}],S:[r,function(C){this.milliseconds=100*+C}],SS:[a,function(C){this.milliseconds=10*+C}],SSS:[/\d{3}/,function(C){this.milliseconds=+C}],s:[l,f("seconds")],ss:[l,f("seconds")],m:[l,f("minutes")],mm:[l,f("minutes")],H:[l,f("hours")],h:[l,f("hours")],HH:[l,f("hours")],hh:[l,f("hours")],D:[l,f("day")],DD:[a,f("day")],Do:[s,function(C){var g=u.ordinal,y=C.match(/\d+/);if(this.day=y[0],g)for(var _=1;_<=31;_+=1)g(_).replace(/\[|\]/g,"")===C&&(this.day=_)}],w:[l,f("week")],ww:[a,f("week")],M:[l,f("month")],MM:[a,f("month")],MMM:[s,function(C){var g=p("months"),y=(p("monthsShort")||g.map(function(_){return _.slice(0,3)})).indexOf(C)+1;if(y<1)throw new Error;this.month=y%12||y}],MMMM:[s,function(C){var g=p("months").indexOf(C)+1;if(g<1)throw new Error;this.month=g%12||g}],Y:[/[+-]?\d+/,f("year")],YY:[a,function(C){this.year=c(C)}],YYYY:[/\d{4}/,f("year")],Z:d,ZZ:d};function h(C){var g,y;g=C,y=u&&u.formats;for(var _=(C=g.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(A,M,D){var U=D&&D.toUpperCase();return M||y[D]||n[D]||y[U].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(j,W,L){return W||L.slice(1)})})).match(o),b=_.length,w=0;w-1)return new Date((x==="X"?1e3:1)*P);var G=h(x)(P),J=G.year,ee=G.month,fe=G.day,Te=G.hours,oe=G.minutes,ke=G.seconds,ae=G.milliseconds,Oe=G.zone,we=G.week,ge=new Date,q=fe||(J||ee?1:ge.getDate()),B=J||ge.getFullYear(),z=0;J&&!ee||(z=ee>0?ee-1:ge.getMonth());var Z,ue=Te||0,se=oe||0,me=ke||0,_e=ae||0;return Oe?new Date(Date.UTC(B,z,q,ue,se,me,_e+60*Oe.offset*1e3)):I?new Date(Date.UTC(B,z,q,ue,se,me,_e)):(Z=new Date(B,z,q,ue,se,me,_e),we&&(Z=H(Z).week(we).toDate()),Z)}catch{return new Date("")}}(S,O,E,y),this.init(),U&&U!==!0&&(this.$L=this.locale(U).$L),D&&S!=this.format(O)&&(this.$d=new Date("")),u={}}else if(O instanceof Array)for(var j=O.length,W=1;W<=j;W+=1){$[1]=O[W-1];var L=y.apply(this,$);if(L.isValid()){this.$d=L.$d,this.$L=L.$L,this.init();break}W===j&&(this.$d=new Date(""))}else b.call(this,w)}}})})(ck);var gV=ck.exports;const ig=ta(gV),R0=["hours","minutes","seconds"],Mh="HH:mm:ss",Zl="YYYY-MM-DD",bV={date:Zl,dates:Zl,week:"gggg[w]ww",year:"YYYY",years:"YYYY",month:"YYYY-MM",months:"YYYY-MM",datetime:`${Zl} ${Mh}`,monthrange:"YYYY-MM",daterange:Zl,datetimerange:`${Zl} ${Mh}`},bp=(e,t)=>[e>0?e-1:void 0,e,eArray.from(Array.from({length:e}).keys()),dk=e=>e.replace(/\W?m{1,2}|\W?ZZ/g,"").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi,"").trim(),fk=e=>e.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?Y{2,4}/g,"").trim(),L0=function(e,t){const n=hl(e),o=hl(t);return n&&o?e.getTime()===t.getTime():!n&&!o?e===t:!1},x0=function(e,t){const n=Pe(e),o=Pe(t);return n&&o?e.length!==t.length?!1:e.every((r,a)=>L0(r,t[a])):!n&&!o?L0(e,t):!1},D0=function(e,t,n){const o=Io(t)||t==="x"?ct(e).locale(n):ct(e,t).locale(n);return o.isValid()?o:void 0},F0=function(e,t,n){return Io(t)?e:t==="x"?+e:ct(e).locale(n).format(t)},yp=(e,t)=>{var n;const o=[],r=t==null?void 0:t();for(let a=0;a({})},modelValue:{type:Q([Date,Array,String,Number]),default:""},rangeSeparator:{type:String,default:"-"},startPlaceholder:String,endPlaceholder:String,defaultValue:{type:Q([Date,Array])},defaultTime:{type:Q([Date,Array])},isRange:Boolean,...pk,disabledDate:{type:Function},cellClassName:{type:Function},shortcuts:{type:Array,default:()=>[]},arrowControl:Boolean,label:{type:String,default:void 0},tabindex:{type:Q([String,Number]),default:0},validateEvent:{type:Boolean,default:!0},unlinkPanels:Boolean,...ei,...An(["ariaLabel"])}),yV=["id","name","placeholder","value","disabled","readonly"],wV=["id","name","placeholder","value","disabled","readonly"],_V=Y({name:"Picker"}),CV=Y({..._V,props:ug,emits:["update:modelValue","change","focus","blur","clear","calendar-change","panel-change","visible-change","keydown"],setup(e,{expose:t,emit:n}){const o=e,r=xa(),{lang:a}=$t(),l=Se("date"),s=Se("input"),u=Se("range"),{form:c,formItem:f}=qn(),d=De("ElPopperOptions",{}),{valueOnClear:p}=wf(o,null),m=R(),v=R(),h=R(!1),C=R(!1),g=R(null);let y=!1,_=!1;const b=k(()=>[l.b("editor"),l.bm("editor",o.type),s.e("wrapper"),l.is("disabled",ee.value),l.is("active",h.value),u.b("editor"),$e?u.bm("editor",$e.value):"",r.class]),w=k(()=>[s.e("icon"),u.e("close-icon"),q.value?"":u.e("close-icon--hidden")]);ve(h,pe=>{pe?We(()=>{pe&&(g.value=o.modelValue)}):(de.value=null,We(()=>{S(o.modelValue)}))});const S=(pe,Ye)=>{(Ye||!x0(pe,g.value))&&(n("change",pe),o.validateEvent&&(f==null||f.validate("change").catch(_t=>void 0)))},E=pe=>{if(!x0(o.modelValue,pe)){let Ye;Pe(pe)?Ye=pe.map(_t=>F0(_t,o.valueFormat,a.value)):pe&&(Ye=F0(pe,o.valueFormat,a.value)),n("update:modelValue",pe&&Ye,a.value)}},$=pe=>{n("keydown",pe)},O=k(()=>{if(v.value){const pe=_e.value?v.value:v.value.$el;return Array.from(pe.querySelectorAll("input"))}return[]}),A=(pe,Ye,_t)=>{const Kt=O.value;Kt.length&&(!_t||_t==="min"?(Kt[0].setSelectionRange(pe,Ye),Kt[0].focus()):_t==="max"&&(Kt[1].setSelectionRange(pe,Ye),Kt[1].focus()))},M=()=>{I(!0,!0),We(()=>{_=!1})},D=(pe="",Ye=!1)=>{Ye||(_=!0),h.value=Ye;let _t;Pe(pe)?_t=pe.map(Kt=>Kt.toDate()):_t=pe&&pe.toDate(),de.value=null,E(_t)},U=()=>{C.value=!0},j=()=>{n("visible-change",!0)},W=pe=>{(pe==null?void 0:pe.key)===Ue.esc&&I(!0,!0)},L=()=>{C.value=!1,h.value=!1,_=!1,n("visible-change",!1)},P=()=>{h.value=!0},x=()=>{h.value=!1},I=(pe=!0,Ye=!1)=>{_=Ye;const[_t,Kt]=i(O);let Jt=_t;!pe&&_e.value&&(Jt=Kt),Jt&&Jt.focus()},H=pe=>{o.readonly||ee.value||h.value||_||(h.value=!0,n("focus",pe))};let G;const J=pe=>{const Ye=async()=>{setTimeout(()=>{var _t;G===Ye&&(!((_t=m.value)!=null&&_t.isFocusInsideContent()&&!y)&&O.value.filter(Kt=>Kt.contains(document.activeElement)).length===0&&(xe(),h.value=!1,n("blur",pe),o.validateEvent&&(f==null||f.validate("blur").catch(Kt=>void 0))),y=!1)},0)};G=Ye,Ye()},ee=k(()=>o.disabled||(c==null?void 0:c.disabled)),fe=k(()=>{let pe;if(z.value?ne.value.getDefaultValue&&(pe=ne.value.getDefaultValue()):Pe(o.modelValue)?pe=o.modelValue.map(Ye=>D0(Ye,o.valueFormat,a.value)):pe=D0(o.modelValue,o.valueFormat,a.value),ne.value.getRangeAvailableTime){const Ye=ne.value.getRangeAvailableTime(pe);Wn(Ye,pe)||(pe=Ye,E(Pe(pe)?pe.map(_t=>_t.toDate()):pe.toDate()))}return Pe(pe)&&pe.some(Ye=>!Ye)&&(pe=[]),pe}),Te=k(()=>{if(!ne.value.panelReady)return"";const pe=He(fe.value);return Pe(de.value)?[de.value[0]||pe&&pe[0]||"",de.value[1]||pe&&pe[1]||""]:de.value!==null?de.value:!ke.value&&z.value||!h.value&&z.value?"":pe?ae.value||Oe.value||we.value?pe.join(", "):pe:""}),oe=k(()=>o.type.includes("time")),ke=k(()=>o.type.startsWith("time")),ae=k(()=>o.type==="dates"),Oe=k(()=>o.type==="months"),we=k(()=>o.type==="years"),ge=k(()=>o.prefixIcon||(oe.value?qC:a4)),q=R(!1),B=pe=>{o.readonly||ee.value||(q.value&&(pe.stopPropagation(),M(),E(p.value),S(p.value,!0),q.value=!1,h.value=!1,ne.value.handleClear&&ne.value.handleClear()),n("clear"))},z=k(()=>{const{modelValue:pe}=o;return!pe||Pe(pe)&&!pe.filter(Boolean).length}),Z=async pe=>{var Ye;o.readonly||ee.value||(((Ye=pe.target)==null?void 0:Ye.tagName)!=="INPUT"||O.value.includes(document.activeElement))&&(h.value=!0)},ue=()=>{o.readonly||ee.value||!z.value&&o.clearable&&(q.value=!0)},se=()=>{q.value=!1},me=pe=>{var Ye;o.readonly||ee.value||(((Ye=pe.touches[0].target)==null?void 0:Ye.tagName)!=="INPUT"||O.value.includes(document.activeElement))&&(h.value=!0)},_e=k(()=>o.type.includes("range")),$e=hn(),Ce=k(()=>{var pe,Ye;return(Ye=(pe=i(m))==null?void 0:pe.popperRef)==null?void 0:Ye.contentRef}),ce=k(()=>{var pe;return i(_e)?i(v):(pe=i(v))==null?void 0:pe.$el});cv(ce,pe=>{const Ye=i(Ce),_t=i(ce);Ye&&(pe.target===Ye||pe.composedPath().includes(Ye))||pe.target===_t||pe.composedPath().includes(_t)||(h.value=!1)});const de=R(null),xe=()=>{if(de.value){const pe=he(Te.value);pe&&et(pe)&&(E(Pe(pe)?pe.map(Ye=>Ye.toDate()):pe.toDate()),de.value=null)}de.value===""&&(E(p.value),S(p.value),de.value=null)},he=pe=>pe?ne.value.parseUserInput(pe):null,He=pe=>pe?ne.value.formatToString(pe):null,et=pe=>ne.value.isValidValue(pe),rt=async pe=>{if(o.readonly||ee.value)return;const{code:Ye}=pe;if($(pe),Ye===Ue.esc){h.value===!0&&(h.value=!1,pe.preventDefault(),pe.stopPropagation());return}if(Ye===Ue.down&&(ne.value.handleFocusPicker&&(pe.preventDefault(),pe.stopPropagation()),h.value===!1&&(h.value=!0,await We()),ne.value.handleFocusPicker)){ne.value.handleFocusPicker();return}if(Ye===Ue.tab){y=!0;return}if(Ye===Ue.enter||Ye===Ue.numpadEnter){(de.value===null||de.value===""||et(he(Te.value)))&&(xe(),h.value=!1),pe.stopPropagation();return}if(de.value){pe.stopPropagation();return}ne.value.handleKeydownInput&&ne.value.handleKeydownInput(pe)},wt=pe=>{de.value=pe,h.value||(h.value=!0)},Ze=pe=>{const Ye=pe.target;de.value?de.value=[Ye.value,de.value[1]]:de.value=[Ye.value,null]},st=pe=>{const Ye=pe.target;de.value?de.value=[de.value[0],Ye.value]:de.value=[null,Ye.value]},Ee=()=>{var pe;const Ye=de.value,_t=he(Ye&&Ye[0]),Kt=i(fe);if(_t&&_t.isValid()){de.value=[He(_t),((pe=Te.value)==null?void 0:pe[1])||null];const Jt=[_t,Kt&&(Kt[1]||null)];et(Jt)&&(E(Jt),de.value=null)}},ye=()=>{var pe;const Ye=i(de),_t=he(Ye&&Ye[1]),Kt=i(fe);if(_t&&_t.isValid()){de.value=[((pe=i(Te))==null?void 0:pe[0])||null,He(_t)];const Jt=[Kt&&Kt[0],_t];et(Jt)&&(E(Jt),de.value=null)}},ne=R({}),be=pe=>{ne.value[pe[0]]=pe[1],ne.value.panelReady=!0},Fe=pe=>{n("calendar-change",pe)},vt=(pe,Ye,_t)=>{n("panel-change",pe,Ye,_t)};return yt("EP_PICKER_BASE",{props:o}),wn({from:"label",replacement:"aria-label",version:"2.8.0",scope:"el-time-picker",ref:"https://element-plus.org/en-US/component/time-picker.html"},k(()=>!!o.label)),t({focus:I,handleFocusInput:H,handleBlurInput:J,handleOpen:P,handleClose:x,onPick:D}),(pe,Ye)=>(T(),re(i(Un),mt({ref_key:"refPopper",ref:m,visible:h.value,effect:"light",pure:"",trigger:"click"},pe.$attrs,{role:"dialog",teleported:"",transition:`${i(l).namespace.value}-zoom-in-top`,"popper-class":[`${i(l).namespace.value}-picker__popper`,pe.popperClass],"popper-options":i(d),"fallback-placements":["bottom","top","right","left"],"gpu-acceleration":!1,"stop-popper-mouse-event":!1,"hide-after":0,persistent:"",onBeforeShow:U,onShow:j,onHide:L}),{default:X(()=>[i(_e)?(T(),V("div",{key:1,ref_key:"inputRef",ref:v,class:N(i(b)),style:je(pe.$attrs.style),onClick:H,onMouseenter:ue,onMouseleave:se,onTouchstartPassive:me,onKeydown:rt},[i(ge)?(T(),re(i(ze),{key:0,class:N([i(s).e("icon"),i(u).e("icon")]),onMousedown:Qe(Z,["prevent"]),onTouchstartPassive:me},{default:X(()=>[(T(),re(pt(i(ge))))]),_:1},8,["class","onMousedown"])):te("v-if",!0),F("input",{id:pe.id&&pe.id[0],autocomplete:"off",name:pe.name&&pe.name[0],placeholder:pe.startPlaceholder,value:i(Te)&&i(Te)[0],disabled:i(ee),readonly:!pe.editable||pe.readonly,class:N(i(u).b("input")),onMousedown:Z,onInput:Ze,onChange:Ee,onFocus:H,onBlur:J},null,42,yV),ie(pe.$slots,"range-separator",{},()=>[F("span",{class:N(i(u).b("separator"))},le(pe.rangeSeparator),3)]),F("input",{id:pe.id&&pe.id[1],autocomplete:"off",name:pe.name&&pe.name[1],placeholder:pe.endPlaceholder,value:i(Te)&&i(Te)[1],disabled:i(ee),readonly:!pe.editable||pe.readonly,class:N(i(u).b("input")),onMousedown:Z,onFocus:H,onBlur:J,onInput:st,onChange:ye},null,42,wV),pe.clearIcon?(T(),re(i(ze),{key:1,class:N(i(w)),onClick:B},{default:X(()=>[(T(),re(pt(pe.clearIcon)))]),_:1},8,["class"])):te("v-if",!0)],38)):(T(),re(i(zn),{key:0,id:pe.id,ref_key:"inputRef",ref:v,"container-role":"combobox","model-value":i(Te),name:pe.name,size:i($e),disabled:i(ee),placeholder:pe.placeholder,class:N([i(l).b("editor"),i(l).bm("editor",pe.type),pe.$attrs.class]),style:je(pe.$attrs.style),readonly:!pe.editable||pe.readonly||i(ae)||i(Oe)||i(we)||pe.type==="week","aria-label":pe.label||pe.ariaLabel,tabindex:pe.tabindex,"validate-event":!1,onInput:wt,onFocus:H,onBlur:J,onKeydown:rt,onChange:xe,onMousedown:Z,onMouseenter:ue,onMouseleave:se,onTouchstartPassive:me,onClick:Ye[0]||(Ye[0]=Qe(()=>{},["stop"]))},{prefix:X(()=>[i(ge)?(T(),re(i(ze),{key:0,class:N(i(s).e("icon")),onMousedown:Qe(Z,["prevent"]),onTouchstartPassive:me},{default:X(()=>[(T(),re(pt(i(ge))))]),_:1},8,["class","onMousedown"])):te("v-if",!0)]),suffix:X(()=>[q.value&&pe.clearIcon?(T(),re(i(ze),{key:0,class:N(`${i(s).e("icon")} clear-icon`),onClick:Qe(B,["stop"])},{default:X(()=>[(T(),re(pt(pe.clearIcon)))]),_:1},8,["class","onClick"])):te("v-if",!0)]),_:1},8,["id","model-value","name","size","disabled","placeholder","class","style","readonly","aria-label","tabindex","onKeydown"]))]),content:X(()=>[ie(pe.$slots,"default",{visible:h.value,actualVisible:C.value,parsedValue:i(fe),format:pe.format,dateFormat:pe.dateFormat,timeFormat:pe.timeFormat,unlinkPanels:pe.unlinkPanels,type:pe.type,defaultValue:pe.defaultValue,onPick:D,onSelectRange:A,onSetPickerOption:be,onCalendarChange:Fe,onPanelChange:vt,onKeydown:W,onMousedown:Ye[1]||(Ye[1]=Qe(()=>{},["stop"]))})]),_:3},16,["visible","transition","popper-class","popper-options"]))}});var mk=Ie(CV,[["__file","picker.vue"]]);const SV=Ne({...hk,datetimeRole:String,parsedValue:{type:Q(Object)}}),vk=({getAvailableHours:e,getAvailableMinutes:t,getAvailableSeconds:n})=>{const o=(l,s,u,c)=>{const f={hour:e,minute:t,second:n};let d=l;return["hour","minute","second"].forEach(p=>{if(f[p]){let m;const v=f[p];switch(p){case"minute":{m=v(d.hour(),s,c);break}case"second":{m=v(d.hour(),d.minute(),s,c);break}default:{m=v(s,c);break}}if(m!=null&&m.length&&!m.includes(d[p]())){const h=u?0:m.length-1;d=d[p](m[h])}}}),d},r={};return{timePickerOptions:r,getAvailableTime:o,onSetOption:([l,s])=>{r[l]=s}}},wp=e=>{const t=(o,r)=>o||r,n=o=>o!==!0;return e.map(t).filter(n)},gk=(e,t,n)=>({getHoursList:(l,s)=>yp(24,e&&(()=>e==null?void 0:e(l,s))),getMinutesList:(l,s,u)=>yp(60,t&&(()=>t==null?void 0:t(l,s,u))),getSecondsList:(l,s,u,c)=>yp(60,n&&(()=>n==null?void 0:n(l,s,u,c)))}),bk=(e,t,n)=>{const{getHoursList:o,getMinutesList:r,getSecondsList:a}=gk(e,t,n);return{getAvailableHours:(c,f)=>wp(o(c,f)),getAvailableMinutes:(c,f,d)=>wp(r(c,f,d)),getAvailableSeconds:(c,f,d,p)=>wp(a(c,f,d,p))}},yk=e=>{const t=R(e.parsedValue);return ve(()=>e.visible,n=>{n||(t.value=e.parsedValue)}),t},ha=new Map;let B0;Ct&&(document.addEventListener("mousedown",e=>B0=e),document.addEventListener("mouseup",e=>{for(const t of ha.values())for(const{documentHandler:n}of t)n(e,B0)}));function V0(e,t){let n=[];return Array.isArray(t.arg)?n=t.arg:Fo(t.arg)&&n.push(t.arg),function(o,r){const a=t.instance.popperRef,l=o.target,s=r==null?void 0:r.target,u=!t||!t.instance,c=!l||!s,f=e.contains(l)||e.contains(s),d=e===l,p=n.length&&n.some(v=>v==null?void 0:v.contains(l))||n.length&&n.includes(s),m=a&&(a.contains(l)||a.contains(s));u||c||f||d||p||m||t.value(o,r)}}const Yr={beforeMount(e,t){ha.has(e)||ha.set(e,[]),ha.get(e).push({documentHandler:V0(e,t),bindingFn:t.value})},updated(e,t){ha.has(e)||ha.set(e,[]);const n=ha.get(e),o=n.findIndex(a=>a.bindingFn===t.oldValue),r={documentHandler:V0(e,t),bindingFn:t.value};o>=0?n.splice(o,1,r):n.push(r)},unmounted(e){ha.delete(e)}},kV=100,EV=600,wd={beforeMount(e,t){const n=t.value,{interval:o=kV,delay:r=EV}=Xe(n)?{}:n;let a,l;const s=()=>Xe(n)?n():n.handler(),u=()=>{l&&(clearTimeout(l),l=void 0),a&&(clearInterval(a),a=void 0)};e.addEventListener("mousedown",c=>{c.button===0&&(u(),s(),document.addEventListener("mouseup",()=>u(),{once:!0}),l=setTimeout(()=>{a=setInterval(()=>{s()},o)},r))})}},Ah="_trap-focus-children",el=[],H0=e=>{if(el.length===0)return;const t=el[el.length-1][Ah];if(t.length>0&&e.code===Ue.tab){if(t.length===1){e.preventDefault(),document.activeElement!==t[0]&&t[0].focus();return}const n=e.shiftKey,o=e.target===t[0],r=e.target===t[t.length-1];o&&n&&(e.preventDefault(),t[t.length-1].focus()),r&&!n&&(e.preventDefault(),t[0].focus())}},TV={beforeMount(e){e[Ah]=Xb(e),el.push(e),el.length<=1&&document.addEventListener("keydown",H0)},updated(e){We(()=>{e[Ah]=Xb(e)})},unmounted(){el.shift(),el.length===0&&document.removeEventListener("keydown",H0)}};var z0=!1,Ga,Ph,Rh,Rc,Lc,wk,xc,Lh,xh,Dh,_k,Fh,Bh,Ck,Sk;function no(){if(!z0){z0=!0;var e=navigator.userAgent,t=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(e),n=/(Mac OS X)|(Windows)|(Linux)/.exec(e);if(Fh=/\b(iPhone|iP[ao]d)/.exec(e),Bh=/\b(iP[ao]d)/.exec(e),Dh=/Android/i.exec(e),Ck=/FBAN\/\w+;/i.exec(e),Sk=/Mobile/i.exec(e),_k=!!/Win64/.exec(e),t){Ga=t[1]?parseFloat(t[1]):t[5]?parseFloat(t[5]):NaN,Ga&&document&&document.documentMode&&(Ga=document.documentMode);var o=/(?:Trident\/(\d+.\d+))/.exec(e);wk=o?parseFloat(o[1])+4:Ga,Ph=t[2]?parseFloat(t[2]):NaN,Rh=t[3]?parseFloat(t[3]):NaN,Rc=t[4]?parseFloat(t[4]):NaN,Rc?(t=/(?:Chrome\/(\d+\.\d+))/.exec(e),Lc=t&&t[1]?parseFloat(t[1]):NaN):Lc=NaN}else Ga=Ph=Rh=Lc=Rc=NaN;if(n){if(n[1]){var r=/(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(e);xc=r?parseFloat(r[1].replace("_",".")):!0}else xc=!1;Lh=!!n[2],xh=!!n[3]}else xc=Lh=xh=!1}}var Vh={ie:function(){return no()||Ga},ieCompatibilityMode:function(){return no()||wk>Ga},ie64:function(){return Vh.ie()&&_k},firefox:function(){return no()||Ph},opera:function(){return no()||Rh},webkit:function(){return no()||Rc},safari:function(){return Vh.webkit()},chrome:function(){return no()||Lc},windows:function(){return no()||Lh},osx:function(){return no()||xc},linux:function(){return no()||xh},iphone:function(){return no()||Fh},mobile:function(){return no()||Fh||Bh||Dh||Sk},nativeApp:function(){return no()||Ck},android:function(){return no()||Dh},ipad:function(){return no()||Bh}},$V=Vh,yc=!!(typeof window<"u"&&window.document&&window.document.createElement),OV={canUseDOM:yc,canUseWorkers:typeof Worker<"u",canUseEventListeners:yc&&!!(window.addEventListener||window.attachEvent),canUseViewport:yc&&!!window.screen,isInWorker:!yc},kk=OV,Ek;kk.canUseDOM&&(Ek=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0);function NV(e,t){if(!kk.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,o=n in document;if(!o){var r=document.createElement("div");r.setAttribute(n,"return;"),o=typeof r[n]=="function"}return!o&&Ek&&e==="wheel"&&(o=document.implementation.hasFeature("Events.wheel","3.0")),o}var IV=NV,j0=10,W0=40,K0=800;function Tk(e){var t=0,n=0,o=0,r=0;return"detail"in e&&(n=e.detail),"wheelDelta"in e&&(n=-e.wheelDelta/120),"wheelDeltaY"in e&&(n=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=n,n=0),o=t*j0,r=n*j0,"deltaY"in e&&(r=e.deltaY),"deltaX"in e&&(o=e.deltaX),(o||r)&&e.deltaMode&&(e.deltaMode==1?(o*=W0,r*=W0):(o*=K0,r*=K0)),o&&!t&&(t=o<1?-1:1),r&&!n&&(n=r<1?-1:1),{spinX:t,spinY:n,pixelX:o,pixelY:r}}Tk.getEventType=function(){return $V.firefox()?"DOMMouseScroll":IV("wheel")?"wheel":"mousewheel"};var MV=Tk;/** +* Checks if an event is supported in the current execution environment. +* +* NOTE: This will not work correctly for non-generic events such as `change`, +* `reset`, `load`, `error`, and `select`. +* +* Borrows from Modernizr. +* +* @param {string} eventNameSuffix Event name, e.g. "click". +* @param {?boolean} capture Check if the capture phase is supported. +* @return {boolean} True if the event is supported. +* @internal +* @license Modernizr 3.0.0pre (Custom Build) | MIT +*/const AV=function(e,t){if(e&&e.addEventListener){const n=function(o){const r=MV(o);t&&Reflect.apply(t,this,[o,r])};e.addEventListener("wheel",n,{passive:!0})}},PV={beforeMount(e,t){AV(e,t.value)}},RV=Ne({role:{type:String,required:!0},spinnerDate:{type:Q(Object),required:!0},showSeconds:{type:Boolean,default:!0},arrowControl:Boolean,amPmMode:{type:Q(String),default:""},...pk}),LV=["onClick"],xV=["onMouseenter"],DV=Y({__name:"basic-time-spinner",props:RV,emits:["change","select-range","set-option"],setup(e,{emit:t}){const n=e,o=Se("time"),{getHoursList:r,getMinutesList:a,getSecondsList:l}=gk(n.disabledHours,n.disabledMinutes,n.disabledSeconds);let s=!1;const u=R(),c=R(),f=R(),d=R(),p={hours:c,minutes:f,seconds:d},m=k(()=>n.showSeconds?R0:R0.slice(0,2)),v=k(()=>{const{spinnerDate:I}=n,H=I.hour(),G=I.minute(),J=I.second();return{hours:H,minutes:G,seconds:J}}),h=k(()=>{const{hours:I,minutes:H}=i(v);return{hours:r(n.role),minutes:a(I,n.role),seconds:l(I,H,n.role)}}),C=k(()=>{const{hours:I,minutes:H,seconds:G}=i(v);return{hours:bp(I,23),minutes:bp(H,59),seconds:bp(G,59)}}),g=co(I=>{s=!1,b(I)},200),y=I=>{if(!!!n.amPmMode)return"";const G=n.amPmMode==="A";let J=I<12?" am":" pm";return G&&(J=J.toUpperCase()),J},_=I=>{let H;switch(I){case"hours":H=[0,2];break;case"minutes":H=[3,5];break;case"seconds":H=[6,8];break}const[G,J]=H;t("select-range",G,J),u.value=I},b=I=>{E(I,i(v)[I])},w=()=>{b("hours"),b("minutes"),b("seconds")},S=I=>I.querySelector(`.${o.namespace.value}-scrollbar__wrap`),E=(I,H)=>{if(n.arrowControl)return;const G=i(p[I]);G&&G.$el&&(S(G.$el).scrollTop=Math.max(0,H*$(I)))},$=I=>{const H=i(p[I]),G=H==null?void 0:H.$el.querySelector("li");return G&&Number.parseFloat(ga(G,"height"))||0},O=()=>{M(1)},A=()=>{M(-1)},M=I=>{u.value||_("hours");const H=u.value,G=i(v)[H],J=u.value==="hours"?24:60,ee=D(H,G,I,J);U(H,ee),E(H,ee),We(()=>_(H))},D=(I,H,G,J)=>{let ee=(H+G+J)%J;const fe=i(h)[I];for(;fe[ee]&&ee!==H;)ee=(ee+G+J)%J;return ee},U=(I,H)=>{if(i(h)[I][H])return;const{hours:ee,minutes:fe,seconds:Te}=i(v);let oe;switch(I){case"hours":oe=n.spinnerDate.hour(H).minute(fe).second(Te);break;case"minutes":oe=n.spinnerDate.hour(ee).minute(H).second(Te);break;case"seconds":oe=n.spinnerDate.hour(ee).minute(fe).second(H);break}t("change",oe)},j=(I,{value:H,disabled:G})=>{G||(U(I,H),_(I),E(I,H))},W=I=>{s=!0,g(I);const H=Math.min(Math.round((S(i(p[I]).$el).scrollTop-(L(I)*.5-10)/$(I)+3)/$(I)),I==="hours"?23:59);U(I,H)},L=I=>i(p[I]).$el.offsetHeight,P=()=>{const I=H=>{const G=i(p[H]);G&&G.$el&&(S(G.$el).onscroll=()=>{W(H)})};I("hours"),I("minutes"),I("seconds")};at(()=>{We(()=>{!n.arrowControl&&P(),w(),n.role==="start"&&_("hours")})});const x=(I,H)=>{p[H].value=I};return t("set-option",[`${n.role}_scrollDown`,M]),t("set-option",[`${n.role}_emitSelectRange`,_]),ve(()=>n.spinnerDate,()=>{s||w()}),(I,H)=>(T(),V("div",{class:N([i(o).b("spinner"),{"has-seconds":I.showSeconds}])},[I.arrowControl?te("v-if",!0):(T(!0),V(Ve,{key:0},bt(i(m),G=>(T(),re(i(ea),{key:G,ref_for:!0,ref:J=>x(J,G),class:N(i(o).be("spinner","wrapper")),"wrap-style":"max-height: inherit;","view-class":i(o).be("spinner","list"),noresize:"",tag:"ul",onMouseenter:J=>_(G),onMousemove:J=>b(G)},{default:X(()=>[(T(!0),V(Ve,null,bt(i(h)[G],(J,ee)=>(T(),V("li",{key:ee,class:N([i(o).be("spinner","item"),i(o).is("active",ee===i(v)[G]),i(o).is("disabled",J)]),onClick:fe=>j(G,{value:ee,disabled:J})},[G==="hours"?(T(),V(Ve,{key:0},[Ge(le(("0"+(I.amPmMode?ee%12||12:ee)).slice(-2))+le(y(ee)),1)],64)):(T(),V(Ve,{key:1},[Ge(le(("0"+ee).slice(-2)),1)],64))],10,LV))),128))]),_:2},1032,["class","view-class","onMouseenter","onMousemove"]))),128)),I.arrowControl?(T(!0),V(Ve,{key:1},bt(i(m),G=>(T(),V("div",{key:G,class:N([i(o).be("spinner","wrapper"),i(o).is("arrow")]),onMouseenter:J=>_(G)},[tt((T(),re(i(ze),{class:N(["arrow-up",i(o).be("spinner","arrow")])},{default:X(()=>[K(i(pf))]),_:1},8,["class"])),[[i(wd),A]]),tt((T(),re(i(ze),{class:N(["arrow-down",i(o).be("spinner","arrow")])},{default:X(()=>[K(i(Nr))]),_:1},8,["class"])),[[i(wd),O]]),F("ul",{class:N(i(o).be("spinner","list"))},[(T(!0),V(Ve,null,bt(i(C)[G],(J,ee)=>(T(),V("li",{key:ee,class:N([i(o).be("spinner","item"),i(o).is("active",J===i(v)[G]),i(o).is("disabled",i(h)[G][J])])},[typeof J=="number"?(T(),V(Ve,{key:0},[G==="hours"?(T(),V(Ve,{key:0},[Ge(le(("0"+(I.amPmMode?J%12||12:J)).slice(-2))+le(y(J)),1)],64)):(T(),V(Ve,{key:1},[Ge(le(("0"+J).slice(-2)),1)],64))],64)):te("v-if",!0)],2))),128))],2)],42,xV))),128)):te("v-if",!0)],2))}});var Hh=Ie(DV,[["__file","basic-time-spinner.vue"]]);const FV=Y({__name:"panel-time-pick",props:SV,emits:["pick","select-range","set-picker-option"],setup(e,{emit:t}){const n=e,o=De("EP_PICKER_BASE"),{arrowControl:r,disabledHours:a,disabledMinutes:l,disabledSeconds:s,defaultValue:u}=o.props,{getAvailableHours:c,getAvailableMinutes:f,getAvailableSeconds:d}=bk(a,l,s),p=Se("time"),{t:m,lang:v}=$t(),h=R([0,2]),C=yk(n),g=k(()=>pn(n.actualVisible)?`${p.namespace.value}-zoom-in-top`:""),y=k(()=>n.format.includes("ss")),_=k(()=>n.format.includes("A")?"A":n.format.includes("a")?"a":""),b=x=>{const I=ct(x).locale(v.value),H=j(I);return I.isSame(H)},w=()=>{t("pick",C.value,!1)},S=(x=!1,I=!1)=>{I||t("pick",n.parsedValue,x)},E=x=>{if(!n.visible)return;const I=j(x).millisecond(0);t("pick",I,!0)},$=(x,I)=>{t("select-range",x,I),h.value=[x,I]},O=x=>{const I=[0,3].concat(y.value?[6]:[]),H=["hours","minutes"].concat(y.value?["seconds"]:[]),J=(I.indexOf(h.value[0])+x+I.length)%I.length;M.start_emitSelectRange(H[J])},A=x=>{const I=x.code,{left:H,right:G,up:J,down:ee}=Ue;if([H,G].includes(I)){O(I===H?-1:1),x.preventDefault();return}if([J,ee].includes(I)){const fe=I===J?-1:1;M.start_scrollDown(fe),x.preventDefault();return}},{timePickerOptions:M,onSetOption:D,getAvailableTime:U}=vk({getAvailableHours:c,getAvailableMinutes:f,getAvailableSeconds:d}),j=x=>U(x,n.datetimeRole||"",!0),W=x=>x?ct(x,n.format).locale(v.value):null,L=x=>x?x.format(n.format):null,P=()=>ct(u).locale(v.value);return t("set-picker-option",["isValidValue",b]),t("set-picker-option",["formatToString",L]),t("set-picker-option",["parseUserInput",W]),t("set-picker-option",["handleKeydownInput",A]),t("set-picker-option",["getRangeAvailableTime",j]),t("set-picker-option",["getDefaultValue",P]),(x,I)=>(T(),re(fn,{name:i(g)},{default:X(()=>[x.actualVisible||x.visible?(T(),V("div",{key:0,class:N(i(p).b("panel"))},[F("div",{class:N([i(p).be("panel","content"),{"has-seconds":i(y)}])},[K(Hh,{ref:"spinner",role:x.datetimeRole||"start","arrow-control":i(r),"show-seconds":i(y),"am-pm-mode":i(_),"spinner-date":x.parsedValue,"disabled-hours":i(a),"disabled-minutes":i(l),"disabled-seconds":i(s),onChange:E,onSetOption:i(D),onSelectRange:$},null,8,["role","arrow-control","show-seconds","am-pm-mode","spinner-date","disabled-hours","disabled-minutes","disabled-seconds","onSetOption"])],2),F("div",{class:N(i(p).be("panel","footer"))},[F("button",{type:"button",class:N([i(p).be("panel","btn"),"cancel"]),onClick:w},le(i(m)("el.datepicker.cancel")),3),F("button",{type:"button",class:N([i(p).be("panel","btn"),"confirm"]),onClick:I[0]||(I[0]=H=>S())},le(i(m)("el.datepicker.confirm")),3)],2)],2)):te("v-if",!0)]),_:1},8,["name"]))}});var _d=Ie(FV,[["__file","panel-time-pick.vue"]]);const BV=Ne({...hk,parsedValue:{type:Q(Array)}}),VV=["disabled"],HV=Y({__name:"panel-time-range",props:BV,emits:["pick","select-range","set-picker-option"],setup(e,{emit:t}){const n=e,o=(ge,q)=>{const B=[];for(let z=ge;z<=q;z++)B.push(z);return B},{t:r,lang:a}=$t(),l=Se("time"),s=Se("picker"),u=De("EP_PICKER_BASE"),{arrowControl:c,disabledHours:f,disabledMinutes:d,disabledSeconds:p,defaultValue:m}=u.props,v=k(()=>[l.be("range-picker","body"),l.be("panel","content"),l.is("arrow",c),b.value?"has-seconds":""]),h=k(()=>[l.be("range-picker","body"),l.be("panel","content"),l.is("arrow",c),b.value?"has-seconds":""]),C=k(()=>n.parsedValue[0]),g=k(()=>n.parsedValue[1]),y=yk(n),_=()=>{t("pick",y.value,!1)},b=k(()=>n.format.includes("ss")),w=k(()=>n.format.includes("A")?"A":n.format.includes("a")?"a":""),S=(ge=!1)=>{t("pick",[C.value,g.value],ge)},E=ge=>{A(ge.millisecond(0),g.value)},$=ge=>{A(C.value,ge.millisecond(0))},O=ge=>{const q=ge.map(z=>ct(z).locale(a.value)),B=G(q);return q[0].isSame(B[0])&&q[1].isSame(B[1])},A=(ge,q)=>{t("pick",[ge,q],!0)},M=k(()=>C.value>g.value),D=R([0,2]),U=(ge,q)=>{t("select-range",ge,q,"min"),D.value=[ge,q]},j=k(()=>b.value?11:8),W=(ge,q)=>{t("select-range",ge,q,"max");const B=i(j);D.value=[ge+B,q+B]},L=ge=>{const q=b.value?[0,3,6,11,14,17]:[0,3,8,11],B=["hours","minutes"].concat(b.value?["seconds"]:[]),Z=(q.indexOf(D.value[0])+ge+q.length)%q.length,ue=q.length/2;Z{const q=ge.code,{left:B,right:z,up:Z,down:ue}=Ue;if([B,z].includes(q)){L(q===B?-1:1),ge.preventDefault();return}if([Z,ue].includes(q)){const se=q===Z?-1:1,me=D.value[0]{const B=f?f(ge):[],z=ge==="start",ue=(q||(z?g.value:C.value)).hour(),se=z?o(ue+1,23):o(0,ue-1);return up(B,se)},I=(ge,q,B)=>{const z=d?d(ge,q):[],Z=q==="start",ue=B||(Z?g.value:C.value),se=ue.hour();if(ge!==se)return z;const me=ue.minute(),_e=Z?o(me+1,59):o(0,me-1);return up(z,_e)},H=(ge,q,B,z)=>{const Z=p?p(ge,q,B):[],ue=B==="start",se=z||(ue?g.value:C.value),me=se.hour(),_e=se.minute();if(ge!==me||q!==_e)return Z;const $e=se.second(),Ce=ue?o($e+1,59):o(0,$e-1);return up(Z,Ce)},G=([ge,q])=>[oe(ge,"start",!0,q),oe(q,"end",!1,ge)],{getAvailableHours:J,getAvailableMinutes:ee,getAvailableSeconds:fe}=bk(x,I,H),{timePickerOptions:Te,getAvailableTime:oe,onSetOption:ke}=vk({getAvailableHours:J,getAvailableMinutes:ee,getAvailableSeconds:fe}),ae=ge=>ge?Pe(ge)?ge.map(q=>ct(q,n.format).locale(a.value)):ct(ge,n.format).locale(a.value):null,Oe=ge=>ge?Pe(ge)?ge.map(q=>q.format(n.format)):ge.format(n.format):null,we=()=>{if(Pe(m))return m.map(q=>ct(q).locale(a.value));const ge=ct(m).locale(a.value);return[ge,ge.add(60,"m")]};return t("set-picker-option",["formatToString",Oe]),t("set-picker-option",["parseUserInput",ae]),t("set-picker-option",["isValidValue",O]),t("set-picker-option",["handleKeydownInput",P]),t("set-picker-option",["getDefaultValue",we]),t("set-picker-option",["getRangeAvailableTime",G]),(ge,q)=>ge.actualVisible?(T(),V("div",{key:0,class:N([i(l).b("range-picker"),i(s).b("panel")])},[F("div",{class:N(i(l).be("range-picker","content"))},[F("div",{class:N(i(l).be("range-picker","cell"))},[F("div",{class:N(i(l).be("range-picker","header"))},le(i(r)("el.datepicker.startTime")),3),F("div",{class:N(i(v))},[K(Hh,{ref:"minSpinner",role:"start","show-seconds":i(b),"am-pm-mode":i(w),"arrow-control":i(c),"spinner-date":i(C),"disabled-hours":x,"disabled-minutes":I,"disabled-seconds":H,onChange:E,onSetOption:i(ke),onSelectRange:U},null,8,["show-seconds","am-pm-mode","arrow-control","spinner-date","onSetOption"])],2)],2),F("div",{class:N(i(l).be("range-picker","cell"))},[F("div",{class:N(i(l).be("range-picker","header"))},le(i(r)("el.datepicker.endTime")),3),F("div",{class:N(i(h))},[K(Hh,{ref:"maxSpinner",role:"end","show-seconds":i(b),"am-pm-mode":i(w),"arrow-control":i(c),"spinner-date":i(g),"disabled-hours":x,"disabled-minutes":I,"disabled-seconds":H,onChange:$,onSetOption:i(ke),onSelectRange:W},null,8,["show-seconds","am-pm-mode","arrow-control","spinner-date","onSetOption"])],2)],2)],2),F("div",{class:N(i(l).be("panel","footer"))},[F("button",{type:"button",class:N([i(l).be("panel","btn"),"cancel"]),onClick:q[0]||(q[0]=B=>_())},le(i(r)("el.datepicker.cancel")),3),F("button",{type:"button",class:N([i(l).be("panel","btn"),"confirm"]),disabled:i(M),onClick:q[1]||(q[1]=B=>S())},le(i(r)("el.datepicker.confirm")),11,VV)],2)],2)):te("v-if",!0)}});var zV=Ie(HV,[["__file","panel-time-range.vue"]]);ct.extend(ig);var jV=Y({name:"ElTimePicker",install:null,props:{...ug,isRange:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e,t){const n=R(),[o,r]=e.isRange?["timerange",zV]:["time",_d],a=l=>t.emit("update:modelValue",l);return yt("ElPopperOptions",e.popperOptions),t.expose({focus:l=>{var s;(s=n.value)==null||s.handleFocusInput(l)},blur:l=>{var s;(s=n.value)==null||s.handleBlurInput(l)},handleOpen:()=>{var l;(l=n.value)==null||l.handleOpen()},handleClose:()=>{var l;(l=n.value)==null||l.handleClose()}}),()=>{var l;const s=(l=e.format)!=null?l:Mh;return K(mk,mt(e,{ref:n,type:o,format:s,"onUpdate:modelValue":a}),{default:u=>K(r,u,null)})}}});const Dc=jV;Dc.install=e=>{e.component(Dc.name,Dc)};const WV=Dc,KV=(e,t)=>{const n=e.subtract(1,"month").endOf("month").date();return Sa(t).map((o,r)=>n-(t-r-1))},UV=e=>{const t=e.daysInMonth();return Sa(t).map((n,o)=>o+1)},qV=e=>Sa(e.length/7).map(t=>{const n=t*7;return e.slice(n,n+7)}),YV=Ne({selectedDay:{type:Q(Object)},range:{type:Q(Array)},date:{type:Q(Object),required:!0},hideHeader:{type:Boolean}}),GV={pick:e=>dt(e)};var $k={exports:{}};(function(e,t){(function(n,o){e.exports=o()})(rr,function(){return function(n,o,r){var a=o.prototype,l=function(d){return d&&(d.indexOf?d:d.s)},s=function(d,p,m,v,h){var C=d.name?d:d.$locale(),g=l(C[p]),y=l(C[m]),_=g||y.map(function(w){return w.slice(0,v)});if(!h)return _;var b=C.weekStart;return _.map(function(w,S){return _[(S+(b||0))%7]})},u=function(){return r.Ls[r.locale()]},c=function(d,p){return d.formats[p]||function(m){return m.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(v,h,C){return h||C.slice(1)})}(d.formats[p.toUpperCase()])},f=function(){var d=this;return{months:function(p){return p?p.format("MMMM"):s(d,"months")},monthsShort:function(p){return p?p.format("MMM"):s(d,"monthsShort","months",3)},firstDayOfWeek:function(){return d.$locale().weekStart||0},weekdays:function(p){return p?p.format("dddd"):s(d,"weekdays")},weekdaysMin:function(p){return p?p.format("dd"):s(d,"weekdaysMin","weekdays",2)},weekdaysShort:function(p){return p?p.format("ddd"):s(d,"weekdaysShort","weekdays",3)},longDateFormat:function(p){return c(d.$locale(),p)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};a.localeData=function(){return f.bind(this)()},r.localeData=function(){var d=u();return{firstDayOfWeek:function(){return d.weekStart||0},weekdays:function(){return r.weekdays()},weekdaysShort:function(){return r.weekdaysShort()},weekdaysMin:function(){return r.weekdaysMin()},months:function(){return r.months()},monthsShort:function(){return r.monthsShort()},longDateFormat:function(p){return c(d,p)},meridiem:d.meridiem,ordinal:d.ordinal}},r.months=function(){return s(u(),"months")},r.monthsShort=function(){return s(u(),"monthsShort","months",3)},r.weekdays=function(d){return s(u(),"weekdays",null,null,d)},r.weekdaysShort=function(d){return s(u(),"weekdaysShort","weekdays",3,d)},r.weekdaysMin=function(d){return s(u(),"weekdaysMin","weekdays",2,d)}}})})($k);var XV=$k.exports;const Ok=ta(XV),JV=(e,t)=>{ct.extend(Ok);const n=ct.localeData().firstDayOfWeek(),{t:o,lang:r}=$t(),a=ct().locale(r.value),l=k(()=>!!e.range&&!!e.range.length),s=k(()=>{let p=[];if(l.value){const[m,v]=e.range,h=Sa(v.date()-m.date()+1).map(y=>({text:m.date()+y,type:"current"}));let C=h.length%7;C=C===0?0:7-C;const g=Sa(C).map((y,_)=>({text:_+1,type:"next"}));p=h.concat(g)}else{const m=e.date.startOf("month").day(),v=KV(e.date,(m-n+7)%7).map(y=>({text:y,type:"prev"})),h=UV(e.date).map(y=>({text:y,type:"current"}));p=[...v,...h];const C=7-(p.length%7||7),g=Sa(C).map((y,_)=>({text:_+1,type:"next"}));p=p.concat(g)}return qV(p)}),u=k(()=>{const p=n;return p===0?cp.map(m=>o(`el.datepicker.weeks.${m}`)):cp.slice(p).concat(cp.slice(0,p)).map(m=>o(`el.datepicker.weeks.${m}`))}),c=(p,m)=>{switch(m){case"prev":return e.date.startOf("month").subtract(1,"month").date(p);case"next":return e.date.startOf("month").add(1,"month").date(p);case"current":return e.date.date(p)}};return{now:a,isInRange:l,rows:s,weekDays:u,getFormattedDate:c,handlePickDay:({text:p,type:m})=>{const v=c(p,m);t("pick",v)},getSlotData:({text:p,type:m})=>{const v=c(p,m);return{isSelected:v.isSame(e.selectedDay),type:`${m}-month`,day:v.format("YYYY-MM-DD"),date:v.toDate()}}}},ZV={key:0},QV=["onClick"],e5=Y({name:"DateTable"}),t5=Y({...e5,props:YV,emits:GV,setup(e,{expose:t,emit:n}){const o=e,{isInRange:r,now:a,rows:l,weekDays:s,getFormattedDate:u,handlePickDay:c,getSlotData:f}=JV(o,n),d=Se("calendar-table"),p=Se("calendar-day"),m=({text:v,type:h})=>{const C=[h];if(h==="current"){const g=u(v,h);g.isSame(o.selectedDay,"day")&&C.push(p.is("selected")),g.isSame(a,"day")&&C.push(p.is("today"))}return C};return t({getFormattedDate:u}),(v,h)=>(T(),V("table",{class:N([i(d).b(),i(d).is("range",i(r))]),cellspacing:"0",cellpadding:"0"},[v.hideHeader?te("v-if",!0):(T(),V("thead",ZV,[(T(!0),V(Ve,null,bt(i(s),C=>(T(),V("th",{key:C},le(C),1))),128))])),F("tbody",null,[(T(!0),V(Ve,null,bt(i(l),(C,g)=>(T(),V("tr",{key:g,class:N({[i(d).e("row")]:!0,[i(d).em("row","hide-border")]:g===0&&v.hideHeader})},[(T(!0),V(Ve,null,bt(C,(y,_)=>(T(),V("td",{key:_,class:N(m(y)),onClick:b=>i(c)(y)},[F("div",{class:N(i(p).b())},[ie(v.$slots,"date-cell",{data:i(f)(y)},()=>[F("span",null,le(y.text),1)])],2)],10,QV))),128))],2))),128))])],2))}});var U0=Ie(t5,[["__file","date-table.vue"]]);const n5=(e,t)=>{const n=e.endOf("month"),o=t.startOf("month"),a=n.isSame(o,"week")?o.add(1,"week"):o;return[[e,n],[a.startOf("week"),t]]},o5=(e,t)=>{const n=e.endOf("month"),o=e.add(1,"month").startOf("month"),r=n.isSame(o,"week")?o.add(1,"week"):o,a=r.endOf("month"),l=t.startOf("month"),s=a.isSame(l,"week")?l.add(1,"week"):l;return[[e,n],[r.startOf("week"),a],[s.startOf("week"),t]]},r5=(e,t,n)=>{const{lang:o}=$t(),r=R(),a=ct().locale(o.value),l=k({get(){return e.modelValue?u.value:r.value},set(C){if(!C)return;r.value=C;const g=C.toDate();t(Zn,g),t(ft,g)}}),s=k(()=>{if(!e.range)return[];const C=e.range.map(_=>ct(_).locale(o.value)),[g,y]=C;return g.isAfter(y)?[]:g.isSame(y,"month")?m(g,y):g.add(1,"month").month()!==y.month()?[]:m(g,y)}),u=k(()=>e.modelValue?ct(e.modelValue).locale(o.value):l.value||(s.value.length?s.value[0][0]:a)),c=k(()=>u.value.subtract(1,"month").date(1)),f=k(()=>u.value.add(1,"month").date(1)),d=k(()=>u.value.subtract(1,"year").date(1)),p=k(()=>u.value.add(1,"year").date(1)),m=(C,g)=>{const y=C.startOf("week"),_=g.endOf("week"),b=y.get("month"),w=_.get("month");return b===w?[[y,_]]:(b+1)%12===w?n5(y,_):b+2===w||(b+1)%11===w?o5(y,_):[]},v=C=>{l.value=C};return{calculateValidatedDateRange:m,date:u,realSelectedDay:l,pickDay:v,selectDate:C=>{const y={"prev-month":c.value,"next-month":f.value,"prev-year":d.value,"next-year":p.value,today:a}[C];y.isSame(u.value,"day")||v(y)},validatedRange:s}},a5=e=>Pe(e)&&e.length===2&&e.every(t=>hl(t)),l5=Ne({modelValue:{type:Date},range:{type:Q(Array),validator:a5}}),s5={[ft]:e=>hl(e),[Zn]:e=>hl(e)},i5="ElCalendar",u5=Y({name:i5}),c5=Y({...u5,props:l5,emits:s5,setup(e,{expose:t,emit:n}){const o=e,r=Se("calendar"),{calculateValidatedDateRange:a,date:l,pickDay:s,realSelectedDay:u,selectDate:c,validatedRange:f}=r5(o,n),{t:d}=$t(),p=k(()=>{const m=`el.datepicker.month${l.value.format("M")}`;return`${l.value.year()} ${d("el.datepicker.year")} ${d(m)}`});return t({selectedDay:u,pickDay:s,selectDate:c,calculateValidatedDateRange:a}),(m,v)=>(T(),V("div",{class:N(i(r).b())},[F("div",{class:N(i(r).e("header"))},[ie(m.$slots,"header",{date:i(p)},()=>[F("div",{class:N(i(r).e("title"))},le(i(p)),3),i(f).length===0?(T(),V("div",{key:0,class:N(i(r).e("button-group"))},[K(i(ik),null,{default:X(()=>[K(i($n),{size:"small",onClick:v[0]||(v[0]=h=>i(c)("prev-month"))},{default:X(()=>[Ge(le(i(d)("el.datepicker.prevMonth")),1)]),_:1}),K(i($n),{size:"small",onClick:v[1]||(v[1]=h=>i(c)("today"))},{default:X(()=>[Ge(le(i(d)("el.datepicker.today")),1)]),_:1}),K(i($n),{size:"small",onClick:v[2]||(v[2]=h=>i(c)("next-month"))},{default:X(()=>[Ge(le(i(d)("el.datepicker.nextMonth")),1)]),_:1})]),_:1})],2)):te("v-if",!0)])],2),i(f).length===0?(T(),V("div",{key:0,class:N(i(r).e("body"))},[K(U0,{date:i(l),"selected-day":i(u),onPick:i(s)},Sr({_:2},[m.$slots["date-cell"]?{name:"date-cell",fn:X(h=>[ie(m.$slots,"date-cell",vr(bl(h)))])}:void 0]),1032,["date","selected-day","onPick"])],2)):(T(),V("div",{key:1,class:N(i(r).e("body"))},[(T(!0),V(Ve,null,bt(i(f),(h,C)=>(T(),re(U0,{key:C,date:h[0],"selected-day":i(u),range:h,"hide-header":C!==0,onPick:i(s)},Sr({_:2},[m.$slots["date-cell"]?{name:"date-cell",fn:X(g=>[ie(m.$slots,"date-cell",vr(bl(g)))])}:void 0]),1032,["date","selected-day","range","hide-header","onPick"]))),128))],2))],2))}});var d5=Ie(c5,[["__file","calendar.vue"]]);const f5=ut(d5),p5=Ne({header:{type:String,default:""},footer:{type:String,default:""},bodyStyle:{type:Q([String,Object,Array]),default:""},bodyClass:String,shadow:{type:String,values:["always","hover","never"],default:"always"}}),h5=Y({name:"ElCard"}),m5=Y({...h5,props:p5,setup(e){const t=Se("card");return(n,o)=>(T(),V("div",{class:N([i(t).b(),i(t).is(`${n.shadow}-shadow`)])},[n.$slots.header||n.header?(T(),V("div",{key:0,class:N(i(t).e("header"))},[ie(n.$slots,"header",{},()=>[Ge(le(n.header),1)])],2)):te("v-if",!0),F("div",{class:N([i(t).e("body"),n.bodyClass]),style:je(n.bodyStyle)},[ie(n.$slots,"default")],6),n.$slots.footer||n.footer?(T(),V("div",{key:1,class:N(i(t).e("footer"))},[ie(n.$slots,"footer",{},()=>[Ge(le(n.footer),1)])],2)):te("v-if",!0)],2))}});var v5=Ie(m5,[["__file","card.vue"]]);const g5=ut(v5),b5=Ne({initialIndex:{type:Number,default:0},height:{type:String,default:""},trigger:{type:String,values:["hover","click"],default:"hover"},autoplay:{type:Boolean,default:!0},interval:{type:Number,default:3e3},indicatorPosition:{type:String,values:["","none","outside"],default:""},arrow:{type:String,values:["always","hover","never"],default:"hover"},type:{type:String,values:["","card"],default:""},cardScale:{type:Number,default:.83},loop:{type:Boolean,default:!0},direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},pauseOnHover:{type:Boolean,default:!0},motionBlur:Boolean}),y5={change:(e,t)=>[e,t].every(Je)},Nk=Symbol("carouselContextKey"),q0=300,w5=(e,t,n)=>{const{children:o,addChild:r,removeChild:a}=tg(lt(),"ElCarouselItem"),l=Sn(),s=R(-1),u=R(null),c=R(!1),f=R(),d=R(0),p=R(!0),m=R(!0),v=R(!1),h=k(()=>e.arrow!=="never"&&!i(y)),C=k(()=>o.value.some(oe=>oe.props.label.toString().length>0)),g=k(()=>e.type==="card"),y=k(()=>e.direction==="vertical"),_=k(()=>e.height!=="auto"?{height:e.height}:{height:`${d.value}px`,overflow:"hidden"}),b=il(oe=>{A(oe)},q0,{trailing:!0}),w=il(oe=>{I(oe)},q0),S=oe=>p.value?s.value<=1?oe<=1:oe>1:!0;function E(){u.value&&(clearInterval(u.value),u.value=null)}function $(){e.interval<=0||!e.autoplay||u.value||(u.value=setInterval(()=>O(),e.interval))}const O=()=>{m.value||(v.value=!0),m.value=!1,s.valuewe.props.name===oe);Oe.length>0&&(oe=o.value.indexOf(Oe[0]))}if(oe=Number(oe),Number.isNaN(oe)||oe!==Math.floor(oe))return;const ke=o.value.length,ae=s.value;oe<0?s.value=e.loop?ke-1:0:oe>=ke?s.value=e.loop?0:ke-1:s.value=oe,ae===s.value&&M(ae),J()}function M(oe){o.value.forEach((ke,ae)=>{ke.translateItem(ae,s.value,oe)})}function D(oe,ke){var ae,Oe,we,ge;const q=i(o),B=q.length;if(B===0||!oe.states.inStage)return!1;const z=ke+1,Z=ke-1,ue=B-1,se=q[ue].states.active,me=q[0].states.active,_e=(Oe=(ae=q[z])==null?void 0:ae.states)==null?void 0:Oe.active,$e=(ge=(we=q[Z])==null?void 0:we.states)==null?void 0:ge.active;return ke===ue&&me||_e?"left":ke===0&&se||$e?"right":!1}function U(){c.value=!0,e.pauseOnHover&&E()}function j(){c.value=!1,$()}function W(){v.value=!1}function L(oe){i(y)||o.value.forEach((ke,ae)=>{oe===D(ke,ae)&&(ke.states.hover=!0)})}function P(){i(y)||o.value.forEach(oe=>{oe.states.hover=!1})}function x(oe){oe!==s.value&&(m.value||(v.value=!0)),s.value=oe}function I(oe){e.trigger==="hover"&&oe!==s.value&&(s.value=oe,m.value||(v.value=!0))}function H(){A(s.value-1)}function G(){A(s.value+1)}function J(){E(),e.pauseOnHover||$()}function ee(oe){e.height==="auto"&&(d.value=oe)}function fe(){var oe;const ke=(oe=l.default)==null?void 0:oe.call(l);if(!ke)return null;const ae=Ca(ke),Oe="ElCarouselItem",we=ae.filter(ge=>Wt(ge)&&ge.type.name===Oe);return(we==null?void 0:we.length)===2&&e.loop&&!g.value?(p.value=!0,we):(p.value=!1,null)}ve(()=>s.value,(oe,ke)=>{M(ke),p.value&&(oe=oe%2,ke=ke%2),ke>-1&&t("change",oe,ke)}),ve(()=>e.autoplay,oe=>{oe?$():E()}),ve(()=>e.loop,()=>{A(s.value)}),ve(()=>e.interval,()=>{J()});const Te=Ut();return at(()=>{ve(()=>o.value,()=>{o.value.length>0&&A(e.initialIndex)},{immediate:!0}),Te.value=Qt(f.value,()=>{M()}),$()}),zt(()=>{E(),f.value&&Te.value&&Te.value.stop()}),yt(Nk,{root:f,isCardType:g,isVertical:y,items:o,loop:e.loop,cardScale:e.cardScale,addItem:r,removeItem:a,setActiveItem:A,setContainerHeight:ee}),{root:f,activeIndex:s,arrowDisplay:h,hasLabel:C,hover:c,isCardType:g,isTransitioning:v,items:o,isVertical:y,containerStyle:_,isItemsTwoLength:p,handleButtonEnter:L,handleTransitionEnd:W,handleButtonLeave:P,handleIndicatorClick:x,handleMouseEnter:U,handleMouseLeave:j,setActiveItem:A,prev:H,next:G,PlaceholderItem:fe,isTwoLengthShow:S,throttledArrowClick:b,throttledIndicatorHover:w}},_5=["aria-label"],C5=["aria-label"],S5=["onMouseenter","onClick"],k5=["aria-label"],E5={key:0},T5={key:3,xmlns:"http://www.w3.org/2000/svg",version:"1.1",style:{display:"none"}},$5=F("defs",null,[F("filter",{id:"elCarouselHorizontal"},[F("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"12,0"})]),F("filter",{id:"elCarouselVertical"},[F("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"0,10"})])],-1),O5=[$5],N5="ElCarousel",I5=Y({name:N5}),M5=Y({...I5,props:b5,emits:y5,setup(e,{expose:t,emit:n}){const o=e,{root:r,activeIndex:a,arrowDisplay:l,hasLabel:s,hover:u,isCardType:c,items:f,isVertical:d,containerStyle:p,handleButtonEnter:m,handleButtonLeave:v,isTransitioning:h,handleIndicatorClick:C,handleMouseEnter:g,handleMouseLeave:y,handleTransitionEnd:_,setActiveItem:b,prev:w,next:S,PlaceholderItem:E,isTwoLengthShow:$,throttledArrowClick:O,throttledIndicatorHover:A}=w5(o,n),M=Se("carousel"),{t:D}=$t(),U=k(()=>{const L=[M.b(),M.m(o.direction)];return i(c)&&L.push(M.m("card")),L}),j=k(()=>{const L=[M.e("container")];return o.motionBlur&&i(h)&&L.push(i(d)?`${M.namespace.value}-transitioning-vertical`:`${M.namespace.value}-transitioning`),L}),W=k(()=>{const L=[M.e("indicators"),M.em("indicators",o.direction)];return i(s)&&L.push(M.em("indicators","labels")),o.indicatorPosition==="outside"&&L.push(M.em("indicators","outside")),i(d)&&L.push(M.em("indicators","right")),L});return t({activeIndex:a,setActiveItem:b,prev:w,next:S}),(L,P)=>(T(),V("div",{ref_key:"root",ref:r,class:N(i(U)),onMouseenter:P[7]||(P[7]=Qe((...x)=>i(g)&&i(g)(...x),["stop"])),onMouseleave:P[8]||(P[8]=Qe((...x)=>i(y)&&i(y)(...x),["stop"]))},[i(l)?(T(),re(fn,{key:0,name:"carousel-arrow-left",persisted:""},{default:X(()=>[tt(F("button",{type:"button",class:N([i(M).e("arrow"),i(M).em("arrow","left")]),"aria-label":i(D)("el.carousel.leftArrow"),onMouseenter:P[0]||(P[0]=x=>i(m)("left")),onMouseleave:P[1]||(P[1]=(...x)=>i(v)&&i(v)(...x)),onClick:P[2]||(P[2]=Qe(x=>i(O)(i(a)-1),["stop"]))},[K(i(ze),null,{default:X(()=>[K(i(Aa))]),_:1})],42,_5),[[kt,(L.arrow==="always"||i(u))&&(o.loop||i(a)>0)]])]),_:1})):te("v-if",!0),i(l)?(T(),re(fn,{key:1,name:"carousel-arrow-right",persisted:""},{default:X(()=>[tt(F("button",{type:"button",class:N([i(M).e("arrow"),i(M).em("arrow","right")]),"aria-label":i(D)("el.carousel.rightArrow"),onMouseenter:P[3]||(P[3]=x=>i(m)("right")),onMouseleave:P[4]||(P[4]=(...x)=>i(v)&&i(v)(...x)),onClick:P[5]||(P[5]=Qe(x=>i(O)(i(a)+1),["stop"]))},[K(i(ze),null,{default:X(()=>[K(i(Jn))]),_:1})],42,C5),[[kt,(L.arrow==="always"||i(u))&&(o.loop||i(a)i(_)&&i(_)(...x))},[K(i(E)),ie(L.$slots,"default")],38),L.indicatorPosition!=="none"?(T(),V("ul",{key:2,class:N(i(W))},[(T(!0),V(Ve,null,bt(i(f),(x,I)=>tt((T(),V("li",{key:I,class:N([i(M).e("indicator"),i(M).em("indicator",L.direction),i(M).is("active",I===i(a))]),onMouseenter:H=>i(A)(I),onClick:Qe(H=>i(C)(I),["stop"])},[F("button",{class:N(i(M).e("button")),"aria-label":i(D)("el.carousel.indicator",{index:I+1})},[i(s)?(T(),V("span",E5,le(x.props.label),1)):te("v-if",!0)],10,k5)],42,S5)),[[kt,i($)(I)]])),128))],2)):te("v-if",!0),o.motionBlur?(T(),V("svg",T5,O5)):te("v-if",!0)],34))}});var A5=Ie(M5,[["__file","carousel.vue"]]);const P5=Ne({name:{type:String,default:""},label:{type:[String,Number],default:""}}),R5=(e,t)=>{const n=De(Nk),o=lt(),r=R(),a=R(!1),l=R(0),s=R(1),u=R(!1),c=R(!1),f=R(!1),d=R(!1),{isCardType:p,isVertical:m,cardScale:v}=n;function h(b,w,S){const E=S-1,$=w-1,O=w+1,A=S/2;return w===0&&b===E?-1:w===E&&b===0?S:b<$&&w-b>=A?S+1:b>O&&b-w>=A?-2:b}function C(b,w){var S,E;const $=i(m)?((S=n.root.value)==null?void 0:S.offsetHeight)||0:((E=n.root.value)==null?void 0:E.offsetWidth)||0;return f.value?$*((2-v)*(b-w)+1)/4:b{var E;const $=i(p),O=(E=n.items.value.length)!=null?E:Number.NaN,A=b===w;!$&&!pn(S)&&(d.value=A||b===S),!A&&O>2&&n.loop&&(b=h(b,w,O));const M=i(m);u.value=A,$?(f.value=Math.round(Math.abs(b-w))<=1,l.value=C(b,w),s.value=i(u)?1:v):l.value=g(b,w,M),c.value=!0,A&&r.value&&n.setContainerHeight(r.value.offsetHeight)};function _(){if(n&&i(p)){const b=n.items.value.findIndex(({uid:w})=>w===o.uid);n.setActiveItem(b)}}return at(()=>{n.addItem({props:e,states:Et({hover:a,translate:l,scale:s,active:u,ready:c,inStage:f,animating:d}),uid:o.uid,translateItem:y})}),lr(()=>{n.removeItem(o.uid)}),{carouselItemRef:r,active:u,animating:d,hover:a,inStage:f,isVertical:m,translate:l,isCardType:p,scale:s,ready:c,handleItemClick:_}},L5=Y({name:"ElCarouselItem"}),x5=Y({...L5,props:P5,setup(e){const t=e,n=Se("carousel"),{carouselItemRef:o,active:r,animating:a,hover:l,inStage:s,isVertical:u,translate:c,isCardType:f,scale:d,ready:p,handleItemClick:m}=R5(t),v=k(()=>[n.e("item"),n.is("active",r.value),n.is("in-stage",s.value),n.is("hover",l.value),n.is("animating",a.value),{[n.em("item","card")]:f.value,[n.em("item","card-vertical")]:f.value&&u.value}]),h=k(()=>{const g=`${`translate${i(u)?"Y":"X"}`}(${i(c)}px)`,y=`scale(${i(d)})`;return{transform:[g,y].join(" ")}});return(C,g)=>tt((T(),V("div",{ref_key:"carouselItemRef",ref:o,class:N(i(v)),style:je(i(h)),onClick:g[0]||(g[0]=(...y)=>i(m)&&i(m)(...y))},[i(f)?tt((T(),V("div",{key:0,class:N(i(n).e("mask"))},null,2)),[[kt,!i(r)]]):te("v-if",!0),ie(C.$slots,"default")],6)),[[kt,i(p)]])}});var Ik=Ie(x5,[["__file","carousel-item.vue"]]);const D5=ut(A5,{CarouselItem:Ik}),F5=tn(Ik),Mk={modelValue:{type:[Number,String,Boolean],default:void 0},label:{type:[String,Boolean,Number,Object],default:void 0},value:{type:[String,Boolean,Number,Object],default:void 0},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:{type:String,default:void 0},trueValue:{type:[String,Number],default:void 0},falseValue:{type:[String,Number],default:void 0},trueLabel:{type:[String,Number],default:void 0},falseLabel:{type:[String,Number],default:void 0},id:{type:String,default:void 0},controls:{type:String,default:void 0},border:Boolean,size:gn,tabindex:[String,Number],validateEvent:{type:Boolean,default:!0},...An(["ariaControls"])},Ak={[ft]:e=>nt(e)||Je(e)||dn(e),change:e=>nt(e)||Je(e)||dn(e)},ti=Symbol("checkboxGroupContextKey"),B5=({model:e,isChecked:t})=>{const n=De(ti,void 0),o=k(()=>{var a,l;const s=(a=n==null?void 0:n.max)==null?void 0:a.value,u=(l=n==null?void 0:n.min)==null?void 0:l.value;return!pn(s)&&e.value.length>=s&&!t.value||!pn(u)&&e.value.length<=u&&t.value});return{isDisabled:to(k(()=>(n==null?void 0:n.disabled.value)||o.value)),isLimitDisabled:o}},V5=(e,{model:t,isLimitExceeded:n,hasOwnLabel:o,isDisabled:r,isLabeledByFormItem:a})=>{const l=De(ti,void 0),{formItem:s}=qn(),{emit:u}=lt();function c(v){var h,C,g,y;return[!0,e.trueValue,e.trueLabel].includes(v)?(C=(h=e.trueValue)!=null?h:e.trueLabel)!=null?C:!0:(y=(g=e.falseValue)!=null?g:e.falseLabel)!=null?y:!1}function f(v,h){u("change",c(v),h)}function d(v){if(n.value)return;const h=v.target;u("change",c(h.checked),v)}async function p(v){n.value||!o.value&&!r.value&&a.value&&(v.composedPath().some(g=>g.tagName==="LABEL")||(t.value=c([!1,e.falseValue,e.falseLabel].includes(t.value)),await We(),f(t.value,v)))}const m=k(()=>(l==null?void 0:l.validateEvent)||e.validateEvent);return ve(()=>e.modelValue,()=>{m.value&&(s==null||s.validate("change").catch(v=>void 0))}),{handleChange:d,onClickRoot:p}},H5=e=>{const t=R(!1),{emit:n}=lt(),o=De(ti,void 0),r=k(()=>pn(o)===!1),a=R(!1),l=k({get(){var s,u;return r.value?(s=o==null?void 0:o.modelValue)==null?void 0:s.value:(u=e.modelValue)!=null?u:t.value},set(s){var u,c;r.value&&Pe(s)?(a.value=((u=o==null?void 0:o.max)==null?void 0:u.value)!==void 0&&s.length>(o==null?void 0:o.max.value)&&s.length>l.value.length,a.value===!1&&((c=o==null?void 0:o.changeEvent)==null||c.call(o,s))):(n(ft,s),t.value=s)}});return{model:l,isGroup:r,isLimitExceeded:a}},z5=(e,t,{model:n})=>{const o=De(ti,void 0),r=R(!1),a=k(()=>Sl(e.value)?e.label:e.value),l=k(()=>{const f=n.value;return dn(f)?f:Pe(f)?dt(a.value)?f.map(Mt).some(d=>Wn(d,a.value)):f.map(Mt).includes(a.value):f!=null?f===e.trueValue||f===e.trueLabel:!!f}),s=hn(k(()=>{var f;return(f=o==null?void 0:o.size)==null?void 0:f.value}),{prop:!0}),u=hn(k(()=>{var f;return(f=o==null?void 0:o.size)==null?void 0:f.value})),c=k(()=>!!t.default||!Sl(a.value));return{checkboxButtonSize:s,isChecked:l,isFocused:r,checkboxSize:u,hasOwnLabel:c,actualValue:a}},Pk=(e,t)=>{const{formItem:n}=qn(),{model:o,isGroup:r,isLimitExceeded:a}=H5(e),{isFocused:l,isChecked:s,checkboxButtonSize:u,checkboxSize:c,hasOwnLabel:f,actualValue:d}=z5(e,t,{model:o}),{isDisabled:p}=B5({model:o,isChecked:s}),{inputId:m,isLabeledByFormItem:v}=cr(e,{formItemContext:n,disableIdGeneration:f,disableIdManagement:r}),{handleChange:h,onClickRoot:C}=V5(e,{model:o,isLimitExceeded:a,hasOwnLabel:f,isDisabled:p,isLabeledByFormItem:v});return(()=>{function y(){var _,b;Pe(o.value)&&!o.value.includes(d.value)?o.value.push(d.value):o.value=(b=(_=e.trueValue)!=null?_:e.trueLabel)!=null?b:!0}e.checked&&y()})(),wn({from:"controls",replacement:"aria-controls",version:"2.8.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},k(()=>!!e.controls)),wn({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},k(()=>r.value&&Sl(e.value))),wn({from:"true-label",replacement:"true-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},k(()=>!!e.trueLabel)),wn({from:"false-label",replacement:"false-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},k(()=>!!e.falseLabel)),{inputId:m,isLabeledByFormItem:v,isChecked:s,isDisabled:p,isFocused:l,checkboxButtonSize:u,checkboxSize:c,hasOwnLabel:f,model:o,actualValue:d,handleChange:h,onClickRoot:C}},j5=["id","indeterminate","name","tabindex","disabled","true-value","false-value"],W5=["id","indeterminate","disabled","value","name","tabindex"],K5=Y({name:"ElCheckbox"}),U5=Y({...K5,props:Mk,emits:Ak,setup(e){const t=e,n=Sn(),{inputId:o,isLabeledByFormItem:r,isChecked:a,isDisabled:l,isFocused:s,checkboxSize:u,hasOwnLabel:c,model:f,actualValue:d,handleChange:p,onClickRoot:m}=Pk(t,n),v=Se("checkbox"),h=k(()=>[v.b(),v.m(u.value),v.is("disabled",l.value),v.is("bordered",t.border),v.is("checked",a.value)]),C=k(()=>[v.e("input"),v.is("disabled",l.value),v.is("checked",a.value),v.is("indeterminate",t.indeterminate),v.is("focus",s.value)]);return(g,y)=>(T(),re(pt(!i(c)&&i(r)?"span":"label"),{class:N(i(h)),"aria-controls":g.indeterminate?g.controls||g.ariaControls:null,onClick:i(m)},{default:X(()=>{var _,b;return[F("span",{class:N(i(C))},[g.trueValue||g.falseValue||g.trueLabel||g.falseLabel?tt((T(),V("input",{key:0,id:i(o),"onUpdate:modelValue":y[0]||(y[0]=w=>xt(f)?f.value=w:null),class:N(i(v).e("original")),type:"checkbox",indeterminate:g.indeterminate,name:g.name,tabindex:g.tabindex,disabled:i(l),"true-value":(_=g.trueValue)!=null?_:g.trueLabel,"false-value":(b=g.falseValue)!=null?b:g.falseLabel,onChange:y[1]||(y[1]=(...w)=>i(p)&&i(p)(...w)),onFocus:y[2]||(y[2]=w=>s.value=!0),onBlur:y[3]||(y[3]=w=>s.value=!1),onClick:y[4]||(y[4]=Qe(()=>{},["stop"]))},null,42,j5)),[[wl,i(f)]]):tt((T(),V("input",{key:1,id:i(o),"onUpdate:modelValue":y[5]||(y[5]=w=>xt(f)?f.value=w:null),class:N(i(v).e("original")),type:"checkbox",indeterminate:g.indeterminate,disabled:i(l),value:i(d),name:g.name,tabindex:g.tabindex,onChange:y[6]||(y[6]=(...w)=>i(p)&&i(p)(...w)),onFocus:y[7]||(y[7]=w=>s.value=!0),onBlur:y[8]||(y[8]=w=>s.value=!1),onClick:y[9]||(y[9]=Qe(()=>{},["stop"]))},null,42,W5)),[[wl,i(f)]]),F("span",{class:N(i(v).e("inner"))},null,2)],2),i(c)?(T(),V("span",{key:0,class:N(i(v).e("label"))},[ie(g.$slots,"default"),g.$slots.default?te("v-if",!0):(T(),V(Ve,{key:0},[Ge(le(g.label),1)],64))],2)):te("v-if",!0)]}),_:3},8,["class","aria-controls","onClick"]))}});var q5=Ie(U5,[["__file","checkbox.vue"]]);const Y5=["name","tabindex","disabled","true-value","false-value"],G5=["name","tabindex","disabled","value"],X5=Y({name:"ElCheckboxButton"}),J5=Y({...X5,props:Mk,emits:Ak,setup(e){const t=e,n=Sn(),{isFocused:o,isChecked:r,isDisabled:a,checkboxButtonSize:l,model:s,actualValue:u,handleChange:c}=Pk(t,n),f=De(ti,void 0),d=Se("checkbox"),p=k(()=>{var v,h,C,g;const y=(h=(v=f==null?void 0:f.fill)==null?void 0:v.value)!=null?h:"";return{backgroundColor:y,borderColor:y,color:(g=(C=f==null?void 0:f.textColor)==null?void 0:C.value)!=null?g:"",boxShadow:y?`-1px 0 0 0 ${y}`:void 0}}),m=k(()=>[d.b("button"),d.bm("button",l.value),d.is("disabled",a.value),d.is("checked",r.value),d.is("focus",o.value)]);return(v,h)=>{var C,g;return T(),V("label",{class:N(i(m))},[v.trueValue||v.falseValue||v.trueLabel||v.falseLabel?tt((T(),V("input",{key:0,"onUpdate:modelValue":h[0]||(h[0]=y=>xt(s)?s.value=y:null),class:N(i(d).be("button","original")),type:"checkbox",name:v.name,tabindex:v.tabindex,disabled:i(a),"true-value":(C=v.trueValue)!=null?C:v.trueLabel,"false-value":(g=v.falseValue)!=null?g:v.falseLabel,onChange:h[1]||(h[1]=(...y)=>i(c)&&i(c)(...y)),onFocus:h[2]||(h[2]=y=>o.value=!0),onBlur:h[3]||(h[3]=y=>o.value=!1),onClick:h[4]||(h[4]=Qe(()=>{},["stop"]))},null,42,Y5)),[[wl,i(s)]]):tt((T(),V("input",{key:1,"onUpdate:modelValue":h[5]||(h[5]=y=>xt(s)?s.value=y:null),class:N(i(d).be("button","original")),type:"checkbox",name:v.name,tabindex:v.tabindex,disabled:i(a),value:i(u),onChange:h[6]||(h[6]=(...y)=>i(c)&&i(c)(...y)),onFocus:h[7]||(h[7]=y=>o.value=!0),onBlur:h[8]||(h[8]=y=>o.value=!1),onClick:h[9]||(h[9]=Qe(()=>{},["stop"]))},null,42,G5)),[[wl,i(s)]]),v.$slots.default||v.label?(T(),V("span",{key:2,class:N(i(d).be("button","inner")),style:je(i(r)?i(p):void 0)},[ie(v.$slots,"default",{},()=>[Ge(le(v.label),1)])],6)):te("v-if",!0)],2)}}});var Rk=Ie(J5,[["__file","checkbox-button.vue"]]);const Z5=Ne({modelValue:{type:Q(Array),default:()=>[]},disabled:Boolean,min:Number,max:Number,size:gn,label:String,fill:String,textColor:String,tag:{type:String,default:"div"},validateEvent:{type:Boolean,default:!0},...An(["ariaLabel"])}),Q5={[ft]:e=>Pe(e),change:e=>Pe(e)},eH=Y({name:"ElCheckboxGroup"}),tH=Y({...eH,props:Z5,emits:Q5,setup(e,{emit:t}){const n=e,o=Se("checkbox"),{formItem:r}=qn(),{inputId:a,isLabeledByFormItem:l}=cr(n,{formItemContext:r}),s=async c=>{t(ft,c),await We(),t("change",c)},u=k({get(){return n.modelValue},set(c){s(c)}});return yt(ti,{...gr(Cn(n),["size","min","max","disabled","validateEvent","fill","textColor"]),modelValue:u,changeEvent:s}),wn({from:"label",replacement:"aria-label",version:"2.8.0",scope:"el-checkbox-group",ref:"https://element-plus.org/en-US/component/checkbox.html"},k(()=>!!n.label)),ve(()=>n.modelValue,()=>{n.validateEvent&&(r==null||r.validate("change").catch(c=>void 0))}),(c,f)=>{var d;return T(),re(pt(c.tag),{id:i(a),class:N(i(o).b("group")),role:"group","aria-label":i(l)?void 0:c.label||c.ariaLabel||"checkbox-group","aria-labelledby":i(l)?(d=i(r))==null?void 0:d.labelId:void 0},{default:X(()=>[ie(c.$slots,"default")]),_:3},8,["id","class","aria-label","aria-labelledby"])}}});var Lk=Ie(tH,[["__file","checkbox-group.vue"]]);const Ho=ut(q5,{CheckboxButton:Rk,CheckboxGroup:Lk}),nH=tn(Rk),xk=tn(Lk),Dk=Ne({modelValue:{type:[String,Number,Boolean],default:void 0},size:gn,disabled:Boolean,label:{type:[String,Number,Boolean],default:void 0},value:{type:[String,Number,Boolean],default:void 0},name:{type:String,default:void 0}}),oH=Ne({...Dk,border:Boolean}),Fk={[ft]:e=>nt(e)||Je(e)||dn(e),[Yt]:e=>nt(e)||Je(e)||dn(e)},Bk=Symbol("radioGroupKey"),Vk=(e,t)=>{const n=R(),o=De(Bk,void 0),r=k(()=>!!o),a=k(()=>Sl(e.value)?e.label:e.value),l=k({get(){return r.value?o.modelValue:e.modelValue},set(d){r.value?o.changeEvent(d):t&&t(ft,d),n.value.checked=e.modelValue===a.value}}),s=hn(k(()=>o==null?void 0:o.size)),u=to(k(()=>o==null?void 0:o.disabled)),c=R(!1),f=k(()=>u.value||r.value&&l.value!==a.value?-1:0);return wn({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-radio",ref:"https://element-plus.org/en-US/component/radio.html"},k(()=>r.value&&Sl(e.value))),{radioRef:n,isGroup:r,radioGroup:o,focus:c,size:s,disabled:u,tabIndex:f,modelValue:l,actualValue:a}},rH=["value","name","disabled"],aH=Y({name:"ElRadio"}),lH=Y({...aH,props:oH,emits:Fk,setup(e,{emit:t}){const n=e,o=Se("radio"),{radioRef:r,radioGroup:a,focus:l,size:s,disabled:u,modelValue:c,actualValue:f}=Vk(n,t);function d(){We(()=>t("change",c.value))}return(p,m)=>{var v;return T(),V("label",{class:N([i(o).b(),i(o).is("disabled",i(u)),i(o).is("focus",i(l)),i(o).is("bordered",p.border),i(o).is("checked",i(c)===i(f)),i(o).m(i(s))])},[F("span",{class:N([i(o).e("input"),i(o).is("disabled",i(u)),i(o).is("checked",i(c)===i(f))])},[tt(F("input",{ref_key:"radioRef",ref:r,"onUpdate:modelValue":m[0]||(m[0]=h=>xt(c)?c.value=h:null),class:N(i(o).e("original")),value:i(f),name:p.name||((v=i(a))==null?void 0:v.name),disabled:i(u),type:"radio",onFocus:m[1]||(m[1]=h=>l.value=!0),onBlur:m[2]||(m[2]=h=>l.value=!1),onChange:d,onClick:m[3]||(m[3]=Qe(()=>{},["stop"]))},null,42,rH),[[Eu,i(c)]]),F("span",{class:N(i(o).e("inner"))},null,2)],2),F("span",{class:N(i(o).e("label")),onKeydown:m[4]||(m[4]=Qe(()=>{},["stop"]))},[ie(p.$slots,"default",{},()=>[Ge(le(p.label),1)])],34)],2)}}});var sH=Ie(lH,[["__file","radio.vue"]]);const iH=Ne({...Dk}),uH=["value","name","disabled"],cH=Y({name:"ElRadioButton"}),dH=Y({...cH,props:iH,setup(e){const t=e,n=Se("radio"),{radioRef:o,focus:r,size:a,disabled:l,modelValue:s,radioGroup:u,actualValue:c}=Vk(t),f=k(()=>({backgroundColor:(u==null?void 0:u.fill)||"",borderColor:(u==null?void 0:u.fill)||"",boxShadow:u!=null&&u.fill?`-1px 0 0 0 ${u.fill}`:"",color:(u==null?void 0:u.textColor)||""}));return(d,p)=>{var m;return T(),V("label",{class:N([i(n).b("button"),i(n).is("active",i(s)===i(c)),i(n).is("disabled",i(l)),i(n).is("focus",i(r)),i(n).bm("button",i(a))])},[tt(F("input",{ref_key:"radioRef",ref:o,"onUpdate:modelValue":p[0]||(p[0]=v=>xt(s)?s.value=v:null),class:N(i(n).be("button","original-radio")),value:i(c),type:"radio",name:d.name||((m=i(u))==null?void 0:m.name),disabled:i(l),onFocus:p[1]||(p[1]=v=>r.value=!0),onBlur:p[2]||(p[2]=v=>r.value=!1),onClick:p[3]||(p[3]=Qe(()=>{},["stop"]))},null,42,uH),[[Eu,i(s)]]),F("span",{class:N(i(n).be("button","inner")),style:je(i(s)===i(c)?i(f):{}),onKeydown:p[4]||(p[4]=Qe(()=>{},["stop"]))},[ie(d.$slots,"default",{},()=>[Ge(le(d.label),1)])],38)],2)}}});var Hk=Ie(dH,[["__file","radio-button.vue"]]);const fH=Ne({id:{type:String,default:void 0},size:gn,disabled:Boolean,modelValue:{type:[String,Number,Boolean],default:void 0},fill:{type:String,default:""},label:{type:String,default:void 0},textColor:{type:String,default:""},name:{type:String,default:void 0},validateEvent:{type:Boolean,default:!0},...An(["ariaLabel"])}),pH=Fk,hH=["id","aria-label","aria-labelledby"],mH=Y({name:"ElRadioGroup"}),vH=Y({...mH,props:fH,emits:pH,setup(e,{emit:t}){const n=e,o=Se("radio"),r=xn(),a=R(),{formItem:l}=qn(),{inputId:s,isLabeledByFormItem:u}=cr(n,{formItemContext:l}),c=d=>{t(ft,d),We(()=>t("change",d))};at(()=>{const d=a.value.querySelectorAll("[type=radio]"),p=d[0];!Array.from(d).some(m=>m.checked)&&p&&(p.tabIndex=0)});const f=k(()=>n.name||r.value);return yt(Bk,Et({...Cn(n),changeEvent:c,name:f})),ve(()=>n.modelValue,()=>{n.validateEvent&&(l==null||l.validate("change").catch(d=>void 0))}),wn({from:"label",replacement:"aria-label",version:"2.8.0",scope:"el-radio-group",ref:"https://element-plus.org/en-US/component/radio.html"},k(()=>!!n.label)),(d,p)=>(T(),V("div",{id:i(s),ref_key:"radioGroupRef",ref:a,class:N(i(o).b("group")),role:"radiogroup","aria-label":i(u)?void 0:d.label||d.ariaLabel||"radio-group","aria-labelledby":i(u)?i(l).labelId:void 0},[ie(d.$slots,"default")],10,hH))}});var zk=Ie(vH,[["__file","radio-group.vue"]]);const jk=ut(sH,{RadioButton:Hk,RadioGroup:zk}),gH=tn(zk),bH=tn(Hk);var yH=Y({name:"NodeContent",setup(){return{ns:Se("cascader-node")}},render(){const{ns:e}=this,{node:t,panel:n}=this.$parent,{data:o,label:r}=t,{renderLabelFn:a}=n;return Ke("span",{class:e.e("label")},a?a({node:t,data:o}):r)}});const cg=Symbol(),wH=Y({name:"ElCascaderNode",components:{ElCheckbox:Ho,ElRadio:jk,NodeContent:yH,ElIcon:ze,Check:Mu,Loading:Er,ArrowRight:Jn},props:{node:{type:Object,required:!0},menuId:String},emits:["expand"],setup(e,{emit:t}){const n=De(cg),o=Se("cascader-node"),r=k(()=>n.isHoverMenu),a=k(()=>n.config.multiple),l=k(()=>n.config.checkStrictly),s=k(()=>{var S;return(S=n.checkedNodes[0])==null?void 0:S.uid}),u=k(()=>e.node.isDisabled),c=k(()=>e.node.isLeaf),f=k(()=>l.value&&!c.value||!u.value),d=k(()=>m(n.expandingNode)),p=k(()=>l.value&&n.checkedNodes.some(m)),m=S=>{var E;const{level:$,uid:O}=e.node;return((E=S==null?void 0:S.pathNodes[$-1])==null?void 0:E.uid)===O},v=()=>{d.value||n.expandNode(e.node)},h=S=>{const{node:E}=e;S!==E.checked&&n.handleCheckChange(E,S)},C=()=>{n.lazyLoad(e.node,()=>{c.value||v()})},g=S=>{r.value&&(y(),!c.value&&t("expand",S))},y=()=>{const{node:S}=e;!f.value||S.loading||(S.loaded?v():C())},_=()=>{r.value&&!c.value||(c.value&&!u.value&&!l.value&&!a.value?w(!0):y())},b=S=>{l.value?(h(S),e.node.loaded&&v()):w(S)},w=S=>{e.node.loaded?(h(S),!l.value&&v()):C()};return{panel:n,isHoverMenu:r,multiple:a,checkStrictly:l,checkedNodeId:s,isDisabled:u,isLeaf:c,expandable:f,inExpandingPath:d,inCheckedPath:p,ns:o,handleHoverExpand:g,handleExpand:y,handleClick:_,handleCheck:w,handleSelectCheck:b}}}),_H=["id","aria-haspopup","aria-owns","aria-expanded","tabindex"],CH=F("span",null,null,-1);function SH(e,t,n,o,r,a){const l=qe("el-checkbox"),s=qe("el-radio"),u=qe("check"),c=qe("el-icon"),f=qe("node-content"),d=qe("loading"),p=qe("arrow-right");return T(),V("li",{id:`${e.menuId}-${e.node.uid}`,role:"menuitem","aria-haspopup":!e.isLeaf,"aria-owns":e.isLeaf?null:e.menuId,"aria-expanded":e.inExpandingPath,tabindex:e.expandable?-1:void 0,class:N([e.ns.b(),e.ns.is("selectable",e.checkStrictly),e.ns.is("active",e.node.checked),e.ns.is("disabled",!e.expandable),e.inExpandingPath&&"in-active-path",e.inCheckedPath&&"in-checked-path"]),onMouseenter:t[2]||(t[2]=(...m)=>e.handleHoverExpand&&e.handleHoverExpand(...m)),onFocus:t[3]||(t[3]=(...m)=>e.handleHoverExpand&&e.handleHoverExpand(...m)),onClick:t[4]||(t[4]=(...m)=>e.handleClick&&e.handleClick(...m))},[te(" prefix "),e.multiple?(T(),re(l,{key:0,"model-value":e.node.checked,indeterminate:e.node.indeterminate,disabled:e.isDisabled,onClick:t[0]||(t[0]=Qe(()=>{},["stop"])),"onUpdate:modelValue":e.handleSelectCheck},null,8,["model-value","indeterminate","disabled","onUpdate:modelValue"])):e.checkStrictly?(T(),re(s,{key:1,"model-value":e.checkedNodeId,label:e.node.uid,disabled:e.isDisabled,"onUpdate:modelValue":e.handleSelectCheck,onClick:t[1]||(t[1]=Qe(()=>{},["stop"]))},{default:X(()=>[te(` + Add an empty element to avoid render label, + do not use empty fragment here for https://github.com/vuejs/vue-next/pull/2485 + `),CH]),_:1},8,["model-value","label","disabled","onUpdate:modelValue"])):e.isLeaf&&e.node.checked?(T(),re(c,{key:2,class:N(e.ns.e("prefix"))},{default:X(()=>[K(u)]),_:1},8,["class"])):te("v-if",!0),te(" content "),K(f),te(" postfix "),e.isLeaf?te("v-if",!0):(T(),V(Ve,{key:3},[e.node.loading?(T(),re(c,{key:0,class:N([e.ns.is("loading"),e.ns.e("postfix")])},{default:X(()=>[K(d)]),_:1},8,["class"])):(T(),re(c,{key:1,class:N(["arrow-right",e.ns.e("postfix")])},{default:X(()=>[K(p)]),_:1},8,["class"]))],64))],42,_H)}var kH=Ie(wH,[["render",SH],["__file","node.vue"]]);const EH=Y({name:"ElCascaderMenu",components:{Loading:Er,ElIcon:ze,ElScrollbar:ea,ElCascaderNode:kH},props:{nodes:{type:Array,required:!0},index:{type:Number,required:!0}},setup(e){const t=lt(),n=Se("cascader-menu"),{t:o}=$t(),r=xn();let a=null,l=null;const s=De(cg),u=R(null),c=k(()=>!e.nodes.length),f=k(()=>!s.initialLoaded),d=k(()=>`${r.value}-${e.index}`),p=C=>{a=C.target},m=C=>{if(!(!s.isHoverMenu||!a||!u.value))if(a.contains(C.target)){v();const g=t.vnode.el,{left:y}=g.getBoundingClientRect(),{offsetWidth:_,offsetHeight:b}=g,w=C.clientX-y,S=a.offsetTop,E=S+a.offsetHeight;u.value.innerHTML=` + + + `}else l||(l=window.setTimeout(h,s.config.hoverThreshold))},v=()=>{l&&(clearTimeout(l),l=null)},h=()=>{u.value&&(u.value.innerHTML="",v())};return{ns:n,panel:s,hoverZone:u,isEmpty:c,isLoading:f,menuId:d,t:o,handleExpand:p,handleMouseMove:m,clearHoverZone:h}}});function TH(e,t,n,o,r,a){const l=qe("el-cascader-node"),s=qe("loading"),u=qe("el-icon"),c=qe("el-scrollbar");return T(),re(c,{key:e.menuId,tag:"ul",role:"menu",class:N(e.ns.b()),"wrap-class":e.ns.e("wrap"),"view-class":[e.ns.e("list"),e.ns.is("empty",e.isEmpty)],onMousemove:e.handleMouseMove,onMouseleave:e.clearHoverZone},{default:X(()=>{var f;return[(T(!0),V(Ve,null,bt(e.nodes,d=>(T(),re(l,{key:d.uid,node:d,"menu-id":e.menuId,onExpand:e.handleExpand},null,8,["node","menu-id","onExpand"]))),128)),e.isLoading?(T(),V("div",{key:0,class:N(e.ns.e("empty-text"))},[K(u,{size:"14",class:N(e.ns.is("loading"))},{default:X(()=>[K(s)]),_:1},8,["class"]),Ge(" "+le(e.t("el.cascader.loading")),1)],2)):e.isEmpty?(T(),V("div",{key:1,class:N(e.ns.e("empty-text"))},le(e.t("el.cascader.noData")),3)):(f=e.panel)!=null&&f.isHoverMenu?(T(),V("svg",{key:2,ref:"hoverZone",class:N(e.ns.e("hover-zone"))},null,2)):te("v-if",!0)]}),_:1},8,["class","wrap-class","view-class","onMousemove","onMouseleave"])}var $H=Ie(EH,[["render",TH],["__file","menu.vue"]]);let OH=0;const NH=e=>{const t=[e];let{parent:n}=e;for(;n;)t.unshift(n),n=n.parent;return t};let zh=class jh{constructor(t,n,o,r=!1){this.data=t,this.config=n,this.parent=o,this.root=r,this.uid=OH++,this.checked=!1,this.indeterminate=!1,this.loading=!1;const{value:a,label:l,children:s}=n,u=t[s],c=NH(this);this.level=r?0:o?o.level+1:1,this.value=t[a],this.label=t[l],this.pathNodes=c,this.pathValues=c.map(f=>f.value),this.pathLabels=c.map(f=>f.label),this.childrenData=u,this.children=(u||[]).map(f=>new jh(f,n,this)),this.loaded=!n.lazy||this.isLeaf||!Io(u)}get isDisabled(){const{data:t,parent:n,config:o}=this,{disabled:r,checkStrictly:a}=o;return(Xe(r)?r(t,this):!!t[r])||!a&&(n==null?void 0:n.isDisabled)}get isLeaf(){const{data:t,config:n,childrenData:o,loaded:r}=this,{lazy:a,leaf:l}=n,s=Xe(l)?l(t,this):t[l];return pn(s)?a&&!r?!1:!(Array.isArray(o)&&o.length):!!s}get valueByOption(){return this.config.emitPath?this.pathValues:this.value}appendChild(t){const{childrenData:n,children:o}=this,r=new jh(t,this.config,this);return Array.isArray(n)?n.push(t):this.childrenData=[t],o.push(r),r}calcText(t,n){const o=t?this.pathLabels.join(n):this.label;return this.text=o,o}broadcast(t,...n){const o=`onParent${mr(t)}`;this.children.forEach(r=>{r&&(r.broadcast(t,...n),r[o]&&r[o](...n))})}emit(t,...n){const{parent:o}=this,r=`onChild${mr(t)}`;o&&(o[r]&&o[r](...n),o.emit(t,...n))}onParentCheck(t){this.isDisabled||this.setCheckState(t)}onChildCheck(){const{children:t}=this,n=t.filter(r=>!r.isDisabled),o=n.length?n.every(r=>r.checked):!1;this.setCheckState(o)}setCheckState(t){const n=this.children.length,o=this.children.reduce((r,a)=>{const l=a.checked?1:a.indeterminate?.5:0;return r+l},0);this.checked=this.loaded&&this.children.filter(r=>!r.isDisabled).every(r=>r.loaded&&r.checked)&&t,this.indeterminate=this.loaded&&o!==n&&o>0}doCheck(t){if(this.checked===t)return;const{checkStrictly:n,multiple:o}=this.config;n||!o?this.checked=t:(this.broadcast("check",t),this.setCheckState(t),this.emit("check"))}};const Wh=(e,t)=>e.reduce((n,o)=>(o.isLeaf?n.push(o):(!t&&n.push(o),n=n.concat(Wh(o.children,t))),n),[]);class Y0{constructor(t,n){this.config=n;const o=(t||[]).map(r=>new zh(r,this.config));this.nodes=o,this.allNodes=Wh(o,!1),this.leafNodes=Wh(o,!0)}getNodes(){return this.nodes}getFlattedNodes(t){return t?this.leafNodes:this.allNodes}appendNode(t,n){const o=n?n.appendChild(t):new zh(t,this.config);n||this.nodes.push(o),this.allNodes.push(o),o.isLeaf&&this.leafNodes.push(o)}appendNodes(t,n){t.forEach(o=>this.appendNode(o,n))}getNodeByValue(t,n=!1){return!t&&t!==0?null:this.getFlattedNodes(n).find(r=>Wn(r.value,t)||Wn(r.pathValues,t))||null}getSameNode(t){return t&&this.getFlattedNodes(!1).find(({value:o,level:r})=>Wn(t.value,o)&&t.level===r)||null}}const Wk=Ne({modelValue:{type:Q([Number,String,Array])},options:{type:Q(Array),default:()=>[]},props:{type:Q(Object),default:()=>({})}}),IH={expandTrigger:"click",multiple:!1,checkStrictly:!1,emitPath:!0,lazy:!1,lazyLoad:Bt,value:"value",label:"label",children:"children",leaf:"leaf",disabled:"disabled",hoverThreshold:500},MH=e=>k(()=>({...IH,...e.props})),G0=e=>{if(!e)return 0;const t=e.id.split("-");return Number(t[t.length-2])},AH=e=>{if(!e)return;const t=e.querySelector("input");t?t.click():G_(e)&&e.click()},PH=(e,t)=>{const n=t.slice(0),o=n.map(a=>a.uid),r=e.reduce((a,l)=>{const s=o.indexOf(l.uid);return s>-1&&(a.push(l),n.splice(s,1),o.splice(s,1)),a},[]);return r.push(...n),r},RH=Y({name:"ElCascaderPanel",components:{ElCascaderMenu:$H},props:{...Wk,border:{type:Boolean,default:!0},renderLabel:Function},emits:[ft,Yt,"close","expand-change"],setup(e,{emit:t,slots:n}){let o=!1;const r=Se("cascader"),a=MH(e);let l=null;const s=R(!0),u=R([]),c=R(null),f=R([]),d=R(null),p=R([]),m=k(()=>a.value.expandTrigger==="hover"),v=k(()=>e.renderLabel||n.default),h=()=>{const{options:D}=e,U=a.value;o=!1,l=new Y0(D,U),f.value=[l.getNodes()],U.lazy&&Io(e.options)?(s.value=!1,C(void 0,j=>{j&&(l=new Y0(j,U),f.value=[l.getNodes()]),s.value=!0,$(!1,!0)})):$(!1,!0)},C=(D,U)=>{const j=a.value;D=D||new zh({},j,void 0,!0),D.loading=!0;const W=L=>{const P=D,x=P.root?null:P;L&&(l==null||l.appendNodes(L,x)),P.loading=!1,P.loaded=!0,P.childrenData=P.childrenData||[],U&&U(L)};j.lazyLoad(D,W)},g=(D,U)=>{var j;const{level:W}=D,L=f.value.slice(0,W);let P;D.isLeaf?P=D.pathNodes[W-2]:(P=D,L.push(D.children)),((j=d.value)==null?void 0:j.uid)!==(P==null?void 0:P.uid)&&(d.value=D,f.value=L,!U&&t("expand-change",(D==null?void 0:D.pathValues)||[]))},y=(D,U,j=!0)=>{const{checkStrictly:W,multiple:L}=a.value,P=p.value[0];o=!0,!L&&(P==null||P.doCheck(!1)),D.doCheck(U),E(),j&&!L&&!W&&t("close"),!j&&!L&&!W&&_(D)},_=D=>{D&&(D=D.parent,_(D),D&&g(D))},b=D=>l==null?void 0:l.getFlattedNodes(D),w=D=>{var U;return(U=b(D))==null?void 0:U.filter(j=>j.checked!==!1)},S=()=>{p.value.forEach(D=>D.doCheck(!1)),E(),f.value=f.value.slice(0,1),d.value=null,t("expand-change",[])},E=()=>{var D;const{checkStrictly:U,multiple:j}=a.value,W=p.value,L=w(!U),P=PH(W,L),x=P.map(I=>I.valueByOption);p.value=P,c.value=j?x:(D=x[0])!=null?D:null},$=(D=!1,U=!1)=>{const{modelValue:j}=e,{lazy:W,multiple:L,checkStrictly:P}=a.value,x=!P;if(!(!s.value||o||!U&&Wn(j,c.value)))if(W&&!D){const H=qy(Ix(Vn(j))).map(G=>l==null?void 0:l.getNodeByValue(G)).filter(G=>!!G&&!G.loaded&&!G.loading);H.length?H.forEach(G=>{C(G,()=>$(!1,U))}):$(!0,U)}else{const I=L?Vn(j):[j],H=qy(I.map(G=>l==null?void 0:l.getNodeByValue(G,x)));O(H,U),c.value=pd(j)}},O=(D,U=!0)=>{const{checkStrictly:j}=a.value,W=p.value,L=D.filter(I=>!!I&&(j||I.isLeaf)),P=l==null?void 0:l.getSameNode(d.value),x=U&&P||L[0];x?x.pathNodes.forEach(I=>g(I,!0)):d.value=null,W.forEach(I=>I.doCheck(!1)),Et(L).forEach(I=>I.doCheck(!0)),p.value=L,We(A)},A=()=>{Ct&&u.value.forEach(D=>{const U=D==null?void 0:D.$el;if(U){const j=U.querySelector(`.${r.namespace.value}-scrollbar__wrap`),W=U.querySelector(`.${r.b("node")}.${r.is("active")}`)||U.querySelector(`.${r.b("node")}.in-active-path`);KC(j,W)}})},M=D=>{const U=D.target,{code:j}=D;switch(j){case Ue.up:case Ue.down:{D.preventDefault();const W=j===Ue.up?-1:1;Ic(X_(U,W,`.${r.b("node")}[tabindex="-1"]`));break}case Ue.left:{D.preventDefault();const W=u.value[G0(U)-1],L=W==null?void 0:W.$el.querySelector(`.${r.b("node")}[aria-expanded="true"]`);Ic(L);break}case Ue.right:{D.preventDefault();const W=u.value[G0(U)+1],L=W==null?void 0:W.$el.querySelector(`.${r.b("node")}[tabindex="-1"]`);Ic(L);break}case Ue.enter:AH(U);break}};return yt(cg,Et({config:a,expandingNode:d,checkedNodes:p,isHoverMenu:m,initialLoaded:s,renderLabelFn:v,lazyLoad:C,expandNode:g,handleCheckChange:y})),ve([a,()=>e.options],h,{deep:!0,immediate:!0}),ve(()=>e.modelValue,()=>{o=!1,$()},{deep:!0}),ve(()=>c.value,D=>{Wn(D,e.modelValue)||(t(ft,D),t(Yt,D))}),ev(()=>u.value=[]),at(()=>!Io(e.modelValue)&&$()),{ns:r,menuList:u,menus:f,checkedNodes:p,handleKeyDown:M,handleCheckChange:y,getFlattedNodes:b,getCheckedNodes:w,clearCheckedNodes:S,calculateCheckedValue:E,scrollToExpandingNode:A}}});function LH(e,t,n,o,r,a){const l=qe("el-cascader-menu");return T(),V("div",{class:N([e.ns.b("panel"),e.ns.is("bordered",e.border)]),onKeydown:t[0]||(t[0]=(...s)=>e.handleKeyDown&&e.handleKeyDown(...s))},[(T(!0),V(Ve,null,bt(e.menus,(s,u)=>(T(),re(l,{key:u,ref_for:!0,ref:c=>e.menuList[u]=c,index:u,nodes:[...s]},null,8,["index","nodes"]))),128))],34)}var Fc=Ie(RH,[["render",LH],["__file","index.vue"]]);Fc.install=e=>{e.component(Fc.name,Fc)};const Kk=Fc,xH=Kk,$l=Ne({type:{type:String,values:["primary","success","info","warning","danger"],default:"primary"},closable:Boolean,disableTransitions:Boolean,hit:Boolean,color:String,size:{type:String,values:Ir},effect:{type:String,values:["dark","light","plain"],default:"light"},round:Boolean}),DH={close:e=>e instanceof MouseEvent,click:e=>e instanceof MouseEvent},FH=Y({name:"ElTag"}),BH=Y({...FH,props:$l,emits:DH,setup(e,{emit:t}){const n=e,o=hn(),r=Se("tag"),a=k(()=>{const{type:u,hit:c,effect:f,closable:d,round:p}=n;return[r.b(),r.is("closable",d),r.m(u||"primary"),r.m(o.value),r.m(f),r.is("hit",c),r.is("round",p)]}),l=u=>{t("close",u)},s=u=>{t("click",u)};return(u,c)=>u.disableTransitions?(T(),V("span",{key:0,class:N(i(a)),style:je({backgroundColor:u.color}),onClick:s},[F("span",{class:N(i(r).e("content"))},[ie(u.$slots,"default")],2),u.closable?(T(),re(i(ze),{key:0,class:N(i(r).e("close")),onClick:Qe(l,["stop"])},{default:X(()=>[K(i(tr))]),_:1},8,["class","onClick"])):te("v-if",!0)],6)):(T(),re(fn,{key:1,name:`${i(r).namespace.value}-zoom-in-center`,appear:""},{default:X(()=>[F("span",{class:N(i(a)),style:je({backgroundColor:u.color}),onClick:s},[F("span",{class:N(i(r).e("content"))},[ie(u.$slots,"default")],2),u.closable?(T(),re(i(ze),{key:0,class:N(i(r).e("close")),onClick:Qe(l,["stop"])},{default:X(()=>[K(i(tr))]),_:1},8,["class","onClick"])):te("v-if",!0)],6)]),_:3},8,["name"]))}});var VH=Ie(BH,[["__file","tag.vue"]]);const su=ut(VH),HH=Ne({...Wk,size:gn,placeholder:String,disabled:Boolean,clearable:Boolean,filterable:Boolean,filterMethod:{type:Q(Function),default:(e,t)=>e.text.includes(t)},separator:{type:String,default:" / "},showAllLevels:{type:Boolean,default:!0},collapseTags:Boolean,maxCollapseTags:{type:Number,default:1},collapseTagsTooltip:{type:Boolean,default:!1},debounce:{type:Number,default:300},beforeFilter:{type:Q(Function),default:()=>!0},popperClass:{type:String,default:""},teleported:kn.teleported,tagType:{...$l.type,default:"info"},tagEffect:{...$l.effect,default:"light"},validateEvent:{type:Boolean,default:!0},persistent:{type:Boolean,default:!0},...ei}),zH={[ft]:e=>!0,[Yt]:e=>!0,focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,visibleChange:e=>dn(e),expandChange:e=>!!e,removeTag:e=>!!e},jH={key:0},WH=["placeholder","onKeydown"],KH=["onClick"],UH="ElCascader",qH=Y({name:UH}),YH=Y({...qH,props:HH,emits:zH,setup(e,{expose:t,emit:n}){const o=e,r={modifiers:[{name:"arrowPosition",enabled:!0,phase:"main",fn:({state:ne})=>{const{modifiersData:be,placement:Fe}=ne;["right","left","bottom","top"].includes(Fe)||(be.arrow.x=35)},requires:["arrow"]}]},a=xa();let l=0,s=0;const u=Se("cascader"),c=Se("input"),{t:f}=$t(),{form:d,formItem:p}=qn(),{valueOnClear:m}=wf(o),v=R(null),h=R(null),C=R(null),g=R(null),y=R(null),_=R(!1),b=R(!1),w=R(!1),S=R(!1),E=R(""),$=R(""),O=R([]),A=R([]),M=R([]),D=R(!1),U=k(()=>a.style),j=k(()=>o.disabled||(d==null?void 0:d.disabled)),W=k(()=>o.placeholder||f("el.cascader.placeholder")),L=k(()=>$.value||O.value.length>0||D.value?"":W.value),P=hn(),x=k(()=>["small"].includes(P.value)?"small":"default"),I=k(()=>!!o.props.multiple),H=k(()=>!o.filterable||I.value),G=k(()=>I.value?$.value:E.value),J=k(()=>{var ne;return((ne=g.value)==null?void 0:ne.checkedNodes)||[]}),ee=k(()=>!o.clearable||j.value||w.value||!b.value?!1:!!J.value.length),fe=k(()=>{const{showAllLevels:ne,separator:be}=o,Fe=J.value;return Fe.length?I.value?"":Fe[0].calcText(ne,be):""}),Te=k(()=>(p==null?void 0:p.validateState)||""),oe=k({get(){return pd(o.modelValue)},set(ne){const be=ne??m.value;n(ft,be),n(Yt,be),o.validateEvent&&(p==null||p.validate("change").catch(Fe=>void 0))}}),ke=k(()=>[u.b(),u.m(P.value),u.is("disabled",j.value),a.class]),ae=k(()=>[c.e("icon"),"icon-arrow-down",u.is("reverse",_.value)]),Oe=k(()=>u.is("focus",_.value||S.value)),we=k(()=>{var ne,be;return(be=(ne=v.value)==null?void 0:ne.popperRef)==null?void 0:be.contentRef}),ge=ne=>{var be,Fe,vt;j.value||(ne=ne??!_.value,ne!==_.value&&(_.value=ne,(Fe=(be=h.value)==null?void 0:be.input)==null||Fe.setAttribute("aria-expanded",`${ne}`),ne?(q(),We((vt=g.value)==null?void 0:vt.scrollToExpandingNode)):o.filterable&&he(),n("visibleChange",ne)))},q=()=>{We(()=>{var ne;(ne=v.value)==null||ne.updatePopper()})},B=()=>{w.value=!1},z=ne=>{const{showAllLevels:be,separator:Fe}=o;return{node:ne,key:ne.uid,text:ne.calcText(be,Fe),hitState:!1,closable:!j.value&&!ne.isDisabled,isCollapseTag:!1}},Z=ne=>{var be;const Fe=ne.node;Fe.doCheck(!1),(be=g.value)==null||be.calculateCheckedValue(),n("removeTag",Fe.valueByOption)},ue=()=>{if(!I.value)return;const ne=J.value,be=[],Fe=[];if(ne.forEach(vt=>Fe.push(z(vt))),A.value=Fe,ne.length){ne.slice(0,o.maxCollapseTags).forEach(Ye=>be.push(z(Ye)));const vt=ne.slice(o.maxCollapseTags),pe=vt.length;pe&&(o.collapseTags?be.push({key:-1,text:`+ ${pe}`,closable:!1,isCollapseTag:!0}):vt.forEach(Ye=>be.push(z(Ye))))}O.value=be},se=()=>{var ne,be;const{filterMethod:Fe,showAllLevels:vt,separator:pe}=o,Ye=(be=(ne=g.value)==null?void 0:ne.getFlattedNodes(!o.props.checkStrictly))==null?void 0:be.filter(_t=>_t.isDisabled?!1:(_t.calcText(vt,pe),Fe(_t,G.value)));I.value&&(O.value.forEach(_t=>{_t.hitState=!1}),A.value.forEach(_t=>{_t.hitState=!1})),w.value=!0,M.value=Ye,q()},me=()=>{var ne;let be;w.value&&y.value?be=y.value.$el.querySelector(`.${u.e("suggestion-item")}`):be=(ne=g.value)==null?void 0:ne.$el.querySelector(`.${u.b("node")}[tabindex="-1"]`),be&&(be.focus(),!w.value&&be.click())},_e=()=>{var ne,be;const Fe=(ne=h.value)==null?void 0:ne.input,vt=C.value,pe=(be=y.value)==null?void 0:be.$el;if(!(!Ct||!Fe)){if(pe){const Ye=pe.querySelector(`.${u.e("suggestion-list")}`);Ye.style.minWidth=`${Fe.offsetWidth}px`}if(vt){const{offsetHeight:Ye}=vt,_t=O.value.length>0?`${Math.max(Ye+6,l)}px`:`${l}px`;Fe.style.height=_t,q()}}},$e=ne=>{var be;return(be=g.value)==null?void 0:be.getCheckedNodes(ne)},Ce=ne=>{q(),n("expandChange",ne)},ce=ne=>{var be;const Fe=(be=ne.target)==null?void 0:be.value;if(ne.type==="compositionend")D.value=!1,We(()=>Ee(Fe));else{const vt=Fe[Fe.length-1]||"";D.value=!Lv(vt)}},de=ne=>{if(!D.value)switch(ne.code){case Ue.enter:ge();break;case Ue.down:ge(!0),We(me),ne.preventDefault();break;case Ue.esc:_.value===!0&&(ne.preventDefault(),ne.stopPropagation(),ge(!1));break;case Ue.tab:ge(!1);break}},xe=()=>{var ne;(ne=g.value)==null||ne.clearCheckedNodes(),!_.value&&o.filterable&&he(),ge(!1),n("clear")},he=()=>{const{value:ne}=fe;E.value=ne,$.value=ne},He=ne=>{var be,Fe;const{checked:vt}=ne;I.value?(be=g.value)==null||be.handleCheckChange(ne,!vt,!1):(!vt&&((Fe=g.value)==null||Fe.handleCheckChange(ne,!0,!1)),ge(!1))},et=ne=>{const be=ne.target,{code:Fe}=ne;switch(Fe){case Ue.up:case Ue.down:{const vt=Fe===Ue.up?-1:1;Ic(X_(be,vt,`.${u.e("suggestion-item")}[tabindex="-1"]`));break}case Ue.enter:be.click();break}},rt=()=>{const ne=O.value,be=ne[ne.length-1];s=$.value?0:s+1,!(!be||!s||o.collapseTags&&ne.length>1)&&(be.hitState?Z(be):be.hitState=!0)},wt=ne=>{const be=ne.target,Fe=u.e("search-input");be.className===Fe&&(S.value=!0),n("focus",ne)},Ze=ne=>{S.value=!1,n("blur",ne)},st=co(()=>{const{value:ne}=G;if(!ne)return;const be=o.beforeFilter(ne);vs(be)?be.then(se).catch(()=>{}):be!==!1?se():B()},o.debounce),Ee=(ne,be)=>{!_.value&&ge(!0),!(be!=null&&be.isComposing)&&(ne?st():B())},ye=ne=>Number.parseFloat(rM(c.cssVarName("input-height"),ne).value)-2;return ve(w,q),ve([J,j,()=>o.collapseTags],ue),ve(O,()=>{We(()=>_e())}),ve(P,async()=>{await We();const ne=h.value.input;l=ye(ne)||l,_e()}),ve(fe,he,{immediate:!0}),at(()=>{const ne=h.value.input,be=ye(ne);l=ne.offsetHeight||be,Qt(ne,_e)}),t({getCheckedNodes:$e,cascaderPanelRef:g,togglePopperVisible:ge,contentRef:we}),(ne,be)=>(T(),re(i(Un),{ref_key:"tooltipRef",ref:v,visible:_.value,teleported:ne.teleported,"popper-class":[i(u).e("dropdown"),ne.popperClass],"popper-options":r,"fallback-placements":["bottom-start","bottom","top-start","top","right","left"],"stop-popper-mouse-event":!1,"gpu-acceleration":!1,placement:"bottom-start",transition:`${i(u).namespace.value}-zoom-in-top`,effect:"light",pure:"",persistent:ne.persistent,onHide:B},{default:X(()=>[tt((T(),V("div",{class:N(i(ke)),style:je(i(U)),onClick:be[5]||(be[5]=()=>ge(i(H)?void 0:!0)),onKeydown:de,onMouseenter:be[6]||(be[6]=Fe=>b.value=!0),onMouseleave:be[7]||(be[7]=Fe=>b.value=!1)},[K(i(zn),{ref_key:"input",ref:h,modelValue:E.value,"onUpdate:modelValue":be[1]||(be[1]=Fe=>E.value=Fe),placeholder:i(L),readonly:i(H),disabled:i(j),"validate-event":!1,size:i(P),class:N(i(Oe)),tabindex:i(I)&&ne.filterable&&!i(j)?-1:void 0,onCompositionstart:ce,onCompositionupdate:ce,onCompositionend:ce,onFocus:wt,onBlur:Ze,onInput:Ee},{suffix:X(()=>[i(ee)?(T(),re(i(ze),{key:"clear",class:N([i(c).e("icon"),"icon-circle-close"]),onClick:Qe(xe,["stop"])},{default:X(()=>[K(i(Fa))]),_:1},8,["class","onClick"])):(T(),re(i(ze),{key:"arrow-down",class:N(i(ae)),onClick:be[0]||(be[0]=Qe(Fe=>ge(),["stop"]))},{default:X(()=>[K(i(Nr))]),_:1},8,["class"]))]),_:1},8,["modelValue","placeholder","readonly","disabled","size","class","tabindex"]),i(I)?(T(),V("div",{key:0,ref_key:"tagWrapper",ref:C,class:N([i(u).e("tags"),i(u).is("validate",!!i(Te))])},[(T(!0),V(Ve,null,bt(O.value,Fe=>(T(),re(i(su),{key:Fe.key,type:ne.tagType,size:i(x),effect:ne.tagEffect,hit:Fe.hitState,closable:Fe.closable,"disable-transitions":"",onClose:vt=>Z(Fe)},{default:X(()=>[Fe.isCollapseTag===!1?(T(),V("span",jH,le(Fe.text),1)):(T(),re(i(Un),{key:1,disabled:_.value||!ne.collapseTagsTooltip,"fallback-placements":["bottom","top","right","left"],placement:"bottom",effect:"light"},{default:X(()=>[F("span",null,le(Fe.text),1)]),content:X(()=>[F("div",{class:N(i(u).e("collapse-tags"))},[(T(!0),V(Ve,null,bt(A.value.slice(ne.maxCollapseTags),(vt,pe)=>(T(),V("div",{key:pe,class:N(i(u).e("collapse-tag"))},[(T(),re(i(su),{key:vt.key,class:"in-tooltip",type:ne.tagType,size:i(x),effect:ne.tagEffect,hit:vt.hitState,closable:vt.closable,"disable-transitions":"",onClose:Ye=>Z(vt)},{default:X(()=>[F("span",null,le(vt.text),1)]),_:2},1032,["type","size","effect","hit","closable","onClose"]))],2))),128))],2)]),_:2},1032,["disabled"]))]),_:2},1032,["type","size","effect","hit","closable","onClose"]))),128)),ne.filterable&&!i(j)?tt((T(),V("input",{key:0,"onUpdate:modelValue":be[2]||(be[2]=Fe=>$.value=Fe),type:"text",class:N(i(u).e("search-input")),placeholder:i(fe)?"":i(W),onInput:be[3]||(be[3]=Fe=>Ee($.value,Fe)),onClick:be[4]||(be[4]=Qe(Fe=>ge(!0),["stop"])),onKeydown:Pt(rt,["delete"]),onCompositionstart:ce,onCompositionupdate:ce,onCompositionend:ce,onFocus:wt,onBlur:Ze},null,42,WH)),[[yl,$.value]]):te("v-if",!0)],2)):te("v-if",!0)],38)),[[i(Yr),()=>ge(!1),i(we)]])]),content:X(()=>[tt(K(i(Kk),{ref_key:"cascaderPanelRef",ref:g,modelValue:i(oe),"onUpdate:modelValue":be[8]||(be[8]=Fe=>xt(oe)?oe.value=Fe:null),options:ne.options,props:o.props,border:!1,"render-label":ne.$slots.default,onExpandChange:Ce,onClose:be[9]||(be[9]=Fe=>ne.$nextTick(()=>ge(!1)))},null,8,["modelValue","options","props","render-label"]),[[kt,!w.value]]),ne.filterable?tt((T(),re(i(ea),{key:0,ref_key:"suggestionPanel",ref:y,tag:"ul",class:N(i(u).e("suggestion-panel")),"view-class":i(u).e("suggestion-list"),onKeydown:et},{default:X(()=>[M.value.length?(T(!0),V(Ve,{key:0},bt(M.value,Fe=>(T(),V("li",{key:Fe.uid,class:N([i(u).e("suggestion-item"),i(u).is("checked",Fe.checked)]),tabindex:-1,onClick:vt=>He(Fe)},[F("span",null,le(Fe.text),1),Fe.checked?(T(),re(i(ze),{key:0},{default:X(()=>[K(i(Mu))]),_:1})):te("v-if",!0)],10,KH))),128)):ie(ne.$slots,"empty",{key:1},()=>[F("li",{class:N(i(u).e("empty-text"))},le(i(f)("el.cascader.noMatch")),3)])]),_:3},8,["class","view-class"])),[[kt,w.value]]):te("v-if",!0)]),_:3},8,["visible","teleported","popper-class","transition","persistent"]))}});var Bc=Ie(YH,[["__file","cascader.vue"]]);Bc.install=e=>{e.component(Bc.name,Bc)};const GH=Bc,XH=GH,JH=Ne({checked:Boolean,type:{type:String,values:["primary","success","info","warning","danger"],default:"primary"}}),ZH={"update:checked":e=>dn(e),[Yt]:e=>dn(e)},QH=Y({name:"ElCheckTag"}),ez=Y({...QH,props:JH,emits:ZH,setup(e,{emit:t}){const n=e,o=Se("check-tag"),r=k(()=>[o.b(),o.is("checked",n.checked),o.m(n.type||"primary")]),a=()=>{const l=!n.checked;t(Yt,l),t("update:checked",l)};return(l,s)=>(T(),V("span",{class:N(i(r)),onClick:a},[ie(l.$slots,"default")],2))}});var tz=Ie(ez,[["__file","check-tag.vue"]]);const nz=ut(tz),Uk=Symbol("rowContextKey"),oz=["start","center","end","space-around","space-between","space-evenly"],rz=["top","middle","bottom"],az=Ne({tag:{type:String,default:"div"},gutter:{type:Number,default:0},justify:{type:String,values:oz,default:"start"},align:{type:String,values:rz}}),lz=Y({name:"ElRow"}),sz=Y({...lz,props:az,setup(e){const t=e,n=Se("row"),o=k(()=>t.gutter);yt(Uk,{gutter:o});const r=k(()=>{const l={};return t.gutter&&(l.marginRight=l.marginLeft=`-${t.gutter/2}px`),l}),a=k(()=>[n.b(),n.is(`justify-${t.justify}`,t.justify!=="start"),n.is(`align-${t.align}`,!!t.align)]);return(l,s)=>(T(),re(pt(l.tag),{class:N(i(a)),style:je(i(r))},{default:X(()=>[ie(l.$slots,"default")]),_:3},8,["class","style"]))}});var iz=Ie(sz,[["__file","row.vue"]]);const uz=ut(iz),cz=Ne({tag:{type:String,default:"div"},span:{type:Number,default:24},offset:{type:Number,default:0},pull:{type:Number,default:0},push:{type:Number,default:0},xs:{type:Q([Number,Object]),default:()=>en({})},sm:{type:Q([Number,Object]),default:()=>en({})},md:{type:Q([Number,Object]),default:()=>en({})},lg:{type:Q([Number,Object]),default:()=>en({})},xl:{type:Q([Number,Object]),default:()=>en({})}}),dz=Y({name:"ElCol"}),fz=Y({...dz,props:cz,setup(e){const t=e,{gutter:n}=De(Uk,{gutter:k(()=>0)}),o=Se("col"),r=k(()=>{const l={};return n.value&&(l.paddingLeft=l.paddingRight=`${n.value/2}px`),l}),a=k(()=>{const l=[];return["span","offset","pull","push"].forEach(c=>{const f=t[c];Je(f)&&(c==="span"?l.push(o.b(`${t[c]}`)):f>0&&l.push(o.b(`${c}-${t[c]}`)))}),["xs","sm","md","lg","xl"].forEach(c=>{Je(t[c])?l.push(o.b(`${c}-${t[c]}`)):dt(t[c])&&Object.entries(t[c]).forEach(([f,d])=>{l.push(f!=="span"?o.b(`${c}-${f}-${d}`):o.b(`${c}-${d}`))})}),n.value&&l.push(o.is("guttered")),[o.b(),l]});return(l,s)=>(T(),re(pt(l.tag),{class:N(i(a)),style:je(i(r))},{default:X(()=>[ie(l.$slots,"default")]),_:3},8,["class","style"]))}});var pz=Ie(fz,[["__file","col.vue"]]);const hz=ut(pz),X0=e=>Je(e)||nt(e)||Pe(e),mz=Ne({accordion:Boolean,modelValue:{type:Q([Array,String,Number]),default:()=>en([])}}),vz={[ft]:X0,[Yt]:X0},qk=Symbol("collapseContextKey"),gz=(e,t)=>{const n=R(Ia(e.modelValue)),o=a=>{n.value=a;const l=e.accordion?n.value[0]:n.value;t(ft,l),t(Yt,l)},r=a=>{if(e.accordion)o([n.value[0]===a?"":a]);else{const l=[...n.value],s=l.indexOf(a);s>-1?l.splice(s,1):l.push(a),o(l)}};return ve(()=>e.modelValue,()=>n.value=Ia(e.modelValue),{deep:!0}),yt(qk,{activeNames:n,handleItemClick:r}),{activeNames:n,setActiveNames:o}},bz=()=>{const e=Se("collapse");return{rootKls:k(()=>e.b())}},yz=Y({name:"ElCollapse"}),wz=Y({...yz,props:mz,emits:vz,setup(e,{expose:t,emit:n}){const o=e,{activeNames:r,setActiveNames:a}=gz(o,n),{rootKls:l}=bz();return t({activeNames:r,setActiveNames:a}),(s,u)=>(T(),V("div",{class:N(i(l))},[ie(s.$slots,"default")],2))}});var _z=Ie(wz,[["__file","collapse.vue"]]);const Cz=Y({name:"ElCollapseTransition"}),Sz=Y({...Cz,setup(e){const t=Se("collapse-transition"),n=r=>{r.style.maxHeight="",r.style.overflow=r.dataset.oldOverflow,r.style.paddingTop=r.dataset.oldPaddingTop,r.style.paddingBottom=r.dataset.oldPaddingBottom},o={beforeEnter(r){r.dataset||(r.dataset={}),r.dataset.oldPaddingTop=r.style.paddingTop,r.dataset.oldPaddingBottom=r.style.paddingBottom,r.style.height&&(r.dataset.elExistsHeight=r.style.height),r.style.maxHeight=0,r.style.paddingTop=0,r.style.paddingBottom=0},enter(r){requestAnimationFrame(()=>{r.dataset.oldOverflow=r.style.overflow,r.dataset.elExistsHeight?r.style.maxHeight=r.dataset.elExistsHeight:r.scrollHeight!==0?r.style.maxHeight=`${r.scrollHeight}px`:r.style.maxHeight=0,r.style.paddingTop=r.dataset.oldPaddingTop,r.style.paddingBottom=r.dataset.oldPaddingBottom,r.style.overflow="hidden"})},afterEnter(r){r.style.maxHeight="",r.style.overflow=r.dataset.oldOverflow},enterCancelled(r){n(r)},beforeLeave(r){r.dataset||(r.dataset={}),r.dataset.oldPaddingTop=r.style.paddingTop,r.dataset.oldPaddingBottom=r.style.paddingBottom,r.dataset.oldOverflow=r.style.overflow,r.style.maxHeight=`${r.scrollHeight}px`,r.style.overflow="hidden"},leave(r){r.scrollHeight!==0&&(r.style.maxHeight=0,r.style.paddingTop=0,r.style.paddingBottom=0)},afterLeave(r){n(r)},leaveCancelled(r){n(r)}};return(r,a)=>(T(),re(fn,mt({name:i(t).b()},t_(o)),{default:X(()=>[ie(r.$slots,"default")]),_:3},16,["name"]))}});var Vc=Ie(Sz,[["__file","collapse-transition.vue"]]);Vc.install=e=>{e.component(Vc.name,Vc)};const Ef=Vc,kz=Ef,Ez=Ne({title:{type:String,default:""},name:{type:Q([String,Number]),default:void 0},disabled:Boolean}),Tz=e=>{const t=De(qk),{namespace:n}=Se("collapse"),o=R(!1),r=R(!1),a=Yv(),l=k(()=>a.current++),s=k(()=>{var p;return(p=e.name)!=null?p:`${n.value}-id-${a.prefix}-${i(l)}`}),u=k(()=>t==null?void 0:t.activeNames.value.includes(i(s)));return{focusing:o,id:l,isActive:u,handleFocus:()=>{setTimeout(()=>{r.value?r.value=!1:o.value=!0},50)},handleHeaderClick:()=>{e.disabled||(t==null||t.handleItemClick(i(s)),o.value=!1,r.value=!0)},handleEnterClick:()=>{t==null||t.handleItemClick(i(s))}}},$z=(e,{focusing:t,isActive:n,id:o})=>{const r=Se("collapse"),a=k(()=>[r.b("item"),r.is("active",i(n)),r.is("disabled",e.disabled)]),l=k(()=>[r.be("item","header"),r.is("active",i(n)),{focusing:i(t)&&!e.disabled}]),s=k(()=>[r.be("item","arrow"),r.is("active",i(n))]),u=k(()=>r.be("item","wrap")),c=k(()=>r.be("item","content")),f=k(()=>r.b(`content-${i(o)}`)),d=k(()=>r.b(`head-${i(o)}`));return{arrowKls:s,headKls:l,rootKls:a,itemWrapperKls:u,itemContentKls:c,scopedContentId:f,scopedHeadId:d}},Oz=["id","aria-expanded","aria-controls","aria-describedby","tabindex"],Nz=["id","aria-hidden","aria-labelledby"],Iz=Y({name:"ElCollapseItem"}),Mz=Y({...Iz,props:Ez,setup(e,{expose:t}){const n=e,{focusing:o,id:r,isActive:a,handleFocus:l,handleHeaderClick:s,handleEnterClick:u}=Tz(n),{arrowKls:c,headKls:f,rootKls:d,itemWrapperKls:p,itemContentKls:m,scopedContentId:v,scopedHeadId:h}=$z(n,{focusing:o,isActive:a,id:r});return t({isActive:a}),(C,g)=>(T(),V("div",{class:N(i(d))},[F("button",{id:i(h),class:N(i(f)),"aria-expanded":i(a),"aria-controls":i(v),"aria-describedby":i(v),tabindex:C.disabled?-1:0,type:"button",onClick:g[0]||(g[0]=(...y)=>i(s)&&i(s)(...y)),onKeydown:g[1]||(g[1]=Pt(Qe((...y)=>i(u)&&i(u)(...y),["stop","prevent"]),["space","enter"])),onFocus:g[2]||(g[2]=(...y)=>i(l)&&i(l)(...y)),onBlur:g[3]||(g[3]=y=>o.value=!1)},[ie(C.$slots,"title",{},()=>[Ge(le(C.title),1)]),K(i(ze),{class:N(i(c))},{default:X(()=>[K(i(Jn))]),_:1},8,["class"])],42,Oz),K(i(Ef),null,{default:X(()=>[tt(F("div",{id:i(v),role:"region",class:N(i(p)),"aria-hidden":!i(a),"aria-labelledby":i(h)},[F("div",{class:N(i(m))},[ie(C.$slots,"default")],2)],10,Nz),[[kt,i(a)]])]),_:3})],2))}});var Yk=Ie(Mz,[["__file","collapse-item.vue"]]);const Az=ut(_z,{CollapseItem:Yk}),Pz=tn(Yk),Rz=Ne({color:{type:Q(Object),required:!0},vertical:{type:Boolean,default:!1}});let _p=!1;function iu(e,t){if(!Ct)return;const n=function(a){var l;(l=t.drag)==null||l.call(t,a)},o=function(a){var l;document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",o),document.removeEventListener("touchmove",n),document.removeEventListener("touchend",o),document.onselectstart=null,document.ondragstart=null,_p=!1,(l=t.end)==null||l.call(t,a)},r=function(a){var l;_p||(a.preventDefault(),document.onselectstart=()=>!1,document.ondragstart=()=>!1,document.addEventListener("mousemove",n),document.addEventListener("mouseup",o),document.addEventListener("touchmove",n),document.addEventListener("touchend",o),_p=!0,(l=t.start)==null||l.call(t,a))};e.addEventListener("mousedown",r),e.addEventListener("touchstart",r)}const Lz=e=>{const t=lt(),n=Ut(),o=Ut();function r(l){l.target!==n.value&&a(l)}function a(l){if(!o.value||!n.value)return;const u=t.vnode.el.getBoundingClientRect(),{clientX:c,clientY:f}=dv(l);if(e.vertical){let d=f-u.top;d=Math.max(n.value.offsetHeight/2,d),d=Math.min(d,u.height-n.value.offsetHeight/2),e.color.set("alpha",Math.round((d-n.value.offsetHeight/2)/(u.height-n.value.offsetHeight)*100))}else{let d=c-u.left;d=Math.max(n.value.offsetWidth/2,d),d=Math.min(d,u.width-n.value.offsetWidth/2),e.color.set("alpha",Math.round((d-n.value.offsetWidth/2)/(u.width-n.value.offsetWidth)*100))}}return{thumb:n,bar:o,handleDrag:a,handleClick:r}},xz=(e,{bar:t,thumb:n,handleDrag:o})=>{const r=lt(),a=Se("color-alpha-slider"),l=R(0),s=R(0),u=R();function c(){if(!n.value||e.vertical)return 0;const y=r.vnode.el,_=e.color.get("alpha");return y?Math.round(_*(y.offsetWidth-n.value.offsetWidth/2)/100):0}function f(){if(!n.value)return 0;const y=r.vnode.el;if(!e.vertical)return 0;const _=e.color.get("alpha");return y?Math.round(_*(y.offsetHeight-n.value.offsetHeight/2)/100):0}function d(){if(e.color&&e.color.value){const{r:y,g:_,b}=e.color.toRgb();return`linear-gradient(to right, rgba(${y}, ${_}, ${b}, 0) 0%, rgba(${y}, ${_}, ${b}, 1) 100%)`}return""}function p(){l.value=c(),s.value=f(),u.value=d()}at(()=>{if(!t.value||!n.value)return;const y={drag:_=>{o(_)},end:_=>{o(_)}};iu(t.value,y),iu(n.value,y),p()}),ve(()=>e.color.get("alpha"),()=>p()),ve(()=>e.color.value,()=>p());const m=k(()=>[a.b(),a.is("vertical",e.vertical)]),v=k(()=>a.e("bar")),h=k(()=>a.e("thumb")),C=k(()=>({background:u.value})),g=k(()=>({left:rn(l.value),top:rn(s.value)}));return{rootKls:m,barKls:v,barStyle:C,thumbKls:h,thumbStyle:g,update:p}},Dz="ElColorAlphaSlider",Fz=Y({name:Dz}),Bz=Y({...Fz,props:Rz,setup(e,{expose:t}){const n=e,{bar:o,thumb:r,handleDrag:a,handleClick:l}=Lz(n),{rootKls:s,barKls:u,barStyle:c,thumbKls:f,thumbStyle:d,update:p}=xz(n,{bar:o,thumb:r,handleDrag:a});return t({update:p,bar:o,thumb:r}),(m,v)=>(T(),V("div",{class:N(i(s))},[F("div",{ref_key:"bar",ref:o,class:N(i(u)),style:je(i(c)),onClick:v[0]||(v[0]=(...h)=>i(l)&&i(l)(...h))},null,6),F("div",{ref_key:"thumb",ref:r,class:N(i(f)),style:je(i(d))},null,6)],2))}});var Vz=Ie(Bz,[["__file","alpha-slider.vue"]]);const Hz=Y({name:"ElColorHueSlider",props:{color:{type:Object,required:!0},vertical:Boolean},setup(e){const t=Se("color-hue-slider"),n=lt(),o=R(),r=R(),a=R(0),l=R(0),s=k(()=>e.color.get("hue"));ve(()=>s.value,()=>{p()});function u(m){m.target!==o.value&&c(m)}function c(m){if(!r.value||!o.value)return;const h=n.vnode.el.getBoundingClientRect(),{clientX:C,clientY:g}=dv(m);let y;if(e.vertical){let _=g-h.top;_=Math.min(_,h.height-o.value.offsetHeight/2),_=Math.max(o.value.offsetHeight/2,_),y=Math.round((_-o.value.offsetHeight/2)/(h.height-o.value.offsetHeight)*360)}else{let _=C-h.left;_=Math.min(_,h.width-o.value.offsetWidth/2),_=Math.max(o.value.offsetWidth/2,_),y=Math.round((_-o.value.offsetWidth/2)/(h.width-o.value.offsetWidth)*360)}e.color.set("hue",y)}function f(){if(!o.value)return 0;const m=n.vnode.el;if(e.vertical)return 0;const v=e.color.get("hue");return m?Math.round(v*(m.offsetWidth-o.value.offsetWidth/2)/360):0}function d(){if(!o.value)return 0;const m=n.vnode.el;if(!e.vertical)return 0;const v=e.color.get("hue");return m?Math.round(v*(m.offsetHeight-o.value.offsetHeight/2)/360):0}function p(){a.value=f(),l.value=d()}return at(()=>{if(!r.value||!o.value)return;const m={drag:v=>{c(v)},end:v=>{c(v)}};iu(r.value,m),iu(o.value,m),p()}),{bar:r,thumb:o,thumbLeft:a,thumbTop:l,hueValue:s,handleClick:u,update:p,ns:t}}});function zz(e,t,n,o,r,a){return T(),V("div",{class:N([e.ns.b(),e.ns.is("vertical",e.vertical)])},[F("div",{ref:"bar",class:N(e.ns.e("bar")),onClick:t[0]||(t[0]=(...l)=>e.handleClick&&e.handleClick(...l))},null,2),F("div",{ref:"thumb",class:N(e.ns.e("thumb")),style:je({left:e.thumbLeft+"px",top:e.thumbTop+"px"})},null,6)],2)}var jz=Ie(Hz,[["render",zz],["__file","hue-slider.vue"]]);const Wz=Ne({modelValue:String,id:String,showAlpha:Boolean,colorFormat:String,disabled:Boolean,size:gn,popperClass:{type:String,default:""},label:{type:String,default:void 0},tabindex:{type:[String,Number],default:0},teleported:kn.teleported,predefine:{type:Q(Array)},validateEvent:{type:Boolean,default:!0},...An(["ariaLabel"])}),Kz={[ft]:e=>nt(e)||Tn(e),[Yt]:e=>nt(e)||Tn(e),activeChange:e=>nt(e)||Tn(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent},Gk=Symbol("colorPickerContextKey"),J0=function(e,t,n){return[e,t*n/((e=(2-t)*n)<1?e:2-e)||0,e/2]},Uz=function(e){return typeof e=="string"&&e.includes(".")&&Number.parseFloat(e)===1},qz=function(e){return typeof e=="string"&&e.includes("%")},ps=function(e,t){Uz(e)&&(e="100%");const n=qz(e);return e=Math.min(t,Math.max(0,Number.parseFloat(`${e}`))),n&&(e=Number.parseInt(`${e*t}`,10)/100),Math.abs(e-t)<1e-6?1:e%t/Number.parseFloat(t)},Z0={10:"A",11:"B",12:"C",13:"D",14:"E",15:"F"},Hc=e=>{e=Math.min(Math.round(e),255);const t=Math.floor(e/16),n=e%16;return`${Z0[t]||t}${Z0[n]||n}`},Q0=function({r:e,g:t,b:n}){return Number.isNaN(+e)||Number.isNaN(+t)||Number.isNaN(+n)?"":`#${Hc(e)}${Hc(t)}${Hc(n)}`},Cp={A:10,B:11,C:12,D:13,E:14,F:15},Wa=function(e){return e.length===2?(Cp[e[0].toUpperCase()]||+e[0])*16+(Cp[e[1].toUpperCase()]||+e[1]):Cp[e[1].toUpperCase()]||+e[1]},Yz=function(e,t,n){t=t/100,n=n/100;let o=t;const r=Math.max(n,.01);n*=2,t*=n<=1?n:2-n,o*=r<=1?r:2-r;const a=(n+t)/2,l=n===0?2*o/(r+o):2*t/(n+t);return{h:e,s:l*100,v:a*100}},e1=(e,t,n)=>{e=ps(e,255),t=ps(t,255),n=ps(n,255);const o=Math.max(e,t,n),r=Math.min(e,t,n);let a;const l=o,s=o-r,u=o===0?0:s/o;if(o===r)a=0;else{switch(o){case e:{a=(t-n)/s+(t{this._hue=Math.max(0,Math.min(360,o)),this._saturation=Math.max(0,Math.min(100,r)),this._value=Math.max(0,Math.min(100,a)),this.doOnChange()};if(t.includes("hsl")){const o=t.replace(/hsla|hsl|\(|\)/gm,"").split(/\s|,/g).filter(r=>r!=="").map((r,a)=>a>2?Number.parseFloat(r):Number.parseInt(r,10));if(o.length===4?this._alpha=Number.parseFloat(o[3])*100:o.length===3&&(this._alpha=100),o.length>=3){const{h:r,s:a,v:l}=Yz(o[0],o[1],o[2]);n(r,a,l)}}else if(t.includes("hsv")){const o=t.replace(/hsva|hsv|\(|\)/gm,"").split(/\s|,/g).filter(r=>r!=="").map((r,a)=>a>2?Number.parseFloat(r):Number.parseInt(r,10));o.length===4?this._alpha=Number.parseFloat(o[3])*100:o.length===3&&(this._alpha=100),o.length>=3&&n(o[0],o[1],o[2])}else if(t.includes("rgb")){const o=t.replace(/rgba|rgb|\(|\)/gm,"").split(/\s|,/g).filter(r=>r!=="").map((r,a)=>a>2?Number.parseFloat(r):Number.parseInt(r,10));if(o.length===4?this._alpha=Number.parseFloat(o[3])*100:o.length===3&&(this._alpha=100),o.length>=3){const{h:r,s:a,v:l}=e1(o[0],o[1],o[2]);n(r,a,l)}}else if(t.includes("#")){const o=t.replace("#","").trim();if(!/^[0-9a-fA-F]{3}$|^[0-9a-fA-F]{6}$|^[0-9a-fA-F]{8}$/.test(o))return;let r,a,l;o.length===3?(r=Wa(o[0]+o[0]),a=Wa(o[1]+o[1]),l=Wa(o[2]+o[2])):(o.length===6||o.length===8)&&(r=Wa(o.slice(0,2)),a=Wa(o.slice(2,4)),l=Wa(o.slice(4,6))),o.length===8?this._alpha=Wa(o.slice(6))/255*100:(o.length===3||o.length===6)&&(this._alpha=100);const{h:s,s:u,v:c}=e1(r,a,l);n(s,u,c)}}compare(t){return Math.abs(t._hue-this._hue)<2&&Math.abs(t._saturation-this._saturation)<1&&Math.abs(t._value-this._value)<1&&Math.abs(t._alpha-this._alpha)<1}doOnChange(){const{_hue:t,_saturation:n,_value:o,_alpha:r,format:a}=this;if(this.enableAlpha)switch(a){case"hsl":{const l=J0(t,n/100,o/100);this.value=`hsla(${t}, ${Math.round(l[1]*100)}%, ${Math.round(l[2]*100)}%, ${this.get("alpha")/100})`;break}case"hsv":{this.value=`hsva(${t}, ${Math.round(n)}%, ${Math.round(o)}%, ${this.get("alpha")/100})`;break}case"hex":{this.value=`${Q0(mi(t,n,o))}${Hc(r*255/100)}`;break}default:{const{r:l,g:s,b:u}=mi(t,n,o);this.value=`rgba(${l}, ${s}, ${u}, ${this.get("alpha")/100})`}}else switch(a){case"hsl":{const l=J0(t,n/100,o/100);this.value=`hsl(${t}, ${Math.round(l[1]*100)}%, ${Math.round(l[2]*100)}%)`;break}case"hsv":{this.value=`hsv(${t}, ${Math.round(n)}%, ${Math.round(o)}%)`;break}case"rgb":{const{r:l,g:s,b:u}=mi(t,n,o);this.value=`rgb(${l}, ${s}, ${u})`;break}default:this.value=Q0(mi(t,n,o))}}}const Gz=Y({props:{colors:{type:Array,required:!0},color:{type:Object,required:!0},enableAlpha:{type:Boolean,required:!0}},setup(e){const t=Se("color-predefine"),{currentColor:n}=De(Gk),o=R(a(e.colors,e.color));ve(()=>n.value,l=>{const s=new Fi;s.fromString(l),o.value.forEach(u=>{u.selected=s.compare(u)})}),Mn(()=>{o.value=a(e.colors,e.color)});function r(l){e.color.fromString(e.colors[l])}function a(l,s){return l.map(u=>{const c=new Fi;return c.enableAlpha=e.enableAlpha,c.format="rgba",c.fromString(u),c.selected=c.value===s.value,c})}return{rgbaColors:o,handleSelect:r,ns:t}}}),Xz=["onClick"];function Jz(e,t,n,o,r,a){return T(),V("div",{class:N(e.ns.b())},[F("div",{class:N(e.ns.e("colors"))},[(T(!0),V(Ve,null,bt(e.rgbaColors,(l,s)=>(T(),V("div",{key:e.colors[s],class:N([e.ns.e("color-selector"),e.ns.is("alpha",l._alpha<100),{selected:l.selected}]),onClick:u=>e.handleSelect(s)},[F("div",{style:je({backgroundColor:l.value})},null,4)],10,Xz))),128))],2)],2)}var Zz=Ie(Gz,[["render",Jz],["__file","predefine.vue"]]);const Qz=Y({name:"ElSlPanel",props:{color:{type:Object,required:!0}},setup(e){const t=Se("color-svpanel"),n=lt(),o=R(0),r=R(0),a=R("hsl(0, 100%, 50%)"),l=k(()=>{const c=e.color.get("hue"),f=e.color.get("value");return{hue:c,value:f}});function s(){const c=e.color.get("saturation"),f=e.color.get("value"),d=n.vnode.el,{clientWidth:p,clientHeight:m}=d;r.value=c*p/100,o.value=(100-f)*m/100,a.value=`hsl(${e.color.get("hue")}, 100%, 50%)`}function u(c){const d=n.vnode.el.getBoundingClientRect(),{clientX:p,clientY:m}=dv(c);let v=p-d.left,h=m-d.top;v=Math.max(0,v),v=Math.min(v,d.width),h=Math.max(0,h),h=Math.min(h,d.height),r.value=v,o.value=h,e.color.set({saturation:v/d.width*100,value:100-h/d.height*100})}return ve(()=>l.value,()=>{s()}),at(()=>{iu(n.vnode.el,{drag:c=>{u(c)},end:c=>{u(c)}}),s()}),{cursorTop:o,cursorLeft:r,background:a,colorValue:l,handleDrag:u,update:s,ns:t}}}),ej=F("div",null,null,-1),tj=[ej];function nj(e,t,n,o,r,a){return T(),V("div",{class:N(e.ns.b()),style:je({backgroundColor:e.background})},[F("div",{class:N(e.ns.e("white"))},null,2),F("div",{class:N(e.ns.e("black"))},null,2),F("div",{class:N(e.ns.e("cursor")),style:je({top:e.cursorTop+"px",left:e.cursorLeft+"px"})},tj,6)],6)}var oj=Ie(Qz,[["render",nj],["__file","sv-panel.vue"]]);const rj=["onKeydown"],aj=["id","aria-label","aria-labelledby","aria-description","aria-disabled","tabindex"],lj=Y({name:"ElColorPicker"}),sj=Y({...lj,props:Wz,emits:Kz,setup(e,{expose:t,emit:n}){const o=e,{t:r}=$t(),a=Se("color"),{formItem:l}=qn(),s=hn(),u=to(),{inputId:c,isLabeledByFormItem:f}=cr(o,{formItemContext:l}),d=R(),p=R(),m=R(),v=R(),h=R(),C=R(),{isFocused:g,handleFocus:y,handleBlur:_}=yf(h,{beforeBlur(we){var ge;return(ge=v.value)==null?void 0:ge.isFocusInsideContent(we)},afterBlur(){L(!1),H()}}),b=we=>{if(u.value)return Oe();y(we)};let w=!0;const S=Et(new Fi({enableAlpha:o.showAlpha,format:o.colorFormat||"",value:o.modelValue})),E=R(!1),$=R(!1),O=R(""),A=k(()=>!o.modelValue&&!$.value?"transparent":W(S,o.showAlpha)),M=k(()=>!o.modelValue&&!$.value?"":S.value),D=k(()=>f.value?void 0:o.label||o.ariaLabel||r("el.colorpicker.defaultLabel"));wn({from:"label",replacement:"aria-label",version:"2.8.0",scope:"el-color-picker",ref:"https://element-plus.org/en-US/component/color-picker.html"},k(()=>!!o.label));const U=k(()=>f.value?l==null?void 0:l.labelId:void 0),j=k(()=>[a.b("picker"),a.is("disabled",u.value),a.bm("picker",s.value),a.is("focused",g.value)]);function W(we,ge){if(!(we instanceof Fi))throw new TypeError("color should be instance of _color Class");const{r:q,g:B,b:z}=we.toRgb();return ge?`rgba(${q}, ${B}, ${z}, ${we.get("alpha")/100})`:`rgb(${q}, ${B}, ${z})`}function L(we){E.value=we}const P=co(L,100,{leading:!0});function x(){u.value||L(!0)}function I(){P(!1),H()}function H(){We(()=>{o.modelValue?S.fromString(o.modelValue):(S.value="",We(()=>{$.value=!1}))})}function G(){u.value||P(!E.value)}function J(){S.fromString(O.value)}function ee(){const we=S.value;n(ft,we),n("change",we),o.validateEvent&&(l==null||l.validate("change").catch(ge=>void 0)),P(!1),We(()=>{const ge=new Fi({enableAlpha:o.showAlpha,format:o.colorFormat||"",value:o.modelValue});S.compare(ge)||H()})}function fe(){P(!1),n(ft,null),n("change",null),o.modelValue!==null&&o.validateEvent&&(l==null||l.validate("change").catch(we=>void 0)),H()}function Te(we){if(E.value&&(I(),g.value)){const ge=new FocusEvent("focus",we);_(ge)}}function oe(we){we.preventDefault(),we.stopPropagation(),L(!1),H()}function ke(we){switch(we.code){case Ue.enter:case Ue.space:we.preventDefault(),we.stopPropagation(),x(),C.value.focus();break;case Ue.esc:oe(we);break}}function ae(){h.value.focus()}function Oe(){h.value.blur()}return at(()=>{o.modelValue&&(O.value=M.value)}),ve(()=>o.modelValue,we=>{we?we&&we!==S.value&&(w=!1,S.fromString(we)):$.value=!1}),ve(()=>M.value,we=>{O.value=we,w&&n("activeChange",we),w=!0}),ve(()=>S.value,()=>{!o.modelValue&&!$.value&&($.value=!0)}),ve(()=>E.value,()=>{We(()=>{var we,ge,q;(we=d.value)==null||we.update(),(ge=p.value)==null||ge.update(),(q=m.value)==null||q.update()})}),yt(Gk,{currentColor:M}),t({color:S,show:x,hide:I,focus:ae,blur:Oe}),(we,ge)=>(T(),re(i(Un),{ref_key:"popper",ref:v,visible:E.value,"show-arrow":!1,"fallback-placements":["bottom","top","right","left"],offset:0,"gpu-acceleration":!1,"popper-class":[i(a).be("picker","panel"),i(a).b("dropdown"),we.popperClass],"stop-popper-mouse-event":!1,effect:"light",trigger:"click",teleported:we.teleported,transition:`${i(a).namespace.value}-zoom-in-top`,persistent:"",onHide:ge[2]||(ge[2]=q=>L(!1))},{content:X(()=>[tt((T(),V("div",{onKeydown:Pt(oe,["esc"])},[F("div",{class:N(i(a).be("dropdown","main-wrapper"))},[K(jz,{ref_key:"hue",ref:d,class:"hue-slider",color:i(S),vertical:""},null,8,["color"]),K(oj,{ref_key:"sv",ref:p,color:i(S)},null,8,["color"])],2),we.showAlpha?(T(),re(Vz,{key:0,ref_key:"alpha",ref:m,color:i(S)},null,8,["color"])):te("v-if",!0),we.predefine?(T(),re(Zz,{key:1,ref:"predefine","enable-alpha":we.showAlpha,color:i(S),colors:we.predefine},null,8,["enable-alpha","color","colors"])):te("v-if",!0),F("div",{class:N(i(a).be("dropdown","btns"))},[F("span",{class:N(i(a).be("dropdown","value"))},[K(i(zn),{ref_key:"inputRef",ref:C,modelValue:O.value,"onUpdate:modelValue":ge[0]||(ge[0]=q=>O.value=q),"validate-event":!1,size:"small",onKeyup:Pt(J,["enter"]),onBlur:J},null,8,["modelValue","onKeyup"])],2),K(i($n),{class:N(i(a).be("dropdown","link-btn")),text:"",size:"small",onClick:fe},{default:X(()=>[Ge(le(i(r)("el.colorpicker.clear")),1)]),_:1},8,["class"]),K(i($n),{plain:"",size:"small",class:N(i(a).be("dropdown","btn")),onClick:ee},{default:X(()=>[Ge(le(i(r)("el.colorpicker.confirm")),1)]),_:1},8,["class"])],2)],40,rj)),[[i(Yr),Te]])]),default:X(()=>[F("div",mt({id:i(c),ref_key:"triggerRef",ref:h},we.$attrs,{class:i(j),role:"button","aria-label":i(D),"aria-labelledby":i(U),"aria-description":i(r)("el.colorpicker.description",{color:we.modelValue||""}),"aria-disabled":i(u),tabindex:i(u)?-1:we.tabindex,onKeydown:ke,onFocus:b,onBlur:ge[1]||(ge[1]=(...q)=>i(_)&&i(_)(...q))}),[i(u)?(T(),V("div",{key:0,class:N(i(a).be("picker","mask"))},null,2)):te("v-if",!0),F("div",{class:N(i(a).be("picker","trigger")),onClick:G},[F("span",{class:N([i(a).be("picker","color"),i(a).is("alpha",we.showAlpha)])},[F("span",{class:N(i(a).be("picker","color-inner")),style:je({backgroundColor:i(A)})},[tt(K(i(ze),{class:N([i(a).be("picker","icon"),i(a).is("icon-arrow-down")])},{default:X(()=>[K(i(Nr))]),_:1},8,["class"]),[[kt,we.modelValue||$.value]]),tt(K(i(ze),{class:N([i(a).be("picker","empty"),i(a).is("icon-close")])},{default:X(()=>[K(i(tr))]),_:1},8,["class"]),[[kt,!we.modelValue&&!$.value]])],6)],2)],2)],16,aj)]),_:1},8,["visible","popper-class","teleported","transition"]))}});var ij=Ie(sj,[["__file","color-picker.vue"]]);const uj=ut(ij),cj=Y({name:"ElContainer"}),dj=Y({...cj,props:{direction:{type:String}},setup(e){const t=e,n=Sn(),o=Se("container"),r=k(()=>t.direction==="vertical"?!0:t.direction==="horizontal"?!1:n&&n.default?n.default().some(l=>{const s=l.type.name;return s==="ElHeader"||s==="ElFooter"}):!1);return(a,l)=>(T(),V("section",{class:N([i(o).b(),i(o).is("vertical",i(r))])},[ie(a.$slots,"default")],2))}});var fj=Ie(dj,[["__file","container.vue"]]);const pj=Y({name:"ElAside"}),hj=Y({...pj,props:{width:{type:String,default:null}},setup(e){const t=e,n=Se("aside"),o=k(()=>t.width?n.cssVarBlock({width:t.width}):{});return(r,a)=>(T(),V("aside",{class:N(i(n).b()),style:je(i(o))},[ie(r.$slots,"default")],6))}});var Xk=Ie(hj,[["__file","aside.vue"]]);const mj=Y({name:"ElFooter"}),vj=Y({...mj,props:{height:{type:String,default:null}},setup(e){const t=e,n=Se("footer"),o=k(()=>t.height?n.cssVarBlock({height:t.height}):{});return(r,a)=>(T(),V("footer",{class:N(i(n).b()),style:je(i(o))},[ie(r.$slots,"default")],6))}});var Jk=Ie(vj,[["__file","footer.vue"]]);const gj=Y({name:"ElHeader"}),bj=Y({...gj,props:{height:{type:String,default:null}},setup(e){const t=e,n=Se("header"),o=k(()=>t.height?n.cssVarBlock({height:t.height}):{});return(r,a)=>(T(),V("header",{class:N(i(n).b()),style:je(i(o))},[ie(r.$slots,"default")],6))}});var Zk=Ie(bj,[["__file","header.vue"]]);const yj=Y({name:"ElMain"}),wj=Y({...yj,setup(e){const t=Se("main");return(n,o)=>(T(),V("main",{class:N(i(t).b())},[ie(n.$slots,"default")],2))}});var Qk=Ie(wj,[["__file","main.vue"]]);const _j=ut(fj,{Aside:Xk,Footer:Jk,Header:Zk,Main:Qk}),Cj=tn(Xk),Sj=tn(Jk),kj=tn(Zk),Ej=tn(Qk);var eE={exports:{}};(function(e,t){(function(n,o){e.exports=o()})(rr,function(){return function(n,o){var r=o.prototype,a=r.format;r.format=function(l){var s=this,u=this.$locale();if(!this.isValid())return a.bind(this)(l);var c=this.$utils(),f=(l||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(d){switch(d){case"Q":return Math.ceil((s.$M+1)/3);case"Do":return u.ordinal(s.$D);case"gggg":return s.weekYear();case"GGGG":return s.isoWeekYear();case"wo":return u.ordinal(s.week(),"W");case"w":case"ww":return c.s(s.week(),d==="w"?1:2,"0");case"W":case"WW":return c.s(s.isoWeek(),d==="W"?1:2,"0");case"k":case"kk":return c.s(String(s.$H===0?24:s.$H),d==="k"?1:2,"0");case"X":return Math.floor(s.$d.getTime()/1e3);case"x":return s.$d.getTime();case"z":return"["+s.offsetName()+"]";case"zzz":return"["+s.offsetName("long")+"]";default:return d}});return a.bind(this)(f)}}})})(eE);var Tj=eE.exports;const $j=ta(Tj);var tE={exports:{}};(function(e,t){(function(n,o){e.exports=o()})(rr,function(){var n="week",o="year";return function(r,a,l){var s=a.prototype;s.week=function(u){if(u===void 0&&(u=null),u!==null)return this.add(7*(u-this.week()),"day");var c=this.$locale().yearStart||1;if(this.month()===11&&this.date()>25){var f=l(this).startOf(o).add(1,o).date(c),d=l(this).endOf(n);if(f.isBefore(d))return 1}var p=l(this).startOf(o).date(c).startOf(n).subtract(1,"millisecond"),m=this.diff(p,n,!0);return m<0?l(this).startOf("week").week():Math.ceil(m)},s.weeks=function(u){return u===void 0&&(u=null),this.week(u)}}})})(tE);var Oj=tE.exports;const Nj=ta(Oj);var nE={exports:{}};(function(e,t){(function(n,o){e.exports=o()})(rr,function(){return function(n,o){o.prototype.weekYear=function(){var r=this.month(),a=this.week(),l=this.year();return a===1&&r===11?l+1:r===0&&a>=52?l-1:l}}})})(nE);var Ij=nE.exports;const Mj=ta(Ij);var oE={exports:{}};(function(e,t){(function(n,o){e.exports=o()})(rr,function(){return function(n,o,r){o.prototype.dayOfYear=function(a){var l=Math.round((r(this).startOf("day")-r(this).startOf("year"))/864e5)+1;return a==null?l:this.add(a-l,"day")}}})})(oE);var Aj=oE.exports;const Pj=ta(Aj);var rE={exports:{}};(function(e,t){(function(n,o){e.exports=o()})(rr,function(){return function(n,o){o.prototype.isSameOrAfter=function(r,a){return this.isSame(r,a)||this.isAfter(r,a)}}})})(rE);var Rj=rE.exports;const Lj=ta(Rj);var aE={exports:{}};(function(e,t){(function(n,o){e.exports=o()})(rr,function(){return function(n,o){o.prototype.isSameOrBefore=function(r,a){return this.isSame(r,a)||this.isBefore(r,a)}}})})(aE);var xj=aE.exports;const Dj=ta(xj),dg=Symbol(),Fj=Ne({...ug,type:{type:Q(String),default:"date"}}),Bj=["date","dates","year","years","month","months","week","range"],fg=Ne({disabledDate:{type:Q(Function)},date:{type:Q(Object),required:!0},minDate:{type:Q(Object)},maxDate:{type:Q(Object)},parsedValue:{type:Q([Object,Array])},rangeState:{type:Q(Object),default:()=>({endDate:null,selecting:!1})}}),lE=Ne({type:{type:Q(String),required:!0,values:u3},dateFormat:String,timeFormat:String}),sE=Ne({unlinkPanels:Boolean,parsedValue:{type:Q(Array)}}),pg=e=>({type:String,values:Bj,default:e}),Vj=Ne({...lE,parsedValue:{type:Q([Object,Array])},visible:{type:Boolean},format:{type:String,default:""}}),Hj=Ne({...fg,cellClassName:{type:Q(Function)},showWeekNumber:Boolean,selectionMode:pg("date")}),zj=["changerange","pick","select"],Kh=e=>{if(!Pe(e))return!1;const[t,n]=e;return ct.isDayjs(t)&&ct.isDayjs(n)&&t.isSameOrBefore(n)},iE=(e,{lang:t,unit:n,unlinkPanels:o})=>{let r;if(Pe(e)){let[a,l]=e.map(s=>ct(s).locale(t));return o||(l=a.add(1,n)),[a,l]}else e?r=ct(e):r=ct();return r=r.locale(t),[r,r.add(1,n)]},jj=(e,t,{columnIndexOffset:n,startDate:o,nextEndDate:r,now:a,unit:l,relativeDateGetter:s,setCellMetadata:u,setRowMetadata:c})=>{for(let f=0;f["normal","today"].includes(e),Wj=(e,t)=>{const{lang:n}=$t(),o=R(),r=R(),a=R(),l=R(),s=R([[],[],[],[],[],[]]);let u=!1;const c=e.date.$locale().weekStart||7,f=e.date.locale("en").localeData().weekdaysShort().map(I=>I.toLowerCase()),d=k(()=>c>3?7-c:-c),p=k(()=>{const I=e.date.startOf("month");return I.subtract(I.day()||7,"day")}),m=k(()=>f.concat(f).slice(c,c+7)),v=k(()=>vC(i(b)).some(I=>I.isCurrent)),h=k(()=>{const I=e.date.startOf("month"),H=I.day()||7,G=I.daysInMonth(),J=I.subtract(1,"month").daysInMonth();return{startOfMonthDay:H,dateCountOfMonth:G,dateCountOfLastMonth:J}}),C=k(()=>e.selectionMode==="dates"?Vn(e.parsedValue):[]),g=(I,{count:H,rowIndex:G,columnIndex:J})=>{const{startOfMonthDay:ee,dateCountOfMonth:fe,dateCountOfLastMonth:Te}=i(h),oe=i(d);if(G>=0&&G<=1){const ke=ee+oe<0?7+ee+oe:ee+oe;if(J+G*7>=ke)return I.text=H,!0;I.text=Te-(ke-J%7)+1+G*7,I.type="prev-month"}else return H<=fe?I.text=H:(I.text=H-fe,I.type="next-month"),!0;return!1},y=(I,{columnIndex:H,rowIndex:G},J)=>{const{disabledDate:ee,cellClassName:fe}=e,Te=i(C),oe=g(I,{count:J,rowIndex:G,columnIndex:H}),ke=I.dayjs.toDate();return I.selected=Te.find(ae=>ae.isSame(I.dayjs,"day")),I.isSelected=!!I.selected,I.isCurrent=S(I),I.disabled=ee==null?void 0:ee(ke),I.customClass=fe==null?void 0:fe(ke),oe},_=I=>{if(e.selectionMode==="week"){const[H,G]=e.showWeekNumber?[1,7]:[0,6],J=x(I[H+1]);I[H].inRange=J,I[H].start=J,I[G].inRange=J,I[G].end=J}},b=k(()=>{const{minDate:I,maxDate:H,rangeState:G,showWeekNumber:J}=e,ee=i(d),fe=i(s),Te="day";let oe=1;if(J)for(let ke=0;ke<6;ke++)fe[ke][0]||(fe[ke][0]={type:"week",text:i(p).add(ke*7+1,Te).week()});return jj({row:6,column:7},fe,{startDate:I,columnIndexOffset:J?1:0,nextEndDate:G.endDate||H||G.selecting&&I||null,now:ct().locale(i(n)).startOf(Te),unit:Te,relativeDateGetter:ke=>i(p).add(ke-ee,Te),setCellMetadata:(...ke)=>{y(...ke,oe)&&(oe+=1)},setRowMetadata:_}),fe});ve(()=>e.date,async()=>{var I;(I=i(o))!=null&&I.contains(document.activeElement)&&(await We(),await w())});const w=async()=>{var I;return(I=i(r))==null?void 0:I.focus()},S=I=>e.selectionMode==="date"&&Uh(I.type)&&E(I,e.parsedValue),E=(I,H)=>H?ct(H).locale(i(n)).isSame(e.date.date(Number(I.text)),"day"):!1,$=(I,H)=>{const G=I*7+(H-(e.showWeekNumber?1:0))-i(d);return i(p).add(G,"day")},O=I=>{var H;if(!e.rangeState.selecting)return;let G=I.target;if(G.tagName==="SPAN"&&(G=(H=G.parentNode)==null?void 0:H.parentNode),G.tagName==="DIV"&&(G=G.parentNode),G.tagName!=="TD")return;const J=G.parentNode.rowIndex-1,ee=G.cellIndex;i(b)[J][ee].disabled||(J!==i(a)||ee!==i(l))&&(a.value=J,l.value=ee,t("changerange",{selecting:!0,endDate:$(J,ee)}))},A=I=>!i(v)&&(I==null?void 0:I.text)===1&&I.type==="normal"||I.isCurrent,M=I=>{u||i(v)||e.selectionMode!=="date"||P(I,!0)},D=I=>{I.target.closest("td")&&(u=!0)},U=I=>{I.target.closest("td")&&(u=!1)},j=I=>{!e.rangeState.selecting||!e.minDate?(t("pick",{minDate:I,maxDate:null}),t("select",!0)):(I>=e.minDate?t("pick",{minDate:e.minDate,maxDate:I}):t("pick",{minDate:I,maxDate:e.minDate}),t("select",!1))},W=I=>{const H=I.week(),G=`${I.year()}w${H}`;t("pick",{year:I.year(),week:H,value:G,date:I.startOf("week")})},L=(I,H)=>{const G=H?Vn(e.parsedValue).filter(J=>(J==null?void 0:J.valueOf())!==I.valueOf()):Vn(e.parsedValue).concat([I]);t("pick",G)},P=(I,H=!1)=>{const G=I.target.closest("td");if(!G)return;const J=G.parentNode.rowIndex-1,ee=G.cellIndex,fe=i(b)[J][ee];if(fe.disabled||fe.type==="week")return;const Te=$(J,ee);switch(e.selectionMode){case"range":{j(Te);break}case"date":{t("pick",Te,H);break}case"week":{W(Te);break}case"dates":{L(Te,!!fe.selected);break}}},x=I=>{if(e.selectionMode!=="week")return!1;let H=e.date.startOf("day");if(I.type==="prev-month"&&(H=H.subtract(1,"month")),I.type==="next-month"&&(H=H.add(1,"month")),H=H.date(Number.parseInt(I.text,10)),e.parsedValue&&!Array.isArray(e.parsedValue)){const G=(e.parsedValue.day()-c+7)%7-1;return e.parsedValue.subtract(G,"day").isSame(H,"day")}return!1};return{WEEKS:m,rows:b,tbodyRef:o,currentCellRef:r,focus:w,isCurrent:S,isWeekActive:x,isSelectedCell:A,handlePickDate:P,handleMouseUp:U,handleMouseDown:D,handleMouseMove:O,handleFocus:M}},Kj=(e,{isCurrent:t,isWeekActive:n})=>{const o=Se("date-table"),{t:r}=$t(),a=k(()=>[o.b(),{"is-week-mode":e.selectionMode==="week"}]),l=k(()=>r("el.datepicker.dateTablePrompt")),s=k(()=>r("el.datepicker.week"));return{tableKls:a,tableLabel:l,weekLabel:s,getCellClasses:f=>{const d=[];return Uh(f.type)&&!f.disabled?(d.push("available"),f.type==="today"&&d.push("today")):d.push(f.type),t(f)&&d.push("current"),f.inRange&&(Uh(f.type)||e.selectionMode==="week")&&(d.push("in-range"),f.start&&d.push("start-date"),f.end&&d.push("end-date")),f.disabled&&d.push("disabled"),f.selected&&d.push("selected"),f.customClass&&d.push(f.customClass),d.join(" ")},getRowKls:f=>[o.e("row"),{current:n(f)}],t:r}},Uj=Ne({cell:{type:Q(Object)}});var qj=Y({name:"ElDatePickerCell",props:Uj,setup(e){const t=Se("date-table-cell"),{slots:n}=De(dg);return()=>{const{cell:o}=e;return ie(n,"default",{...o},()=>[K("div",{class:t.b()},[K("span",{class:t.e("text")},[o==null?void 0:o.text])])])}}});const Yj=["aria-label"],Gj={key:0,scope:"col"},Xj=["aria-label"],Jj=["aria-current","aria-selected","tabindex"],Zj=Y({__name:"basic-date-table",props:Hj,emits:zj,setup(e,{expose:t,emit:n}){const o=e,{WEEKS:r,rows:a,tbodyRef:l,currentCellRef:s,focus:u,isCurrent:c,isWeekActive:f,isSelectedCell:d,handlePickDate:p,handleMouseUp:m,handleMouseDown:v,handleMouseMove:h,handleFocus:C}=Wj(o,n),{tableLabel:g,tableKls:y,weekLabel:_,getCellClasses:b,getRowKls:w,t:S}=Kj(o,{isCurrent:c,isWeekActive:f});return t({focus:u}),(E,$)=>(T(),V("table",{"aria-label":i(g),class:N(i(y)),cellspacing:"0",cellpadding:"0",role:"grid",onClick:$[1]||($[1]=(...O)=>i(p)&&i(p)(...O)),onMousemove:$[2]||($[2]=(...O)=>i(h)&&i(h)(...O)),onMousedown:$[3]||($[3]=Qe((...O)=>i(v)&&i(v)(...O),["prevent"])),onMouseup:$[4]||($[4]=(...O)=>i(m)&&i(m)(...O))},[F("tbody",{ref_key:"tbodyRef",ref:l},[F("tr",null,[E.showWeekNumber?(T(),V("th",Gj,le(i(_)),1)):te("v-if",!0),(T(!0),V(Ve,null,bt(i(r),(O,A)=>(T(),V("th",{key:A,"aria-label":i(S)("el.datepicker.weeksFull."+O),scope:"col"},le(i(S)("el.datepicker.weeks."+O)),9,Xj))),128))]),(T(!0),V(Ve,null,bt(i(a),(O,A)=>(T(),V("tr",{key:A,class:N(i(w)(O[1]))},[(T(!0),V(Ve,null,bt(O,(M,D)=>(T(),V("td",{key:`${A}.${D}`,ref_for:!0,ref:U=>i(d)(M)&&(s.value=U),class:N(i(b)(M)),"aria-current":M.isCurrent?"date":void 0,"aria-selected":M.isCurrent,tabindex:i(d)(M)?0:-1,onFocus:$[0]||($[0]=(...U)=>i(C)&&i(C)(...U))},[K(i(qj),{cell:M},null,8,["cell"])],42,Jj))),128))],2))),128))],512)],42,Yj))}});var qh=Ie(Zj,[["__file","basic-date-table.vue"]]);const Qj=Ne({...fg,selectionMode:pg("month")}),eW=["aria-label"],tW=["aria-selected","aria-label","tabindex","onKeydown"],nW={class:"cell"},oW=Y({__name:"basic-month-table",props:Qj,emits:["changerange","pick","select"],setup(e,{expose:t,emit:n}){const o=e,r=(b,w,S)=>{const E=ct().locale(S).startOf("month").month(w).year(b),$=E.daysInMonth();return Sa($).map(O=>E.add(O,"day").toDate())},a=Se("month-table"),{t:l,lang:s}=$t(),u=R(),c=R(),f=R(o.date.locale("en").localeData().monthsShort().map(b=>b.toLowerCase())),d=R([[],[],[]]),p=R(),m=R(),v=k(()=>{var b,w;const S=d.value,E=ct().locale(s.value).startOf("month");for(let $=0;$<3;$++){const O=S[$];for(let A=0;A<4;A++){const M=O[A]||(O[A]={row:$,column:A,type:"normal",inRange:!1,start:!1,end:!1,text:-1,disabled:!1});M.type="normal";const D=$*4+A,U=o.date.startOf("year").month(D),j=o.rangeState.endDate||o.maxDate||o.rangeState.selecting&&o.minDate||null;M.inRange=!!(o.minDate&&U.isSameOrAfter(o.minDate,"month")&&j&&U.isSameOrBefore(j,"month"))||!!(o.minDate&&U.isSameOrBefore(o.minDate,"month")&&j&&U.isSameOrAfter(j,"month")),(b=o.minDate)!=null&&b.isSameOrAfter(j)?(M.start=!!(j&&U.isSame(j,"month")),M.end=o.minDate&&U.isSame(o.minDate,"month")):(M.start=!!(o.minDate&&U.isSame(o.minDate,"month")),M.end=!!(j&&U.isSame(j,"month"))),E.isSame(U)&&(M.type="today"),M.text=D,M.disabled=((w=o.disabledDate)==null?void 0:w.call(o,U.toDate()))||!1}}return S}),h=()=>{var b;(b=c.value)==null||b.focus()},C=b=>{const w={},S=o.date.year(),E=new Date,$=b.text;return w.disabled=o.disabledDate?r(S,$,s.value).every(o.disabledDate):!1,w.current=Vn(o.parsedValue).findIndex(O=>ct.isDayjs(O)&&O.year()===S&&O.month()===$)>=0,w.today=E.getFullYear()===S&&E.getMonth()===$,b.inRange&&(w["in-range"]=!0,b.start&&(w["start-date"]=!0),b.end&&(w["end-date"]=!0)),w},g=b=>{const w=o.date.year(),S=b.text;return Vn(o.date).findIndex(E=>E.year()===w&&E.month()===S)>=0},y=b=>{var w;if(!o.rangeState.selecting)return;let S=b.target;if(S.tagName==="SPAN"&&(S=(w=S.parentNode)==null?void 0:w.parentNode),S.tagName==="DIV"&&(S=S.parentNode),S.tagName!=="TD")return;const E=S.parentNode.rowIndex,$=S.cellIndex;v.value[E][$].disabled||(E!==p.value||$!==m.value)&&(p.value=E,m.value=$,n("changerange",{selecting:!0,endDate:o.date.startOf("year").month(E*4+$)}))},_=b=>{var w;const S=(w=b.target)==null?void 0:w.closest("td");if((S==null?void 0:S.tagName)!=="TD"||wo(S,"disabled"))return;const E=S.cellIndex,O=S.parentNode.rowIndex*4+E,A=o.date.startOf("year").month(O);if(o.selectionMode==="months"){if(b.type==="keydown"){n("pick",Vn(o.parsedValue),!1);return}const M=o.date.startOf("month").month(O),D=wo(S,"current")?Vn(o.parsedValue).filter(U=>Number(U)!==Number(M)):Vn(o.parsedValue).concat([ct(M)]);n("pick",D)}else o.selectionMode==="range"?o.rangeState.selecting?(o.minDate&&A>=o.minDate?n("pick",{minDate:o.minDate,maxDate:A}):n("pick",{minDate:A,maxDate:o.minDate}),n("select",!1)):(n("pick",{minDate:A,maxDate:null}),n("select",!0)):n("pick",O)};return ve(()=>o.date,async()=>{var b,w;(b=u.value)!=null&&b.contains(document.activeElement)&&(await We(),(w=c.value)==null||w.focus())}),t({focus:h}),(b,w)=>(T(),V("table",{role:"grid","aria-label":i(l)("el.datepicker.monthTablePrompt"),class:N(i(a).b()),onClick:_,onMousemove:y},[F("tbody",{ref_key:"tbodyRef",ref:u},[(T(!0),V(Ve,null,bt(i(v),(S,E)=>(T(),V("tr",{key:E},[(T(!0),V(Ve,null,bt(S,($,O)=>(T(),V("td",{key:O,ref_for:!0,ref:A=>g($)&&(c.value=A),class:N(C($)),"aria-selected":`${g($)}`,"aria-label":i(l)(`el.datepicker.month${+$.text+1}`),tabindex:g($)?0:-1,onKeydown:[Pt(Qe(_,["prevent","stop"]),["space"]),Pt(Qe(_,["prevent","stop"]),["enter"])]},[F("div",null,[F("span",nW,le(i(l)("el.datepicker.months."+f.value[$.text])),1)])],42,tW))),128))]))),128))],512)],42,eW))}});var Yh=Ie(oW,[["__file","basic-month-table.vue"]]);const{date:rW,disabledDate:aW,parsedValue:lW}=fg,sW=Ne({date:rW,disabledDate:aW,parsedValue:lW,selectionMode:pg("year")}),iW=["aria-label"],uW=["aria-selected","tabindex","onKeydown"],cW={class:"cell"},dW={key:1},fW=Y({__name:"basic-year-table",props:sW,emits:["pick"],setup(e,{expose:t,emit:n}){const o=e,r=(h,C)=>{const g=ct(String(h)).locale(C).startOf("year"),_=g.endOf("year").dayOfYear();return Sa(_).map(b=>g.add(b,"day").toDate())},a=Se("year-table"),{t:l,lang:s}=$t(),u=R(),c=R(),f=k(()=>Math.floor(o.date.year()/10)*10),d=()=>{var h;(h=c.value)==null||h.focus()},p=h=>{const C={},g=ct().locale(s.value);return C.disabled=o.disabledDate?r(h,s.value).every(o.disabledDate):!1,C.current=Vn(o.parsedValue).findIndex(y=>y.year()===h)>=0,C.today=g.year()===h,C},m=h=>h===f.value&&o.date.year()f.value+9||Vn(o.date).findIndex(C=>C.year()===h)>=0||Vn(o.parsedValue).findIndex(C=>(C==null?void 0:C.year())===h)>=0,v=h=>{const g=h.target.closest("td");if(g&&g.textContent){if(wo(g,"disabled"))return;const y=g.textContent||g.innerText;if(o.selectionMode==="years"){if(h.type==="keydown"){n("pick",Vn(o.parsedValue),!1);return}const _=wo(g,"current")?Vn(o.parsedValue).filter(b=>(b==null?void 0:b.year())!==Number(y)):Vn(o.parsedValue).concat([ct(y)]);n("pick",_)}else n("pick",Number(y))}};return ve(()=>o.date,async()=>{var h,C;(h=u.value)!=null&&h.contains(document.activeElement)&&(await We(),(C=c.value)==null||C.focus())}),t({focus:d}),(h,C)=>(T(),V("table",{role:"grid","aria-label":i(l)("el.datepicker.yearTablePrompt"),class:N(i(a).b()),onClick:v},[F("tbody",{ref_key:"tbodyRef",ref:u},[(T(),V(Ve,null,bt(3,(g,y)=>F("tr",{key:y},[(T(),V(Ve,null,bt(4,(_,b)=>(T(),V(Ve,{key:y+"_"+b},[y*4+b<10?(T(),V("td",{key:0,ref_for:!0,ref:w=>m(i(f)+y*4+b)&&(c.value=w),class:N(["available",p(i(f)+y*4+b)]),"aria-selected":`${m(i(f)+y*4+b)}`,tabindex:m(i(f)+y*4+b)?0:-1,onKeydown:[Pt(Qe(v,["prevent","stop"]),["space"]),Pt(Qe(v,["prevent","stop"]),["enter"])]},[F("div",null,[F("span",cW,le(i(f)+y*4+b),1)])],42,uW)):(T(),V("td",dW))],64))),64))])),64))],512)],10,iW))}});var pW=Ie(fW,[["__file","basic-year-table.vue"]]);const hW=["onClick"],mW=["aria-label"],vW=["aria-label"],gW=["aria-label"],bW=["aria-label"],yW=Y({__name:"panel-date-pick",props:Vj,emits:["pick","set-picker-option","panel-change"],setup(e,{emit:t}){const n=e,o=(Ee,ye,ne)=>!0,r=Se("picker-panel"),a=Se("date-picker"),l=xa(),s=Sn(),{t:u,lang:c}=$t(),f=De("EP_PICKER_BASE"),d=De(kf),{shortcuts:p,disabledDate:m,cellClassName:v,defaultTime:h}=f.props,C=Lt(f.props,"defaultValue"),g=R(),y=R(ct().locale(c.value)),_=R(!1);let b=!1;const w=k(()=>ct(h).locale(c.value)),S=k(()=>y.value.month()),E=k(()=>y.value.year()),$=R([]),O=R(null),A=R(null),M=Ee=>$.value.length>0?o(Ee,$.value,n.format||"HH:mm:ss"):!0,D=Ee=>h&&!Z.value&&!_.value&&!b?w.value.year(Ee.year()).month(Ee.month()).date(Ee.date()):ke.value?Ee.millisecond(0):Ee.startOf("day"),U=(Ee,...ye)=>{if(!Ee)t("pick",Ee,...ye);else if(Pe(Ee)){const ne=Ee.map(D);t("pick",ne,...ye)}else t("pick",D(Ee),...ye);O.value=null,A.value=null,_.value=!1,b=!1},j=async(Ee,ye)=>{if(H.value==="date"){Ee=Ee;let ne=n.parsedValue?n.parsedValue.year(Ee.year()).month(Ee.month()).date(Ee.date()):Ee;M(ne)||(ne=$.value[0][0].year(Ee.year()).month(Ee.month()).date(Ee.date())),y.value=ne,U(ne,ke.value||ye),n.type==="datetime"&&(await We(),rt())}else H.value==="week"?U(Ee.date):H.value==="dates"&&U(Ee,!0)},W=Ee=>{const ye=Ee?"add":"subtract";y.value=y.value[ye](1,"month"),st("month")},L=Ee=>{const ye=y.value,ne=Ee?"add":"subtract";y.value=P.value==="year"?ye[ne](10,"year"):ye[ne](1,"year"),st("year")},P=R("date"),x=k(()=>{const Ee=u("el.datepicker.year");if(P.value==="year"){const ye=Math.floor(E.value/10)*10;return Ee?`${ye} ${Ee} - ${ye+9} ${Ee}`:`${ye} - ${ye+9}`}return`${E.value} ${Ee}`}),I=Ee=>{const ye=Xe(Ee.value)?Ee.value():Ee.value;if(ye){b=!0,U(ct(ye).locale(c.value));return}Ee.onClick&&Ee.onClick({attrs:l,slots:s,emit:t})},H=k(()=>{const{type:Ee}=n;return["week","month","months","year","years","dates"].includes(Ee)?Ee:"date"}),G=k(()=>H.value==="dates"||H.value==="months"||H.value==="years"),J=k(()=>H.value==="date"?P.value:H.value),ee=k(()=>!!p.length),fe=async(Ee,ye)=>{H.value==="month"?(y.value=y.value.startOf("month").month(Ee),U(y.value,!1)):H.value==="months"?U(Ee,ye??!0):(y.value=y.value.startOf("month").month(Ee),P.value="date",["month","year","date","week"].includes(H.value)&&(U(y.value,!0),await We(),rt())),st("month")},Te=async(Ee,ye)=>{H.value==="year"?(y.value=y.value.startOf("year").year(Ee),U(y.value,!1)):H.value==="years"?U(Ee,ye??!0):(y.value=y.value.year(Ee),P.value="month",["month","year","date","week"].includes(H.value)&&(U(y.value,!0),await We(),rt())),st("year")},oe=async Ee=>{P.value=Ee,await We(),rt()},ke=k(()=>n.type==="datetime"||n.type==="datetimerange"),ae=k(()=>{const Ee=ke.value||H.value==="dates",ye=H.value==="years",ne=H.value==="months",be=P.value==="date",Fe=P.value==="year",vt=P.value==="month";return Ee&&be||ye&&Fe||ne&&vt}),Oe=k(()=>m?n.parsedValue?Pe(n.parsedValue)?m(n.parsedValue[0].toDate()):m(n.parsedValue.toDate()):!0:!1),we=()=>{if(G.value)U(n.parsedValue);else{let Ee=n.parsedValue;if(!Ee){const ye=ct(h).locale(c.value),ne=et();Ee=ye.year(ne.year()).month(ne.month()).date(ne.date())}y.value=Ee,U(Ee)}},ge=k(()=>m?m(ct().locale(c.value).toDate()):!1),q=()=>{const ye=ct().locale(c.value).toDate();_.value=!0,(!m||!m(ye))&&M(ye)&&(y.value=ct().locale(c.value),U(y.value))},B=k(()=>n.timeFormat||fk(n.format)),z=k(()=>n.dateFormat||dk(n.format)),Z=k(()=>{if(A.value)return A.value;if(!(!n.parsedValue&&!C.value))return(n.parsedValue||y.value).format(B.value)}),ue=k(()=>{if(O.value)return O.value;if(!(!n.parsedValue&&!C.value))return(n.parsedValue||y.value).format(z.value)}),se=R(!1),me=()=>{se.value=!0},_e=()=>{se.value=!1},$e=Ee=>({hour:Ee.hour(),minute:Ee.minute(),second:Ee.second(),year:Ee.year(),month:Ee.month(),date:Ee.date()}),Ce=(Ee,ye,ne)=>{const{hour:be,minute:Fe,second:vt}=$e(Ee),pe=n.parsedValue?n.parsedValue.hour(be).minute(Fe).second(vt):Ee;y.value=pe,U(y.value,!0),ne||(se.value=ye)},ce=Ee=>{const ye=ct(Ee,B.value).locale(c.value);if(ye.isValid()&&M(ye)){const{year:ne,month:be,date:Fe}=$e(y.value);y.value=ye.year(ne).month(be).date(Fe),A.value=null,se.value=!1,U(y.value,!0)}},de=Ee=>{const ye=ct(Ee,z.value).locale(c.value);if(ye.isValid()){if(m&&m(ye.toDate()))return;const{hour:ne,minute:be,second:Fe}=$e(y.value);y.value=ye.hour(ne).minute(be).second(Fe),O.value=null,U(y.value,!0)}},xe=Ee=>ct.isDayjs(Ee)&&Ee.isValid()&&(m?!m(Ee.toDate()):!0),he=Ee=>Pe(Ee)?Ee.map(ye=>ye.format(n.format)):Ee.format(n.format),He=Ee=>ct(Ee,n.format).locale(c.value),et=()=>{const Ee=ct(C.value).locale(c.value);if(!C.value){const ye=w.value;return ct().hour(ye.hour()).minute(ye.minute()).second(ye.second()).locale(c.value)}return Ee},rt=async()=>{var Ee;["week","month","year","date"].includes(H.value)&&((Ee=g.value)==null||Ee.focus(),H.value==="week"&&Ze(Ue.down))},wt=Ee=>{const{code:ye}=Ee;[Ue.up,Ue.down,Ue.left,Ue.right,Ue.home,Ue.end,Ue.pageUp,Ue.pageDown].includes(ye)&&(Ze(ye),Ee.stopPropagation(),Ee.preventDefault()),[Ue.enter,Ue.space,Ue.numpadEnter].includes(ye)&&O.value===null&&A.value===null&&(Ee.preventDefault(),U(y.value,!1))},Ze=Ee=>{var ye;const{up:ne,down:be,left:Fe,right:vt,home:pe,end:Ye,pageUp:_t,pageDown:Kt}=Ue,Jt={year:{[ne]:-4,[be]:4,[Fe]:-1,[vt]:1,offset:(At,Fn)=>At.setFullYear(At.getFullYear()+Fn)},month:{[ne]:-4,[be]:4,[Fe]:-1,[vt]:1,offset:(At,Fn)=>At.setMonth(At.getMonth()+Fn)},week:{[ne]:-1,[be]:1,[Fe]:-1,[vt]:1,offset:(At,Fn)=>At.setDate(At.getDate()+Fn*7)},date:{[ne]:-7,[be]:7,[Fe]:-1,[vt]:1,[pe]:At=>-At.getDay(),[Ye]:At=>-At.getDay()+6,[_t]:At=>-new Date(At.getFullYear(),At.getMonth(),0).getDate(),[Kt]:At=>new Date(At.getFullYear(),At.getMonth()+1,0).getDate(),offset:(At,Fn)=>At.setDate(At.getDate()+Fn)}},Ht=y.value.toDate();for(;Math.abs(y.value.diff(Ht,"year",!0))<1;){const At=Jt[J.value];if(!At)return;if(At.offset(Ht,Xe(At[Ee])?At[Ee](Ht):(ye=At[Ee])!=null?ye:0),m&&m(Ht))break;const Fn=ct(Ht).locale(c.value);y.value=Fn,t("pick",Fn,!0);break}},st=Ee=>{t("panel-change",y.value.toDate(),Ee,P.value)};return ve(()=>H.value,Ee=>{if(["month","year"].includes(Ee)){P.value=Ee;return}else if(Ee==="years"){P.value="year";return}else if(Ee==="months"){P.value="month";return}P.value="date"},{immediate:!0}),ve(()=>P.value,()=>{d==null||d.updatePopper()}),ve(()=>C.value,Ee=>{Ee&&(y.value=et())},{immediate:!0}),ve(()=>n.parsedValue,Ee=>{if(Ee){if(G.value||Array.isArray(Ee))return;y.value=Ee}else y.value=et()},{immediate:!0}),t("set-picker-option",["isValidValue",xe]),t("set-picker-option",["formatToString",he]),t("set-picker-option",["parseUserInput",He]),t("set-picker-option",["handleFocusPicker",rt]),(Ee,ye)=>(T(),V("div",{class:N([i(r).b(),i(a).b(),{"has-sidebar":Ee.$slots.sidebar||i(ee),"has-time":i(ke)}])},[F("div",{class:N(i(r).e("body-wrapper"))},[ie(Ee.$slots,"sidebar",{class:N(i(r).e("sidebar"))}),i(ee)?(T(),V("div",{key:0,class:N(i(r).e("sidebar"))},[(T(!0),V(Ve,null,bt(i(p),(ne,be)=>(T(),V("button",{key:be,type:"button",class:N(i(r).e("shortcut")),onClick:Fe=>I(ne)},le(ne.text),11,hW))),128))],2)):te("v-if",!0),F("div",{class:N(i(r).e("body"))},[i(ke)?(T(),V("div",{key:0,class:N(i(a).e("time-header"))},[F("span",{class:N(i(a).e("editor-wrap"))},[K(i(zn),{placeholder:i(u)("el.datepicker.selectDate"),"model-value":i(ue),size:"small","validate-event":!1,onInput:ye[0]||(ye[0]=ne=>O.value=ne),onChange:de},null,8,["placeholder","model-value"])],2),tt((T(),V("span",{class:N(i(a).e("editor-wrap"))},[K(i(zn),{placeholder:i(u)("el.datepicker.selectTime"),"model-value":i(Z),size:"small","validate-event":!1,onFocus:me,onInput:ye[1]||(ye[1]=ne=>A.value=ne),onChange:ce},null,8,["placeholder","model-value"]),K(i(_d),{visible:se.value,format:i(B),"parsed-value":y.value,onPick:Ce},null,8,["visible","format","parsed-value"])],2)),[[i(Yr),_e]])],2)):te("v-if",!0),tt(F("div",{class:N([i(a).e("header"),(P.value==="year"||P.value==="month")&&i(a).e("header--bordered")])},[F("span",{class:N(i(a).e("prev-btn"))},[F("button",{type:"button","aria-label":i(u)("el.datepicker.prevYear"),class:N(["d-arrow-left",i(r).e("icon-btn")]),onClick:ye[2]||(ye[2]=ne=>L(!1))},[K(i(ze),null,{default:X(()=>[K(i(ks))]),_:1})],10,mW),tt(F("button",{type:"button","aria-label":i(u)("el.datepicker.prevMonth"),class:N([i(r).e("icon-btn"),"arrow-left"]),onClick:ye[3]||(ye[3]=ne=>W(!1))},[K(i(ze),null,{default:X(()=>[K(i(Aa))]),_:1})],10,vW),[[kt,P.value==="date"]])],2),F("span",{role:"button",class:N(i(a).e("header-label")),"aria-live":"polite",tabindex:"0",onKeydown:ye[4]||(ye[4]=Pt(ne=>oe("year"),["enter"])),onClick:ye[5]||(ye[5]=ne=>oe("year"))},le(i(x)),35),tt(F("span",{role:"button","aria-live":"polite",tabindex:"0",class:N([i(a).e("header-label"),{active:P.value==="month"}]),onKeydown:ye[6]||(ye[6]=Pt(ne=>oe("month"),["enter"])),onClick:ye[7]||(ye[7]=ne=>oe("month"))},le(i(u)(`el.datepicker.month${i(S)+1}`)),35),[[kt,P.value==="date"]]),F("span",{class:N(i(a).e("next-btn"))},[tt(F("button",{type:"button","aria-label":i(u)("el.datepicker.nextMonth"),class:N([i(r).e("icon-btn"),"arrow-right"]),onClick:ye[8]||(ye[8]=ne=>W(!0))},[K(i(ze),null,{default:X(()=>[K(i(Jn))]),_:1})],10,gW),[[kt,P.value==="date"]]),F("button",{type:"button","aria-label":i(u)("el.datepicker.nextYear"),class:N([i(r).e("icon-btn"),"d-arrow-right"]),onClick:ye[9]||(ye[9]=ne=>L(!0))},[K(i(ze),null,{default:X(()=>[K(i(Es))]),_:1})],10,bW)],2)],2),[[kt,P.value!=="time"]]),F("div",{class:N(i(r).e("content")),onKeydown:wt},[P.value==="date"?(T(),re(qh,{key:0,ref_key:"currentViewRef",ref:g,"selection-mode":i(H),date:y.value,"parsed-value":Ee.parsedValue,"disabled-date":i(m),"cell-class-name":i(v),onPick:j},null,8,["selection-mode","date","parsed-value","disabled-date","cell-class-name"])):te("v-if",!0),P.value==="year"?(T(),re(pW,{key:1,ref_key:"currentViewRef",ref:g,"selection-mode":i(H),date:y.value,"disabled-date":i(m),"parsed-value":Ee.parsedValue,onPick:Te},null,8,["selection-mode","date","disabled-date","parsed-value"])):te("v-if",!0),P.value==="month"?(T(),re(Yh,{key:2,ref_key:"currentViewRef",ref:g,"selection-mode":i(H),date:y.value,"parsed-value":Ee.parsedValue,"disabled-date":i(m),onPick:fe},null,8,["selection-mode","date","parsed-value","disabled-date"])):te("v-if",!0)],34)],2)],2),tt(F("div",{class:N(i(r).e("footer"))},[tt(K(i($n),{text:"",size:"small",class:N(i(r).e("link-btn")),disabled:i(ge),onClick:q},{default:X(()=>[Ge(le(i(u)("el.datepicker.now")),1)]),_:1},8,["class","disabled"]),[[kt,!i(G)]]),K(i($n),{plain:"",size:"small",class:N(i(r).e("link-btn")),disabled:i(Oe),onClick:we},{default:X(()=>[Ge(le(i(u)("el.datepicker.confirm")),1)]),_:1},8,["class","disabled"])],2),[[kt,i(ae)]])],2))}});var wW=Ie(yW,[["__file","panel-date-pick.vue"]]);const _W=Ne({...lE,...sE}),CW=e=>{const{emit:t}=lt(),n=xa(),o=Sn();return a=>{const l=Xe(a.value)?a.value():a.value;if(l){t("pick",[ct(l[0]).locale(e.value),ct(l[1]).locale(e.value)]);return}a.onClick&&a.onClick({attrs:n,slots:o,emit:t})}},uE=(e,{defaultValue:t,leftDate:n,rightDate:o,unit:r,onParsedValueChanged:a})=>{const{emit:l}=lt(),{pickerNs:s}=De(dg),u=Se("date-range-picker"),{t:c,lang:f}=$t(),d=CW(f),p=R(),m=R(),v=R({endDate:null,selecting:!1}),h=_=>{v.value=_},C=(_=!1)=>{const b=i(p),w=i(m);Kh([b,w])&&l("pick",[b,w],_)},g=_=>{v.value.selecting=_,_||(v.value.endDate=null)},y=()=>{const[_,b]=iE(i(t),{lang:i(f),unit:r,unlinkPanels:e.unlinkPanels});p.value=void 0,m.value=void 0,n.value=_,o.value=b};return ve(t,_=>{_&&y()},{immediate:!0}),ve(()=>e.parsedValue,_=>{if(Pe(_)&&_.length===2){const[b,w]=_;p.value=b,n.value=b,m.value=w,a(i(p),i(m))}else y()},{immediate:!0}),{minDate:p,maxDate:m,rangeState:v,lang:f,ppNs:s,drpNs:u,handleChangeRange:h,handleRangeConfirm:C,handleShortcutClick:d,onSelect:g,t:c}},SW=["onClick"],kW=["aria-label"],EW=["aria-label"],TW=["disabled","aria-label"],$W=["disabled","aria-label"],OW=["disabled","aria-label"],NW=["disabled","aria-label"],IW=["aria-label"],MW=["aria-label"],wc="month",AW=Y({__name:"panel-date-range",props:_W,emits:["pick","set-picker-option","calendar-change","panel-change"],setup(e,{emit:t}){const n=e,o=De("EP_PICKER_BASE"),{disabledDate:r,cellClassName:a,defaultTime:l,clearable:s}=o.props,u=Lt(o.props,"format"),c=Lt(o.props,"shortcuts"),f=Lt(o.props,"defaultValue"),{lang:d}=$t(),p=R(ct().locale(d.value)),m=R(ct().locale(d.value).add(1,wc)),{minDate:v,maxDate:h,rangeState:C,ppNs:g,drpNs:y,handleChangeRange:_,handleRangeConfirm:b,handleShortcutClick:w,onSelect:S,t:E}=uE(n,{defaultValue:f,leftDate:p,rightDate:m,unit:wc,onParsedValueChanged:Ee}),$=R({min:null,max:null}),O=R({min:null,max:null}),A=k(()=>`${p.value.year()} ${E("el.datepicker.year")} ${E(`el.datepicker.month${p.value.month()+1}`)}`),M=k(()=>`${m.value.year()} ${E("el.datepicker.year")} ${E(`el.datepicker.month${m.value.month()+1}`)}`),D=k(()=>p.value.year()),U=k(()=>p.value.month()),j=k(()=>m.value.year()),W=k(()=>m.value.month()),L=k(()=>!!c.value.length),P=k(()=>$.value.min!==null?$.value.min:v.value?v.value.format(J.value):""),x=k(()=>$.value.max!==null?$.value.max:h.value||v.value?(h.value||v.value).format(J.value):""),I=k(()=>O.value.min!==null?O.value.min:v.value?v.value.format(G.value):""),H=k(()=>O.value.max!==null?O.value.max:h.value||v.value?(h.value||v.value).format(G.value):""),G=k(()=>n.timeFormat||fk(u.value)),J=k(()=>n.dateFormat||dk(u.value)),ee=ye=>Kh(ye)&&(r?!r(ye[0].toDate())&&!r(ye[1].toDate()):!0),fe=()=>{p.value=p.value.subtract(1,"year"),n.unlinkPanels||(m.value=p.value.add(1,"month")),q("year")},Te=()=>{p.value=p.value.subtract(1,"month"),n.unlinkPanels||(m.value=p.value.add(1,"month")),q("month")},oe=()=>{n.unlinkPanels?m.value=m.value.add(1,"year"):(p.value=p.value.add(1,"year"),m.value=p.value.add(1,"month")),q("year")},ke=()=>{n.unlinkPanels?m.value=m.value.add(1,"month"):(p.value=p.value.add(1,"month"),m.value=p.value.add(1,"month")),q("month")},ae=()=>{p.value=p.value.add(1,"year"),q("year")},Oe=()=>{p.value=p.value.add(1,"month"),q("month")},we=()=>{m.value=m.value.subtract(1,"year"),q("year")},ge=()=>{m.value=m.value.subtract(1,"month"),q("month")},q=ye=>{t("panel-change",[p.value.toDate(),m.value.toDate()],ye)},B=k(()=>{const ye=(U.value+1)%12,ne=U.value+1>=12?1:0;return n.unlinkPanels&&new Date(D.value+ne,ye)n.unlinkPanels&&j.value*12+W.value-(D.value*12+U.value+1)>=12),Z=k(()=>!(v.value&&h.value&&!C.value.selecting&&Kh([v.value,h.value]))),ue=k(()=>n.type==="datetime"||n.type==="datetimerange"),se=(ye,ne)=>{if(ye)return l?ct(l[ne]||l).locale(d.value).year(ye.year()).month(ye.month()).date(ye.date()):ye},me=(ye,ne=!0)=>{const be=ye.minDate,Fe=ye.maxDate,vt=se(be,0),pe=se(Fe,1);h.value===pe&&v.value===vt||(t("calendar-change",[be.toDate(),Fe&&Fe.toDate()]),h.value=pe,v.value=vt,!(!ne||ue.value)&&b())},_e=R(!1),$e=R(!1),Ce=()=>{_e.value=!1},ce=()=>{$e.value=!1},de=(ye,ne)=>{$.value[ne]=ye;const be=ct(ye,J.value).locale(d.value);if(be.isValid()){if(r&&r(be.toDate()))return;ne==="min"?(p.value=be,v.value=(v.value||p.value).year(be.year()).month(be.month()).date(be.date()),!n.unlinkPanels&&(!h.value||h.value.isBefore(v.value))&&(m.value=be.add(1,"month"),h.value=v.value.add(1,"month"))):(m.value=be,h.value=(h.value||m.value).year(be.year()).month(be.month()).date(be.date()),!n.unlinkPanels&&(!v.value||v.value.isAfter(h.value))&&(p.value=be.subtract(1,"month"),v.value=h.value.subtract(1,"month")))}},xe=(ye,ne)=>{$.value[ne]=null},he=(ye,ne)=>{O.value[ne]=ye;const be=ct(ye,G.value).locale(d.value);be.isValid()&&(ne==="min"?(_e.value=!0,v.value=(v.value||p.value).hour(be.hour()).minute(be.minute()).second(be.second())):($e.value=!0,h.value=(h.value||m.value).hour(be.hour()).minute(be.minute()).second(be.second()),m.value=h.value))},He=(ye,ne)=>{O.value[ne]=null,ne==="min"?(p.value=v.value,_e.value=!1,(!h.value||h.value.isBefore(v.value))&&(h.value=v.value)):(m.value=h.value,$e.value=!1,h.value&&h.value.isBefore(v.value)&&(v.value=h.value))},et=(ye,ne,be)=>{O.value.min||(ye&&(p.value=ye,v.value=(v.value||p.value).hour(ye.hour()).minute(ye.minute()).second(ye.second())),be||(_e.value=ne),(!h.value||h.value.isBefore(v.value))&&(h.value=v.value,m.value=ye))},rt=(ye,ne,be)=>{O.value.max||(ye&&(m.value=ye,h.value=(h.value||m.value).hour(ye.hour()).minute(ye.minute()).second(ye.second())),be||($e.value=ne),h.value&&h.value.isBefore(v.value)&&(v.value=h.value))},wt=()=>{p.value=iE(i(f),{lang:i(d),unit:"month",unlinkPanels:n.unlinkPanels})[0],m.value=p.value.add(1,"month"),h.value=void 0,v.value=void 0,t("pick",null)},Ze=ye=>Pe(ye)?ye.map(ne=>ne.format(u.value)):ye.format(u.value),st=ye=>Pe(ye)?ye.map(ne=>ct(ne,u.value).locale(d.value)):ct(ye,u.value).locale(d.value);function Ee(ye,ne){if(n.unlinkPanels&&ne){const be=(ye==null?void 0:ye.year())||0,Fe=(ye==null?void 0:ye.month())||0,vt=ne.year(),pe=ne.month();m.value=be===vt&&Fe===pe?ne.add(1,wc):ne}else m.value=p.value.add(1,wc),ne&&(m.value=m.value.hour(ne.hour()).minute(ne.minute()).second(ne.second()))}return t("set-picker-option",["isValidValue",ee]),t("set-picker-option",["parseUserInput",st]),t("set-picker-option",["formatToString",Ze]),t("set-picker-option",["handleClear",wt]),(ye,ne)=>(T(),V("div",{class:N([i(g).b(),i(y).b(),{"has-sidebar":ye.$slots.sidebar||i(L),"has-time":i(ue)}])},[F("div",{class:N(i(g).e("body-wrapper"))},[ie(ye.$slots,"sidebar",{class:N(i(g).e("sidebar"))}),i(L)?(T(),V("div",{key:0,class:N(i(g).e("sidebar"))},[(T(!0),V(Ve,null,bt(i(c),(be,Fe)=>(T(),V("button",{key:Fe,type:"button",class:N(i(g).e("shortcut")),onClick:vt=>i(w)(be)},le(be.text),11,SW))),128))],2)):te("v-if",!0),F("div",{class:N(i(g).e("body"))},[i(ue)?(T(),V("div",{key:0,class:N(i(y).e("time-header"))},[F("span",{class:N(i(y).e("editors-wrap"))},[F("span",{class:N(i(y).e("time-picker-wrap"))},[K(i(zn),{size:"small",disabled:i(C).selecting,placeholder:i(E)("el.datepicker.startDate"),class:N(i(y).e("editor")),"model-value":i(P),"validate-event":!1,onInput:ne[0]||(ne[0]=be=>de(be,"min")),onChange:ne[1]||(ne[1]=be=>xe(be,"min"))},null,8,["disabled","placeholder","class","model-value"])],2),tt((T(),V("span",{class:N(i(y).e("time-picker-wrap"))},[K(i(zn),{size:"small",class:N(i(y).e("editor")),disabled:i(C).selecting,placeholder:i(E)("el.datepicker.startTime"),"model-value":i(I),"validate-event":!1,onFocus:ne[2]||(ne[2]=be=>_e.value=!0),onInput:ne[3]||(ne[3]=be=>he(be,"min")),onChange:ne[4]||(ne[4]=be=>He(be,"min"))},null,8,["class","disabled","placeholder","model-value"]),K(i(_d),{visible:_e.value,format:i(G),"datetime-role":"start","parsed-value":p.value,onPick:et},null,8,["visible","format","parsed-value"])],2)),[[i(Yr),Ce]])],2),F("span",null,[K(i(ze),null,{default:X(()=>[K(i(Jn))]),_:1})]),F("span",{class:N([i(y).e("editors-wrap"),"is-right"])},[F("span",{class:N(i(y).e("time-picker-wrap"))},[K(i(zn),{size:"small",class:N(i(y).e("editor")),disabled:i(C).selecting,placeholder:i(E)("el.datepicker.endDate"),"model-value":i(x),readonly:!i(v),"validate-event":!1,onInput:ne[5]||(ne[5]=be=>de(be,"max")),onChange:ne[6]||(ne[6]=be=>xe(be,"max"))},null,8,["class","disabled","placeholder","model-value","readonly"])],2),tt((T(),V("span",{class:N(i(y).e("time-picker-wrap"))},[K(i(zn),{size:"small",class:N(i(y).e("editor")),disabled:i(C).selecting,placeholder:i(E)("el.datepicker.endTime"),"model-value":i(H),readonly:!i(v),"validate-event":!1,onFocus:ne[7]||(ne[7]=be=>i(v)&&($e.value=!0)),onInput:ne[8]||(ne[8]=be=>he(be,"max")),onChange:ne[9]||(ne[9]=be=>He(be,"max"))},null,8,["class","disabled","placeholder","model-value","readonly"]),K(i(_d),{"datetime-role":"end",visible:$e.value,format:i(G),"parsed-value":m.value,onPick:rt},null,8,["visible","format","parsed-value"])],2)),[[i(Yr),ce]])],2)],2)):te("v-if",!0),F("div",{class:N([[i(g).e("content"),i(y).e("content")],"is-left"])},[F("div",{class:N(i(y).e("header"))},[F("button",{type:"button",class:N([i(g).e("icon-btn"),"d-arrow-left"]),"aria-label":i(E)("el.datepicker.prevYear"),onClick:fe},[K(i(ze),null,{default:X(()=>[K(i(ks))]),_:1})],10,kW),F("button",{type:"button",class:N([i(g).e("icon-btn"),"arrow-left"]),"aria-label":i(E)("el.datepicker.prevMonth"),onClick:Te},[K(i(ze),null,{default:X(()=>[K(i(Aa))]),_:1})],10,EW),ye.unlinkPanels?(T(),V("button",{key:0,type:"button",disabled:!i(z),class:N([[i(g).e("icon-btn"),{"is-disabled":!i(z)}],"d-arrow-right"]),"aria-label":i(E)("el.datepicker.nextYear"),onClick:ae},[K(i(ze),null,{default:X(()=>[K(i(Es))]),_:1})],10,TW)):te("v-if",!0),ye.unlinkPanels?(T(),V("button",{key:1,type:"button",disabled:!i(B),class:N([[i(g).e("icon-btn"),{"is-disabled":!i(B)}],"arrow-right"]),"aria-label":i(E)("el.datepicker.nextMonth"),onClick:Oe},[K(i(ze),null,{default:X(()=>[K(i(Jn))]),_:1})],10,$W)):te("v-if",!0),F("div",null,le(i(A)),1)],2),K(qh,{"selection-mode":"range",date:p.value,"min-date":i(v),"max-date":i(h),"range-state":i(C),"disabled-date":i(r),"cell-class-name":i(a),onChangerange:i(_),onPick:me,onSelect:i(S)},null,8,["date","min-date","max-date","range-state","disabled-date","cell-class-name","onChangerange","onSelect"])],2),F("div",{class:N([[i(g).e("content"),i(y).e("content")],"is-right"])},[F("div",{class:N(i(y).e("header"))},[ye.unlinkPanels?(T(),V("button",{key:0,type:"button",disabled:!i(z),class:N([[i(g).e("icon-btn"),{"is-disabled":!i(z)}],"d-arrow-left"]),"aria-label":i(E)("el.datepicker.prevYear"),onClick:we},[K(i(ze),null,{default:X(()=>[K(i(ks))]),_:1})],10,OW)):te("v-if",!0),ye.unlinkPanels?(T(),V("button",{key:1,type:"button",disabled:!i(B),class:N([[i(g).e("icon-btn"),{"is-disabled":!i(B)}],"arrow-left"]),"aria-label":i(E)("el.datepicker.prevMonth"),onClick:ge},[K(i(ze),null,{default:X(()=>[K(i(Aa))]),_:1})],10,NW)):te("v-if",!0),F("button",{type:"button","aria-label":i(E)("el.datepicker.nextYear"),class:N([i(g).e("icon-btn"),"d-arrow-right"]),onClick:oe},[K(i(ze),null,{default:X(()=>[K(i(Es))]),_:1})],10,IW),F("button",{type:"button",class:N([i(g).e("icon-btn"),"arrow-right"]),"aria-label":i(E)("el.datepicker.nextMonth"),onClick:ke},[K(i(ze),null,{default:X(()=>[K(i(Jn))]),_:1})],10,MW),F("div",null,le(i(M)),1)],2),K(qh,{"selection-mode":"range",date:m.value,"min-date":i(v),"max-date":i(h),"range-state":i(C),"disabled-date":i(r),"cell-class-name":i(a),onChangerange:i(_),onPick:me,onSelect:i(S)},null,8,["date","min-date","max-date","range-state","disabled-date","cell-class-name","onChangerange","onSelect"])],2)],2)],2),i(ue)?(T(),V("div",{key:0,class:N(i(g).e("footer"))},[i(s)?(T(),re(i($n),{key:0,text:"",size:"small",class:N(i(g).e("link-btn")),onClick:wt},{default:X(()=>[Ge(le(i(E)("el.datepicker.clear")),1)]),_:1},8,["class"])):te("v-if",!0),K(i($n),{plain:"",size:"small",class:N(i(g).e("link-btn")),disabled:i(Z),onClick:ne[10]||(ne[10]=be=>i(b)(!1))},{default:X(()=>[Ge(le(i(E)("el.datepicker.confirm")),1)]),_:1},8,["class","disabled"])],2)):te("v-if",!0)],2))}});var PW=Ie(AW,[["__file","panel-date-range.vue"]]);const RW=Ne({...sE}),LW=["pick","set-picker-option","calendar-change"],xW=({unlinkPanels:e,leftDate:t,rightDate:n})=>{const{t:o}=$t(),r=()=>{t.value=t.value.subtract(1,"year"),e.value||(n.value=n.value.subtract(1,"year"))},a=()=>{e.value||(t.value=t.value.add(1,"year")),n.value=n.value.add(1,"year")},l=()=>{t.value=t.value.add(1,"year")},s=()=>{n.value=n.value.subtract(1,"year")},u=k(()=>`${t.value.year()} ${o("el.datepicker.year")}`),c=k(()=>`${n.value.year()} ${o("el.datepicker.year")}`),f=k(()=>t.value.year()),d=k(()=>n.value.year()===t.value.year()?t.value.year()+1:n.value.year());return{leftPrevYear:r,rightNextYear:a,leftNextYear:l,rightPrevYear:s,leftLabel:u,rightLabel:c,leftYear:f,rightYear:d}},DW=["onClick"],FW=["disabled"],BW=["disabled"],_c="year",VW=Y({name:"DatePickerMonthRange"}),HW=Y({...VW,props:RW,emits:LW,setup(e,{emit:t}){const n=e,{lang:o}=$t(),r=De("EP_PICKER_BASE"),{shortcuts:a,disabledDate:l}=r.props,s=Lt(r.props,"format"),u=Lt(r.props,"defaultValue"),c=R(ct().locale(o.value)),f=R(ct().locale(o.value).add(1,_c)),{minDate:d,maxDate:p,rangeState:m,ppNs:v,drpNs:h,handleChangeRange:C,handleRangeConfirm:g,handleShortcutClick:y,onSelect:_}=uE(n,{defaultValue:u,leftDate:c,rightDate:f,unit:_c,onParsedValueChanged:L}),b=k(()=>!!a.length),{leftPrevYear:w,rightNextYear:S,leftNextYear:E,rightPrevYear:$,leftLabel:O,rightLabel:A,leftYear:M,rightYear:D}=xW({unlinkPanels:Lt(n,"unlinkPanels"),leftDate:c,rightDate:f}),U=k(()=>n.unlinkPanels&&D.value>M.value+1),j=(P,x=!0)=>{const I=P.minDate,H=P.maxDate;p.value===H&&d.value===I||(t("calendar-change",[I.toDate(),H&&H.toDate()]),p.value=H,d.value=I,x&&g())},W=P=>P.map(x=>x.format(s.value));function L(P,x){if(n.unlinkPanels&&x){const I=(P==null?void 0:P.year())||0,H=x.year();f.value=I===H?x.add(1,_c):x}else f.value=c.value.add(1,_c)}return t("set-picker-option",["formatToString",W]),(P,x)=>(T(),V("div",{class:N([i(v).b(),i(h).b(),{"has-sidebar":!!P.$slots.sidebar||i(b)}])},[F("div",{class:N(i(v).e("body-wrapper"))},[ie(P.$slots,"sidebar",{class:N(i(v).e("sidebar"))}),i(b)?(T(),V("div",{key:0,class:N(i(v).e("sidebar"))},[(T(!0),V(Ve,null,bt(i(a),(I,H)=>(T(),V("button",{key:H,type:"button",class:N(i(v).e("shortcut")),onClick:G=>i(y)(I)},le(I.text),11,DW))),128))],2)):te("v-if",!0),F("div",{class:N(i(v).e("body"))},[F("div",{class:N([[i(v).e("content"),i(h).e("content")],"is-left"])},[F("div",{class:N(i(h).e("header"))},[F("button",{type:"button",class:N([i(v).e("icon-btn"),"d-arrow-left"]),onClick:x[0]||(x[0]=(...I)=>i(w)&&i(w)(...I))},[K(i(ze),null,{default:X(()=>[K(i(ks))]),_:1})],2),P.unlinkPanels?(T(),V("button",{key:0,type:"button",disabled:!i(U),class:N([[i(v).e("icon-btn"),{[i(v).is("disabled")]:!i(U)}],"d-arrow-right"]),onClick:x[1]||(x[1]=(...I)=>i(E)&&i(E)(...I))},[K(i(ze),null,{default:X(()=>[K(i(Es))]),_:1})],10,FW)):te("v-if",!0),F("div",null,le(i(O)),1)],2),K(Yh,{"selection-mode":"range",date:c.value,"min-date":i(d),"max-date":i(p),"range-state":i(m),"disabled-date":i(l),onChangerange:i(C),onPick:j,onSelect:i(_)},null,8,["date","min-date","max-date","range-state","disabled-date","onChangerange","onSelect"])],2),F("div",{class:N([[i(v).e("content"),i(h).e("content")],"is-right"])},[F("div",{class:N(i(h).e("header"))},[P.unlinkPanels?(T(),V("button",{key:0,type:"button",disabled:!i(U),class:N([[i(v).e("icon-btn"),{"is-disabled":!i(U)}],"d-arrow-left"]),onClick:x[2]||(x[2]=(...I)=>i($)&&i($)(...I))},[K(i(ze),null,{default:X(()=>[K(i(ks))]),_:1})],10,BW)):te("v-if",!0),F("button",{type:"button",class:N([i(v).e("icon-btn"),"d-arrow-right"]),onClick:x[3]||(x[3]=(...I)=>i(S)&&i(S)(...I))},[K(i(ze),null,{default:X(()=>[K(i(Es))]),_:1})],2),F("div",null,le(i(A)),1)],2),K(Yh,{"selection-mode":"range",date:f.value,"min-date":i(d),"max-date":i(p),"range-state":i(m),"disabled-date":i(l),onChangerange:i(C),onPick:j,onSelect:i(_)},null,8,["date","min-date","max-date","range-state","disabled-date","onChangerange","onSelect"])],2)],2)],2)],2))}});var zW=Ie(HW,[["__file","panel-month-range.vue"]]);const jW=function(e){switch(e){case"daterange":case"datetimerange":return PW;case"monthrange":return zW;default:return wW}};ct.extend(Ok);ct.extend($j);ct.extend(ig);ct.extend(Nj);ct.extend(Mj);ct.extend(Pj);ct.extend(Lj);ct.extend(Dj);var WW=Y({name:"ElDatePicker",install:null,props:Fj,emits:["update:modelValue"],setup(e,{expose:t,emit:n,slots:o}){const r=Se("picker-panel");yt("ElPopperOptions",Et(Lt(e,"popperOptions"))),yt(dg,{slots:o,pickerNs:r});const a=R();t({focus:(u=!0)=>{var c;(c=a.value)==null||c.focus(u)},handleOpen:()=>{var u;(u=a.value)==null||u.handleOpen()},handleClose:()=>{var u;(u=a.value)==null||u.handleClose()}});const s=u=>{n("update:modelValue",u)};return()=>{var u;const c=(u=e.format)!=null?u:bV[e.type]||Zl,f=jW(e.type);return K(mk,mt(e,{format:c,type:e.type,ref:a,"onUpdate:modelValue":s}),{default:d=>K(f,d,null),"range-separator":o["range-separator"]})}}});const zc=WW;zc.install=e=>{e.component(zc.name,zc)};const KW=zc,hg=Symbol("elDescriptions");var vi=Y({name:"ElDescriptionsCell",props:{cell:{type:Object},tag:{type:String,default:"td"},type:{type:String}},setup(){return{descriptions:De(hg,{})}},render(){var e,t,n,o,r,a,l;const s=f3(this.cell),u=(((e=this.cell)==null?void 0:e.dirs)||[]).map(w=>{const{dir:S,arg:E,modifiers:$,value:O}=w;return[S,O,E,$]}),{border:c,direction:f}=this.descriptions,d=f==="vertical",p=((o=(n=(t=this.cell)==null?void 0:t.children)==null?void 0:n.label)==null?void 0:o.call(n))||s.label,m=(l=(a=(r=this.cell)==null?void 0:r.children)==null?void 0:a.default)==null?void 0:l.call(a),v=s.span,h=s.align?`is-${s.align}`:"",C=s.labelAlign?`is-${s.labelAlign}`:h,g=s.className,y=s.labelClassName,_={width:rn(s.width),minWidth:rn(s.minWidth)},b=Se("descriptions");switch(this.type){case"label":return tt(Ke(this.tag,{style:_,class:[b.e("cell"),b.e("label"),b.is("bordered-label",c),b.is("vertical-label",d),C,y],colSpan:d?v:1},p),u);case"content":return tt(Ke(this.tag,{style:_,class:[b.e("cell"),b.e("content"),b.is("bordered-content",c),b.is("vertical-content",d),h,g],colSpan:d?v:v*2-1},m),u);default:return tt(Ke("td",{style:_,class:[b.e("cell"),h],colSpan:v},[Tn(p)?void 0:Ke("span",{class:[b.e("label"),y]},p),Ke("span",{class:[b.e("content"),g]},m)]),u)}}});const UW=Ne({row:{type:Q(Array),default:()=>[]}}),qW={key:1},YW=Y({name:"ElDescriptionsRow"}),GW=Y({...YW,props:UW,setup(e){const t=De(hg,{});return(n,o)=>i(t).direction==="vertical"?(T(),V(Ve,{key:0},[F("tr",null,[(T(!0),V(Ve,null,bt(n.row,(r,a)=>(T(),re(i(vi),{key:`tr1-${a}`,cell:r,tag:"th",type:"label"},null,8,["cell"]))),128))]),F("tr",null,[(T(!0),V(Ve,null,bt(n.row,(r,a)=>(T(),re(i(vi),{key:`tr2-${a}`,cell:r,tag:"td",type:"content"},null,8,["cell"]))),128))])],64)):(T(),V("tr",qW,[(T(!0),V(Ve,null,bt(n.row,(r,a)=>(T(),V(Ve,{key:`tr3-${a}`},[i(t).border?(T(),V(Ve,{key:0},[K(i(vi),{cell:r,tag:"td",type:"label"},null,8,["cell"]),K(i(vi),{cell:r,tag:"td",type:"content"},null,8,["cell"])],64)):(T(),re(i(vi),{key:1,cell:r,tag:"td",type:"both"},null,8,["cell"]))],64))),128))]))}});var XW=Ie(GW,[["__file","descriptions-row.vue"]]);const JW=Ne({border:Boolean,column:{type:Number,default:3},direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},size:gn,title:{type:String,default:""},extra:{type:String,default:""}}),ZW=Y({name:"ElDescriptions"}),QW=Y({...ZW,props:JW,setup(e){const t=e,n=Se("descriptions"),o=hn(),r=Sn();yt(hg,t);const a=k(()=>[n.b(),n.m(o.value)]),l=(u,c,f,d=!1)=>(u.props||(u.props={}),c>f&&(u.props.span=f),d&&(u.props.span=c),u),s=()=>{if(!r.default)return[];const u=Ca(r.default()).filter(m=>{var v;return((v=m==null?void 0:m.type)==null?void 0:v.name)==="ElDescriptionsItem"}),c=[];let f=[],d=t.column,p=0;return u.forEach((m,v)=>{var h;const C=((h=m.props)==null?void 0:h.span)||1;if(vd?d:C),v===u.length-1){const g=t.column-p%t.column;f.push(l(m,g,d,!0)),c.push(f);return}C(T(),V("div",{class:N(i(a))},[u.title||u.extra||u.$slots.title||u.$slots.extra?(T(),V("div",{key:0,class:N(i(n).e("header"))},[F("div",{class:N(i(n).e("title"))},[ie(u.$slots,"title",{},()=>[Ge(le(u.title),1)])],2),F("div",{class:N(i(n).e("extra"))},[ie(u.$slots,"extra",{},()=>[Ge(le(u.extra),1)])],2)],2)):te("v-if",!0),F("div",{class:N(i(n).e("body"))},[F("table",{class:N([i(n).e("table"),i(n).is("bordered",u.border)])},[F("tbody",null,[(T(!0),V(Ve,null,bt(s(),(f,d)=>(T(),re(XW,{key:d,row:f},null,8,["row"]))),128))])],2)],2)],2))}});var eK=Ie(QW,[["__file","description.vue"]]);const tK=Ne({label:{type:String,default:""},span:{type:Number,default:1},width:{type:[String,Number],default:""},minWidth:{type:[String,Number],default:""},align:{type:String,default:"left"},labelAlign:{type:String,default:""},className:{type:String,default:""},labelClassName:{type:String,default:""}}),cE=Y({name:"ElDescriptionsItem",props:tK}),nK=ut(eK,{DescriptionsItem:cE}),oK=tn(cE),rK=Ne({mask:{type:Boolean,default:!0},customMaskEvent:Boolean,overlayClass:{type:Q([String,Array,Object])},zIndex:{type:Q([String,Number])}}),aK={click:e=>e instanceof MouseEvent},lK="overlay";var sK=Y({name:"ElOverlay",props:rK,emits:aK,setup(e,{slots:t,emit:n}){const o=Se(lK),r=u=>{n("click",u)},{onClick:a,onMousedown:l,onMouseup:s}=qv(e.customMaskEvent?void 0:r);return()=>e.mask?K("div",{class:[o.b(),e.overlayClass],style:{zIndex:e.zIndex},onClick:a,onMousedown:l,onMouseup:s},[ie(t,"default")],Oo.STYLE|Oo.CLASS|Oo.PROPS,["onClick","onMouseup","onMousedown"]):Ke("div",{class:e.overlayClass,style:{zIndex:e.zIndex,position:"fixed",top:"0px",right:"0px",bottom:"0px",left:"0px"}},[ie(t,"default")])}});const mg=sK,dE=Symbol("dialogInjectionKey"),fE=Ne({center:Boolean,alignCenter:Boolean,closeIcon:{type:Dt},draggable:Boolean,overflow:Boolean,fullscreen:Boolean,showClose:{type:Boolean,default:!0},title:{type:String,default:""},ariaLevel:{type:String,default:"2"}}),iK={close:()=>!0},uK=["aria-level"],cK=["aria-label"],dK=["id"],fK=Y({name:"ElDialogContent"}),pK=Y({...fK,props:fE,emits:iK,setup(e){const t=e,{t:n}=$t(),{Close:o}=Av,{dialogRef:r,headerRef:a,bodyId:l,ns:s,style:u}=De(dE),{focusTrapRef:c}=De(ag),f=k(()=>[s.b(),s.is("fullscreen",t.fullscreen),s.is("draggable",t.draggable),s.is("align-center",t.alignCenter),{[s.m("center")]:t.center}]),d=mf(c,r),p=k(()=>t.draggable),m=k(()=>t.overflow);return nS(r,a,p,m),(v,h)=>(T(),V("div",{ref:i(d),class:N(i(f)),style:je(i(u)),tabindex:"-1"},[F("header",{ref_key:"headerRef",ref:a,class:N([i(s).e("header"),{"show-close":v.showClose}])},[ie(v.$slots,"header",{},()=>[F("span",{role:"heading","aria-level":v.ariaLevel,class:N(i(s).e("title"))},le(v.title),11,uK)]),v.showClose?(T(),V("button",{key:0,"aria-label":i(n)("el.dialog.close"),class:N(i(s).e("headerbtn")),type:"button",onClick:h[0]||(h[0]=C=>v.$emit("close"))},[K(i(ze),{class:N(i(s).e("close"))},{default:X(()=>[(T(),re(pt(v.closeIcon||i(o))))]),_:1},8,["class"])],10,cK)):te("v-if",!0)],2),F("div",{id:i(l),class:N(i(s).e("body"))},[ie(v.$slots,"default")],10,dK),v.$slots.footer?(T(),V("footer",{key:0,class:N(i(s).e("footer"))},[ie(v.$slots,"footer")],2)):te("v-if",!0)],6))}});var hK=Ie(pK,[["__file","dialog-content.vue"]]);const pE=Ne({...fE,appendToBody:Boolean,appendTo:{type:Q(String),default:"body"},beforeClose:{type:Q(Function)},destroyOnClose:Boolean,closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},modal:{type:Boolean,default:!0},openDelay:{type:Number,default:0},closeDelay:{type:Number,default:0},top:{type:String},modelValue:Boolean,modalClass:String,width:{type:[String,Number]},zIndex:{type:Number},trapFocus:Boolean,headerAriaLevel:{type:String,default:"2"}}),hE={open:()=>!0,opened:()=>!0,close:()=>!0,closed:()=>!0,[ft]:e=>dn(e),openAutoFocus:()=>!0,closeAutoFocus:()=>!0},mE=(e,t)=>{var n;const r=lt().emit,{nextZIndex:a}=Zs();let l="";const s=xn(),u=xn(),c=R(!1),f=R(!1),d=R(!1),p=R((n=e.zIndex)!=null?n:a());let m,v;const h=_f("namespace",Ri),C=k(()=>{const W={},L=`--${h.value}-dialog`;return e.fullscreen||(e.top&&(W[`${L}-margin-top`]=e.top),e.width&&(W[`${L}-width`]=rn(e.width))),W}),g=k(()=>e.alignCenter?{display:"flex"}:{});function y(){r("opened")}function _(){r("closed"),r(ft,!1),e.destroyOnClose&&(d.value=!1)}function b(){r("close")}function w(){v==null||v(),m==null||m(),e.openDelay&&e.openDelay>0?{stop:m}=_l(()=>O(),e.openDelay):O()}function S(){m==null||m(),v==null||v(),e.closeDelay&&e.closeDelay>0?{stop:v}=_l(()=>A(),e.closeDelay):A()}function E(){function W(L){L||(f.value=!0,c.value=!1)}e.beforeClose?e.beforeClose(W):S()}function $(){e.closeOnClickModal&&E()}function O(){Ct&&(c.value=!0)}function A(){c.value=!1}function M(){r("openAutoFocus")}function D(){r("closeAutoFocus")}function U(W){var L;((L=W.detail)==null?void 0:L.focusReason)==="pointer"&&W.preventDefault()}e.lockScroll&&Fv(c);function j(){e.closeOnPressEscape&&E()}return ve(()=>e.modelValue,W=>{W?(f.value=!1,w(),d.value=!0,p.value=HC(e.zIndex)?a():p.value++,We(()=>{r("open"),t.value&&(t.value.scrollTop=0)})):c.value&&S()}),ve(()=>e.fullscreen,W=>{t.value&&(W?(l=t.value.style.transform,t.value.style.transform=""):t.value.style.transform=l)}),at(()=>{e.modelValue&&(c.value=!0,d.value=!0,w())}),{afterEnter:y,afterLeave:_,beforeLeave:b,handleClose:E,onModalClick:$,close:S,doClose:A,onOpenAutoFocus:M,onCloseAutoFocus:D,onCloseRequested:j,onFocusoutPrevented:U,titleId:s,bodyId:u,closed:f,style:C,overlayDialogStyle:g,rendered:d,visible:c,zIndex:p}},mK=["aria-label","aria-labelledby","aria-describedby"],vK=Y({name:"ElDialog",inheritAttrs:!1}),gK=Y({...vK,props:pE,emits:hE,setup(e,{expose:t}){const n=e,o=Sn();wn({scope:"el-dialog",from:"the title slot",replacement:"the header slot",version:"3.0.0",ref:"https://element-plus.org/en-US/component/dialog.html#slots"},k(()=>!!o.title));const r=Se("dialog"),a=R(),l=R(),s=R(),{visible:u,titleId:c,bodyId:f,style:d,overlayDialogStyle:p,rendered:m,zIndex:v,afterEnter:h,afterLeave:C,beforeLeave:g,handleClose:y,onModalClick:_,onOpenAutoFocus:b,onCloseAutoFocus:w,onCloseRequested:S,onFocusoutPrevented:E}=mE(n,a);yt(dE,{dialogRef:a,headerRef:l,bodyId:f,ns:r,rendered:m,style:d});const $=qv(_),O=k(()=>n.draggable&&!n.fullscreen);return t({visible:u,dialogContentRef:s}),(A,M)=>(T(),re(Pl,{to:A.appendTo,disabled:A.appendTo!=="body"?!1:!A.appendToBody},[K(fn,{name:"dialog-fade",onAfterEnter:i(h),onAfterLeave:i(C),onBeforeLeave:i(g),persisted:""},{default:X(()=>[tt(K(i(mg),{"custom-mask-event":"",mask:A.modal,"overlay-class":A.modalClass,"z-index":i(v)},{default:X(()=>[F("div",{role:"dialog","aria-modal":"true","aria-label":A.title||void 0,"aria-labelledby":A.title?void 0:i(c),"aria-describedby":i(f),class:N(`${i(r).namespace.value}-overlay-dialog`),style:je(i(p)),onClick:M[0]||(M[0]=(...D)=>i($).onClick&&i($).onClick(...D)),onMousedown:M[1]||(M[1]=(...D)=>i($).onMousedown&&i($).onMousedown(...D)),onMouseup:M[2]||(M[2]=(...D)=>i($).onMouseup&&i($).onMouseup(...D))},[K(i(Fu),{loop:"",trapped:i(u),"focus-start-el":"container",onFocusAfterTrapped:i(b),onFocusAfterReleased:i(w),onFocusoutPrevented:i(E),onReleaseRequested:i(S)},{default:X(()=>[i(m)?(T(),re(hK,mt({key:0,ref_key:"dialogContentRef",ref:s},A.$attrs,{center:A.center,"align-center":A.alignCenter,"close-icon":A.closeIcon,draggable:i(O),overflow:A.overflow,fullscreen:A.fullscreen,"show-close":A.showClose,title:A.title,"aria-level":A.headerAriaLevel,onClose:i(y)}),Sr({header:X(()=>[A.$slots.title?ie(A.$slots,"title",{key:1}):ie(A.$slots,"header",{key:0,close:i(y),titleId:i(c),titleClass:i(r).e("title")})]),default:X(()=>[ie(A.$slots,"default")]),_:2},[A.$slots.footer?{name:"footer",fn:X(()=>[ie(A.$slots,"footer")])}:void 0]),1040,["center","align-center","close-icon","draggable","overflow","fullscreen","show-close","title","aria-level","onClose"])):te("v-if",!0)]),_:3},8,["trapped","onFocusAfterTrapped","onFocusAfterReleased","onFocusoutPrevented","onReleaseRequested"])],46,mK)]),_:3},8,["mask","overlay-class","z-index"]),[[kt,i(u)]])]),_:3},8,["onAfterEnter","onAfterLeave","onBeforeLeave"])],8,["to","disabled"]))}});var bK=Ie(gK,[["__file","dialog.vue"]]);const yK=ut(bK),wK=Ne({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},contentPosition:{type:String,values:["left","center","right"],default:"center"},borderStyle:{type:Q(String),default:"solid"}}),_K=Y({name:"ElDivider"}),CK=Y({..._K,props:wK,setup(e){const t=e,n=Se("divider"),o=k(()=>n.cssVar({"border-style":t.borderStyle}));return(r,a)=>(T(),V("div",{class:N([i(n).b(),i(n).m(r.direction)]),style:je(i(o)),role:"separator"},[r.$slots.default&&r.direction!=="vertical"?(T(),V("div",{key:0,class:N([i(n).e("text"),i(n).is(r.contentPosition)])},[ie(r.$slots,"default")],2)):te("v-if",!0)],6))}});var SK=Ie(CK,[["__file","divider.vue"]]);const vE=ut(SK),kK=Ne({...pE,direction:{type:String,default:"rtl",values:["ltr","rtl","ttb","btt"]},size:{type:[String,Number],default:"30%"},withHeader:{type:Boolean,default:!0},modalFade:{type:Boolean,default:!0},headerAriaLevel:{type:String,default:"2"}}),EK=hE,TK=["aria-label","aria-labelledby","aria-describedby"],$K=["id","aria-level"],OK=["aria-label"],NK=["id"],IK=Y({name:"ElDrawer",inheritAttrs:!1}),MK=Y({...IK,props:kK,emits:EK,setup(e,{expose:t}){const n=e,o=Sn();wn({scope:"el-drawer",from:"the title slot",replacement:"the header slot",version:"3.0.0",ref:"https://element-plus.org/en-US/component/drawer.html#slots"},k(()=>!!o.title));const r=R(),a=R(),l=Se("drawer"),{t:s}=$t(),{afterEnter:u,afterLeave:c,beforeLeave:f,visible:d,rendered:p,titleId:m,bodyId:v,zIndex:h,onModalClick:C,onOpenAutoFocus:g,onCloseAutoFocus:y,onFocusoutPrevented:_,onCloseRequested:b,handleClose:w}=mE(n,r),S=k(()=>n.direction==="rtl"||n.direction==="ltr"),E=k(()=>rn(n.size));return t({handleClose:w,afterEnter:u,afterLeave:c}),($,O)=>(T(),re(Pl,{to:"body",disabled:!$.appendToBody},[K(fn,{name:i(l).b("fade"),onAfterEnter:i(u),onAfterLeave:i(c),onBeforeLeave:i(f),persisted:""},{default:X(()=>[tt(K(i(mg),{mask:$.modal,"overlay-class":$.modalClass,"z-index":i(h),onClick:i(C)},{default:X(()=>[K(i(Fu),{loop:"",trapped:i(d),"focus-trap-el":r.value,"focus-start-el":a.value,onFocusAfterTrapped:i(g),onFocusAfterReleased:i(y),onFocusoutPrevented:i(_),onReleaseRequested:i(b)},{default:X(()=>[F("div",mt({ref_key:"drawerRef",ref:r,"aria-modal":"true","aria-label":$.title||void 0,"aria-labelledby":$.title?void 0:i(m),"aria-describedby":i(v)},$.$attrs,{class:[i(l).b(),$.direction,i(d)&&"open"],style:i(S)?"width: "+i(E):"height: "+i(E),role:"dialog",onClick:O[1]||(O[1]=Qe(()=>{},["stop"]))}),[F("span",{ref_key:"focusStartRef",ref:a,class:N(i(l).e("sr-focus")),tabindex:"-1"},null,2),$.withHeader?(T(),V("header",{key:0,class:N(i(l).e("header"))},[$.$slots.title?ie($.$slots,"title",{key:1},()=>[te(" DEPRECATED SLOT ")]):ie($.$slots,"header",{key:0,close:i(w),titleId:i(m),titleClass:i(l).e("title")},()=>[$.$slots.title?te("v-if",!0):(T(),V("span",{key:0,id:i(m),role:"heading","aria-level":$.headerAriaLevel,class:N(i(l).e("title"))},le($.title),11,$K))]),$.showClose?(T(),V("button",{key:2,"aria-label":i(s)("el.drawer.close"),class:N(i(l).e("close-btn")),type:"button",onClick:O[0]||(O[0]=(...A)=>i(w)&&i(w)(...A))},[K(i(ze),{class:N(i(l).e("close"))},{default:X(()=>[K(i(tr))]),_:1},8,["class"])],10,OK)):te("v-if",!0)],2)):te("v-if",!0),i(p)?(T(),V("div",{key:1,id:i(v),class:N(i(l).e("body"))},[ie($.$slots,"default")],10,NK)):te("v-if",!0),$.$slots.footer?(T(),V("div",{key:2,class:N(i(l).e("footer"))},[ie($.$slots,"footer")],2)):te("v-if",!0)],16,TK)]),_:3},8,["trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusoutPrevented","onReleaseRequested"])]),_:3},8,["mask","overlay-class","z-index","onClick"]),[[kt,i(d)]])]),_:3},8,["name","onAfterEnter","onAfterLeave","onBeforeLeave"])],8,["disabled"]))}});var AK=Ie(MK,[["__file","drawer.vue"]]);const PK=ut(AK),RK=Y({inheritAttrs:!1});function LK(e,t,n,o,r,a){return ie(e.$slots,"default")}var xK=Ie(RK,[["render",LK],["__file","collection.vue"]]);const DK=Y({name:"ElCollectionItem",inheritAttrs:!1});function FK(e,t,n,o,r,a){return ie(e.$slots,"default")}var BK=Ie(DK,[["render",FK],["__file","collection-item.vue"]]);const gE="data-el-collection-item",bE=e=>{const t=`El${e}Collection`,n=`${t}Item`,o=Symbol(t),r=Symbol(n),a={...xK,name:t,setup(){const s=R(null),u=new Map;yt(o,{itemMap:u,getItems:()=>{const f=i(s);if(!f)return[];const d=Array.from(f.querySelectorAll(`[${gE}]`));return[...u.values()].sort((m,v)=>d.indexOf(m.ref)-d.indexOf(v.ref))},collectionRef:s})}},l={...BK,name:n,setup(s,{attrs:u}){const c=R(null),f=De(o,void 0);yt(r,{collectionItemRef:c}),at(()=>{const d=i(c);d&&f.itemMap.set(d,{ref:d,...u})}),zt(()=>{const d=i(c);f.itemMap.delete(d)})}};return{COLLECTION_INJECTION_KEY:o,COLLECTION_ITEM_INJECTION_KEY:r,ElCollection:a,ElCollectionItem:l}},VK=Ne({style:{type:Q([String,Array,Object])},currentTabId:{type:Q(String)},defaultCurrentTabId:String,loop:Boolean,dir:{type:String,values:["ltr","rtl"],default:"ltr"},orientation:{type:Q(String)},onBlur:Function,onFocus:Function,onMousedown:Function}),{ElCollection:HK,ElCollectionItem:zK,COLLECTION_INJECTION_KEY:vg,COLLECTION_ITEM_INJECTION_KEY:jK}=bE("RovingFocusGroup"),gg=Symbol("elRovingFocusGroup"),yE=Symbol("elRovingFocusGroupItem"),WK={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"},KK=(e,t)=>e,UK=(e,t,n)=>{const o=KK(e.key);return WK[o]},qK=(e,t)=>e.map((n,o)=>e[(o+t)%e.length]),bg=e=>{const{activeElement:t}=document;for(const n of e)if(n===t||(n.focus(),t!==document.activeElement))return},t1="currentTabIdChange",n1="rovingFocusGroup.entryFocus",YK={bubbles:!1,cancelable:!0},GK=Y({name:"ElRovingFocusGroupImpl",inheritAttrs:!1,props:VK,emits:[t1,"entryFocus"],setup(e,{emit:t}){var n;const o=R((n=e.currentTabId||e.defaultCurrentTabId)!=null?n:null),r=R(!1),a=R(!1),l=R(null),{getItems:s}=De(vg,void 0),u=k(()=>[{outline:"none"},e.style]),c=h=>{t(t1,h)},f=()=>{r.value=!0},d=on(h=>{var C;(C=e.onMousedown)==null||C.call(e,h)},()=>{a.value=!0}),p=on(h=>{var C;(C=e.onFocus)==null||C.call(e,h)},h=>{const C=!i(a),{target:g,currentTarget:y}=h;if(g===y&&C&&!i(r)){const _=new Event(n1,YK);if(y==null||y.dispatchEvent(_),!_.defaultPrevented){const b=s().filter(O=>O.focusable),w=b.find(O=>O.active),S=b.find(O=>O.id===i(o)),$=[w,S,...b].filter(Boolean).map(O=>O.ref);bg($)}}a.value=!1}),m=on(h=>{var C;(C=e.onBlur)==null||C.call(e,h)},()=>{r.value=!1}),v=(...h)=>{t("entryFocus",...h)};yt(gg,{currentTabbedId:Ml(o),loop:Lt(e,"loop"),tabIndex:k(()=>i(r)?-1:0),rovingFocusGroupRef:l,rovingFocusGroupRootStyle:u,orientation:Lt(e,"orientation"),dir:Lt(e,"dir"),onItemFocus:c,onItemShiftTab:f,onBlur:m,onFocus:p,onMousedown:d}),ve(()=>e.currentTabId,h=>{o.value=h??null}),qt(l,n1,v)}});function XK(e,t,n,o,r,a){return ie(e.$slots,"default")}var JK=Ie(GK,[["render",XK],["__file","roving-focus-group-impl.vue"]]);const ZK=Y({name:"ElRovingFocusGroup",components:{ElFocusGroupCollection:HK,ElRovingFocusGroupImpl:JK}});function QK(e,t,n,o,r,a){const l=qe("el-roving-focus-group-impl"),s=qe("el-focus-group-collection");return T(),re(s,null,{default:X(()=>[K(l,vr(bl(e.$attrs)),{default:X(()=>[ie(e.$slots,"default")]),_:3},16)]),_:3})}var e9=Ie(ZK,[["render",QK],["__file","roving-focus-group.vue"]]);const t9=Y({components:{ElRovingFocusCollectionItem:zK},props:{focusable:{type:Boolean,default:!0},active:{type:Boolean,default:!1}},emits:["mousedown","focus","keydown"],setup(e,{emit:t}){const{currentTabbedId:n,loop:o,onItemFocus:r,onItemShiftTab:a}=De(gg,void 0),{getItems:l}=De(vg,void 0),s=xn(),u=R(null),c=on(m=>{t("mousedown",m)},m=>{e.focusable?r(i(s)):m.preventDefault()}),f=on(m=>{t("focus",m)},()=>{r(i(s))}),d=on(m=>{t("keydown",m)},m=>{const{key:v,shiftKey:h,target:C,currentTarget:g}=m;if(v===Ue.tab&&h){a();return}if(C!==g)return;const y=UK(m);if(y){m.preventDefault();let b=l().filter(w=>w.focusable).map(w=>w.ref);switch(y){case"last":{b.reverse();break}case"prev":case"next":{y==="prev"&&b.reverse();const w=b.indexOf(g);b=o.value?qK(b,w+1):b.slice(w+1);break}}We(()=>{bg(b)})}}),p=k(()=>n.value===i(s));return yt(yE,{rovingFocusGroupItemRef:u,tabIndex:k(()=>i(p)?0:-1),handleMousedown:c,handleFocus:f,handleKeydown:d}),{id:s,handleKeydown:d,handleFocus:f,handleMousedown:c}}});function n9(e,t,n,o,r,a){const l=qe("el-roving-focus-collection-item");return T(),re(l,{id:e.id,focusable:e.focusable,active:e.active},{default:X(()=>[ie(e.$slots,"default")]),_:3},8,["id","focusable","active"])}var o9=Ie(t9,[["render",n9],["__file","roving-focus-item.vue"]]);const jc=Ne({trigger:lu.trigger,effect:{...kn.effect,default:"light"},type:{type:Q(String)},placement:{type:Q(String),default:"bottom"},popperOptions:{type:Q(Object),default:()=>({})},id:String,size:{type:String,default:""},splitButton:Boolean,hideOnClick:{type:Boolean,default:!0},loop:{type:Boolean,default:!0},showTimeout:{type:Number,default:150},hideTimeout:{type:Number,default:150},tabindex:{type:Q([Number,String]),default:0},maxHeight:{type:Q([Number,String]),default:""},popperClass:{type:String,default:""},disabled:Boolean,role:{type:String,default:"menu"},buttonProps:{type:Q(Object)},teleported:kn.teleported}),wE=Ne({command:{type:[Object,String,Number],default:()=>({})},disabled:Boolean,divided:Boolean,textValue:String,icon:{type:Dt}}),r9=Ne({onKeydown:{type:Q(Function)}}),a9=[Ue.down,Ue.pageDown,Ue.home],_E=[Ue.up,Ue.pageUp,Ue.end],l9=[...a9,..._E],{ElCollection:s9,ElCollectionItem:i9,COLLECTION_INJECTION_KEY:u9,COLLECTION_ITEM_INJECTION_KEY:c9}=bE("Dropdown"),Tf=Symbol("elDropdown"),{ButtonGroup:d9}=$n,f9=Y({name:"ElDropdown",components:{ElButton:$n,ElButtonGroup:d9,ElScrollbar:ea,ElDropdownCollection:s9,ElTooltip:Un,ElRovingFocusGroup:e9,ElOnlyChild:qS,ElIcon:ze,ArrowDown:Nr},props:jc,emits:["visible-change","click","command"],setup(e,{emit:t}){const n=lt(),o=Se("dropdown"),{t:r}=$t(),a=R(),l=R(),s=R(null),u=R(null),c=R(null),f=R(null),d=R(!1),p=[Ue.enter,Ue.space,Ue.down],m=k(()=>({maxHeight:rn(e.maxHeight)})),v=k(()=>[o.m(w.value)]),h=k(()=>Ia(e.trigger)),C=xn().value,g=k(()=>e.id||C);ve([a,h],([P,x],[I])=>{var H,G,J;(H=I==null?void 0:I.$el)!=null&&H.removeEventListener&&I.$el.removeEventListener("pointerenter",E),(G=P==null?void 0:P.$el)!=null&&G.removeEventListener&&P.$el.removeEventListener("pointerenter",E),(J=P==null?void 0:P.$el)!=null&&J.addEventListener&&x.includes("hover")&&P.$el.addEventListener("pointerenter",E)},{immediate:!0}),zt(()=>{var P,x;(x=(P=a.value)==null?void 0:P.$el)!=null&&x.removeEventListener&&a.value.$el.removeEventListener("pointerenter",E)});function y(){_()}function _(){var P;(P=s.value)==null||P.onClose()}function b(){var P;(P=s.value)==null||P.onOpen()}const w=hn();function S(...P){t("command",...P)}function E(){var P,x;(x=(P=a.value)==null?void 0:P.$el)==null||x.focus()}function $(){}function O(){const P=i(u);h.value.includes("hover")&&(P==null||P.focus()),f.value=null}function A(P){f.value=P}function M(P){d.value||(P.preventDefault(),P.stopImmediatePropagation())}function D(){t("visible-change",!0)}function U(P){(P==null?void 0:P.type)==="keydown"&&u.value.focus()}function j(){t("visible-change",!1)}return yt(Tf,{contentRef:u,role:k(()=>e.role),triggerId:g,isUsingKeyboard:d,onItemEnter:$,onItemLeave:O}),yt("elDropdown",{instance:n,dropdownSize:w,handleClick:y,commandHandler:S,trigger:Lt(e,"trigger"),hideOnClick:Lt(e,"hideOnClick")}),{t:r,ns:o,scrollbar:c,wrapStyle:m,dropdownTriggerKls:v,dropdownSize:w,triggerId:g,triggerKeys:p,currentTabId:f,handleCurrentTabIdChange:A,handlerMainButtonClick:P=>{t("click",P)},handleEntryFocus:M,handleClose:_,handleOpen:b,handleBeforeShowTooltip:D,handleShowTooltip:U,handleBeforeHideTooltip:j,onFocusAfterTrapped:P=>{var x,I;P.preventDefault(),(I=(x=u.value)==null?void 0:x.focus)==null||I.call(x,{preventScroll:!0})},popperRef:s,contentRef:u,triggeringElementRef:a,referenceElementRef:l}}});function p9(e,t,n,o,r,a){var l;const s=qe("el-dropdown-collection"),u=qe("el-roving-focus-group"),c=qe("el-scrollbar"),f=qe("el-only-child"),d=qe("el-tooltip"),p=qe("el-button"),m=qe("arrow-down"),v=qe("el-icon"),h=qe("el-button-group");return T(),V("div",{class:N([e.ns.b(),e.ns.is("disabled",e.disabled)])},[K(d,{ref:"popperRef",role:e.role,effect:e.effect,"fallback-placements":["bottom","top"],"popper-options":e.popperOptions,"gpu-acceleration":!1,"hide-after":e.trigger==="hover"?e.hideTimeout:0,"manual-mode":!0,placement:e.placement,"popper-class":[e.ns.e("popper"),e.popperClass],"reference-element":(l=e.referenceElementRef)==null?void 0:l.$el,trigger:e.trigger,"trigger-keys":e.triggerKeys,"trigger-target-el":e.contentRef,"show-after":e.trigger==="hover"?e.showTimeout:0,"stop-popper-mouse-event":!1,"virtual-ref":e.triggeringElementRef,"virtual-triggering":e.splitButton,disabled:e.disabled,transition:`${e.ns.namespace.value}-zoom-in-top`,teleported:e.teleported,pure:"",persistent:"",onBeforeShow:e.handleBeforeShowTooltip,onShow:e.handleShowTooltip,onBeforeHide:e.handleBeforeHideTooltip},Sr({content:X(()=>[K(c,{ref:"scrollbar","wrap-style":e.wrapStyle,tag:"div","view-class":e.ns.e("list")},{default:X(()=>[K(u,{loop:e.loop,"current-tab-id":e.currentTabId,orientation:"horizontal",onCurrentTabIdChange:e.handleCurrentTabIdChange,onEntryFocus:e.handleEntryFocus},{default:X(()=>[K(s,null,{default:X(()=>[ie(e.$slots,"dropdown")]),_:3})]),_:3},8,["loop","current-tab-id","onCurrentTabIdChange","onEntryFocus"])]),_:3},8,["wrap-style","view-class"])]),_:2},[e.splitButton?void 0:{name:"default",fn:X(()=>[K(f,{id:e.triggerId,ref:"triggeringElementRef",role:"button",tabindex:e.tabindex},{default:X(()=>[ie(e.$slots,"default")]),_:3},8,["id","tabindex"])])}]),1032,["role","effect","popper-options","hide-after","placement","popper-class","reference-element","trigger","trigger-keys","trigger-target-el","show-after","virtual-ref","virtual-triggering","disabled","transition","teleported","onBeforeShow","onShow","onBeforeHide"]),e.splitButton?(T(),re(h,{key:0},{default:X(()=>[K(p,mt({ref:"referenceElementRef"},e.buttonProps,{size:e.dropdownSize,type:e.type,disabled:e.disabled,tabindex:e.tabindex,onClick:e.handlerMainButtonClick}),{default:X(()=>[ie(e.$slots,"default")]),_:3},16,["size","type","disabled","tabindex","onClick"]),K(p,mt({id:e.triggerId,ref:"triggeringElementRef"},e.buttonProps,{role:"button",size:e.dropdownSize,type:e.type,class:e.ns.e("caret-button"),disabled:e.disabled,tabindex:e.tabindex,"aria-label":e.t("el.dropdown.toggleDropdown")}),{default:X(()=>[K(v,{class:N(e.ns.e("icon"))},{default:X(()=>[K(m)]),_:1},8,["class"])]),_:1},16,["id","size","type","class","disabled","tabindex","aria-label"])]),_:3})):te("v-if",!0)],2)}var h9=Ie(f9,[["render",p9],["__file","dropdown.vue"]]);const m9=Y({name:"DropdownItemImpl",components:{ElIcon:ze},props:wE,emits:["pointermove","pointerleave","click","clickimpl"],setup(e,{emit:t}){const n=Se("dropdown"),{role:o}=De(Tf,void 0),{collectionItemRef:r}=De(c9,void 0),{collectionItemRef:a}=De(jK,void 0),{rovingFocusGroupItemRef:l,tabIndex:s,handleFocus:u,handleKeydown:c,handleMousedown:f}=De(yE,void 0),d=mf(r,a,l),p=k(()=>o.value==="menu"?"menuitem":o.value==="navigation"?"link":"button"),m=on(v=>{const{code:h}=v;if(h===Ue.enter||h===Ue.space)return v.preventDefault(),v.stopImmediatePropagation(),t("clickimpl",v),!0},c);return{ns:n,itemRef:d,dataset:{[gE]:""},role:p,tabIndex:s,handleFocus:u,handleKeydown:m,handleMousedown:f}}}),v9=["aria-disabled","tabindex","role"];function g9(e,t,n,o,r,a){const l=qe("el-icon");return T(),V(Ve,null,[e.divided?(T(),V("li",mt({key:0,role:"separator",class:e.ns.bem("menu","item","divided")},e.$attrs),null,16)):te("v-if",!0),F("li",mt({ref:e.itemRef},{...e.dataset,...e.$attrs},{"aria-disabled":e.disabled,class:[e.ns.be("menu","item"),e.ns.is("disabled",e.disabled)],tabindex:e.tabIndex,role:e.role,onClick:t[0]||(t[0]=s=>e.$emit("clickimpl",s)),onFocus:t[1]||(t[1]=(...s)=>e.handleFocus&&e.handleFocus(...s)),onKeydown:t[2]||(t[2]=Qe((...s)=>e.handleKeydown&&e.handleKeydown(...s),["self"])),onMousedown:t[3]||(t[3]=(...s)=>e.handleMousedown&&e.handleMousedown(...s)),onPointermove:t[4]||(t[4]=s=>e.$emit("pointermove",s)),onPointerleave:t[5]||(t[5]=s=>e.$emit("pointerleave",s))}),[e.icon?(T(),re(l,{key:0},{default:X(()=>[(T(),re(pt(e.icon)))]),_:1})):te("v-if",!0),ie(e.$slots,"default")],16,v9)],64)}var b9=Ie(m9,[["render",g9],["__file","dropdown-item-impl.vue"]]);const CE=()=>{const e=De("elDropdown",{}),t=k(()=>e==null?void 0:e.dropdownSize);return{elDropdown:e,_elDropdownSize:t}},y9=Y({name:"ElDropdownItem",components:{ElDropdownCollectionItem:i9,ElRovingFocusItem:o9,ElDropdownItemImpl:b9},inheritAttrs:!1,props:wE,emits:["pointermove","pointerleave","click"],setup(e,{emit:t,attrs:n}){const{elDropdown:o}=CE(),r=lt(),a=R(null),l=k(()=>{var m,v;return(v=(m=i(a))==null?void 0:m.textContent)!=null?v:""}),{onItemEnter:s,onItemLeave:u}=De(Tf,void 0),c=on(m=>(t("pointermove",m),m.defaultPrevented),Jb(m=>{if(e.disabled){u(m);return}const v=m.currentTarget;v===document.activeElement||v.contains(document.activeElement)||(s(m),m.defaultPrevented||v==null||v.focus())})),f=on(m=>(t("pointerleave",m),m.defaultPrevented),Jb(m=>{u(m)})),d=on(m=>{if(!e.disabled)return t("click",m),m.type!=="keydown"&&m.defaultPrevented},m=>{var v,h,C;if(e.disabled){m.stopImmediatePropagation();return}(v=o==null?void 0:o.hideOnClick)!=null&&v.value&&((h=o.handleClick)==null||h.call(o)),(C=o.commandHandler)==null||C.call(o,e.command,r,m)}),p=k(()=>({...e,...n}));return{handleClick:d,handlePointerMove:c,handlePointerLeave:f,textContent:l,propsAndAttrs:p}}});function w9(e,t,n,o,r,a){var l;const s=qe("el-dropdown-item-impl"),u=qe("el-roving-focus-item"),c=qe("el-dropdown-collection-item");return T(),re(c,{disabled:e.disabled,"text-value":(l=e.textValue)!=null?l:e.textContent},{default:X(()=>[K(u,{focusable:!e.disabled},{default:X(()=>[K(s,mt(e.propsAndAttrs,{onPointerleave:e.handlePointerLeave,onPointermove:e.handlePointerMove,onClickimpl:e.handleClick}),{default:X(()=>[ie(e.$slots,"default")]),_:3},16,["onPointerleave","onPointermove","onClickimpl"])]),_:3},8,["focusable"])]),_:3},8,["disabled","text-value"])}var SE=Ie(y9,[["render",w9],["__file","dropdown-item.vue"]]);const _9=Y({name:"ElDropdownMenu",props:r9,setup(e){const t=Se("dropdown"),{_elDropdownSize:n}=CE(),o=n.value,{focusTrapRef:r,onKeydown:a}=De(ag,void 0),{contentRef:l,role:s,triggerId:u}=De(Tf,void 0),{collectionRef:c,getItems:f}=De(u9,void 0),{rovingFocusGroupRef:d,rovingFocusGroupRootStyle:p,tabIndex:m,onBlur:v,onFocus:h,onMousedown:C}=De(gg,void 0),{collectionRef:g}=De(vg,void 0),y=k(()=>[t.b("menu"),t.bm("menu",o==null?void 0:o.value)]),_=mf(l,c,r,d,g),b=on(S=>{var E;(E=e.onKeydown)==null||E.call(e,S)},S=>{const{currentTarget:E,code:$,target:O}=S;if(E.contains(O),Ue.tab===$&&S.stopImmediatePropagation(),S.preventDefault(),O!==i(l)||!l9.includes($))return;const M=f().filter(D=>!D.disabled).map(D=>D.ref);_E.includes($)&&M.reverse(),bg(M)});return{size:o,rovingFocusGroupRootStyle:p,tabIndex:m,dropdownKls:y,role:s,triggerId:u,dropdownListWrapperRef:_,handleKeydown:S=>{b(S),a(S)},onBlur:v,onFocus:h,onMousedown:C}}}),C9=["role","aria-labelledby"];function S9(e,t,n,o,r,a){return T(),V("ul",{ref:e.dropdownListWrapperRef,class:N(e.dropdownKls),style:je(e.rovingFocusGroupRootStyle),tabindex:-1,role:e.role,"aria-labelledby":e.triggerId,onBlur:t[0]||(t[0]=(...l)=>e.onBlur&&e.onBlur(...l)),onFocus:t[1]||(t[1]=(...l)=>e.onFocus&&e.onFocus(...l)),onKeydown:t[2]||(t[2]=Qe((...l)=>e.handleKeydown&&e.handleKeydown(...l),["self"])),onMousedown:t[3]||(t[3]=Qe((...l)=>e.onMousedown&&e.onMousedown(...l),["self"]))},[ie(e.$slots,"default")],46,C9)}var kE=Ie(_9,[["render",S9],["__file","dropdown-menu.vue"]]);const k9=ut(h9,{DropdownItem:SE,DropdownMenu:kE}),E9=tn(SE),T9=tn(kE),$9={viewBox:"0 0 79 86",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"},O9=["id"],N9=["stop-color"],I9=["stop-color"],M9=["id"],A9=["stop-color"],P9=["stop-color"],R9=["id"],L9={id:"Illustrations",stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},x9={id:"B-type",transform:"translate(-1268.000000, -535.000000)"},D9={id:"Group-2",transform:"translate(1268.000000, 535.000000)"},F9=["fill"],B9=["fill"],V9={id:"Group-Copy",transform:"translate(34.500000, 31.500000) scale(-1, 1) rotate(-25.000000) translate(-34.500000, -31.500000) translate(7.000000, 10.000000)"},H9=["fill"],z9=["fill"],j9=["fill"],W9=["fill"],K9=["fill"],U9={id:"Rectangle-Copy-17",transform:"translate(53.000000, 45.000000)"},q9=["fill","xlink:href"],Y9=["fill","mask"],G9=["fill"],X9=Y({name:"ImgEmpty"}),J9=Y({...X9,setup(e){const t=Se("empty"),n=xn();return(o,r)=>(T(),V("svg",$9,[F("defs",null,[F("linearGradient",{id:`linearGradient-1-${i(n)}`,x1:"38.8503086%",y1:"0%",x2:"61.1496914%",y2:"100%"},[F("stop",{"stop-color":`var(${i(t).cssVarBlockName("fill-color-1")})`,offset:"0%"},null,8,N9),F("stop",{"stop-color":`var(${i(t).cssVarBlockName("fill-color-4")})`,offset:"100%"},null,8,I9)],8,O9),F("linearGradient",{id:`linearGradient-2-${i(n)}`,x1:"0%",y1:"9.5%",x2:"100%",y2:"90.5%"},[F("stop",{"stop-color":`var(${i(t).cssVarBlockName("fill-color-1")})`,offset:"0%"},null,8,A9),F("stop",{"stop-color":`var(${i(t).cssVarBlockName("fill-color-6")})`,offset:"100%"},null,8,P9)],8,M9),F("rect",{id:`path-3-${i(n)}`,x:"0",y:"0",width:"17",height:"36"},null,8,R9)]),F("g",L9,[F("g",x9,[F("g",D9,[F("path",{id:"Oval-Copy-2",d:"M39.5,86 C61.3152476,86 79,83.9106622 79,81.3333333 C79,78.7560045 57.3152476,78 35.5,78 C13.6847524,78 0,78.7560045 0,81.3333333 C0,83.9106622 17.6847524,86 39.5,86 Z",fill:`var(${i(t).cssVarBlockName("fill-color-3")})`},null,8,F9),F("polygon",{id:"Rectangle-Copy-14",fill:`var(${i(t).cssVarBlockName("fill-color-7")})`,transform:"translate(27.500000, 51.500000) scale(1, -1) translate(-27.500000, -51.500000) ",points:"13 58 53 58 42 45 2 45"},null,8,B9),F("g",V9,[F("polygon",{id:"Rectangle-Copy-10",fill:`var(${i(t).cssVarBlockName("fill-color-7")})`,transform:"translate(11.500000, 5.000000) scale(1, -1) translate(-11.500000, -5.000000) ",points:"2.84078316e-14 3 18 3 23 7 5 7"},null,8,H9),F("polygon",{id:"Rectangle-Copy-11",fill:`var(${i(t).cssVarBlockName("fill-color-5")})`,points:"-3.69149156e-15 7 38 7 38 43 -3.69149156e-15 43"},null,8,z9),F("rect",{id:"Rectangle-Copy-12",fill:`url(#linearGradient-1-${i(n)})`,transform:"translate(46.500000, 25.000000) scale(-1, 1) translate(-46.500000, -25.000000) ",x:"38",y:"7",width:"17",height:"36"},null,8,j9),F("polygon",{id:"Rectangle-Copy-13",fill:`var(${i(t).cssVarBlockName("fill-color-2")})`,transform:"translate(39.500000, 3.500000) scale(-1, 1) translate(-39.500000, -3.500000) ",points:"24 7 41 7 55 -3.63806207e-12 38 -3.63806207e-12"},null,8,W9)]),F("rect",{id:"Rectangle-Copy-15",fill:`url(#linearGradient-2-${i(n)})`,x:"13",y:"45",width:"40",height:"36"},null,8,K9),F("g",U9,[F("use",{id:"Mask",fill:`var(${i(t).cssVarBlockName("fill-color-8")})`,transform:"translate(8.500000, 18.000000) scale(-1, 1) translate(-8.500000, -18.000000) ","xlink:href":`#path-3-${i(n)}`},null,8,q9),F("polygon",{id:"Rectangle-Copy",fill:`var(${i(t).cssVarBlockName("fill-color-9")})`,mask:`url(#mask-4-${i(n)})`,transform:"translate(12.000000, 9.000000) scale(-1, 1) translate(-12.000000, -9.000000) ",points:"7 0 24 0 20 18 7 16.5"},null,8,Y9)]),F("polygon",{id:"Rectangle-Copy-18",fill:`var(${i(t).cssVarBlockName("fill-color-2")})`,transform:"translate(66.000000, 51.500000) scale(-1, 1) translate(-66.000000, -51.500000) ",points:"62 45 79 45 70 58 53 58"},null,8,G9)])])])]))}});var Z9=Ie(J9,[["__file","img-empty.vue"]]);const Q9=Ne({image:{type:String,default:""},imageSize:Number,description:{type:String,default:""}}),eU=["src"],tU={key:1},nU=Y({name:"ElEmpty"}),oU=Y({...nU,props:Q9,setup(e){const t=e,{t:n}=$t(),o=Se("empty"),r=k(()=>t.description||n("el.table.emptyText")),a=k(()=>({width:rn(t.imageSize)}));return(l,s)=>(T(),V("div",{class:N(i(o).b())},[F("div",{class:N(i(o).e("image")),style:je(i(a))},[l.image?(T(),V("img",{key:0,src:l.image,ondragstart:"return false"},null,8,eU)):ie(l.$slots,"image",{key:1},()=>[K(Z9)])],6),F("div",{class:N(i(o).e("description"))},[l.$slots.description?ie(l.$slots,"description",{key:0}):(T(),V("p",tU,le(i(r)),1))],2),l.$slots.default?(T(),V("div",{key:0,class:N(i(o).e("bottom"))},[ie(l.$slots,"default")],2)):te("v-if",!0)],2))}});var rU=Ie(oU,[["__file","empty.vue"]]);const EE=ut(rU),aU=Ne({urlList:{type:Q(Array),default:()=>en([])},zIndex:{type:Number},initialIndex:{type:Number,default:0},infinite:{type:Boolean,default:!0},hideOnClickModal:Boolean,teleported:Boolean,closeOnPressEscape:{type:Boolean,default:!0},zoomRate:{type:Number,default:1.2},minScale:{type:Number,default:.2},maxScale:{type:Number,default:7},crossorigin:{type:Q(String)}}),lU={close:()=>!0,switch:e=>Je(e),rotate:e=>Je(e)},sU=["src","crossorigin"],iU=Y({name:"ElImageViewer"}),uU=Y({...iU,props:aU,emits:lU,setup(e,{expose:t,emit:n}){var o;const r=e,a={CONTAIN:{name:"contain",icon:Po(S4)},ORIGINAL:{name:"original",icon:Po(W4)}},{t:l}=$t(),s=Se("image-viewer"),{nextZIndex:u}=Zs(),c=R(),f=R([]),d=Bd(),p=R(!0),m=R(r.initialIndex),v=Ut(a.CONTAIN),h=R({scale:1,deg:0,offsetX:0,offsetY:0,enableTransition:!1}),C=R((o=r.zIndex)!=null?o:u()),g=k(()=>{const{urlList:H}=r;return H.length<=1}),y=k(()=>m.value===0),_=k(()=>m.value===r.urlList.length-1),b=k(()=>r.urlList[m.value]),w=k(()=>[s.e("btn"),s.e("prev"),s.is("disabled",!r.infinite&&y.value)]),S=k(()=>[s.e("btn"),s.e("next"),s.is("disabled",!r.infinite&&_.value)]),E=k(()=>{const{scale:H,deg:G,offsetX:J,offsetY:ee,enableTransition:fe}=h.value;let Te=J/H,oe=ee/H;switch(G%360){case 90:case-270:[Te,oe]=[oe,-Te];break;case 180:case-180:[Te,oe]=[-Te,-oe];break;case 270:case-90:[Te,oe]=[-oe,Te];break}const ke={transform:`scale(${H}) rotate(${G}deg) translate(${Te}px, ${oe}px)`,transition:fe?"transform .3s":""};return v.value.name===a.CONTAIN.name&&(ke.maxWidth=ke.maxHeight="100%"),ke});function $(){A(),n("close")}function O(){const H=il(J=>{switch(J.code){case Ue.esc:r.closeOnPressEscape&&$();break;case Ue.space:W();break;case Ue.left:P();break;case Ue.up:I("zoomIn");break;case Ue.right:x();break;case Ue.down:I("zoomOut");break}}),G=il(J=>{const ee=J.deltaY||J.deltaX;I(ee<0?"zoomIn":"zoomOut",{zoomRate:r.zoomRate,enableTransition:!1})});d.run(()=>{qt(document,"keydown",H),qt(document,"wheel",G)})}function A(){d.stop()}function M(){p.value=!1}function D(H){p.value=!1,H.target.alt=l("el.image.error")}function U(H){if(p.value||H.button!==0||!c.value)return;h.value.enableTransition=!1;const{offsetX:G,offsetY:J}=h.value,ee=H.pageX,fe=H.pageY,Te=il(ke=>{h.value={...h.value,offsetX:G+ke.pageX-ee,offsetY:J+ke.pageY-fe}}),oe=qt(document,"mousemove",Te);qt(document,"mouseup",()=>{oe()}),H.preventDefault()}function j(){h.value={scale:1,deg:0,offsetX:0,offsetY:0,enableTransition:!1}}function W(){if(p.value)return;const H=Ss(a),G=Object.values(a),J=v.value.name,fe=(G.findIndex(Te=>Te.name===J)+1)%H.length;v.value=a[H[fe]],j()}function L(H){const G=r.urlList.length;m.value=(H+G)%G}function P(){y.value&&!r.infinite||L(m.value-1)}function x(){_.value&&!r.infinite||L(m.value+1)}function I(H,G={}){if(p.value)return;const{minScale:J,maxScale:ee}=r,{zoomRate:fe,rotateDeg:Te,enableTransition:oe}={zoomRate:r.zoomRate,rotateDeg:90,enableTransition:!0,...G};switch(H){case"zoomOut":h.value.scale>J&&(h.value.scale=Number.parseFloat((h.value.scale/fe).toFixed(3)));break;case"zoomIn":h.value.scale{We(()=>{const H=f.value[0];H!=null&&H.complete||(p.value=!0)})}),ve(m,H=>{j(),n("switch",H)}),at(()=>{var H,G;O(),(G=(H=c.value)==null?void 0:H.focus)==null||G.call(H)}),t({setActiveItem:L}),(H,G)=>(T(),re(Pl,{to:"body",disabled:!H.teleported},[K(fn,{name:"viewer-fade",appear:""},{default:X(()=>[F("div",{ref_key:"wrapper",ref:c,tabindex:-1,class:N(i(s).e("wrapper")),style:je({zIndex:C.value})},[F("div",{class:N(i(s).e("mask")),onClick:G[0]||(G[0]=Qe(J=>H.hideOnClickModal&&$(),["self"]))},null,2),te(" CLOSE "),F("span",{class:N([i(s).e("btn"),i(s).e("close")]),onClick:$},[K(i(ze),null,{default:X(()=>[K(i(tr))]),_:1})],2),te(" ARROW "),i(g)?te("v-if",!0):(T(),V(Ve,{key:0},[F("span",{class:N(i(w)),onClick:P},[K(i(ze),null,{default:X(()=>[K(i(Aa))]),_:1})],2),F("span",{class:N(i(S)),onClick:x},[K(i(ze),null,{default:X(()=>[K(i(Jn))]),_:1})],2)],64)),te(" ACTIONS "),F("div",{class:N([i(s).e("btn"),i(s).e("actions")])},[F("div",{class:N(i(s).e("actions__inner"))},[K(i(ze),{onClick:G[1]||(G[1]=J=>I("zoomOut"))},{default:X(()=>[K(i(l3))]),_:1}),K(i(ze),{onClick:G[2]||(G[2]=J=>I("zoomIn"))},{default:X(()=>[K(i(ZC))]),_:1}),F("i",{class:N(i(s).e("actions__divider"))},null,2),K(i(ze),{onClick:W},{default:X(()=>[(T(),re(pt(i(v).icon)))]),_:1}),F("i",{class:N(i(s).e("actions__divider"))},null,2),K(i(ze),{onClick:G[3]||(G[3]=J=>I("anticlockwise"))},{default:X(()=>[K(i(H4))]),_:1}),K(i(ze),{onClick:G[4]||(G[4]=J=>I("clockwise"))},{default:X(()=>[K(i(XC))]),_:1})],2)],2),te(" CANVAS "),F("div",{class:N(i(s).e("canvas"))},[(T(!0),V(Ve,null,bt(H.urlList,(J,ee)=>tt((T(),V("img",{ref_for:!0,ref:fe=>f.value[ee]=fe,key:J,src:J,style:je(i(E)),class:N(i(s).e("img")),crossorigin:H.crossorigin,onLoad:M,onError:D,onMousedown:U},null,46,sU)),[[kt,ee===m.value]])),128))],2),ie(H.$slots,"default")],6)]),_:3})],8,["disabled"]))}});var cU=Ie(uU,[["__file","image-viewer.vue"]]);const TE=ut(cU),dU=Ne({hideOnClickModal:Boolean,src:{type:String,default:""},fit:{type:String,values:["","contain","cover","fill","none","scale-down"],default:""},loading:{type:String,values:["eager","lazy"]},lazy:Boolean,scrollContainer:{type:Q([String,Object])},previewSrcList:{type:Q(Array),default:()=>en([])},previewTeleported:Boolean,zIndex:{type:Number},initialIndex:{type:Number,default:0},infinite:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},zoomRate:{type:Number,default:1.2},minScale:{type:Number,default:.2},maxScale:{type:Number,default:7},crossorigin:{type:Q(String)}}),fU={load:e=>e instanceof Event,error:e=>e instanceof Event,switch:e=>Je(e),close:()=>!0,show:()=>!0},pU=["src","loading","crossorigin"],hU={key:0},mU=Y({name:"ElImage",inheritAttrs:!1}),vU=Y({...mU,props:dU,emits:fU,setup(e,{emit:t}){const n=e;let o="";const{t:r}=$t(),a=Se("image"),l=xa(),s=xv(),u=R(),c=R(!1),f=R(!0),d=R(!1),p=R(),m=R(),v=Ct&&"loading"in HTMLImageElement.prototype;let h,C;const g=k(()=>[a.e("inner"),b.value&&a.e("preview"),f.value&&a.is("loading")]),y=k(()=>l.style),_=k(()=>{const{fit:x}=n;return Ct&&x?{objectFit:x}:{}}),b=k(()=>{const{previewSrcList:x}=n;return Array.isArray(x)&&x.length>0}),w=k(()=>{const{previewSrcList:x,initialIndex:I}=n;let H=I;return I>x.length-1&&(H=0),H}),S=k(()=>n.loading==="eager"?!1:!v&&n.loading==="lazy"||n.lazy),E=()=>{Ct&&(f.value=!0,c.value=!1,u.value=n.src)};function $(x){f.value=!1,c.value=!1,t("load",x)}function O(x){f.value=!1,c.value=!0,t("error",x)}function A(){yM(p.value,m.value)&&(E(),U())}const M=Z_(A,200,!0);async function D(){var x;if(!Ct)return;await We();const{scrollContainer:I}=n;Fo(I)?m.value=I:nt(I)&&I!==""?m.value=(x=document.querySelector(I))!=null?x:void 0:p.value&&(m.value=Ov(p.value)),m.value&&(h=qt(m,"scroll",M),setTimeout(()=>A(),100))}function U(){!Ct||!m.value||!M||(h==null||h(),m.value=void 0)}function j(x){if(x.ctrlKey){if(x.deltaY<0)return x.preventDefault(),!1;if(x.deltaY>0)return x.preventDefault(),!1}}function W(){b.value&&(C=qt("wheel",j,{passive:!1}),o=document.body.style.overflow,document.body.style.overflow="hidden",d.value=!0,t("show"))}function L(){C==null||C(),document.body.style.overflow=o,d.value=!1,t("close")}function P(x){t("switch",x)}return ve(()=>n.src,()=>{S.value?(f.value=!0,c.value=!1,U(),D()):E()}),at(()=>{S.value?D():E()}),(x,I)=>(T(),V("div",{ref_key:"container",ref:p,class:N([i(a).b(),x.$attrs.class]),style:je(i(y))},[c.value?ie(x.$slots,"error",{key:0},()=>[F("div",{class:N(i(a).e("error"))},le(i(r)("el.image.error")),3)]):(T(),V(Ve,{key:1},[u.value!==void 0?(T(),V("img",mt({key:0},i(s),{src:u.value,loading:x.loading,style:i(_),class:i(g),crossorigin:x.crossorigin,onClick:W,onLoad:$,onError:O}),null,16,pU)):te("v-if",!0),f.value?(T(),V("div",{key:1,class:N(i(a).e("wrapper"))},[ie(x.$slots,"placeholder",{},()=>[F("div",{class:N(i(a).e("placeholder"))},null,2)])],2)):te("v-if",!0)],64)),i(b)?(T(),V(Ve,{key:2},[d.value?(T(),re(i(TE),{key:0,"z-index":x.zIndex,"initial-index":i(w),infinite:x.infinite,"zoom-rate":x.zoomRate,"min-scale":x.minScale,"max-scale":x.maxScale,"url-list":x.previewSrcList,crossorigin:x.crossorigin,"hide-on-click-modal":x.hideOnClickModal,teleported:x.previewTeleported,"close-on-press-escape":x.closeOnPressEscape,onClose:L,onSwitch:P},{default:X(()=>[x.$slots.viewer?(T(),V("div",hU,[ie(x.$slots,"viewer")])):te("v-if",!0)]),_:3},8,["z-index","initial-index","infinite","zoom-rate","min-scale","max-scale","url-list","crossorigin","hide-on-click-modal","teleported","close-on-press-escape"])):te("v-if",!0)],64)):te("v-if",!0)],6))}});var gU=Ie(vU,[["__file","image.vue"]]);const bU=ut(gU),yU=Ne({id:{type:String,default:void 0},step:{type:Number,default:1},stepStrictly:Boolean,max:{type:Number,default:Number.POSITIVE_INFINITY},min:{type:Number,default:Number.NEGATIVE_INFINITY},modelValue:Number,readonly:Boolean,disabled:Boolean,size:gn,controls:{type:Boolean,default:!0},controlsPosition:{type:String,default:"",values:["","right"]},valueOnClear:{type:[String,Number,null],validator:e=>e===null||Je(e)||["min","max"].includes(e),default:null},name:String,label:String,placeholder:String,precision:{type:Number,validator:e=>e>=0&&e===Number.parseInt(`${e}`,10)},validateEvent:{type:Boolean,default:!0},...An(["ariaLabel"])}),wU={[Yt]:(e,t)=>t!==e,blur:e=>e instanceof FocusEvent,focus:e=>e instanceof FocusEvent,[Zn]:e=>Je(e)||Tn(e),[ft]:e=>Je(e)||Tn(e)},_U=["aria-label","onKeydown"],CU=["aria-label","onKeydown"],SU=Y({name:"ElInputNumber"}),kU=Y({...SU,props:yU,emits:wU,setup(e,{expose:t,emit:n}){const o=e,{t:r}=$t(),a=Se("input-number"),l=R(),s=Et({currentValue:o.modelValue,userInput:null}),{formItem:u}=qn(),c=k(()=>Je(o.modelValue)&&o.modelValue<=o.min),f=k(()=>Je(o.modelValue)&&o.modelValue>=o.max),d=k(()=>{const W=g(o.step);return pn(o.precision)?Math.max(g(o.modelValue),W):(W>o.precision,o.precision)}),p=k(()=>o.controls&&o.controlsPosition==="right"),m=hn(),v=to(),h=k(()=>{if(s.userInput!==null)return s.userInput;let W=s.currentValue;if(Tn(W))return"";if(Je(W)){if(Number.isNaN(W))return"";pn(o.precision)||(W=W.toFixed(o.precision))}return W}),C=(W,L)=>{if(pn(L)&&(L=d.value),L===0)return Math.round(W);let P=String(W);const x=P.indexOf(".");if(x===-1||!P.replace(".","").split("")[x+L])return W;const G=P.length;return P.charAt(G-1)==="5"&&(P=`${P.slice(0,Math.max(0,G-1))}6`),Number.parseFloat(Number(P).toFixed(L))},g=W=>{if(Tn(W))return 0;const L=W.toString(),P=L.indexOf(".");let x=0;return P!==-1&&(x=L.length-P-1),x},y=(W,L=1)=>Je(W)?C(W+o.step*L):s.currentValue,_=()=>{if(o.readonly||v.value||f.value)return;const W=Number(h.value)||0,L=y(W);S(L),n(Zn,s.currentValue),U()},b=()=>{if(o.readonly||v.value||c.value)return;const W=Number(h.value)||0,L=y(W,-1);S(L),n(Zn,s.currentValue),U()},w=(W,L)=>{const{max:P,min:x,step:I,precision:H,stepStrictly:G,valueOnClear:J}=o;PP||eeP?P:x,L&&n(ft,ee)),ee},S=(W,L=!0)=>{var P;const x=s.currentValue,I=w(W);if(!L){n(ft,I);return}x===I&&W||(s.userInput=null,n(ft,I),x!==I&&n(Yt,I,x),o.validateEvent&&((P=u==null?void 0:u.validate)==null||P.call(u,"change").catch(H=>void 0)),s.currentValue=I)},E=W=>{s.userInput=W;const L=W===""?null:Number(W);n(Zn,L),S(L,!1)},$=W=>{const L=W!==""?Number(W):"";(Je(L)&&!Number.isNaN(L)||W==="")&&S(L),U(),s.userInput=null},O=()=>{var W,L;(L=(W=l.value)==null?void 0:W.focus)==null||L.call(W)},A=()=>{var W,L;(L=(W=l.value)==null?void 0:W.blur)==null||L.call(W)},M=W=>{n("focus",W)},D=W=>{var L;s.userInput=null,n("blur",W),o.validateEvent&&((L=u==null?void 0:u.validate)==null||L.call(u,"blur").catch(P=>void 0))},U=()=>{s.currentValue!==o.modelValue&&(s.currentValue=o.modelValue)},j=W=>{document.activeElement===W.target&&W.preventDefault()};return ve(()=>o.modelValue,(W,L)=>{const P=w(W,!0);s.userInput===null&&P!==L&&(s.currentValue=P)},{immediate:!0}),at(()=>{var W;const{min:L,max:P,modelValue:x}=o,I=(W=l.value)==null?void 0:W.input;if(I.setAttribute("role","spinbutton"),Number.isFinite(P)?I.setAttribute("aria-valuemax",String(P)):I.removeAttribute("aria-valuemax"),Number.isFinite(L)?I.setAttribute("aria-valuemin",String(L)):I.removeAttribute("aria-valuemin"),I.setAttribute("aria-valuenow",s.currentValue||s.currentValue===0?String(s.currentValue):""),I.setAttribute("aria-disabled",String(v.value)),!Je(x)&&x!=null){let H=Number(x);Number.isNaN(H)&&(H=null),n(ft,H)}I.addEventListener("wheel",j,{passive:!1})}),ar(()=>{var W,L;const P=(W=l.value)==null?void 0:W.input;P==null||P.setAttribute("aria-valuenow",`${(L=s.currentValue)!=null?L:""}`)}),wn({from:"label",replacement:"aria-label",version:"2.8.0",scope:"el-input-number",ref:"https://element-plus.org/en-US/component/input-number.html"},k(()=>!!o.label)),t({focus:O,blur:A}),(W,L)=>(T(),V("div",{class:N([i(a).b(),i(a).m(i(m)),i(a).is("disabled",i(v)),i(a).is("without-controls",!W.controls),i(a).is("controls-right",i(p))]),onDragstart:L[0]||(L[0]=Qe(()=>{},["prevent"]))},[W.controls?tt((T(),V("span",{key:0,role:"button","aria-label":i(r)("el.inputNumber.decrease"),class:N([i(a).e("decrease"),i(a).is("disabled",i(c))]),onKeydown:Pt(b,["enter"])},[ie(W.$slots,"decrease-icon",{},()=>[K(i(ze),null,{default:X(()=>[i(p)?(T(),re(i(Nr),{key:0})):(T(),re(i(N4),{key:1}))]),_:1})])],42,_U)),[[i(wd),b]]):te("v-if",!0),W.controls?tt((T(),V("span",{key:1,role:"button","aria-label":i(r)("el.inputNumber.increase"),class:N([i(a).e("increase"),i(a).is("disabled",i(f))]),onKeydown:Pt(_,["enter"])},[ie(W.$slots,"increase-icon",{},()=>[K(i(ze),null,{default:X(()=>[i(p)?(T(),re(i(pf),{key:0})):(T(),re(i(GC),{key:1}))]),_:1})])],42,CU)),[[i(wd),_]]):te("v-if",!0),K(i(zn),{id:W.id,ref_key:"input",ref:l,type:"number",step:W.step,"model-value":i(h),placeholder:W.placeholder,readonly:W.readonly,disabled:i(v),size:i(m),max:W.max,min:W.min,name:W.name,"aria-label":W.label||W.ariaLabel,"validate-event":!1,onKeydown:[Pt(Qe(_,["prevent"]),["up"]),Pt(Qe(b,["prevent"]),["down"])],onBlur:D,onFocus:M,onInput:E,onChange:$},null,8,["id","step","model-value","placeholder","readonly","disabled","size","max","min","name","aria-label","onKeydown"])],34))}});var EU=Ie(kU,[["__file","input-number.vue"]]);const $E=ut(EU),TU=Ne({type:{type:String,values:["primary","success","warning","info","danger","default"],default:"default"},underline:{type:Boolean,default:!0},disabled:Boolean,href:{type:String,default:""},target:{type:String,default:"_self"},icon:{type:Dt}}),$U={click:e=>e instanceof MouseEvent},OU=["href","target"],NU=Y({name:"ElLink"}),IU=Y({...NU,props:TU,emits:$U,setup(e,{emit:t}){const n=e,o=Se("link"),r=k(()=>[o.b(),o.m(n.type),o.is("disabled",n.disabled),o.is("underline",n.underline&&!n.disabled)]);function a(l){n.disabled||t("click",l)}return(l,s)=>(T(),V("a",{class:N(i(r)),href:l.disabled||!l.href?void 0:l.href,target:l.disabled||!l.href?void 0:l.target,onClick:a},[l.icon?(T(),re(i(ze),{key:0},{default:X(()=>[(T(),re(pt(l.icon)))]),_:1})):te("v-if",!0),l.$slots.default?(T(),V("span",{key:1,class:N(i(o).e("inner"))},[ie(l.$slots,"default")],2)):te("v-if",!0),l.$slots.icon?ie(l.$slots,"icon",{key:2}):te("v-if",!0)],10,OU))}});var MU=Ie(IU,[["__file","link.vue"]]);const AU=ut(MU);let PU=class{constructor(t,n){this.parent=t,this.domNode=n,this.subIndex=0,this.subIndex=0,this.init()}init(){this.subMenuItems=this.domNode.querySelectorAll("li"),this.addListeners()}gotoSubIndex(t){t===this.subMenuItems.length?t=0:t<0&&(t=this.subMenuItems.length-1),this.subMenuItems[t].focus(),this.subIndex=t}addListeners(){const t=this.parent.domNode;Array.prototype.forEach.call(this.subMenuItems,n=>{n.addEventListener("keydown",o=>{let r=!1;switch(o.code){case Ue.down:{this.gotoSubIndex(this.subIndex+1),r=!0;break}case Ue.up:{this.gotoSubIndex(this.subIndex-1),r=!0;break}case Ue.tab:{Nc(t,"mouseleave");break}case Ue.enter:case Ue.space:{r=!0,o.currentTarget.click();break}}return r&&(o.preventDefault(),o.stopPropagation()),!1})})}},RU=class{constructor(t,n){this.domNode=t,this.submenu=null,this.submenu=null,this.init(n)}init(t){this.domNode.setAttribute("tabindex","0");const n=this.domNode.querySelector(`.${t}-menu`);n&&(this.submenu=new PU(this,n)),this.addListeners()}addListeners(){this.domNode.addEventListener("keydown",t=>{let n=!1;switch(t.code){case Ue.down:{Nc(t.currentTarget,"mouseenter"),this.submenu&&this.submenu.gotoSubIndex(0),n=!0;break}case Ue.up:{Nc(t.currentTarget,"mouseenter"),this.submenu&&this.submenu.gotoSubIndex(this.submenu.subMenuItems.length-1),n=!0;break}case Ue.tab:{Nc(t.currentTarget,"mouseleave");break}case Ue.enter:case Ue.space:{n=!0,t.currentTarget.click();break}}n&&t.preventDefault()})}},LU=class{constructor(t,n){this.domNode=t,this.init(n)}init(t){const n=this.domNode.childNodes;Array.from(n).forEach(o=>{o.nodeType===1&&new RU(o,t)})}};const xU=Y({name:"ElMenuCollapseTransition",setup(){const e=Se("menu");return{listeners:{onBeforeEnter:n=>n.style.opacity="0.2",onEnter(n,o){Mo(n,`${e.namespace.value}-opacity-transition`),n.style.opacity="1",o()},onAfterEnter(n){Kn(n,`${e.namespace.value}-opacity-transition`),n.style.opacity=""},onBeforeLeave(n){n.dataset||(n.dataset={}),wo(n,e.m("collapse"))?(Kn(n,e.m("collapse")),n.dataset.oldOverflow=n.style.overflow,n.dataset.scrollWidth=n.clientWidth.toString(),Mo(n,e.m("collapse"))):(Mo(n,e.m("collapse")),n.dataset.oldOverflow=n.style.overflow,n.dataset.scrollWidth=n.clientWidth.toString(),Kn(n,e.m("collapse"))),n.style.width=`${n.scrollWidth}px`,n.style.overflow="hidden"},onLeave(n){Mo(n,"horizontal-collapse-transition"),n.style.width=`${n.dataset.scrollWidth}px`}}}}});function DU(e,t,n,o,r,a){return T(),re(fn,mt({mode:"out-in"},e.listeners),{default:X(()=>[ie(e.$slots,"default")]),_:3},16)}var FU=Ie(xU,[["render",DU],["__file","menu-collapse-transition.vue"]]);function OE(e,t){const n=k(()=>{let r=e.parent;const a=[t.value];for(;r.type.name!=="ElMenu";)r.props.index&&a.unshift(r.props.index),r=r.parent;return a});return{parentMenu:k(()=>{let r=e.parent;for(;r&&!["ElMenu","ElSubMenu"].includes(r.type.name);)r=r.parent;return r}),indexPath:n}}function BU(e){return k(()=>{const n=e.backgroundColor;return n?new lk(n).shade(20).toString():""})}const NE=(e,t)=>{const n=Se("menu");return k(()=>n.cssVarBlock({"text-color":e.textColor||"","hover-text-color":e.textColor||"","bg-color":e.backgroundColor||"","hover-bg-color":BU(e).value||"","active-color":e.activeTextColor||"",level:`${t}`}))},VU=Ne({index:{type:String,required:!0},showTimeout:Number,hideTimeout:Number,popperClass:String,disabled:Boolean,teleported:{type:Boolean,default:void 0},popperOffset:Number,expandCloseIcon:{type:Dt},expandOpenIcon:{type:Dt},collapseCloseIcon:{type:Dt},collapseOpenIcon:{type:Dt}}),Sp="ElSubMenu";var yg=Y({name:Sp,props:VU,setup(e,{slots:t,expose:n}){const o=lt(),{indexPath:r,parentMenu:a}=OE(o,k(()=>e.index)),l=Se("menu"),s=Se("sub-menu"),u=De("rootMenu");u||vn(Sp,"can not inject root menu");const c=De(`subMenu:${a.value.uid}`);c||vn(Sp,"can not inject sub menu");const f=R({}),d=R({});let p;const m=R(!1),v=R(),h=R(null),C=k(()=>$.value==="horizontal"&&y.value?"bottom-start":"right-start"),g=k(()=>$.value==="horizontal"&&y.value||$.value==="vertical"&&!u.props.collapse?e.expandCloseIcon&&e.expandOpenIcon?S.value?e.expandOpenIcon:e.expandCloseIcon:Nr:e.collapseCloseIcon&&e.collapseOpenIcon?S.value?e.collapseOpenIcon:e.collapseCloseIcon:Jn),y=k(()=>c.level===0),_=k(()=>{const H=e.teleported;return H===void 0?y.value:H}),b=k(()=>u.props.collapse?`${l.namespace.value}-zoom-in-left`:`${l.namespace.value}-zoom-in-top`),w=k(()=>$.value==="horizontal"&&y.value?["bottom-start","bottom-end","top-start","top-end","right-start","left-start"]:["right-start","right","right-end","left-start","bottom-start","bottom-end","top-start","top-end"]),S=k(()=>u.openedMenus.includes(e.index)),E=k(()=>{let H=!1;return Object.values(f.value).forEach(G=>{G.active&&(H=!0)}),Object.values(d.value).forEach(G=>{G.active&&(H=!0)}),H}),$=k(()=>u.props.mode),O=Et({index:e.index,indexPath:r,active:E}),A=NE(u.props,c.level+1),M=k(()=>{var H;return(H=e.popperOffset)!=null?H:u.props.popperOffset}),D=k(()=>{var H;return(H=e.popperClass)!=null?H:u.props.popperClass}),U=k(()=>{var H;return(H=e.showTimeout)!=null?H:u.props.showTimeout}),j=k(()=>{var H;return(H=e.hideTimeout)!=null?H:u.props.hideTimeout}),W=()=>{var H,G,J;return(J=(G=(H=h.value)==null?void 0:H.popperRef)==null?void 0:G.popperInstanceRef)==null?void 0:J.destroy()},L=H=>{H||W()},P=()=>{u.props.menuTrigger==="hover"&&u.props.mode==="horizontal"||u.props.collapse&&u.props.mode==="vertical"||e.disabled||u.handleSubMenuClick({index:e.index,indexPath:r.value,active:E.value})},x=(H,G=U.value)=>{var J;if(H.type!=="focus"){if(u.props.menuTrigger==="click"&&u.props.mode==="horizontal"||!u.props.collapse&&u.props.mode==="vertical"||e.disabled){c.mouseInChild.value=!0;return}c.mouseInChild.value=!0,p==null||p(),{stop:p}=_l(()=>{u.openMenu(e.index,r.value)},G),_.value&&((J=a.value.vnode.el)==null||J.dispatchEvent(new MouseEvent("mouseenter")))}},I=(H=!1)=>{var G;if(u.props.menuTrigger==="click"&&u.props.mode==="horizontal"||!u.props.collapse&&u.props.mode==="vertical"){c.mouseInChild.value=!1;return}p==null||p(),c.mouseInChild.value=!1,{stop:p}=_l(()=>!m.value&&u.closeMenu(e.index,r.value),j.value),_.value&&H&&((G=c.handleMouseleave)==null||G.call(c,!0))};ve(()=>u.props.collapse,H=>L(!!H));{const H=J=>{d.value[J.index]=J},G=J=>{delete d.value[J.index]};yt(`subMenu:${o.uid}`,{addSubMenu:H,removeSubMenu:G,handleMouseleave:I,mouseInChild:m,level:c.level+1})}return n({opened:S}),at(()=>{u.addSubMenu(O),c.addSubMenu(O)}),zt(()=>{c.removeSubMenu(O),u.removeSubMenu(O)}),()=>{var H;const G=[(H=t.title)==null?void 0:H.call(t),Ke(ze,{class:s.e("icon-arrow"),style:{transform:S.value?e.expandCloseIcon&&e.expandOpenIcon||e.collapseCloseIcon&&e.collapseOpenIcon&&u.props.collapse?"none":"rotateZ(180deg)":"none"}},{default:()=>nt(g.value)?Ke(o.appContext.components[g.value]):Ke(g.value)})],J=u.isMenuPopup?Ke(Un,{ref:h,visible:S.value,effect:"light",pure:!0,offset:M.value,showArrow:!1,persistent:!0,popperClass:D.value,placement:C.value,teleported:_.value,fallbackPlacements:w.value,transition:b.value,gpuAcceleration:!1},{content:()=>{var ee;return Ke("div",{class:[l.m($.value),l.m("popup-container"),D.value],onMouseenter:fe=>x(fe,100),onMouseleave:()=>I(!0),onFocus:fe=>x(fe,100)},[Ke("ul",{class:[l.b(),l.m("popup"),l.m(`popup-${C.value}`)],style:A.value},[(ee=t.default)==null?void 0:ee.call(t)])])},default:()=>Ke("div",{class:s.e("title"),onClick:P},G)}):Ke(Ve,{},[Ke("div",{class:s.e("title"),ref:v,onClick:P},G),Ke(Ef,{},{default:()=>{var ee;return tt(Ke("ul",{role:"menu",class:[l.b(),l.m("inline")],style:A.value},[(ee=t.default)==null?void 0:ee.call(t)]),[[kt,S.value]])}})]);return Ke("li",{class:[s.b(),s.is("active",E.value),s.is("opened",S.value),s.is("disabled",e.disabled)],role:"menuitem",ariaHaspopup:!0,ariaExpanded:S.value,onMouseenter:x,onMouseleave:()=>I(),onFocus:x},[J])}}});const HU=Ne({mode:{type:String,values:["horizontal","vertical"],default:"vertical"},defaultActive:{type:String,default:""},defaultOpeneds:{type:Q(Array),default:()=>en([])},uniqueOpened:Boolean,router:Boolean,menuTrigger:{type:String,values:["hover","click"],default:"hover"},collapse:Boolean,backgroundColor:String,textColor:String,activeTextColor:String,closeOnClickOutside:Boolean,collapseTransition:{type:Boolean,default:!0},ellipsis:{type:Boolean,default:!0},popperOffset:{type:Number,default:6},ellipsisIcon:{type:Dt,default:()=>A4},popperEffect:{type:String,values:["dark","light"],default:"dark"},popperClass:String,showTimeout:{type:Number,default:300},hideTimeout:{type:Number,default:300}}),kp=e=>Array.isArray(e)&&e.every(t=>nt(t)),zU={close:(e,t)=>nt(e)&&kp(t),open:(e,t)=>nt(e)&&kp(t),select:(e,t,n,o)=>nt(e)&&kp(t)&&dt(n)&&(o===void 0||o instanceof Promise)};var jU=Y({name:"ElMenu",props:HU,emits:zU,setup(e,{emit:t,slots:n,expose:o}){const r=lt(),a=r.appContext.config.globalProperties.$router,l=R(),s=Se("menu"),u=Se("sub-menu"),c=R(-1),f=R(e.defaultOpeneds&&!e.collapse?e.defaultOpeneds.slice(0):[]),d=R(e.defaultActive),p=R({}),m=R({}),v=k(()=>e.mode==="horizontal"||e.mode==="vertical"&&e.collapse),h=()=>{const j=d.value&&p.value[d.value];if(!j||e.mode==="horizontal"||e.collapse)return;j.indexPath.forEach(L=>{const P=m.value[L];P&&C(L,P.indexPath)})},C=(j,W)=>{f.value.includes(j)||(e.uniqueOpened&&(f.value=f.value.filter(L=>W.includes(L))),f.value.push(j),t("open",j,W))},g=j=>{const W=f.value.indexOf(j);W!==-1&&f.value.splice(W,1)},y=(j,W)=>{g(j),t("close",j,W)},_=({index:j,indexPath:W})=>{f.value.includes(j)?y(j,W):C(j,W)},b=j=>{(e.mode==="horizontal"||e.collapse)&&(f.value=[]);const{index:W,indexPath:L}=j;if(!(Tn(W)||Tn(L)))if(e.router&&a){const P=j.route||W,x=a.push(P).then(I=>(I||(d.value=W),I));t("select",W,L,{index:W,indexPath:L,route:P},x)}else d.value=W,t("select",W,L,{index:W,indexPath:L})},w=j=>{const W=p.value,L=W[j]||d.value&&W[d.value]||W[e.defaultActive];L?d.value=L.index:d.value=j},S=j=>{const W=getComputedStyle(j),L=Number.parseInt(W.marginLeft,10),P=Number.parseInt(W.marginRight,10);return j.offsetWidth+L+P||0},E=()=>{var j,W;if(!l.value)return-1;const L=Array.from((W=(j=l.value)==null?void 0:j.childNodes)!=null?W:[]).filter(fe=>fe.nodeName!=="#comment"&&(fe.nodeName!=="#text"||fe.nodeValue)),P=64,x=getComputedStyle(l.value),I=Number.parseInt(x.paddingLeft,10),H=Number.parseInt(x.paddingRight,10),G=l.value.clientWidth-I-H;let J=0,ee=0;return L.forEach((fe,Te)=>{J+=S(fe),J<=G-P&&(ee=Te+1)}),ee===L.length?-1:ee},$=j=>m.value[j].indexPath,O=(j,W=33.34)=>{let L;return()=>{L&&clearTimeout(L),L=setTimeout(()=>{j()},W)}};let A=!0;const M=()=>{if(c.value===E())return;const j=()=>{c.value=-1,We(()=>{c.value=E()})};A?j():O(j)(),A=!1};ve(()=>e.defaultActive,j=>{p.value[j]||(d.value=""),w(j)}),ve(()=>e.collapse,j=>{j&&(f.value=[])}),ve(p.value,h);let D;Mn(()=>{e.mode==="horizontal"&&e.ellipsis?D=Qt(l,M).stop:D==null||D()});const U=R(!1);{const j=x=>{m.value[x.index]=x},W=x=>{delete m.value[x.index]};yt("rootMenu",Et({props:e,openedMenus:f,items:p,subMenus:m,activeIndex:d,isMenuPopup:v,addMenuItem:x=>{p.value[x.index]=x},removeMenuItem:x=>{delete p.value[x.index]},addSubMenu:j,removeSubMenu:W,openMenu:C,closeMenu:y,handleMenuItemClick:b,handleSubMenuClick:_})),yt(`subMenu:${r.uid}`,{addSubMenu:j,removeSubMenu:W,mouseInChild:U,level:0})}return at(()=>{e.mode==="horizontal"&&new LU(r.vnode.el,s.namespace.value)}),o({open:W=>{const{indexPath:L}=m.value[W];L.forEach(P=>C(P,L))},close:g,handleResize:M}),()=>{var j,W;let L=(W=(j=n.default)==null?void 0:j.call(n))!=null?W:[];const P=[];if(e.mode==="horizontal"&&l.value){const G=Ca(L),J=c.value===-1?G:G.slice(0,c.value),ee=c.value===-1?[]:G.slice(c.value);ee!=null&&ee.length&&e.ellipsis&&(L=J,P.push(Ke(yg,{index:"sub-menu-more",class:u.e("hide-arrow"),popperOffset:e.popperOffset},{title:()=>Ke(ze,{class:u.e("icon-more")},{default:()=>Ke(e.ellipsisIcon)}),default:()=>ee})))}const x=NE(e,0),I=e.closeOnClickOutside?[[Yr,()=>{f.value.length&&(U.value||(f.value.forEach(G=>t("close",G,$(G))),f.value=[]))}]]:[],H=tt(Ke("ul",{key:String(e.collapse),role:"menubar",ref:l,style:x.value,class:{[s.b()]:!0,[s.m(e.mode)]:!0,[s.m("collapse")]:e.collapse}},[...L,...P]),I);return e.collapseTransition&&e.mode==="vertical"?Ke(FU,()=>H):H}}});const WU=Ne({index:{type:Q([String,null]),default:null},route:{type:Q([String,Object])},disabled:Boolean}),KU={click:e=>nt(e.index)&&Array.isArray(e.indexPath)},Ep="ElMenuItem",UU=Y({name:Ep,components:{ElTooltip:Un},props:WU,emits:KU,setup(e,{emit:t}){const n=lt(),o=De("rootMenu"),r=Se("menu"),a=Se("menu-item");o||vn(Ep,"can not inject root menu");const{parentMenu:l,indexPath:s}=OE(n,Lt(e,"index")),u=De(`subMenu:${l.value.uid}`);u||vn(Ep,"can not inject sub menu");const c=k(()=>e.index===o.activeIndex),f=Et({index:e.index,indexPath:s,active:c}),d=()=>{e.disabled||(o.handleMenuItemClick({index:e.index,indexPath:s.value,route:e.route}),t("click",f))};return at(()=>{u.addSubMenu(f),o.addMenuItem(f)}),zt(()=>{u.removeSubMenu(f),o.removeMenuItem(f)}),{parentMenu:l,rootMenu:o,active:c,nsMenu:r,nsMenuItem:a,handleClick:d}}});function qU(e,t,n,o,r,a){const l=qe("el-tooltip");return T(),V("li",{class:N([e.nsMenuItem.b(),e.nsMenuItem.is("active",e.active),e.nsMenuItem.is("disabled",e.disabled)]),role:"menuitem",tabindex:"-1",onClick:t[0]||(t[0]=(...s)=>e.handleClick&&e.handleClick(...s))},[e.parentMenu.type.name==="ElMenu"&&e.rootMenu.props.collapse&&e.$slots.title?(T(),re(l,{key:0,effect:e.rootMenu.props.popperEffect,placement:"right","fallback-placements":["left"],persistent:""},{content:X(()=>[ie(e.$slots,"title")]),default:X(()=>[F("div",{class:N(e.nsMenu.be("tooltip","trigger"))},[ie(e.$slots,"default")],2)]),_:3},8,["effect"])):(T(),V(Ve,{key:1},[ie(e.$slots,"default"),ie(e.$slots,"title")],64))],2)}var IE=Ie(UU,[["render",qU],["__file","menu-item.vue"]]);const YU={title:String},GU="ElMenuItemGroup",XU=Y({name:GU,props:YU,setup(){return{ns:Se("menu-item-group")}}});function JU(e,t,n,o,r,a){return T(),V("li",{class:N(e.ns.b())},[F("div",{class:N(e.ns.e("title"))},[e.$slots.title?ie(e.$slots,"title",{key:1}):(T(),V(Ve,{key:0},[Ge(le(e.title),1)],64))],2),F("ul",null,[ie(e.$slots,"default")])],2)}var ME=Ie(XU,[["render",JU],["__file","menu-item-group.vue"]]);const ZU=ut(jU,{MenuItem:IE,MenuItemGroup:ME,SubMenu:yg}),QU=tn(IE),e7=tn(ME),t7=tn(yg),n7=Ne({icon:{type:Dt,default:()=>o4},title:String,content:{type:String,default:""}}),o7={back:()=>!0},r7=["aria-label"],a7=Y({name:"ElPageHeader"}),l7=Y({...a7,props:n7,emits:o7,setup(e,{emit:t}){const n=Sn(),{t:o}=$t(),r=Se("page-header"),a=k(()=>[r.b(),{[r.m("has-breadcrumb")]:!!n.breadcrumb,[r.m("has-extra")]:!!n.extra,[r.is("contentful")]:!!n.default}]);function l(){t("back")}return(s,u)=>(T(),V("div",{class:N(i(a))},[s.$slots.breadcrumb?(T(),V("div",{key:0,class:N(i(r).e("breadcrumb"))},[ie(s.$slots,"breadcrumb")],2)):te("v-if",!0),F("div",{class:N(i(r).e("header"))},[F("div",{class:N(i(r).e("left"))},[F("div",{class:N(i(r).e("back")),role:"button",tabindex:"0",onClick:l},[s.icon||s.$slots.icon?(T(),V("div",{key:0,"aria-label":s.title||i(o)("el.pageHeader.title"),class:N(i(r).e("icon"))},[ie(s.$slots,"icon",{},()=>[s.icon?(T(),re(i(ze),{key:0},{default:X(()=>[(T(),re(pt(s.icon)))]),_:1})):te("v-if",!0)])],10,r7)):te("v-if",!0),F("div",{class:N(i(r).e("title"))},[ie(s.$slots,"title",{},()=>[Ge(le(s.title||i(o)("el.pageHeader.title")),1)])],2)],2),K(i(vE),{direction:"vertical"}),F("div",{class:N(i(r).e("content"))},[ie(s.$slots,"content",{},()=>[Ge(le(s.content),1)])],2)],2),s.$slots.extra?(T(),V("div",{key:0,class:N(i(r).e("extra"))},[ie(s.$slots,"extra")],2)):te("v-if",!0)],2),s.$slots.default?(T(),V("div",{key:1,class:N(i(r).e("main"))},[ie(s.$slots,"default")],2)):te("v-if",!0)],2))}});var s7=Ie(l7,[["__file","page-header.vue"]]);const i7=ut(s7),AE=Symbol("elPaginationKey"),u7=Ne({disabled:Boolean,currentPage:{type:Number,default:1},prevText:{type:String},prevIcon:{type:Dt}}),c7={click:e=>e instanceof MouseEvent},d7=["disabled","aria-label","aria-disabled"],f7={key:0},p7=Y({name:"ElPaginationPrev"}),h7=Y({...p7,props:u7,emits:c7,setup(e){const t=e,{t:n}=$t(),o=k(()=>t.disabled||t.currentPage<=1);return(r,a)=>(T(),V("button",{type:"button",class:"btn-prev",disabled:i(o),"aria-label":r.prevText||i(n)("el.pagination.prev"),"aria-disabled":i(o),onClick:a[0]||(a[0]=l=>r.$emit("click",l))},[r.prevText?(T(),V("span",f7,le(r.prevText),1)):(T(),re(i(ze),{key:1},{default:X(()=>[(T(),re(pt(r.prevIcon)))]),_:1}))],8,d7))}});var m7=Ie(h7,[["__file","prev.vue"]]);const v7=Ne({disabled:Boolean,currentPage:{type:Number,default:1},pageCount:{type:Number,default:50},nextText:{type:String},nextIcon:{type:Dt}}),g7=["disabled","aria-label","aria-disabled"],b7={key:0},y7=Y({name:"ElPaginationNext"}),w7=Y({...y7,props:v7,emits:["click"],setup(e){const t=e,{t:n}=$t(),o=k(()=>t.disabled||t.currentPage===t.pageCount||t.pageCount===0);return(r,a)=>(T(),V("button",{type:"button",class:"btn-next",disabled:i(o),"aria-label":r.nextText||i(n)("el.pagination.next"),"aria-disabled":i(o),onClick:a[0]||(a[0]=l=>r.$emit("click",l))},[r.nextText?(T(),V("span",b7,le(r.nextText),1)):(T(),re(i(ze),{key:1},{default:X(()=>[(T(),re(pt(r.nextIcon)))]),_:1}))],8,g7))}});var _7=Ie(w7,[["__file","next.vue"]]);const PE=Symbol("ElSelectGroup"),ni=Symbol("ElSelect");function C7(e,t){const n=De(ni),o=De(PE,{disabled:!1}),r=k(()=>n.props.multiple?f(n.props.modelValue,e.value):f([n.props.modelValue],e.value)),a=k(()=>{if(n.props.multiple){const m=n.props.modelValue||[];return!r.value&&m.length>=n.props.multipleLimit&&n.props.multipleLimit>0}else return!1}),l=k(()=>e.label||(dt(e.value)?"":e.value)),s=k(()=>e.value||e.label||""),u=k(()=>e.disabled||t.groupDisabled||a.value),c=lt(),f=(m=[],v)=>{if(dt(e.value)){const h=n.props.valueKey;return m&&m.some(C=>Mt(un(C,h))===un(v,h))}else return m&&m.includes(v)},d=()=>{!e.disabled&&!o.disabled&&(n.states.hoveringIndex=n.optionsArray.indexOf(c.proxy))},p=m=>{const v=new RegExp($v(m),"i");t.visible=v.test(l.value)||e.created};return ve(()=>l.value,()=>{!e.created&&!n.props.remote&&n.setSelected()}),ve(()=>e.value,(m,v)=>{const{remote:h,valueKey:C}=n.props;if(Wn(m,v)||(n.onOptionDestroy(v,c.proxy),n.onOptionCreate(c.proxy)),!e.created&&!h){if(C&&dt(m)&&dt(v)&&m[C]===v[C])return;n.setSelected()}}),ve(()=>o.disabled,()=>{t.groupDisabled=o.disabled},{immediate:!0}),{select:n,currentLabel:l,currentValue:s,itemSelected:r,isDisabled:u,hoverItem:d,updateOption:p}}const S7=Y({name:"ElOption",componentName:"ElOption",props:{value:{required:!0,type:[String,Number,Boolean,Object]},label:[String,Number],created:Boolean,disabled:Boolean},setup(e){const t=Se("select"),n=xn(),o=k(()=>[t.be("dropdown","item"),t.is("disabled",i(s)),t.is("selected",i(l)),t.is("hovering",i(p))]),r=Et({index:-1,groupDisabled:!1,visible:!0,hover:!1}),{currentLabel:a,itemSelected:l,isDisabled:s,select:u,hoverItem:c,updateOption:f}=C7(e,r),{visible:d,hover:p}=Cn(r),m=lt().proxy;u.onOptionCreate(m),zt(()=>{const h=m.value,{selected:C}=u.states,y=(u.props.multiple?C:[C]).some(_=>_.value===m.value);We(()=>{u.states.cachedOptions.get(h)===m&&!y&&u.states.cachedOptions.delete(h)}),u.onOptionDestroy(h,m)});function v(){e.disabled!==!0&&r.groupDisabled!==!0&&u.handleOptionSelect(m)}return{ns:t,id:n,containerKls:o,currentLabel:a,itemSelected:l,isDisabled:s,select:u,hoverItem:c,updateOption:f,visible:d,hover:p,selectOptionClick:v,states:r}}}),k7=["id","aria-disabled","aria-selected"];function E7(e,t,n,o,r,a){return tt((T(),V("li",{id:e.id,class:N(e.containerKls),role:"option","aria-disabled":e.isDisabled||void 0,"aria-selected":e.itemSelected,onMouseenter:t[0]||(t[0]=(...l)=>e.hoverItem&&e.hoverItem(...l)),onClick:t[1]||(t[1]=Qe((...l)=>e.selectOptionClick&&e.selectOptionClick(...l),["stop"]))},[ie(e.$slots,"default",{},()=>[F("span",null,le(e.currentLabel),1)])],42,k7)),[[kt,e.visible]])}var wg=Ie(S7,[["render",E7],["__file","option.vue"]]);const T7=Y({name:"ElSelectDropdown",componentName:"ElSelectDropdown",setup(){const e=De(ni),t=Se("select"),n=k(()=>e.props.popperClass),o=k(()=>e.props.multiple),r=k(()=>e.props.fitInputWidth),a=R("");function l(){var s;a.value=`${(s=e.selectRef)==null?void 0:s.offsetWidth}px`}return at(()=>{l(),Qt(e.selectRef,l)}),{ns:t,minWidth:a,popperClass:n,isMultiple:o,isFitInputWidth:r}}});function $7(e,t,n,o,r,a){return T(),V("div",{class:N([e.ns.b("dropdown"),e.ns.is("multiple",e.isMultiple),e.popperClass]),style:je({[e.isFitInputWidth?"width":"minWidth"]:e.minWidth})},[e.$slots.header?(T(),V("div",{key:0,class:N(e.ns.be("dropdown","header"))},[ie(e.$slots,"header")],2)):te("v-if",!0),ie(e.$slots,"default"),e.$slots.footer?(T(),V("div",{key:1,class:N(e.ns.be("dropdown","footer"))},[ie(e.$slots,"footer")],2)):te("v-if",!0)],6)}var O7=Ie(T7,[["render",$7],["__file","select-dropdown.vue"]]);function RE(e){const t=R(!1);return{handleCompositionStart:()=>{t.value=!0},handleCompositionUpdate:a=>{const l=a.target.value,s=l[l.length-1]||"";t.value=!Lv(s)},handleCompositionEnd:a=>{t.value&&(t.value=!1,Xe(e)&&e(a))}}}const N7=11,I7=(e,t)=>{const{t:n}=$t(),o=xn(),r=Se("select"),a=Se("input"),l=Et({inputValue:"",options:new Map,cachedOptions:new Map,disabledOptions:new Map,optionValues:[],selected:e.multiple?[]:{},selectionWidth:0,calculatorWidth:0,collapseItemWidth:0,selectedLabel:"",hoveringIndex:-1,previousQuery:null,inputHovering:!1,menuVisibleOnFocus:!1,isBeforeHide:!1}),s=R(null),u=R(null),c=R(null),f=R(null),d=R(null),p=R(null),m=R(null),v=R(null),h=R(null),C=R(null),g=R(null),y=R(null),{wrapperRef:_,isFocused:b,handleFocus:w,handleBlur:S}=yf(d,{afterFocus(){e.automaticDropdown&&!E.value&&(E.value=!0,l.menuVisibleOnFocus=!0)},beforeBlur(Le){var ot,Gt;return((ot=c.value)==null?void 0:ot.isFocusInsideContent(Le))||((Gt=f.value)==null?void 0:Gt.isFocusInsideContent(Le))},afterBlur(){E.value=!1,l.menuVisibleOnFocus=!1}}),E=R(!1),$=R(),{form:O,formItem:A}=qn(),{inputId:M}=cr(e,{formItemContext:A}),{valueOnClear:D,isEmptyValue:U}=wf(e),j=k(()=>e.disabled||(O==null?void 0:O.disabled)),W=k(()=>e.multiple?Pe(e.modelValue)&&e.modelValue.length>0:!U(e.modelValue)),L=k(()=>e.clearable&&!j.value&&l.inputHovering&&W.value),P=k(()=>e.remote&&e.filterable&&!e.remoteShowSuffix?"":e.suffixIcon),x=k(()=>r.is("reverse",P.value&&E.value)),I=k(()=>(A==null?void 0:A.validateState)||""),H=k(()=>Rv[I.value]),G=k(()=>e.remote?300:0),J=k(()=>e.loading?e.loadingText||n("el.select.loading"):e.remote&&!l.inputValue&&l.options.size===0?!1:e.filterable&&l.inputValue&&l.options.size>0&&ee.value===0?e.noMatchText||n("el.select.noMatch"):l.options.size===0?e.noDataText||n("el.select.noData"):null),ee=k(()=>fe.value.filter(Le=>Le.visible).length),fe=k(()=>{const Le=Array.from(l.options.values()),ot=[];return l.optionValues.forEach(Gt=>{const ln=Le.findIndex(Wo=>Wo.value===Gt);ln>-1&&ot.push(Le[ln])}),ot.length>=Le.length?ot:Le}),Te=k(()=>Array.from(l.cachedOptions.values())),oe=k(()=>{const Le=fe.value.filter(ot=>!ot.created).some(ot=>ot.currentLabel===l.inputValue);return e.filterable&&e.allowCreate&&l.inputValue!==""&&!Le}),ke=()=>{e.filterable&&Xe(e.filterMethod)||e.filterable&&e.remote&&Xe(e.remoteMethod)||fe.value.forEach(Le=>{var ot;(ot=Le.updateOption)==null||ot.call(Le,l.inputValue)})},ae=hn(),Oe=k(()=>["small"].includes(ae.value)?"small":"default"),we=k({get(){return E.value&&J.value!==!1},set(Le){E.value=Le}}),ge=k(()=>Pe(e.modelValue)?e.modelValue.length===0&&!l.inputValue:e.filterable?!l.inputValue:!0),q=k(()=>{var Le;const ot=(Le=e.placeholder)!=null?Le:n("el.select.placeholder");return e.multiple||!W.value?ot:l.selectedLabel}),B=k(()=>uh?null:"mouseenter");ve(()=>e.modelValue,(Le,ot)=>{e.multiple&&e.filterable&&!e.reserveKeyword&&(l.inputValue="",z("")),ue(),!Wn(Le,ot)&&e.validateEvent&&(A==null||A.validate("change").catch(Gt=>void 0))},{flush:"post",deep:!0}),ve(()=>E.value,Le=>{Le?z(l.inputValue):(l.inputValue="",l.previousQuery=null,l.isBeforeHide=!0),t("visible-change",Le)}),ve(()=>l.options.entries(),()=>{var Le;if(!Ct)return;const ot=((Le=s.value)==null?void 0:Le.querySelectorAll("input"))||[];(!e.filterable&&!e.defaultFirstOption&&!pn(e.modelValue)||!Array.from(ot).includes(document.activeElement))&&ue(),e.defaultFirstOption&&(e.filterable||e.remote)&&ee.value&&Z()},{flush:"post"}),ve(()=>l.hoveringIndex,Le=>{Je(Le)&&Le>-1?$.value=fe.value[Le]||{}:$.value={},fe.value.forEach(ot=>{ot.hover=$.value===ot})}),Mn(()=>{l.isBeforeHide||ke()});const z=Le=>{l.previousQuery!==Le&&(l.previousQuery=Le,e.filterable&&Xe(e.filterMethod)?e.filterMethod(Le):e.filterable&&e.remote&&Xe(e.remoteMethod)&&e.remoteMethod(Le),e.defaultFirstOption&&(e.filterable||e.remote)&&ee.value?We(Z):We(me))},Z=()=>{const Le=fe.value.filter(ln=>ln.visible&&!ln.disabled&&!ln.states.groupDisabled),ot=Le.find(ln=>ln.created),Gt=Le[0];l.hoveringIndex=ye(fe.value,ot||Gt)},ue=()=>{if(e.multiple)l.selectedLabel="";else{const ot=se(e.modelValue);l.selectedLabel=ot.currentLabel,l.selected=ot;return}const Le=[];Pe(e.modelValue)&&e.modelValue.forEach(ot=>{Le.push(se(ot))}),l.selected=Le},se=Le=>{let ot;const Gt=Tc(Le).toLowerCase()==="object",ln=Tc(Le).toLowerCase()==="null",Wo=Tc(Le).toLowerCase()==="undefined";for(let Ko=l.cachedOptions.size-1;Ko>=0;Ko--){const So=Te.value[Ko];if(Gt?un(So.value,e.valueKey)===un(Le,e.valueKey):So.value===Le){ot={value:Le,currentLabel:So.currentLabel,get isDisabled(){return So.isDisabled}};break}}if(ot)return ot;const ra=Gt?Le.label:!ln&&!Wo?Le:"";return{value:Le,currentLabel:ra}},me=()=>{e.multiple?l.hoveringIndex=fe.value.findIndex(Le=>l.selected.some(ot=>oa(ot)===oa(Le))):l.hoveringIndex=fe.value.findIndex(Le=>oa(Le)===oa(l.selected))},_e=()=>{l.selectionWidth=u.value.getBoundingClientRect().width},$e=()=>{l.calculatorWidth=p.value.getBoundingClientRect().width},Ce=()=>{l.collapseItemWidth=g.value.getBoundingClientRect().width},ce=()=>{var Le,ot;(ot=(Le=c.value)==null?void 0:Le.updatePopper)==null||ot.call(Le)},de=()=>{var Le,ot;(ot=(Le=f.value)==null?void 0:Le.updatePopper)==null||ot.call(Le)},xe=()=>{l.inputValue.length>0&&!E.value&&(E.value=!0),z(l.inputValue)},he=Le=>{if(l.inputValue=Le.target.value,e.remote)He();else return xe()},He=co(()=>{xe()},G.value),et=Le=>{Wn(e.modelValue,Le)||t(Yt,Le)},rt=Le=>VC(Le,ot=>!l.disabledOptions.has(ot)),wt=Le=>{if(e.multiple&&Le.code!==Ue.delete&&Le.target.value.length<=0){const ot=e.modelValue.slice(),Gt=rt(ot);if(Gt<0)return;const ln=ot[Gt];ot.splice(Gt,1),t(ft,ot),et(ot),t("remove-tag",ln)}},Ze=(Le,ot)=>{const Gt=l.selected.indexOf(ot);if(Gt>-1&&!j.value){const ln=e.modelValue.slice();ln.splice(Gt,1),t(ft,ln),et(ln),t("remove-tag",ot.value)}Le.stopPropagation(),Jt()},st=Le=>{Le.stopPropagation();const ot=e.multiple?[]:D.value;if(e.multiple)for(const Gt of l.selected)Gt.isDisabled&&ot.push(Gt.value);t(ft,ot),et(ot),l.hoveringIndex=-1,E.value=!1,t("clear"),Jt()},Ee=Le=>{if(e.multiple){const ot=(e.modelValue||[]).slice(),Gt=ye(ot,Le.value);Gt>-1?ot.splice(Gt,1):(e.multipleLimit<=0||ot.length{ne(Le)})},ye=(Le=[],ot)=>{if(!dt(ot))return Le.indexOf(ot);const Gt=e.valueKey;let ln=-1;return Le.some((Wo,ra)=>Mt(un(Wo,Gt))===un(ot,Gt)?(ln=ra,!0):!1),ln},ne=Le=>{var ot,Gt,ln,Wo,ra;const Hl=Pe(Le)?Le[0]:Le;let Ko=null;if(Hl!=null&&Hl.value){const So=fe.value.filter(zl=>zl.value===Hl.value);So.length>0&&(Ko=So[0].$el)}if(c.value&&Ko){const So=(Wo=(ln=(Gt=(ot=c.value)==null?void 0:ot.popperRef)==null?void 0:Gt.contentRef)==null?void 0:ln.querySelector)==null?void 0:Wo.call(ln,`.${r.be("dropdown","wrap")}`);So&&KC(So,Ko)}(ra=y.value)==null||ra.handleScroll()},be=Le=>{l.options.set(Le.value,Le),l.cachedOptions.set(Le.value,Le),Le.disabled&&l.disabledOptions.set(Le.value,Le)},Fe=(Le,ot)=>{l.options.get(Le)===ot&&l.options.delete(Le)},{handleCompositionStart:vt,handleCompositionUpdate:pe,handleCompositionEnd:Ye}=RE(Le=>he(Le)),_t=k(()=>{var Le,ot;return(ot=(Le=c.value)==null?void 0:Le.popperRef)==null?void 0:ot.contentRef}),Kt=()=>{l.isBeforeHide=!1,We(()=>ne(l.selected))},Jt=()=>{var Le;(Le=d.value)==null||Le.focus()},Ht=()=>{Fn()},At=Le=>{st(Le)},Fn=Le=>{if(E.value=!1,b.value){const ot=new FocusEvent("focus",Le);We(()=>S(ot))}},Ku=()=>{l.inputValue.length>0?l.inputValue="":E.value=!1},Uu=()=>{j.value||(uh&&(l.inputHovering=!0),l.menuVisibleOnFocus?l.menuVisibleOnFocus=!1:E.value=!E.value)},ci=()=>{E.value?fe.value[l.hoveringIndex]&&Ee(fe.value[l.hoveringIndex]):Uu()},oa=Le=>dt(Le.value)?un(Le.value,e.valueKey):Le.value,qu=k(()=>fe.value.filter(Le=>Le.visible).every(Le=>Le.disabled)),Uf=k(()=>e.multiple?e.collapseTags?l.selected.slice(0,e.maxCollapseTags):l.selected:[]),Vl=k(()=>e.multiple?e.collapseTags?l.selected.slice(e.maxCollapseTags):[]:[]),Yu=Le=>{if(!E.value){E.value=!0;return}if(!(l.options.size===0||ee.value===0)&&!qu.value){Le==="next"?(l.hoveringIndex++,l.hoveringIndex===l.options.size&&(l.hoveringIndex=0)):Le==="prev"&&(l.hoveringIndex--,l.hoveringIndex<0&&(l.hoveringIndex=l.options.size-1));const ot=fe.value[l.hoveringIndex];(ot.disabled===!0||ot.states.groupDisabled===!0||!ot.visible)&&Yu(Le),We(()=>ne($.value))}},qf=()=>{if(!u.value)return 0;const Le=window.getComputedStyle(u.value);return Number.parseFloat(Le.gap||"6px")},Yf=k(()=>{const Le=qf();return{maxWidth:`${g.value&&e.maxCollapseTags===1?l.selectionWidth-l.collapseItemWidth-Le:l.selectionWidth}px`}}),Gf=k(()=>({maxWidth:`${l.selectionWidth}px`})),Xf=k(()=>({width:`${Math.max(l.calculatorWidth,N7)}px`}));return e.multiple&&!Pe(e.modelValue)&&t(ft,[]),!e.multiple&&Pe(e.modelValue)&&t(ft,""),Qt(u,_e),Qt(p,$e),Qt(h,ce),Qt(_,ce),Qt(C,de),Qt(g,Ce),at(()=>{ue()}),{inputId:M,contentId:o,nsSelect:r,nsInput:a,states:l,isFocused:b,expanded:E,optionsArray:fe,hoverOption:$,selectSize:ae,filteredOptionsCount:ee,resetCalculatorWidth:$e,updateTooltip:ce,updateTagTooltip:de,debouncedOnInputChange:He,onInput:he,deletePrevTag:wt,deleteTag:Ze,deleteSelected:st,handleOptionSelect:Ee,scrollToOption:ne,hasModelValue:W,shouldShowPlaceholder:ge,currentPlaceholder:q,mouseEnterEventName:B,showClose:L,iconComponent:P,iconReverse:x,validateState:I,validateIcon:H,showNewOption:oe,updateOptions:ke,collapseTagSize:Oe,setSelected:ue,selectDisabled:j,emptyText:J,handleCompositionStart:vt,handleCompositionUpdate:pe,handleCompositionEnd:Ye,onOptionCreate:be,onOptionDestroy:Fe,handleMenuEnter:Kt,handleFocus:w,focus:Jt,blur:Ht,handleBlur:S,handleClearClick:At,handleClickOutside:Fn,handleEsc:Ku,toggleMenu:Uu,selectOption:ci,getValueKey:oa,navigateOptions:Yu,dropdownMenuVisible:we,showTagList:Uf,collapseTagList:Vl,tagStyle:Yf,collapseTagStyle:Gf,inputStyle:Xf,popperRef:_t,inputRef:d,tooltipRef:c,tagTooltipRef:f,calculatorRef:p,prefixRef:m,suffixRef:v,selectRef:s,wrapperRef:_,selectionRef:u,scrollbarRef:y,menuRef:h,tagMenuRef:C,collapseItemRef:g}};var M7=Y({name:"ElOptions",setup(e,{slots:t}){const n=De(ni);let o=[];return()=>{var r,a;const l=(r=t.default)==null?void 0:r.call(t),s=[];function u(c){Pe(c)&&c.forEach(f=>{var d,p,m,v;const h=(d=(f==null?void 0:f.type)||{})==null?void 0:d.name;h==="ElOptionGroup"?u(!nt(f.children)&&!Pe(f.children)&&Xe((p=f.children)==null?void 0:p.default)?(m=f.children)==null?void 0:m.default():f.children):h==="ElOption"?s.push((v=f.props)==null?void 0:v.value):Pe(f.children)&&u(f.children)})}return l.length&&u((a=l[0])==null?void 0:a.children),Wn(s,o)||(o=s,n&&(n.states.optionValues=s)),l}}});const A7=Ne({name:String,id:String,modelValue:{type:[Array,String,Number,Boolean,Object],default:void 0},autocomplete:{type:String,default:"off"},automaticDropdown:Boolean,size:gn,effect:{type:Q(String),default:"light"},disabled:Boolean,clearable:Boolean,filterable:Boolean,allowCreate:Boolean,loading:Boolean,popperClass:{type:String,default:""},popperOptions:{type:Q(Object),default:()=>({})},remote:Boolean,loadingText:String,noMatchText:String,noDataText:String,remoteMethod:Function,filterMethod:Function,multiple:Boolean,multipleLimit:{type:Number,default:0},placeholder:{type:String},defaultFirstOption:Boolean,reserveKeyword:{type:Boolean,default:!0},valueKey:{type:String,default:"value"},collapseTags:Boolean,collapseTagsTooltip:Boolean,maxCollapseTags:{type:Number,default:1},teleported:kn.teleported,persistent:{type:Boolean,default:!0},clearIcon:{type:Dt,default:Fa},fitInputWidth:Boolean,suffixIcon:{type:Dt,default:Nr},tagType:{...$l.type,default:"info"},tagEffect:{...$l.effect,default:"light"},validateEvent:{type:Boolean,default:!0},remoteShowSuffix:Boolean,placement:{type:Q(String),values:Dl,default:"bottom-start"},fallbackPlacements:{type:Q(Array),default:["bottom-start","top-start","right","left"]},...ei,...An(["ariaLabel"])}),o1="ElSelect",P7=Y({name:o1,componentName:o1,components:{ElInput:zn,ElSelectMenu:O7,ElOption:wg,ElOptions:M7,ElTag:su,ElScrollbar:ea,ElTooltip:Un,ElIcon:ze},directives:{ClickOutside:Yr},props:A7,emits:[ft,Yt,"remove-tag","clear","visible-change","focus","blur"],setup(e,{emit:t}){const n=I7(e,t);return yt(ni,Et({props:e,states:n.states,optionsArray:n.optionsArray,handleOptionSelect:n.handleOptionSelect,onOptionCreate:n.onOptionCreate,onOptionDestroy:n.onOptionDestroy,selectRef:n.selectRef,setSelected:n.setSelected})),{...n}}}),R7=["id","name","disabled","autocomplete","readonly","aria-activedescendant","aria-controls","aria-expanded","aria-label"],L7=["textContent"],x7={key:1};function D7(e,t,n,o,r,a){const l=qe("el-tag"),s=qe("el-tooltip"),u=qe("el-icon"),c=qe("el-option"),f=qe("el-options"),d=qe("el-scrollbar"),p=qe("el-select-menu"),m=qs("click-outside");return tt((T(),V("div",{ref:"selectRef",class:N([e.nsSelect.b(),e.nsSelect.m(e.selectSize)]),[ls(e.mouseEnterEventName)]:t[16]||(t[16]=v=>e.states.inputHovering=!0),onMouseleave:t[17]||(t[17]=v=>e.states.inputHovering=!1),onClick:t[18]||(t[18]=Qe((...v)=>e.toggleMenu&&e.toggleMenu(...v),["prevent","stop"]))},[K(s,{ref:"tooltipRef",visible:e.dropdownMenuVisible,placement:e.placement,teleported:e.teleported,"popper-class":[e.nsSelect.e("popper"),e.popperClass],"popper-options":e.popperOptions,"fallback-placements":e.fallbackPlacements,effect:e.effect,pure:"",trigger:"click",transition:`${e.nsSelect.namespace.value}-zoom-in-top`,"stop-popper-mouse-event":!1,"gpu-acceleration":!1,persistent:e.persistent,onBeforeShow:e.handleMenuEnter,onHide:t[15]||(t[15]=v=>e.states.isBeforeHide=!1)},{default:X(()=>{var v;return[F("div",{ref:"wrapperRef",class:N([e.nsSelect.e("wrapper"),e.nsSelect.is("focused",e.isFocused),e.nsSelect.is("hovering",e.states.inputHovering),e.nsSelect.is("filterable",e.filterable),e.nsSelect.is("disabled",e.selectDisabled)])},[e.$slots.prefix?(T(),V("div",{key:0,ref:"prefixRef",class:N(e.nsSelect.e("prefix"))},[ie(e.$slots,"prefix")],2)):te("v-if",!0),F("div",{ref:"selectionRef",class:N([e.nsSelect.e("selection"),e.nsSelect.is("near",e.multiple&&!e.$slots.prefix&&!!e.states.selected.length)])},[e.multiple?ie(e.$slots,"tag",{key:0},()=>[(T(!0),V(Ve,null,bt(e.showTagList,h=>(T(),V("div",{key:e.getValueKey(h),class:N(e.nsSelect.e("selected-item"))},[K(l,{closable:!e.selectDisabled&&!h.isDisabled,size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",style:je(e.tagStyle),onClose:C=>e.deleteTag(C,h)},{default:X(()=>[F("span",{class:N(e.nsSelect.e("tags-text"))},[ie(e.$slots,"label",{label:h.currentLabel,value:h.value},()=>[Ge(le(h.currentLabel),1)])],2)]),_:2},1032,["closable","size","type","effect","style","onClose"])],2))),128)),e.collapseTags&&e.states.selected.length>e.maxCollapseTags?(T(),re(s,{key:0,ref:"tagTooltipRef",disabled:e.dropdownMenuVisible||!e.collapseTagsTooltip,"fallback-placements":["bottom","top","right","left"],effect:e.effect,placement:"bottom",teleported:e.teleported},{default:X(()=>[F("div",{ref:"collapseItemRef",class:N(e.nsSelect.e("selected-item"))},[K(l,{closable:!1,size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",style:je(e.collapseTagStyle)},{default:X(()=>[F("span",{class:N(e.nsSelect.e("tags-text"))}," + "+le(e.states.selected.length-e.maxCollapseTags),3)]),_:1},8,["size","type","effect","style"])],2)]),content:X(()=>[F("div",{ref:"tagMenuRef",class:N(e.nsSelect.e("selection"))},[(T(!0),V(Ve,null,bt(e.collapseTagList,h=>(T(),V("div",{key:e.getValueKey(h),class:N(e.nsSelect.e("selected-item"))},[K(l,{class:"in-tooltip",closable:!e.selectDisabled&&!h.isDisabled,size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",onClose:C=>e.deleteTag(C,h)},{default:X(()=>[F("span",{class:N(e.nsSelect.e("tags-text"))},[ie(e.$slots,"label",{label:h.currentLabel,value:h.value},()=>[Ge(le(h.currentLabel),1)])],2)]),_:2},1032,["closable","size","type","effect","onClose"])],2))),128))],2)]),_:3},8,["disabled","effect","teleported"])):te("v-if",!0)]):te("v-if",!0),e.selectDisabled?te("v-if",!0):(T(),V("div",{key:1,class:N([e.nsSelect.e("selected-item"),e.nsSelect.e("input-wrapper"),e.nsSelect.is("hidden",!e.filterable)])},[tt(F("input",{id:e.inputId,ref:"inputRef","onUpdate:modelValue":t[0]||(t[0]=h=>e.states.inputValue=h),type:"text",name:e.name,class:N([e.nsSelect.e("input"),e.nsSelect.is(e.selectSize)]),disabled:e.selectDisabled,autocomplete:e.autocomplete,style:je(e.inputStyle),role:"combobox",readonly:!e.filterable,spellcheck:"false","aria-activedescendant":((v=e.hoverOption)==null?void 0:v.id)||"","aria-controls":e.contentId,"aria-expanded":e.dropdownMenuVisible,"aria-label":e.ariaLabel,"aria-autocomplete":"none","aria-haspopup":"listbox",onFocus:t[1]||(t[1]=(...h)=>e.handleFocus&&e.handleFocus(...h)),onBlur:t[2]||(t[2]=(...h)=>e.handleBlur&&e.handleBlur(...h)),onKeydown:[t[3]||(t[3]=Pt(Qe(h=>e.navigateOptions("next"),["stop","prevent"]),["down"])),t[4]||(t[4]=Pt(Qe(h=>e.navigateOptions("prev"),["stop","prevent"]),["up"])),t[5]||(t[5]=Pt(Qe((...h)=>e.handleEsc&&e.handleEsc(...h),["stop","prevent"]),["esc"])),t[6]||(t[6]=Pt(Qe((...h)=>e.selectOption&&e.selectOption(...h),["stop","prevent"]),["enter"])),t[7]||(t[7]=Pt(Qe((...h)=>e.deletePrevTag&&e.deletePrevTag(...h),["stop"]),["delete"]))],onCompositionstart:t[8]||(t[8]=(...h)=>e.handleCompositionStart&&e.handleCompositionStart(...h)),onCompositionupdate:t[9]||(t[9]=(...h)=>e.handleCompositionUpdate&&e.handleCompositionUpdate(...h)),onCompositionend:t[10]||(t[10]=(...h)=>e.handleCompositionEnd&&e.handleCompositionEnd(...h)),onInput:t[11]||(t[11]=(...h)=>e.onInput&&e.onInput(...h)),onClick:t[12]||(t[12]=Qe((...h)=>e.toggleMenu&&e.toggleMenu(...h),["stop"]))},null,46,R7),[[yl,e.states.inputValue]]),e.filterable?(T(),V("span",{key:0,ref:"calculatorRef","aria-hidden":"true",class:N(e.nsSelect.e("input-calculator")),textContent:le(e.states.inputValue)},null,10,L7)):te("v-if",!0)],2)),e.shouldShowPlaceholder?(T(),V("div",{key:2,class:N([e.nsSelect.e("selected-item"),e.nsSelect.e("placeholder"),e.nsSelect.is("transparent",!e.hasModelValue||e.expanded&&!e.states.inputValue)])},[e.hasModelValue?ie(e.$slots,"label",{key:0,label:e.currentPlaceholder,value:e.modelValue},()=>[F("span",null,le(e.currentPlaceholder),1)]):(T(),V("span",x7,le(e.currentPlaceholder),1))],2)):te("v-if",!0)],2),F("div",{ref:"suffixRef",class:N(e.nsSelect.e("suffix"))},[e.iconComponent&&!e.showClose?(T(),re(u,{key:0,class:N([e.nsSelect.e("caret"),e.nsSelect.e("icon"),e.iconReverse])},{default:X(()=>[(T(),re(pt(e.iconComponent)))]),_:1},8,["class"])):te("v-if",!0),e.showClose&&e.clearIcon?(T(),re(u,{key:1,class:N([e.nsSelect.e("caret"),e.nsSelect.e("icon")]),onClick:e.handleClearClick},{default:X(()=>[(T(),re(pt(e.clearIcon)))]),_:1},8,["class","onClick"])):te("v-if",!0),e.validateState&&e.validateIcon?(T(),re(u,{key:2,class:N([e.nsInput.e("icon"),e.nsInput.e("validateIcon")])},{default:X(()=>[(T(),re(pt(e.validateIcon)))]),_:1},8,["class"])):te("v-if",!0)],2)],2)]}),content:X(()=>[K(p,{ref:"menuRef"},{default:X(()=>[e.$slots.header?(T(),V("div",{key:0,class:N(e.nsSelect.be("dropdown","header")),onClick:t[13]||(t[13]=Qe(()=>{},["stop"]))},[ie(e.$slots,"header")],2)):te("v-if",!0),tt(K(d,{id:e.contentId,ref:"scrollbarRef",tag:"ul","wrap-class":e.nsSelect.be("dropdown","wrap"),"view-class":e.nsSelect.be("dropdown","list"),class:N([e.nsSelect.is("empty",e.filteredOptionsCount===0)]),role:"listbox","aria-label":e.ariaLabel,"aria-orientation":"vertical"},{default:X(()=>[e.showNewOption?(T(),re(c,{key:0,value:e.states.inputValue,created:!0},null,8,["value"])):te("v-if",!0),K(f,null,{default:X(()=>[ie(e.$slots,"default")]),_:3})]),_:3},8,["id","wrap-class","view-class","class","aria-label"]),[[kt,e.states.options.size>0&&!e.loading]]),e.$slots.loading&&e.loading?(T(),V("div",{key:1,class:N(e.nsSelect.be("dropdown","loading"))},[ie(e.$slots,"loading")],2)):e.loading||e.filteredOptionsCount===0?(T(),V("div",{key:2,class:N(e.nsSelect.be("dropdown","empty"))},[ie(e.$slots,"empty",{},()=>[F("span",null,le(e.emptyText),1)])],2)):te("v-if",!0),e.$slots.footer?(T(),V("div",{key:3,class:N(e.nsSelect.be("dropdown","footer")),onClick:t[14]||(t[14]=Qe(()=>{},["stop"]))},[ie(e.$slots,"footer")],2)):te("v-if",!0)]),_:3},512)]),_:3},8,["visible","placement","teleported","popper-class","popper-options","fallback-placements","effect","transition","persistent","onBeforeShow"])],16)),[[m,e.handleClickOutside,e.popperRef]])}var F7=Ie(P7,[["render",D7],["__file","select.vue"]]);const B7=Y({name:"ElOptionGroup",componentName:"ElOptionGroup",props:{label:String,disabled:Boolean},setup(e){const t=Se("select"),n=R(null),o=lt(),r=R([]);yt(PE,Et({...Cn(e)}));const a=k(()=>r.value.some(c=>c.visible===!0)),l=c=>{var f,d;return((f=c.type)==null?void 0:f.name)==="ElOption"&&!!((d=c.component)!=null&&d.proxy)},s=c=>{const f=Ia(c),d=[];return f.forEach(p=>{var m,v;l(p)?d.push(p.component.proxy):(m=p.children)!=null&&m.length?d.push(...s(p.children)):(v=p.component)!=null&&v.subTree&&d.push(...s(p.component.subTree))}),d},u=()=>{r.value=s(o.subTree)};return at(()=>{u()}),eC(n,u,{attributes:!0,subtree:!0,childList:!0}),{groupRef:n,visible:a,ns:t}}});function V7(e,t,n,o,r,a){return tt((T(),V("ul",{ref:"groupRef",class:N(e.ns.be("group","wrap"))},[F("li",{class:N(e.ns.be("group","title"))},le(e.label),3),F("li",null,[F("ul",{class:N(e.ns.b("group"))},[ie(e.$slots,"default")],2)])],2)),[[kt,e.visible]])}var LE=Ie(B7,[["render",V7],["__file","option-group.vue"]]);const Ol=ut(F7,{Option:wg,OptionGroup:LE}),Cd=tn(wg),H7=tn(LE),_g=()=>De(AE,{}),z7=Ne({pageSize:{type:Number,required:!0},pageSizes:{type:Q(Array),default:()=>en([10,20,30,40,50,100])},popperClass:{type:String},disabled:Boolean,teleported:Boolean,size:{type:String,values:Ir}}),j7=Y({name:"ElPaginationSizes"}),W7=Y({...j7,props:z7,emits:["page-size-change"],setup(e,{emit:t}){const n=e,{t:o}=$t(),r=Se("pagination"),a=_g(),l=R(n.pageSize);ve(()=>n.pageSizes,(c,f)=>{if(!Wn(c,f)&&Array.isArray(c)){const d=c.includes(n.pageSize)?n.pageSize:n.pageSizes[0];t("page-size-change",d)}}),ve(()=>n.pageSize,c=>{l.value=c});const s=k(()=>n.pageSizes);function u(c){var f;c!==l.value&&(l.value=c,(f=a.handleSizeChange)==null||f.call(a,Number(c)))}return(c,f)=>(T(),V("span",{class:N(i(r).e("sizes"))},[K(i(Ol),{"model-value":l.value,disabled:c.disabled,"popper-class":c.popperClass,size:c.size,teleported:c.teleported,"validate-event":!1,onChange:u},{default:X(()=>[(T(!0),V(Ve,null,bt(i(s),d=>(T(),re(i(Cd),{key:d,value:d,label:d+i(o)("el.pagination.pagesize")},null,8,["value","label"]))),128))]),_:1},8,["model-value","disabled","popper-class","size","teleported"])],2))}});var K7=Ie(W7,[["__file","sizes.vue"]]);const U7=Ne({size:{type:String,values:Ir}}),q7=["disabled"],Y7=Y({name:"ElPaginationJumper"}),G7=Y({...Y7,props:U7,setup(e){const{t}=$t(),n=Se("pagination"),{pageCount:o,disabled:r,currentPage:a,changeEvent:l}=_g(),s=R(),u=k(()=>{var d;return(d=s.value)!=null?d:a==null?void 0:a.value});function c(d){s.value=d?+d:""}function f(d){d=Math.trunc(+d),l==null||l(d),s.value=void 0}return(d,p)=>(T(),V("span",{class:N(i(n).e("jump")),disabled:i(r)},[F("span",{class:N([i(n).e("goto")])},le(i(t)("el.pagination.goto")),3),K(i(zn),{size:d.size,class:N([i(n).e("editor"),i(n).is("in-pagination")]),min:1,max:i(o),disabled:i(r),"model-value":i(u),"validate-event":!1,"aria-label":i(t)("el.pagination.page"),type:"number","onUpdate:modelValue":c,onChange:f},null,8,["size","class","max","disabled","model-value","aria-label"]),F("span",{class:N([i(n).e("classifier")])},le(i(t)("el.pagination.pageClassifier")),3)],10,q7))}});var X7=Ie(G7,[["__file","jumper.vue"]]);const J7=Ne({total:{type:Number,default:1e3}}),Z7=["disabled"],Q7=Y({name:"ElPaginationTotal"}),eq=Y({...Q7,props:J7,setup(e){const{t}=$t(),n=Se("pagination"),{disabled:o}=_g();return(r,a)=>(T(),V("span",{class:N(i(n).e("total")),disabled:i(o)},le(i(t)("el.pagination.total",{total:r.total})),11,Z7))}});var tq=Ie(eq,[["__file","total.vue"]]);const nq=Ne({currentPage:{type:Number,default:1},pageCount:{type:Number,required:!0},pagerCount:{type:Number,default:7},disabled:Boolean}),oq=["onKeyup"],rq=["aria-current","aria-label","tabindex"],aq=["tabindex","aria-label"],lq=["aria-current","aria-label","tabindex"],sq=["tabindex","aria-label"],iq=["aria-current","aria-label","tabindex"],uq=Y({name:"ElPaginationPager"}),cq=Y({...uq,props:nq,emits:["change"],setup(e,{emit:t}){const n=e,o=Se("pager"),r=Se("icon"),{t:a}=$t(),l=R(!1),s=R(!1),u=R(!1),c=R(!1),f=R(!1),d=R(!1),p=k(()=>{const b=n.pagerCount,w=(b-1)/2,S=Number(n.currentPage),E=Number(n.pageCount);let $=!1,O=!1;E>b&&(S>b-w&&($=!0),S["more","btn-quickprev",r.b(),o.is("disabled",n.disabled)]),v=k(()=>["more","btn-quicknext",r.b(),o.is("disabled",n.disabled)]),h=k(()=>n.disabled?-1:0);Mn(()=>{const b=(n.pagerCount-1)/2;l.value=!1,s.value=!1,n.pageCount>n.pagerCount&&(n.currentPage>n.pagerCount-b&&(l.value=!0),n.currentPageE&&(S=E)),S!==$&&t("change",S)}return(b,w)=>(T(),V("ul",{class:N(i(o).b()),onClick:_,onKeyup:Pt(y,["enter"])},[b.pageCount>0?(T(),V("li",{key:0,class:N([[i(o).is("active",b.currentPage===1),i(o).is("disabled",b.disabled)],"number"]),"aria-current":b.currentPage===1,"aria-label":i(a)("el.pagination.currentPage",{pager:1}),tabindex:i(h)}," 1 ",10,rq)):te("v-if",!0),l.value?(T(),V("li",{key:1,class:N(i(m)),tabindex:i(h),"aria-label":i(a)("el.pagination.prevPages",{pager:b.pagerCount-2}),onMouseenter:w[0]||(w[0]=S=>C(!0)),onMouseleave:w[1]||(w[1]=S=>u.value=!1),onFocus:w[2]||(w[2]=S=>g(!0)),onBlur:w[3]||(w[3]=S=>f.value=!1)},[(u.value||f.value)&&!b.disabled?(T(),re(i(ks),{key:0})):(T(),re(i(Ky),{key:1}))],42,aq)):te("v-if",!0),(T(!0),V(Ve,null,bt(i(p),S=>(T(),V("li",{key:S,class:N([[i(o).is("active",b.currentPage===S),i(o).is("disabled",b.disabled)],"number"]),"aria-current":b.currentPage===S,"aria-label":i(a)("el.pagination.currentPage",{pager:S}),tabindex:i(h)},le(S),11,lq))),128)),s.value?(T(),V("li",{key:2,class:N(i(v)),tabindex:i(h),"aria-label":i(a)("el.pagination.nextPages",{pager:b.pagerCount-2}),onMouseenter:w[4]||(w[4]=S=>C()),onMouseleave:w[5]||(w[5]=S=>c.value=!1),onFocus:w[6]||(w[6]=S=>g()),onBlur:w[7]||(w[7]=S=>d.value=!1)},[(c.value||d.value)&&!b.disabled?(T(),re(i(Es),{key:0})):(T(),re(i(Ky),{key:1}))],42,sq)):te("v-if",!0),b.pageCount>1?(T(),V("li",{key:3,class:N([[i(o).is("active",b.currentPage===b.pageCount),i(o).is("disabled",b.disabled)],"number"]),"aria-current":b.currentPage===b.pageCount,"aria-label":i(a)("el.pagination.currentPage",{pager:b.pageCount}),tabindex:i(h)},le(b.pageCount),11,iq)):te("v-if",!0)],42,oq))}});var dq=Ie(cq,[["__file","pager.vue"]]);const Yn=e=>typeof e!="number",fq=Ne({pageSize:Number,defaultPageSize:Number,total:Number,pageCount:Number,pagerCount:{type:Number,validator:e=>Je(e)&&Math.trunc(e)===e&&e>4&&e<22&&e%2===1,default:7},currentPage:Number,defaultCurrentPage:Number,layout:{type:String,default:["prev","pager","next","jumper","->","total"].join(", ")},pageSizes:{type:Q(Array),default:()=>en([10,20,30,40,50,100])},popperClass:{type:String,default:""},prevText:{type:String,default:""},prevIcon:{type:Dt,default:()=>Aa},nextText:{type:String,default:""},nextIcon:{type:Dt,default:()=>Jn},teleported:{type:Boolean,default:!0},small:Boolean,size:gn,background:Boolean,disabled:Boolean,hideOnSinglePage:Boolean}),pq={"update:current-page":e=>Je(e),"update:page-size":e=>Je(e),"size-change":e=>Je(e),change:(e,t)=>Je(e)&&Je(t),"current-change":e=>Je(e),"prev-click":e=>Je(e),"next-click":e=>Je(e)},r1="ElPagination";var hq=Y({name:r1,props:fq,emits:pq,setup(e,{emit:t,slots:n}){const{t:o}=$t(),r=Se("pagination"),a=lt().vnode.props||{},l=k(()=>{var b;return e.small?"small":(b=e.size)!=null?b:xS().value});wn({from:"small",replacement:"size",version:"3.0.0",scope:"el-pagination",ref:"https://element-plus.org/zh-CN/component/pagination.html"},k(()=>!!e.small));const s="onUpdate:currentPage"in a||"onUpdate:current-page"in a||"onCurrentChange"in a,u="onUpdate:pageSize"in a||"onUpdate:page-size"in a||"onSizeChange"in a,c=k(()=>{if(Yn(e.total)&&Yn(e.pageCount)||!Yn(e.currentPage)&&!s)return!1;if(e.layout.includes("sizes")){if(Yn(e.pageCount)){if(!Yn(e.total)&&!Yn(e.pageSize)&&!u)return!1}else if(!u)return!1}return!0}),f=R(Yn(e.defaultPageSize)?10:e.defaultPageSize),d=R(Yn(e.defaultCurrentPage)?1:e.defaultCurrentPage),p=k({get(){return Yn(e.pageSize)?f.value:e.pageSize},set(b){Yn(e.pageSize)&&(f.value=b),u&&(t("update:page-size",b),t("size-change",b))}}),m=k(()=>{let b=0;return Yn(e.pageCount)?Yn(e.total)||(b=Math.max(1,Math.ceil(e.total/p.value))):b=e.pageCount,b}),v=k({get(){return Yn(e.currentPage)?d.value:e.currentPage},set(b){let w=b;b<1?w=1:b>m.value&&(w=m.value),Yn(e.currentPage)&&(d.value=w),s&&(t("update:current-page",w),t("current-change",w))}});ve(m,b=>{v.value>b&&(v.value=b)}),ve([v,p],b=>{t("change",...b)},{flush:"post"});function h(b){v.value=b}function C(b){p.value=b;const w=m.value;v.value>w&&(v.value=w)}function g(){e.disabled||(v.value-=1,t("prev-click",v.value))}function y(){e.disabled||(v.value+=1,t("next-click",v.value))}function _(b,w){b&&(b.props||(b.props={}),b.props.class=[b.props.class,w].join(" "))}return yt(AE,{pageCount:m,disabled:k(()=>e.disabled),currentPage:v,changeEvent:h,handleSizeChange:C}),()=>{var b,w;if(!c.value)return o("el.pagination.deprecationWarning"),null;if(!e.layout||e.hideOnSinglePage&&m.value<=1)return null;const S=[],E=[],$=Ke("div",{class:r.e("rightwrapper")},E),O={prev:Ke(m7,{disabled:e.disabled,currentPage:v.value,prevText:e.prevText,prevIcon:e.prevIcon,onClick:g}),jumper:Ke(X7,{size:l.value}),pager:Ke(dq,{currentPage:v.value,pageCount:m.value,pagerCount:e.pagerCount,onChange:h,disabled:e.disabled}),next:Ke(_7,{disabled:e.disabled,currentPage:v.value,pageCount:m.value,nextText:e.nextText,nextIcon:e.nextIcon,onClick:y}),sizes:Ke(K7,{pageSize:p.value,pageSizes:e.pageSizes,popperClass:e.popperClass,disabled:e.disabled,teleported:e.teleported,size:l.value}),slot:(w=(b=n==null?void 0:n.default)==null?void 0:b.call(n))!=null?w:null,total:Ke(tq,{total:Yn(e.total)?0:e.total})},A=e.layout.split(",").map(D=>D.trim());let M=!1;return A.forEach(D=>{if(D==="->"){M=!0;return}M?E.push(O[D]):S.push(O[D])}),_(S[0],r.is("first")),_(S[S.length-1],r.is("last")),M&&E.length>0&&(_(E[0],r.is("first")),_(E[E.length-1],r.is("last")),S.push($)),Ke("div",{class:[r.b(),r.is("background",e.background),r.m(l.value)]},S)}}});const mq=ut(hq),vq=Ne({title:String,confirmButtonText:String,cancelButtonText:String,confirmButtonType:{type:String,values:Oh,default:"primary"},cancelButtonType:{type:String,values:Oh,default:"text"},icon:{type:Dt,default:()=>B4},iconColor:{type:String,default:"#f90"},hideIcon:{type:Boolean,default:!1},hideAfter:{type:Number,default:200},teleported:kn.teleported,persistent:kn.persistent,width:{type:[String,Number],default:150}}),gq={confirm:e=>e instanceof MouseEvent,cancel:e=>e instanceof MouseEvent},bq=Y({name:"ElPopconfirm"}),yq=Y({...bq,props:vq,emits:gq,setup(e,{emit:t}){const n=e,{t:o}=$t(),r=Se("popconfirm"),a=R(),l=()=>{var p,m;(m=(p=a.value)==null?void 0:p.onClose)==null||m.call(p)},s=k(()=>({width:rn(n.width)})),u=p=>{t("confirm",p),l()},c=p=>{t("cancel",p),l()},f=k(()=>n.confirmButtonText||o("el.popconfirm.confirmButtonText")),d=k(()=>n.cancelButtonText||o("el.popconfirm.cancelButtonText"));return(p,m)=>(T(),re(i(Un),mt({ref_key:"tooltipRef",ref:a,trigger:"click",effect:"light"},p.$attrs,{"popper-class":`${i(r).namespace.value}-popover`,"popper-style":i(s),teleported:p.teleported,"fallback-placements":["bottom","top","right","left"],"hide-after":p.hideAfter,persistent:p.persistent}),{content:X(()=>[F("div",{class:N(i(r).b())},[F("div",{class:N(i(r).e("main"))},[!p.hideIcon&&p.icon?(T(),re(i(ze),{key:0,class:N(i(r).e("icon")),style:je({color:p.iconColor})},{default:X(()=>[(T(),re(pt(p.icon)))]),_:1},8,["class","style"])):te("v-if",!0),Ge(" "+le(p.title),1)],2),F("div",{class:N(i(r).e("action"))},[K(i($n),{size:"small",type:p.cancelButtonType==="text"?"":p.cancelButtonType,text:p.cancelButtonType==="text",onClick:c},{default:X(()=>[Ge(le(i(d)),1)]),_:1},8,["type","text"]),K(i($n),{size:"small",type:p.confirmButtonType==="text"?"":p.confirmButtonType,text:p.confirmButtonType==="text",onClick:u},{default:X(()=>[Ge(le(i(f)),1)]),_:1},8,["type","text"])],2)],2)]),default:X(()=>[p.$slots.reference?ie(p.$slots,"reference",{key:0}):te("v-if",!0)]),_:3},16,["popper-class","popper-style","teleported","hide-after","persistent"]))}});var wq=Ie(yq,[["__file","popconfirm.vue"]]);const _q=ut(wq),Cq=Ne({trigger:lu.trigger,placement:jc.placement,disabled:lu.disabled,visible:kn.visible,transition:kn.transition,popperOptions:jc.popperOptions,tabindex:jc.tabindex,content:kn.content,popperStyle:kn.popperStyle,popperClass:kn.popperClass,enterable:{...kn.enterable,default:!0},effect:{...kn.effect,default:"light"},teleported:kn.teleported,title:String,width:{type:[String,Number],default:150},offset:{type:Number,default:void 0},showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0},showArrow:{type:Boolean,default:!0},persistent:{type:Boolean,default:!0},"onUpdate:visible":{type:Function}}),Sq={"update:visible":e=>dn(e),"before-enter":()=>!0,"before-leave":()=>!0,"after-enter":()=>!0,"after-leave":()=>!0},kq="onUpdate:visible",Eq=Y({name:"ElPopover"}),Tq=Y({...Eq,props:Cq,emits:Sq,setup(e,{expose:t,emit:n}){const o=e,r=k(()=>o[kq]),a=Se("popover"),l=R(),s=k(()=>{var C;return(C=i(l))==null?void 0:C.popperRef}),u=k(()=>[{width:rn(o.width)},o.popperStyle]),c=k(()=>[a.b(),o.popperClass,{[a.m("plain")]:!!o.content}]),f=k(()=>o.transition===`${a.namespace.value}-fade-in-linear`),d=()=>{var C;(C=l.value)==null||C.hide()},p=()=>{n("before-enter")},m=()=>{n("before-leave")},v=()=>{n("after-enter")},h=()=>{n("update:visible",!1),n("after-leave")};return t({popperRef:s,hide:d}),(C,g)=>(T(),re(i(Un),mt({ref_key:"tooltipRef",ref:l},C.$attrs,{trigger:C.trigger,placement:C.placement,disabled:C.disabled,visible:C.visible,transition:C.transition,"popper-options":C.popperOptions,tabindex:C.tabindex,content:C.content,offset:C.offset,"show-after":C.showAfter,"hide-after":C.hideAfter,"auto-close":C.autoClose,"show-arrow":C.showArrow,"aria-label":C.title,effect:C.effect,enterable:C.enterable,"popper-class":i(c),"popper-style":i(u),teleported:C.teleported,persistent:C.persistent,"gpu-acceleration":i(f),"onUpdate:visible":i(r),onBeforeShow:p,onBeforeHide:m,onShow:v,onHide:h}),{content:X(()=>[C.title?(T(),V("div",{key:0,class:N(i(a).e("title")),role:"title"},le(C.title),3)):te("v-if",!0),ie(C.$slots,"default",{},()=>[Ge(le(C.content),1)])]),default:X(()=>[C.$slots.reference?ie(C.$slots,"reference",{key:0}):te("v-if",!0)]),_:3},16,["trigger","placement","disabled","visible","transition","popper-options","tabindex","content","offset","show-after","hide-after","auto-close","show-arrow","aria-label","effect","enterable","popper-class","popper-style","teleported","persistent","gpu-acceleration","onUpdate:visible"]))}});var $q=Ie(Tq,[["__file","popover.vue"]]);const a1=(e,t)=>{const n=t.arg||t.value,o=n==null?void 0:n.popperRef;o&&(o.triggerRef=e)};var Oq={mounted(e,t){a1(e,t)},updated(e,t){a1(e,t)}};const Nq="popover",xE=i3(Oq,Nq),Iq=ut($q,{directive:xE}),Mq=Ne({type:{type:String,default:"line",values:["line","circle","dashboard"]},percentage:{type:Number,default:0,validator:e=>e>=0&&e<=100},status:{type:String,default:"",values:["","success","exception","warning"]},indeterminate:Boolean,duration:{type:Number,default:3},strokeWidth:{type:Number,default:6},strokeLinecap:{type:Q(String),default:"round"},textInside:Boolean,width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:Q([String,Array,Function]),default:""},striped:Boolean,stripedFlow:Boolean,format:{type:Q(Function),default:e=>`${e}%`}}),Aq=["aria-valuenow"],Pq={viewBox:"0 0 100 100"},Rq=["d","stroke","stroke-linecap","stroke-width"],Lq=["d","stroke","opacity","stroke-linecap","stroke-width"],xq={key:0},Dq=Y({name:"ElProgress"}),Fq=Y({...Dq,props:Mq,setup(e){const t=e,n={success:"#13ce66",exception:"#ff4949",warning:"#e6a23c",default:"#20a0ff"},o=Se("progress"),r=k(()=>{const _={width:`${t.percentage}%`,animationDuration:`${t.duration}s`},b=y(t.percentage);return b.includes("gradient")?_.background=b:_.backgroundColor=b,_}),a=k(()=>(t.strokeWidth/t.width*100).toFixed(1)),l=k(()=>["circle","dashboard"].includes(t.type)?Number.parseInt(`${50-Number.parseFloat(a.value)/2}`,10):0),s=k(()=>{const _=l.value,b=t.type==="dashboard";return` + M 50 50 + m 0 ${b?"":"-"}${_} + a ${_} ${_} 0 1 1 0 ${b?"-":""}${_*2} + a ${_} ${_} 0 1 1 0 ${b?"":"-"}${_*2} + `}),u=k(()=>2*Math.PI*l.value),c=k(()=>t.type==="dashboard"?.75:1),f=k(()=>`${-1*u.value*(1-c.value)/2}px`),d=k(()=>({strokeDasharray:`${u.value*c.value}px, ${u.value}px`,strokeDashoffset:f.value})),p=k(()=>({strokeDasharray:`${u.value*c.value*(t.percentage/100)}px, ${u.value}px`,strokeDashoffset:f.value,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease, opacity ease 0.6s"})),m=k(()=>{let _;return t.color?_=y(t.percentage):_=n[t.status]||n.default,_}),v=k(()=>t.status==="warning"?hf:t.type==="line"?t.status==="success"?Nv:Fa:t.status==="success"?Mu:tr),h=k(()=>t.type==="line"?12+t.strokeWidth*.4:t.width*.111111+2),C=k(()=>t.format(t.percentage));function g(_){const b=100/_.length;return _.map((S,E)=>nt(S)?{color:S,percentage:(E+1)*b}:S).sort((S,E)=>S.percentage-E.percentage)}const y=_=>{var b;const{color:w}=t;if(Xe(w))return w(_);if(nt(w))return w;{const S=g(w);for(const E of S)if(E.percentage>_)return E.color;return(b=S[S.length-1])==null?void 0:b.color}};return(_,b)=>(T(),V("div",{class:N([i(o).b(),i(o).m(_.type),i(o).is(_.status),{[i(o).m("without-text")]:!_.showText,[i(o).m("text-inside")]:_.textInside}]),role:"progressbar","aria-valuenow":_.percentage,"aria-valuemin":"0","aria-valuemax":"100"},[_.type==="line"?(T(),V("div",{key:0,class:N(i(o).b("bar"))},[F("div",{class:N(i(o).be("bar","outer")),style:je({height:`${_.strokeWidth}px`})},[F("div",{class:N([i(o).be("bar","inner"),{[i(o).bem("bar","inner","indeterminate")]:_.indeterminate},{[i(o).bem("bar","inner","striped")]:_.striped},{[i(o).bem("bar","inner","striped-flow")]:_.stripedFlow}]),style:je(i(r))},[(_.showText||_.$slots.default)&&_.textInside?(T(),V("div",{key:0,class:N(i(o).be("bar","innerText"))},[ie(_.$slots,"default",{percentage:_.percentage},()=>[F("span",null,le(i(C)),1)])],2)):te("v-if",!0)],6)],6)],2)):(T(),V("div",{key:1,class:N(i(o).b("circle")),style:je({height:`${_.width}px`,width:`${_.width}px`})},[(T(),V("svg",Pq,[F("path",{class:N(i(o).be("circle","track")),d:i(s),stroke:`var(${i(o).cssVarName("fill-color-light")}, #e5e9f2)`,"stroke-linecap":_.strokeLinecap,"stroke-width":i(a),fill:"none",style:je(i(d))},null,14,Rq),F("path",{class:N(i(o).be("circle","path")),d:i(s),stroke:i(m),fill:"none",opacity:_.percentage?1:0,"stroke-linecap":_.strokeLinecap,"stroke-width":i(a),style:je(i(p))},null,14,Lq)]))],6)),(_.showText||_.$slots.default)&&!_.textInside?(T(),V("div",{key:2,class:N(i(o).e("text")),style:je({fontSize:`${i(h)}px`})},[ie(_.$slots,"default",{percentage:_.percentage},()=>[_.status?(T(),re(i(ze),{key:1},{default:X(()=>[(T(),re(pt(i(v))))]),_:1})):(T(),V("span",xq,le(i(C)),1))])],6)):te("v-if",!0)],10,Aq))}});var Bq=Ie(Fq,[["__file","progress.vue"]]);const DE=ut(Bq),Vq=Ne({modelValue:{type:Number,default:0},id:{type:String,default:void 0},lowThreshold:{type:Number,default:2},highThreshold:{type:Number,default:4},max:{type:Number,default:5},colors:{type:Q([Array,Object]),default:()=>en(["","",""])},voidColor:{type:String,default:""},disabledVoidColor:{type:String,default:""},icons:{type:Q([Array,Object]),default:()=>[uc,uc,uc]},voidIcon:{type:Dt,default:()=>Q4},disabledVoidIcon:{type:Dt,default:()=>uc},disabled:Boolean,allowHalf:Boolean,showText:Boolean,showScore:Boolean,textColor:{type:String,default:""},texts:{type:Q(Array),default:()=>en(["Extremely bad","Disappointed","Fair","Satisfied","Surprise"])},scoreTemplate:{type:String,default:"{value}"},size:gn,label:{type:String,default:void 0},clearable:Boolean,...An(["ariaLabel"])}),Hq={[Yt]:e=>Je(e),[ft]:e=>Je(e)},zq=["id","aria-label","aria-labelledby","aria-valuenow","aria-valuetext","aria-valuemax"],jq=["onMousemove","onClick"],Wq=Y({name:"ElRate"}),Kq=Y({...Wq,props:Vq,emits:Hq,setup(e,{expose:t,emit:n}){const o=e;function r(L,P){const x=G=>dt(G),I=Object.keys(P).map(G=>+G).filter(G=>{const J=P[G];return(x(J)?J.excluded:!1)?LG-J),H=P[I[0]];return x(H)&&H.value||H}const a=De(Fl,void 0),l=De(Or,void 0),s=hn(),u=Se("rate"),{inputId:c,isLabeledByFormItem:f}=cr(o,{formItemContext:l}),d=R(o.modelValue),p=R(-1),m=R(!0),v=k(()=>[u.b(),u.m(s.value)]),h=k(()=>o.disabled||(a==null?void 0:a.disabled)),C=k(()=>u.cssVarBlock({"void-color":o.voidColor,"disabled-void-color":o.disabledVoidColor,"fill-color":b.value})),g=k(()=>{let L="";return o.showScore?L=o.scoreTemplate.replace(/\{\s*value\s*\}/,h.value?`${o.modelValue}`:`${d.value}`):o.showText&&(L=o.texts[Math.ceil(d.value)-1]),L}),y=k(()=>o.modelValue*100-Math.floor(o.modelValue)*100),_=k(()=>Pe(o.colors)?{[o.lowThreshold]:o.colors[0],[o.highThreshold]:{value:o.colors[1],excluded:!0},[o.max]:o.colors[2]}:o.colors),b=k(()=>{const L=r(d.value,_.value);return dt(L)?"":L}),w=k(()=>{let L="";return h.value?L=`${y.value}%`:o.allowHalf&&(L="50%"),{color:b.value,width:L}}),S=k(()=>{let L=Pe(o.icons)?[...o.icons]:{...o.icons};return L=Po(L),Pe(L)?{[o.lowThreshold]:L[0],[o.highThreshold]:{value:L[1],excluded:!0},[o.max]:L[2]}:L}),E=k(()=>r(o.modelValue,S.value)),$=k(()=>h.value?nt(o.disabledVoidIcon)?o.disabledVoidIcon:Po(o.disabledVoidIcon):nt(o.voidIcon)?o.voidIcon:Po(o.voidIcon)),O=k(()=>r(d.value,S.value));function A(L){const P=h.value&&y.value>0&&L-1o.modelValue,x=o.allowHalf&&m.value&&L-.5<=d.value&&L>d.value;return P||x}function M(L){o.clearable&&L===o.modelValue&&(L=0),n(ft,L),o.modelValue!==L&&n("change",L)}function D(L){h.value||(o.allowHalf&&m.value?M(d.value):M(L))}function U(L){if(h.value)return;let P=d.value;const x=L.code;return x===Ue.up||x===Ue.right?(o.allowHalf?P+=.5:P+=1,L.stopPropagation(),L.preventDefault()):(x===Ue.left||x===Ue.down)&&(o.allowHalf?P-=.5:P-=1,L.stopPropagation(),L.preventDefault()),P=P<0?0:P,P=P>o.max?o.max:P,n(ft,P),n("change",P),P}function j(L,P){if(!h.value){if(o.allowHalf&&P){let x=P.target;wo(x,u.e("item"))&&(x=x.querySelector(`.${u.e("icon")}`)),(x.clientWidth===0||wo(x,u.e("decimal")))&&(x=x.parentNode),m.value=P.offsetX*2<=x.clientWidth,d.value=m.value?L-.5:L}else d.value=L;p.value=L}}function W(){h.value||(o.allowHalf&&(m.value=o.modelValue!==Math.floor(o.modelValue)),d.value=o.modelValue,p.value=-1)}return ve(()=>o.modelValue,L=>{d.value=L,m.value=o.modelValue!==Math.floor(o.modelValue)}),o.modelValue||n(ft,0),wn({from:"label",replacement:"aria-label",version:"2.8.0",scope:"el-rate",ref:"https://element-plus.org/en-US/component/rate.html"},k(()=>!!o.label)),t({setCurrentValue:j,resetCurrentValue:W}),(L,P)=>{var x;return T(),V("div",{id:i(c),class:N([i(v),i(u).is("disabled",i(h))]),role:"slider","aria-label":i(f)?void 0:L.label||L.ariaLabel||"rating","aria-labelledby":i(f)?(x=i(l))==null?void 0:x.labelId:void 0,"aria-valuenow":d.value,"aria-valuetext":i(g)||void 0,"aria-valuemin":"0","aria-valuemax":L.max,tabindex:"0",style:je(i(C)),onKeydown:U},[(T(!0),V(Ve,null,bt(L.max,(I,H)=>(T(),V("span",{key:H,class:N(i(u).e("item")),onMousemove:G=>j(I,G),onMouseleave:W,onClick:G=>D(I)},[K(i(ze),{class:N([i(u).e("icon"),{hover:p.value===I},i(u).is("active",I<=d.value)])},{default:X(()=>[A(I)?te("v-if",!0):(T(),V(Ve,{key:0},[tt((T(),re(pt(i(O)),null,null,512)),[[kt,I<=d.value]]),tt((T(),re(pt(i($)),null,null,512)),[[kt,!(I<=d.value)]])],64)),A(I)?(T(),V(Ve,{key:1},[(T(),re(pt(i($)),{class:N([i(u).em("decimal","box")])},null,8,["class"])),K(i(ze),{style:je(i(w)),class:N([i(u).e("icon"),i(u).e("decimal")])},{default:X(()=>[(T(),re(pt(i(E))))]),_:1},8,["style","class"])],64)):te("v-if",!0)]),_:2},1032,["class"])],42,jq))),128)),L.showText||L.showScore?(T(),V("span",{key:0,class:N(i(u).e("text")),style:je({color:L.textColor})},le(i(g)),7)):te("v-if",!0)],46,zq)}}});var Uq=Ie(Kq,[["__file","rate.vue"]]);const qq=ut(Uq),ts={success:"icon-success",warning:"icon-warning",error:"icon-error",info:"icon-info"},l1={[ts.success]:d4,[ts.warning]:hf,[ts.error]:Iv,[ts.info]:Mv},Yq=Ne({title:{type:String,default:""},subTitle:{type:String,default:""},icon:{type:String,values:["success","warning","info","error"],default:"info"}}),Gq=Y({name:"ElResult"}),Xq=Y({...Gq,props:Yq,setup(e){const t=e,n=Se("result"),o=k(()=>{const r=t.icon,a=r&&ts[r]?ts[r]:"icon-info",l=l1[a]||l1["icon-info"];return{class:a,component:l}});return(r,a)=>(T(),V("div",{class:N(i(n).b())},[F("div",{class:N(i(n).e("icon"))},[ie(r.$slots,"icon",{},()=>[i(o).component?(T(),re(pt(i(o).component),{key:0,class:N(i(o).class)},null,8,["class"])):te("v-if",!0)])],2),r.title||r.$slots.title?(T(),V("div",{key:0,class:N(i(n).e("title"))},[ie(r.$slots,"title",{},()=>[F("p",null,le(r.title),1)])],2)):te("v-if",!0),r.subTitle||r.$slots["sub-title"]?(T(),V("div",{key:1,class:N(i(n).e("subtitle"))},[ie(r.$slots,"sub-title",{},()=>[F("p",null,le(r.subTitle),1)])],2)):te("v-if",!0),r.$slots.extra?(T(),V("div",{key:2,class:N(i(n).e("extra"))},[ie(r.$slots,"extra")],2)):te("v-if",!0)],2))}});var Jq=Ie(Xq,[["__file","result.vue"]]);const Zq=ut(Jq);var s1=Number.isNaN||function(t){return typeof t=="number"&&t!==t};function Qq(e,t){return!!(e===t||s1(e)&&s1(t))}function eY(e,t){if(e.length!==t.length)return!1;for(var n=0;n{const t=lt().proxy.$props;return k(()=>{const n=(o,r,a)=>({});return t.perfMode?uf(n):tY(n)})},Gh=50,Sd="itemRendered",kd="scroll",ns="forward",Ed="backward",Ao="auto",$f="smart",uu="start",br="center",cu="end",Rs="horizontal",Cg="vertical",nY="ltr",hs="rtl",du="negative",Sg="positive-ascending",kg="positive-descending",oY={[Rs]:"left",[Cg]:"top"},rY=20,aY={[Rs]:"deltaX",[Cg]:"deltaY"},lY=({atEndEdge:e,atStartEdge:t,layout:n},o)=>{let r,a=0;const l=u=>u<0&&t.value||u>0&&e.value;return{hasReachedEdge:l,onWheel:u=>{kl(r);const c=u[aY[n.value]];l(a)&&l(a+c)||(a+=c,nC()||u.preventDefault(),r=Ma(()=>{o(a),a=0}))}}},Xh=ir({type:Q([Number,Function]),required:!0}),Jh=ir({type:Number}),Zh=ir({type:Number,default:2}),sY=ir({type:String,values:["ltr","rtl"],default:"ltr"}),Qh=ir({type:Number,default:0}),Td=ir({type:Number,required:!0}),BE=ir({type:String,values:["horizontal","vertical"],default:Cg}),VE=Ne({className:{type:String,default:""},containerElement:{type:Q([String,Object]),default:"div"},data:{type:Q(Array),default:()=>en([])},direction:sY,height:{type:[String,Number],required:!0},innerElement:{type:[String,Object],default:"div"},style:{type:Q([Object,String,Array])},useIsScrolling:{type:Boolean,default:!1},width:{type:[Number,String],required:!1},perfMode:{type:Boolean,default:!0},scrollbarAlwaysOn:{type:Boolean,default:!1}}),HE=Ne({cache:Zh,estimatedItemSize:Jh,layout:BE,initScrollOffset:Qh,total:Td,itemSize:Xh,...VE}),em={type:Number,default:6},zE={type:Number,default:0},jE={type:Number,default:2},dl=Ne({columnCache:Zh,columnWidth:Xh,estimatedColumnWidth:Jh,estimatedRowHeight:Jh,initScrollLeft:Qh,initScrollTop:Qh,itemKey:{type:Q(Function),default:({columnIndex:e,rowIndex:t})=>`${t}:${e}`},rowCache:Zh,rowHeight:Xh,totalColumn:Td,totalRow:Td,hScrollbarSize:em,vScrollbarSize:em,scrollbarStartGap:zE,scrollbarEndGap:jE,role:String,...VE}),WE=Ne({alwaysOn:Boolean,class:String,layout:BE,total:Td,ratio:{type:Number,required:!0},clientSize:{type:Number,required:!0},scrollFrom:{type:Number,required:!0},scrollbarSize:em,startGap:zE,endGap:jE,visible:Boolean}),tl=(e,t)=>ee===nY||e===hs||e===Rs,i1=e=>e===hs;let Yl=null;function $d(e=!1){if(Yl===null||e){const t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";const o=document.createElement("div"),r=o.style;return r.width="100px",r.height="100px",t.appendChild(o),document.body.appendChild(t),t.scrollLeft>0?Yl=kg:(t.scrollLeft=1,t.scrollLeft===0?Yl=du:Yl=Sg),document.body.removeChild(t),Yl}return Yl}function iY({move:e,size:t,bar:n},o){const r={},a=`translate${n.axis}(${e}px)`;return r[n.size]=t,r.transform=a,r.msTransform=a,r.webkitTransform=a,o==="horizontal"?r.height="100%":r.width="100%",r}const tm=Y({name:"ElVirtualScrollBar",props:WE,emits:["scroll","start-move","stop-move"],setup(e,{emit:t}){const n=k(()=>e.startGap+e.endGap),o=Se("virtual-scrollbar"),r=Se("scrollbar"),a=R(),l=R();let s=null,u=null;const c=Et({isDragging:!1,traveled:0}),f=k(()=>jS[e.layout]),d=k(()=>e.clientSize-i(n)),p=k(()=>({position:"absolute",width:`${Rs===e.layout?d.value:e.scrollbarSize}px`,height:`${Rs===e.layout?e.scrollbarSize:d.value}px`,[oY[e.layout]]:"2px",right:"2px",bottom:"2px",borderRadius:"4px"})),m=k(()=>{const S=e.ratio,E=e.clientSize;if(S>=100)return Number.POSITIVE_INFINITY;if(S>=50)return S*E/100;const $=E/3;return Math.floor(Math.min(Math.max(S*E,rY),$))}),v=k(()=>{if(!Number.isFinite(m.value))return{display:"none"};const S=`${m.value}px`;return iY({bar:f.value,size:S,move:c.traveled},e.layout)}),h=k(()=>Math.floor(e.clientSize-m.value-i(n))),C=()=>{window.addEventListener("mousemove",b),window.addEventListener("mouseup",_);const S=i(l);S&&(u=document.onselectstart,document.onselectstart=()=>!1,S.addEventListener("touchmove",b),S.addEventListener("touchend",_))},g=()=>{window.removeEventListener("mousemove",b),window.removeEventListener("mouseup",_),document.onselectstart=u,u=null;const S=i(l);S&&(S.removeEventListener("touchmove",b),S.removeEventListener("touchend",_))},y=S=>{S.stopImmediatePropagation(),!(S.ctrlKey||[1,2].includes(S.button))&&(c.isDragging=!0,c[f.value.axis]=S.currentTarget[f.value.offset]-(S[f.value.client]-S.currentTarget.getBoundingClientRect()[f.value.direction]),t("start-move"),C())},_=()=>{c.isDragging=!1,c[f.value.axis]=0,t("stop-move"),g()},b=S=>{const{isDragging:E}=c;if(!E||!l.value||!a.value)return;const $=c[f.value.axis];if(!$)return;kl(s);const O=(a.value.getBoundingClientRect()[f.value.direction]-S[f.value.client])*-1,A=l.value[f.value.offset]-$,M=O-A;s=Ma(()=>{c.traveled=Math.max(e.startGap,Math.min(M,h.value)),t("scroll",M,h.value)})},w=S=>{const E=Math.abs(S.target.getBoundingClientRect()[f.value.direction]-S[f.value.client]),$=l.value[f.value.offset]/2,O=E-$;c.traveled=Math.max(0,Math.min(O,h.value)),t("scroll",O,h.value)};return ve(()=>e.scrollFrom,S=>{c.isDragging||(c.traveled=Math.ceil(S*h.value))}),zt(()=>{g()}),()=>Ke("div",{role:"presentation",ref:a,class:[o.b(),e.class,(e.alwaysOn||c.isDragging)&&"always-on"],style:p.value,onMousedown:Qe(w,["stop","prevent"]),onTouchstartPrevent:y},Ke("div",{ref:l,class:r.e("thumb"),style:v.value,onMousedown:y},[]))}}),KE=({name:e,getOffset:t,getItemSize:n,getItemOffset:o,getEstimatedTotalSize:r,getStartIndexForOffset:a,getStopIndexForStartIndex:l,initCache:s,clearCache:u,validateProps:c})=>Y({name:e??"ElVirtualList",props:HE,emits:[Sd,kd],setup(f,{emit:d,expose:p}){c(f);const m=lt(),v=Se("vl"),h=R(s(f,m)),C=FE(),g=R(),y=R(),_=R(),b=R({isScrolling:!1,scrollDir:"forward",scrollOffset:Je(f.initScrollOffset)?f.initScrollOffset:0,updateRequested:!1,isScrollbarDragging:!1,scrollbarAlwaysOn:f.scrollbarAlwaysOn}),w=k(()=>{const{total:ee,cache:fe}=f,{isScrolling:Te,scrollDir:oe,scrollOffset:ke}=i(b);if(ee===0)return[0,0,0,0];const ae=a(f,ke,i(h)),Oe=l(f,ae,ke,i(h)),we=!Te||oe===Ed?Math.max(1,fe):1,ge=!Te||oe===ns?Math.max(1,fe):1;return[Math.max(0,ae-we),Math.max(0,Math.min(ee-1,Oe+ge)),ae,Oe]}),S=k(()=>r(f,i(h))),E=k(()=>fu(f.layout)),$=k(()=>[{position:"relative",[`overflow-${E.value?"x":"y"}`]:"scroll",WebkitOverflowScrolling:"touch",willChange:"transform"},{direction:f.direction,height:Je(f.height)?`${f.height}px`:f.height,width:Je(f.width)?`${f.width}px`:f.width},f.style]),O=k(()=>{const ee=i(S),fe=i(E);return{height:fe?"100%":`${ee}px`,pointerEvents:i(b).isScrolling?"none":void 0,width:fe?`${ee}px`:"100%"}}),A=k(()=>E.value?f.width:f.height),{onWheel:M}=lY({atStartEdge:k(()=>b.value.scrollOffset<=0),atEndEdge:k(()=>b.value.scrollOffset>=S.value),layout:k(()=>f.layout)},ee=>{var fe,Te;(Te=(fe=_.value).onMouseUp)==null||Te.call(fe),P(Math.min(b.value.scrollOffset+ee,S.value-A.value))}),D=()=>{const{total:ee}=f;if(ee>0){const[ke,ae,Oe,we]=i(w);d(Sd,ke,ae,Oe,we)}const{scrollDir:fe,scrollOffset:Te,updateRequested:oe}=i(b);d(kd,fe,Te,oe)},U=ee=>{const{clientHeight:fe,scrollHeight:Te,scrollTop:oe}=ee.currentTarget,ke=i(b);if(ke.scrollOffset===oe)return;const ae=Math.max(0,Math.min(oe,Te-fe));b.value={...ke,isScrolling:!0,scrollDir:tl(ke.scrollOffset,ae),scrollOffset:ae,updateRequested:!1},We(H)},j=ee=>{const{clientWidth:fe,scrollLeft:Te,scrollWidth:oe}=ee.currentTarget,ke=i(b);if(ke.scrollOffset===Te)return;const{direction:ae}=f;let Oe=Te;if(ae===hs)switch($d()){case du:{Oe=-Te;break}case kg:{Oe=oe-fe-Te;break}}Oe=Math.max(0,Math.min(Oe,oe-fe)),b.value={...ke,isScrolling:!0,scrollDir:tl(ke.scrollOffset,Oe),scrollOffset:Oe,updateRequested:!1},We(H)},W=ee=>{i(E)?j(ee):U(ee),D()},L=(ee,fe)=>{const Te=(S.value-A.value)/fe*ee;P(Math.min(S.value-A.value,Te))},P=ee=>{ee=Math.max(ee,0),ee!==i(b).scrollOffset&&(b.value={...i(b),scrollOffset:ee,scrollDir:tl(i(b).scrollOffset,ee),updateRequested:!0},We(H))},x=(ee,fe=Ao)=>{const{scrollOffset:Te}=i(b);ee=Math.max(0,Math.min(ee,f.total-1)),P(t(f,ee,fe,Te,i(h)))},I=ee=>{const{direction:fe,itemSize:Te,layout:oe}=f,ke=C.value(u&&Te,u&&oe,u&&fe);let ae;if(Tt(ke,String(ee)))ae=ke[ee];else{const Oe=o(f,ee,i(h)),we=n(f,ee,i(h)),ge=i(E),q=fe===hs,B=ge?Oe:0;ke[ee]=ae={position:"absolute",left:q?void 0:`${B}px`,right:q?`${B}px`:void 0,top:ge?0:`${Oe}px`,height:ge?"100%":`${we}px`,width:ge?`${we}px`:"100%"}}return ae},H=()=>{b.value.isScrolling=!1,We(()=>{C.value(-1,null,null)})},G=()=>{const ee=g.value;ee&&(ee.scrollTop=0)};at(()=>{if(!Ct)return;const{initScrollOffset:ee}=f,fe=i(g);Je(ee)&&fe&&(i(E)?fe.scrollLeft=ee:fe.scrollTop=ee),D()}),ar(()=>{const{direction:ee,layout:fe}=f,{scrollOffset:Te,updateRequested:oe}=i(b),ke=i(g);if(oe&&ke)if(fe===Rs)if(ee===hs)switch($d()){case du:{ke.scrollLeft=-Te;break}case Sg:{ke.scrollLeft=Te;break}default:{const{clientWidth:ae,scrollWidth:Oe}=ke;ke.scrollLeft=Oe-ae-Te;break}}else ke.scrollLeft=Te;else ke.scrollTop=Te}),Zm(()=>{i(g).scrollTop=i(b).scrollOffset});const J={ns:v,clientSize:A,estimatedTotalSize:S,windowStyle:$,windowRef:g,innerRef:y,innerStyle:O,itemsToRender:w,scrollbarRef:_,states:b,getItemStyle:I,onScroll:W,onScrollbarScroll:L,onWheel:M,scrollTo:P,scrollToItem:x,resetScrollTop:G};return p({windowRef:g,innerRef:y,getItemStyleCache:C,scrollTo:P,scrollToItem:x,resetScrollTop:G,states:b}),J},render(f){var d;const{$slots:p,className:m,clientSize:v,containerElement:h,data:C,getItemStyle:g,innerElement:y,itemsToRender:_,innerStyle:b,layout:w,total:S,onScroll:E,onScrollbarScroll:$,onWheel:O,states:A,useIsScrolling:M,windowStyle:D,ns:U}=f,[j,W]=_,L=pt(h),P=pt(y),x=[];if(S>0)for(let J=j;J<=W;J++)x.push((d=p.default)==null?void 0:d.call(p,{data:C,key:J,index:J,isScrolling:M?A.isScrolling:void 0,style:g(J)}));const I=[Ke(P,{style:b,ref:"innerRef"},nt(P)?x:{default:()=>x})],H=Ke(tm,{ref:"scrollbarRef",clientSize:v,layout:w,onScroll:$,ratio:v*100/this.estimatedTotalSize,scrollFrom:A.scrollOffset/(this.estimatedTotalSize-v),total:S}),G=Ke(L,{class:[U.e("window"),m],style:D,onScroll:E,onWheel:O,ref:"windowRef",key:0},nt(L)?[I]:{default:()=>[I]});return Ke("div",{key:0,class:[U.e("wrapper"),A.scrollbarAlwaysOn?"always-on":""]},[G,H])}}),UE=KE({name:"ElFixedSizeList",getItemOffset:({itemSize:e},t)=>t*e,getItemSize:({itemSize:e})=>e,getEstimatedTotalSize:({total:e,itemSize:t})=>t*e,getOffset:({height:e,total:t,itemSize:n,layout:o,width:r},a,l,s)=>{const u=fu(o)?r:e,c=Math.max(0,t*n-u),f=Math.min(c,a*n),d=Math.max(0,(a+1)*n-u);switch(l===$f&&(s>=d-u&&s<=f+u?l=Ao:l=br),l){case uu:return f;case cu:return d;case br:{const p=Math.round(d+(f-d)/2);return pc+Math.floor(u/2)?c:p}case Ao:default:return s>=d&&s<=f?s:sMath.max(0,Math.min(e-1,Math.floor(n/t))),getStopIndexForStartIndex:({height:e,total:t,itemSize:n,layout:o,width:r},a,l)=>{const s=a*n,u=fu(o)?r:e,c=Math.ceil((u+l-s)/n);return Math.max(0,Math.min(t-1,a+c-1))},initCache(){},clearCache:!0,validateProps(){}}),os=(e,t,n)=>{const{itemSize:o}=e,{items:r,lastVisitedIndex:a}=n;if(t>a){let l=0;if(a>=0){const s=r[a];l=s.offset+s.size}for(let s=a+1;s<=t;s++){const u=o(s);r[s]={offset:l,size:u},l+=u}n.lastVisitedIndex=t}return r[t]},uY=(e,t,n)=>{const{items:o,lastVisitedIndex:r}=t;return(r>0?o[r].offset:0)>=n?qE(e,t,0,r,n):cY(e,t,Math.max(0,r),n)},qE=(e,t,n,o,r)=>{for(;n<=o;){const a=n+Math.floor((o-n)/2),l=os(e,a,t).offset;if(l===r)return a;lr&&(o=a-1)}return Math.max(0,n-1)},cY=(e,t,n,o)=>{const{total:r}=e;let a=1;for(;n{let r=0;if(o>=e&&(o=e-1),o>=0){const s=t[o];r=s.offset+s.size}const l=(e-o-1)*n;return r+l},dY=KE({name:"ElDynamicSizeList",getItemOffset:(e,t,n)=>os(e,t,n).offset,getItemSize:(e,t,{items:n})=>n[t].size,getEstimatedTotalSize:u1,getOffset:(e,t,n,o,r)=>{const{height:a,layout:l,width:s}=e,u=fu(l)?s:a,c=os(e,t,r),f=u1(e,r),d=Math.max(0,Math.min(f-u,c.offset)),p=Math.max(0,c.offset-u+c.size);switch(n===$f&&(o>=p-u&&o<=d+u?n=Ao:n=br),n){case uu:return d;case cu:return p;case br:return Math.round(p+(d-p)/2);case Ao:default:return o>=p&&o<=d?o:ouY(e,n,t),getStopIndexForStartIndex:(e,t,n,o)=>{const{height:r,total:a,layout:l,width:s}=e,u=fu(l)?s:r,c=os(e,t,o),f=n+u;let d=c.offset+c.size,p=t;for(;p{var a,l;n.lastVisitedIndex=Math.min(n.lastVisitedIndex,o-1),(a=t.exposed)==null||a.getItemStyleCache(-1),r&&((l=t.proxy)==null||l.$forceUpdate())},n},clearCache:!1,validateProps:({itemSize:e})=>{}}),fY=({atXEndEdge:e,atXStartEdge:t,atYEndEdge:n,atYStartEdge:o},r)=>{let a=null,l=0,s=0;const u=(f,d)=>{const p=f<=0&&t.value||f>=0&&e.value,m=d<=0&&o.value||d>=0&&n.value;return p&&m};return{hasReachedEdge:u,onWheel:f=>{kl(a);let d=f.deltaX,p=f.deltaY;Math.abs(d)>Math.abs(p)?p=0:d=0,f.shiftKey&&p!==0&&(d=p,p=0),!(u(l,s)&&u(l+d,s+p))&&(l+=d,s+=p,f.preventDefault(),a=Ma(()=>{r(l,s),l=0,s=0}))}}},YE=({name:e,clearCache:t,getColumnPosition:n,getColumnStartIndexForOffset:o,getColumnStopIndexForStartIndex:r,getEstimatedTotalHeight:a,getEstimatedTotalWidth:l,getColumnOffset:s,getRowOffset:u,getRowPosition:c,getRowStartIndexForOffset:f,getRowStopIndexForStartIndex:d,initCache:p,injectToInstance:m,validateProps:v})=>Y({name:e??"ElVirtualList",props:dl,emits:[Sd,kd],setup(h,{emit:C,expose:g,slots:y}){const _=Se("vl");v(h);const b=lt(),w=R(p(h,b));m==null||m(b,w);const S=R(),E=R(),$=R(),O=R(null),A=R({isScrolling:!1,scrollLeft:Je(h.initScrollLeft)?h.initScrollLeft:0,scrollTop:Je(h.initScrollTop)?h.initScrollTop:0,updateRequested:!1,xAxisScrollDir:ns,yAxisScrollDir:ns}),M=FE(),D=k(()=>Number.parseInt(`${h.height}`,10)),U=k(()=>Number.parseInt(`${h.width}`,10)),j=k(()=>{const{totalColumn:se,totalRow:me,columnCache:_e}=h,{isScrolling:$e,xAxisScrollDir:Ce,scrollLeft:ce}=i(A);if(se===0||me===0)return[0,0,0,0];const de=o(h,ce,i(w)),xe=r(h,de,ce,i(w)),he=!$e||Ce===Ed?Math.max(1,_e):1,He=!$e||Ce===ns?Math.max(1,_e):1;return[Math.max(0,de-he),Math.max(0,Math.min(se-1,xe+He)),de,xe]}),W=k(()=>{const{totalColumn:se,totalRow:me,rowCache:_e}=h,{isScrolling:$e,yAxisScrollDir:Ce,scrollTop:ce}=i(A);if(se===0||me===0)return[0,0,0,0];const de=f(h,ce,i(w)),xe=d(h,de,ce,i(w)),he=!$e||Ce===Ed?Math.max(1,_e):1,He=!$e||Ce===ns?Math.max(1,_e):1;return[Math.max(0,de-he),Math.max(0,Math.min(me-1,xe+He)),de,xe]}),L=k(()=>a(h,i(w))),P=k(()=>l(h,i(w))),x=k(()=>{var se;return[{position:"relative",overflow:"hidden",WebkitOverflowScrolling:"touch",willChange:"transform"},{direction:h.direction,height:Je(h.height)?`${h.height}px`:h.height,width:Je(h.width)?`${h.width}px`:h.width},(se=h.style)!=null?se:{}]}),I=k(()=>{const se=`${i(P)}px`;return{height:`${i(L)}px`,pointerEvents:i(A).isScrolling?"none":void 0,width:se}}),H=()=>{const{totalColumn:se,totalRow:me}=h;if(se>0&&me>0){const[xe,he,He,et]=i(j),[rt,wt,Ze,st]=i(W);C(Sd,{columnCacheStart:xe,columnCacheEnd:he,rowCacheStart:rt,rowCacheEnd:wt,columnVisibleStart:He,columnVisibleEnd:et,rowVisibleStart:Ze,rowVisibleEnd:st})}const{scrollLeft:_e,scrollTop:$e,updateRequested:Ce,xAxisScrollDir:ce,yAxisScrollDir:de}=i(A);C(kd,{xAxisScrollDir:ce,scrollLeft:_e,yAxisScrollDir:de,scrollTop:$e,updateRequested:Ce})},G=se=>{const{clientHeight:me,clientWidth:_e,scrollHeight:$e,scrollLeft:Ce,scrollTop:ce,scrollWidth:de}=se.currentTarget,xe=i(A);if(xe.scrollTop===ce&&xe.scrollLeft===Ce)return;let he=Ce;if(i1(h.direction))switch($d()){case du:he=-Ce;break;case kg:he=de-_e-Ce;break}A.value={...xe,isScrolling:!0,scrollLeft:he,scrollTop:Math.max(0,Math.min(ce,$e-me)),updateRequested:!0,xAxisScrollDir:tl(xe.scrollLeft,he),yAxisScrollDir:tl(xe.scrollTop,ce)},We(()=>ae()),Oe(),H()},J=(se,me)=>{const _e=i(D),$e=(L.value-_e)/me*se;Te({scrollTop:Math.min(L.value-_e,$e)})},ee=(se,me)=>{const _e=i(U),$e=(P.value-_e)/me*se;Te({scrollLeft:Math.min(P.value-_e,$e)})},{onWheel:fe}=fY({atXStartEdge:k(()=>A.value.scrollLeft<=0),atXEndEdge:k(()=>A.value.scrollLeft>=P.value-i(U)),atYStartEdge:k(()=>A.value.scrollTop<=0),atYEndEdge:k(()=>A.value.scrollTop>=L.value-i(D))},(se,me)=>{var _e,$e,Ce,ce;($e=(_e=E.value)==null?void 0:_e.onMouseUp)==null||$e.call(_e),(ce=(Ce=$.value)==null?void 0:Ce.onMouseUp)==null||ce.call(Ce);const de=i(U),xe=i(D);Te({scrollLeft:Math.min(A.value.scrollLeft+se,P.value-de),scrollTop:Math.min(A.value.scrollTop+me,L.value-xe)})}),Te=({scrollLeft:se=A.value.scrollLeft,scrollTop:me=A.value.scrollTop})=>{se=Math.max(se,0),me=Math.max(me,0);const _e=i(A);me===_e.scrollTop&&se===_e.scrollLeft||(A.value={..._e,xAxisScrollDir:tl(_e.scrollLeft,se),yAxisScrollDir:tl(_e.scrollTop,me),scrollLeft:se,scrollTop:me,updateRequested:!0},We(()=>ae()),Oe(),H())},oe=(se=0,me=0,_e=Ao)=>{const $e=i(A);me=Math.max(0,Math.min(me,h.totalColumn-1)),se=Math.max(0,Math.min(se,h.totalRow-1));const Ce=WC(_.namespace.value),ce=i(w),de=a(h,ce),xe=l(h,ce);Te({scrollLeft:s(h,me,_e,$e.scrollLeft,ce,xe>h.width?Ce:0),scrollTop:u(h,se,_e,$e.scrollTop,ce,de>h.height?Ce:0)})},ke=(se,me)=>{const{columnWidth:_e,direction:$e,rowHeight:Ce}=h,ce=M.value(t&&_e,t&&Ce,t&&$e),de=`${se},${me}`;if(Tt(ce,de))return ce[de];{const[,xe]=n(h,me,i(w)),he=i(w),He=i1($e),[et,rt]=c(h,se,he),[wt]=n(h,me,he);return ce[de]={position:"absolute",left:He?void 0:`${xe}px`,right:He?`${xe}px`:void 0,top:`${rt}px`,height:`${et}px`,width:`${wt}px`},ce[de]}},ae=()=>{A.value.isScrolling=!1,We(()=>{M.value(-1,null,null)})};at(()=>{if(!Ct)return;const{initScrollLeft:se,initScrollTop:me}=h,_e=i(S);_e&&(Je(se)&&(_e.scrollLeft=se),Je(me)&&(_e.scrollTop=me)),H()});const Oe=()=>{const{direction:se}=h,{scrollLeft:me,scrollTop:_e,updateRequested:$e}=i(A),Ce=i(S);if($e&&Ce){if(se===hs)switch($d()){case du:{Ce.scrollLeft=-me;break}case Sg:{Ce.scrollLeft=me;break}default:{const{clientWidth:ce,scrollWidth:de}=Ce;Ce.scrollLeft=de-ce-me;break}}else Ce.scrollLeft=Math.max(0,me);Ce.scrollTop=Math.max(0,_e)}},{resetAfterColumnIndex:we,resetAfterRowIndex:ge,resetAfter:q}=b.proxy;g({windowRef:S,innerRef:O,getItemStyleCache:M,scrollTo:Te,scrollToItem:oe,states:A,resetAfterColumnIndex:we,resetAfterRowIndex:ge,resetAfter:q});const B=()=>{const{scrollbarAlwaysOn:se,scrollbarStartGap:me,scrollbarEndGap:_e,totalColumn:$e,totalRow:Ce}=h,ce=i(U),de=i(D),xe=i(P),he=i(L),{scrollLeft:He,scrollTop:et}=i(A),rt=Ke(tm,{ref:E,alwaysOn:se,startGap:me,endGap:_e,class:_.e("horizontal"),clientSize:ce,layout:"horizontal",onScroll:ee,ratio:ce*100/xe,scrollFrom:He/(xe-ce),total:Ce,visible:!0}),wt=Ke(tm,{ref:$,alwaysOn:se,startGap:me,endGap:_e,class:_.e("vertical"),clientSize:de,layout:"vertical",onScroll:J,ratio:de*100/he,scrollFrom:et/(he-de),total:$e,visible:!0});return{horizontalScrollbar:rt,verticalScrollbar:wt}},z=()=>{var se;const[me,_e]=i(j),[$e,Ce]=i(W),{data:ce,totalColumn:de,totalRow:xe,useIsScrolling:he,itemKey:He}=h,et=[];if(xe>0&&de>0)for(let rt=$e;rt<=Ce;rt++)for(let wt=me;wt<=_e;wt++)et.push((se=y.default)==null?void 0:se.call(y,{columnIndex:wt,data:ce,key:He({columnIndex:wt,data:ce,rowIndex:rt}),isScrolling:he?i(A).isScrolling:void 0,style:ke(rt,wt),rowIndex:rt}));return et},Z=()=>{const se=pt(h.innerElement),me=z();return[Ke(se,{style:i(I),ref:O},nt(se)?me:{default:()=>me})]};return()=>{const se=pt(h.containerElement),{horizontalScrollbar:me,verticalScrollbar:_e}=B(),$e=Z();return Ke("div",{key:0,class:_.e("wrapper"),role:h.role},[Ke(se,{class:h.className,style:i(x),onScroll:G,onWheel:fe,ref:S},nt(se)?$e:{default:()=>$e}),me,_e])}}}),pY=YE({name:"ElFixedSizeGrid",getColumnPosition:({columnWidth:e},t)=>[e,t*e],getRowPosition:({rowHeight:e},t)=>[e,t*e],getEstimatedTotalHeight:({totalRow:e,rowHeight:t})=>t*e,getEstimatedTotalWidth:({totalColumn:e,columnWidth:t})=>t*e,getColumnOffset:({totalColumn:e,columnWidth:t,width:n},o,r,a,l,s)=>{n=Number(n);const u=Math.max(0,e*t-n),c=Math.min(u,o*t),f=Math.max(0,o*t-n+s+t);switch(r==="smart"&&(a>=f-n&&a<=c+n?r=Ao:r=br),r){case uu:return c;case cu:return f;case br:{const d=Math.round(f+(c-f)/2);return du+Math.floor(n/2)?u:d}case Ao:default:return a>=f&&a<=c?a:f>c||a{t=Number(t);const u=Math.max(0,n*e-t),c=Math.min(u,o*e),f=Math.max(0,o*e-t+s+e);switch(r===$f&&(a>=f-t&&a<=c+t?r=Ao:r=br),r){case uu:return c;case cu:return f;case br:{const d=Math.round(f+(c-f)/2);return du+Math.floor(t/2)?u:d}case Ao:default:return a>=f&&a<=c?a:f>c||aMath.max(0,Math.min(t-1,Math.floor(n/e))),getColumnStopIndexForStartIndex:({columnWidth:e,totalColumn:t,width:n},o,r)=>{const a=o*e,l=Math.ceil((n+r-a)/e);return Math.max(0,Math.min(t-1,o+l-1))},getRowStartIndexForOffset:({rowHeight:e,totalRow:t},n)=>Math.max(0,Math.min(t-1,Math.floor(n/e))),getRowStopIndexForStartIndex:({rowHeight:e,totalRow:t,height:n},o,r)=>{const a=o*e,l=Math.ceil((n+r-a)/e);return Math.max(0,Math.min(t-1,o+l-1))},initCache:()=>{},clearCache:!0,validateProps:({columnWidth:e,rowHeight:t})=>{}}),{max:Od,min:GE,floor:XE}=Math,hY={column:"columnWidth",row:"rowHeight"},nm={column:"lastVisitedColumnIndex",row:"lastVisitedRowIndex"},Vr=(e,t,n,o)=>{const[r,a,l]=[n[o],e[hY[o]],n[nm[o]]];if(t>l){let s=0;if(l>=0){const u=r[l];s=u.offset+u.size}for(let u=l+1;u<=t;u++){const c=a(u);r[u]={offset:s,size:c},s+=c}n[nm[o]]=t}return r[t]},JE=(e,t,n,o,r,a)=>{for(;n<=o;){const l=n+XE((o-n)/2),s=Vr(e,l,t,a).offset;if(s===r)return l;s{const a=r==="column"?e.totalColumn:e.totalRow;let l=1;for(;n{const[r,a]=[t[o],t[nm[o]]];return(a>0?r[a].offset:0)>=n?JE(e,t,0,a,n,o):mY(e,t,Od(0,a),n,o)},ZE=({totalRow:e},{estimatedRowHeight:t,lastVisitedRowIndex:n,row:o})=>{let r=0;if(n>=e&&(n=e-1),n>=0){const s=o[n];r=s.offset+s.size}const l=(e-n-1)*t;return r+l},QE=({totalColumn:e},{column:t,estimatedColumnWidth:n,lastVisitedColumnIndex:o})=>{let r=0;if(o>e&&(o=e-1),o>=0){const s=t[o];r=s.offset+s.size}const l=(e-o-1)*n;return r+l},vY={column:QE,row:ZE},d1=(e,t,n,o,r,a,l)=>{const[s,u]=[a==="row"?e.height:e.width,vY[a]],c=Vr(e,t,r,a),f=u(e,r),d=Od(0,GE(f-s,c.offset)),p=Od(0,c.offset-s+l+c.size);switch(n===$f&&(o>=p-s&&o<=d+s?n=Ao:n=br),n){case uu:return d;case cu:return p;case br:return Math.round(p+(d-p)/2);case Ao:default:return o>=p&&o<=d?o:p>d||o{const o=Vr(e,t,n,"column");return[o.size,o.offset]},getRowPosition:(e,t,n)=>{const o=Vr(e,t,n,"row");return[o.size,o.offset]},getColumnOffset:(e,t,n,o,r,a)=>d1(e,t,n,o,r,"column",a),getRowOffset:(e,t,n,o,r,a)=>d1(e,t,n,o,r,"row",a),getColumnStartIndexForOffset:(e,t,n)=>c1(e,n,t,"column"),getColumnStopIndexForStartIndex:(e,t,n,o)=>{const r=Vr(e,t,o,"column"),a=n+e.width;let l=r.offset+r.size,s=t;for(;sc1(e,n,t,"row"),getRowStopIndexForStartIndex:(e,t,n,o)=>{const{totalRow:r,height:a}=e,l=Vr(e,t,o,"row"),s=n+a;let u=l.size+l.offset,c=t;for(;c{const n=({columnIndex:a,rowIndex:l},s)=>{var u,c;s=pn(s)?!0:s,Je(a)&&(t.value.lastVisitedColumnIndex=Math.min(t.value.lastVisitedColumnIndex,a-1)),Je(l)&&(t.value.lastVisitedRowIndex=Math.min(t.value.lastVisitedRowIndex,l-1)),(u=e.exposed)==null||u.getItemStyleCache.value(-1,null,null),s&&((c=e.proxy)==null||c.$forceUpdate())},o=(a,l)=>{n({columnIndex:a},l)},r=(a,l)=>{n({rowIndex:a},l)};Object.assign(e.proxy,{resetAfterColumnIndex:o,resetAfterRowIndex:r,resetAfter:n})},initCache:({estimatedColumnWidth:e=Gh,estimatedRowHeight:t=Gh})=>({column:{},estimatedColumnWidth:e,estimatedRowHeight:t,lastVisitedColumnIndex:-1,lastVisitedRowIndex:-1,row:{}}),clearCache:!1,validateProps:({columnWidth:e,rowHeight:t})=>{}}),bY=Y({props:{item:{type:Object,required:!0},style:Object,height:Number},setup(){return{ns:Se("select")}}});function yY(e,t,n,o,r,a){return T(),V("div",{class:N(e.ns.be("group","title")),style:je([e.style,{lineHeight:`${e.height}px`}])},le(e.item.label),7)}var wY=Ie(bY,[["render",yY],["__file","group-item.vue"]]);function _Y(e,{emit:t}){return{hoverItem:()=>{e.disabled||t("hover",e.index)},selectOptionClick:()=>{e.disabled||t("select",e.item,e.index)}}}const e2={label:"label",value:"value",disabled:"disabled",options:"options"};function Of(e){const t=k(()=>({...e2,...e.props}));return{aliasProps:t,getLabel:l=>un(l,t.value.label),getValue:l=>un(l,t.value.value),getDisabled:l=>un(l,t.value.disabled),getOptions:l=>un(l,t.value.options)}}const CY=Ne({allowCreate:Boolean,autocomplete:{type:Q(String),default:"none"},automaticDropdown:Boolean,clearable:Boolean,clearIcon:{type:Dt,default:Fa},effect:{type:Q(String),default:"light"},collapseTags:Boolean,collapseTagsTooltip:Boolean,maxCollapseTags:{type:Number,default:1},defaultFirstOption:Boolean,disabled:Boolean,estimatedOptionHeight:{type:Number,default:void 0},filterable:Boolean,filterMethod:Function,height:{type:Number,default:274},itemHeight:{type:Number,default:34},id:String,loading:Boolean,loadingText:String,modelValue:{type:Q([Array,String,Number,Boolean,Object])},multiple:Boolean,multipleLimit:{type:Number,default:0},name:String,noDataText:String,noMatchText:String,remoteMethod:Function,reserveKeyword:{type:Boolean,default:!0},options:{type:Q(Array),required:!0},placeholder:{type:String},teleported:kn.teleported,persistent:{type:Boolean,default:!0},popperClass:{type:String,default:""},popperOptions:{type:Q(Object),default:()=>({})},remote:Boolean,size:gn,props:{type:Q(Object),default:()=>e2},valueKey:{type:String,default:"value"},scrollbarAlwaysOn:Boolean,validateEvent:{type:Boolean,default:!0},placement:{type:Q(String),values:Dl,default:"bottom-start"},fallbackPlacements:{type:Q(Array),default:["bottom-start","top-start","right","left"]},tagType:{...$l.type,default:"info"},tagEffect:{...$l.effect,default:"light"},...ei,...An(["ariaLabel"])}),SY=Ne({data:Array,disabled:Boolean,hovering:Boolean,item:{type:Q(Object),required:!0},index:Number,style:Object,selected:Boolean,created:Boolean}),Eg=Symbol("ElSelectV2Injection"),kY=Y({props:SY,emits:["select","hover"],setup(e,{emit:t}){const n=De(Eg),o=Se("select"),{hoverItem:r,selectOptionClick:a}=_Y(e,{emit:t}),{getLabel:l}=Of(n.props);return{ns:o,hoverItem:r,selectOptionClick:a,getLabel:l}}}),EY=["aria-selected"];function TY(e,t,n,o,r,a){return T(),V("li",{"aria-selected":e.selected,style:je(e.style),class:N([e.ns.be("dropdown","item"),e.ns.is("selected",e.selected),e.ns.is("disabled",e.disabled),e.ns.is("created",e.created),e.ns.is("hovering",e.hovering)]),onMouseenter:t[0]||(t[0]=(...l)=>e.hoverItem&&e.hoverItem(...l)),onClick:t[1]||(t[1]=Qe((...l)=>e.selectOptionClick&&e.selectOptionClick(...l),["stop"]))},[ie(e.$slots,"default",{item:e.item,index:e.index,disabled:e.disabled},()=>[F("span",null,le(e.getLabel(e.item)),1)])],46,EY)}var $Y=Ie(kY,[["render",TY],["__file","option-item.vue"]]),OY=Y({name:"ElSelectDropdown",props:{loading:Boolean,data:{type:Array,required:!0},hoveringIndex:Number,width:Number},setup(e,{slots:t,expose:n}){const o=De(Eg),r=Se("select"),{getLabel:a,getValue:l,getDisabled:s}=Of(o.props),u=R([]),c=R(),f=k(()=>e.data.length);ve(()=>f.value,()=>{var M,D;(D=(M=o.tooltipRef.value).updatePopper)==null||D.call(M)});const d=k(()=>pn(o.props.estimatedOptionHeight)),p=k(()=>d.value?{itemSize:o.props.itemHeight}:{estimatedSize:o.props.estimatedOptionHeight,itemSize:M=>u.value[M]}),m=(M=[],D)=>{const{props:{valueKey:U}}=o;return dt(D)?M&&M.some(j=>Mt(un(j,U))===un(D,U)):M.includes(D)},v=(M,D)=>{if(dt(D)){const{valueKey:U}=o.props;return un(M,U)===un(D,U)}else return M===D},h=(M,D)=>o.props.multiple?m(M,l(D)):v(M,l(D)),C=(M,D)=>{const{disabled:U,multiple:j,multipleLimit:W}=o.props;return U||!D&&(j?W>0&&M.length>=W:!1)},g=M=>e.hoveringIndex===M;n({listRef:c,isSized:d,isItemDisabled:C,isItemHovering:g,isItemSelected:h,scrollToItem:M=>{const D=c.value;D&&D.scrollToItem(M)},resetScrollTop:()=>{const M=c.value;M&&M.resetScrollTop()}});const b=M=>{const{index:D,data:U,style:j}=M,W=i(d),{itemSize:L,estimatedSize:P}=i(p),{modelValue:x}=o.props,{onSelect:I,onHover:H}=o,G=U[D];if(G.type==="Group")return K(wY,{item:G,style:j,height:W?L:P},null);const J=h(x,G),ee=C(x,J),fe=g(D);return K($Y,mt(M,{selected:J,disabled:s(G)||ee,created:!!G.created,hovering:fe,item:G,onSelect:I,onHover:H}),{default:Te=>{var oe;return((oe=t.default)==null?void 0:oe.call(t,Te))||K("span",null,[a(G)])}})},{onKeyboardNavigate:w,onKeyboardSelect:S}=o,E=()=>{w("forward")},$=()=>{w("backward")},O=()=>{o.expanded=!1},A=M=>{const{code:D}=M,{tab:U,esc:j,down:W,up:L,enter:P}=Ue;switch(D!==U&&(M.preventDefault(),M.stopPropagation()),D){case U:case j:{O();break}case W:{E();break}case L:{$();break}case P:{S();break}}};return()=>{var M,D,U,j;const{data:W,width:L}=e,{height:P,multiple:x,scrollbarAlwaysOn:I}=o.props,H=i(d)?UE:dY;return K("div",{class:[r.b("dropdown"),r.is("multiple",x)],style:{width:`${L}px`}},[(M=t.header)==null?void 0:M.call(t),((D=t.loading)==null?void 0:D.call(t))||((U=t.empty)==null?void 0:U.call(t))||K(H,mt({ref:c},i(p),{className:r.be("dropdown","list"),scrollbarAlwaysOn:I,data:W,height:P,width:L,total:W.length,onKeydown:A}),{default:G=>K(b,G,null)}),(j=t.footer)==null?void 0:j.call(t)])}}});function NY(e,t){const{aliasProps:n,getLabel:o,getValue:r}=Of(e),a=R(0),l=R(null),s=k(()=>e.allowCreate&&e.filterable);function u(m){const v=h=>o(h)===m;return e.options&&e.options.some(v)||t.createdOptions.some(v)}function c(m){s.value&&(e.multiple&&m.created?a.value++:l.value=m)}function f(m){if(s.value)if(m&&m.length>0){if(u(m))return;const v={[n.value.value]:m,[n.value.label]:m,created:!0,[n.value.disabled]:!1};t.createdOptions.length>=a.value?t.createdOptions[a.value]=v:t.createdOptions.push(v)}else if(e.multiple)t.createdOptions.length=a.value;else{const v=l.value;t.createdOptions.length=0,v&&v.created&&t.createdOptions.push(v)}}function d(m){if(!s.value||!m||!m.created||m.created&&e.reserveKeyword&&t.inputValue===o(m))return;const v=t.createdOptions.findIndex(h=>r(h)===r(m));~v&&(t.createdOptions.splice(v,1),a.value--)}function p(){s.value&&(t.createdOptions.length=0,a.value=0)}return{createNewOption:f,removeNewOption:d,selectNewOption:c,clearAllNewOption:p}}const IY=11,MY=(e,t)=>{const{t:n}=$t(),o=Se("select"),r=Se("input"),{form:a,formItem:l}=qn(),{inputId:s}=cr(e,{formItemContext:l}),{aliasProps:u,getLabel:c,getValue:f,getDisabled:d,getOptions:p}=Of(e),{valueOnClear:m,isEmptyValue:v}=wf(e),h=Et({inputValue:"",cachedOptions:[],createdOptions:[],hoveringIndex:-1,inputHovering:!1,selectionWidth:0,calculatorWidth:0,collapseItemWidth:0,previousQuery:null,previousValue:void 0,selectedLabel:"",menuVisibleOnFocus:!1,isBeforeHide:!1}),C=R(-1),g=R(null),y=R(null),_=R(null),b=R(null),w=R(null),S=R(null),E=R(null),$=R(null),O=R(null),A=R(null),M=R(null),{wrapperRef:D,isFocused:U,handleFocus:j,handleBlur:W}=yf(w,{afterFocus(){e.automaticDropdown&&!x.value&&(x.value=!0,h.menuVisibleOnFocus=!0)},beforeBlur(Re){var it,St;return((it=_.value)==null?void 0:it.isFocusInsideContent(Re))||((St=b.value)==null?void 0:St.isFocusInsideContent(Re))},afterBlur(){x.value=!1,h.menuVisibleOnFocus=!1}}),L=R([]),P=R([]),x=R(!1),I=k(()=>e.disabled||(a==null?void 0:a.disabled)),H=k(()=>{const Re=P.value.length*e.itemHeight;return Re>e.height?e.height:Re}),G=k(()=>e.multiple?Pe(e.modelValue)&&e.modelValue.length>0:!v(e.modelValue)),J=k(()=>e.clearable&&!I.value&&h.inputHovering&&G.value),ee=k(()=>e.remote&&e.filterable?"":Nr),fe=k(()=>ee.value&&o.is("reverse",x.value)),Te=k(()=>(l==null?void 0:l.validateState)||""),oe=k(()=>Rv[Te.value]),ke=k(()=>e.remote?300:0),ae=k(()=>e.loading?e.loadingText||n("el.select.loading"):e.remote&&!h.inputValue&&L.value.length===0?!1:e.filterable&&h.inputValue&&L.value.length>0&&P.value.length===0?e.noMatchText||n("el.select.noMatch"):L.value.length===0?e.noDataText||n("el.select.noData"):null),Oe=Re=>{const it=St=>{if(e.filterable&&Xe(e.filterMethod)||e.filterable&&e.remote&&Xe(e.remoteMethod))return!0;const Ft=new RegExp($v(Re),"i");return Re?Ft.test(c(St)||""):!0};return e.loading?[]:[...h.createdOptions,...e.options].reduce((St,Ft)=>{const ko=p(Ft);if(Pe(ko)){const Lr=ko.filter(it);Lr.length>0&&St.push({label:c(Ft),type:"Group"},...Lr)}else(e.remote||it(Ft))&&St.push(Ft);return St},[])},we=()=>{L.value=Oe(""),P.value=Oe(h.inputValue)},ge=k(()=>{const Re=new Map;return L.value.forEach((it,St)=>{Re.set(Ht(f(it)),{option:it,index:St})}),Re}),q=k(()=>{const Re=new Map;return P.value.forEach((it,St)=>{Re.set(Ht(f(it)),{option:it,index:St})}),Re}),B=k(()=>P.value.every(Re=>d(Re))),z=hn(),Z=k(()=>z.value==="small"?"small":"default"),ue=()=>{var Re;C.value=((Re=g.value)==null?void 0:Re.offsetWidth)||200},se=()=>{if(!y.value)return 0;const Re=window.getComputedStyle(y.value);return Number.parseFloat(Re.gap||"6px")},me=k(()=>{const Re=se();return{maxWidth:`${M.value&&e.maxCollapseTags===1?h.selectionWidth-h.collapseItemWidth-Re:h.selectionWidth}px`}}),_e=k(()=>({maxWidth:`${h.selectionWidth}px`})),$e=k(()=>({width:`${Math.max(h.calculatorWidth,IY)}px`})),Ce=k(()=>Pe(e.modelValue)?e.modelValue.length===0&&!h.inputValue:e.filterable?!h.inputValue:!0),ce=k(()=>{var Re;const it=(Re=e.placeholder)!=null?Re:n("el.select.placeholder");return e.multiple||!G.value?it:h.selectedLabel}),de=k(()=>{var Re,it;return(it=(Re=_.value)==null?void 0:Re.popperRef)==null?void 0:it.contentRef}),xe=k(()=>{if(e.multiple){const Re=e.modelValue.length;if(e.modelValue.length>0&&q.value.has(e.modelValue[Re-1])){const{index:it}=q.value.get(e.modelValue[Re-1]);return it}}else if(e.modelValue&&q.value.has(e.modelValue)){const{index:Re}=q.value.get(e.modelValue);return Re}return-1}),he=k({get(){return x.value&&ae.value!==!1},set(Re){x.value=Re}}),He=k(()=>e.multiple?e.collapseTags?h.cachedOptions.slice(0,e.maxCollapseTags):h.cachedOptions:[]),et=k(()=>e.multiple?e.collapseTags?h.cachedOptions.slice(e.maxCollapseTags):[]:[]),{createNewOption:rt,removeNewOption:wt,selectNewOption:Ze,clearAllNewOption:st}=NY(e,h),{handleCompositionStart:Ee,handleCompositionUpdate:ye,handleCompositionEnd:ne}=RE(Re=>Wo(Re)),be=()=>{I.value||(h.menuVisibleOnFocus?h.menuVisibleOnFocus=!1:x.value=!x.value)},Fe=()=>{h.inputValue.length>0&&!x.value&&(x.value=!0),rt(h.inputValue),pe(h.inputValue)},vt=co(Fe,ke.value),pe=Re=>{h.previousQuery!==Re&&(h.previousQuery=Re,e.filterable&&Xe(e.filterMethod)?e.filterMethod(Re):e.filterable&&e.remote&&Xe(e.remoteMethod)&&e.remoteMethod(Re),e.defaultFirstOption&&(e.filterable||e.remote)&&P.value.length?We(Ye):We(ln))},Ye=()=>{const Re=P.value.filter(Ft=>!Ft.disabled&&Ft.type!=="Group"),it=Re.find(Ft=>Ft.created),St=Re[0];h.hoveringIndex=Jt(P.value,it||St)},_t=Re=>{Wn(e.modelValue,Re)||t(Yt,Re)},Kt=Re=>{t(ft,Re),_t(Re),h.previousValue=e.multiple?String(Re):Re},Jt=(Re=[],it)=>{if(!dt(it))return Re.indexOf(it);const St=e.valueKey;let Ft=-1;return Re.some((ko,Lr)=>un(ko,St)===un(it,St)?(Ft=Lr,!0):!1),Ft},Ht=Re=>dt(Re)?un(Re,e.valueKey):Re,At=()=>{ue()},Fn=()=>{h.selectionWidth=y.value.getBoundingClientRect().width},Ku=()=>{h.calculatorWidth=S.value.getBoundingClientRect().width},Uu=()=>{h.collapseItemWidth=M.value.getBoundingClientRect().width},ci=()=>{var Re,it;(it=(Re=_.value)==null?void 0:Re.updatePopper)==null||it.call(Re)},oa=()=>{var Re,it;(it=(Re=b.value)==null?void 0:Re.updatePopper)==null||it.call(Re)},qu=Re=>{if(e.multiple){let it=e.modelValue.slice();const St=Jt(it,f(Re));St>-1?(it=[...it.slice(0,St),...it.slice(St+1)],h.cachedOptions.splice(St,1),wt(Re)):(e.multipleLimit<=0||it.length{let St=e.modelValue.slice();const Ft=Jt(St,f(it));Ft>-1&&!I.value&&(St=[...e.modelValue.slice(0,Ft),...e.modelValue.slice(Ft+1)],h.cachedOptions.splice(Ft,1),Kt(St),t("remove-tag",f(it)),wt(it)),Re.stopPropagation(),Vl()},Vl=()=>{var Re;(Re=w.value)==null||Re.focus()},Yu=()=>{var Re;(Re=w.value)==null||Re.blur()},qf=()=>{h.inputValue.length>0?h.inputValue="":x.value=!1},Yf=Re=>VC(Re,it=>!h.cachedOptions.some(St=>f(St)===it&&d(St))),Gf=Re=>{if(e.multiple&&Re.code!==Ue.delete&&h.inputValue.length===0){Re.preventDefault();const it=e.modelValue.slice(),St=Yf(it);if(St<0)return;const Ft=it[St];it.splice(St,1);const ko=h.cachedOptions[St];h.cachedOptions.splice(St,1),wt(ko),Kt(it),t("remove-tag",Ft)}},Xf=()=>{let Re;Pe(e.modelValue)?Re=[]:Re=m.value,e.multiple?h.cachedOptions=[]:h.selectedLabel="",x.value=!1,Kt(Re),t("clear"),st(),Vl()},Le=(Re,it=void 0)=>{const St=P.value;if(!["forward","backward"].includes(Re)||I.value||St.length<=0||B.value)return;if(!x.value)return be();it===void 0&&(it=h.hoveringIndex);let Ft=-1;Re==="forward"?(Ft=it+1,Ft>=St.length&&(Ft=0)):Re==="backward"&&(Ft=it-1,(Ft<0||Ft>=St.length)&&(Ft=St.length-1));const ko=St[Ft];if(d(ko)||ko.type==="Group")return Le(Re,Ft);h.hoveringIndex=Ft,Ko(Ft)},ot=()=>{if(x.value)~h.hoveringIndex&&P.value[h.hoveringIndex]&&qu(P.value[h.hoveringIndex]);else return be()},Gt=Re=>{h.hoveringIndex=Re},ln=()=>{e.multiple?h.hoveringIndex=P.value.findIndex(Re=>e.modelValue.some(it=>Ht(it)===Ht(Re))):h.hoveringIndex=P.value.findIndex(Re=>Ht(Re)===Ht(e.modelValue))},Wo=Re=>{if(h.inputValue=Re.target.value,e.remote)vt();else return Fe()},ra=Re=>{if(x.value=!1,U.value){const it=new FocusEvent("focus",Re);W(it)}},Hl=()=>(h.isBeforeHide=!1,We(()=>{~xe.value&&Ko(h.hoveringIndex)})),Ko=Re=>{O.value.scrollToItem(Re)},So=Re=>{const it=Ht(Re);if(ge.value.has(it)){const{option:St}=ge.value.get(it);return St}return{[u.value.value]:Re,[u.value.label]:Re}},zl=()=>{if(e.multiple)if(e.modelValue.length>0){h.cachedOptions.length=0,h.previousValue=e.modelValue.toString();for(const Re of e.modelValue){const it=So(Re);h.cachedOptions.push(it)}}else h.cachedOptions=[],h.previousValue=void 0;else if(G.value){h.previousValue=e.modelValue;const Re=P.value,it=Re.findIndex(St=>Ht(f(St))===Ht(e.modelValue));~it?h.selectedLabel=c(Re[it]):h.selectedLabel=Ht(e.modelValue)}else h.selectedLabel="",h.previousValue=void 0;st(),ue()};return ve(x,Re=>{Re?pe(""):(h.inputValue="",h.previousQuery=null,h.isBeforeHide=!0,rt("")),t("visible-change",Re)}),ve(()=>e.modelValue,(Re,it)=>{var St;(!Re||e.multiple&&Re.toString()!==h.previousValue||!e.multiple&&Ht(Re)!==Ht(h.previousValue))&&zl(),!Wn(Re,it)&&e.validateEvent&&((St=l==null?void 0:l.validate)==null||St.call(l,"change").catch(Ft=>void 0))},{deep:!0}),ve(()=>e.options,()=>{const Re=w.value;(!Re||Re&&document.activeElement!==Re)&&zl()},{deep:!0,flush:"post"}),ve(()=>P.value,()=>O.value&&We(O.value.resetScrollTop)),Mn(()=>{h.isBeforeHide||we()}),Mn(()=>{const{valueKey:Re,options:it}=e,St=new Map;for(const Ft of it){const ko=f(Ft);let Lr=ko;if(dt(Lr)&&(Lr=un(ko,Re)),St.get(Lr))break;St.set(Lr,!0)}}),at(()=>{zl()}),Qt(g,At),Qt(y,Fn),Qt(S,Ku),Qt(O,ci),Qt(D,ci),Qt(A,oa),Qt(M,Uu),{inputId:s,collapseTagSize:Z,currentPlaceholder:ce,expanded:x,emptyText:ae,popupHeight:H,debounce:ke,allOptions:L,filteredOptions:P,iconComponent:ee,iconReverse:fe,tagStyle:me,collapseTagStyle:_e,inputStyle:$e,popperSize:C,dropdownMenuVisible:he,hasModelValue:G,shouldShowPlaceholder:Ce,selectDisabled:I,selectSize:z,showClearBtn:J,states:h,isFocused:U,nsSelect:o,nsInput:r,calculatorRef:S,inputRef:w,menuRef:O,tagMenuRef:A,tooltipRef:_,tagTooltipRef:b,selectRef:g,wrapperRef:D,selectionRef:y,prefixRef:E,suffixRef:$,collapseItemRef:M,popperRef:de,validateState:Te,validateIcon:oe,showTagList:He,collapseTagList:et,debouncedOnInputChange:vt,deleteTag:Uf,getLabel:c,getValue:f,getDisabled:d,getValueKey:Ht,handleBlur:W,handleClear:Xf,handleClickOutside:ra,handleDel:Gf,handleEsc:qf,handleFocus:j,focus:Vl,blur:Yu,handleMenuEnter:Hl,handleResize:At,resetSelectionWidth:Fn,resetCalculatorWidth:Ku,updateTooltip:ci,updateTagTooltip:oa,updateOptions:we,toggleMenu:be,scrollTo:Ko,onInput:Wo,onKeyboardNavigate:Le,onKeyboardSelect:ot,onSelect:qu,onHover:Gt,handleCompositionStart:Ee,handleCompositionEnd:ne,handleCompositionUpdate:ye}},AY=Y({name:"ElSelectV2",components:{ElSelectMenu:OY,ElTag:su,ElTooltip:Un,ElIcon:ze},directives:{ClickOutside:Yr},props:CY,emits:[ft,Yt,"remove-tag","clear","visible-change","focus","blur"],setup(e,{emit:t}){const n=k(()=>{const{modelValue:r,multiple:a}=e,l=a?[]:void 0;return Pe(r)?a?r:l:a?l:r}),o=MY(Et({...Cn(e),modelValue:n}),t);return yt(Eg,{props:Et({...Cn(e),height:o.popupHeight,modelValue:n}),tooltipRef:o.tooltipRef,onSelect:o.onSelect,onHover:o.onHover,onKeyboardNavigate:o.onKeyboardNavigate,onKeyboardSelect:o.onKeyboardSelect}),{...o,modelValue:n}}}),PY=["id","autocomplete","aria-expanded","aria-label","disabled","readonly","name"],RY=["textContent"],LY={key:1};function xY(e,t,n,o,r,a){const l=qe("el-tag"),s=qe("el-tooltip"),u=qe("el-icon"),c=qe("el-select-menu"),f=qs("click-outside");return tt((T(),V("div",{ref:"selectRef",class:N([e.nsSelect.b(),e.nsSelect.m(e.selectSize)]),onMouseenter:t[15]||(t[15]=d=>e.states.inputHovering=!0),onMouseleave:t[16]||(t[16]=d=>e.states.inputHovering=!1)},[K(s,{ref:"tooltipRef",visible:e.dropdownMenuVisible,teleported:e.teleported,"popper-class":[e.nsSelect.e("popper"),e.popperClass],"gpu-acceleration":!1,"stop-popper-mouse-event":!1,"popper-options":e.popperOptions,"fallback-placements":e.fallbackPlacements,effect:e.effect,placement:e.placement,pure:"",transition:`${e.nsSelect.namespace.value}-zoom-in-top`,trigger:"click",persistent:e.persistent,onBeforeShow:e.handleMenuEnter,onHide:t[14]||(t[14]=d=>e.states.isBeforeHide=!1)},{default:X(()=>[F("div",{ref:"wrapperRef",class:N([e.nsSelect.e("wrapper"),e.nsSelect.is("focused",e.isFocused),e.nsSelect.is("hovering",e.states.inputHovering),e.nsSelect.is("filterable",e.filterable),e.nsSelect.is("disabled",e.selectDisabled)]),onClick:t[13]||(t[13]=Qe((...d)=>e.toggleMenu&&e.toggleMenu(...d),["prevent","stop"]))},[e.$slots.prefix?(T(),V("div",{key:0,ref:"prefixRef",class:N(e.nsSelect.e("prefix"))},[ie(e.$slots,"prefix")],2)):te("v-if",!0),F("div",{ref:"selectionRef",class:N([e.nsSelect.e("selection"),e.nsSelect.is("near",e.multiple&&!e.$slots.prefix&&!!e.modelValue.length)])},[e.multiple?ie(e.$slots,"tag",{key:0},()=>[(T(!0),V(Ve,null,bt(e.showTagList,d=>(T(),V("div",{key:e.getValueKey(e.getValue(d)),class:N(e.nsSelect.e("selected-item"))},[K(l,{closable:!e.selectDisabled&&!e.getDisabled(d),size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",style:je(e.tagStyle),onClose:p=>e.deleteTag(p,d)},{default:X(()=>[F("span",{class:N(e.nsSelect.e("tags-text"))},[ie(e.$slots,"label",{label:e.getLabel(d),value:e.getValue(d)},()=>[Ge(le(e.getLabel(d)),1)])],2)]),_:2},1032,["closable","size","type","effect","style","onClose"])],2))),128)),e.collapseTags&&e.modelValue.length>e.maxCollapseTags?(T(),re(s,{key:0,ref:"tagTooltipRef",disabled:e.dropdownMenuVisible||!e.collapseTagsTooltip,"fallback-placements":["bottom","top","right","left"],effect:e.effect,placement:"bottom",teleported:e.teleported},{default:X(()=>[F("div",{ref:"collapseItemRef",class:N(e.nsSelect.e("selected-item"))},[K(l,{closable:!1,size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,style:je(e.collapseTagStyle),"disable-transitions":""},{default:X(()=>[F("span",{class:N(e.nsSelect.e("tags-text"))}," + "+le(e.modelValue.length-e.maxCollapseTags),3)]),_:1},8,["size","type","effect","style"])],2)]),content:X(()=>[F("div",{ref:"tagMenuRef",class:N(e.nsSelect.e("selection"))},[(T(!0),V(Ve,null,bt(e.collapseTagList,d=>(T(),V("div",{key:e.getValueKey(e.getValue(d)),class:N(e.nsSelect.e("selected-item"))},[K(l,{class:"in-tooltip",closable:!e.selectDisabled&&!e.getDisabled(d),size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",onClose:p=>e.deleteTag(p,d)},{default:X(()=>[F("span",{class:N(e.nsSelect.e("tags-text"))},[ie(e.$slots,"label",{label:e.getLabel(d),value:e.getValue(d)},()=>[Ge(le(e.getLabel(d)),1)])],2)]),_:2},1032,["closable","size","type","effect","onClose"])],2))),128))],2)]),_:3},8,["disabled","effect","teleported"])):te("v-if",!0)]):te("v-if",!0),e.selectDisabled?te("v-if",!0):(T(),V("div",{key:1,class:N([e.nsSelect.e("selected-item"),e.nsSelect.e("input-wrapper"),e.nsSelect.is("hidden",!e.filterable)])},[tt(F("input",{id:e.inputId,ref:"inputRef","onUpdate:modelValue":t[0]||(t[0]=d=>e.states.inputValue=d),style:je(e.inputStyle),autocomplete:e.autocomplete,"aria-autocomplete":"list","aria-haspopup":"listbox",autocapitalize:"off","aria-expanded":e.expanded,"aria-label":e.ariaLabel,class:N([e.nsSelect.e("input"),e.nsSelect.is(e.selectSize)]),disabled:e.selectDisabled,role:"combobox",readonly:!e.filterable,spellcheck:"false",type:"text",name:e.name,onFocus:t[1]||(t[1]=(...d)=>e.handleFocus&&e.handleFocus(...d)),onBlur:t[2]||(t[2]=(...d)=>e.handleBlur&&e.handleBlur(...d)),onInput:t[3]||(t[3]=(...d)=>e.onInput&&e.onInput(...d)),onCompositionstart:t[4]||(t[4]=(...d)=>e.handleCompositionStart&&e.handleCompositionStart(...d)),onCompositionupdate:t[5]||(t[5]=(...d)=>e.handleCompositionUpdate&&e.handleCompositionUpdate(...d)),onCompositionend:t[6]||(t[6]=(...d)=>e.handleCompositionEnd&&e.handleCompositionEnd(...d)),onKeydown:[t[7]||(t[7]=Pt(Qe(d=>e.onKeyboardNavigate("backward"),["stop","prevent"]),["up"])),t[8]||(t[8]=Pt(Qe(d=>e.onKeyboardNavigate("forward"),["stop","prevent"]),["down"])),t[9]||(t[9]=Pt(Qe((...d)=>e.onKeyboardSelect&&e.onKeyboardSelect(...d),["stop","prevent"]),["enter"])),t[10]||(t[10]=Pt(Qe((...d)=>e.handleEsc&&e.handleEsc(...d),["stop","prevent"]),["esc"])),t[11]||(t[11]=Pt(Qe((...d)=>e.handleDel&&e.handleDel(...d),["stop"]),["delete"]))],onClick:t[12]||(t[12]=Qe((...d)=>e.toggleMenu&&e.toggleMenu(...d),["stop"]))},null,46,PY),[[yl,e.states.inputValue]]),e.filterable?(T(),V("span",{key:0,ref:"calculatorRef","aria-hidden":"true",class:N(e.nsSelect.e("input-calculator")),textContent:le(e.states.inputValue)},null,10,RY)):te("v-if",!0)],2)),e.shouldShowPlaceholder?(T(),V("div",{key:2,class:N([e.nsSelect.e("selected-item"),e.nsSelect.e("placeholder"),e.nsSelect.is("transparent",!e.hasModelValue||e.expanded&&!e.states.inputValue)])},[e.hasModelValue?ie(e.$slots,"label",{key:0,label:e.currentPlaceholder,value:e.modelValue},()=>[F("span",null,le(e.currentPlaceholder),1)]):(T(),V("span",LY,le(e.currentPlaceholder),1))],2)):te("v-if",!0)],2),F("div",{ref:"suffixRef",class:N(e.nsSelect.e("suffix"))},[e.iconComponent?tt((T(),re(u,{key:0,class:N([e.nsSelect.e("caret"),e.nsInput.e("icon"),e.iconReverse])},{default:X(()=>[(T(),re(pt(e.iconComponent)))]),_:1},8,["class"])),[[kt,!e.showClearBtn]]):te("v-if",!0),e.showClearBtn&&e.clearIcon?(T(),re(u,{key:1,class:N([e.nsSelect.e("caret"),e.nsInput.e("icon")]),onClick:Qe(e.handleClear,["prevent","stop"])},{default:X(()=>[(T(),re(pt(e.clearIcon)))]),_:1},8,["class","onClick"])):te("v-if",!0),e.validateState&&e.validateIcon?(T(),re(u,{key:2,class:N([e.nsInput.e("icon"),e.nsInput.e("validateIcon")])},{default:X(()=>[(T(),re(pt(e.validateIcon)))]),_:1},8,["class"])):te("v-if",!0)],2)],2)]),content:X(()=>[K(c,{ref:"menuRef",data:e.filteredOptions,width:e.popperSize,"hovering-index":e.states.hoveringIndex,"scrollbar-always-on":e.scrollbarAlwaysOn},Sr({default:X(d=>[ie(e.$slots,"default",vr(bl(d)))]),_:2},[e.$slots.header?{name:"header",fn:X(()=>[F("div",{class:N(e.nsSelect.be("dropdown","header"))},[ie(e.$slots,"header")],2)])}:void 0,e.$slots.loading&&e.loading?{name:"loading",fn:X(()=>[F("div",{class:N(e.nsSelect.be("dropdown","loading"))},[ie(e.$slots,"loading")],2)])}:e.loading||e.filteredOptions.length===0?{name:"empty",fn:X(()=>[F("div",{class:N(e.nsSelect.be("dropdown","empty"))},[ie(e.$slots,"empty",{},()=>[F("span",null,le(e.emptyText),1)])],2)])}:void 0,e.$slots.footer?{name:"footer",fn:X(()=>[F("div",{class:N(e.nsSelect.be("dropdown","footer"))},[ie(e.$slots,"footer")],2)])}:void 0]),1032,["data","width","hovering-index","scrollbar-always-on"])]),_:3},8,["visible","teleported","popper-class","popper-options","fallback-placements","effect","placement","transition","persistent","onBeforeShow"])],34)),[[f,e.handleClickOutside,e.popperRef]])}var Wc=Ie(AY,[["render",xY],["__file","select.vue"]]);Wc.install=e=>{e.component(Wc.name,Wc)};const DY=Wc,FY=DY,BY=Ne({animated:{type:Boolean,default:!1},count:{type:Number,default:1},rows:{type:Number,default:3},loading:{type:Boolean,default:!0},throttle:{type:Number}}),VY=Ne({variant:{type:String,values:["circle","rect","h1","h3","text","caption","p","image","button"],default:"text"}}),HY=Y({name:"ElSkeletonItem"}),zY=Y({...HY,props:VY,setup(e){const t=Se("skeleton");return(n,o)=>(T(),V("div",{class:N([i(t).e("item"),i(t).e(n.variant)])},[n.variant==="image"?(T(),re(i(R4),{key:0})):te("v-if",!0)],2))}});var Nd=Ie(zY,[["__file","skeleton-item.vue"]]);const jY=Y({name:"ElSkeleton"}),WY=Y({...jY,props:BY,setup(e,{expose:t}){const n=e,o=Se("skeleton"),r=$D(Lt(n,"loading"),n.throttle);return t({uiLoading:r}),(a,l)=>i(r)?(T(),V("div",mt({key:0,class:[i(o).b(),i(o).is("animated",a.animated)]},a.$attrs),[(T(!0),V(Ve,null,bt(a.count,s=>(T(),V(Ve,{key:s},[a.loading?ie(a.$slots,"template",{key:s},()=>[K(Nd,{class:N(i(o).is("first")),variant:"p"},null,8,["class"]),(T(!0),V(Ve,null,bt(a.rows,u=>(T(),re(Nd,{key:u,class:N([i(o).e("paragraph"),i(o).is("last",u===a.rows&&a.rows>1)]),variant:"p"},null,8,["class"]))),128))]):te("v-if",!0)],64))),128))],16)):ie(a.$slots,"default",vr(mt({key:1},a.$attrs)))}});var KY=Ie(WY,[["__file","skeleton.vue"]]);const UY=ut(KY,{SkeletonItem:Nd}),qY=tn(Nd),t2=Symbol("sliderContextKey"),YY=Ne({modelValue:{type:Q([Number,Array]),default:0},id:{type:String,default:void 0},min:{type:Number,default:0},max:{type:Number,default:100},step:{type:Number,default:1},showInput:Boolean,showInputControls:{type:Boolean,default:!0},size:gn,inputSize:gn,showStops:Boolean,showTooltip:{type:Boolean,default:!0},formatTooltip:{type:Q(Function),default:void 0},disabled:Boolean,range:Boolean,vertical:Boolean,height:String,debounce:{type:Number,default:300},label:{type:String,default:void 0},rangeStartLabel:{type:String,default:void 0},rangeEndLabel:{type:String,default:void 0},formatValueText:{type:Q(Function),default:void 0},tooltipClass:{type:String,default:void 0},placement:{type:String,values:Dl,default:"top"},marks:{type:Q(Object)},validateEvent:{type:Boolean,default:!0},...An(["ariaLabel"])}),Tp=e=>Je(e)||Pe(e)&&e.every(Je),GY={[ft]:Tp,[Zn]:Tp,[Yt]:Tp},XY=(e,t,n)=>{const o=R();return at(async()=>{e.range?(Array.isArray(e.modelValue)?(t.firstValue=Math.max(e.min,e.modelValue[0]),t.secondValue=Math.min(e.max,e.modelValue[1])):(t.firstValue=e.min,t.secondValue=e.max),t.oldValue=[t.firstValue,t.secondValue]):(typeof e.modelValue!="number"||Number.isNaN(e.modelValue)?t.firstValue=e.min:t.firstValue=Math.min(e.max,Math.max(e.min,e.modelValue)),t.oldValue=t.firstValue),qt(window,"resize",n),await We(),n()}),{sliderWrapper:o}},JY=e=>k(()=>e.marks?Object.keys(e.marks).map(Number.parseFloat).sort((n,o)=>n-o).filter(n=>n<=e.max&&n>=e.min).map(n=>({point:n,position:(n-e.min)*100/(e.max-e.min),mark:e.marks[n]})):[]),ZY=(e,t,n)=>{const{form:o,formItem:r}=qn(),a=Ut(),l=R(),s=R(),u={firstButton:l,secondButton:s},c=k(()=>e.disabled||(o==null?void 0:o.disabled)||!1),f=k(()=>Math.min(t.firstValue,t.secondValue)),d=k(()=>Math.max(t.firstValue,t.secondValue)),p=k(()=>e.range?`${100*(d.value-f.value)/(e.max-e.min)}%`:`${100*(t.firstValue-e.min)/(e.max-e.min)}%`),m=k(()=>e.range?`${100*(f.value-e.min)/(e.max-e.min)}%`:"0%"),v=k(()=>e.vertical?{height:e.height}:{}),h=k(()=>e.vertical?{height:p.value,bottom:m.value}:{width:p.value,left:m.value}),C=()=>{a.value&&(t.sliderSize=a.value[`client${e.vertical?"Height":"Width"}`])},g=M=>{const D=e.min+M*(e.max-e.min)/100;if(!e.range)return l;let U;return Math.abs(f.value-D)t.secondValue?"firstButton":"secondButton",u[U]},y=M=>{const D=g(M);return D.value.setPosition(M),D},_=M=>{t.firstValue=M,w(e.range?[f.value,d.value]:M)},b=M=>{t.secondValue=M,e.range&&w([f.value,d.value])},w=M=>{n(ft,M),n(Zn,M)},S=async()=>{await We(),n(Yt,e.range?[f.value,d.value]:e.modelValue)},E=M=>{var D,U,j,W,L,P;if(c.value||t.dragging)return;C();let x=0;if(e.vertical){const I=(j=(U=(D=M.touches)==null?void 0:D.item(0))==null?void 0:U.clientY)!=null?j:M.clientY;x=(a.value.getBoundingClientRect().bottom-I)/t.sliderSize*100}else{const I=(P=(L=(W=M.touches)==null?void 0:W.item(0))==null?void 0:L.clientX)!=null?P:M.clientX,H=a.value.getBoundingClientRect().left;x=(I-H)/t.sliderSize*100}if(!(x<0||x>100))return y(x)};return{elFormItem:r,slider:a,firstButton:l,secondButton:s,sliderDisabled:c,minValue:f,maxValue:d,runwayStyle:v,barStyle:h,resetSize:C,setPosition:y,emitChange:S,onSliderWrapperPrevent:M=>{var D,U;((D=u.firstButton.value)!=null&&D.dragging||(U=u.secondButton.value)!=null&&U.dragging)&&M.preventDefault()},onSliderClick:M=>{E(M)&&S()},onSliderDown:async M=>{const D=E(M);D&&(await We(),D.value.onButtonDown(M))},setFirstValue:_,setSecondValue:b}},{left:QY,down:eG,right:tG,up:nG,home:oG,end:rG,pageUp:aG,pageDown:lG}=Ue,sG=(e,t,n)=>{const o=R(),r=R(!1),a=k(()=>t.value instanceof Function),l=k(()=>a.value&&t.value(e.modelValue)||e.modelValue),s=co(()=>{n.value&&(r.value=!0)},50),u=co(()=>{n.value&&(r.value=!1)},50);return{tooltip:o,tooltipVisible:r,formatValue:l,displayTooltip:s,hideTooltip:u}},iG=(e,t,n)=>{const{disabled:o,min:r,max:a,step:l,showTooltip:s,precision:u,sliderSize:c,formatTooltip:f,emitChange:d,resetSize:p,updateDragging:m}=De(t2),{tooltip:v,tooltipVisible:h,formatValue:C,displayTooltip:g,hideTooltip:y}=sG(e,f,s),_=R(),b=k(()=>`${(e.modelValue-r.value)/(a.value-r.value)*100}%`),w=k(()=>e.vertical?{bottom:b.value}:{left:b.value}),S=()=>{t.hovering=!0,g()},E=()=>{t.hovering=!1,t.dragging||y()},$=J=>{o.value||(J.preventDefault(),x(J),window.addEventListener("mousemove",I),window.addEventListener("touchmove",I),window.addEventListener("mouseup",H),window.addEventListener("touchend",H),window.addEventListener("contextmenu",H),_.value.focus())},O=J=>{o.value||(t.newPosition=Number.parseFloat(b.value)+J/(a.value-r.value)*100,G(t.newPosition),d())},A=()=>{O(-l.value)},M=()=>{O(l.value)},D=()=>{O(-l.value*4)},U=()=>{O(l.value*4)},j=()=>{o.value||(G(0),d())},W=()=>{o.value||(G(100),d())},L=J=>{let ee=!0;[QY,eG].includes(J.key)?A():[tG,nG].includes(J.key)?M():J.key===oG?j():J.key===rG?W():J.key===lG?D():J.key===aG?U():ee=!1,ee&&J.preventDefault()},P=J=>{let ee,fe;return J.type.startsWith("touch")?(fe=J.touches[0].clientY,ee=J.touches[0].clientX):(fe=J.clientY,ee=J.clientX),{clientX:ee,clientY:fe}},x=J=>{t.dragging=!0,t.isClick=!0;const{clientX:ee,clientY:fe}=P(J);e.vertical?t.startY=fe:t.startX=ee,t.startPosition=Number.parseFloat(b.value),t.newPosition=t.startPosition},I=J=>{if(t.dragging){t.isClick=!1,g(),p();let ee;const{clientX:fe,clientY:Te}=P(J);e.vertical?(t.currentY=Te,ee=(t.startY-t.currentY)/c.value*100):(t.currentX=fe,ee=(t.currentX-t.startX)/c.value*100),t.newPosition=t.startPosition+ee,G(t.newPosition)}},H=()=>{t.dragging&&(setTimeout(()=>{t.dragging=!1,t.hovering||y(),t.isClick||G(t.newPosition),d()},0),window.removeEventListener("mousemove",I),window.removeEventListener("touchmove",I),window.removeEventListener("mouseup",H),window.removeEventListener("touchend",H),window.removeEventListener("contextmenu",H))},G=async J=>{if(J===null||Number.isNaN(+J))return;J<0?J=0:J>100&&(J=100);const ee=100/((a.value-r.value)/l.value);let Te=Math.round(J/ee)*ee*(a.value-r.value)*.01+r.value;Te=Number.parseFloat(Te.toFixed(u.value)),Te!==e.modelValue&&n(ft,Te),!t.dragging&&e.modelValue!==t.oldValue&&(t.oldValue=e.modelValue),await We(),t.dragging&&g(),v.value.updatePopper()};return ve(()=>t.dragging,J=>{m(J)}),{disabled:o,button:_,tooltip:v,tooltipVisible:h,showTooltip:s,wrapperStyle:w,formatValue:C,handleMouseEnter:S,handleMouseLeave:E,onButtonDown:$,onKeyDown:L,setPosition:G}},uG=(e,t,n,o)=>({stops:k(()=>{if(!e.showStops||e.min>e.max)return[];if(e.step===0)return[];const l=(e.max-e.min)/e.step,s=100*e.step/(e.max-e.min),u=Array.from({length:l-1}).map((c,f)=>(f+1)*s);return e.range?u.filter(c=>c<100*(n.value-e.min)/(e.max-e.min)||c>100*(o.value-e.min)/(e.max-e.min)):u.filter(c=>c>100*(t.firstValue-e.min)/(e.max-e.min))}),getStopStyle:l=>e.vertical?{bottom:`${l}%`}:{left:`${l}%`}}),cG=(e,t,n,o,r,a)=>{const l=c=>{r(ft,c),r(Zn,c)},s=()=>e.range?![n.value,o.value].every((c,f)=>c===t.oldValue[f]):e.modelValue!==t.oldValue,u=()=>{var c,f;e.min>e.max&&vn("Slider","min should not be greater than max.");const d=e.modelValue;e.range&&Array.isArray(d)?d[1]e.max?l([e.max,e.max]):d[0]e.max?l([d[0],e.max]):(t.firstValue=d[0],t.secondValue=d[1],s()&&(e.validateEvent&&((c=a==null?void 0:a.validate)==null||c.call(a,"change").catch(p=>void 0)),t.oldValue=d.slice())):!e.range&&typeof d=="number"&&!Number.isNaN(d)&&(de.max?l(e.max):(t.firstValue=d,s()&&(e.validateEvent&&((f=a==null?void 0:a.validate)==null||f.call(a,"change").catch(p=>void 0)),t.oldValue=d)))};u(),ve(()=>t.dragging,c=>{c||u()}),ve(()=>e.modelValue,(c,f)=>{t.dragging||Array.isArray(c)&&Array.isArray(f)&&c.every((d,p)=>d===f[p])&&t.firstValue===c[0]&&t.secondValue===c[1]||u()},{deep:!0}),ve(()=>[e.min,e.max],()=>{u()})},dG=Ne({modelValue:{type:Number,default:0},vertical:Boolean,tooltipClass:String,placement:{type:String,values:Dl,default:"top"}}),fG={[ft]:e=>Je(e)},pG=["tabindex"],hG=Y({name:"ElSliderButton"}),mG=Y({...hG,props:dG,emits:fG,setup(e,{expose:t,emit:n}){const o=e,r=Se("slider"),a=Et({hovering:!1,dragging:!1,isClick:!1,startX:0,currentX:0,startY:0,currentY:0,startPosition:0,newPosition:0,oldValue:o.modelValue}),{disabled:l,button:s,tooltip:u,showTooltip:c,tooltipVisible:f,wrapperStyle:d,formatValue:p,handleMouseEnter:m,handleMouseLeave:v,onButtonDown:h,onKeyDown:C,setPosition:g}=iG(o,a,n),{hovering:y,dragging:_}=Cn(a);return t({onButtonDown:h,onKeyDown:C,setPosition:g,hovering:y,dragging:_}),(b,w)=>(T(),V("div",{ref_key:"button",ref:s,class:N([i(r).e("button-wrapper"),{hover:i(y),dragging:i(_)}]),style:je(i(d)),tabindex:i(l)?-1:0,onMouseenter:w[0]||(w[0]=(...S)=>i(m)&&i(m)(...S)),onMouseleave:w[1]||(w[1]=(...S)=>i(v)&&i(v)(...S)),onMousedown:w[2]||(w[2]=(...S)=>i(h)&&i(h)(...S)),onTouchstart:w[3]||(w[3]=(...S)=>i(h)&&i(h)(...S)),onFocus:w[4]||(w[4]=(...S)=>i(m)&&i(m)(...S)),onBlur:w[5]||(w[5]=(...S)=>i(v)&&i(v)(...S)),onKeydown:w[6]||(w[6]=(...S)=>i(C)&&i(C)(...S))},[K(i(Un),{ref_key:"tooltip",ref:u,visible:i(f),placement:b.placement,"fallback-placements":["top","bottom","right","left"],"stop-popper-mouse-event":!1,"popper-class":b.tooltipClass,disabled:!i(c),persistent:""},{content:X(()=>[F("span",null,le(i(p)),1)]),default:X(()=>[F("div",{class:N([i(r).e("button"),{hover:i(y),dragging:i(_)}])},null,2)]),_:1},8,["visible","placement","popper-class","disabled"])],46,pG))}});var f1=Ie(mG,[["__file","button.vue"]]);const vG=Ne({mark:{type:Q([String,Object]),default:void 0}});var gG=Y({name:"ElSliderMarker",props:vG,setup(e){const t=Se("slider"),n=k(()=>nt(e.mark)?e.mark:e.mark.label),o=k(()=>nt(e.mark)?void 0:e.mark.style);return()=>Ke("div",{class:t.e("marks-text"),style:o.value},n.value)}});const bG=["id","role","aria-label","aria-labelledby"],yG={key:1},wG=Y({name:"ElSlider"}),_G=Y({...wG,props:YY,emits:GY,setup(e,{expose:t,emit:n}){const o=e,r=Se("slider"),{t:a}=$t(),l=Et({firstValue:0,secondValue:0,oldValue:0,dragging:!1,sliderSize:1}),{elFormItem:s,slider:u,firstButton:c,secondButton:f,sliderDisabled:d,minValue:p,maxValue:m,runwayStyle:v,barStyle:h,resetSize:C,emitChange:g,onSliderWrapperPrevent:y,onSliderClick:_,onSliderDown:b,setFirstValue:w,setSecondValue:S}=ZY(o,l,n),{stops:E,getStopStyle:$}=uG(o,l,p,m),{inputId:O,isLabeledByFormItem:A}=cr(o,{formItemContext:s}),M=hn(),D=k(()=>o.inputSize||M.value),U=k(()=>o.label||o.ariaLabel||a("el.slider.defaultLabel",{min:o.min,max:o.max})),j=k(()=>o.range?o.rangeStartLabel||a("el.slider.defaultRangeStartLabel"):U.value),W=k(()=>o.formatValueText?o.formatValueText(J.value):`${J.value}`),L=k(()=>o.rangeEndLabel||a("el.slider.defaultRangeEndLabel")),P=k(()=>o.formatValueText?o.formatValueText(ee.value):`${ee.value}`),x=k(()=>[r.b(),r.m(M.value),r.is("vertical",o.vertical),{[r.m("with-input")]:o.showInput}]),I=JY(o);cG(o,l,p,m,n,s);const H=k(()=>{const oe=[o.min,o.max,o.step].map(ke=>{const ae=`${ke}`.split(".")[1];return ae?ae.length:0});return Math.max.apply(null,oe)}),{sliderWrapper:G}=XY(o,l,C),{firstValue:J,secondValue:ee,sliderSize:fe}=Cn(l),Te=oe=>{l.dragging=oe};return yt(t2,{...Cn(o),sliderSize:fe,disabled:d,precision:H,emitChange:g,resetSize:C,updateDragging:Te}),wn({from:"label",replacement:"aria-label",version:"2.8.0",scope:"el-slider",ref:"https://element-plus.org/en-US/component/slider.html"},k(()=>!!o.label)),t({onSliderClick:_}),(oe,ke)=>{var ae,Oe;return T(),V("div",{id:oe.range?i(O):void 0,ref_key:"sliderWrapper",ref:G,class:N(i(x)),role:oe.range?"group":void 0,"aria-label":oe.range&&!i(A)?i(U):void 0,"aria-labelledby":oe.range&&i(A)?(ae=i(s))==null?void 0:ae.labelId:void 0,onTouchstart:ke[2]||(ke[2]=(...we)=>i(y)&&i(y)(...we)),onTouchmove:ke[3]||(ke[3]=(...we)=>i(y)&&i(y)(...we))},[F("div",{ref_key:"slider",ref:u,class:N([i(r).e("runway"),{"show-input":oe.showInput&&!oe.range},i(r).is("disabled",i(d))]),style:je(i(v)),onMousedown:ke[0]||(ke[0]=(...we)=>i(b)&&i(b)(...we)),onTouchstart:ke[1]||(ke[1]=(...we)=>i(b)&&i(b)(...we))},[F("div",{class:N(i(r).e("bar")),style:je(i(h))},null,6),K(f1,{id:oe.range?void 0:i(O),ref_key:"firstButton",ref:c,"model-value":i(J),vertical:oe.vertical,"tooltip-class":oe.tooltipClass,placement:oe.placement,role:"slider","aria-label":oe.range||!i(A)?i(j):void 0,"aria-labelledby":!oe.range&&i(A)?(Oe=i(s))==null?void 0:Oe.labelId:void 0,"aria-valuemin":oe.min,"aria-valuemax":oe.range?i(ee):oe.max,"aria-valuenow":i(J),"aria-valuetext":i(W),"aria-orientation":oe.vertical?"vertical":"horizontal","aria-disabled":i(d),"onUpdate:modelValue":i(w)},null,8,["id","model-value","vertical","tooltip-class","placement","aria-label","aria-labelledby","aria-valuemin","aria-valuemax","aria-valuenow","aria-valuetext","aria-orientation","aria-disabled","onUpdate:modelValue"]),oe.range?(T(),re(f1,{key:0,ref_key:"secondButton",ref:f,"model-value":i(ee),vertical:oe.vertical,"tooltip-class":oe.tooltipClass,placement:oe.placement,role:"slider","aria-label":i(L),"aria-valuemin":i(J),"aria-valuemax":oe.max,"aria-valuenow":i(ee),"aria-valuetext":i(P),"aria-orientation":oe.vertical?"vertical":"horizontal","aria-disabled":i(d),"onUpdate:modelValue":i(S)},null,8,["model-value","vertical","tooltip-class","placement","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","aria-valuetext","aria-orientation","aria-disabled","onUpdate:modelValue"])):te("v-if",!0),oe.showStops?(T(),V("div",yG,[(T(!0),V(Ve,null,bt(i(E),(we,ge)=>(T(),V("div",{key:ge,class:N(i(r).e("stop")),style:je(i($)(we))},null,6))),128))])):te("v-if",!0),i(I).length>0?(T(),V(Ve,{key:2},[F("div",null,[(T(!0),V(Ve,null,bt(i(I),(we,ge)=>(T(),V("div",{key:ge,style:je(i($)(we.position)),class:N([i(r).e("stop"),i(r).e("marks-stop")])},null,6))),128))]),F("div",{class:N(i(r).e("marks"))},[(T(!0),V(Ve,null,bt(i(I),(we,ge)=>(T(),re(i(gG),{key:ge,mark:we.mark,style:je(i($)(we.position))},null,8,["mark","style"]))),128))],2)],64)):te("v-if",!0)],38),oe.showInput&&!oe.range?(T(),re(i($E),{key:0,ref:"input","model-value":i(J),class:N(i(r).e("input")),step:oe.step,disabled:i(d),controls:oe.showInputControls,min:oe.min,max:oe.max,debounce:oe.debounce,size:i(D),"onUpdate:modelValue":i(w),onChange:i(g)},null,8,["model-value","class","step","disabled","controls","min","max","debounce","size","onUpdate:modelValue","onChange"])):te("v-if",!0)],42,bG)}}});var CG=Ie(_G,[["__file","slider.vue"]]);const SG=ut(CG),kG=Ne({prefixCls:{type:String}}),p1=Y({name:"ElSpaceItem",props:kG,setup(e,{slots:t}){const n=Se("space"),o=k(()=>`${e.prefixCls||n.b()}__item`);return()=>Ke("div",{class:o.value},ie(t,"default"))}}),h1={small:8,default:12,large:16};function EG(e){const t=Se("space"),n=k(()=>[t.b(),t.m(e.direction),e.class]),o=R(0),r=R(0),a=k(()=>{const s=e.wrap||e.fill?{flexWrap:"wrap"}:{},u={alignItems:e.alignment},c={rowGap:`${r.value}px`,columnGap:`${o.value}px`};return[s,u,c,e.style]}),l=k(()=>e.fill?{flexGrow:1,minWidth:`${e.fillRatio}%`}:{});return Mn(()=>{const{size:s="small",wrap:u,direction:c,fill:f}=e;if(Pe(s)){const[d=0,p=0]=s;o.value=d,r.value=p}else{let d;Je(s)?d=s:d=h1[s||"small"]||h1.small,(u||f)&&c==="horizontal"?o.value=r.value=d:c==="horizontal"?(o.value=d,r.value=0):(r.value=d,o.value=0)}}),{classes:n,containerStyle:a,itemStyle:l}}const TG=Ne({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},class:{type:Q([String,Object,Array]),default:""},style:{type:Q([String,Array,Object]),default:""},alignment:{type:Q(String),default:"center"},prefixCls:{type:String},spacer:{type:Q([Object,String,Number,Array]),default:null,validator:e=>Wt(e)||Je(e)||nt(e)},wrap:Boolean,fill:Boolean,fillRatio:{type:Number,default:100},size:{type:[String,Array,Number],values:Ir,validator:e=>Je(e)||Pe(e)&&e.length===2&&e.every(Je)}}),$G=Y({name:"ElSpace",props:TG,setup(e,{slots:t}){const{classes:n,containerStyle:o,itemStyle:r}=EG(e);function a(l,s="",u=[]){const{prefixCls:c}=e;return l.forEach((f,d)=>{gh(f)?Pe(f.children)&&f.children.forEach((p,m)=>{gh(p)&&Pe(p.children)?a(p.children,`${s+m}-`,u):u.push(K(p1,{style:r.value,prefixCls:c,key:`nested-${s+m}`},{default:()=>[p]},Oo.PROPS|Oo.STYLE,["style","prefixCls"]))}):d3(f)&&u.push(K(p1,{style:r.value,prefixCls:c,key:`LoopKey${s+d}`},{default:()=>[f]},Oo.PROPS|Oo.STYLE,["style","prefixCls"]))}),u}return()=>{var l;const{spacer:s,direction:u}=e,c=ie(t,"default",{key:0},()=>[]);if(((l=c.children)!=null?l:[]).length===0)return null;if(Pe(c.children)){let f=a(c.children);if(s){const d=f.length-1;f=f.reduce((p,m,v)=>{const h=[...p,m];return v!==d&&h.push(K("span",{style:[r.value,u==="vertical"?"width: 100%":null],key:v},[Wt(s)?s:Ge(s,Oo.TEXT)],Oo.STYLE)),h},[])}return K("div",{class:n.value,style:o.value},f,Oo.STYLE|Oo.CLASS)}return c.children}}}),OG=ut($G),NG=Ne({decimalSeparator:{type:String,default:"."},groupSeparator:{type:String,default:","},precision:{type:Number,default:0},formatter:Function,value:{type:Q([Number,Object]),default:0},prefix:String,suffix:String,title:String,valueStyle:{type:Q([String,Object,Array])}}),IG=Y({name:"ElStatistic"}),MG=Y({...IG,props:NG,setup(e,{expose:t}){const n=e,o=Se("statistic"),r=k(()=>{const{value:a,formatter:l,precision:s,decimalSeparator:u,groupSeparator:c}=n;if(Xe(l))return l(a);if(!Je(a))return a;let[f,d=""]=String(a).split(".");return d=d.padEnd(s,"0").slice(0,s>0?s:0),f=f.replace(/\B(?=(\d{3})+(?!\d))/g,c),[f,d].join(d?u:"")});return t({displayValue:r}),(a,l)=>(T(),V("div",{class:N(i(o).b())},[a.$slots.title||a.title?(T(),V("div",{key:0,class:N(i(o).e("head"))},[ie(a.$slots,"title",{},()=>[Ge(le(a.title),1)])],2)):te("v-if",!0),F("div",{class:N(i(o).e("content"))},[a.$slots.prefix||a.prefix?(T(),V("div",{key:0,class:N(i(o).e("prefix"))},[ie(a.$slots,"prefix",{},()=>[F("span",null,le(a.prefix),1)])],2)):te("v-if",!0),F("span",{class:N(i(o).e("number")),style:je(a.valueStyle)},le(i(r)),7),a.$slots.suffix||a.suffix?(T(),V("div",{key:1,class:N(i(o).e("suffix"))},[ie(a.$slots,"suffix",{},()=>[F("span",null,le(a.suffix),1)])],2)):te("v-if",!0)],2)],2))}});var AG=Ie(MG,[["__file","statistic.vue"]]);const n2=ut(AG),PG=Ne({format:{type:String,default:"HH:mm:ss"},prefix:String,suffix:String,title:String,value:{type:Q([Number,Object]),default:0},valueStyle:{type:Q([String,Object,Array])}}),RG={finish:()=>!0,[Yt]:e=>Je(e)},LG=[["Y",1e3*60*60*24*365],["M",1e3*60*60*24*30],["D",1e3*60*60*24],["H",1e3*60*60],["m",1e3*60],["s",1e3],["S",1]],m1=e=>Je(e)?new Date(e).getTime():e.valueOf(),v1=(e,t)=>{let n=e;const o=/\[([^\]]*)]/g;return LG.reduce((a,[l,s])=>{const u=new RegExp(`${l}+(?![^\\[\\]]*\\])`,"g");if(u.test(a)){const c=Math.floor(n/s);return n-=c*s,a.replace(u,f=>String(c).padStart(f.length,"0"))}return a},t).replace(o,"$1")},xG=Y({name:"ElCountdown"}),DG=Y({...xG,props:PG,emits:RG,setup(e,{expose:t,emit:n}){const o=e;let r;const a=R(0),l=k(()=>v1(a.value,o.format)),s=f=>v1(f,o.format),u=()=>{r&&(kl(r),r=void 0)},c=()=>{const f=m1(o.value),d=()=>{let p=f-Date.now();n("change",p),p<=0?(p=0,u(),n("finish")):r=Ma(d),a.value=p};r=Ma(d)};return at(()=>{a.value=m1(o.value)-Date.now(),ve(()=>[o.value,o.format],()=>{u(),c()},{immediate:!0})}),zt(()=>{u()}),t({displayValue:l}),(f,d)=>(T(),re(i(n2),{value:a.value,title:f.title,prefix:f.prefix,suffix:f.suffix,"value-style":f.valueStyle,formatter:s},Sr({_:2},[bt(f.$slots,(p,m)=>({name:m,fn:X(()=>[ie(f.$slots,m)])}))]),1032,["value","title","prefix","suffix","value-style"]))}});var FG=Ie(DG,[["__file","countdown.vue"]]);const BG=ut(FG),VG=Ne({space:{type:[Number,String],default:""},active:{type:Number,default:0},direction:{type:String,default:"horizontal",values:["horizontal","vertical"]},alignCenter:{type:Boolean},simple:{type:Boolean},finishStatus:{type:String,values:["wait","process","finish","error","success"],default:"finish"},processStatus:{type:String,values:["wait","process","finish","error","success"],default:"process"}}),HG={[Yt]:(e,t)=>[e,t].every(Je)},zG=Y({name:"ElSteps"}),jG=Y({...zG,props:VG,emits:HG,setup(e,{emit:t}){const n=e,o=Se("steps"),{children:r,addChild:a,removeChild:l}=tg(lt(),"ElStep");return ve(r,()=>{r.value.forEach((s,u)=>{s.setIndex(u)})}),yt("ElSteps",{props:n,steps:r,addStep:a,removeStep:l}),ve(()=>n.active,(s,u)=>{t(Yt,s,u)}),(s,u)=>(T(),V("div",{class:N([i(o).b(),i(o).m(s.simple?"simple":s.direction)])},[ie(s.$slots,"default")],2))}});var WG=Ie(jG,[["__file","steps.vue"]]);const KG=Ne({title:{type:String,default:""},icon:{type:Dt},description:{type:String,default:""},status:{type:String,values:["","wait","process","finish","error","success"],default:""}}),UG=Y({name:"ElStep"}),qG=Y({...UG,props:KG,setup(e){const t=e,n=Se("step"),o=R(-1),r=R({}),a=R(""),l=De("ElSteps"),s=lt();at(()=>{ve([()=>l.props.active,()=>l.props.processStatus,()=>l.props.finishStatus],([S])=>{b(S)},{immediate:!0})}),zt(()=>{l.removeStep(w.uid)});const u=k(()=>t.status||a.value),c=k(()=>{const S=l.steps.value[o.value-1];return S?S.currentStatus:"wait"}),f=k(()=>l.props.alignCenter),d=k(()=>l.props.direction==="vertical"),p=k(()=>l.props.simple),m=k(()=>l.steps.value.length),v=k(()=>{var S;return((S=l.steps.value[m.value-1])==null?void 0:S.uid)===(s==null?void 0:s.uid)}),h=k(()=>p.value?"":l.props.space),C=k(()=>[n.b(),n.is(p.value?"simple":l.props.direction),n.is("flex",v.value&&!h.value&&!f.value),n.is("center",f.value&&!d.value&&!p.value)]),g=k(()=>{const S={flexBasis:Je(h.value)?`${h.value}px`:h.value?h.value:`${100/(m.value-(f.value?0:1))}%`};return d.value||v.value&&(S.maxWidth=`${100/m.value}%`),S}),y=S=>{o.value=S},_=S=>{const E=S==="wait",$={transitionDelay:`${E?"-":""}${150*o.value}ms`},O=S===l.props.processStatus||E?0:100;$.borderWidth=O&&!p.value?"1px":0,$[l.props.direction==="vertical"?"height":"width"]=`${O}%`,r.value=$},b=S=>{S>o.value?a.value=l.props.finishStatus:S===o.value&&c.value!=="error"?a.value=l.props.processStatus:a.value="wait";const E=l.steps.value[o.value-1];E&&E.calcProgress(a.value)},w=Et({uid:s.uid,currentStatus:u,setIndex:y,calcProgress:_});return l.addStep(w),(S,E)=>(T(),V("div",{style:je(i(g)),class:N(i(C))},[te(" icon & line "),F("div",{class:N([i(n).e("head"),i(n).is(i(u))])},[i(p)?te("v-if",!0):(T(),V("div",{key:0,class:N(i(n).e("line"))},[F("i",{class:N(i(n).e("line-inner")),style:je(r.value)},null,6)],2)),F("div",{class:N([i(n).e("icon"),i(n).is(S.icon||S.$slots.icon?"icon":"text")])},[ie(S.$slots,"icon",{},()=>[S.icon?(T(),re(i(ze),{key:0,class:N(i(n).e("icon-inner"))},{default:X(()=>[(T(),re(pt(S.icon)))]),_:1},8,["class"])):i(u)==="success"?(T(),re(i(ze),{key:1,class:N([i(n).e("icon-inner"),i(n).is("status")])},{default:X(()=>[K(i(Mu))]),_:1},8,["class"])):i(u)==="error"?(T(),re(i(ze),{key:2,class:N([i(n).e("icon-inner"),i(n).is("status")])},{default:X(()=>[K(i(tr))]),_:1},8,["class"])):i(p)?te("v-if",!0):(T(),V("div",{key:3,class:N(i(n).e("icon-inner"))},le(o.value+1),3))])],2)],2),te(" title & description "),F("div",{class:N(i(n).e("main"))},[F("div",{class:N([i(n).e("title"),i(n).is(i(u))])},[ie(S.$slots,"title",{},()=>[Ge(le(S.title),1)])],2),i(p)?(T(),V("div",{key:0,class:N(i(n).e("arrow"))},null,2)):(T(),V("div",{key:1,class:N([i(n).e("description"),i(n).is(i(u))])},[ie(S.$slots,"description",{},()=>[Ge(le(S.description),1)])],2))],2)],6))}});var o2=Ie(qG,[["__file","item.vue"]]);const YG=ut(WG,{Step:o2}),GG=tn(o2),XG=Ne({modelValue:{type:[Boolean,String,Number],default:!1},disabled:Boolean,loading:Boolean,size:{type:String,validator:tS},width:{type:[String,Number],default:""},inlinePrompt:Boolean,inactiveActionIcon:{type:Dt},activeActionIcon:{type:Dt},activeIcon:{type:Dt},inactiveIcon:{type:Dt},activeText:{type:String,default:""},inactiveText:{type:String,default:""},activeValue:{type:[Boolean,String,Number],default:!0},inactiveValue:{type:[Boolean,String,Number],default:!1},name:{type:String,default:""},validateEvent:{type:Boolean,default:!0},beforeChange:{type:Q(Function)},id:String,tabindex:{type:[String,Number]},label:{type:String,default:void 0},...An(["ariaLabel"])}),JG={[ft]:e=>dn(e)||nt(e)||Je(e),[Yt]:e=>dn(e)||nt(e)||Je(e),[Zn]:e=>dn(e)||nt(e)||Je(e)},ZG=["onClick"],QG=["id","aria-checked","aria-disabled","aria-label","name","true-value","false-value","disabled","tabindex","onKeydown"],eX=["aria-hidden"],tX=["aria-hidden"],nX=["aria-hidden"],r2="ElSwitch",oX=Y({name:r2}),rX=Y({...oX,props:XG,emits:JG,setup(e,{expose:t,emit:n}){const o=e,{formItem:r}=qn(),a=hn(),l=Se("switch"),{inputId:s}=cr(o,{formItemContext:r}),u=to(k(()=>o.loading)),c=R(o.modelValue!==!1),f=R(),d=R(),p=k(()=>[l.b(),l.m(a.value),l.is("disabled",u.value),l.is("checked",g.value)]),m=k(()=>[l.e("label"),l.em("label","left"),l.is("active",!g.value)]),v=k(()=>[l.e("label"),l.em("label","right"),l.is("active",g.value)]),h=k(()=>({width:rn(o.width)}));ve(()=>o.modelValue,()=>{c.value=!0});const C=k(()=>c.value?o.modelValue:!1),g=k(()=>C.value===o.activeValue);[o.activeValue,o.inactiveValue].includes(C.value)||(n(ft,o.inactiveValue),n(Yt,o.inactiveValue),n(Zn,o.inactiveValue)),ve(g,w=>{var S;f.value.checked=w,o.validateEvent&&((S=r==null?void 0:r.validate)==null||S.call(r,"change").catch(E=>void 0))});const y=()=>{const w=g.value?o.inactiveValue:o.activeValue;n(ft,w),n(Yt,w),n(Zn,w),We(()=>{f.value.checked=g.value})},_=()=>{if(u.value)return;const{beforeChange:w}=o;if(!w){y();return}const S=w();[vs(S),dn(S)].includes(!0)||vn(r2,"beforeChange must return type `Promise` or `boolean`"),vs(S)?S.then($=>{$&&y()}).catch($=>{}):S&&y()},b=()=>{var w,S;(S=(w=f.value)==null?void 0:w.focus)==null||S.call(w)};return at(()=>{f.value.checked=g.value}),wn({from:"label",replacement:"aria-label",version:"2.8.0",scope:"el-switch",ref:"https://element-plus.org/en-US/component/switch.html"},k(()=>!!o.label)),t({focus:b,checked:g}),(w,S)=>(T(),V("div",{class:N(i(p)),onClick:Qe(_,["prevent"])},[F("input",{id:i(s),ref_key:"input",ref:f,class:N(i(l).e("input")),type:"checkbox",role:"switch","aria-checked":i(g),"aria-disabled":i(u),"aria-label":w.label||w.ariaLabel,name:w.name,"true-value":w.activeValue,"false-value":w.inactiveValue,disabled:i(u),tabindex:w.tabindex,onChange:y,onKeydown:Pt(_,["enter"])},null,42,QG),!w.inlinePrompt&&(w.inactiveIcon||w.inactiveText)?(T(),V("span",{key:0,class:N(i(m))},[w.inactiveIcon?(T(),re(i(ze),{key:0},{default:X(()=>[(T(),re(pt(w.inactiveIcon)))]),_:1})):te("v-if",!0),!w.inactiveIcon&&w.inactiveText?(T(),V("span",{key:1,"aria-hidden":i(g)},le(w.inactiveText),9,eX)):te("v-if",!0)],2)):te("v-if",!0),F("span",{ref_key:"core",ref:d,class:N(i(l).e("core")),style:je(i(h))},[w.inlinePrompt?(T(),V("div",{key:0,class:N(i(l).e("inner"))},[w.activeIcon||w.inactiveIcon?(T(),re(i(ze),{key:0,class:N(i(l).is("icon"))},{default:X(()=>[(T(),re(pt(i(g)?w.activeIcon:w.inactiveIcon)))]),_:1},8,["class"])):w.activeText||w.inactiveText?(T(),V("span",{key:1,class:N(i(l).is("text")),"aria-hidden":!i(g)},le(i(g)?w.activeText:w.inactiveText),11,tX)):te("v-if",!0)],2)):te("v-if",!0),F("div",{class:N(i(l).e("action"))},[w.loading?(T(),re(i(ze),{key:0,class:N(i(l).is("loading"))},{default:X(()=>[K(i(Er))]),_:1},8,["class"])):i(g)?ie(w.$slots,"active-action",{key:1},()=>[w.activeActionIcon?(T(),re(i(ze),{key:0},{default:X(()=>[(T(),re(pt(w.activeActionIcon)))]),_:1})):te("v-if",!0)]):i(g)?te("v-if",!0):ie(w.$slots,"inactive-action",{key:2},()=>[w.inactiveActionIcon?(T(),re(i(ze),{key:0},{default:X(()=>[(T(),re(pt(w.inactiveActionIcon)))]),_:1})):te("v-if",!0)])],2)],6),!w.inlinePrompt&&(w.activeIcon||w.activeText)?(T(),V("span",{key:1,class:N(i(v))},[w.activeIcon?(T(),re(i(ze),{key:0},{default:X(()=>[(T(),re(pt(w.activeIcon)))]),_:1})):te("v-if",!0),!w.activeIcon&&w.activeText?(T(),V("span",{key:1,"aria-hidden":!i(g)},le(w.activeText),9,nX)):te("v-if",!0)],2)):te("v-if",!0)],10,ZG))}});var aX=Ie(rX,[["__file","switch.vue"]]);const lX=ut(aX),$p=function(e){var t;return(t=e.target)==null?void 0:t.closest("td")},sX=function(e,t,n,o,r){if(!t&&!o&&(!r||Array.isArray(r)&&!r.length))return e;typeof n=="string"?n=n==="descending"?-1:1:n=n&&n<0?-1:1;const a=o?null:function(s,u){return r?(Array.isArray(r)||(r=[r]),r.map(c=>typeof c=="string"?un(s,c):c(s,u,e))):(t!=="$key"&&dt(s)&&"$value"in s&&(s=s.$value),[dt(s)?un(s,t):s])},l=function(s,u){if(o)return o(s.value,u.value);for(let c=0,f=s.key.length;cu.key[c])return 1}return 0};return e.map((s,u)=>({value:s,index:u,key:a?a(s,u):null})).sort((s,u)=>{let c=l(s,u);return c||(c=s.index-u.index),c*+n}).map(s=>s.value)},a2=function(e,t){let n=null;return e.columns.forEach(o=>{o.id===t&&(n=o)}),n},iX=function(e,t){let n=null;for(let o=0;o{if(!e)throw new Error("Row is required when get row identity");if(typeof t=="string"){if(!t.includes("."))return`${e[t]}`;const n=t.split(".");let o=e;for(const r of n)o=o[r];return`${o}`}else if(typeof t=="function")return t.call(null,e)},nl=function(e,t){const n={};return(e||[]).forEach((o,r)=>{n[Rn(o,t)]={row:o,index:r}}),n};function uX(e,t){const n={};let o;for(o in e)n[o]=e[o];for(o in t)if(Tt(t,o)){const r=t[o];typeof r<"u"&&(n[o]=r)}return n}function Tg(e){return e===""||e!==void 0&&(e=Number.parseInt(e,10),Number.isNaN(e)&&(e="")),e}function l2(e){return e===""||e!==void 0&&(e=Tg(e),Number.isNaN(e)&&(e=80)),e}function cX(e){return typeof e=="number"?e:typeof e=="string"?/^\d+(?:px)?$/.test(e)?Number.parseInt(e,10):e:null}function dX(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,n)=>(...o)=>t(n(...o)))}function Bi(e,t,n){let o=!1;const r=e.indexOf(t),a=r!==-1,l=s=>{s==="add"?e.push(t):e.splice(r,1),o=!0,Pe(t.children)&&t.children.forEach(u=>{Bi(e,u,n??!a)})};return dn(n)?n&&!a?l("add"):!n&&a&&l("remove"):l(a?"remove":"add"),o}function fX(e,t,n="children",o="hasChildren"){const r=l=>!(Array.isArray(l)&&l.length);function a(l,s,u){t(l,s,u),s.forEach(c=>{if(c[o]){t(c,null,u+1);return}const f=c[n];r(f)||a(c,f,u+1)})}e.forEach(l=>{if(l[o]){t(l,null,0);return}const s=l[n];r(s)||a(l,s,0)})}let To=null;function pX(e,t,n,o){if((To==null?void 0:To.trigger)===n)return;To==null||To();const r=o==null?void 0:o.refs.tableWrapper,a=r==null?void 0:r.dataset.prefix,l={strategy:"fixed",...e.popperOptions},s=K(Un,{content:t,virtualTriggering:!0,virtualRef:n,appendTo:r,placement:"top",transition:"none",offset:0,hideAfter:0,...e,popperOptions:l,onHide:()=>{To==null||To()}});s.appContext={...o.appContext,...o};const u=document.createElement("div");er(s,u),s.component.exposed.onOpen();const c=r==null?void 0:r.querySelector(`.${a}-scrollbar__wrap`);To=()=>{er(null,u),c==null||c.removeEventListener("scroll",To),To=null},To.trigger=n,c==null||c.addEventListener("scroll",To)}function s2(e){return e.children?Ox(e.children,s2):[e]}function b1(e,t){return e+t.colSpan}const i2=(e,t,n,o)=>{let r=0,a=e;const l=n.states.columns.value;if(o){const u=s2(o[e]);r=l.slice(0,l.indexOf(u[0])).reduce(b1,0),a=r+u.reduce(b1,0)-1}else r=e;let s;switch(t){case"left":a=l.length-n.states.rightFixedLeafColumnsLength.value&&(s="right");break;default:a=l.length-n.states.rightFixedLeafColumnsLength.value&&(s="right")}return s?{direction:s,start:r,after:a}:{}},$g=(e,t,n,o,r,a=0)=>{const l=[],{direction:s,start:u,after:c}=i2(t,n,o,r);if(s){const f=s==="left";l.push(`${e}-fixed-column--${s}`),f&&c+a===o.states.fixedLeafColumnsLength.value-1?l.push("is-last-column"):!f&&u-a===o.states.columns.value.length-o.states.rightFixedLeafColumnsLength.value&&l.push("is-first-column")}return l};function y1(e,t){return e+(t.realWidth===null||Number.isNaN(t.realWidth)?Number(t.width):t.realWidth)}const Og=(e,t,n,o)=>{const{direction:r,start:a=0,after:l=0}=i2(e,t,n,o);if(!r)return;const s={},u=r==="left",c=n.states.columns.value;return u?s.left=c.slice(0,a).reduce(y1,0):s.right=c.slice(l+1).reverse().reduce(y1,0),s},Ls=(e,t)=>{e&&(Number.isNaN(e[t])||(e[t]=`${e[t]}px`))};function hX(e){const t=lt(),n=R(!1),o=R([]);return{updateExpandRows:()=>{const u=e.data.value||[],c=e.rowKey.value;if(n.value)o.value=u.slice();else if(c){const f=nl(o.value,c);o.value=u.reduce((d,p)=>{const m=Rn(p,c);return f[m]&&d.push(p),d},[])}else o.value=[]},toggleRowExpansion:(u,c)=>{Bi(o.value,u,c)&&t.emit("expand-change",u,o.value.slice())},setExpandRowKeys:u=>{t.store.assertRowKey();const c=e.data.value||[],f=e.rowKey.value,d=nl(c,f);o.value=u.reduce((p,m)=>{const v=d[m];return v&&p.push(v.row),p},[])},isRowExpanded:u=>{const c=e.rowKey.value;return c?!!nl(o.value,c)[Rn(u,c)]:o.value.includes(u)},states:{expandRows:o,defaultExpandAll:n}}}function mX(e){const t=lt(),n=R(null),o=R(null),r=c=>{t.store.assertRowKey(),n.value=c,l(c)},a=()=>{n.value=null},l=c=>{const{data:f,rowKey:d}=e;let p=null;d.value&&(p=(i(f)||[]).find(m=>Rn(m,d.value)===c)),o.value=p,t.emit("current-change",o.value,null)};return{setCurrentRowKey:r,restoreCurrentRowKey:a,setCurrentRowByKey:l,updateCurrentRow:c=>{const f=o.value;if(c&&c!==f){o.value=c,t.emit("current-change",o.value,f);return}!c&&f&&(o.value=null,t.emit("current-change",null,f))},updateCurrentRowData:()=>{const c=e.rowKey.value,f=e.data.value||[],d=o.value;if(!f.includes(d)&&d){if(c){const p=Rn(d,c);l(p)}else o.value=null;o.value===null&&t.emit("current-change",null,d)}else n.value&&(l(n.value),a())},states:{_currentRowKey:n,currentRow:o}}}function vX(e){const t=R([]),n=R({}),o=R(16),r=R(!1),a=R({}),l=R("hasChildren"),s=R("children"),u=lt(),c=k(()=>{if(!e.rowKey.value)return{};const g=e.data.value||[];return d(g)}),f=k(()=>{const g=e.rowKey.value,y=Object.keys(a.value),_={};return y.length&&y.forEach(b=>{if(a.value[b].length){const w={children:[]};a.value[b].forEach(S=>{const E=Rn(S,g);w.children.push(E),S[l.value]&&!_[E]&&(_[E]={children:[]})}),_[b]=w}}),_}),d=g=>{const y=e.rowKey.value,_={};return fX(g,(b,w,S)=>{const E=Rn(b,y);Array.isArray(w)?_[E]={children:w.map($=>Rn($,y)),level:S}:r.value&&(_[E]={children:[],lazy:!0,level:S})},s.value,l.value),_},p=(g=!1,y=(_=>(_=u.store)==null?void 0:_.states.defaultExpandAll.value)())=>{var _;const b=c.value,w=f.value,S=Object.keys(b),E={};if(S.length){const $=i(n),O=[],A=(D,U)=>{if(g)return t.value?y||t.value.includes(U):!!(y||D!=null&&D.expanded);{const j=y||t.value&&t.value.includes(U);return!!(D!=null&&D.expanded||j)}};S.forEach(D=>{const U=$[D],j={...b[D]};if(j.expanded=A(U,D),j.lazy){const{loaded:W=!1,loading:L=!1}=U||{};j.loaded=!!W,j.loading=!!L,O.push(D)}E[D]=j});const M=Object.keys(w);r.value&&M.length&&O.length&&M.forEach(D=>{const U=$[D],j=w[D].children;if(O.includes(D)){if(E[D].children.length!==0)throw new Error("[ElTable]children must be an empty array.");E[D].children=j}else{const{loaded:W=!1,loading:L=!1}=U||{};E[D]={lazy:!0,loaded:!!W,loading:!!L,expanded:A(U,D),children:j,level:""}}})}n.value=E,(_=u.store)==null||_.updateTableScrollY()};ve(()=>t.value,()=>{p(!0)}),ve(()=>c.value,()=>{p()}),ve(()=>f.value,()=>{p()});const m=g=>{t.value=g,p()},v=(g,y)=>{u.store.assertRowKey();const _=e.rowKey.value,b=Rn(g,_),w=b&&n.value[b];if(b&&w&&"expanded"in w){const S=w.expanded;y=typeof y>"u"?!w.expanded:y,n.value[b].expanded=y,S!==y&&u.emit("expand-change",g,y),u.store.updateTableScrollY()}},h=g=>{u.store.assertRowKey();const y=e.rowKey.value,_=Rn(g,y),b=n.value[_];r.value&&b&&"loaded"in b&&!b.loaded?C(g,_,b):v(g,void 0)},C=(g,y,_)=>{const{load:b}=u.props;b&&!n.value[y].loaded&&(n.value[y].loading=!0,b(g,_,w=>{if(!Array.isArray(w))throw new TypeError("[ElTable] data must be an array");n.value[y].loading=!1,n.value[y].loaded=!0,n.value[y].expanded=!0,w.length&&(a.value[y]=w),u.emit("expand-change",g,!0)}))};return{loadData:C,loadOrToggle:h,toggleTreeExpansion:v,updateTreeExpandKeys:m,updateTreeData:p,normalize:d,states:{expandRowKeys:t,treeData:n,indent:o,lazy:r,lazyTreeNodeMap:a,lazyColumnIdentifier:l,childrenColumnName:s}}}const gX=(e,t)=>{const n=t.sortingColumn;return!n||typeof n.sortable=="string"?e:sX(e,t.sortProp,t.sortOrder,n.sortMethod,n.sortBy)},Kc=e=>{const t=[];return e.forEach(n=>{n.children&&n.children.length>0?t.push.apply(t,Kc(n.children)):t.push(n)}),t};function bX(){var e;const t=lt(),{size:n}=Cn((e=t.proxy)==null?void 0:e.$props),o=R(null),r=R([]),a=R([]),l=R(!1),s=R([]),u=R([]),c=R([]),f=R([]),d=R([]),p=R([]),m=R([]),v=R([]),h=[],C=R(0),g=R(0),y=R(0),_=R(!1),b=R([]),w=R(!1),S=R(!1),E=R(null),$=R({}),O=R(null),A=R(null),M=R(null),D=R(null),U=R(null);ve(r,()=>t.state&&P(!1),{deep:!0});const j=()=>{if(!o.value)throw new Error("[ElTable] prop row-key is required")},W=Ze=>{var st;(st=Ze.children)==null||st.forEach(Ee=>{Ee.fixed=Ze.fixed,W(Ee)})},L=()=>{s.value.forEach(ne=>{W(ne)}),f.value=s.value.filter(ne=>ne.fixed===!0||ne.fixed==="left"),d.value=s.value.filter(ne=>ne.fixed==="right"),f.value.length>0&&s.value[0]&&s.value[0].type==="selection"&&!s.value[0].fixed&&(s.value[0].fixed=!0,f.value.unshift(s.value[0]));const Ze=s.value.filter(ne=>!ne.fixed);u.value=[].concat(f.value).concat(Ze).concat(d.value);const st=Kc(Ze),Ee=Kc(f.value),ye=Kc(d.value);C.value=st.length,g.value=Ee.length,y.value=ye.length,c.value=[].concat(Ee).concat(st).concat(ye),l.value=f.value.length>0||d.value.length>0},P=(Ze,st=!1)=>{Ze&&L(),st?t.state.doLayout():t.state.debouncedUpdateLayout()},x=Ze=>b.value.includes(Ze),I=()=>{_.value=!1;const Ze=b.value;b.value=[],Ze.length&&t.emit("selection-change",[])},H=()=>{let Ze;if(o.value){Ze=[];const st=nl(b.value,o.value),Ee=nl(r.value,o.value);for(const ye in st)Tt(st,ye)&&!Ee[ye]&&Ze.push(st[ye].row)}else Ze=b.value.filter(st=>!r.value.includes(st));if(Ze.length){const st=b.value.filter(Ee=>!Ze.includes(Ee));b.value=st,t.emit("selection-change",st.slice())}},G=()=>(b.value||[]).slice(),J=(Ze,st=void 0,Ee=!0)=>{if(Bi(b.value,Ze,st)){const ne=(b.value||[]).slice();Ee&&t.emit("select",ne,Ze),t.emit("selection-change",ne)}},ee=()=>{var Ze,st;const Ee=S.value?!_.value:!(_.value||b.value.length);_.value=Ee;let ye=!1,ne=0;const be=(st=(Ze=t==null?void 0:t.store)==null?void 0:Ze.states)==null?void 0:st.rowKey.value;r.value.forEach((Fe,vt)=>{const pe=vt+ne;E.value?E.value.call(null,Fe,pe)&&Bi(b.value,Fe,Ee)&&(ye=!0):Bi(b.value,Fe,Ee)&&(ye=!0),ne+=oe(Rn(Fe,be))}),ye&&t.emit("selection-change",b.value?b.value.slice():[]),t.emit("select-all",(b.value||[]).slice())},fe=()=>{const Ze=nl(b.value,o.value);r.value.forEach(st=>{const Ee=Rn(st,o.value),ye=Ze[Ee];ye&&(b.value[ye.index]=st)})},Te=()=>{var Ze,st,Ee;if(((Ze=r.value)==null?void 0:Ze.length)===0){_.value=!1;return}let ye;o.value&&(ye=nl(b.value,o.value));const ne=function(pe){return ye?!!ye[Rn(pe,o.value)]:b.value.includes(pe)};let be=!0,Fe=0,vt=0;for(let pe=0,Ye=(r.value||[]).length;pe{var st;if(!t||!t.store)return 0;const{treeData:Ee}=t.store.states;let ye=0;const ne=(st=Ee.value[Ze])==null?void 0:st.children;return ne&&(ye+=ne.length,ne.forEach(be=>{ye+=oe(be)})),ye},ke=(Ze,st)=>{Array.isArray(Ze)||(Ze=[Ze]);const Ee={};return Ze.forEach(ye=>{$.value[ye.id]=st,Ee[ye.columnKey||ye.id]=st}),Ee},ae=(Ze,st,Ee)=>{A.value&&A.value!==Ze&&(A.value.order=null),A.value=Ze,M.value=st,D.value=Ee},Oe=()=>{let Ze=i(a);Object.keys($.value).forEach(st=>{const Ee=$.value[st];if(!Ee||Ee.length===0)return;const ye=a2({columns:c.value},st);ye&&ye.filterMethod&&(Ze=Ze.filter(ne=>Ee.some(be=>ye.filterMethod.call(null,be,ne,ye))))}),O.value=Ze},we=()=>{r.value=gX(O.value,{sortingColumn:A.value,sortProp:M.value,sortOrder:D.value})},ge=(Ze=void 0)=>{Ze&&Ze.filter||Oe(),we()},q=Ze=>{const{tableHeaderRef:st}=t.refs;if(!st)return;const Ee=Object.assign({},st.filterPanels),ye=Object.keys(Ee);if(ye.length)if(typeof Ze=="string"&&(Ze=[Ze]),Array.isArray(Ze)){const ne=Ze.map(be=>iX({columns:c.value},be));ye.forEach(be=>{const Fe=ne.find(vt=>vt.id===be);Fe&&(Fe.filteredValue=[])}),t.store.commit("filterChange",{column:ne,values:[],silent:!0,multi:!0})}else ye.forEach(ne=>{const be=c.value.find(Fe=>Fe.id===ne);be&&(be.filteredValue=[])}),$.value={},t.store.commit("filterChange",{column:{},values:[],silent:!0})},B=()=>{A.value&&(ae(null,null,null),t.store.commit("changeSortCondition",{silent:!0}))},{setExpandRowKeys:z,toggleRowExpansion:Z,updateExpandRows:ue,states:se,isRowExpanded:me}=hX({data:r,rowKey:o}),{updateTreeExpandKeys:_e,toggleTreeExpansion:$e,updateTreeData:Ce,loadOrToggle:ce,states:de}=vX({data:r,rowKey:o}),{updateCurrentRowData:xe,updateCurrentRow:he,setCurrentRowKey:He,states:et}=mX({data:r,rowKey:o});return{assertRowKey:j,updateColumns:L,scheduleLayout:P,isSelected:x,clearSelection:I,cleanSelection:H,getSelectionRows:G,toggleRowSelection:J,_toggleAllSelection:ee,toggleAllSelection:null,updateSelectionByRowKey:fe,updateAllSelected:Te,updateFilters:ke,updateCurrentRow:he,updateSort:ae,execFilter:Oe,execSort:we,execQuery:ge,clearFilter:q,clearSort:B,toggleRowExpansion:Z,setExpandRowKeysAdapter:Ze=>{z(Ze),_e(Ze)},setCurrentRowKey:He,toggleRowExpansionAdapter:(Ze,st)=>{c.value.some(({type:ye})=>ye==="expand")?Z(Ze,st):$e(Ze,st)},isRowExpanded:me,updateExpandRows:ue,updateCurrentRowData:xe,loadOrToggle:ce,updateTreeData:Ce,states:{tableSize:n,rowKey:o,data:r,_data:a,isComplex:l,_columns:s,originColumns:u,columns:c,fixedColumns:f,rightFixedColumns:d,leafColumns:p,fixedLeafColumns:m,rightFixedLeafColumns:v,updateOrderFns:h,leafColumnsLength:C,fixedLeafColumnsLength:g,rightFixedLeafColumnsLength:y,isAllSelected:_,selection:b,reserveSelection:w,selectOnIndeterminate:S,selectable:E,filters:$,filteredData:O,sortingColumn:A,sortProp:M,sortOrder:D,hoverRow:U,...se,...de,...et}}}function om(e,t){return e.map(n=>{var o;return n.id===t.id?t:((o=n.children)!=null&&o.length&&(n.children=om(n.children,t)),n)})}function rm(e){e.forEach(t=>{var n,o;t.no=(n=t.getColumnIndex)==null?void 0:n.call(t),(o=t.children)!=null&&o.length&&rm(t.children)}),e.sort((t,n)=>t.no-n.no)}function yX(){const e=lt(),t=bX();return{ns:Se("table"),...t,mutations:{setData(l,s){const u=i(l._data)!==s;l.data.value=s,l._data.value=s,e.store.execQuery(),e.store.updateCurrentRowData(),e.store.updateExpandRows(),e.store.updateTreeData(e.store.states.defaultExpandAll.value),i(l.reserveSelection)?(e.store.assertRowKey(),e.store.updateSelectionByRowKey()):u?e.store.clearSelection():e.store.cleanSelection(),e.store.updateAllSelected(),e.$ready&&e.store.scheduleLayout()},insertColumn(l,s,u,c){const f=i(l._columns);let d=[];u?(u&&!u.children&&(u.children=[]),u.children.push(s),d=om(f,u)):(f.push(s),d=f),rm(d),l._columns.value=d,l.updateOrderFns.push(c),s.type==="selection"&&(l.selectable.value=s.selectable,l.reserveSelection.value=s.reserveSelection),e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},updateColumnOrder(l,s){var u;((u=s.getColumnIndex)==null?void 0:u.call(s))!==s.no&&(rm(l._columns.value),e.$ready&&e.store.updateColumns())},removeColumn(l,s,u,c){const f=i(l._columns)||[];if(u)u.children.splice(u.children.findIndex(p=>p.id===s.id),1),We(()=>{var p;((p=u.children)==null?void 0:p.length)===0&&delete u.children}),l._columns.value=om(f,u);else{const p=f.indexOf(s);p>-1&&(f.splice(p,1),l._columns.value=f)}const d=l.updateOrderFns.indexOf(c);d>-1&&l.updateOrderFns.splice(d,1),e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},sort(l,s){const{prop:u,order:c,init:f}=s;if(u){const d=i(l.columns).find(p=>p.property===u);d&&(d.order=c,e.store.updateSort(d,u,c),e.store.commit("changeSortCondition",{init:f}))}},changeSortCondition(l,s){const{sortingColumn:u,sortProp:c,sortOrder:f}=l,d=i(u),p=i(c),m=i(f);m===null&&(l.sortingColumn.value=null,l.sortProp.value=null);const v={filter:!0};e.store.execQuery(v),(!s||!(s.silent||s.init))&&e.emit("sort-change",{column:d,prop:p,order:m}),e.store.updateTableScrollY()},filterChange(l,s){const{column:u,values:c,silent:f}=s,d=e.store.updateFilters(u,c);e.store.execQuery(),f||e.emit("filter-change",d),e.store.updateTableScrollY()},toggleAllSelection(){e.store.toggleAllSelection()},rowSelectedChanged(l,s){e.store.toggleRowSelection(s),e.store.updateAllSelected()},setHoverRow(l,s){l.hoverRow.value=s},setCurrentRow(l,s){e.store.updateCurrentRow(s)}},commit:function(l,...s){const u=e.store.mutations;if(u[l])u[l].apply(e,[e.store.states].concat(s));else throw new Error(`Action not found: ${l}`)},updateTableScrollY:function(){We(()=>e.layout.updateScrollY.apply(e.layout))}}}const Vi={rowKey:"rowKey",defaultExpandAll:"defaultExpandAll",selectOnIndeterminate:"selectOnIndeterminate",indent:"indent",lazy:"lazy",data:"data","treeProps.hasChildren":{key:"lazyColumnIdentifier",default:"hasChildren"},"treeProps.children":{key:"childrenColumnName",default:"children"}};function wX(e,t){if(!e)throw new Error("Table is required.");const n=yX();return n.toggleAllSelection=co(n._toggleAllSelection,10),Object.keys(Vi).forEach(o=>{u2(c2(t,o),o,n)}),_X(n,t),n}function _X(e,t){Object.keys(Vi).forEach(n=>{ve(()=>c2(t,n),o=>{u2(o,n,e)})})}function u2(e,t,n){let o=e,r=Vi[t];typeof Vi[t]=="object"&&(r=r.key,o=o||Vi[t].default),n.states[r].value=o}function c2(e,t){if(t.includes(".")){const n=t.split(".");let o=e;return n.forEach(r=>{o=o[r]}),o}else return e[t]}class CX{constructor(t){this.observers=[],this.table=null,this.store=null,this.columns=[],this.fit=!0,this.showHeader=!0,this.height=R(null),this.scrollX=R(!1),this.scrollY=R(!1),this.bodyWidth=R(null),this.fixedWidth=R(null),this.rightFixedWidth=R(null),this.gutterWidth=0;for(const n in t)Tt(t,n)&&(xt(this[n])?this[n].value=t[n]:this[n]=t[n]);if(!this.table)throw new Error("Table is required for Table Layout");if(!this.store)throw new Error("Store is required for Table Layout")}updateScrollY(){if(this.height.value===null)return!1;const n=this.table.refs.scrollBarRef;if(this.table.vnode.el&&(n!=null&&n.wrapRef)){let o=!0;const r=this.scrollY.value;return o=n.wrapRef.scrollHeight>n.wrapRef.clientHeight,this.scrollY.value=o,r!==o}return!1}setHeight(t,n="height"){if(!Ct)return;const o=this.table.vnode.el;if(t=cX(t),this.height.value=Number(t),!o&&(t||t===0))return We(()=>this.setHeight(t,n));typeof t=="number"?(o.style[n]=`${t}px`,this.updateElsHeight()):typeof t=="string"&&(o.style[n]=t,this.updateElsHeight())}setMaxHeight(t){this.setHeight(t,"max-height")}getFlattenColumns(){const t=[];return this.table.store.states.columns.value.forEach(o=>{o.isColumnGroup?t.push.apply(t,o.columns):t.push(o)}),t}updateElsHeight(){this.updateScrollY(),this.notifyObservers("scrollable")}headerDisplayNone(t){if(!t)return!0;let n=t;for(;n.tagName!=="DIV";){if(getComputedStyle(n).display==="none")return!0;n=n.parentElement}return!1}updateColumnsWidth(){if(!Ct)return;const t=this.fit,n=this.table.vnode.el.clientWidth;let o=0;const r=this.getFlattenColumns(),a=r.filter(u=>typeof u.width!="number");if(r.forEach(u=>{typeof u.width=="number"&&u.realWidth&&(u.realWidth=null)}),a.length>0&&t){if(r.forEach(u=>{o+=Number(u.width||u.minWidth||80)}),o<=n){this.scrollX.value=!1;const u=n-o;if(a.length===1)a[0].realWidth=Number(a[0].minWidth||80)+u;else{const c=a.reduce((p,m)=>p+Number(m.minWidth||80),0),f=u/c;let d=0;a.forEach((p,m)=>{if(m===0)return;const v=Math.floor(Number(p.minWidth||80)*f);d+=v,p.realWidth=Number(p.minWidth||80)+v}),a[0].realWidth=Number(a[0].minWidth||80)+u-d}}else this.scrollX.value=!0,a.forEach(u=>{u.realWidth=Number(u.minWidth)});this.bodyWidth.value=Math.max(o,n),this.table.state.resizeState.value.width=this.bodyWidth.value}else r.forEach(u=>{!u.width&&!u.minWidth?u.realWidth=80:u.realWidth=Number(u.width||u.minWidth),o+=u.realWidth}),this.scrollX.value=o>n,this.bodyWidth.value=o;const l=this.store.states.fixedColumns.value;if(l.length>0){let u=0;l.forEach(c=>{u+=Number(c.realWidth||c.width)}),this.fixedWidth.value=u}const s=this.store.states.rightFixedColumns.value;if(s.length>0){let u=0;s.forEach(c=>{u+=Number(c.realWidth||c.width)}),this.rightFixedWidth.value=u}this.notifyObservers("columns")}addObserver(t){this.observers.push(t)}removeObserver(t){const n=this.observers.indexOf(t);n!==-1&&this.observers.splice(n,1)}notifyObservers(t){this.observers.forEach(o=>{var r,a;switch(t){case"columns":(r=o.state)==null||r.onColumnsChange(this);break;case"scrollable":(a=o.state)==null||a.onScrollableChange(this);break;default:throw new Error(`Table Layout don't have event ${t}.`)}})}}const{CheckboxGroup:SX}=Ho,kX=Y({name:"ElTableFilterPanel",components:{ElCheckbox:Ho,ElCheckboxGroup:SX,ElScrollbar:ea,ElTooltip:Un,ElIcon:ze,ArrowDown:Nr,ArrowUp:pf},directives:{ClickOutside:Yr},props:{placement:{type:String,default:"bottom-start"},store:{type:Object},column:{type:Object},upDataColumn:{type:Function}},setup(e){const t=lt(),{t:n}=$t(),o=Se("table-filter"),r=t==null?void 0:t.parent;r.filterPanels.value[e.column.id]||(r.filterPanels.value[e.column.id]=t);const a=R(!1),l=R(null),s=k(()=>e.column&&e.column.filters),u=k(()=>e.column.filterClassName?`${o.b()} ${e.column.filterClassName}`:o.b()),c=k({get:()=>{var w;return(((w=e.column)==null?void 0:w.filteredValue)||[])[0]},set:w=>{f.value&&(typeof w<"u"&&w!==null?f.value.splice(0,1,w):f.value.splice(0,1))}}),f=k({get(){return e.column?e.column.filteredValue||[]:[]},set(w){e.column&&e.upDataColumn("filteredValue",w)}}),d=k(()=>e.column?e.column.filterMultiple:!0),p=w=>w.value===c.value,m=()=>{a.value=!1},v=w=>{w.stopPropagation(),a.value=!a.value},h=()=>{a.value=!1},C=()=>{_(f.value),m()},g=()=>{f.value=[],_(f.value),m()},y=w=>{c.value=w,_(typeof w<"u"&&w!==null?f.value:[]),m()},_=w=>{e.store.commit("filterChange",{column:e.column,values:w}),e.store.updateAllSelected()};ve(a,w=>{e.column&&e.upDataColumn("filterOpened",w)},{immediate:!0});const b=k(()=>{var w,S;return(S=(w=l.value)==null?void 0:w.popperRef)==null?void 0:S.contentRef});return{tooltipVisible:a,multiple:d,filterClassName:u,filteredValue:f,filterValue:c,filters:s,handleConfirm:C,handleReset:g,handleSelect:y,isActive:p,t:n,ns:o,showFilterPanel:v,hideFilterPanel:h,popperPaneRef:b,tooltip:l}}}),EX={key:0},TX=["disabled"],$X=["label","onClick"];function OX(e,t,n,o,r,a){const l=qe("el-checkbox"),s=qe("el-checkbox-group"),u=qe("el-scrollbar"),c=qe("arrow-up"),f=qe("arrow-down"),d=qe("el-icon"),p=qe("el-tooltip"),m=qs("click-outside");return T(),re(p,{ref:"tooltip",visible:e.tooltipVisible,offset:0,placement:e.placement,"show-arrow":!1,"stop-popper-mouse-event":!1,teleported:"",effect:"light",pure:"","popper-class":e.filterClassName,persistent:""},{content:X(()=>[e.multiple?(T(),V("div",EX,[F("div",{class:N(e.ns.e("content"))},[K(u,{"wrap-class":e.ns.e("wrap")},{default:X(()=>[K(s,{modelValue:e.filteredValue,"onUpdate:modelValue":t[0]||(t[0]=v=>e.filteredValue=v),class:N(e.ns.e("checkbox-group"))},{default:X(()=>[(T(!0),V(Ve,null,bt(e.filters,v=>(T(),re(l,{key:v.value,value:v.value},{default:X(()=>[Ge(le(v.text),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue","class"])]),_:1},8,["wrap-class"])],2),F("div",{class:N(e.ns.e("bottom"))},[F("button",{class:N({[e.ns.is("disabled")]:e.filteredValue.length===0}),disabled:e.filteredValue.length===0,type:"button",onClick:t[1]||(t[1]=(...v)=>e.handleConfirm&&e.handleConfirm(...v))},le(e.t("el.table.confirmFilter")),11,TX),F("button",{type:"button",onClick:t[2]||(t[2]=(...v)=>e.handleReset&&e.handleReset(...v))},le(e.t("el.table.resetFilter")),1)],2)])):(T(),V("ul",{key:1,class:N(e.ns.e("list"))},[F("li",{class:N([e.ns.e("list-item"),{[e.ns.is("active")]:e.filterValue===void 0||e.filterValue===null}]),onClick:t[3]||(t[3]=v=>e.handleSelect(null))},le(e.t("el.table.clearFilter")),3),(T(!0),V(Ve,null,bt(e.filters,v=>(T(),V("li",{key:v.value,class:N([e.ns.e("list-item"),e.ns.is("active",e.isActive(v))]),label:v.value,onClick:h=>e.handleSelect(v.value)},le(v.text),11,$X))),128))],2))]),default:X(()=>[tt((T(),V("span",{class:N([`${e.ns.namespace.value}-table__column-filter-trigger`,`${e.ns.namespace.value}-none-outline`]),onClick:t[4]||(t[4]=(...v)=>e.showFilterPanel&&e.showFilterPanel(...v))},[K(d,null,{default:X(()=>[ie(e.$slots,"filter-icon",{},()=>[e.column.filterOpened?(T(),re(c,{key:0})):(T(),re(f,{key:1}))])]),_:3})],2)),[[m,e.hideFilterPanel,e.popperPaneRef]])]),_:3},8,["visible","placement","popper-class"])}var NX=Ie(kX,[["render",OX],["__file","filter-panel.vue"]]);function d2(e){const t=lt();Su(()=>{n.value.addObserver(t)}),at(()=>{o(n.value),r(n.value)}),ar(()=>{o(n.value),r(n.value)}),lr(()=>{n.value.removeObserver(t)});const n=k(()=>{const a=e.layout;if(!a)throw new Error("Can not find table layout.");return a}),o=a=>{var l;const s=((l=e.vnode.el)==null?void 0:l.querySelectorAll("colgroup > col"))||[];if(!s.length)return;const u=a.getFlattenColumns(),c={};u.forEach(f=>{c[f.id]=f});for(let f=0,d=s.length;f{var l,s;const u=((l=e.vnode.el)==null?void 0:l.querySelectorAll("colgroup > col[name=gutter]"))||[];for(let f=0,d=u.length;f{h.stopPropagation()},a=(h,C)=>{!C.filters&&C.sortable?v(h,C,!1):C.filterable&&!C.sortable&&r(h),o==null||o.emit("header-click",C,h)},l=(h,C)=>{o==null||o.emit("header-contextmenu",C,h)},s=R(null),u=R(!1),c=R({}),f=(h,C)=>{if(Ct&&!(C.children&&C.children.length>0)&&s.value&&e.border){u.value=!0;const g=o;t("set-drag-visible",!0);const _=(g==null?void 0:g.vnode.el).getBoundingClientRect().left,b=n.vnode.el.querySelector(`th.${C.id}`),w=b.getBoundingClientRect(),S=w.left-_+30;Mo(b,"noclick"),c.value={startMouseLeft:h.clientX,startLeft:w.right-_,startColumnLeft:w.left-_,tableLeft:_};const E=g==null?void 0:g.refs.resizeProxy;E.style.left=`${c.value.startLeft}px`,document.onselectstart=function(){return!1},document.ondragstart=function(){return!1};const $=A=>{const M=A.clientX-c.value.startMouseLeft,D=c.value.startLeft+M;E.style.left=`${Math.max(S,D)}px`},O=()=>{if(u.value){const{startColumnLeft:A,startLeft:M}=c.value,U=Number.parseInt(E.style.left,10)-A;C.width=C.realWidth=U,g==null||g.emit("header-dragend",C.width,M-A,C,h),requestAnimationFrame(()=>{e.store.scheduleLayout(!1,!0)}),document.body.style.cursor="",u.value=!1,s.value=null,c.value={},t("set-drag-visible",!1)}document.removeEventListener("mousemove",$),document.removeEventListener("mouseup",O),document.onselectstart=null,document.ondragstart=null,setTimeout(()=>{Kn(b,"noclick")},0)};document.addEventListener("mousemove",$),document.addEventListener("mouseup",O)}},d=(h,C)=>{if(C.children&&C.children.length>0)return;const g=h.target;if(!Fo(g))return;const y=g==null?void 0:g.closest("th");if(!(!C||!C.resizable)&&!u.value&&e.border){const _=y.getBoundingClientRect(),b=document.body.style;_.width>12&&_.right-h.pageX<8?(b.cursor="col-resize",wo(y,"is-sortable")&&(y.style.cursor="col-resize"),s.value=C):u.value||(b.cursor="",wo(y,"is-sortable")&&(y.style.cursor="pointer"),s.value=null)}},p=()=>{Ct&&(document.body.style.cursor="")},m=({order:h,sortOrders:C})=>{if(h==="")return C[0];const g=C.indexOf(h||null);return C[g>C.length-2?0:g+1]},v=(h,C,g)=>{var y;h.stopPropagation();const _=C.order===g?null:g||m(C),b=(y=h.target)==null?void 0:y.closest("th");if(b&&wo(b,"noclick")){Kn(b,"noclick");return}if(!C.sortable)return;const w=e.store.states;let S=w.sortProp.value,E;const $=w.sortingColumn.value;($!==C||$===C&&$.order===null)&&($&&($.order=null),w.sortingColumn.value=C,S=C.property),_?E=C.order=_:E=C.order=null,w.sortProp.value=S,w.sortOrder.value=E,o==null||o.store.commit("changeSortCondition")};return{handleHeaderClick:a,handleHeaderContextMenu:l,handleMouseDown:f,handleMouseMove:d,handleMouseOut:p,handleSortClick:v,handleFilterClick:r}}function MX(e){const t=De(Mr),n=Se("table");return{getHeaderRowStyle:s=>{const u=t==null?void 0:t.props.headerRowStyle;return typeof u=="function"?u.call(null,{rowIndex:s}):u},getHeaderRowClass:s=>{const u=[],c=t==null?void 0:t.props.headerRowClassName;return typeof c=="string"?u.push(c):typeof c=="function"&&u.push(c.call(null,{rowIndex:s})),u.join(" ")},getHeaderCellStyle:(s,u,c,f)=>{var d;let p=(d=t==null?void 0:t.props.headerCellStyle)!=null?d:{};typeof p=="function"&&(p=p.call(null,{rowIndex:s,columnIndex:u,row:c,column:f}));const m=Og(u,f.fixed,e.store,c);return Ls(m,"left"),Ls(m,"right"),Object.assign({},p,m)},getHeaderCellClass:(s,u,c,f)=>{const d=$g(n.b(),u,f.fixed,e.store,c),p=[f.id,f.order,f.headerAlign,f.className,f.labelClassName,...d];f.children||p.push("is-leaf"),f.sortable&&p.push("is-sortable");const m=t==null?void 0:t.props.headerCellClassName;return typeof m=="string"?p.push(m):typeof m=="function"&&p.push(m.call(null,{rowIndex:s,columnIndex:u,row:c,column:f})),p.push(n.e("cell")),p.filter(v=>!!v).join(" ")}}}const f2=e=>{const t=[];return e.forEach(n=>{n.children?(t.push(n),t.push.apply(t,f2(n.children))):t.push(n)}),t},p2=e=>{let t=1;const n=(a,l)=>{if(l&&(a.level=l.level+1,t{n(u,a),s+=u.colSpan}),a.colSpan=s}else a.colSpan=1};e.forEach(a=>{a.level=1,n(a,void 0)});const o=[];for(let a=0;a{a.children?(a.rowSpan=1,a.children.forEach(l=>l.isSubColumn=!0)):a.rowSpan=t-a.level+1,o[a.level-1].push(a)}),o};function AX(e){const t=De(Mr),n=k(()=>p2(e.store.states.originColumns.value));return{isGroup:k(()=>{const a=n.value.length>1;return a&&t&&(t.state.isGroup.value=!0),a}),toggleAllSelection:a=>{a.stopPropagation(),t==null||t.store.commit("toggleAllSelection")},columnRows:n}}var PX=Y({name:"ElTableHeader",components:{ElCheckbox:Ho},props:{fixed:{type:String,default:""},store:{required:!0,type:Object},border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})}},setup(e,{emit:t}){const n=lt(),o=De(Mr),r=Se("table"),a=R({}),{onColumnsChange:l,onScrollableChange:s}=d2(o);at(async()=>{await We(),await We();const{prop:S,order:E}=e.defaultSort;o==null||o.store.commit("sort",{prop:S,order:E,init:!0})});const{handleHeaderClick:u,handleHeaderContextMenu:c,handleMouseDown:f,handleMouseMove:d,handleMouseOut:p,handleSortClick:m,handleFilterClick:v}=IX(e,t),{getHeaderRowStyle:h,getHeaderRowClass:C,getHeaderCellStyle:g,getHeaderCellClass:y}=MX(e),{isGroup:_,toggleAllSelection:b,columnRows:w}=AX(e);return n.state={onColumnsChange:l,onScrollableChange:s},n.filterPanels=a,{ns:r,filterPanels:a,onColumnsChange:l,onScrollableChange:s,columnRows:w,getHeaderRowClass:C,getHeaderRowStyle:h,getHeaderCellClass:y,getHeaderCellStyle:g,handleHeaderClick:u,handleHeaderContextMenu:c,handleMouseDown:f,handleMouseMove:d,handleMouseOut:p,handleSortClick:m,handleFilterClick:v,isGroup:_,toggleAllSelection:b}},render(){const{ns:e,isGroup:t,columnRows:n,getHeaderCellStyle:o,getHeaderCellClass:r,getHeaderRowClass:a,getHeaderRowStyle:l,handleHeaderClick:s,handleHeaderContextMenu:u,handleMouseDown:c,handleMouseMove:f,handleSortClick:d,handleMouseOut:p,store:m,$parent:v}=this;let h=1;return Ke("thead",{class:{[e.is("group")]:t}},n.map((C,g)=>Ke("tr",{class:a(g),key:g,style:l(g)},C.map((y,_)=>(y.rowSpan>h&&(h=y.rowSpan),Ke("th",{class:r(g,_,C,y),colspan:y.colSpan,key:`${y.id}-thead`,rowspan:y.rowSpan,style:o(g,_,C,y),onClick:b=>{b.currentTarget.classList.contains("noclick")||s(b,y)},onContextmenu:b=>u(b,y),onMousedown:b=>c(b,y),onMousemove:b=>f(b,y),onMouseout:p},[Ke("div",{class:["cell",y.filteredValue&&y.filteredValue.length>0?"highlight":""]},[y.renderHeader?y.renderHeader({column:y,$index:_,store:m,_self:v}):y.label,y.sortable&&Ke("span",{onClick:b=>d(b,y),class:"caret-wrapper"},[Ke("i",{onClick:b=>d(b,y,"ascending"),class:"sort-caret ascending"}),Ke("i",{onClick:b=>d(b,y,"descending"),class:"sort-caret descending"})]),y.filterable&&Ke(NX,{store:m,placement:y.filterPlacement||"bottom-start",column:y,upDataColumn:(b,w)=>{y[b]=w}},{"filter-icon":()=>y.renderFilterIcon?y.renderFilterIcon({filterOpened:y.filterOpened}):null})])]))))))}});function Op(e,t,n=.01){return e-t>n}function RX(e){const t=De(Mr),n=R(""),o=R(Ke("div")),r=(v,h,C)=>{var g;const y=t,_=$p(v);let b;const w=(g=y==null?void 0:y.vnode.el)==null?void 0:g.dataset.prefix;_&&(b=g1({columns:e.store.states.columns.value},_,w),b&&(y==null||y.emit(`cell-${C}`,h,b,_,v))),y==null||y.emit(`row-${C}`,h,b,v)},a=(v,h)=>{r(v,h,"dblclick")},l=(v,h)=>{e.store.commit("setCurrentRow",h),r(v,h,"click")},s=(v,h)=>{r(v,h,"contextmenu")},u=co(v=>{e.store.commit("setHoverRow",v)},30),c=co(()=>{e.store.commit("setHoverRow",null)},30),f=v=>{const h=window.getComputedStyle(v,null),C=Number.parseInt(h.paddingLeft,10)||0,g=Number.parseInt(h.paddingRight,10)||0,y=Number.parseInt(h.paddingTop,10)||0,_=Number.parseInt(h.paddingBottom,10)||0;return{left:C,right:g,top:y,bottom:_}},d=(v,h,C)=>{let g=h.target.parentNode;for(;v>1&&(g=g==null?void 0:g.nextSibling,!(!g||g.nodeName!=="TR"));)C(g,"hover-row hover-fixed-row"),v--};return{handleDoubleClick:a,handleClick:l,handleContextMenu:s,handleMouseEnter:u,handleMouseLeave:c,handleCellMouseEnter:(v,h,C)=>{var g;const y=t,_=$p(v),b=(g=y==null?void 0:y.vnode.el)==null?void 0:g.dataset.prefix;if(_){const I=g1({columns:e.store.states.columns.value},_,b);_.rowSpan>1&&d(_.rowSpan,v,Mo);const H=y.hoverState={cell:_,column:I,row:h};y==null||y.emit("cell-mouse-enter",H.row,H.column,H.cell,v)}if(!C)return;const w=v.target.querySelector(".cell");if(!(wo(w,`${b}-tooltip`)&&w.childNodes.length))return;const S=document.createRange();S.setStart(w,0),S.setEnd(w,w.childNodes.length);let{width:E,height:$}=S.getBoundingClientRect();const O=E-Math.floor(E),{width:A,height:M}=w.getBoundingClientRect();O<.001&&(E=Math.floor(E)),$-Math.floor($)<.001&&($=Math.floor($));const{top:U,left:j,right:W,bottom:L}=f(w),P=j+W,x=U+L;(Op(E+P,A)||Op($+x,M)||Op(w.scrollWidth,A))&&pX(C,_.innerText||_.textContent,_,y)},handleCellMouseLeave:v=>{const h=$p(v);if(!h)return;h.rowSpan>1&&d(h.rowSpan,v,Kn);const C=t==null?void 0:t.hoverState;t==null||t.emit("cell-mouse-leave",C==null?void 0:C.row,C==null?void 0:C.column,C==null?void 0:C.cell,v)},tooltipContent:n,tooltipTrigger:o}}function LX(e){const t=De(Mr),n=Se("table");return{getRowStyle:(c,f)=>{const d=t==null?void 0:t.props.rowStyle;return typeof d=="function"?d.call(null,{row:c,rowIndex:f}):d||null},getRowClass:(c,f)=>{const d=[n.e("row")];t!=null&&t.props.highlightCurrentRow&&c===e.store.states.currentRow.value&&d.push("current-row"),e.stripe&&f%2===1&&d.push(n.em("row","striped"));const p=t==null?void 0:t.props.rowClassName;return typeof p=="string"?d.push(p):typeof p=="function"&&d.push(p.call(null,{row:c,rowIndex:f})),d},getCellStyle:(c,f,d,p)=>{const m=t==null?void 0:t.props.cellStyle;let v=m??{};typeof m=="function"&&(v=m.call(null,{rowIndex:c,columnIndex:f,row:d,column:p}));const h=Og(f,e==null?void 0:e.fixed,e.store);return Ls(h,"left"),Ls(h,"right"),Object.assign({},v,h)},getCellClass:(c,f,d,p,m)=>{const v=$g(n.b(),f,e==null?void 0:e.fixed,e.store,void 0,m),h=[p.id,p.align,p.className,...v],C=t==null?void 0:t.props.cellClassName;return typeof C=="string"?h.push(C):typeof C=="function"&&h.push(C.call(null,{rowIndex:c,columnIndex:f,row:d,column:p})),h.push(n.e("cell")),h.filter(g=>!!g).join(" ")},getSpan:(c,f,d,p)=>{let m=1,v=1;const h=t==null?void 0:t.props.spanMethod;if(typeof h=="function"){const C=h({row:c,column:f,rowIndex:d,columnIndex:p});Array.isArray(C)?(m=C[0],v=C[1]):typeof C=="object"&&(m=C.rowspan,v=C.colspan)}return{rowspan:m,colspan:v}},getColspanRealWidth:(c,f,d)=>{if(f<1)return c[d].realWidth;const p=c.map(({realWidth:m,width:v})=>m||v).slice(d,d+f);return Number(p.reduce((m,v)=>Number(m)+Number(v),-1))}}}function xX(e){const t=De(Mr),n=Se("table"),{handleDoubleClick:o,handleClick:r,handleContextMenu:a,handleMouseEnter:l,handleMouseLeave:s,handleCellMouseEnter:u,handleCellMouseLeave:c,tooltipContent:f,tooltipTrigger:d}=RX(e),{getRowStyle:p,getRowClass:m,getCellStyle:v,getCellClass:h,getSpan:C,getColspanRealWidth:g}=LX(e),y=k(()=>e.store.states.columns.value.findIndex(({type:E})=>E==="default")),_=(E,$)=>{const O=t.props.rowKey;return O?Rn(E,O):$},b=(E,$,O,A=!1)=>{const{tooltipEffect:M,tooltipOptions:D,store:U}=e,{indent:j,columns:W}=U.states,L=m(E,$);let P=!0;return O&&(L.push(n.em("row",`level-${O.level}`)),P=O.display),Ke("tr",{style:[P?null:{display:"none"},p(E,$)],class:L,key:_(E,$),onDblclick:I=>o(I,E),onClick:I=>r(I,E),onContextmenu:I=>a(I,E),onMouseenter:()=>l($),onMouseleave:s},W.value.map((I,H)=>{const{rowspan:G,colspan:J}=C(E,I,$,H);if(!G||!J)return null;const ee=Object.assign({},I);ee.realWidth=g(W.value,J,H);const fe={store:e.store,_self:e.context||t,column:ee,row:E,$index:$,cellIndex:H,expanded:A};H===y.value&&O&&(fe.treeNode={indent:O.level*j.value,level:O.level},typeof O.expanded=="boolean"&&(fe.treeNode.expanded=O.expanded,"loading"in O&&(fe.treeNode.loading=O.loading),"noLazyChildren"in O&&(fe.treeNode.noLazyChildren=O.noLazyChildren)));const Te=`${_(E,$)},${H}`,oe=ee.columnKey||ee.rawColumnKey||"",ke=w(H,I,fe),ae=I.showOverflowTooltip&&Ax({effect:M},D,I.showOverflowTooltip);return Ke("td",{style:v($,H,E,I),class:h($,H,E,I,J-1),key:`${oe}${Te}`,rowspan:G,colspan:J,onMouseenter:Oe=>u(Oe,E,ae),onMouseleave:c},[ke])}))},w=(E,$,O)=>$.renderCell(O);return{wrappedRowRender:(E,$)=>{const O=e.store,{isRowExpanded:A,assertRowKey:M}=O,{treeData:D,lazyTreeNodeMap:U,childrenColumnName:j,rowKey:W}=O.states,L=O.states.columns.value;if(L.some(({type:x})=>x==="expand")){const x=A(E),I=b(E,$,void 0,x),H=t.renderExpanded;return x?H?[[I,Ke("tr",{key:`expanded-row__${I.key}`},[Ke("td",{colspan:L.length,class:`${n.e("cell")} ${n.e("expanded-cell")}`},[H({row:E,$index:$,store:O,expanded:x})])])]]:(console.error("[Element Error]renderExpanded is required."),I):[[I]]}else if(Object.keys(D.value).length){M();const x=Rn(E,W.value);let I=D.value[x],H=null;I&&(H={expanded:I.expanded,level:I.level,display:!0},typeof I.lazy=="boolean"&&(typeof I.loaded=="boolean"&&I.loaded&&(H.noLazyChildren=!(I.children&&I.children.length)),H.loading=I.loading));const G=[b(E,$,H)];if(I){let J=0;const ee=(Te,oe)=>{Te&&Te.length&&oe&&Te.forEach(ke=>{const ae={display:oe.display&&oe.expanded,level:oe.level+1,expanded:!1,noLazyChildren:!1,loading:!1},Oe=Rn(ke,W.value);if(Oe==null)throw new Error("For nested data item, row-key is required.");if(I={...D.value[Oe]},I&&(ae.expanded=I.expanded,I.level=I.level||ae.level,I.display=!!(I.expanded&&ae.display),typeof I.lazy=="boolean"&&(typeof I.loaded=="boolean"&&I.loaded&&(ae.noLazyChildren=!(I.children&&I.children.length)),ae.loading=I.loading)),J++,G.push(b(ke,$+J,ae)),I){const we=U.value[Oe]||ke[j.value];ee(we,I)}})};I.display=!0;const fe=U.value[x]||E[j.value];ee(fe,I)}return G}else return b(E,$,void 0)},tooltipContent:f,tooltipTrigger:d}}const DX={store:{required:!0,type:Object},stripe:Boolean,tooltipEffect:String,tooltipOptions:{type:Object},context:{default:()=>({}),type:Object},rowClassName:[String,Function],rowStyle:[Object,Function],fixed:{type:String,default:""},highlight:Boolean};var FX=Y({name:"ElTableBody",props:DX,setup(e){const t=lt(),n=De(Mr),o=Se("table"),{wrappedRowRender:r,tooltipContent:a,tooltipTrigger:l}=xX(e),{onColumnsChange:s,onScrollableChange:u}=d2(n),c=[];return ve(e.store.states.hoverRow,(f,d)=>{var p;const m=t==null?void 0:t.vnode.el,v=Array.from((m==null?void 0:m.children)||[]).filter(g=>g==null?void 0:g.classList.contains(`${o.e("row")}`));let h=f;const C=(p=v[h])==null?void 0:p.childNodes;if(C!=null&&C.length){let g=0;Array.from(C).reduce((_,b,w)=>{var S,E;return((S=C[w])==null?void 0:S.colSpan)>1&&(g=(E=C[w])==null?void 0:E.colSpan),b.nodeName!=="TD"&&g===0&&_.push(w),g>0&&g--,_},[]).forEach(_=>{var b;for(h=f;h>0;){const w=(b=v[h-1])==null?void 0:b.childNodes;if(w[_]&&w[_].nodeName==="TD"&&w[_].rowSpan>1){Mo(w[_],"hover-cell"),c.push(w[_]);break}h--}})}else c.forEach(g=>Kn(g,"hover-cell")),c.length=0;!e.store.states.isComplex.value||!Ct||Ma(()=>{const g=v[d],y=v[f];g&&!g.classList.contains("hover-fixed-row")&&Kn(g,"hover-row"),y&&Mo(y,"hover-row")})}),lr(()=>{var f;(f=To)==null||f()}),{ns:o,onColumnsChange:s,onScrollableChange:u,wrappedRowRender:r,tooltipContent:a,tooltipTrigger:l}},render(){const{wrappedRowRender:e,store:t}=this,n=t.states.data.value||[];return Ke("tbody",{tabIndex:-1},[n.reduce((o,r)=>o.concat(e(r,o.length)),[])])}});function BX(){const e=De(Mr),t=e==null?void 0:e.store,n=k(()=>t.states.fixedLeafColumnsLength.value),o=k(()=>t.states.rightFixedColumns.value.length),r=k(()=>t.states.columns.value.length),a=k(()=>t.states.fixedColumns.value.length),l=k(()=>t.states.rightFixedColumns.value.length);return{leftFixedLeafCount:n,rightFixedLeafCount:o,columnsCount:r,leftFixedCount:a,rightFixedCount:l,columns:t.states.columns}}function VX(e){const{columns:t}=BX(),n=Se("table");return{getCellClasses:(a,l)=>{const s=a[l],u=[n.e("cell"),s.id,s.align,s.labelClassName,...$g(n.b(),l,s.fixed,e.store)];return s.className&&u.push(s.className),s.children||u.push(n.is("leaf")),u},getCellStyles:(a,l)=>{const s=Og(l,a.fixed,e.store);return Ls(s,"left"),Ls(s,"right"),s},columns:t}}var HX=Y({name:"ElTableFooter",props:{fixed:{type:String,default:""},store:{required:!0,type:Object},summaryMethod:Function,sumText:String,border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})}},setup(e){const{getCellClasses:t,getCellStyles:n,columns:o}=VX(e);return{ns:Se("table"),getCellClasses:t,getCellStyles:n,columns:o}},render(){const{columns:e,getCellStyles:t,getCellClasses:n,summaryMethod:o,sumText:r}=this,a=this.store.states.data.value;let l=[];return o?l=o({columns:e,data:a}):e.forEach((s,u)=>{if(u===0){l[u]=r;return}const c=a.map(m=>Number(m[s.property])),f=[];let d=!0;c.forEach(m=>{if(!Number.isNaN(+m)){d=!1;const v=`${m}`.split(".")[1];f.push(v?v.length:0)}});const p=Math.max.apply(null,f);d?l[u]="":l[u]=c.reduce((m,v)=>{const h=Number(v);return Number.isNaN(+h)?m:Number.parseFloat((m+v).toFixed(Math.min(p,20)))},0)}),Ke(Ke("tfoot",[Ke("tr",{},[...e.map((s,u)=>Ke("td",{key:u,colspan:s.colSpan,rowspan:s.rowSpan,class:n(e,u),style:t(s,u)},[Ke("div",{class:["cell",s.labelClassName]},[l[u]])]))])]))}});function zX(e){return{setCurrentRow:f=>{e.commit("setCurrentRow",f)},getSelectionRows:()=>e.getSelectionRows(),toggleRowSelection:(f,d)=>{e.toggleRowSelection(f,d,!1),e.updateAllSelected()},clearSelection:()=>{e.clearSelection()},clearFilter:f=>{e.clearFilter(f)},toggleAllSelection:()=>{e.commit("toggleAllSelection")},toggleRowExpansion:(f,d)=>{e.toggleRowExpansionAdapter(f,d)},clearSort:()=>{e.clearSort()},sort:(f,d)=>{e.commit("sort",{prop:f,order:d})}}}function jX(e,t,n,o){const r=R(!1),a=R(null),l=R(!1),s=I=>{l.value=I},u=R({width:null,height:null,headerHeight:null}),c=R(!1),f={display:"inline-block",verticalAlign:"middle"},d=R(),p=R(0),m=R(0),v=R(0),h=R(0),C=R(0);Mn(()=>{t.setHeight(e.height)}),Mn(()=>{t.setMaxHeight(e.maxHeight)}),ve(()=>[e.currentRowKey,n.states.rowKey],([I,H])=>{!i(H)||!i(I)||n.setCurrentRowKey(`${I}`)},{immediate:!0}),ve(()=>e.data,I=>{o.store.commit("setData",I)},{immediate:!0,deep:!0}),Mn(()=>{e.expandRowKeys&&n.setExpandRowKeysAdapter(e.expandRowKeys)});const g=()=>{o.store.commit("setHoverRow",null),o.hoverState&&(o.hoverState=null)},y=(I,H)=>{const{pixelX:G,pixelY:J}=H;Math.abs(G)>=Math.abs(J)&&(o.refs.bodyWrapper.scrollLeft+=H.pixelX/5)},_=k(()=>e.height||e.maxHeight||n.states.fixedColumns.value.length>0||n.states.rightFixedColumns.value.length>0),b=k(()=>({width:t.bodyWidth.value?`${t.bodyWidth.value}px`:""})),w=()=>{_.value&&t.updateElsHeight(),t.updateColumnsWidth(),requestAnimationFrame(O)};at(async()=>{await We(),n.updateColumns(),A(),requestAnimationFrame(w);const I=o.vnode.el,H=o.refs.headerWrapper;e.flexible&&I&&I.parentElement&&(I.parentElement.style.minWidth="0"),u.value={width:d.value=I.offsetWidth,height:I.offsetHeight,headerHeight:e.showHeader&&H?H.offsetHeight:null},n.states.columns.value.forEach(G=>{G.filteredValue&&G.filteredValue.length&&o.store.commit("filterChange",{column:G,values:G.filteredValue,silent:!0})}),o.$ready=!0});const S=(I,H)=>{if(!I)return;const G=Array.from(I.classList).filter(J=>!J.startsWith("is-scrolling-"));G.push(t.scrollX.value?H:"is-scrolling-none"),I.className=G.join(" ")},E=I=>{const{tableWrapper:H}=o.refs;S(H,I)},$=I=>{const{tableWrapper:H}=o.refs;return!!(H&&H.classList.contains(I))},O=function(){if(!o.refs.scrollBarRef)return;if(!t.scrollX.value){const oe="is-scrolling-none";$(oe)||E(oe);return}const I=o.refs.scrollBarRef.wrapRef;if(!I)return;const{scrollLeft:H,offsetWidth:G,scrollWidth:J}=I,{headerWrapper:ee,footerWrapper:fe}=o.refs;ee&&(ee.scrollLeft=H),fe&&(fe.scrollLeft=H);const Te=J-G-1;H>=Te?E("is-scrolling-right"):E(H===0?"is-scrolling-left":"is-scrolling-middle")},A=()=>{o.refs.scrollBarRef&&(o.refs.scrollBarRef.wrapRef&&qt(o.refs.scrollBarRef.wrapRef,"scroll",O,{passive:!0}),e.fit?Qt(o.vnode.el,M):qt(window,"resize",M),Qt(o.refs.bodyWrapper,()=>{var I,H;M(),(H=(I=o.refs)==null?void 0:I.scrollBarRef)==null||H.update()}))},M=()=>{var I,H,G,J;const ee=o.vnode.el;if(!o.$ready||!ee)return;let fe=!1;const{width:Te,height:oe,headerHeight:ke}=u.value,ae=d.value=ee.offsetWidth;Te!==ae&&(fe=!0);const Oe=ee.offsetHeight;(e.height||_.value)&&oe!==Oe&&(fe=!0);const we=e.tableLayout==="fixed"?o.refs.headerWrapper:(I=o.refs.tableHeaderRef)==null?void 0:I.$el;e.showHeader&&(we==null?void 0:we.offsetHeight)!==ke&&(fe=!0),p.value=((H=o.refs.tableWrapper)==null?void 0:H.scrollHeight)||0,v.value=(we==null?void 0:we.scrollHeight)||0,h.value=((G=o.refs.footerWrapper)==null?void 0:G.offsetHeight)||0,C.value=((J=o.refs.appendWrapper)==null?void 0:J.offsetHeight)||0,m.value=p.value-v.value-h.value-C.value,fe&&(u.value={width:ae,height:Oe,headerHeight:e.showHeader&&(we==null?void 0:we.offsetHeight)||0},w())},D=hn(),U=k(()=>{const{bodyWidth:I,scrollY:H,gutterWidth:G}=t;return I.value?`${I.value-(H.value?G:0)}px`:""}),j=k(()=>e.maxHeight?"fixed":e.tableLayout),W=k(()=>{if(e.data&&e.data.length)return null;let I="100%";e.height&&m.value&&(I=`${m.value}px`);const H=d.value;return{width:H?`${H}px`:"",height:I}}),L=k(()=>e.height?{height:Number.isNaN(Number(e.height))?e.height:`${e.height}px`}:e.maxHeight?{maxHeight:Number.isNaN(Number(e.maxHeight))?e.maxHeight:`${e.maxHeight}px`}:{}),P=k(()=>e.height?{height:"100%"}:e.maxHeight?Number.isNaN(Number(e.maxHeight))?{maxHeight:`calc(${e.maxHeight} - ${v.value+h.value}px)`}:{maxHeight:`${e.maxHeight-v.value-h.value}px`}:{});return{isHidden:r,renderExpanded:a,setDragVisible:s,isGroup:c,handleMouseLeave:g,handleHeaderFooterMousewheel:y,tableSize:D,emptyBlockStyle:W,handleFixedMousewheel:(I,H)=>{const G=o.refs.bodyWrapper;if(Math.abs(H.spinY)>0){const J=G.scrollTop;H.pixelY<0&&J!==0&&I.preventDefault(),H.pixelY>0&&G.scrollHeight-G.clientHeight>J&&I.preventDefault(),G.scrollTop+=Math.ceil(H.pixelY/5)}else G.scrollLeft+=Math.ceil(H.pixelX/5)},resizeProxyVisible:l,bodyWidth:U,resizeState:u,doLayout:w,tableBodyStyles:b,tableLayout:j,scrollbarViewStyle:f,tableInnerStyle:L,scrollbarStyle:P}}function WX(e){const t=R(),n=()=>{const r=e.vnode.el.querySelector(".hidden-columns"),a={childList:!0,subtree:!0},l=e.store.states.updateOrderFns;t.value=new MutationObserver(()=>{l.forEach(s=>s())}),t.value.observe(r,a)};at(()=>{n()}),lr(()=>{var o;(o=t.value)==null||o.disconnect()})}var KX={data:{type:Array,default:()=>[]},size:gn,width:[String,Number],height:[String,Number],maxHeight:[String,Number],fit:{type:Boolean,default:!0},stripe:Boolean,border:Boolean,rowKey:[String,Function],showHeader:{type:Boolean,default:!0},showSummary:Boolean,sumText:String,summaryMethod:Function,rowClassName:[String,Function],rowStyle:[Object,Function],cellClassName:[String,Function],cellStyle:[Object,Function],headerRowClassName:[String,Function],headerRowStyle:[Object,Function],headerCellClassName:[String,Function],headerCellStyle:[Object,Function],highlightCurrentRow:Boolean,currentRowKey:[String,Number],emptyText:String,expandRowKeys:Array,defaultExpandAll:Boolean,defaultSort:Object,tooltipEffect:String,tooltipOptions:Object,spanMethod:Function,selectOnIndeterminate:{type:Boolean,default:!0},indent:{type:Number,default:16},treeProps:{type:Object,default:()=>({hasChildren:"hasChildren",children:"children"})},lazy:Boolean,load:Function,style:{type:Object,default:()=>({})},className:{type:String,default:""},tableLayout:{type:String,default:"fixed"},scrollbarAlwaysOn:Boolean,flexible:Boolean,showOverflowTooltip:[Boolean,Object]};function h2(e){const t=e.tableLayout==="auto";let n=e.columns||[];t&&n.every(r=>r.width===void 0)&&(n=[]);const o=r=>{const a={key:`${e.tableLayout}_${r.id}`,style:{},name:void 0};return t?a.style={width:`${r.width}px`}:a.name=r.id,a};return Ke("colgroup",{},n.map(r=>Ke("col",o(r))))}h2.props=["columns","tableLayout"];const UX=()=>{const e=R(),t=(a,l)=>{const s=e.value;s&&s.scrollTo(a,l)},n=(a,l)=>{const s=e.value;s&&Je(l)&&["Top","Left"].includes(a)&&s[`setScroll${a}`](l)};return{scrollBarRef:e,scrollTo:t,setScrollTop:a=>n("Top",a),setScrollLeft:a=>n("Left",a)}};let qX=1;const YX=Y({name:"ElTable",directives:{Mousewheel:PV},components:{TableHeader:PX,TableBody:FX,TableFooter:HX,ElScrollbar:ea,hColgroup:h2},props:KX,emits:["select","select-all","selection-change","cell-mouse-enter","cell-mouse-leave","cell-contextmenu","cell-click","cell-dblclick","row-click","row-contextmenu","row-dblclick","header-click","header-contextmenu","sort-change","filter-change","current-change","header-dragend","expand-change"],setup(e){const{t}=$t(),n=Se("table"),o=lt();yt(Mr,o);const r=wX(o,e);o.store=r;const a=new CX({store:o.store,table:o,fit:e.fit,showHeader:e.showHeader});o.layout=a;const l=k(()=>(r.states.data.value||[]).length===0),{setCurrentRow:s,getSelectionRows:u,toggleRowSelection:c,clearSelection:f,clearFilter:d,toggleAllSelection:p,toggleRowExpansion:m,clearSort:v,sort:h}=zX(r),{isHidden:C,renderExpanded:g,setDragVisible:y,isGroup:_,handleMouseLeave:b,handleHeaderFooterMousewheel:w,tableSize:S,emptyBlockStyle:E,handleFixedMousewheel:$,resizeProxyVisible:O,bodyWidth:A,resizeState:M,doLayout:D,tableBodyStyles:U,tableLayout:j,scrollbarViewStyle:W,tableInnerStyle:L,scrollbarStyle:P}=jX(e,a,r,o),{scrollBarRef:x,scrollTo:I,setScrollLeft:H,setScrollTop:G}=UX(),J=co(D,50),ee=`${n.namespace.value}-table_${qX++}`;o.tableId=ee,o.state={isGroup:_,resizeState:M,doLayout:D,debouncedUpdateLayout:J};const fe=k(()=>e.sumText||t("el.table.sumText")),Te=k(()=>e.emptyText||t("el.table.emptyText")),oe=k(()=>p2(r.states.originColumns.value)[0]);return WX(o),{ns:n,layout:a,store:r,columns:oe,handleHeaderFooterMousewheel:w,handleMouseLeave:b,tableId:ee,tableSize:S,isHidden:C,isEmpty:l,renderExpanded:g,resizeProxyVisible:O,resizeState:M,isGroup:_,bodyWidth:A,tableBodyStyles:U,emptyBlockStyle:E,debouncedUpdateLayout:J,handleFixedMousewheel:$,setCurrentRow:s,getSelectionRows:u,toggleRowSelection:c,clearSelection:f,clearFilter:d,toggleAllSelection:p,toggleRowExpansion:m,clearSort:v,doLayout:D,sort:h,t,setDragVisible:y,context:o,computedSumText:fe,computedEmptyText:Te,tableLayout:j,scrollbarViewStyle:W,tableInnerStyle:L,scrollbarStyle:P,scrollBarRef:x,scrollTo:I,setScrollLeft:H,setScrollTop:G}}}),GX=["data-prefix"],XX={ref:"hiddenColumns",class:"hidden-columns"};function JX(e,t,n,o,r,a){const l=qe("hColgroup"),s=qe("table-header"),u=qe("table-body"),c=qe("table-footer"),f=qe("el-scrollbar"),d=qs("mousewheel");return T(),V("div",{ref:"tableWrapper",class:N([{[e.ns.m("fit")]:e.fit,[e.ns.m("striped")]:e.stripe,[e.ns.m("border")]:e.border||e.isGroup,[e.ns.m("hidden")]:e.isHidden,[e.ns.m("group")]:e.isGroup,[e.ns.m("fluid-height")]:e.maxHeight,[e.ns.m("scrollable-x")]:e.layout.scrollX.value,[e.ns.m("scrollable-y")]:e.layout.scrollY.value,[e.ns.m("enable-row-hover")]:!e.store.states.isComplex.value,[e.ns.m("enable-row-transition")]:(e.store.states.data.value||[]).length!==0&&(e.store.states.data.value||[]).length<100,"has-footer":e.showSummary},e.ns.m(e.tableSize),e.className,e.ns.b(),e.ns.m(`layout-${e.tableLayout}`)]),style:je(e.style),"data-prefix":e.ns.namespace.value,onMouseleave:t[0]||(t[0]=(...p)=>e.handleMouseLeave&&e.handleMouseLeave(...p))},[F("div",{class:N(e.ns.e("inner-wrapper")),style:je(e.tableInnerStyle)},[F("div",XX,[ie(e.$slots,"default")],512),e.showHeader&&e.tableLayout==="fixed"?tt((T(),V("div",{key:0,ref:"headerWrapper",class:N(e.ns.e("header-wrapper"))},[F("table",{ref:"tableHeader",class:N(e.ns.e("header")),style:je(e.tableBodyStyles),border:"0",cellpadding:"0",cellspacing:"0"},[K(l,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),K(s,{ref:"tableHeaderRef",border:e.border,"default-sort":e.defaultSort,store:e.store,onSetDragVisible:e.setDragVisible},null,8,["border","default-sort","store","onSetDragVisible"])],6)],2)),[[d,e.handleHeaderFooterMousewheel]]):te("v-if",!0),F("div",{ref:"bodyWrapper",class:N(e.ns.e("body-wrapper"))},[K(f,{ref:"scrollBarRef","view-style":e.scrollbarViewStyle,"wrap-style":e.scrollbarStyle,always:e.scrollbarAlwaysOn},{default:X(()=>[F("table",{ref:"tableBody",class:N(e.ns.e("body")),cellspacing:"0",cellpadding:"0",border:"0",style:je({width:e.bodyWidth,tableLayout:e.tableLayout})},[K(l,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),e.showHeader&&e.tableLayout==="auto"?(T(),re(s,{key:0,ref:"tableHeaderRef",class:N(e.ns.e("body-header")),border:e.border,"default-sort":e.defaultSort,store:e.store,onSetDragVisible:e.setDragVisible},null,8,["class","border","default-sort","store","onSetDragVisible"])):te("v-if",!0),K(u,{context:e.context,highlight:e.highlightCurrentRow,"row-class-name":e.rowClassName,"tooltip-effect":e.tooltipEffect,"tooltip-options":e.tooltipOptions,"row-style":e.rowStyle,store:e.store,stripe:e.stripe},null,8,["context","highlight","row-class-name","tooltip-effect","tooltip-options","row-style","store","stripe"]),e.showSummary&&e.tableLayout==="auto"?(T(),re(c,{key:1,class:N(e.ns.e("body-footer")),border:e.border,"default-sort":e.defaultSort,store:e.store,"sum-text":e.computedSumText,"summary-method":e.summaryMethod},null,8,["class","border","default-sort","store","sum-text","summary-method"])):te("v-if",!0)],6),e.isEmpty?(T(),V("div",{key:0,ref:"emptyBlock",style:je(e.emptyBlockStyle),class:N(e.ns.e("empty-block"))},[F("span",{class:N(e.ns.e("empty-text"))},[ie(e.$slots,"empty",{},()=>[Ge(le(e.computedEmptyText),1)])],2)],6)):te("v-if",!0),e.$slots.append?(T(),V("div",{key:1,ref:"appendWrapper",class:N(e.ns.e("append-wrapper"))},[ie(e.$slots,"append")],2)):te("v-if",!0)]),_:3},8,["view-style","wrap-style","always"])],2),e.showSummary&&e.tableLayout==="fixed"?tt((T(),V("div",{key:1,ref:"footerWrapper",class:N(e.ns.e("footer-wrapper"))},[F("table",{class:N(e.ns.e("footer")),cellspacing:"0",cellpadding:"0",border:"0",style:je(e.tableBodyStyles)},[K(l,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),K(c,{border:e.border,"default-sort":e.defaultSort,store:e.store,"sum-text":e.computedSumText,"summary-method":e.summaryMethod},null,8,["border","default-sort","store","sum-text","summary-method"])],6)],2)),[[kt,!e.isEmpty],[d,e.handleHeaderFooterMousewheel]]):te("v-if",!0),e.border||e.isGroup?(T(),V("div",{key:2,class:N(e.ns.e("border-left-patch"))},null,2)):te("v-if",!0)],6),tt(F("div",{ref:"resizeProxy",class:N(e.ns.e("column-resize-proxy"))},null,2),[[kt,e.resizeProxyVisible]])],46,GX)}var ZX=Ie(YX,[["render",JX],["__file","table.vue"]]);const QX={selection:"table-column--selection",expand:"table__expand-column"},eJ={default:{order:""},selection:{width:48,minWidth:48,realWidth:48,order:""},expand:{width:48,minWidth:48,realWidth:48,order:""},index:{width:48,minWidth:48,realWidth:48,order:""}},tJ=e=>QX[e]||"",nJ={selection:{renderHeader({store:e,column:t}){function n(){return e.states.data.value&&e.states.data.value.length===0}return Ke(Ho,{disabled:n(),size:e.states.tableSize.value,indeterminate:e.states.selection.value.length>0&&!e.states.isAllSelected.value,"onUpdate:modelValue":e.toggleAllSelection,modelValue:e.states.isAllSelected.value,ariaLabel:t.label})},renderCell({row:e,column:t,store:n,$index:o}){return Ke(Ho,{disabled:t.selectable?!t.selectable.call(null,e,o):!1,size:n.states.tableSize.value,onChange:()=>{n.commit("rowSelectedChanged",e)},onClick:r=>r.stopPropagation(),modelValue:n.isSelected(e),ariaLabel:t.label})},sortable:!1,resizable:!1},index:{renderHeader({column:e}){return e.label||"#"},renderCell({column:e,$index:t}){let n=t+1;const o=e.index;return typeof o=="number"?n=t+o:typeof o=="function"&&(n=o(t)),Ke("div",{},[n])},sortable:!1},expand:{renderHeader({column:e}){return e.label||""},renderCell({row:e,store:t,expanded:n}){const{ns:o}=t,r=[o.e("expand-icon")];return n&&r.push(o.em("expand-icon","expanded")),Ke("div",{class:r,onClick:function(l){l.stopPropagation(),t.toggleRowExpansion(e)}},{default:()=>[Ke(ze,null,{default:()=>[Ke(Jn)]})]})},sortable:!1,resizable:!1}};function oJ({row:e,column:t,$index:n}){var o;const r=t.property,a=r&&Mc(e,r).value;return t&&t.formatter?t.formatter(e,t,a,n):((o=a==null?void 0:a.toString)==null?void 0:o.call(a))||""}function rJ({row:e,treeNode:t,store:n},o=!1){const{ns:r}=n;if(!t)return o?[Ke("span",{class:r.e("placeholder")})]:null;const a=[],l=function(s){s.stopPropagation(),!t.loading&&n.loadOrToggle(e)};if(t.indent&&a.push(Ke("span",{class:r.e("indent"),style:{"padding-left":`${t.indent}px`}})),typeof t.expanded=="boolean"&&!t.noLazyChildren){const s=[r.e("expand-icon"),t.expanded?r.em("expand-icon","expanded"):""];let u=Jn;t.loading&&(u=Er),a.push(Ke("div",{class:s,onClick:l},{default:()=>[Ke(ze,{class:{[r.is("loading")]:t.loading}},{default:()=>[Ke(u)]})]}))}else a.push(Ke("span",{class:r.e("placeholder")}));return a}function w1(e,t){return e.reduce((n,o)=>(n[o]=o,n),t)}function aJ(e,t){const n=lt();return{registerComplexWatchers:()=>{const a=["fixed"],l={realWidth:"width",realMinWidth:"minWidth"},s=w1(a,l);Object.keys(s).forEach(u=>{const c=l[u];Tt(t,c)&&ve(()=>t[c],f=>{let d=f;c==="width"&&u==="realWidth"&&(d=Tg(f)),c==="minWidth"&&u==="realMinWidth"&&(d=l2(f)),n.columnConfig.value[c]=d,n.columnConfig.value[u]=d;const p=c==="fixed";e.value.store.scheduleLayout(p)})})},registerNormalWatchers:()=>{const a=["label","filters","filterMultiple","filteredValue","sortable","index","formatter","className","labelClassName","filterClassName","showOverflowTooltip"],l={property:"prop",align:"realAlign",headerAlign:"realHeaderAlign"},s=w1(a,l);Object.keys(s).forEach(u=>{const c=l[u];Tt(t,c)&&ve(()=>t[c],f=>{n.columnConfig.value[u]=f})})}}}function lJ(e,t,n){const o=lt(),r=R(""),a=R(!1),l=R(),s=R(),u=Se("table");Mn(()=>{l.value=e.align?`is-${e.align}`:null,l.value}),Mn(()=>{s.value=e.headerAlign?`is-${e.headerAlign}`:l.value,s.value});const c=k(()=>{let b=o.vnode.vParent||o.parent;for(;b&&!b.tableId&&!b.columnId;)b=b.vnode.vParent||b.parent;return b}),f=k(()=>{const{store:b}=o.parent;if(!b)return!1;const{treeData:w}=b.states,S=w.value;return S&&Object.keys(S).length>0}),d=R(Tg(e.width)),p=R(l2(e.minWidth)),m=b=>(d.value&&(b.width=d.value),p.value&&(b.minWidth=p.value),!d.value&&p.value&&(b.width=void 0),b.minWidth||(b.minWidth=80),b.realWidth=Number(b.width===void 0?b.minWidth:b.width),b),v=b=>{const w=b.type,S=nJ[w]||{};Object.keys(S).forEach($=>{const O=S[$];$!=="className"&&O!==void 0&&(b[$]=O)});const E=tJ(w);if(E){const $=`${i(u.namespace)}-${E}`;b.className=b.className?`${b.className} ${$}`:$}return b},h=b=>{Array.isArray(b)?b.forEach(S=>w(S)):w(b);function w(S){var E;((E=S==null?void 0:S.type)==null?void 0:E.name)==="ElTableColumn"&&(S.vParent=o)}};return{columnId:r,realAlign:l,isSubColumn:a,realHeaderAlign:s,columnOrTableParent:c,setColumnWidth:m,setColumnForcedProps:v,setColumnRenders:b=>{e.renderHeader||b.type!=="selection"&&(b.renderHeader=S=>(o.columnConfig.value.label,ie(t,"header",S,()=>[b.label]))),t["filter-icon"]&&(b.renderFilterIcon=S=>ie(t,"filter-icon",S));let w=b.renderCell;return b.type==="expand"?(b.renderCell=S=>Ke("div",{class:"cell"},[w(S)]),n.value.renderExpanded=S=>t.default?t.default(S):t.default):(w=w||oJ,b.renderCell=S=>{let E=null;if(t.default){const U=t.default(S);E=U.some(j=>j.type!==En)?U:w(S)}else E=w(S);const{columns:$}=n.value.store.states,O=$.value.findIndex(U=>U.type==="default"),A=f.value&&S.cellIndex===O,M=rJ(S,A),D={class:"cell",style:{}};return b.showOverflowTooltip&&(D.class=`${D.class} ${i(u.namespace)}-tooltip`,D.style={width:`${(S.column.realWidth||Number(S.column.width))-1}px`}),h(E),Ke("div",D,[M,E])}),b},getPropsData:(...b)=>b.reduce((w,S)=>(Array.isArray(S)&&S.forEach(E=>{w[E]=e[E]}),w),{}),getColumnElIndex:(b,w)=>Array.prototype.indexOf.call(b,w),updateColumnOrder:()=>{n.value.store.commit("updateColumnOrder",o.columnConfig.value)}}}var sJ={type:{type:String,default:"default"},label:String,className:String,labelClassName:String,property:String,prop:String,width:{type:[String,Number],default:""},minWidth:{type:[String,Number],default:""},renderHeader:Function,sortable:{type:[Boolean,String],default:!1},sortMethod:Function,sortBy:[String,Function,Array],resizable:{type:Boolean,default:!0},columnKey:String,align:String,headerAlign:String,showOverflowTooltip:{type:[Boolean,Object],default:void 0},fixed:[Boolean,String],formatter:Function,selectable:Function,reserveSelection:Boolean,filterMethod:Function,filteredValue:Array,filters:Array,filterPlacement:String,filterMultiple:{type:Boolean,default:!0},filterClassName:String,index:[Number,Function],sortOrders:{type:Array,default:()=>["ascending","descending",null],validator:e=>e.every(t=>["ascending","descending",null].includes(t))}};let iJ=1;var m2=Y({name:"ElTableColumn",components:{ElCheckbox:Ho},props:sJ,setup(e,{slots:t}){const n=lt(),o=R({}),r=k(()=>{let _=n.parent;for(;_&&!_.tableId;)_=_.parent;return _}),{registerNormalWatchers:a,registerComplexWatchers:l}=aJ(r,e),{columnId:s,isSubColumn:u,realHeaderAlign:c,columnOrTableParent:f,setColumnWidth:d,setColumnForcedProps:p,setColumnRenders:m,getPropsData:v,getColumnElIndex:h,realAlign:C,updateColumnOrder:g}=lJ(e,t,r),y=f.value;s.value=`${y.tableId||y.columnId}_column_${iJ++}`,Su(()=>{u.value=r.value!==y;const _=e.type||"default",b=e.sortable===""?!0:e.sortable,w=pn(e.showOverflowTooltip)?y.props.showOverflowTooltip:e.showOverflowTooltip,S={...eJ[_],id:s.value,type:_,property:e.prop||e.property,align:C,headerAlign:c,showOverflowTooltip:w,filterable:e.filters||e.filterMethod,filteredValue:[],filterPlacement:"",filterClassName:"",isColumnGroup:!1,isSubColumn:!1,filterOpened:!1,sortable:b,index:e.index,rawColumnKey:n.vnode.key};let M=v(["columnKey","label","className","labelClassName","type","renderHeader","formatter","fixed","resizable"],["sortMethod","sortBy","sortOrders"],["selectable","reserveSelection"],["filterMethod","filters","filterMultiple","filterOpened","filteredValue","filterPlacement","filterClassName"]);M=uX(S,M),M=dX(m,d,p)(M),o.value=M,a(),l()}),at(()=>{var _;const b=f.value,w=u.value?b.vnode.el.children:(_=b.refs.hiddenColumns)==null?void 0:_.children,S=()=>h(w||[],n.vnode.el);o.value.getColumnIndex=S,S()>-1&&r.value.store.commit("insertColumn",o.value,u.value?b.columnConfig.value:null,g)}),zt(()=>{o.value.getColumnIndex()>-1&&r.value.store.commit("removeColumn",o.value,u.value?y.columnConfig.value:null,g)}),n.columnId=s.value,n.columnConfig=o},render(){var e,t,n;try{const o=(t=(e=this.$slots).default)==null?void 0:t.call(e,{row:{},column:{},$index:-1}),r=[];if(Array.isArray(o))for(const l of o)((n=l.type)==null?void 0:n.name)==="ElTableColumn"||l.shapeFlag&2?r.push(l):l.type===Ve&&Array.isArray(l.children)&&l.children.forEach(s=>{(s==null?void 0:s.patchFlag)!==1024&&!nt(s==null?void 0:s.children)&&r.push(s)});return Ke("div",r)}catch{return Ke("div",[])}}});const uJ=ut(ZX,{TableColumn:m2}),cJ=tn(m2);var pu=(e=>(e.ASC="asc",e.DESC="desc",e))(pu||{}),hu=(e=>(e.CENTER="center",e.RIGHT="right",e))(hu||{}),v2=(e=>(e.LEFT="left",e.RIGHT="right",e))(v2||{});const am={asc:"desc",desc:"asc"},mu=Symbol("placeholder"),dJ=(e,t,n)=>{var o;const r={flexGrow:0,flexShrink:0,...n?{}:{flexGrow:e.flexGrow||0,flexShrink:e.flexShrink||1}};n||(r.flexShrink=1);const a={...(o=e.style)!=null?o:{},...r,flexBasis:"auto",width:e.width};return t||(e.maxWidth&&(a.maxWidth=e.maxWidth),e.minWidth&&(a.minWidth=e.minWidth)),a};function fJ(e,t,n){const o=k(()=>i(t).filter(h=>!h.hidden)),r=k(()=>i(o).filter(h=>h.fixed==="left"||h.fixed===!0)),a=k(()=>i(o).filter(h=>h.fixed==="right")),l=k(()=>i(o).filter(h=>!h.fixed)),s=k(()=>{const h=[];return i(r).forEach(C=>{h.push({...C,placeholderSign:mu})}),i(l).forEach(C=>{h.push(C)}),i(a).forEach(C=>{h.push({...C,placeholderSign:mu})}),h}),u=k(()=>i(r).length||i(a).length),c=k(()=>i(t).reduce((C,g)=>(C[g.key]=dJ(g,i(n),e.fixed),C),{})),f=k(()=>i(o).reduce((h,C)=>h+C.width,0)),d=h=>i(t).find(C=>C.key===h),p=h=>i(c)[h],m=(h,C)=>{h.width=C};function v(h){var C;const{key:g}=h.currentTarget.dataset;if(!g)return;const{sortState:y,sortBy:_}=e;let b=pu.ASC;dt(y)?b=am[y[g]]:b=am[_.order],(C=e.onColumnSort)==null||C.call(e,{column:d(g),key:g,order:b})}return{columns:t,columnsStyles:c,columnsTotalWidth:f,fixedColumnsOnLeft:r,fixedColumnsOnRight:a,hasFixedColumns:u,mainColumns:s,normalColumns:l,visibleColumns:o,getColumn:d,getColumnStyle:p,updateColumnWidth:m,onColumnSorted:v}}const pJ=(e,{mainTableRef:t,leftTableRef:n,rightTableRef:o,onMaybeEndReached:r})=>{const a=R({scrollLeft:0,scrollTop:0});function l(m){var v,h,C;const{scrollTop:g}=m;(v=t.value)==null||v.scrollTo(m),(h=n.value)==null||h.scrollToTop(g),(C=o.value)==null||C.scrollToTop(g)}function s(m){a.value=m,l(m)}function u(m){a.value.scrollTop=m,l(i(a))}function c(m){var v,h;a.value.scrollLeft=m,(h=(v=t.value)==null?void 0:v.scrollTo)==null||h.call(v,i(a))}function f(m){var v;s(m),(v=e.onScroll)==null||v.call(e,m)}function d({scrollTop:m}){const{scrollTop:v}=i(a);m!==v&&u(m)}function p(m,v="auto"){var h;(h=t.value)==null||h.scrollToRow(m,v)}return ve(()=>i(a).scrollTop,(m,v)=>{m>v&&r()}),{scrollPos:a,scrollTo:s,scrollToLeft:c,scrollToTop:u,scrollToRow:p,onScroll:f,onVerticalScroll:d}},hJ=(e,{mainTableRef:t,leftTableRef:n,rightTableRef:o,tableInstance:r,ns:a,isScrolling:l})=>{const s=lt(),{emit:u}=s,c=Ut(!1),f=R(e.defaultExpandedRowKeys||[]),d=R(-1),p=Ut(null),m=R({}),v=R({}),h=Ut({}),C=Ut({}),g=Ut({}),y=k(()=>Je(e.estimatedRowHeight));function _(A){var M;(M=e.onRowsRendered)==null||M.call(e,A),A.rowCacheEnd>i(d)&&(d.value=A.rowCacheEnd)}function b({hovered:A,rowKey:M}){if(l.value)return;r.vnode.el.querySelectorAll(`[rowkey="${String(M)}"]`).forEach(j=>{A?j.classList.add(a.is("hovered")):j.classList.remove(a.is("hovered"))})}function w({expanded:A,rowData:M,rowIndex:D,rowKey:U}){var j,W;const L=[...i(f)],P=L.indexOf(U);A?P===-1&&L.push(U):P>-1&&L.splice(P,1),f.value=L,u("update:expandedRowKeys",L),(j=e.onRowExpand)==null||j.call(e,{expanded:A,rowData:M,rowIndex:D,rowKey:U}),(W=e.onExpandedRowsChange)==null||W.call(e,L)}const S=co(()=>{var A,M,D,U;c.value=!0,m.value={...i(m),...i(v)},E(i(p),!1),v.value={},p.value=null,(A=t.value)==null||A.forceUpdate(),(M=n.value)==null||M.forceUpdate(),(D=o.value)==null||D.forceUpdate(),(U=s.proxy)==null||U.$forceUpdate(),c.value=!1},0);function E(A,M=!1){i(y)&&[t,n,o].forEach(D=>{const U=i(D);U&&U.resetAfterRowIndex(A,M)})}function $(A,M,D){const U=i(p);(U===null||U>D)&&(p.value=D),v.value[A]=M}function O({rowKey:A,height:M,rowIndex:D},U){U?U===v2.RIGHT?g.value[A]=M:h.value[A]=M:C.value[A]=M;const j=Math.max(...[h,g,C].map(W=>W.value[A]||0));i(m)[A]!==j&&($(A,j,D),S())}return{expandedRowKeys:f,lastRenderedRowIndex:d,isDynamic:y,isResetting:c,rowHeights:m,resetAfterIndex:E,onRowExpanded:w,onRowHovered:b,onRowsRendered:_,onRowHeightChange:O}},mJ=(e,{expandedRowKeys:t,lastRenderedRowIndex:n,resetAfterIndex:o})=>{const r=R({}),a=k(()=>{const s={},{data:u,rowKey:c}=e,f=i(t);if(!f||!f.length)return u;const d=[],p=new Set;f.forEach(v=>p.add(v));let m=u.slice();for(m.forEach(v=>s[v[c]]=0);m.length>0;){const v=m.shift();d.push(v),p.has(v[c])&&Array.isArray(v.children)&&v.children.length>0&&(m=[...v.children,...m],v.children.forEach(h=>s[h[c]]=s[v[c]]+1))}return r.value=s,d}),l=k(()=>{const{data:s,expandColumnKey:u}=e;return u?i(a):s});return ve(l,(s,u)=>{s!==u&&(n.value=-1,o(0,!0))}),{data:l,depthMap:r}},vJ=(e,t)=>e+t,Uc=e=>Pe(e)?e.reduce(vJ,0):e,Nl=(e,t,n={})=>Xe(e)?e(t):e??n,ya=e=>(["width","maxWidth","minWidth","height"].forEach(t=>{e[t]=rn(e[t])}),e),g2=e=>Wt(e)?t=>Ke(e,t):e,gJ=(e,{columnsTotalWidth:t,data:n,fixedColumnsOnLeft:o,fixedColumnsOnRight:r})=>{const a=k(()=>{const{fixed:_,width:b,vScrollbarSize:w}=e,S=b-w;return _?Math.max(Math.round(i(t)),S):S}),l=k(()=>i(a)+e.vScrollbarSize),s=k(()=>{const{height:_=0,maxHeight:b=0,footerHeight:w,hScrollbarSize:S}=e;if(b>0){const E=i(v),$=i(u),A=i(m)+E+$+S;return Math.min(A,b-w)}return _-w}),u=k(()=>{const{rowHeight:_,estimatedRowHeight:b}=e,w=i(n);return Je(b)?w.length*b:w.length*_}),c=k(()=>{const{maxHeight:_}=e,b=i(s);if(Je(_)&&_>0)return b;const w=i(u)+i(m)+i(v);return Math.min(b,w)}),f=_=>_.width,d=k(()=>Uc(i(o).map(f))),p=k(()=>Uc(i(r).map(f))),m=k(()=>Uc(e.headerHeight)),v=k(()=>{var _;return(((_=e.fixedData)==null?void 0:_.length)||0)*e.rowHeight}),h=k(()=>i(s)-i(m)-i(v)),C=k(()=>{const{style:_={},height:b,width:w}=e;return ya({..._,height:b,width:w})}),g=k(()=>ya({height:e.footerHeight})),y=k(()=>({top:rn(i(m)),bottom:rn(e.footerHeight),width:rn(e.width)}));return{bodyWidth:a,fixedTableHeight:c,mainTableHeight:s,leftTableWidth:d,rightTableWidth:p,headerWidth:l,rowsHeight:u,windowHeight:h,footerHeight:g,emptyStyle:y,rootStyle:C,headerHeight:m}},bJ=e=>{const t=R(),n=R(0),o=R(0);let r;return at(()=>{r=Qt(t,([a])=>{const{width:l,height:s}=a.contentRect,{paddingLeft:u,paddingRight:c,paddingTop:f,paddingBottom:d}=getComputedStyle(a.target),p=Number.parseInt(u)||0,m=Number.parseInt(c)||0,v=Number.parseInt(f)||0,h=Number.parseInt(d)||0;n.value=l-p-m,o.value=s-v-h}).stop}),zt(()=>{r==null||r()}),ve([n,o],([a,l])=>{var s;(s=e.onResize)==null||s.call(e,{width:a,height:l})}),{sizer:t,width:n,height:o}};function yJ(e){const t=R(),n=R(),o=R(),{columns:r,columnsStyles:a,columnsTotalWidth:l,fixedColumnsOnLeft:s,fixedColumnsOnRight:u,hasFixedColumns:c,mainColumns:f,onColumnSorted:d}=fJ(e,Lt(e,"columns"),Lt(e,"fixed")),{scrollTo:p,scrollToLeft:m,scrollToTop:v,scrollToRow:h,onScroll:C,onVerticalScroll:g,scrollPos:y}=pJ(e,{mainTableRef:t,leftTableRef:n,rightTableRef:o,onMaybeEndReached:B}),_=Se("table-v2"),b=lt(),w=Ut(!1),{expandedRowKeys:S,lastRenderedRowIndex:E,isDynamic:$,isResetting:O,rowHeights:A,resetAfterIndex:M,onRowExpanded:D,onRowHeightChange:U,onRowHovered:j,onRowsRendered:W}=hJ(e,{mainTableRef:t,leftTableRef:n,rightTableRef:o,tableInstance:b,ns:_,isScrolling:w}),{data:L,depthMap:P}=mJ(e,{expandedRowKeys:S,lastRenderedRowIndex:E,resetAfterIndex:M}),{bodyWidth:x,fixedTableHeight:I,mainTableHeight:H,leftTableWidth:G,rightTableWidth:J,headerWidth:ee,rowsHeight:fe,windowHeight:Te,footerHeight:oe,emptyStyle:ke,rootStyle:ae,headerHeight:Oe}=gJ(e,{columnsTotalWidth:l,data:L,fixedColumnsOnLeft:s,fixedColumnsOnRight:u}),we=R(),ge=k(()=>{const z=i(L).length===0;return Pe(e.fixedData)?e.fixedData.length===0&&z:z});function q(z){const{estimatedRowHeight:Z,rowHeight:ue,rowKey:se}=e;return Z?i(A)[i(L)[z][se]]||Z:ue}function B(){const{onEndReached:z}=e;if(!z)return;const{scrollTop:Z}=i(y),ue=i(fe),se=i(Te),me=ue-(Z+se)+e.hScrollbarSize;i(E)>=0&&ue===Z+i(H)-i(Oe)&&z(me)}return ve(()=>e.expandedRowKeys,z=>S.value=z,{deep:!0}),{columns:r,containerRef:we,mainTableRef:t,leftTableRef:n,rightTableRef:o,isDynamic:$,isResetting:O,isScrolling:w,hasFixedColumns:c,columnsStyles:a,columnsTotalWidth:l,data:L,expandedRowKeys:S,depthMap:P,fixedColumnsOnLeft:s,fixedColumnsOnRight:u,mainColumns:f,bodyWidth:x,emptyStyle:ke,rootStyle:ae,headerWidth:ee,footerHeight:oe,mainTableHeight:H,fixedTableHeight:I,leftTableWidth:G,rightTableWidth:J,showEmpty:ge,getRowHeight:q,onColumnSorted:d,onRowHovered:j,onRowExpanded:D,onRowsRendered:W,onRowHeightChange:U,scrollTo:p,scrollToLeft:m,scrollToTop:v,scrollToRow:h,onScroll:C,onVerticalScroll:g}}const Ng=Symbol("tableV2"),b2=String,Bu={type:Q(Array),required:!0},Ig={type:Q(Array)},y2={...Ig,required:!0},wJ=String,_1={type:Q(Array),default:()=>en([])},Xa={type:Number,required:!0},w2={type:Q([String,Number,Symbol]),default:"id"},C1={type:Q(Object)},ol=Ne({class:String,columns:Bu,columnsStyles:{type:Q(Object),required:!0},depth:Number,expandColumnKey:wJ,estimatedRowHeight:{...dl.estimatedRowHeight,default:void 0},isScrolling:Boolean,onRowExpand:{type:Q(Function)},onRowHover:{type:Q(Function)},onRowHeightChange:{type:Q(Function)},rowData:{type:Q(Object),required:!0},rowEventHandlers:{type:Q(Object)},rowIndex:{type:Number,required:!0},rowKey:w2,style:{type:Q(Object)}}),Np={type:Number,required:!0},Mg=Ne({class:String,columns:Bu,fixedHeaderData:{type:Q(Array)},headerData:{type:Q(Array),required:!0},headerHeight:{type:Q([Number,Array]),default:50},rowWidth:Np,rowHeight:{type:Number,default:50},height:Np,width:Np}),qc=Ne({columns:Bu,data:y2,fixedData:Ig,estimatedRowHeight:ol.estimatedRowHeight,width:Xa,height:Xa,headerWidth:Xa,headerHeight:Mg.headerHeight,bodyWidth:Xa,rowHeight:Xa,cache:HE.cache,useIsScrolling:Boolean,scrollbarAlwaysOn:dl.scrollbarAlwaysOn,scrollbarStartGap:dl.scrollbarStartGap,scrollbarEndGap:dl.scrollbarEndGap,class:b2,style:C1,containerStyle:C1,getRowHeight:{type:Q(Function),required:!0},rowKey:ol.rowKey,onRowsRendered:{type:Q(Function)},onScroll:{type:Q(Function)}}),_J=Ne({cache:qc.cache,estimatedRowHeight:ol.estimatedRowHeight,rowKey:w2,headerClass:{type:Q([String,Function])},headerProps:{type:Q([Object,Function])},headerCellProps:{type:Q([Object,Function])},headerHeight:Mg.headerHeight,footerHeight:{type:Number,default:0},rowClass:{type:Q([String,Function])},rowProps:{type:Q([Object,Function])},rowHeight:{type:Number,default:50},cellProps:{type:Q([Object,Function])},columns:Bu,data:y2,dataGetter:{type:Q(Function)},fixedData:Ig,expandColumnKey:ol.expandColumnKey,expandedRowKeys:_1,defaultExpandedRowKeys:_1,class:b2,fixed:Boolean,style:{type:Q(Object)},width:Xa,height:Xa,maxHeight:Number,useIsScrolling:Boolean,indentSize:{type:Number,default:12},iconSize:{type:Number,default:12},hScrollbarSize:dl.hScrollbarSize,vScrollbarSize:dl.vScrollbarSize,scrollbarAlwaysOn:WE.alwaysOn,sortBy:{type:Q(Object),default:()=>({})},sortState:{type:Q(Object),default:void 0},onColumnSort:{type:Q(Function)},onExpandedRowsChange:{type:Q(Function)},onEndReached:{type:Q(Function)},onRowExpand:ol.onRowExpand,onScroll:qc.onScroll,onRowsRendered:qc.onRowsRendered,rowEventHandlers:ol.rowEventHandlers}),Ag=(e,{slots:t})=>{var n;const{cellData:o,style:r}=e,a=((n=o==null?void 0:o.toString)==null?void 0:n.call(o))||"",l=ie(t,"default",e,()=>[a]);return K("div",{class:e.class,title:a,style:r},[l])};Ag.displayName="ElTableV2Cell";Ag.inheritAttrs=!1;const Pg=(e,{slots:t})=>ie(t,"default",e,()=>{var n,o;return[K("div",{class:e.class,title:(n=e.column)==null?void 0:n.title},[(o=e.column)==null?void 0:o.title])]});Pg.displayName="ElTableV2HeaderCell";Pg.inheritAttrs=!1;const CJ=Ne({class:String,columns:Bu,columnsStyles:{type:Q(Object),required:!0},headerIndex:Number,style:{type:Q(Object)}}),SJ=Y({name:"ElTableV2HeaderRow",props:CJ,setup(e,{slots:t}){return()=>{const{columns:n,columnsStyles:o,headerIndex:r,style:a}=e;let l=n.map((s,u)=>t.cell({columns:n,column:s,columnIndex:u,headerIndex:r,style:o[s.key]}));return t.header&&(l=t.header({cells:l.map(s=>Pe(s)&&s.length===1?s[0]:s),columns:n,headerIndex:r})),K("div",{class:e.class,style:a,role:"row"},[l])}}}),kJ="ElTableV2Header",EJ=Y({name:kJ,props:Mg,setup(e,{slots:t,expose:n}){const o=Se("table-v2"),r=R(),a=k(()=>ya({width:e.width,height:e.height})),l=k(()=>ya({width:e.rowWidth,height:e.height})),s=k(()=>Ia(i(e.headerHeight))),u=d=>{const p=i(r);We(()=>{p!=null&&p.scroll&&p.scroll({left:d})})},c=()=>{const d=o.e("fixed-header-row"),{columns:p,fixedHeaderData:m,rowHeight:v}=e;return m==null?void 0:m.map((h,C)=>{var g;const y=ya({height:v,width:"100%"});return(g=t.fixed)==null?void 0:g.call(t,{class:d,columns:p,rowData:h,rowIndex:-(C+1),style:y})})},f=()=>{const d=o.e("dynamic-header-row"),{columns:p}=e;return i(s).map((m,v)=>{var h;const C=ya({width:"100%",height:m});return(h=t.dynamic)==null?void 0:h.call(t,{class:d,columns:p,headerIndex:v,style:C})})};return n({scrollToLeft:u}),()=>{if(!(e.height<=0))return K("div",{ref:r,class:e.class,style:i(a),role:"rowgroup"},[K("div",{style:i(l),class:o.e("header")},[f(),c()])])}}}),TJ=e=>{const{isScrolling:t}=De(Ng),n=R(!1),o=R(),r=k(()=>Je(e.estimatedRowHeight)&&e.rowIndex>=0),a=(u=!1)=>{const c=i(o);if(!c)return;const{columns:f,onRowHeightChange:d,rowKey:p,rowIndex:m,style:v}=e,{height:h}=c.getBoundingClientRect();n.value=!0,We(()=>{if(u||h!==Number.parseInt(v.height)){const C=f[0],g=(C==null?void 0:C.placeholderSign)===mu;d==null||d({rowKey:p,height:h,rowIndex:m},C&&!g&&C.fixed)}})},l=k(()=>{const{rowData:u,rowIndex:c,rowKey:f,onRowHover:d}=e,p=e.rowEventHandlers||{},m={};return Object.entries(p).forEach(([v,h])=>{Xe(h)&&(m[v]=C=>{h({event:C,rowData:u,rowIndex:c,rowKey:f})})}),d&&[{name:"onMouseleave",hovered:!1},{name:"onMouseenter",hovered:!0}].forEach(({name:v,hovered:h})=>{const C=m[v];m[v]=g=>{d({event:g,hovered:h,rowData:u,rowIndex:c,rowKey:f}),C==null||C(g)}}),m}),s=u=>{const{onRowExpand:c,rowData:f,rowIndex:d,rowKey:p}=e;c==null||c({expanded:u,rowData:f,rowIndex:d,rowKey:p})};return at(()=>{i(r)&&a(!0)}),{isScrolling:t,measurable:r,measured:n,rowRef:o,eventHandlers:l,onExpand:s}},$J="ElTableV2TableRow",OJ=Y({name:$J,props:ol,setup(e,{expose:t,slots:n,attrs:o}){const{eventHandlers:r,isScrolling:a,measurable:l,measured:s,rowRef:u,onExpand:c}=TJ(e);return t({onExpand:c}),()=>{const{columns:f,columnsStyles:d,expandColumnKey:p,depth:m,rowData:v,rowIndex:h,style:C}=e;let g=f.map((y,_)=>{const b=Pe(v.children)&&v.children.length>0&&y.key===p;return n.cell({column:y,columns:f,columnIndex:_,depth:m,style:d[y.key],rowData:v,rowIndex:h,isScrolling:i(a),expandIconProps:b?{rowData:v,rowIndex:h,onExpand:c}:void 0})});if(n.row&&(g=n.row({cells:g.map(y=>Pe(y)&&y.length===1?y[0]:y),style:C,columns:f,depth:m,rowData:v,rowIndex:h,isScrolling:i(a)})),i(l)){const{height:y,..._}=C||{},b=i(s);return K("div",mt({ref:u,class:e.class,style:b?C:_,role:"row"},o,i(r)),[g])}return K("div",mt(o,{ref:u,class:e.class,style:C,role:"row"},i(r)),[g])}}}),NJ=e=>{const{sortOrder:t}=e;return K(ze,{size:14,class:e.class},{default:()=>[t===pu.ASC?K(X4,null,null):K(Y4,null,null)]})},IJ=e=>{const{expanded:t,expandable:n,onExpand:o,style:r,size:a}=e,l={onClick:n?()=>o(!t):void 0,class:e.class};return K(ze,mt(l,{size:a,style:r}),{default:()=>[K(Jn,null,null)]})},MJ="ElTableV2Grid",AJ=e=>{const t=R(),n=R(),o=k(()=>{const{data:h,rowHeight:C,estimatedRowHeight:g}=e;if(!g)return h.length*C}),r=k(()=>{const{fixedData:h,rowHeight:C}=e;return((h==null?void 0:h.length)||0)*C}),a=k(()=>Uc(e.headerHeight)),l=k(()=>{const{height:h}=e;return Math.max(0,h-i(a)-i(r))}),s=k(()=>i(a)+i(r)>0),u=({data:h,rowIndex:C})=>h[C][e.rowKey];function c({rowCacheStart:h,rowCacheEnd:C,rowVisibleStart:g,rowVisibleEnd:y}){var _;(_=e.onRowsRendered)==null||_.call(e,{rowCacheStart:h,rowCacheEnd:C,rowVisibleStart:g,rowVisibleEnd:y})}function f(h,C){var g;(g=n.value)==null||g.resetAfterRowIndex(h,C)}function d(h,C){const g=i(t),y=i(n);dt(h)?(g==null||g.scrollToLeft(h.scrollLeft),y==null||y.scrollTo(h)):(g==null||g.scrollToLeft(h),y==null||y.scrollTo({scrollLeft:h,scrollTop:C}))}function p(h){var C;(C=i(n))==null||C.scrollTo({scrollTop:h})}function m(h,C){var g;(g=i(n))==null||g.scrollToItem(h,1,C)}function v(){var h,C;(h=i(n))==null||h.$forceUpdate(),(C=i(t))==null||C.$forceUpdate()}return{bodyRef:n,forceUpdate:v,fixedRowHeight:r,gridHeight:l,hasHeader:s,headerHeight:a,headerRef:t,totalHeight:o,itemKey:u,onItemRendered:c,resetAfterRowIndex:f,scrollTo:d,scrollToTop:p,scrollToRow:m}},Rg=Y({name:MJ,props:qc,setup(e,{slots:t,expose:n}){const{ns:o}=De(Ng),{bodyRef:r,fixedRowHeight:a,gridHeight:l,hasHeader:s,headerRef:u,headerHeight:c,totalHeight:f,forceUpdate:d,itemKey:p,onItemRendered:m,resetAfterRowIndex:v,scrollTo:h,scrollToTop:C,scrollToRow:g}=AJ(e);n({forceUpdate:d,totalHeight:f,scrollTo:h,scrollToTop:C,scrollToRow:g,resetAfterRowIndex:v});const y=()=>e.bodyWidth;return()=>{const{cache:_,columns:b,data:w,fixedData:S,useIsScrolling:E,scrollbarAlwaysOn:$,scrollbarEndGap:O,scrollbarStartGap:A,style:M,rowHeight:D,bodyWidth:U,estimatedRowHeight:j,headerWidth:W,height:L,width:P,getRowHeight:x,onScroll:I}=e,H=Je(j),G=H?gY:pY,J=i(c);return K("div",{role:"table",class:[o.e("table"),e.class],style:M},[K(G,{ref:r,data:w,useIsScrolling:E,itemKey:p,columnCache:0,columnWidth:H?y:U,totalColumn:1,totalRow:w.length,rowCache:_,rowHeight:H?x:D,width:P,height:i(l),class:o.e("body"),role:"rowgroup",scrollbarStartGap:A,scrollbarEndGap:O,scrollbarAlwaysOn:$,onScroll:I,onItemRendered:m,perfMode:!1},{default:ee=>{var fe;const Te=w[ee.rowIndex];return(fe=t.row)==null?void 0:fe.call(t,{...ee,columns:b,rowData:Te})}}),i(s)&&K(EJ,{ref:u,class:o.e("header-wrapper"),columns:b,headerData:w,headerHeight:e.headerHeight,fixedHeaderData:S,rowWidth:W,rowHeight:D,width:P,height:Math.min(J+i(a),L)},{dynamic:t.header,fixed:t.row})])}}});function PJ(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Wt(e)}const RJ=(e,{slots:t})=>{const{mainTableRef:n,...o}=e;return K(Rg,mt({ref:n},o),PJ(t)?t:{default:()=>[t]})};function LJ(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Wt(e)}const xJ=(e,{slots:t})=>{if(!e.columns.length)return;const{leftTableRef:n,...o}=e;return K(Rg,mt({ref:n},o),LJ(t)?t:{default:()=>[t]})};function DJ(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Wt(e)}const FJ=(e,{slots:t})=>{if(!e.columns.length)return;const{rightTableRef:n,...o}=e;return K(Rg,mt({ref:n},o),DJ(t)?t:{default:()=>[t]})};function BJ(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Wt(e)}const VJ=(e,{slots:t})=>{const{columns:n,columnsStyles:o,depthMap:r,expandColumnKey:a,expandedRowKeys:l,estimatedRowHeight:s,hasFixedColumns:u,rowData:c,rowIndex:f,style:d,isScrolling:p,rowProps:m,rowClass:v,rowKey:h,rowEventHandlers:C,ns:g,onRowHovered:y,onRowExpanded:_}=e,b=Nl(v,{columns:n,rowData:c,rowIndex:f},""),w=Nl(m,{columns:n,rowData:c,rowIndex:f}),S=c[h],E=r[S]||0,$=!!a,O=f<0,A=[g.e("row"),b,{[g.e(`row-depth-${E}`)]:$&&f>=0,[g.is("expanded")]:$&&l.includes(S),[g.is("fixed")]:!E&&O,[g.is("customized")]:!!t.row}],M=u?y:void 0,D={...w,columns:n,columnsStyles:o,class:A,depth:E,expandColumnKey:a,estimatedRowHeight:O?void 0:s,isScrolling:p,rowIndex:f,rowData:c,rowKey:S,rowEventHandlers:C,style:d};return K(OJ,mt(D,{onRowExpand:_,onMouseenter:W=>{M==null||M({hovered:!0,rowKey:S,event:W,rowData:c,rowIndex:f})},onMouseleave:W=>{M==null||M({hovered:!1,rowKey:S,event:W,rowData:c,rowIndex:f})},rowkey:S}),BJ(t)?t:{default:()=>[t]})},lm=({columns:e,column:t,columnIndex:n,depth:o,expandIconProps:r,isScrolling:a,rowData:l,rowIndex:s,style:u,expandedRowKeys:c,ns:f,cellProps:d,expandColumnKey:p,indentSize:m,iconSize:v,rowKey:h},{slots:C})=>{const g=ya(u);if(t.placeholderSign===mu)return K("div",{class:f.em("row-cell","placeholder"),style:g},null);const{cellRenderer:y,dataKey:_,dataGetter:b}=t,w=Xe(b)?b({columns:e,column:t,columnIndex:n,rowData:l,rowIndex:s}):un(l,_??""),S=Nl(d,{cellData:w,columns:e,column:t,columnIndex:n,rowIndex:s,rowData:l}),E={class:f.e("cell-text"),columns:e,column:t,columnIndex:n,cellData:w,isScrolling:a,rowData:l,rowIndex:s},$=g2(y),O=$?$(E):ie(C,"default",E,()=>[K(Ag,E,null)]),A=[f.e("row-cell"),t.class,t.align===hu.CENTER&&f.is("align-center"),t.align===hu.RIGHT&&f.is("align-right")],M=s>=0&&p&&t.key===p,D=s>=0&&c.includes(l[h]);let U;const j=`margin-inline-start: ${o*m}px;`;return M&&(dt(r)?U=K(IJ,mt(r,{class:[f.e("expand-icon"),f.is("expanded",D)],size:v,expanded:D,style:j,expandable:!0}),null):U=K("div",{style:[j,`width: ${v}px; height: ${v}px;`].join(" ")},null)),K("div",mt({class:A,style:g},S,{role:"cell"}),[U,O])};lm.inheritAttrs=!1;function HJ(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Wt(e)}const zJ=({columns:e,columnsStyles:t,headerIndex:n,style:o,headerClass:r,headerProps:a,ns:l},{slots:s})=>{const u={columns:e,headerIndex:n},c=[l.e("header-row"),Nl(r,u,""),{[l.is("customized")]:!!s.header}],f={...Nl(a,u),columnsStyles:t,class:c,columns:e,headerIndex:n,style:o};return K(SJ,f,HJ(s)?s:{default:()=>[s]})},S1=(e,{slots:t})=>{const{column:n,ns:o,style:r,onColumnSorted:a}=e,l=ya(r);if(n.placeholderSign===mu)return K("div",{class:o.em("header-row-cell","placeholder"),style:l},null);const{headerCellRenderer:s,headerClass:u,sortable:c}=n,f={...e,class:o.e("header-cell-text")},d=g2(s),p=d?d(f):ie(t,"default",f,()=>[K(Pg,f,null)]),{sortBy:m,sortState:v,headerCellProps:h}=e;let C,g;if(v){const b=v[n.key];C=!!am[b],g=C?b:pu.ASC}else C=n.key===m.key,g=C?m.order:pu.ASC;const y=[o.e("header-cell"),Nl(u,e,""),n.align===hu.CENTER&&o.is("align-center"),n.align===hu.RIGHT&&o.is("align-right"),c&&o.is("sortable")],_={...Nl(h,e),onClick:n.sortable?a:void 0,class:y,style:l,"data-key":n.key};return K("div",mt(_,{role:"columnheader"}),[p,c&&K(NJ,{class:[o.e("sort-icon"),C&&o.is("sorting")],sortOrder:g},null)])},_2=(e,{slots:t})=>{var n;return K("div",{class:e.class,style:e.style},[(n=t.default)==null?void 0:n.call(t)])};_2.displayName="ElTableV2Footer";const C2=(e,{slots:t})=>{const n=ie(t,"default",{},()=>[K(EE,null,null)]);return K("div",{class:e.class,style:e.style},[n])};C2.displayName="ElTableV2Empty";const S2=(e,{slots:t})=>{var n;return K("div",{class:e.class,style:e.style},[(n=t.default)==null?void 0:n.call(t)])};S2.displayName="ElTableV2Overlay";function gi(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Wt(e)}const jJ="ElTableV2",WJ=Y({name:jJ,props:_J,setup(e,{slots:t,expose:n}){const o=Se("table-v2"),{columnsStyles:r,fixedColumnsOnLeft:a,fixedColumnsOnRight:l,mainColumns:s,mainTableHeight:u,fixedTableHeight:c,leftTableWidth:f,rightTableWidth:d,data:p,depthMap:m,expandedRowKeys:v,hasFixedColumns:h,mainTableRef:C,leftTableRef:g,rightTableRef:y,isDynamic:_,isResetting:b,isScrolling:w,bodyWidth:S,emptyStyle:E,rootStyle:$,headerWidth:O,footerHeight:A,showEmpty:M,scrollTo:D,scrollToLeft:U,scrollToTop:j,scrollToRow:W,getRowHeight:L,onColumnSorted:P,onRowHeightChange:x,onRowHovered:I,onRowExpanded:H,onRowsRendered:G,onScroll:J,onVerticalScroll:ee}=yJ(e);return n({scrollTo:D,scrollToLeft:U,scrollToTop:j,scrollToRow:W}),yt(Ng,{ns:o,isResetting:b,isScrolling:w}),()=>{const{cache:fe,cellProps:Te,estimatedRowHeight:oe,expandColumnKey:ke,fixedData:ae,headerHeight:Oe,headerClass:we,headerProps:ge,headerCellProps:q,sortBy:B,sortState:z,rowHeight:Z,rowClass:ue,rowEventHandlers:se,rowKey:me,rowProps:_e,scrollbarAlwaysOn:$e,indentSize:Ce,iconSize:ce,useIsScrolling:de,vScrollbarSize:xe,width:he}=e,He=i(p),et={cache:fe,class:o.e("main"),columns:i(s),data:He,fixedData:ae,estimatedRowHeight:oe,bodyWidth:i(S)+xe,headerHeight:Oe,headerWidth:i(O),height:i(u),mainTableRef:C,rowKey:me,rowHeight:Z,scrollbarAlwaysOn:$e,scrollbarStartGap:2,scrollbarEndGap:xe,useIsScrolling:de,width:he,getRowHeight:L,onRowsRendered:G,onScroll:J},rt=i(f),wt=i(c),Ze={cache:fe,class:o.e("left"),columns:i(a),data:He,estimatedRowHeight:oe,leftTableRef:g,rowHeight:Z,bodyWidth:rt,headerWidth:rt,headerHeight:Oe,height:wt,rowKey:me,scrollbarAlwaysOn:$e,scrollbarStartGap:2,scrollbarEndGap:xe,useIsScrolling:de,width:rt,getRowHeight:L,onScroll:ee},Ee=i(d)+xe,ye={cache:fe,class:o.e("right"),columns:i(l),data:He,estimatedRowHeight:oe,rightTableRef:y,rowHeight:Z,bodyWidth:Ee,headerWidth:Ee,headerHeight:Oe,height:wt,rowKey:me,scrollbarAlwaysOn:$e,scrollbarStartGap:2,scrollbarEndGap:xe,width:Ee,style:`--${i(o.namespace)}-table-scrollbar-size: ${xe}px`,useIsScrolling:de,getRowHeight:L,onScroll:ee},ne=i(r),be={ns:o,depthMap:i(m),columnsStyles:ne,expandColumnKey:ke,expandedRowKeys:i(v),estimatedRowHeight:oe,hasFixedColumns:i(h),rowProps:_e,rowClass:ue,rowKey:me,rowEventHandlers:se,onRowHovered:I,onRowExpanded:H,onRowHeightChange:x},Fe={cellProps:Te,expandColumnKey:ke,indentSize:Ce,iconSize:ce,rowKey:me,expandedRowKeys:i(v),ns:o},vt={ns:o,headerClass:we,headerProps:ge,columnsStyles:ne},pe={ns:o,sortBy:B,sortState:z,headerCellProps:q,onColumnSorted:P},Ye={row:Jt=>K(VJ,mt(Jt,be),{row:t.row,cell:Ht=>{let At;return t.cell?K(lm,mt(Ht,Fe,{style:ne[Ht.column.key]}),gi(At=t.cell(Ht))?At:{default:()=>[At]}):K(lm,mt(Ht,Fe,{style:ne[Ht.column.key]}),null)}}),header:Jt=>K(zJ,mt(Jt,vt),{header:t.header,cell:Ht=>{let At;return t["header-cell"]?K(S1,mt(Ht,pe,{style:ne[Ht.column.key]}),gi(At=t["header-cell"](Ht))?At:{default:()=>[At]}):K(S1,mt(Ht,pe,{style:ne[Ht.column.key]}),null)}})},_t=[e.class,o.b(),o.e("root"),{[o.is("dynamic")]:i(_)}],Kt={class:o.e("footer"),style:i(A)};return K("div",{class:_t,style:i($)},[K(RJ,et,gi(Ye)?Ye:{default:()=>[Ye]}),K(xJ,Ze,gi(Ye)?Ye:{default:()=>[Ye]}),K(FJ,ye,gi(Ye)?Ye:{default:()=>[Ye]}),t.footer&&K(_2,Kt,{default:t.footer}),i(M)&&K(C2,{class:o.e("empty"),style:i(E)},{default:t.empty}),t.overlay&&K(S2,{class:o.e("overlay")},{default:t.overlay})])}}}),KJ=Ne({disableWidth:Boolean,disableHeight:Boolean,onResize:{type:Q(Function)}}),UJ=Y({name:"ElAutoResizer",props:KJ,setup(e,{slots:t}){const n=Se("auto-resizer"),{height:o,width:r,sizer:a}=bJ(e),l={width:"100%",height:"100%"};return()=>{var s;return K("div",{ref:a,class:n.b(),style:l},[(s=t.default)==null?void 0:s.call(t,{height:o.value,width:r.value})])}}}),qJ=ut(WJ),YJ=ut(UJ),Nf=Symbol("tabsRootContextKey"),GJ=Ne({tabs:{type:Q(Array),default:()=>en([])}}),k2="ElTabBar",XJ=Y({name:k2}),JJ=Y({...XJ,props:GJ,setup(e,{expose:t}){const n=e,o=lt(),r=De(Nf);r||vn(k2,"");const a=Se("tabs"),l=R(),s=R(),u=()=>{let f=0,d=0;const p=["top","bottom"].includes(r.props.tabPosition)?"width":"height",m=p==="width"?"x":"y",v=m==="x"?"left":"top";return n.tabs.every(h=>{var C,g;const y=(g=(C=o.parent)==null?void 0:C.refs)==null?void 0:g[`tab-${h.uid}`];if(!y)return!1;if(!h.active)return!0;f=y[`offset${mr(v)}`],d=y[`client${mr(p)}`];const _=window.getComputedStyle(y);return p==="width"&&(d-=Number.parseFloat(_.paddingLeft)+Number.parseFloat(_.paddingRight),f+=Number.parseFloat(_.paddingLeft)),!1}),{[p]:`${d}px`,transform:`translate${mr(m)}(${f}px)`}},c=()=>s.value=u();return ve(()=>n.tabs,async()=>{await We(),c()},{immediate:!0}),Qt(l,()=>c()),t({ref:l,update:c}),(f,d)=>(T(),V("div",{ref_key:"barRef",ref:l,class:N([i(a).e("active-bar"),i(a).is(i(r).props.tabPosition)]),style:je(s.value)},null,6))}});var ZJ=Ie(JJ,[["__file","tab-bar.vue"]]);const QJ=Ne({panes:{type:Q(Array),default:()=>en([])},currentName:{type:[String,Number],default:""},editable:Boolean,type:{type:String,values:["card","border-card",""],default:""},stretch:Boolean}),eZ={tabClick:(e,t,n)=>n instanceof Event,tabRemove:(e,t)=>t instanceof Event},k1="ElTabNav",tZ=Y({name:k1,props:QJ,emits:eZ,setup(e,{expose:t,emit:n}){const o=lt(),r=De(Nf);r||vn(k1,"");const a=Se("tabs"),l=aM(),s=gM(),u=R(),c=R(),f=R(),d=R(),p=R(!1),m=R(0),v=R(!1),h=R(!0),C=k(()=>["top","bottom"].includes(r.props.tabPosition)?"width":"height"),g=k(()=>({transform:`translate${C.value==="width"?"X":"Y"}(-${m.value}px)`})),y=()=>{if(!u.value)return;const O=u.value[`offset${mr(C.value)}`],A=m.value;if(!A)return;const M=A>O?A-O:0;m.value=M},_=()=>{if(!u.value||!c.value)return;const O=c.value[`offset${mr(C.value)}`],A=u.value[`offset${mr(C.value)}`],M=m.value;if(O-M<=A)return;const D=O-M>A*2?M+A:O-A;m.value=D},b=async()=>{const O=c.value;if(!p.value||!f.value||!u.value||!O)return;await We();const A=f.value.querySelector(".is-active");if(!A)return;const M=u.value,D=["top","bottom"].includes(r.props.tabPosition),U=A.getBoundingClientRect(),j=M.getBoundingClientRect(),W=D?O.offsetWidth-j.width:O.offsetHeight-j.height,L=m.value;let P=L;D?(U.leftj.right&&(P=L+U.right-j.right)):(U.topj.bottom&&(P=L+(U.bottom-j.bottom))),P=Math.max(P,0),m.value=Math.min(P,W)},w=()=>{var O;if(!c.value||!u.value)return;e.stretch&&((O=d.value)==null||O.update());const A=c.value[`offset${mr(C.value)}`],M=u.value[`offset${mr(C.value)}`],D=m.value;M0&&(m.value=0))},S=O=>{const A=O.code,{up:M,down:D,left:U,right:j}=Ue;if(![M,D,U,j].includes(A))return;const W=Array.from(O.currentTarget.querySelectorAll("[role=tab]:not(.is-disabled)")),L=W.indexOf(O.target);let P;A===U||A===M?L===0?P=W.length-1:P=L-1:L{h.value&&(v.value=!0)},$=()=>v.value=!1;return ve(l,O=>{O==="hidden"?h.value=!1:O==="visible"&&setTimeout(()=>h.value=!0,50)}),ve(s,O=>{O?setTimeout(()=>h.value=!0,50):h.value=!1}),Qt(f,w),at(()=>setTimeout(()=>b(),0)),ar(()=>w()),t({scrollToActiveTab:b,removeFocus:$}),ve(()=>e.panes,()=>o.update(),{flush:"post",deep:!0}),()=>{const O=p.value?[K("span",{class:[a.e("nav-prev"),a.is("disabled",!p.value.prev)],onClick:y},[K(ze,null,{default:()=>[K(Aa,null,null)]})]),K("span",{class:[a.e("nav-next"),a.is("disabled",!p.value.next)],onClick:_},[K(ze,null,{default:()=>[K(Jn,null,null)]})])]:null,A=e.panes.map((M,D)=>{var U,j,W,L;const P=M.uid,x=M.props.disabled,I=(j=(U=M.props.name)!=null?U:M.index)!=null?j:`${D}`,H=!x&&(M.isClosable||e.editable);M.index=`${D}`;const G=H?K(ze,{class:"is-icon-close",onClick:fe=>n("tabRemove",M,fe)},{default:()=>[K(tr,null,null)]}):null,J=((L=(W=M.slots).label)==null?void 0:L.call(W))||M.props.label,ee=!x&&M.active?0:-1;return K("div",{ref:`tab-${P}`,class:[a.e("item"),a.is(r.props.tabPosition),a.is("active",M.active),a.is("disabled",x),a.is("closable",H),a.is("focus",v.value)],id:`tab-${I}`,key:`tab-${P}`,"aria-controls":`pane-${I}`,role:"tab","aria-selected":M.active,tabindex:ee,onFocus:()=>E(),onBlur:()=>$(),onClick:fe=>{$(),n("tabClick",M,I,fe)},onKeydown:fe=>{H&&(fe.code===Ue.delete||fe.code===Ue.backspace)&&n("tabRemove",M,fe)}},[J,G])});return K("div",{ref:f,class:[a.e("nav-wrap"),a.is("scrollable",!!p.value),a.is(r.props.tabPosition)]},[O,K("div",{class:a.e("nav-scroll"),ref:u},[K("div",{class:[a.e("nav"),a.is(r.props.tabPosition),a.is("stretch",e.stretch&&["top","bottom"].includes(r.props.tabPosition))],ref:c,style:g.value,role:"tablist",onKeydown:S},[e.type?null:K(ZJ,{ref:d,tabs:[...e.panes]},null),A])])])}}}),nZ=Ne({type:{type:String,values:["card","border-card",""],default:""},closable:Boolean,addable:Boolean,modelValue:{type:[String,Number]},editable:Boolean,tabPosition:{type:String,values:["top","right","bottom","left"],default:"top"},beforeLeave:{type:Q(Function),default:()=>!0},stretch:Boolean}),Ip=e=>nt(e)||Je(e),oZ={[ft]:e=>Ip(e),tabClick:(e,t)=>t instanceof Event,tabChange:e=>Ip(e),edit:(e,t)=>["remove","add"].includes(t),tabRemove:e=>Ip(e),tabAdd:()=>!0},rZ=Y({name:"ElTabs",props:nZ,emits:oZ,setup(e,{emit:t,slots:n,expose:o}){var r;const a=Se("tabs"),l=k(()=>["left","right"].includes(e.tabPosition)),{children:s,addChild:u,removeChild:c}=tg(lt(),"ElTabPane"),f=R(),d=R((r=e.modelValue)!=null?r:"0"),p=async(C,g=!1)=>{var y,_,b;if(!(d.value===C||pn(C)))try{await((y=e.beforeLeave)==null?void 0:y.call(e,C,d.value))!==!1&&(d.value=C,g&&(t(ft,C),t("tabChange",C)),(b=(_=f.value)==null?void 0:_.removeFocus)==null||b.call(_))}catch{}},m=(C,g,y)=>{C.props.disabled||(p(g,!0),t("tabClick",C,y))},v=(C,g)=>{C.props.disabled||pn(C.props.name)||(g.stopPropagation(),t("edit",C.props.name,"remove"),t("tabRemove",C.props.name))},h=()=>{t("edit",void 0,"add"),t("tabAdd")};return ve(()=>e.modelValue,C=>p(C)),ve(d,async()=>{var C;await We(),(C=f.value)==null||C.scrollToActiveTab()}),yt(Nf,{props:e,currentName:d,registerPane:u,unregisterPane:c}),o({currentName:d}),()=>{const C=n["add-icon"],g=e.editable||e.addable?K("div",{class:[a.e("new-tab"),l.value&&a.e("new-tab-vertical")],tabindex:"0",onClick:h,onKeydown:b=>{b.code===Ue.enter&&h()}},[C?ie(n,"add-icon"):K(ze,{class:a.is("icon-plus")},{default:()=>[K(GC,null,null)]})]):null,y=K("div",{class:[a.e("header"),l.value&&a.e("header-vertical"),a.is(e.tabPosition)]},[K(tZ,{ref:f,currentName:d.value,editable:e.editable,type:e.type,panes:s.value,stretch:e.stretch,onTabClick:m,onTabRemove:v},null),g]),_=K("div",{class:a.e("content")},[ie(n,"default")]);return K("div",{class:[a.b(),a.m(e.tabPosition),{[a.m("card")]:e.type==="card",[a.m("border-card")]:e.type==="border-card"}]},[...e.tabPosition!=="bottom"?[y,_]:[_,y]])}}}),aZ=Ne({label:{type:String,default:""},name:{type:[String,Number]},closable:Boolean,disabled:Boolean,lazy:Boolean}),lZ=["id","aria-hidden","aria-labelledby"],E2="ElTabPane",sZ=Y({name:E2}),iZ=Y({...sZ,props:aZ,setup(e){const t=e,n=lt(),o=Sn(),r=De(Nf);r||vn(E2,"usage: ");const a=Se("tab-pane"),l=R(),s=k(()=>t.closable||r.props.closable),u=ey(()=>{var m;return r.currentName.value===((m=t.name)!=null?m:l.value)}),c=R(u.value),f=k(()=>{var m;return(m=t.name)!=null?m:l.value}),d=ey(()=>!t.lazy||c.value||u.value);ve(u,m=>{m&&(c.value=!0)});const p=Et({uid:n.uid,slots:o,props:t,paneName:f,active:u,index:l,isClosable:s});return at(()=>{r.registerPane(p)}),lr(()=>{r.unregisterPane(p.uid)}),(m,v)=>i(d)?tt((T(),V("div",{key:0,id:`pane-${i(f)}`,class:N(i(a).b()),role:"tabpanel","aria-hidden":!i(u),"aria-labelledby":`tab-${i(f)}`},[ie(m.$slots,"default")],10,lZ)),[[kt,i(u)]]):te("v-if",!0)}});var T2=Ie(iZ,[["__file","tab-pane.vue"]]);const uZ=ut(rZ,{TabPane:T2}),cZ=tn(T2),dZ=Ne({type:{type:String,values:["primary","success","info","warning","danger",""],default:""},size:{type:String,values:Ir,default:""},truncated:Boolean,lineClamp:{type:[String,Number]},tag:{type:String,default:"span"}}),fZ=Y({name:"ElText"}),pZ=Y({...fZ,props:dZ,setup(e){const t=e,n=hn(),o=Se("text"),r=k(()=>[o.b(),o.m(t.type),o.m(n.value),o.is("truncated",t.truncated),o.is("line-clamp",!pn(t.lineClamp))]);return(a,l)=>(T(),re(pt(a.tag),{class:N(i(r)),style:je({"-webkit-line-clamp":a.lineClamp})},{default:X(()=>[ie(a.$slots,"default")]),_:3},8,["class","style"]))}});var hZ=Ie(pZ,[["__file","text.vue"]]);const mZ=ut(hZ),vZ=Ne({format:{type:String,default:"HH:mm"},modelValue:String,disabled:Boolean,editable:{type:Boolean,default:!0},effect:{type:Q(String),default:"light"},clearable:{type:Boolean,default:!0},size:gn,placeholder:String,start:{type:String,default:"09:00"},end:{type:String,default:"18:00"},step:{type:String,default:"00:30"},minTime:String,maxTime:String,name:String,prefixIcon:{type:Q([String,Object]),default:()=>qC},clearIcon:{type:Q([String,Object]),default:()=>Fa},...ei}),zr=e=>{const t=(e||"").split(":");if(t.length>=2){let n=Number.parseInt(t[0],10);const o=Number.parseInt(t[1],10),r=e.toUpperCase();return r.includes("AM")&&n===12?n=0:r.includes("PM")&&n!==12&&(n+=12),{hours:n,minutes:o}}return null},Mp=(e,t)=>{const n=zr(e);if(!n)return-1;const o=zr(t);if(!o)return-1;const r=n.minutes+n.hours*60,a=o.minutes+o.hours*60;return r===a?0:r>a?1:-1},E1=e=>`${e}`.padStart(2,"0"),Ql=e=>`${E1(e.hours)}:${E1(e.minutes)}`,gZ=(e,t)=>{const n=zr(e);if(!n)return"";const o=zr(t);if(!o)return"";const r={hours:n.hours,minutes:n.minutes};return r.minutes+=o.minutes,r.hours+=o.hours,r.hours+=Math.floor(r.minutes/60),r.minutes=r.minutes%60,Ql(r)},bZ=Y({name:"ElTimeSelect"}),yZ=Y({...bZ,props:vZ,emits:["change","blur","focus","clear","update:modelValue"],setup(e,{expose:t}){const n=e;ct.extend(ig);const{Option:o}=Ol,r=Se("input"),a=R(),l=to(),{lang:s}=$t(),u=k(()=>n.modelValue),c=k(()=>{const g=zr(n.start);return g?Ql(g):null}),f=k(()=>{const g=zr(n.end);return g?Ql(g):null}),d=k(()=>{const g=zr(n.step);return g?Ql(g):null}),p=k(()=>{const g=zr(n.minTime||"");return g?Ql(g):null}),m=k(()=>{const g=zr(n.maxTime||"");return g?Ql(g):null}),v=k(()=>{const g=[];if(n.start&&n.end&&n.step){let y=c.value,_;for(;y&&f.value&&Mp(y,f.value)<=0;)_=ct(y,"HH:mm").locale(s.value).format(n.format),g.push({value:_,disabled:Mp(y,p.value||"-1:-1")<=0||Mp(y,m.value||"100:100")>=0}),y=gZ(y,d.value)}return g});return t({blur:()=>{var g,y;(y=(g=a.value)==null?void 0:g.blur)==null||y.call(g)},focus:()=>{var g,y;(y=(g=a.value)==null?void 0:g.focus)==null||y.call(g)}}),(g,y)=>(T(),re(i(Ol),{ref_key:"select",ref:a,"model-value":i(u),disabled:i(l),clearable:g.clearable,"clear-icon":g.clearIcon,size:g.size,effect:g.effect,placeholder:g.placeholder,"default-first-option":"",filterable:g.editable,"empty-values":g.emptyValues,"value-on-clear":g.valueOnClear,"onUpdate:modelValue":y[0]||(y[0]=_=>g.$emit("update:modelValue",_)),onChange:y[1]||(y[1]=_=>g.$emit("change",_)),onBlur:y[2]||(y[2]=_=>g.$emit("blur",_)),onFocus:y[3]||(y[3]=_=>g.$emit("focus",_)),onClear:y[4]||(y[4]=()=>g.$emit("clear"))},{prefix:X(()=>[g.prefixIcon?(T(),re(i(ze),{key:0,class:N(i(r).e("prefix-icon"))},{default:X(()=>[(T(),re(pt(g.prefixIcon)))]),_:1},8,["class"])):te("v-if",!0)]),default:X(()=>[(T(!0),V(Ve,null,bt(i(v),_=>(T(),re(i(o),{key:_.value,label:_.value,value:_.value,disabled:_.disabled},null,8,["label","value","disabled"]))),128))]),_:1},8,["model-value","disabled","clearable","clear-icon","size","effect","placeholder","filterable","empty-values","value-on-clear"]))}});var wZ=Ie(yZ,[["__file","time-select.vue"]]);const _Z=ut(wZ),CZ=Y({name:"ElTimeline",setup(e,{slots:t}){const n=Se("timeline");return yt("timeline",t),()=>Ke("ul",{class:[n.b()]},[ie(t,"default")])}}),SZ=Ne({timestamp:{type:String,default:""},hideTimestamp:Boolean,center:Boolean,placement:{type:String,values:["top","bottom"],default:"bottom"},type:{type:String,values:["primary","success","warning","danger","info"],default:""},color:{type:String,default:""},size:{type:String,values:["normal","large"],default:"normal"},icon:{type:Dt},hollow:Boolean}),kZ=Y({name:"ElTimelineItem"}),EZ=Y({...kZ,props:SZ,setup(e){const t=e,n=Se("timeline-item"),o=k(()=>[n.e("node"),n.em("node",t.size||""),n.em("node",t.type||""),n.is("hollow",t.hollow)]);return(r,a)=>(T(),V("li",{class:N([i(n).b(),{[i(n).e("center")]:r.center}])},[F("div",{class:N(i(n).e("tail"))},null,2),r.$slots.dot?te("v-if",!0):(T(),V("div",{key:0,class:N(i(o)),style:je({backgroundColor:r.color})},[r.icon?(T(),re(i(ze),{key:0,class:N(i(n).e("icon"))},{default:X(()=>[(T(),re(pt(r.icon)))]),_:1},8,["class"])):te("v-if",!0)],6)),r.$slots.dot?(T(),V("div",{key:1,class:N(i(n).e("dot"))},[ie(r.$slots,"dot")],2)):te("v-if",!0),F("div",{class:N(i(n).e("wrapper"))},[!r.hideTimestamp&&r.placement==="top"?(T(),V("div",{key:0,class:N([i(n).e("timestamp"),i(n).is("top")])},le(r.timestamp),3)):te("v-if",!0),F("div",{class:N(i(n).e("content"))},[ie(r.$slots,"default")],2),!r.hideTimestamp&&r.placement==="bottom"?(T(),V("div",{key:1,class:N([i(n).e("timestamp"),i(n).is("bottom")])},le(r.timestamp),3)):te("v-if",!0)],2)],2))}});var $2=Ie(EZ,[["__file","timeline-item.vue"]]);const TZ=ut(CZ,{TimelineItem:$2}),$Z=tn($2),O2=Ne({nowrap:Boolean});var N2=(e=>(e.top="top",e.bottom="bottom",e.left="left",e.right="right",e))(N2||{});const OZ=Object.values(N2),Lg=Ne({width:{type:Number,default:10},height:{type:Number,default:10},style:{type:Q(Object),default:null}}),NZ=Ne({side:{type:Q(String),values:OZ,required:!0}}),IZ=["absolute","fixed"],MZ=["top-start","top-end","top","bottom-start","bottom-end","bottom","left-start","left-end","left","right-start","right-end","right"],xg=Ne({arrowPadding:{type:Q(Number),default:5},effect:{type:Q(String),default:"light"},contentClass:String,placement:{type:Q(String),values:MZ,default:"bottom"},reference:{type:Q(Object),default:null},offset:{type:Number,default:8},strategy:{type:Q(String),values:IZ,default:"absolute"},showArrow:Boolean,...An(["ariaLabel"])}),Dg=Ne({delayDuration:{type:Number,default:300},defaultOpen:Boolean,open:{type:Boolean,default:void 0},onOpenChange:{type:Q(Function)},"onUpdate:open":{type:Q(Function)}}),Gl={type:Q(Function)},Fg=Ne({onBlur:Gl,onClick:Gl,onFocus:Gl,onMouseDown:Gl,onMouseEnter:Gl,onMouseLeave:Gl}),AZ=Ne({...Dg,...Lg,...Fg,...xg,alwaysOn:Boolean,fullTransition:Boolean,transitionProps:{type:Q(Object),default:null},teleported:Boolean,to:{type:Q(String),default:"body"}}),If=Symbol("tooltipV2"),I2=Symbol("tooltipV2Content"),Ap="tooltip_v2.open",PZ=Y({name:"ElTooltipV2Root"}),RZ=Y({...PZ,props:Dg,setup(e,{expose:t}){const n=e,o=R(n.defaultOpen),r=R(null),a=k({get:()=>Sl(n.open)?o.value:n.open,set:C=>{var g;o.value=C,(g=n["onUpdate:open"])==null||g.call(n,C)}}),l=k(()=>Je(n.delayDuration)&&n.delayDuration>0),{start:s,stop:u}=_l(()=>{a.value=!0},k(()=>n.delayDuration),{immediate:!1}),c=Se("tooltip-v2"),f=xn(),d=()=>{u(),a.value=!0},p=()=>{i(l)?s():d()},m=d,v=()=>{u(),a.value=!1};return ve(a,C=>{var g;C&&(document.dispatchEvent(new CustomEvent(Ap)),m()),(g=n.onOpenChange)==null||g.call(n,C)}),at(()=>{document.addEventListener(Ap,v)}),zt(()=>{u(),document.removeEventListener(Ap,v)}),yt(If,{contentId:f,triggerRef:r,ns:c,onClose:v,onDelayOpen:p,onOpen:m}),t({onOpen:m,onClose:v}),(C,g)=>ie(C.$slots,"default",{open:i(a)})}});var LZ=Ie(RZ,[["__file","root.vue"]]);const xZ=Y({name:"ElTooltipV2Arrow"}),DZ=Y({...xZ,props:{...Lg,...NZ},setup(e){const t=e,{ns:n}=De(If),{arrowRef:o}=De(I2),r=k(()=>{const{style:a,width:l,height:s}=t,u=n.namespace.value;return{[`--${u}-tooltip-v2-arrow-width`]:`${l}px`,[`--${u}-tooltip-v2-arrow-height`]:`${s}px`,[`--${u}-tooltip-v2-arrow-border-width`]:`${l/2}px`,[`--${u}-tooltip-v2-arrow-cover-width`]:l/2-1,...a||{}}});return(a,l)=>(T(),V("span",{ref_key:"arrowRef",ref:o,style:je(i(r)),class:N(i(n).e("arrow"))},null,6))}});var T1=Ie(DZ,[["__file","arrow.vue"]]);const FZ=Ne({style:{type:Q([String,Object,Array]),default:()=>({})}}),BZ=Y({name:"ElVisuallyHidden"}),VZ=Y({...BZ,props:FZ,setup(e){const t=e,n=k(()=>[t.style,{position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}]);return(o,r)=>(T(),V("span",mt(o.$attrs,{style:i(n)}),[ie(o.$slots,"default")],16))}});var HZ=Ie(VZ,[["__file","visual-hidden.vue"]]);const zZ=["data-side"],jZ=Y({name:"ElTooltipV2Content"}),WZ=Y({...jZ,props:{...xg,...O2},setup(e){const t=e,{triggerRef:n,contentId:o}=De(If),r=R(t.placement),a=R(t.strategy),l=R(null),{referenceRef:s,contentRef:u,middlewareData:c,x:f,y:d,update:p}=g8({placement:r,strategy:a,middleware:k(()=>{const _=[AS(t.offset)];return t.showArrow&&_.push(b8({arrowRef:l})),_})}),m=Zs().nextZIndex(),v=Se("tooltip-v2"),h=k(()=>r.value.split("-")[0]),C=k(()=>({position:i(a),top:`${i(d)||0}px`,left:`${i(f)||0}px`,zIndex:m})),g=k(()=>{if(!t.showArrow)return{};const{arrow:_}=i(c);return{[`--${v.namespace.value}-tooltip-v2-arrow-x`]:`${_==null?void 0:_.x}px`||"",[`--${v.namespace.value}-tooltip-v2-arrow-y`]:`${_==null?void 0:_.y}px`||""}}),y=k(()=>[v.e("content"),v.is("dark",t.effect==="dark"),v.is(i(a)),t.contentClass]);return ve(l,()=>p()),ve(()=>t.placement,_=>r.value=_),at(()=>{ve(()=>t.reference||n.value,_=>{s.value=_||void 0},{immediate:!0})}),yt(I2,{arrowRef:l}),(_,b)=>(T(),V("div",{ref_key:"contentRef",ref:u,style:je(i(C)),"data-tooltip-v2-root":""},[_.nowrap?te("v-if",!0):(T(),V("div",{key:0,"data-side":i(h),class:N(i(y))},[ie(_.$slots,"default",{contentStyle:i(C),contentClass:i(y)}),K(i(HZ),{id:i(o),role:"tooltip"},{default:X(()=>[_.ariaLabel?(T(),V(Ve,{key:0},[Ge(le(_.ariaLabel),1)],64)):ie(_.$slots,"default",{key:1})]),_:3},8,["id"]),ie(_.$slots,"arrow",{style:je(i(g)),side:i(h)})],10,zZ))],4))}});var $1=Ie(WZ,[["__file","content.vue"]]);const KZ=Ne({setRef:{type:Q(Function),required:!0},onlyChild:Boolean});var UZ=Y({props:KZ,setup(e,{slots:t}){const n=R(),o=mf(n,r=>{r?e.setRef(r.nextElementSibling):e.setRef(null)});return()=>{var r;const[a]=((r=t.default)==null?void 0:r.call(t))||[],l=e.onlyChild?p3(a.children):a.children;return K(Ve,{ref:o},[l])}}});const qZ=Y({name:"ElTooltipV2Trigger"}),YZ=Y({...qZ,props:{...O2,...Fg},setup(e){const t=e,{onClose:n,onOpen:o,onDelayOpen:r,triggerRef:a,contentId:l}=De(If);let s=!1;const u=y=>{a.value=y},c=()=>{s=!1},f=on(t.onMouseEnter,r),d=on(t.onMouseLeave,n),p=on(t.onMouseDown,()=>{n(),s=!0,document.addEventListener("mouseup",c,{once:!0})}),m=on(t.onFocus,()=>{s||o()}),v=on(t.onBlur,n),h=on(t.onClick,y=>{y.detail===0&&n()}),C={blur:v,click:h,focus:m,mousedown:p,mouseenter:f,mouseleave:d},g=(y,_,b)=>{y&&Object.entries(_).forEach(([w,S])=>{y[b](w,S)})};return ve(a,(y,_)=>{g(y,C,"addEventListener"),g(_,C,"removeEventListener"),y&&y.setAttribute("aria-describedby",l.value)}),zt(()=>{g(a.value,C,"removeEventListener"),document.removeEventListener("mouseup",c)}),(y,_)=>y.nowrap?(T(),re(i(UZ),{key:0,"set-ref":u,"only-child":""},{default:X(()=>[ie(y.$slots,"default")]),_:3})):(T(),V("button",mt({key:1,ref_key:"triggerRef",ref:a},y.$attrs),[ie(y.$slots,"default")],16))}});var GZ=Ie(YZ,[["__file","trigger.vue"]]);const XZ=Y({name:"ElTooltipV2"}),JZ=Y({...XZ,props:AZ,setup(e){const n=Cn(e),o=Et(gr(n,Object.keys(Lg))),r=Et(gr(n,Object.keys(xg))),a=Et(gr(n,Object.keys(Dg))),l=Et(gr(n,Object.keys(Fg)));return(s,u)=>(T(),re(LZ,vr(bl(a)),{default:X(({open:c})=>[K(GZ,mt(l,{nowrap:""}),{default:X(()=>[ie(s.$slots,"trigger")]),_:3},16),(T(),re(Pl,{to:s.to,disabled:!s.teleported},[s.fullTransition?(T(),re(fn,vr(mt({key:0},s.transitionProps)),{default:X(()=>[s.alwaysOn||c?(T(),re($1,vr(mt({key:0},r)),{arrow:X(({style:f,side:d})=>[s.showArrow?(T(),re(T1,mt({key:0},o,{style:f,side:d}),null,16,["style","side"])):te("v-if",!0)]),default:X(()=>[ie(s.$slots,"default")]),_:3},16)):te("v-if",!0)]),_:2},1040)):(T(),V(Ve,{key:1},[s.alwaysOn||c?(T(),re($1,vr(mt({key:0},r)),{arrow:X(({style:f,side:d})=>[s.showArrow?(T(),re(T1,mt({key:0},o,{style:f,side:d}),null,16,["style","side"])):te("v-if",!0)]),default:X(()=>[ie(s.$slots,"default")]),_:3},16)):te("v-if",!0)],64))],8,["to","disabled"]))]),_:3},16))}});var ZZ=Ie(JZ,[["__file","tooltip.vue"]]);const QZ=ut(ZZ),M2="left-check-change",A2="right-check-change",es=Ne({data:{type:Q(Array),default:()=>[]},titles:{type:Q(Array),default:()=>[]},buttonTexts:{type:Q(Array),default:()=>[]},filterPlaceholder:String,filterMethod:{type:Q(Function)},leftDefaultChecked:{type:Q(Array),default:()=>[]},rightDefaultChecked:{type:Q(Array),default:()=>[]},renderContent:{type:Q(Function)},modelValue:{type:Q(Array),default:()=>[]},format:{type:Q(Object),default:()=>({})},filterable:Boolean,props:{type:Q(Object),default:()=>en({label:"label",key:"key",disabled:"disabled"})},targetOrder:{type:String,values:["original","push","unshift"],default:"original"},validateEvent:{type:Boolean,default:!0}}),sm=(e,t)=>[e,t].every(Pe)||Pe(e)&&Tn(t),eQ={[Yt]:(e,t,n)=>[e,n].every(Pe)&&["left","right"].includes(t),[ft]:e=>Pe(e),[M2]:sm,[A2]:sm},im="checked-change",tQ=Ne({data:es.data,optionRender:{type:Q(Function)},placeholder:String,title:String,filterable:Boolean,format:es.format,filterMethod:es.filterMethod,defaultChecked:es.leftDefaultChecked,props:es.props}),nQ={[im]:sm},Vu=e=>{const t={label:"label",key:"key",disabled:"disabled"};return k(()=>({...t,...e.props}))},oQ=(e,t,n)=>{const o=Vu(e),r=k(()=>e.data.filter(f=>Xe(e.filterMethod)?e.filterMethod(t.query,f):String(f[o.value.label]||f[o.value.key]).toLowerCase().includes(t.query.toLowerCase()))),a=k(()=>r.value.filter(f=>!f[o.value.disabled])),l=k(()=>{const f=t.checked.length,d=e.data.length,{noChecked:p,hasChecked:m}=e.format;return p&&m?f>0?m.replace(/\${checked}/g,f.toString()).replace(/\${total}/g,d.toString()):p.replace(/\${total}/g,d.toString()):`${f}/${d}`}),s=k(()=>{const f=t.checked.length;return f>0&&f{const f=a.value.map(d=>d[o.value.key]);t.allChecked=f.length>0&&f.every(d=>t.checked.includes(d))},c=f=>{t.checked=f?a.value.map(d=>d[o.value.key]):[]};return ve(()=>t.checked,(f,d)=>{if(u(),t.checkChangeByUser){const p=f.concat(d).filter(m=>!f.includes(m)||!d.includes(m));n(im,f,p)}else n(im,f),t.checkChangeByUser=!0}),ve(a,()=>{u()}),ve(()=>e.data,()=>{const f=[],d=r.value.map(p=>p[o.value.key]);t.checked.forEach(p=>{d.includes(p)&&f.push(p)}),t.checkChangeByUser=!1,t.checked=f}),ve(()=>e.defaultChecked,(f,d)=>{if(d&&f.length===d.length&&f.every(v=>d.includes(v)))return;const p=[],m=a.value.map(v=>v[o.value.key]);f.forEach(v=>{m.includes(v)&&p.push(v)}),t.checkChangeByUser=!1,t.checked=p},{immediate:!0}),{filteredData:r,checkableData:a,checkedSummary:l,isIndeterminate:s,updateAllChecked:u,handleAllCheckedChange:c}},rQ=(e,t)=>({onSourceCheckedChange:(r,a)=>{e.leftChecked=r,a&&t(M2,r,a)},onTargetCheckedChange:(r,a)=>{e.rightChecked=r,a&&t(A2,r,a)}}),aQ=e=>{const t=Vu(e),n=k(()=>e.data.reduce((a,l)=>(a[l[t.value.key]]=l)&&a,{})),o=k(()=>e.data.filter(a=>!e.modelValue.includes(a[t.value.key]))),r=k(()=>e.targetOrder==="original"?e.data.filter(a=>e.modelValue.includes(a[t.value.key])):e.modelValue.reduce((a,l)=>{const s=n.value[l];return s&&a.push(s),a},[]));return{sourceData:o,targetData:r}},lQ=(e,t,n)=>{const o=Vu(e),r=(s,u,c)=>{n(ft,s),n(Yt,s,u,c)};return{addToLeft:()=>{const s=e.modelValue.slice();t.rightChecked.forEach(u=>{const c=s.indexOf(u);c>-1&&s.splice(c,1)}),r(s,"left",t.rightChecked)},addToRight:()=>{let s=e.modelValue.slice();const u=e.data.filter(c=>{const f=c[o.value.key];return t.leftChecked.includes(f)&&!e.modelValue.includes(f)}).map(c=>c[o.value.key]);s=e.targetOrder==="unshift"?u.concat(s):s.concat(u),e.targetOrder==="original"&&(s=e.data.filter(c=>s.includes(c[o.value.key])).map(c=>c[o.value.key])),r(s,"right",t.leftChecked)}}},sQ=Y({name:"ElTransferPanel"}),iQ=Y({...sQ,props:tQ,emits:nQ,setup(e,{expose:t,emit:n}){const o=e,r=Sn(),a=({option:_})=>_,{t:l}=$t(),s=Se("transfer"),u=Et({checked:[],allChecked:!1,query:"",checkChangeByUser:!0}),c=Vu(o),{filteredData:f,checkedSummary:d,isIndeterminate:p,handleAllCheckedChange:m}=oQ(o,u,n),v=k(()=>!Io(u.query)&&Io(f.value)),h=k(()=>!Io(r.default()[0].children)),{checked:C,allChecked:g,query:y}=Cn(u);return t({query:y}),(_,b)=>(T(),V("div",{class:N(i(s).b("panel"))},[F("p",{class:N(i(s).be("panel","header"))},[K(i(Ho),{modelValue:i(g),"onUpdate:modelValue":b[0]||(b[0]=w=>xt(g)?g.value=w:null),indeterminate:i(p),"validate-event":!1,onChange:i(m)},{default:X(()=>[Ge(le(_.title)+" ",1),F("span",null,le(i(d)),1)]),_:1},8,["modelValue","indeterminate","onChange"])],2),F("div",{class:N([i(s).be("panel","body"),i(s).is("with-footer",i(h))])},[_.filterable?(T(),re(i(zn),{key:0,modelValue:i(y),"onUpdate:modelValue":b[1]||(b[1]=w=>xt(y)?y.value=w:null),class:N(i(s).be("panel","filter")),size:"default",placeholder:_.placeholder,"prefix-icon":i(U4),clearable:"","validate-event":!1},null,8,["modelValue","class","placeholder","prefix-icon"])):te("v-if",!0),tt(K(i(xk),{modelValue:i(C),"onUpdate:modelValue":b[2]||(b[2]=w=>xt(C)?C.value=w:null),"validate-event":!1,class:N([i(s).is("filterable",_.filterable),i(s).be("panel","list")])},{default:X(()=>[(T(!0),V(Ve,null,bt(i(f),w=>(T(),re(i(Ho),{key:w[i(c).key],class:N(i(s).be("panel","item")),value:w[i(c).key],disabled:w[i(c).disabled],"validate-event":!1},{default:X(()=>{var S;return[K(a,{option:(S=_.optionRender)==null?void 0:S.call(_,w)},null,8,["option"])]}),_:2},1032,["class","value","disabled"]))),128))]),_:1},8,["modelValue","class"]),[[kt,!i(v)&&!i(Io)(_.data)]]),tt(F("p",{class:N(i(s).be("panel","empty"))},le(i(v)?i(l)("el.transfer.noMatch"):i(l)("el.transfer.noData")),3),[[kt,i(v)||i(Io)(_.data)]])],2),i(h)?(T(),V("p",{key:0,class:N(i(s).be("panel","footer"))},[ie(_.$slots,"default")],2)):te("v-if",!0)],2))}});var O1=Ie(iQ,[["__file","transfer-panel.vue"]]);const uQ={key:0},cQ={key:0},dQ=Y({name:"ElTransfer"}),fQ=Y({...dQ,props:es,emits:eQ,setup(e,{expose:t,emit:n}){const o=e,r=Sn(),{t:a}=$t(),l=Se("transfer"),{formItem:s}=qn(),u=Et({leftChecked:[],rightChecked:[]}),c=Vu(o),{sourceData:f,targetData:d}=aQ(o),{onSourceCheckedChange:p,onTargetCheckedChange:m}=rQ(u,n),{addToLeft:v,addToRight:h}=lQ(o,u,n),C=R(),g=R(),y=$=>{switch($){case"left":C.value.query="";break;case"right":g.value.query="";break}},_=k(()=>o.buttonTexts.length===2),b=k(()=>o.titles[0]||a("el.transfer.titles.0")),w=k(()=>o.titles[1]||a("el.transfer.titles.1")),S=k(()=>o.filterPlaceholder||a("el.transfer.filterPlaceholder"));ve(()=>o.modelValue,()=>{var $;o.validateEvent&&(($=s==null?void 0:s.validate)==null||$.call(s,"change").catch(O=>void 0))});const E=k(()=>$=>o.renderContent?o.renderContent(Ke,$):r.default?r.default({option:$}):Ke("span",$[c.value.label]||$[c.value.key]));return t({clearQuery:y,leftPanel:C,rightPanel:g}),($,O)=>(T(),V("div",{class:N(i(l).b())},[K(O1,{ref_key:"leftPanel",ref:C,data:i(f),"option-render":i(E),placeholder:i(S),title:i(b),filterable:$.filterable,format:$.format,"filter-method":$.filterMethod,"default-checked":$.leftDefaultChecked,props:o.props,onCheckedChange:i(p)},{default:X(()=>[ie($.$slots,"left-footer")]),_:3},8,["data","option-render","placeholder","title","filterable","format","filter-method","default-checked","props","onCheckedChange"]),F("div",{class:N(i(l).e("buttons"))},[K(i($n),{type:"primary",class:N([i(l).e("button"),i(l).is("with-texts",i(_))]),disabled:i(Io)(u.rightChecked),onClick:i(v)},{default:X(()=>[K(i(ze),null,{default:X(()=>[K(i(Aa))]),_:1}),i(pn)($.buttonTexts[0])?te("v-if",!0):(T(),V("span",uQ,le($.buttonTexts[0]),1))]),_:1},8,["class","disabled","onClick"]),K(i($n),{type:"primary",class:N([i(l).e("button"),i(l).is("with-texts",i(_))]),disabled:i(Io)(u.leftChecked),onClick:i(h)},{default:X(()=>[i(pn)($.buttonTexts[1])?te("v-if",!0):(T(),V("span",cQ,le($.buttonTexts[1]),1)),K(i(ze),null,{default:X(()=>[K(i(Jn))]),_:1})]),_:1},8,["class","disabled","onClick"])],2),K(O1,{ref_key:"rightPanel",ref:g,data:i(d),"option-render":i(E),placeholder:i(S),filterable:$.filterable,format:$.format,"filter-method":$.filterMethod,title:i(w),"default-checked":$.rightDefaultChecked,props:o.props,onCheckedChange:i(m)},{default:X(()=>[ie($.$slots,"right-footer")]),_:3},8,["data","option-render","placeholder","filterable","format","filter-method","title","default-checked","props","onCheckedChange"])],2))}});var pQ=Ie(fQ,[["__file","transfer.vue"]]);const hQ=ut(pQ),ms="$treeNodeId",N1=function(e,t){!t||t[ms]||Object.defineProperty(t,ms,{value:e.id,enumerable:!1,configurable:!1,writable:!1})},Bg=function(e,t){return e?t[e]:t[ms]},um=(e,t,n)=>{const o=e.value.currentNode;n();const r=e.value.currentNode;o!==r&&t("current-change",r?r.data:null,r)},cm=e=>{let t=!0,n=!0,o=!0;for(let r=0,a=e.length;r"u"){const a=o[t];return a===void 0?"":a}};let mQ=0,dm=class Yc{constructor(t){this.id=mQ++,this.text=null,this.checked=!1,this.indeterminate=!1,this.data=null,this.expanded=!1,this.parent=null,this.visible=!0,this.isCurrent=!1,this.canFocus=!1;for(const n in t)Tt(t,n)&&(this[n]=t[n]);this.level=0,this.loaded=!1,this.childNodes=[],this.loading=!1,this.parent&&(this.level=this.parent.level+1)}initialize(){const t=this.store;if(!t)throw new Error("[Node]store is required!");t.registerNode(this);const n=t.props;if(n&&typeof n.isLeaf<"u"){const a=Cc(this,"isLeaf");typeof a=="boolean"&&(this.isLeafByUser=a)}if(t.lazy!==!0&&this.data?(this.setData(this.data),t.defaultExpandAll&&(this.expanded=!0,this.canFocus=!0)):this.level>0&&t.lazy&&t.defaultExpandAll&&this.expand(),Array.isArray(this.data)||N1(this,this.data),!this.data)return;const o=t.defaultExpandedKeys,r=t.key;r&&o&&o.includes(this.key)&&this.expand(null,t.autoExpandParent),r&&t.currentNodeKey!==void 0&&this.key===t.currentNodeKey&&(t.currentNode=this,t.currentNode.isCurrent=!0),t.lazy&&t._initDefaultCheckedNode(this),this.updateLeafState(),this.parent&&(this.level===1||this.parent.expanded===!0)&&(this.canFocus=!0)}setData(t){Array.isArray(t)||N1(this,t),this.data=t,this.childNodes=[];let n;this.level===0&&Array.isArray(this.data)?n=this.data:n=Cc(this,"children")||[];for(let o=0,r=n.length;o-1)return t.childNodes[n+1]}return null}get previousSibling(){const t=this.parent;if(t){const n=t.childNodes.indexOf(this);if(n>-1)return n>0?t.childNodes[n-1]:null}return null}contains(t,n=!0){return(this.childNodes||[]).some(o=>o===t||n&&o.contains(t))}remove(){const t=this.parent;t&&t.removeChild(this)}insertChild(t,n,o){if(!t)throw new Error("InsertChild error: child is required.");if(!(t instanceof Yc)){if(!o){const r=this.getChildren(!0);r.includes(t.data)||(typeof n>"u"||n<0?r.push(t.data):r.splice(n,0,t.data))}Object.assign(t,{parent:this,store:this.store}),t=Et(new Yc(t)),t instanceof Yc&&t.initialize()}t.level=this.level+1,typeof n>"u"||n<0?this.childNodes.push(t):this.childNodes.splice(n,0,t),this.updateLeafState()}insertBefore(t,n){let o;n&&(o=this.childNodes.indexOf(n)),this.insertChild(t,o)}insertAfter(t,n){let o;n&&(o=this.childNodes.indexOf(n),o!==-1&&(o+=1)),this.insertChild(t,o)}removeChild(t){const n=this.getChildren()||[],o=n.indexOf(t.data);o>-1&&n.splice(o,1);const r=this.childNodes.indexOf(t);r>-1&&(this.store&&this.store.deregisterNode(t),t.parent=null,this.childNodes.splice(r,1)),this.updateLeafState()}removeChildByData(t){let n=null;for(let o=0;o{if(n){let r=this.parent;for(;r.level>0;)r.expanded=!0,r=r.parent}this.expanded=!0,t&&t(),this.childNodes.forEach(r=>{r.canFocus=!0})};this.shouldLoadData()?this.loadData(r=>{Array.isArray(r)&&(this.checked?this.setChecked(!0,!0):this.store.checkStrictly||Ei(this),o())}):o()}doCreateChildren(t,n={}){t.forEach(o=>{this.insertChild(Object.assign({data:o},n),void 0,!0)})}collapse(){this.expanded=!1,this.childNodes.forEach(t=>{t.canFocus=!1})}shouldLoadData(){return this.store.lazy===!0&&this.store.load&&!this.loaded}updateLeafState(){if(this.store.lazy===!0&&this.loaded!==!0&&typeof this.isLeafByUser<"u"){this.isLeaf=this.isLeafByUser;return}const t=this.childNodes;if(!this.store.lazy||this.store.lazy===!0&&this.loaded===!0){this.isLeaf=!t||t.length===0;return}this.isLeaf=!1}setChecked(t,n,o,r){if(this.indeterminate=t==="half",this.checked=t===!0,this.store.checkStrictly)return;if(!(this.shouldLoadData()&&!this.store.checkDescendants)){const{all:l,allWithoutDisable:s}=cm(this.childNodes);!this.isLeaf&&!l&&s&&(this.checked=!1,t=!1);const u=()=>{if(n){const c=this.childNodes;for(let p=0,m=c.length;p{u(),Ei(this)},{checked:t!==!1});return}else u()}const a=this.parent;!a||a.level===0||o||Ei(a)}getChildren(t=!1){if(this.level===0)return this.data;const n=this.data;if(!n)return null;const o=this.store.props;let r="children";return o&&(r=o.children||"children"),n[r]===void 0&&(n[r]=null),t&&!n[r]&&(n[r]=[]),n[r]}updateChildren(){const t=this.getChildren()||[],n=this.childNodes.map(a=>a.data),o={},r=[];t.forEach((a,l)=>{const s=a[ms];!!s&&n.findIndex(c=>c[ms]===s)>=0?o[s]={index:l,data:a}:r.push({index:l,data:a})}),this.store.lazy||n.forEach(a=>{o[a[ms]]||this.removeChildByData(a)}),r.forEach(({index:a,data:l})=>{this.insertChild({data:l},a)}),this.updateLeafState()}loadData(t,n={}){if(this.store.lazy===!0&&this.store.load&&!this.loaded&&(!this.loading||Object.keys(n).length)){this.loading=!0;const o=a=>{this.childNodes=[],this.doCreateChildren(a,n),this.loaded=!0,this.loading=!1,this.updateLeafState(),t&&t.call(this,a)},r=()=>{this.loading=!1};this.store.load(this,o,r)}else t&&t.call(this)}eachNode(t){const n=[this];for(;n.length;){const o=n.shift();n.unshift(...o.childNodes),t(o)}}reInitChecked(){this.store.checkStrictly||Ei(this)}};class vQ{constructor(t){this.currentNode=null,this.currentNodeKey=null;for(const n in t)Tt(t,n)&&(this[n]=t[n]);this.nodesMap={}}initialize(){if(this.root=new dm({data:this.data,store:this}),this.root.initialize(),this.lazy&&this.load){const t=this.load;t(this.root,n=>{this.root.doCreateChildren(n),this._initDefaultCheckedNodes()})}else this._initDefaultCheckedNodes()}filter(t){const n=this.filterNodeMethod,o=this.lazy,r=function(a){const l=a.root?a.root.childNodes:a.childNodes;if(l.forEach(s=>{s.visible=n.call(s,t,s.data,s),r(s)}),!a.visible&&l.length){let s=!0;s=!l.some(u=>u.visible),a.root?a.root.visible=s===!1:a.visible=s===!1}t&&a.visible&&!a.isLeaf&&(!o||a.loaded)&&a.expand()};r(this)}setData(t){t!==this.root.data?(this.root.setData(t),this._initDefaultCheckedNodes()):this.root.updateChildren()}getNode(t){if(t instanceof dm)return t;const n=dt(t)?Bg(this.key,t):t;return this.nodesMap[n]||null}insertBefore(t,n){const o=this.getNode(n);o.parent.insertBefore({data:t},o)}insertAfter(t,n){const o=this.getNode(n);o.parent.insertAfter({data:t},o)}remove(t){const n=this.getNode(t);n&&n.parent&&(n===this.currentNode&&(this.currentNode=null),n.parent.removeChild(n))}append(t,n){const o=Sl(n)?this.root:this.getNode(n);o&&o.insertChild({data:t})}_initDefaultCheckedNodes(){const t=this.defaultCheckedKeys||[],n=this.nodesMap;t.forEach(o=>{const r=n[o];r&&r.setChecked(!0,!this.checkStrictly)})}_initDefaultCheckedNode(t){(this.defaultCheckedKeys||[]).includes(t.key)&&t.setChecked(!0,!this.checkStrictly)}setDefaultCheckedKey(t){t!==this.defaultCheckedKeys&&(this.defaultCheckedKeys=t,this._initDefaultCheckedNodes())}registerNode(t){const n=this.key;!t||!t.data||(n?t.key!==void 0&&(this.nodesMap[t.key]=t):this.nodesMap[t.id]=t)}deregisterNode(t){!this.key||!t||!t.data||(t.childNodes.forEach(o=>{this.deregisterNode(o)}),delete this.nodesMap[t.key])}getCheckedNodes(t=!1,n=!1){const o=[],r=function(a){(a.root?a.root.childNodes:a.childNodes).forEach(s=>{(s.checked||n&&s.indeterminate)&&(!t||t&&s.isLeaf)&&o.push(s.data),r(s)})};return r(this),o}getCheckedKeys(t=!1){return this.getCheckedNodes(t).map(n=>(n||{})[this.key])}getHalfCheckedNodes(){const t=[],n=function(o){(o.root?o.root.childNodes:o.childNodes).forEach(a=>{a.indeterminate&&t.push(a.data),n(a)})};return n(this),t}getHalfCheckedKeys(){return this.getHalfCheckedNodes().map(t=>(t||{})[this.key])}_getAllNodes(){const t=[],n=this.nodesMap;for(const o in n)Tt(n,o)&&t.push(n[o]);return t}updateChildren(t,n){const o=this.nodesMap[t];if(!o)return;const r=o.childNodes;for(let a=r.length-1;a>=0;a--){const l=r[a];this.remove(l.data)}for(let a=0,l=n.length;au.level-c.level),a=Object.create(null),l=Object.keys(o);r.forEach(u=>u.setChecked(!1,!1));const s=u=>{u.childNodes.forEach(c=>{var f;a[c.data[t]]=!0,(f=c.childNodes)!=null&&f.length&&s(c)})};for(let u=0,c=r.length;u{C.isLeaf||C.setChecked(!1,!1),m(C)})};m(f)}}}setCheckedNodes(t,n=!1){const o=this.key,r={};t.forEach(a=>{r[(a||{})[o]]=!0}),this._setCheckedKeys(o,n,r)}setCheckedKeys(t,n=!1){this.defaultCheckedKeys=t;const o=this.key,r={};t.forEach(a=>{r[a]=!0}),this._setCheckedKeys(o,n,r)}setDefaultExpandedKeys(t){t=t||[],this.defaultExpandedKeys=t,t.forEach(n=>{const o=this.getNode(n);o&&o.expand(null,this.autoExpandParent)})}setChecked(t,n,o){const r=this.getNode(t);r&&r.setChecked(!!n,o)}getCurrentNode(){return this.currentNode}setCurrentNode(t){const n=this.currentNode;n&&(n.isCurrent=!1),this.currentNode=t,this.currentNode.isCurrent=!0}setUserCurrentNode(t,n=!0){const o=t[this.key],r=this.nodesMap[o];this.setCurrentNode(r),n&&this.currentNode.level>1&&this.currentNode.parent.expand(null,!0)}setCurrentNodeKey(t,n=!0){if(t==null){this.currentNode&&(this.currentNode.isCurrent=!1),this.currentNode=null;return}const o=this.getNode(t);o&&(this.setCurrentNode(o),n&&this.currentNode.level>1&&this.currentNode.parent.expand(null,!0))}}const gQ=Y({name:"ElTreeNodeContent",props:{node:{type:Object,required:!0},renderContent:Function},setup(e){const t=Se("tree"),n=De("NodeInstance"),o=De("RootTree");return()=>{const r=e.node,{data:a,store:l}=r;return e.renderContent?e.renderContent(Ke,{_self:n,node:r,data:a,store:l}):ie(o.ctx.slots,"default",{node:r,data:a},()=>[Ke("span",{class:t.be("node","label")},[r.label])])}}});var bQ=Ie(gQ,[["__file","tree-node-content.vue"]]);function P2(e){const t=De("TreeNodeMap",null),n={treeNodeExpand:o=>{e.node!==o&&e.node.collapse()},children:[]};return t&&t.children.push(n),yt("TreeNodeMap",n),{broadcastExpanded:o=>{if(e.accordion)for(const r of n.children)r.treeNodeExpand(o)}}}const R2=Symbol("dragEvents");function yQ({props:e,ctx:t,el$:n,dropIndicator$:o,store:r}){const a=Se("tree"),l=R({showDropIndicator:!1,draggingNode:null,dropNode:null,allowDrop:!0,dropType:null});return yt(R2,{treeNodeDragStart:({event:f,treeNode:d})=>{if(typeof e.allowDrag=="function"&&!e.allowDrag(d.node))return f.preventDefault(),!1;f.dataTransfer.effectAllowed="move";try{f.dataTransfer.setData("text/plain","")}catch{}l.value.draggingNode=d,t.emit("node-drag-start",d.node,f)},treeNodeDragOver:({event:f,treeNode:d})=>{const p=d,m=l.value.dropNode;m&&m.node.id!==p.node.id&&Kn(m.$el,a.is("drop-inner"));const v=l.value.draggingNode;if(!v||!p)return;let h=!0,C=!0,g=!0,y=!0;typeof e.allowDrop=="function"&&(h=e.allowDrop(v.node,p.node,"prev"),y=C=e.allowDrop(v.node,p.node,"inner"),g=e.allowDrop(v.node,p.node,"next")),f.dataTransfer.dropEffect=C||h||g?"move":"none",(h||C||g)&&(m==null?void 0:m.node.id)!==p.node.id&&(m&&t.emit("node-drag-leave",v.node,m.node,f),t.emit("node-drag-enter",v.node,p.node,f)),h||C||g?l.value.dropNode=p:l.value.dropNode=null,p.node.nextSibling===v.node&&(g=!1),p.node.previousSibling===v.node&&(h=!1),p.node.contains(v.node,!1)&&(C=!1),(v.node===p.node||v.node.contains(p.node))&&(h=!1,C=!1,g=!1);const _=p.$el.querySelector(`.${a.be("node","content")}`).getBoundingClientRect(),b=n.value.getBoundingClientRect();let w;const S=h?C?.25:g?.45:1:-1,E=g?C?.75:h?.55:0:1;let $=-9999;const O=f.clientY-_.top;O<_.height*S?w="before":O>_.height*E?w="after":C?w="inner":w="none";const A=p.$el.querySelector(`.${a.be("node","expand-icon")}`).getBoundingClientRect(),M=o.value;w==="before"?$=A.top-b.top:w==="after"&&($=A.bottom-b.top),M.style.top=`${$}px`,M.style.left=`${A.right-b.left}px`,w==="inner"?Mo(p.$el,a.is("drop-inner")):Kn(p.$el,a.is("drop-inner")),l.value.showDropIndicator=w==="before"||w==="after",l.value.allowDrop=l.value.showDropIndicator||y,l.value.dropType=w,t.emit("node-drag-over",v.node,p.node,f)},treeNodeDragEnd:f=>{const{draggingNode:d,dropType:p,dropNode:m}=l.value;if(f.preventDefault(),f.dataTransfer.dropEffect="move",d&&m){const v={data:d.node.data};p!=="none"&&d.node.remove(),p==="before"?m.node.parent.insertBefore(v,m.node):p==="after"?m.node.parent.insertAfter(v,m.node):p==="inner"&&m.node.insertChild(v),p!=="none"&&(r.value.registerNode(v),r.value.key&&d.node.eachNode(h=>{var C;(C=r.value.nodesMap[h.data[r.value.key]])==null||C.setChecked(h.checked,!r.value.checkStrictly)})),Kn(m.$el,a.is("drop-inner")),t.emit("node-drag-end",d.node,m.node,p,f),p!=="none"&&t.emit("node-drop",d.node,m.node,p,f)}d&&!m&&t.emit("node-drag-end",d.node,null,p,f),l.value.showDropIndicator=!1,l.value.draggingNode=null,l.value.dropNode=null,l.value.allowDrop=!0}}),{dragState:l}}const wQ=Y({name:"ElTreeNode",components:{ElCollapseTransition:Ef,ElCheckbox:Ho,NodeContent:bQ,ElIcon:ze,Loading:Er},props:{node:{type:dm,default:()=>({})},props:{type:Object,default:()=>({})},accordion:Boolean,renderContent:Function,renderAfterExpand:Boolean,showCheckbox:{type:Boolean,default:!1}},emits:["node-expand"],setup(e,t){const n=Se("tree"),{broadcastExpanded:o}=P2(e),r=De("RootTree"),a=R(!1),l=R(!1),s=R(null),u=R(null),c=R(null),f=De(R2),d=lt();yt("NodeInstance",d),e.node.expanded&&(a.value=!0,l.value=!0);const p=r.props.props.children||"children";ve(()=>{const O=e.node.data[p];return O&&[...O]},()=>{e.node.updateChildren()}),ve(()=>e.node.indeterminate,O=>{h(e.node.checked,O)}),ve(()=>e.node.checked,O=>{h(O,e.node.indeterminate)}),ve(()=>e.node.childNodes.length,()=>e.node.reInitChecked()),ve(()=>e.node.expanded,O=>{We(()=>a.value=O),O&&(l.value=!0)});const m=O=>Bg(r.props.nodeKey,O.data),v=O=>{const A=e.props.class;if(!A)return{};let M;if(Xe(A)){const{data:D}=O;M=A(D,O)}else M=A;return nt(M)?{[M]:!0}:M},h=(O,A)=>{(s.value!==O||u.value!==A)&&r.ctx.emit("check-change",e.node.data,O,A),s.value=O,u.value=A},C=O=>{um(r.store,r.ctx.emit,()=>r.store.value.setCurrentNode(e.node)),r.currentNode.value=e.node,r.props.expandOnClickNode&&y(),r.props.checkOnClickNode&&!e.node.disabled&&_(null,{target:{checked:!e.node.checked}}),r.ctx.emit("node-click",e.node.data,e.node,d,O)},g=O=>{r.instance.vnode.props.onNodeContextmenu&&(O.stopPropagation(),O.preventDefault()),r.ctx.emit("node-contextmenu",O,e.node.data,e.node,d)},y=()=>{e.node.isLeaf||(a.value?(r.ctx.emit("node-collapse",e.node.data,e.node,d),e.node.collapse()):(e.node.expand(),t.emit("node-expand",e.node.data,e.node,d)))},_=(O,A)=>{e.node.setChecked(A.target.checked,!r.props.checkStrictly),We(()=>{const M=r.store.value;r.ctx.emit("check",e.node.data,{checkedNodes:M.getCheckedNodes(),checkedKeys:M.getCheckedKeys(),halfCheckedNodes:M.getHalfCheckedNodes(),halfCheckedKeys:M.getHalfCheckedKeys()})})};return{ns:n,node$:c,tree:r,expanded:a,childNodeRendered:l,oldChecked:s,oldIndeterminate:u,getNodeKey:m,getNodeClass:v,handleSelectChange:h,handleClick:C,handleContextMenu:g,handleExpandIconClick:y,handleCheckChange:_,handleChildNodeExpand:(O,A,M)=>{o(A),r.ctx.emit("node-expand",O,A,M)},handleDragStart:O=>{r.props.draggable&&f.treeNodeDragStart({event:O,treeNode:e})},handleDragOver:O=>{O.preventDefault(),r.props.draggable&&f.treeNodeDragOver({event:O,treeNode:{$el:c.value,node:e.node}})},handleDrop:O=>{O.preventDefault()},handleDragEnd:O=>{r.props.draggable&&f.treeNodeDragEnd(O)},CaretRight:UC}}}),_Q=["aria-expanded","aria-disabled","aria-checked","draggable","data-key"],CQ=["aria-expanded"];function SQ(e,t,n,o,r,a){const l=qe("el-icon"),s=qe("el-checkbox"),u=qe("loading"),c=qe("node-content"),f=qe("el-tree-node"),d=qe("el-collapse-transition");return tt((T(),V("div",{ref:"node$",class:N([e.ns.b("node"),e.ns.is("expanded",e.expanded),e.ns.is("current",e.node.isCurrent),e.ns.is("hidden",!e.node.visible),e.ns.is("focusable",!e.node.disabled),e.ns.is("checked",!e.node.disabled&&e.node.checked),e.getNodeClass(e.node)]),role:"treeitem",tabindex:"-1","aria-expanded":e.expanded,"aria-disabled":e.node.disabled,"aria-checked":e.node.checked,draggable:e.tree.props.draggable,"data-key":e.getNodeKey(e.node),onClick:t[1]||(t[1]=Qe((...p)=>e.handleClick&&e.handleClick(...p),["stop"])),onContextmenu:t[2]||(t[2]=(...p)=>e.handleContextMenu&&e.handleContextMenu(...p)),onDragstart:t[3]||(t[3]=Qe((...p)=>e.handleDragStart&&e.handleDragStart(...p),["stop"])),onDragover:t[4]||(t[4]=Qe((...p)=>e.handleDragOver&&e.handleDragOver(...p),["stop"])),onDragend:t[5]||(t[5]=Qe((...p)=>e.handleDragEnd&&e.handleDragEnd(...p),["stop"])),onDrop:t[6]||(t[6]=Qe((...p)=>e.handleDrop&&e.handleDrop(...p),["stop"]))},[F("div",{class:N(e.ns.be("node","content")),style:je({paddingLeft:(e.node.level-1)*e.tree.props.indent+"px"})},[e.tree.props.icon||e.CaretRight?(T(),re(l,{key:0,class:N([e.ns.be("node","expand-icon"),e.ns.is("leaf",e.node.isLeaf),{expanded:!e.node.isLeaf&&e.expanded}]),onClick:Qe(e.handleExpandIconClick,["stop"])},{default:X(()=>[(T(),re(pt(e.tree.props.icon||e.CaretRight)))]),_:1},8,["class","onClick"])):te("v-if",!0),e.showCheckbox?(T(),re(s,{key:1,"model-value":e.node.checked,indeterminate:e.node.indeterminate,disabled:!!e.node.disabled,onClick:t[0]||(t[0]=Qe(()=>{},["stop"])),onChange:e.handleCheckChange},null,8,["model-value","indeterminate","disabled","onChange"])):te("v-if",!0),e.node.loading?(T(),re(l,{key:2,class:N([e.ns.be("node","loading-icon"),e.ns.is("loading")])},{default:X(()=>[K(u)]),_:1},8,["class"])):te("v-if",!0),K(c,{node:e.node,"render-content":e.renderContent},null,8,["node","render-content"])],6),K(d,null,{default:X(()=>[!e.renderAfterExpand||e.childNodeRendered?tt((T(),V("div",{key:0,class:N(e.ns.be("node","children")),role:"group","aria-expanded":e.expanded},[(T(!0),V(Ve,null,bt(e.node.childNodes,p=>(T(),re(f,{key:e.getNodeKey(p),"render-content":e.renderContent,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,node:p,accordion:e.accordion,props:e.props,onNodeExpand:e.handleChildNodeExpand},null,8,["render-content","render-after-expand","show-checkbox","node","accordion","props","onNodeExpand"]))),128))],10,CQ)),[[kt,e.expanded]]):te("v-if",!0)]),_:1})],42,_Q)),[[kt,e.node.visible]])}var kQ=Ie(wQ,[["render",SQ],["__file","tree-node.vue"]]);function EQ({el$:e},t){const n=Se("tree"),o=Ut([]),r=Ut([]);at(()=>{l()}),ar(()=>{o.value=Array.from(e.value.querySelectorAll("[role=treeitem]")),r.value=Array.from(e.value.querySelectorAll("input[type=checkbox]"))}),ve(r,s=>{s.forEach(u=>{u.setAttribute("tabindex","-1")})}),qt(e,"keydown",s=>{const u=s.target;if(!u.className.includes(n.b("node")))return;const c=s.code;o.value=Array.from(e.value.querySelectorAll(`.${n.is("focusable")}[role=treeitem]`));const f=o.value.indexOf(u);let d;if([Ue.up,Ue.down].includes(c)){if(s.preventDefault(),c===Ue.up){d=f===-1?0:f!==0?f-1:o.value.length-1;const m=d;for(;!t.value.getNode(o.value[d].dataset.key).canFocus;){if(d--,d===m){d=-1;break}d<0&&(d=o.value.length-1)}}else{d=f===-1?0:f=o.value.length&&(d=0)}}d!==-1&&o.value[d].focus()}[Ue.left,Ue.right].includes(c)&&(s.preventDefault(),u.click());const p=u.querySelector('[type="checkbox"]');[Ue.enter,Ue.space].includes(c)&&p&&(s.preventDefault(),p.click())});const l=()=>{var s;o.value=Array.from(e.value.querySelectorAll(`.${n.is("focusable")}[role=treeitem]`)),r.value=Array.from(e.value.querySelectorAll("input[type=checkbox]"));const u=e.value.querySelectorAll(`.${n.is("checked")}[role=treeitem]`);if(u.length){u[0].setAttribute("tabindex","0");return}(s=o.value[0])==null||s.setAttribute("tabindex","0")}}const TQ=Y({name:"ElTree",components:{ElTreeNode:kQ},props:{data:{type:Array,default:()=>[]},emptyText:{type:String},renderAfterExpand:{type:Boolean,default:!0},nodeKey:String,checkStrictly:Boolean,defaultExpandAll:Boolean,expandOnClickNode:{type:Boolean,default:!0},checkOnClickNode:Boolean,checkDescendants:{type:Boolean,default:!1},autoExpandParent:{type:Boolean,default:!0},defaultCheckedKeys:Array,defaultExpandedKeys:Array,currentNodeKey:[String,Number],renderContent:Function,showCheckbox:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},allowDrag:Function,allowDrop:Function,props:{type:Object,default:()=>({children:"children",label:"label",disabled:"disabled"})},lazy:{type:Boolean,default:!1},highlightCurrent:Boolean,load:Function,filterNodeMethod:Function,accordion:Boolean,indent:{type:Number,default:18},icon:{type:Dt}},emits:["check-change","current-change","node-click","node-contextmenu","node-collapse","node-expand","check","node-drag-start","node-drag-end","node-drop","node-drag-leave","node-drag-enter","node-drag-over"],setup(e,t){const{t:n}=$t(),o=Se("tree"),r=De(ni,null),a=R(new vQ({key:e.nodeKey,data:e.data,lazy:e.lazy,props:e.props,load:e.load,currentNodeKey:e.currentNodeKey,checkStrictly:e.checkStrictly,checkDescendants:e.checkDescendants,defaultCheckedKeys:e.defaultCheckedKeys,defaultExpandedKeys:e.defaultExpandedKeys,autoExpandParent:e.autoExpandParent,defaultExpandAll:e.defaultExpandAll,filterNodeMethod:e.filterNodeMethod}));a.value.initialize();const l=R(a.value.root),s=R(null),u=R(null),c=R(null),{broadcastExpanded:f}=P2(e),{dragState:d}=yQ({props:e,ctx:t,el$:u,dropIndicator$:c,store:a});EQ({el$:u},a);const p=k(()=>{const{childNodes:x}=l.value,I=r?r.hasFilteredOptions!==0:!1;return(!x||x.length===0||x.every(({visible:H})=>!H))&&!I});ve(()=>e.currentNodeKey,x=>{a.value.setCurrentNodeKey(x)}),ve(()=>e.defaultCheckedKeys,x=>{a.value.setDefaultCheckedKey(x)}),ve(()=>e.defaultExpandedKeys,x=>{a.value.setDefaultExpandedKeys(x)}),ve(()=>e.data,x=>{a.value.setData(x)},{deep:!0}),ve(()=>e.checkStrictly,x=>{a.value.checkStrictly=x});const m=x=>{if(!e.filterNodeMethod)throw new Error("[Tree] filterNodeMethod is required when filter");a.value.filter(x)},v=x=>Bg(e.nodeKey,x.data),h=x=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in getNodePath");const I=a.value.getNode(x);if(!I)return[];const H=[I.data];let G=I.parent;for(;G&&G!==l.value;)H.push(G.data),G=G.parent;return H.reverse()},C=(x,I)=>a.value.getCheckedNodes(x,I),g=x=>a.value.getCheckedKeys(x),y=()=>{const x=a.value.getCurrentNode();return x?x.data:null},_=()=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in getCurrentKey");const x=y();return x?x[e.nodeKey]:null},b=(x,I)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedNodes");a.value.setCheckedNodes(x,I)},w=(x,I)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedKeys");a.value.setCheckedKeys(x,I)},S=(x,I,H)=>{a.value.setChecked(x,I,H)},E=()=>a.value.getHalfCheckedNodes(),$=()=>a.value.getHalfCheckedKeys(),O=(x,I=!0)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentNode");um(a,t.emit,()=>{f(x),a.value.setUserCurrentNode(x,I)})},A=(x,I=!0)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentKey");um(a,t.emit,()=>{f(),a.value.setCurrentNodeKey(x,I)})},M=x=>a.value.getNode(x),D=x=>{a.value.remove(x)},U=(x,I)=>{a.value.append(x,I)},j=(x,I)=>{a.value.insertBefore(x,I)},W=(x,I)=>{a.value.insertAfter(x,I)},L=(x,I,H)=>{f(I),t.emit("node-expand",x,I,H)},P=(x,I)=>{if(!e.nodeKey)throw new Error("[Tree] nodeKey is required in updateKeyChild");a.value.updateChildren(x,I)};return yt("RootTree",{ctx:t,props:e,store:a,root:l,currentNode:s,instance:lt()}),yt(Or,void 0),{ns:o,store:a,root:l,currentNode:s,dragState:d,el$:u,dropIndicator$:c,isEmpty:p,filter:m,getNodeKey:v,getNodePath:h,getCheckedNodes:C,getCheckedKeys:g,getCurrentNode:y,getCurrentKey:_,setCheckedNodes:b,setCheckedKeys:w,setChecked:S,getHalfCheckedNodes:E,getHalfCheckedKeys:$,setCurrentNode:O,setCurrentKey:A,t:n,getNode:M,remove:D,append:U,insertBefore:j,insertAfter:W,handleNodeExpand:L,updateKeyChildren:P}}});function $Q(e,t,n,o,r,a){const l=qe("el-tree-node");return T(),V("div",{ref:"el$",class:N([e.ns.b(),e.ns.is("dragging",!!e.dragState.draggingNode),e.ns.is("drop-not-allow",!e.dragState.allowDrop),e.ns.is("drop-inner",e.dragState.dropType==="inner"),{[e.ns.m("highlight-current")]:e.highlightCurrent}]),role:"tree"},[(T(!0),V(Ve,null,bt(e.root.childNodes,s=>(T(),re(l,{key:e.getNodeKey(s),node:s,props:e.props,accordion:e.accordion,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,"render-content":e.renderContent,onNodeExpand:e.handleNodeExpand},null,8,["node","props","accordion","render-after-expand","show-checkbox","render-content","onNodeExpand"]))),128)),e.isEmpty?(T(),V("div",{key:0,class:N(e.ns.e("empty-block"))},[ie(e.$slots,"empty",{},()=>{var s;return[F("span",{class:N(e.ns.e("empty-text"))},le((s=e.emptyText)!=null?s:e.t("el.tree.emptyText")),3)]})],2)):te("v-if",!0),tt(F("div",{ref:"dropIndicator$",class:N(e.ns.e("drop-indicator"))},null,2),[[kt,e.dragState.showDropIndicator]])],2)}var Gc=Ie(TQ,[["render",$Q],["__file","tree.vue"]]);Gc.install=e=>{e.component(Gc.name,Gc)};const Id=Gc,OQ=Id,NQ=(e,{attrs:t,emit:n},{select:o,tree:r,key:a})=>{const l=Se("tree-select");return ve(()=>e.data,()=>{e.filterable&&We(()=>{var u,c;(c=r.value)==null||c.filter((u=o.value)==null?void 0:u.states.inputValue)})},{flush:"post"}),{...gr(Cn(e),Object.keys(Ol.props)),...t,"onUpdate:modelValue":u=>n(ft,u),valueKey:a,popperClass:k(()=>{const u=[l.e("popper")];return e.popperClass&&u.push(e.popperClass),u.join(" ")}),filterMethod:(u="")=>{var c;e.filterMethod?e.filterMethod(u):e.remoteMethod?e.remoteMethod(u):(c=r.value)==null||c.filter(u)}}},IQ=Y({extends:Cd,setup(e,t){const n=Cd.setup(e,t);delete n.selectOptionClick;const o=lt().proxy;return We(()=>{n.select.states.cachedOptions.get(o.value)||n.select.onOptionCreate(o)}),ve(()=>t.attrs.visible,r=>{n.states.visible=r},{immediate:!0}),n},methods:{selectOptionClick(){this.$el.parentElement.click()}}});function fm(e){return e||e===0}function Vg(e){return Array.isArray(e)&&e.length}function bi(e){return Array.isArray(e)?e:fm(e)?[e]:[]}function Xc(e,t,n,o,r){for(let a=0;a{ve(()=>e.modelValue,()=>{e.showCheckbox&&We(()=>{const d=a.value;d&&!Wn(d.getCheckedKeys(),bi(e.modelValue))&&d.setCheckedKeys(bi(e.modelValue))})},{immediate:!0,deep:!0});const s=k(()=>({value:l.value,label:"label",children:"children",disabled:"disabled",isLeaf:"isLeaf",...e.props})),u=(d,p)=>{var m;const v=s.value[d];return Xe(v)?v(p,(m=a.value)==null?void 0:m.getNode(u("value",p))):p[v]},c=bi(e.modelValue).map(d=>Xc(e.data||[],p=>u("value",p)===d,p=>u("children",p),(p,m,v,h)=>h&&u("value",h))).filter(d=>fm(d)),f=k(()=>{if(!e.renderAfterExpand&&!e.lazy)return[];const d=[];return pm(e.data.concat(e.cacheData),p=>{const m=u("value",p);d.push({value:m,currentLabel:u("label",p),isDisabled:u("disabled",p)})},p=>u("children",p)),d});return{...gr(Cn(e),Object.keys(Id.props)),...t,nodeKey:l,expandOnClickNode:k(()=>!e.checkStrictly&&e.expandOnClickNode),defaultExpandedKeys:k(()=>e.defaultExpandedKeys?e.defaultExpandedKeys.concat(c):c),renderContent:(d,{node:p,data:m,store:v})=>d(IQ,{value:u("value",m),label:u("label",m),disabled:u("disabled",m),visible:p.visible},e.renderContent?()=>e.renderContent(d,{node:p,data:m,store:v}):n.default?()=>n.default({node:p,data:m,store:v}):void 0),filterNodeMethod:(d,p,m)=>e.filterNodeMethod?e.filterNodeMethod(d,p,m):d?new RegExp($v(d),"i").test(u("label",p)||""):!0,onNodeClick:(d,p,m)=>{var v,h,C,g;if((v=t.onNodeClick)==null||v.call(t,d,p,m),!(e.showCheckbox&&e.checkOnClickNode)){if(!e.showCheckbox&&(e.checkStrictly||p.isLeaf)){if(!u("disabled",d)){const y=(h=r.value)==null?void 0:h.states.options.get(u("value",d));(C=r.value)==null||C.handleOptionSelect(y)}}else e.expandOnClickNode&&m.proxy.handleExpandIconClick();(g=r.value)==null||g.focus()}},onCheck:(d,p)=>{var m;if(!e.showCheckbox)return;const v=u("value",d),h={};pm([a.value.store.root],_=>h[_.key]=_,_=>_.childNodes);const C=p.checkedKeys,g=e.multiple?bi(e.modelValue).filter(_=>!(_ in h)&&!C.includes(_)):[],y=g.concat(C);if(e.checkStrictly)o(ft,e.multiple?y:y.includes(v)?v:void 0);else if(e.multiple)o(ft,g.concat(a.value.getCheckedKeys(!0)));else{const _=Xc([d],S=>!Vg(u("children",S))&&!u("disabled",S),S=>u("children",S)),b=_?u("value",_):void 0,w=fm(e.modelValue)&&!!Xc([d],S=>u("value",S)===e.modelValue,S=>u("children",S));o(ft,b===e.modelValue||w?void 0:b)}We(()=>{var _;const b=bi(e.modelValue);a.value.setCheckedKeys(b),(_=t.onCheck)==null||_.call(t,d,{checkedKeys:a.value.getCheckedKeys(),checkedNodes:a.value.getCheckedNodes(),halfCheckedKeys:a.value.getHalfCheckedKeys(),halfCheckedNodes:a.value.getHalfCheckedNodes()})}),(m=r.value)==null||m.focus()},cacheOptions:f}};var AQ=Y({props:{data:{type:Array,default:()=>[]}},setup(e){const t=De(ni);return ve(()=>e.data,()=>{var n;e.data.forEach(r=>{t.states.cachedOptions.has(r.value)||t.states.cachedOptions.set(r.value,r)});const o=((n=t.selectRef)==null?void 0:n.querySelectorAll("input"))||[];Ct&&!Array.from(o).includes(document.activeElement)&&t.setSelected()},{flush:"post",immediate:!0}),()=>{}}});const PQ=Y({name:"ElTreeSelect",inheritAttrs:!1,props:{...Ol.props,...Id.props,cacheData:{type:Array,default:()=>[]}},setup(e,t){const{slots:n,expose:o}=t,r=R(),a=R(),l=k(()=>e.nodeKey||e.valueKey||"value"),s=NQ(e,t,{select:r,tree:a,key:l}),{cacheOptions:u,...c}=MQ(e,t,{select:r,tree:a,key:l}),f=Et({});return o(f),at(()=>{Object.assign(f,{...gr(a.value,["filter","updateKeyChildren","getCheckedNodes","setCheckedNodes","getCheckedKeys","setCheckedKeys","setChecked","getHalfCheckedNodes","getHalfCheckedKeys","getCurrentKey","getCurrentNode","setCurrentKey","setCurrentNode","getNode","remove","append","insertBefore","insertAfter"]),...gr(r.value,["focus","blur"])})}),()=>Ke(Ol,Et({...s,ref:d=>r.value=d}),{...n,default:()=>[Ke(AQ,{data:u.value}),Ke(Id,Et({...c,ref:d=>a.value=d}))]})}});var Jc=Ie(PQ,[["__file","tree-select.vue"]]);Jc.install=e=>{e.component(Jc.name,Jc)};const RQ=Jc,LQ=RQ,Hg=Symbol(),xQ={key:-1,level:-1,data:{}};var Ti=(e=>(e.KEY="id",e.LABEL="label",e.CHILDREN="children",e.DISABLED="disabled",e))(Ti||{}),hm=(e=>(e.ADD="add",e.DELETE="delete",e))(hm||{});const L2={type:Number,default:26},DQ=Ne({data:{type:Q(Array),default:()=>en([])},emptyText:{type:String},height:{type:Number,default:200},props:{type:Q(Object),default:()=>en({children:"children",label:"label",disabled:"disabled",value:"id"})},highlightCurrent:{type:Boolean,default:!1},showCheckbox:{type:Boolean,default:!1},defaultCheckedKeys:{type:Q(Array),default:()=>en([])},checkStrictly:{type:Boolean,default:!1},defaultExpandedKeys:{type:Q(Array),default:()=>en([])},indent:{type:Number,default:16},itemSize:L2,icon:{type:Dt},expandOnClickNode:{type:Boolean,default:!0},checkOnClickNode:{type:Boolean,default:!1},currentNodeKey:{type:Q([String,Number])},accordion:{type:Boolean,default:!1},filterMethod:{type:Q(Function)},perfMode:{type:Boolean,default:!0}}),FQ=Ne({node:{type:Q(Object),default:()=>en(xQ)},expanded:{type:Boolean,default:!1},checked:{type:Boolean,default:!1},indeterminate:{type:Boolean,default:!1},showCheckbox:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},current:{type:Boolean,default:!1},hiddenExpandIcon:{type:Boolean,default:!1},itemSize:L2}),BQ=Ne({node:{type:Q(Object),required:!0}}),x2="node-click",D2="node-expand",F2="node-collapse",B2="current-change",V2="check",H2="check-change",z2="node-contextmenu",VQ={[x2]:(e,t,n)=>e&&t&&n,[D2]:(e,t)=>e&&t,[F2]:(e,t)=>e&&t,[B2]:(e,t)=>e&&t,[V2]:(e,t)=>e&&t,[H2]:(e,t)=>e&&typeof t=="boolean",[z2]:(e,t,n)=>e&&t&&n},HQ={click:(e,t)=>!!(e&&t),toggle:e=>!!e,check:(e,t)=>e&&typeof t=="boolean"};function zQ(e,t){const n=R(new Set),o=R(new Set),{emit:r}=lt();ve([()=>t.value,()=>e.defaultCheckedKeys],()=>We(()=>{y(e.defaultCheckedKeys)}),{immediate:!0});const a=()=>{if(!t.value||!e.showCheckbox||e.checkStrictly)return;const{levelTreeNodeMap:_,maxLevel:b}=t.value,w=n.value,S=new Set;for(let E=b-1;E>=1;--E){const $=_.get(E);$&&$.forEach(O=>{const A=O.children;if(A){let M=!0,D=!1;for(const U of A){const j=U.key;if(w.has(j))D=!0;else if(S.has(j)){M=!1,D=!0;break}else M=!1}M?w.add(O.key):D?(S.add(O.key),w.delete(O.key)):(w.delete(O.key),S.delete(O.key))}})}o.value=S},l=_=>n.value.has(_.key),s=_=>o.value.has(_.key),u=(_,b,w=!0)=>{const S=n.value,E=($,O)=>{S[O?hm.ADD:hm.DELETE]($.key);const A=$.children;!e.checkStrictly&&A&&A.forEach(M=>{M.disabled||E(M,O)})};E(_,b),a(),w&&c(_,b)},c=(_,b)=>{const{checkedNodes:w,checkedKeys:S}=v(),{halfCheckedNodes:E,halfCheckedKeys:$}=h();r(V2,_.data,{checkedKeys:S,checkedNodes:w,halfCheckedKeys:$,halfCheckedNodes:E}),r(H2,_.data,b)};function f(_=!1){return v(_).checkedKeys}function d(_=!1){return v(_).checkedNodes}function p(){return h().halfCheckedKeys}function m(){return h().halfCheckedNodes}function v(_=!1){const b=[],w=[];if(t!=null&&t.value&&e.showCheckbox){const{treeNodeMap:S}=t.value;n.value.forEach(E=>{const $=S.get(E);$&&(!_||_&&$.isLeaf)&&(w.push(E),b.push($.data))})}return{checkedKeys:w,checkedNodes:b}}function h(){const _=[],b=[];if(t!=null&&t.value&&e.showCheckbox){const{treeNodeMap:w}=t.value;o.value.forEach(S=>{const E=w.get(S);E&&(b.push(S),_.push(E.data))})}return{halfCheckedNodes:_,halfCheckedKeys:b}}function C(_){n.value.clear(),o.value.clear(),We(()=>{y(_)})}function g(_,b){if(t!=null&&t.value&&e.showCheckbox){const w=t.value.treeNodeMap.get(_);w&&u(w,b,!1)}}function y(_){if(t!=null&&t.value){const{treeNodeMap:b}=t.value;if(e.showCheckbox&&b&&_)for(const w of _){const S=b.get(w);S&&!l(S)&&u(S,!0,!1)}}}return{updateCheckedKeys:a,toggleCheckbox:u,isChecked:l,isIndeterminate:s,getCheckedKeys:f,getCheckedNodes:d,getHalfCheckedKeys:p,getHalfCheckedNodes:m,setChecked:g,setCheckedKeys:C}}function jQ(e,t){const n=R(new Set([])),o=R(new Set([])),r=k(()=>Xe(e.filterMethod));function a(s){var u;if(!r.value)return;const c=new Set,f=o.value,d=n.value,p=[],m=((u=t.value)==null?void 0:u.treeNodes)||[],v=e.filterMethod;d.clear();function h(C){C.forEach(g=>{p.push(g),v!=null&&v(s,g.data)?p.forEach(_=>{c.add(_.key)}):g.isLeaf&&d.add(g.key);const y=g.children;if(y&&h(y),!g.isLeaf){if(!c.has(g.key))d.add(g.key);else if(y){let _=!0;for(const b of y)if(!d.has(b.key)){_=!1;break}_?f.add(g.key):f.delete(g.key)}}p.pop()})}return h(m),c}function l(s){return o.value.has(s.key)}return{hiddenExpandIconKeySet:o,hiddenNodeKeySet:n,doFilter:a,isForceHiddenExpandIcon:l}}function WQ(e,t){const n=R(new Set(e.defaultExpandedKeys)),o=R(),r=Ut();ve(()=>e.currentNodeKey,ae=>{o.value=ae},{immediate:!0}),ve(()=>e.data,ae=>{oe(ae)},{immediate:!0});const{isIndeterminate:a,isChecked:l,toggleCheckbox:s,getCheckedKeys:u,getCheckedNodes:c,getHalfCheckedKeys:f,getHalfCheckedNodes:d,setChecked:p,setCheckedKeys:m}=zQ(e,r),{doFilter:v,hiddenNodeKeySet:h,isForceHiddenExpandIcon:C}=jQ(e,r),g=k(()=>{var ae;return((ae=e.props)==null?void 0:ae.value)||Ti.KEY}),y=k(()=>{var ae;return((ae=e.props)==null?void 0:ae.children)||Ti.CHILDREN}),_=k(()=>{var ae;return((ae=e.props)==null?void 0:ae.disabled)||Ti.DISABLED}),b=k(()=>{var ae;return((ae=e.props)==null?void 0:ae.label)||Ti.LABEL}),w=k(()=>{const ae=n.value,Oe=h.value,we=[],ge=r.value&&r.value.treeNodes||[];function q(){const B=[];for(let z=ge.length-1;z>=0;--z)B.push(ge[z]);for(;B.length;){const z=B.pop();if(z&&(Oe.has(z.key)||we.push(z),ae.has(z.key))){const Z=z.children;if(Z){const ue=Z.length;for(let se=ue-1;se>=0;--se)B.push(Z[se])}}}}return q(),we}),S=k(()=>w.value.length>0);function E(ae){const Oe=new Map,we=new Map;let ge=1;function q(z,Z=1,ue=void 0){var se;const me=[];for(const _e of z){const $e=A(_e),Ce={level:Z,key:$e,data:_e};Ce.label=D(_e),Ce.parent=ue;const ce=O(_e);Ce.disabled=M(_e),Ce.isLeaf=!ce||ce.length===0,ce&&ce.length&&(Ce.children=q(ce,Z+1,Ce)),me.push(Ce),Oe.set($e,Ce),we.has(Z)||we.set(Z,[]),(se=we.get(Z))==null||se.push(Ce)}return Z>ge&&(ge=Z),me}const B=q(ae);return{treeNodeMap:Oe,levelTreeNodeMap:we,maxLevel:ge,treeNodes:B}}function $(ae){const Oe=v(ae);Oe&&(n.value=Oe)}function O(ae){return ae[y.value]}function A(ae){return ae?ae[g.value]:""}function M(ae){return ae[_.value]}function D(ae){return ae[b.value]}function U(ae){n.value.has(ae.key)?I(ae):x(ae)}function j(ae){n.value=new Set(ae)}function W(ae,Oe){t(x2,ae.data,ae,Oe),L(ae),e.expandOnClickNode&&U(ae),e.showCheckbox&&e.checkOnClickNode&&!ae.disabled&&s(ae,!l(ae),!0)}function L(ae){J(ae)||(o.value=ae.key,t(B2,ae.data,ae))}function P(ae,Oe){s(ae,Oe)}function x(ae){const Oe=n.value;if(r.value&&e.accordion){const{treeNodeMap:we}=r.value;Oe.forEach(ge=>{const q=we.get(ge);ae&&ae.level===(q==null?void 0:q.level)&&Oe.delete(ge)})}Oe.add(ae.key),t(D2,ae.data,ae)}function I(ae){n.value.delete(ae.key),t(F2,ae.data,ae)}function H(ae){return n.value.has(ae.key)}function G(ae){return!!ae.disabled}function J(ae){const Oe=o.value;return Oe!==void 0&&Oe===ae.key}function ee(){var ae,Oe;if(o.value)return(Oe=(ae=r.value)==null?void 0:ae.treeNodeMap.get(o.value))==null?void 0:Oe.data}function fe(){return o.value}function Te(ae){o.value=ae}function oe(ae){We(()=>r.value=E(ae))}function ke(ae){var Oe;const we=dt(ae)?A(ae):ae;return(Oe=r.value)==null?void 0:Oe.treeNodeMap.get(we)}return{tree:r,flattenTree:w,isNotEmpty:S,getKey:A,getChildren:O,toggleExpand:U,toggleCheckbox:s,isExpanded:H,isChecked:l,isIndeterminate:a,isDisabled:G,isCurrent:J,isForceHiddenExpandIcon:C,handleNodeClick:W,handleNodeCheck:P,getCurrentNode:ee,getCurrentKey:fe,setCurrentKey:Te,getCheckedKeys:u,getCheckedNodes:c,getHalfCheckedKeys:f,getHalfCheckedNodes:d,setChecked:p,setCheckedKeys:m,filter:$,setData:oe,getNode:ke,expandNode:x,collapseNode:I,setExpandedKeys:j}}var KQ=Y({name:"ElTreeNodeContent",props:BQ,setup(e){const t=De(Hg),n=Se("tree");return()=>{const o=e.node,{data:r}=o;return t!=null&&t.ctx.slots.default?t.ctx.slots.default({node:o,data:r}):Ke("span",{class:n.be("node","label")},[o==null?void 0:o.label])}}});const UQ=["aria-expanded","aria-disabled","aria-checked","data-key","onClick"],qQ=Y({name:"ElTreeNode"}),YQ=Y({...qQ,props:FQ,emits:HQ,setup(e,{emit:t}){const n=e,o=De(Hg),r=Se("tree"),a=k(()=>{var d;return(d=o==null?void 0:o.props.indent)!=null?d:16}),l=k(()=>{var d;return(d=o==null?void 0:o.props.icon)!=null?d:UC}),s=d=>{t("click",n.node,d)},u=()=>{t("toggle",n.node)},c=d=>{t("check",n.node,d)},f=d=>{var p,m,v,h;(v=(m=(p=o==null?void 0:o.instance)==null?void 0:p.vnode)==null?void 0:m.props)!=null&&v.onNodeContextmenu&&(d.stopPropagation(),d.preventDefault()),o==null||o.ctx.emit(z2,d,(h=n.node)==null?void 0:h.data,n.node)};return(d,p)=>{var m,v,h;return T(),V("div",{ref:"node$",class:N([i(r).b("node"),i(r).is("expanded",d.expanded),i(r).is("current",d.current),i(r).is("focusable",!d.disabled),i(r).is("checked",!d.disabled&&d.checked)]),role:"treeitem",tabindex:"-1","aria-expanded":d.expanded,"aria-disabled":d.disabled,"aria-checked":d.checked,"data-key":(m=d.node)==null?void 0:m.key,onClick:Qe(s,["stop"]),onContextmenu:f},[F("div",{class:N(i(r).be("node","content")),style:je({paddingLeft:`${(d.node.level-1)*i(a)}px`,height:d.itemSize+"px"})},[i(l)?(T(),re(i(ze),{key:0,class:N([i(r).is("leaf",!!((v=d.node)!=null&&v.isLeaf)),i(r).is("hidden",d.hiddenExpandIcon),{expanded:!((h=d.node)!=null&&h.isLeaf)&&d.expanded},i(r).be("node","expand-icon")]),onClick:Qe(u,["stop"])},{default:X(()=>[(T(),re(pt(i(l))))]),_:1},8,["class","onClick"])):te("v-if",!0),d.showCheckbox?(T(),re(i(Ho),{key:1,"model-value":d.checked,indeterminate:d.indeterminate,disabled:d.disabled,onChange:c,onClick:p[0]||(p[0]=Qe(()=>{},["stop"]))},null,8,["model-value","indeterminate","disabled"])):te("v-if",!0),K(i(KQ),{node:d.node},null,8,["node"])],6)],42,UQ)}}});var GQ=Ie(YQ,[["__file","tree-node.vue"]]);const XQ=Y({name:"ElTreeV2"}),JQ=Y({...XQ,props:DQ,emits:VQ,setup(e,{expose:t,emit:n}){const o=e,r=Sn(),a=k(()=>o.itemSize);yt(Hg,{ctx:{emit:n,slots:r},props:o,instance:lt()}),yt(Or,void 0);const{t:l}=$t(),s=Se("tree"),{flattenTree:u,isNotEmpty:c,toggleExpand:f,isExpanded:d,isIndeterminate:p,isChecked:m,isDisabled:v,isCurrent:h,isForceHiddenExpandIcon:C,handleNodeClick:g,handleNodeCheck:y,toggleCheckbox:_,getCurrentNode:b,getCurrentKey:w,setCurrentKey:S,getCheckedKeys:E,getCheckedNodes:$,getHalfCheckedKeys:O,getHalfCheckedNodes:A,setChecked:M,setCheckedKeys:D,filter:U,setData:j,getNode:W,expandNode:L,collapseNode:P,setExpandedKeys:x}=WQ(o,n);return t({toggleCheckbox:_,getCurrentNode:b,getCurrentKey:w,setCurrentKey:S,getCheckedKeys:E,getCheckedNodes:$,getHalfCheckedKeys:O,getHalfCheckedNodes:A,setChecked:M,setCheckedKeys:D,filter:U,setData:j,getNode:W,expandNode:L,collapseNode:P,setExpandedKeys:x}),(I,H)=>{var G;return T(),V("div",{class:N([i(s).b(),{[i(s).m("highlight-current")]:I.highlightCurrent}]),role:"tree"},[i(c)?(T(),re(i(UE),{key:0,"class-name":i(s).b("virtual-list"),data:i(u),total:i(u).length,height:I.height,"item-size":i(a),"perf-mode":I.perfMode},{default:X(({data:J,index:ee,style:fe})=>[(T(),re(GQ,{key:J[ee].key,style:je(fe),node:J[ee],expanded:i(d)(J[ee]),"show-checkbox":I.showCheckbox,checked:i(m)(J[ee]),indeterminate:i(p)(J[ee]),"item-size":i(a),disabled:i(v)(J[ee]),current:i(h)(J[ee]),"hidden-expand-icon":i(C)(J[ee]),onClick:i(g),onToggle:i(f),onCheck:i(y)},null,8,["style","node","expanded","show-checkbox","checked","indeterminate","item-size","disabled","current","hidden-expand-icon","onClick","onToggle","onCheck"]))]),_:1},8,["class-name","data","total","height","item-size","perf-mode"])):(T(),V("div",{key:1,class:N(i(s).e("empty-block"))},[F("span",{class:N(i(s).e("empty-text"))},le((G=I.emptyText)!=null?G:i(l)("el.tree.emptyText")),3)],2))],2)}}});var ZQ=Ie(JQ,[["__file","tree.vue"]]);const QQ=ut(ZQ),j2=Symbol("uploadContextKey"),eee="ElUpload";class tee extends Error{constructor(t,n,o,r){super(t),this.name="UploadAjaxError",this.status=n,this.method=o,this.url=r}}function I1(e,t,n){let o;return n.response?o=`${n.response.error||n.response}`:n.responseText?o=`${n.responseText}`:o=`fail to ${t.method} ${e} ${n.status}`,new tee(o,n.status,t.method,e)}function nee(e){const t=e.responseText||e.response;if(!t)return t;try{return JSON.parse(t)}catch{return t}}const oee=e=>{typeof XMLHttpRequest>"u"&&vn(eee,"XMLHttpRequest is undefined");const t=new XMLHttpRequest,n=e.action;t.upload&&t.upload.addEventListener("progress",a=>{const l=a;l.percent=a.total>0?a.loaded/a.total*100:0,e.onProgress(l)});const o=new FormData;if(e.data)for(const[a,l]of Object.entries(e.data))Pe(l)&&l.length?o.append(a,...l):o.append(a,l);o.append(e.filename,e.file,e.file.name),t.addEventListener("error",()=>{e.onError(I1(n,e,t))}),t.addEventListener("load",()=>{if(t.status<200||t.status>=300)return e.onError(I1(n,e,t));e.onSuccess(nee(t))}),t.open(e.method,n,!0),e.withCredentials&&"withCredentials"in t&&(t.withCredentials=!0);const r=e.headers||{};if(r instanceof Headers)r.forEach((a,l)=>t.setRequestHeader(l,a));else for(const[a,l]of Object.entries(r))Tn(l)||t.setRequestHeader(a,String(l));return t.send(o),t},W2=["text","picture","picture-card"];let ree=1;const mm=()=>Date.now()+ree++,K2=Ne({action:{type:String,default:"#"},headers:{type:Q(Object)},method:{type:String,default:"post"},data:{type:Q([Object,Function,Promise]),default:()=>en({})},multiple:Boolean,name:{type:String,default:"file"},drag:Boolean,withCredentials:Boolean,showFileList:{type:Boolean,default:!0},accept:{type:String,default:""},fileList:{type:Q(Array),default:()=>en([])},autoUpload:{type:Boolean,default:!0},listType:{type:String,values:W2,default:"text"},httpRequest:{type:Q(Function),default:oee},disabled:Boolean,limit:Number}),aee=Ne({...K2,beforeUpload:{type:Q(Function),default:Bt},beforeRemove:{type:Q(Function)},onRemove:{type:Q(Function),default:Bt},onChange:{type:Q(Function),default:Bt},onPreview:{type:Q(Function),default:Bt},onSuccess:{type:Q(Function),default:Bt},onProgress:{type:Q(Function),default:Bt},onError:{type:Q(Function),default:Bt},onExceed:{type:Q(Function),default:Bt},crossorigin:{type:Q(String)}}),lee=Ne({files:{type:Q(Array),default:()=>en([])},disabled:{type:Boolean,default:!1},handlePreview:{type:Q(Function),default:Bt},listType:{type:String,values:W2,default:"text"},crossorigin:{type:Q(String)}}),see={remove:e=>!!e},iee=["onKeydown"],uee=["src","crossorigin"],cee=["onClick"],dee=["title"],fee=["onClick"],pee=["onClick"],hee=Y({name:"ElUploadList"}),mee=Y({...hee,props:lee,emits:see,setup(e,{emit:t}){const n=e,{t:o}=$t(),r=Se("upload"),a=Se("icon"),l=Se("list"),s=to(),u=R(!1),c=k(()=>[r.b("list"),r.bm("list",n.listType),r.is("disabled",n.disabled)]),f=d=>{t("remove",d)};return(d,p)=>(T(),re(ku,{tag:"ul",class:N(i(c)),name:i(l).b()},{default:X(()=>[(T(!0),V(Ve,null,bt(d.files,m=>(T(),V("li",{key:m.uid||m.name,class:N([i(r).be("list","item"),i(r).is(m.status),{focusing:u.value}]),tabindex:"0",onKeydown:Pt(v=>!i(s)&&f(m),["delete"]),onFocus:p[0]||(p[0]=v=>u.value=!0),onBlur:p[1]||(p[1]=v=>u.value=!1),onClick:p[2]||(p[2]=v=>u.value=!1)},[ie(d.$slots,"default",{file:m},()=>[d.listType==="picture"||m.status!=="uploading"&&d.listType==="picture-card"?(T(),V("img",{key:0,class:N(i(r).be("list","item-thumbnail")),src:m.url,crossorigin:d.crossorigin,alt:""},null,10,uee)):te("v-if",!0),m.status==="uploading"||d.listType!=="picture-card"?(T(),V("div",{key:1,class:N(i(r).be("list","item-info"))},[F("a",{class:N(i(r).be("list","item-name")),onClick:Qe(v=>d.handlePreview(m),["prevent"])},[K(i(ze),{class:N(i(a).m("document"))},{default:X(()=>[K(i(_4))]),_:1},8,["class"]),F("span",{class:N(i(r).be("list","item-file-name")),title:m.name},le(m.name),11,dee)],10,cee),m.status==="uploading"?(T(),re(i(DE),{key:0,type:d.listType==="picture-card"?"circle":"line","stroke-width":d.listType==="picture-card"?6:2,percentage:Number(m.percentage),style:je(d.listType==="picture-card"?"":"margin-top: 0.5rem")},null,8,["type","stroke-width","percentage","style"])):te("v-if",!0)],2)):te("v-if",!0),F("label",{class:N(i(r).be("list","item-status-label"))},[d.listType==="text"?(T(),re(i(ze),{key:0,class:N([i(a).m("upload-success"),i(a).m("circle-check")])},{default:X(()=>[K(i(Nv))]),_:1},8,["class"])):["picture-card","picture"].includes(d.listType)?(T(),re(i(ze),{key:1,class:N([i(a).m("upload-success"),i(a).m("check")])},{default:X(()=>[K(i(Mu))]),_:1},8,["class"])):te("v-if",!0)],2),i(s)?te("v-if",!0):(T(),re(i(ze),{key:2,class:N(i(a).m("close")),onClick:v=>f(m)},{default:X(()=>[K(i(tr))]),_:2},1032,["class","onClick"])),te(" Due to close btn only appears when li gets focused disappears after li gets blurred, thus keyboard navigation can never reach close btn"),te(" This is a bug which needs to be fixed "),te(" TODO: Fix the incorrect navigation interaction "),i(s)?te("v-if",!0):(T(),V("i",{key:3,class:N(i(a).m("close-tip"))},le(i(o)("el.upload.deleteTip")),3)),d.listType==="picture-card"?(T(),V("span",{key:4,class:N(i(r).be("list","item-actions"))},[F("span",{class:N(i(r).be("list","item-preview")),onClick:v=>d.handlePreview(m)},[K(i(ze),{class:N(i(a).m("zoom-in"))},{default:X(()=>[K(i(ZC))]),_:1},8,["class"])],10,fee),i(s)?te("v-if",!0):(T(),V("span",{key:0,class:N(i(r).be("list","item-delete")),onClick:v=>f(m)},[K(i(ze),{class:N(i(a).m("delete"))},{default:X(()=>[K(i(YC))]),_:1},8,["class"])],10,pee))],2)):te("v-if",!0)])],42,iee))),128)),ie(d.$slots,"append")]),_:3},8,["class","name"]))}});var M1=Ie(mee,[["__file","upload-list.vue"]]);const vee=Ne({disabled:{type:Boolean,default:!1}}),gee={file:e=>Pe(e)},bee=["onDrop","onDragover"],U2="ElUploadDrag",yee=Y({name:U2}),wee=Y({...yee,props:vee,emits:gee,setup(e,{emit:t}){De(j2)||vn(U2,"usage: ");const o=Se("upload"),r=R(!1),a=to(),l=u=>{if(a.value)return;r.value=!1,u.stopPropagation();const c=Array.from(u.dataTransfer.files);t("file",c)},s=()=>{a.value||(r.value=!0)};return(u,c)=>(T(),V("div",{class:N([i(o).b("dragger"),i(o).is("dragover",r.value)]),onDrop:Qe(l,["prevent"]),onDragover:Qe(s,["prevent"]),onDragleave:c[0]||(c[0]=Qe(f=>r.value=!1,["prevent"]))},[ie(u.$slots,"default")],42,bee))}});var _ee=Ie(wee,[["__file","upload-dragger.vue"]]);const Cee=Ne({...K2,beforeUpload:{type:Q(Function),default:Bt},onRemove:{type:Q(Function),default:Bt},onStart:{type:Q(Function),default:Bt},onSuccess:{type:Q(Function),default:Bt},onProgress:{type:Q(Function),default:Bt},onError:{type:Q(Function),default:Bt},onExceed:{type:Q(Function),default:Bt}}),See=["onKeydown"],kee=["name","multiple","accept"],Eee=Y({name:"ElUploadContent",inheritAttrs:!1}),Tee=Y({...Eee,props:Cee,setup(e,{expose:t}){const n=e,o=Se("upload"),r=to(),a=Ut({}),l=Ut(),s=h=>{if(h.length===0)return;const{autoUpload:C,limit:g,fileList:y,multiple:_,onStart:b,onExceed:w}=n;if(g&&y.length+h.length>g){w(h,y);return}_||(h=h.slice(0,1));for(const S of h){const E=S;E.uid=mm(),b(E),C&&u(E)}},u=async h=>{if(l.value.value="",!n.beforeUpload)return f(h);let C,g={};try{const _=n.data,b=n.beforeUpload(h);g=nd(n.data)?pd(n.data):n.data,C=await b,nd(n.data)&&Wn(_,g)&&(g=pd(n.data))}catch{C=!1}if(C===!1){n.onRemove(h);return}let y=h;C instanceof Blob&&(C instanceof File?y=C:y=new File([C],h.name,{type:h.type})),f(Object.assign(y,{uid:h.uid}),g)},c=async(h,C)=>Xe(h)?h(C):h,f=async(h,C)=>{const{headers:g,data:y,method:_,withCredentials:b,name:w,action:S,onProgress:E,onSuccess:$,onError:O,httpRequest:A}=n;try{C=await c(C??y,h)}catch{n.onRemove(h);return}const{uid:M}=h,D={headers:g||{},withCredentials:b,file:h,data:C,method:_,filename:w,action:S,onProgress:j=>{E(j,h)},onSuccess:j=>{$(j,h),delete a.value[M]},onError:j=>{O(j,h),delete a.value[M]}},U=A(D);a.value[M]=U,U instanceof Promise&&U.then(D.onSuccess,D.onError)},d=h=>{const C=h.target.files;C&&s(Array.from(C))},p=()=>{r.value||(l.value.value="",l.value.click())},m=()=>{p()};return t({abort:h=>{Yx(a.value).filter(h?([g])=>String(h.uid)===g:()=>!0).forEach(([g,y])=>{y instanceof XMLHttpRequest&&y.abort(),delete a.value[g]})},upload:u}),(h,C)=>(T(),V("div",{class:N([i(o).b(),i(o).m(h.listType),i(o).is("drag",h.drag)]),tabindex:"0",onClick:p,onKeydown:Pt(Qe(m,["self"]),["enter","space"])},[h.drag?(T(),re(_ee,{key:0,disabled:i(r),onFile:s},{default:X(()=>[ie(h.$slots,"default")]),_:3},8,["disabled"])):ie(h.$slots,"default",{key:1}),F("input",{ref_key:"inputRef",ref:l,class:N(i(o).e("input")),name:h.name,multiple:h.multiple,accept:h.accept,type:"file",onChange:d,onClick:C[0]||(C[0]=Qe(()=>{},["stop"]))},null,42,kee)],42,See))}});var A1=Ie(Tee,[["__file","upload-content.vue"]]);const P1="ElUpload",R1=e=>{var t;(t=e.url)!=null&&t.startsWith("blob:")&&URL.revokeObjectURL(e.url)},$ee=(e,t)=>{const n=tC(e,"fileList",void 0,{passive:!0}),o=p=>n.value.find(m=>m.uid===p.uid);function r(p){var m;(m=t.value)==null||m.abort(p)}function a(p=["ready","uploading","success","fail"]){n.value=n.value.filter(m=>!p.includes(m.status))}const l=(p,m)=>{const v=o(m);v&&(console.error(p),v.status="fail",n.value.splice(n.value.indexOf(v),1),e.onError(p,v,n.value),e.onChange(v,n.value))},s=(p,m)=>{const v=o(m);v&&(e.onProgress(p,v,n.value),v.status="uploading",v.percentage=Math.round(p.percent))},u=(p,m)=>{const v=o(m);v&&(v.status="success",v.response=p,e.onSuccess(p,v,n.value),e.onChange(v,n.value))},c=p=>{Tn(p.uid)&&(p.uid=mm());const m={name:p.name,percentage:0,status:"ready",size:p.size,raw:p,uid:p.uid};if(e.listType==="picture-card"||e.listType==="picture")try{m.url=URL.createObjectURL(p)}catch(v){v.message,e.onError(v,m,n.value)}n.value=[...n.value,m],e.onChange(m,n.value)},f=async p=>{const m=p instanceof File?o(p):p;m||vn(P1,"file to be removed not found");const v=h=>{r(h);const C=n.value;C.splice(C.indexOf(h),1),e.onRemove(h,C),R1(h)};e.beforeRemove?await e.beforeRemove(m,n.value)!==!1&&v(m):v(m)};function d(){n.value.filter(({status:p})=>p==="ready").forEach(({raw:p})=>{var m;return p&&((m=t.value)==null?void 0:m.upload(p))})}return ve(()=>e.listType,p=>{p!=="picture-card"&&p!=="picture"||(n.value=n.value.map(m=>{const{raw:v,url:h}=m;if(!h&&v)try{m.url=URL.createObjectURL(v)}catch(C){e.onError(C,m,n.value)}return m}))}),ve(n,p=>{for(const m of p)m.uid||(m.uid=mm()),m.status||(m.status="success")},{immediate:!0,deep:!0}),{uploadFiles:n,abort:r,clearFiles:a,handleError:l,handleProgress:s,handleStart:c,handleSuccess:u,handleRemove:f,submit:d,revokeFileObjectURL:R1}},Oee=Y({name:"ElUpload"}),Nee=Y({...Oee,props:aee,setup(e,{expose:t}){const n=e,o=to(),r=Ut(),{abort:a,submit:l,clearFiles:s,uploadFiles:u,handleStart:c,handleError:f,handleRemove:d,handleSuccess:p,handleProgress:m,revokeFileObjectURL:v}=$ee(n,r),h=k(()=>n.listType==="picture-card"),C=k(()=>({...n,fileList:u.value,onStart:c,onProgress:m,onSuccess:p,onError:f,onRemove:d}));return zt(()=>{u.value.forEach(v)}),yt(j2,{accept:Lt(n,"accept")}),t({abort:a,submit:l,clearFiles:s,handleStart:c,handleRemove:d}),(g,y)=>(T(),V("div",null,[i(h)&&g.showFileList?(T(),re(M1,{key:0,disabled:i(o),"list-type":g.listType,files:i(u),crossorigin:g.crossorigin,"handle-preview":g.onPreview,onRemove:i(d)},Sr({append:X(()=>[K(A1,mt({ref_key:"uploadRef",ref:r},i(C)),{default:X(()=>[g.$slots.trigger?ie(g.$slots,"trigger",{key:0}):te("v-if",!0),!g.$slots.trigger&&g.$slots.default?ie(g.$slots,"default",{key:1}):te("v-if",!0)]),_:3},16)]),_:2},[g.$slots.file?{name:"default",fn:X(({file:_})=>[ie(g.$slots,"file",{file:_})])}:void 0]),1032,["disabled","list-type","files","crossorigin","handle-preview","onRemove"])):te("v-if",!0),!i(h)||i(h)&&!g.showFileList?(T(),re(A1,mt({key:1,ref_key:"uploadRef",ref:r},i(C)),{default:X(()=>[g.$slots.trigger?ie(g.$slots,"trigger",{key:0}):te("v-if",!0),!g.$slots.trigger&&g.$slots.default?ie(g.$slots,"default",{key:1}):te("v-if",!0)]),_:3},16)):te("v-if",!0),g.$slots.trigger?ie(g.$slots,"default",{key:2}):te("v-if",!0),ie(g.$slots,"tip"),!i(h)&&g.showFileList?(T(),re(M1,{key:3,disabled:i(o),"list-type":g.listType,files:i(u),crossorigin:g.crossorigin,"handle-preview":g.onPreview,onRemove:i(d)},Sr({_:2},[g.$slots.file?{name:"default",fn:X(({file:_})=>[ie(g.$slots,"file",{file:_})])}:void 0]),1032,["disabled","list-type","files","crossorigin","handle-preview","onRemove"])):te("v-if",!0)]))}});var Iee=Ie(Nee,[["__file","upload.vue"]]);const Mee=ut(Iee),Aee=Ne({zIndex:{type:Number,default:9},rotate:{type:Number,default:-22},width:Number,height:Number,image:String,content:{type:Q([String,Array]),default:"Element Plus"},font:{type:Q(Object)},gap:{type:Q(Array),default:()=>[100,100]},offset:{type:Q(Array)}});function Pee(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}function Ree(e){return Object.keys(e).map(t=>`${Pee(t)}: ${e[t]};`).join(" ")}function Lee(){return window.devicePixelRatio||1}const xee=(e,t)=>{let n=!1;return e.removedNodes.length&&t&&(n=Array.from(e.removedNodes).includes(t)),e.type==="attributes"&&e.target===t&&(n=!0),n},q2=3;function Pp(e,t,n=1){const o=document.createElement("canvas"),r=o.getContext("2d"),a=e*n,l=t*n;return o.setAttribute("width",`${a}px`),o.setAttribute("height",`${l}px`),r.save(),[r,o,a,l]}function Dee(){function e(t,n,o,r,a,l,s,u){const[c,f,d,p]=Pp(r,a,o);if(t instanceof HTMLImageElement)c.drawImage(t,0,0,d,p);else{const{color:G,fontSize:J,fontStyle:ee,fontWeight:fe,fontFamily:Te,textAlign:oe,textBaseline:ke}=l,ae=Number(J)*o;c.font=`${ee} normal ${fe} ${ae}px/${a}px ${Te}`,c.fillStyle=G,c.textAlign=oe,c.textBaseline=ke;const Oe=Array.isArray(t)?t:[t];Oe==null||Oe.forEach((we,ge)=>{c.fillText(we??"",d/2,ge*(ae+q2*o))})}const m=Math.PI/180*Number(n),v=Math.max(r,a),[h,C,g]=Pp(v,v,o);h.translate(g/2,g/2),h.rotate(m),d>0&&p>0&&h.drawImage(f,-d/2,-p/2);function y(G,J){const ee=G*Math.cos(m)-J*Math.sin(m),fe=G*Math.sin(m)+J*Math.cos(m);return[ee,fe]}let _=0,b=0,w=0,S=0;const E=d/2,$=p/2;[[0-E,0-$],[0+E,0-$],[0+E,0+$],[0-E,0+$]].forEach(([G,J])=>{const[ee,fe]=y(G,J);_=Math.min(_,ee),b=Math.max(b,ee),w=Math.min(w,fe),S=Math.max(S,fe)});const A=_+g/2,M=w+g/2,D=b-_,U=S-w,j=s*o,W=u*o,L=(D+j)*2,P=U+W,[x,I]=Pp(L,P);function H(G=0,J=0){x.drawImage(C,A,M,D,U,G,J,D,U)}return H(),H(D+j,-U/2-W/2),H(D+j,+U/2+W/2),[I.toDataURL(),L/o,P/o]}return e}const Fee=Y({name:"ElWatermark"}),Bee=Y({...Fee,props:Aee,setup(e){const t=e,n={position:"relative"},o=k(()=>{var A,M;return(M=(A=t.font)==null?void 0:A.color)!=null?M:"rgba(0,0,0,.15)"}),r=k(()=>{var A,M;return(M=(A=t.font)==null?void 0:A.fontSize)!=null?M:16}),a=k(()=>{var A,M;return(M=(A=t.font)==null?void 0:A.fontWeight)!=null?M:"normal"}),l=k(()=>{var A,M;return(M=(A=t.font)==null?void 0:A.fontStyle)!=null?M:"normal"}),s=k(()=>{var A,M;return(M=(A=t.font)==null?void 0:A.fontFamily)!=null?M:"sans-serif"}),u=k(()=>{var A,M;return(M=(A=t.font)==null?void 0:A.textAlign)!=null?M:"center"}),c=k(()=>{var A,M;return(M=(A=t.font)==null?void 0:A.textBaseline)!=null?M:"hanging"}),f=k(()=>t.gap[0]),d=k(()=>t.gap[1]),p=k(()=>f.value/2),m=k(()=>d.value/2),v=k(()=>{var A,M;return(M=(A=t.offset)==null?void 0:A[0])!=null?M:p.value}),h=k(()=>{var A,M;return(M=(A=t.offset)==null?void 0:A[1])!=null?M:m.value}),C=()=>{const A={zIndex:t.zIndex,position:"absolute",left:0,top:0,width:"100%",height:"100%",pointerEvents:"none",backgroundRepeat:"repeat"};let M=v.value-p.value,D=h.value-m.value;return M>0&&(A.left=`${M}px`,A.width=`calc(100% - ${M}px)`,M=0),D>0&&(A.top=`${D}px`,A.height=`calc(100% - ${D}px)`,D=0),A.backgroundPosition=`${M}px ${D}px`,A},g=Ut(null),y=Ut(),_=R(!1),b=()=>{y.value&&(y.value.remove(),y.value=void 0)},w=(A,M)=>{var D;g.value&&y.value&&(_.value=!0,y.value.setAttribute("style",Ree({...C(),backgroundImage:`url('${A}')`,backgroundSize:`${Math.floor(M)}px`})),(D=g.value)==null||D.append(y.value),setTimeout(()=>{_.value=!1}))},S=A=>{let M=120,D=64;const U=t.image,j=t.content,W=t.width,L=t.height;if(!U&&A.measureText){A.font=`${Number(r.value)}px ${s.value}`;const P=Array.isArray(j)?j:[j],x=P.map(I=>{const H=A.measureText(I);return[H.width,H.fontBoundingBoxAscent!==void 0?H.fontBoundingBoxAscent+H.fontBoundingBoxDescent:H.actualBoundingBoxAscent+H.actualBoundingBoxDescent]});M=Math.ceil(Math.max(...x.map(I=>I[0]))),D=Math.ceil(Math.max(...x.map(I=>I[1])))*P.length+(P.length-1)*q2}return[W??M,L??D]},E=Dee(),$=()=>{const M=document.createElement("canvas").getContext("2d"),D=t.image,U=t.content,j=t.rotate;if(M){y.value||(y.value=document.createElement("div"));const W=Lee(),[L,P]=S(M),x=I=>{const[H,G]=E(I||"",j,W,L,P,{color:o.value,fontSize:r.value,fontStyle:l.value,fontWeight:a.value,fontFamily:s.value,textAlign:u.value,textBaseline:c.value},f.value,d.value);w(H,G)};if(D){const I=new Image;I.onload=()=>{x(I)},I.onerror=()=>{x(U)},I.crossOrigin="anonymous",I.referrerPolicy="no-referrer",I.src=D}else x(U)}};return at(()=>{$()}),ve(()=>t,()=>{$()},{deep:!0,flush:"post"}),zt(()=>{b()}),eC(g,A=>{_.value||A.forEach(M=>{xee(M,y.value)&&(b(),$())})},{attributes:!0,subtree:!0,childList:!0}),(A,M)=>(T(),V("div",{ref_key:"containerRef",ref:g,style:je([n])},[ie(A.$slots,"default")],4))}});var Vee=Ie(Bee,[["__file","watermark.vue"]]);const Hee=ut(Vee),zee=Ne({zIndex:{type:Number,default:1001},visible:Boolean,fill:{type:String,default:"rgba(0,0,0,0.5)"},pos:{type:Q(Object)},targetAreaClickable:{type:Boolean,default:!0}}),jee=(e,t,n,o,r)=>{const a=R(null),l=()=>{let d;return nt(e.value)?d=document.querySelector(e.value):Xe(e.value)?d=e.value():d=e.value,d},s=()=>{const d=l();if(!d||!t.value){a.value=null;return}!Wee(d)&&t.value&&d.scrollIntoView(r.value);const{left:p,top:m,width:v,height:h}=d.getBoundingClientRect();a.value={left:p,top:m,width:v,height:h,radius:0}};at(()=>{ve([t,e],()=>{s()},{immediate:!0}),window.addEventListener("resize",s)}),zt(()=>{window.removeEventListener("resize",s)});const u=d=>{var p;return(p=Pe(n.value.offset)?n.value.offset[d]:n.value.offset)!=null?p:6},c=k(()=>{var d;if(!a.value)return a.value;const p=u(0),m=u(1),v=((d=n.value)==null?void 0:d.radius)||2;return{left:a.value.left-p,top:a.value.top-m,width:a.value.width+p*2,height:a.value.height+m*2,radius:v}}),f=k(()=>{const d=l();return!o.value||!d||!window.DOMRect?d||void 0:{getBoundingClientRect(){var p,m,v,h;return window.DOMRect.fromRect({width:((p=c.value)==null?void 0:p.width)||0,height:((m=c.value)==null?void 0:m.height)||0,x:((v=c.value)==null?void 0:v.left)||0,y:((h=c.value)==null?void 0:h.top)||0})}}});return{mergedPosInfo:c,triggerTarget:f}},Mf=Symbol("ElTour");function Wee(e){const t=window.innerWidth||document.documentElement.clientWidth,n=window.innerHeight||document.documentElement.clientHeight,{top:o,right:r,bottom:a,left:l}=e.getBoundingClientRect();return o>=0&&l>=0&&r<=t&&a<=n}const Kee=(e,t,n,o,r,a,l,s)=>{const u=R(),c=R(),f=R({}),d={x:u,y:c,placement:o,strategy:r,middlewareData:f},p=k(()=>{const g=[AS(i(a)),m8(),h8(),Uee()];return i(s)&&i(n)&&g.push(PS({element:i(n)})),g}),m=async()=>{if(!Ct)return;const g=i(e),y=i(t);if(!g||!y)return;const _=await RS(g,y,{placement:i(o),strategy:i(r),middleware:i(p)});Ss(d).forEach(b=>{d[b].value=_[b]})},v=k(()=>{if(!i(e))return{position:"fixed",top:"50%",left:"50%",transform:"translate3d(-50%, -50%, 0)",maxWidth:"100vw",zIndex:i(l)};const{overflow:g}=i(f);return{position:i(r),zIndex:i(l),top:i(c)!=null?`${i(c)}px`:"",left:i(u)!=null?`${i(u)}px`:"",maxWidth:g!=null&&g.maxWidth?`${g==null?void 0:g.maxWidth}px`:""}}),h=k(()=>{if(!i(s))return{};const{arrow:g}=i(f);return{left:(g==null?void 0:g.x)!=null?`${g==null?void 0:g.x}px`:"",top:(g==null?void 0:g.y)!=null?`${g==null?void 0:g.y}px`:""}});let C;return at(()=>{const g=i(e),y=i(t);g&&y&&(C=f8(g,y,m)),Mn(()=>{m()})}),zt(()=>{C&&C()}),{update:m,contentStyle:v,arrowStyle:h}},Uee=()=>({name:"overflow",async fn(e){const t=await p8(e);let n=0;return t.left>0&&(n=t.left),t.right>0&&(n=t.right),{data:{maxWidth:e.rects.floating.width-n}}}}),qee={style:{width:"100%",height:"100%"}},Yee=["d"],Gee=Y({name:"ElTourMask",inheritAttrs:!1}),Xee=Y({...Gee,props:zee,setup(e){const t=e,{ns:n}=De(Mf),o=k(()=>{var s,u;return(u=(s=t.pos)==null?void 0:s.radius)!=null?u:2}),r=k(()=>{const s=o.value,u=`a${s},${s} 0 0 1`;return{topRight:`${u} ${s},${s}`,bottomRight:`${u} ${-s},${s}`,bottomLeft:`${u} ${-s},${-s}`,topLeft:`${u} ${s},${-s}`}}),a=k(()=>{const s=window.innerWidth,u=window.innerHeight,c=r.value,f=`M${s},0 L0,0 L0,${u} L${s},${u} L${s},0 Z`,d=o.value;return t.pos?`${f} M${t.pos.left+d},${t.pos.top} h${t.pos.width-d*2} ${c.topRight} v${t.pos.height-d*2} ${c.bottomRight} h${-t.pos.width+d*2} ${c.bottomLeft} v${-t.pos.height+d*2} ${c.topLeft} z`:f}),l=k(()=>({fill:t.fill,pointerEvents:"auto",cursor:"auto"}));return Fv(Lt(t,"visible"),{ns:n}),(s,u)=>s.visible?(T(),V("div",mt({key:0,class:i(n).e("mask"),style:{position:"fixed",left:0,right:0,top:0,bottom:0,zIndex:s.zIndex,pointerEvents:s.pos&&s.targetAreaClickable?"none":"auto"}},s.$attrs),[(T(),V("svg",qee,[F("path",{class:N(i(n).e("hollow")),style:je(i(l)),d:i(a)},null,14,Yee)]))],16)):te("v-if",!0)}});var Jee=Ie(Xee,[["__file","mask.vue"]]);const Zee=["absolute","fixed"],Qee=["top-start","top-end","top","bottom-start","bottom-end","bottom","left-start","left-end","left","right-start","right-end","right"],zg=Ne({placement:{type:Q(String),values:Qee,default:"bottom"},reference:{type:Q(Object),default:null},strategy:{type:Q(String),values:Zee,default:"absolute"},offset:{type:Number,default:10},showArrow:Boolean,zIndex:{type:Number,default:2001}}),ete={close:()=>!0},tte=["data-side"],nte=Y({name:"ElTourContent"}),ote=Y({...nte,props:zg,emits:ete,setup(e,{emit:t}){const n=e,o=R(n.placement),r=R(n.strategy),a=R(null),l=R(null);ve(()=>n.placement,()=>{o.value=n.placement});const{contentStyle:s,arrowStyle:u}=Kee(Lt(n,"reference"),a,l,o,r,Lt(n,"offset"),Lt(n,"zIndex"),Lt(n,"showArrow")),c=k(()=>o.value.split("-")[0]),{ns:f}=De(Mf),d=()=>{t("close")},p=m=>{m.detail.focusReason==="pointer"&&m.preventDefault()};return(m,v)=>(T(),V("div",{ref_key:"contentRef",ref:a,style:je(i(s)),class:N(i(f).e("content")),"data-side":i(c),tabindex:"-1"},[K(i(Fu),{loop:"",trapped:"","focus-start-el":"container","focus-trap-el":a.value||void 0,onReleaseRequested:d,onFocusoutPrevented:p},{default:X(()=>[ie(m.$slots,"default")]),_:3},8,["focus-trap-el"]),m.showArrow?(T(),V("span",{key:0,ref_key:"arrowRef",ref:l,style:je(i(u)),class:N(i(f).e("arrow"))},null,6)):te("v-if",!0)],14,tte))}});var rte=Ie(ote,[["__file","content.vue"]]),ate=Y({name:"ElTourSteps",props:{current:{type:Number,default:0}},emits:["update-total"],setup(e,{slots:t,emit:n}){let o=0;return()=>{var r,a;const l=(r=t.default)==null?void 0:r.call(t),s=[];let u=0;function c(f){Pe(f)&&f.forEach(d=>{var p;((p=(d==null?void 0:d.type)||{})==null?void 0:p.name)==="ElTourStep"&&(s.push(d),u+=1)})}return l.length&&c(Ca((a=l[0])==null?void 0:a.children)),o!==u&&(o=u,n("update-total",u)),s.length?s[e.current]:null}}});const lte=Ne({modelValue:Boolean,current:{type:Number,default:0},showArrow:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},closeIcon:{type:Dt},placement:zg.placement,contentStyle:{type:Q([Object])},mask:{type:Q([Boolean,Object]),default:!0},gap:{type:Q(Object),default:()=>({offset:6,radius:2})},zIndex:{type:Number},scrollIntoViewOptions:{type:Q([Boolean,Object]),default:()=>({block:"center"})},type:{type:Q(String)},appendTo:{type:Q([String,Object]),default:"body"},closeOnPressEscape:{type:Boolean,default:!0},targetAreaClickable:{type:Boolean,default:!0}}),ste={[ft]:e=>dn(e),"update:current":e=>Je(e),close:e=>Je(e),finish:()=>!0,change:e=>Je(e)},ite=Y({name:"ElTour"}),ute=Y({...ite,props:lte,emits:ste,setup(e,{emit:t}){const n=e,o=Se("tour"),r=R(0),a=R(),l=tC(n,"current",t,{passive:!0}),s=k(()=>{var O;return(O=a.value)==null?void 0:O.target}),u=k(()=>[o.b(),C.value==="primary"?o.m("primary"):""]),c=k(()=>{var O;return((O=a.value)==null?void 0:O.placement)||n.placement}),f=k(()=>{var O,A;return(A=(O=a.value)==null?void 0:O.contentStyle)!=null?A:n.contentStyle}),d=k(()=>{var O,A;return(A=(O=a.value)==null?void 0:O.mask)!=null?A:n.mask}),p=k(()=>!!d.value&&n.modelValue),m=k(()=>dn(d.value)?void 0:d.value),v=k(()=>{var O,A;return!!s.value&&((A=(O=a.value)==null?void 0:O.showArrow)!=null?A:n.showArrow)}),h=k(()=>{var O,A;return(A=(O=a.value)==null?void 0:O.scrollIntoViewOptions)!=null?A:n.scrollIntoViewOptions}),C=k(()=>{var O,A;return(A=(O=a.value)==null?void 0:O.type)!=null?A:n.type}),{nextZIndex:g}=Zs(),y=g(),_=k(()=>{var O;return(O=n.zIndex)!=null?O:y}),{mergedPosInfo:b,triggerTarget:w}=jee(s,Lt(n,"modelValue"),Lt(n,"gap"),d,h);ve(()=>n.modelValue,O=>{O||(l.value=0)});const S=()=>{n.closeOnPressEscape&&(t("update:modelValue",!1),t("close",l.value))},E=O=>{r.value=O},$=Sn();return yt(Mf,{currentStep:a,current:l,total:r,showClose:Lt(n,"showClose"),closeIcon:Lt(n,"closeIcon"),mergedType:C,ns:o,slots:$,updateModelValue(O){t("update:modelValue",O)},onClose(){t("close",l.value)},onFinish(){t("finish")},onChange(){t("change",l.value)}}),(O,A)=>{var M,D;return T(),V(Ve,null,[(T(),re(Pl,{to:O.appendTo},[F("div",mt({class:i(u)},O.$attrs),[K(Jee,{visible:i(p),fill:(M=i(m))==null?void 0:M.color,style:je((D=i(m))==null?void 0:D.style),pos:i(b),"z-index":i(_),"target-area-clickable":O.targetAreaClickable},null,8,["visible","fill","style","pos","z-index","target-area-clickable"]),O.modelValue?(T(),re(rte,{key:i(l),reference:i(w),placement:i(c),"show-arrow":i(v),"z-index":i(_),style:je(i(f)),onClose:S},{default:X(()=>[K(i(ate),{current:i(l),onUpdateTotal:E},{default:X(()=>[ie(O.$slots,"default")]),_:3},8,["current"])]),_:3},8,["reference","placement","show-arrow","z-index","style"])):te("v-if",!0)],16)],8,["to"])),te(" just for IDE "),te("v-if",!0)],64)}}});var cte=Ie(ute,[["__file","tour.vue"]]);const dte=Ne({target:{type:Q([String,Object,Function])},title:String,description:String,showClose:{type:Boolean,default:void 0},closeIcon:{type:Dt},showArrow:{type:Boolean,default:void 0},placement:zg.placement,mask:{type:Q([Boolean,Object]),default:void 0},contentStyle:{type:Q([Object])},prevButtonProps:{type:Q(Object)},nextButtonProps:{type:Q(Object)},scrollIntoViewOptions:{type:Q([Boolean,Object]),default:void 0},type:{type:Q(String)}}),fte={close:()=>!0},pte=Y({name:"ElTourStep"}),hte=Y({...pte,props:dte,emits:fte,setup(e,{emit:t}){const n=e,{Close:o}=Av,{t:r}=$t(),{currentStep:a,current:l,total:s,showClose:u,closeIcon:c,mergedType:f,ns:d,slots:p,updateModelValue:m,onClose:v,onFinish:h,onChange:C}=De(Mf);ve(n,$=>{a.value=$},{immediate:!0});const g=k(()=>{var $;return($=n.showClose)!=null?$:u.value}),y=k(()=>{var $,O;return(O=($=n.closeIcon)!=null?$:c.value)!=null?O:o}),_=$=>{if($)return Fx($,["children","onClick"])},b=()=>{var $,O;l.value-=1,($=n.prevButtonProps)!=null&&$.onClick&&((O=n.prevButtonProps)==null||O.onClick()),C()},w=()=>{var $;l.value>=s.value-1?S():l.value+=1,($=n.nextButtonProps)!=null&&$.onClick&&n.nextButtonProps.onClick(),C()},S=()=>{E(),h()},E=()=>{m(!1),v(),t("close")};return($,O)=>(T(),V(Ve,null,[i(g)?(T(),V("button",{key:0,"aria-label":"Close",class:N(i(d).e("closebtn")),type:"button",onClick:E},[K(i(ze),{class:N(i(d).e("close"))},{default:X(()=>[(T(),re(pt(i(y))))]),_:1},8,["class"])],2)):te("v-if",!0),F("header",{class:N([i(d).e("header"),{"show-close":i(u)}])},[ie($.$slots,"header",{},()=>[F("span",{role:"heading",class:N(i(d).e("title"))},le($.title),3)])],2),F("div",{class:N(i(d).e("body"))},[ie($.$slots,"default",{},()=>[F("span",null,le($.description),1)])],2),F("footer",{class:N(i(d).e("footer"))},[F("div",{class:N(i(d).b("indicators"))},[i(p).indicators?(T(),re(pt(i(p).indicators),{key:0,current:i(l),total:i(s)},null,8,["current","total"])):(T(!0),V(Ve,{key:1},bt(i(s),(A,M)=>(T(),V("span",{key:A,class:N([i(d).b("indicator"),M===i(l)?"is-active":""])},null,2))),128))],2),F("div",{class:N(i(d).b("buttons"))},[i(l)>0?(T(),re(i($n),mt({key:0,size:"small",type:i(f)},_($.prevButtonProps),{onClick:b}),{default:X(()=>{var A,M;return[Ge(le((M=(A=$.prevButtonProps)==null?void 0:A.children)!=null?M:i(r)("el.tour.previous")),1)]}),_:1},16,["type"])):te("v-if",!0),i(l)<=i(s)-1?(T(),re(i($n),mt({key:1,size:"small",type:i(f)==="primary"?"default":"primary"},_($.nextButtonProps),{onClick:w}),{default:X(()=>{var A,M;return[Ge(le((M=(A=$.nextButtonProps)==null?void 0:A.children)!=null?M:i(l)===i(s)-1?i(r)("el.tour.finish"):i(r)("el.tour.next")),1)]}),_:1},16,["type"])):te("v-if",!0)],2)],2)],64))}});var Y2=Ie(hte,[["__file","step.vue"]]);const mte=ut(cte,{TourStep:Y2}),vte=tn(Y2),gte=Ne({container:{type:Q([String,Object])},offset:{type:Number,default:0},bound:{type:Number,default:15},duration:{type:Number,default:300},marker:{type:Boolean,default:!0},type:{type:Q(String),default:"default"},direction:{type:Q(String),default:"vertical"}}),bte={change:e=>nt(e),click:(e,t)=>e instanceof MouseEvent&&(nt(t)||pn(t))},G2=Symbol("anchor"),yte=Y({name:"ElAnchor"}),wte=Y({...yte,props:gte,emits:bte,setup(e,{expose:t,emit:n}){const o=e,r=R(""),a=R(null),l=R(null),s=R(),u={};let c=!1,f=0;const d=Se("anchor"),p=k(()=>[d.b(),o.type==="underline"?d.m("underline"):"",d.m(o.direction)]),m=$=>{u[$.href]=$.el},v=$=>{delete u[$]},h=$=>{r.value!==$&&(r.value=$,n("change",$))};let C=null;const g=$=>{if(!s.value)return;const O=ic($);if(!O)return;C&&C(),c=!0;const A=jy(O,s.value),M=ch(O,A),D=A.scrollHeight-A.clientHeight,U=Math.min(M-o.offset,D);C=Jx(s.value,f,U,o.duration,()=>{setTimeout(()=>{c=!1},20)})},y=$=>{$&&(h($),g($))},_=($,O)=>{n("click",$,O),y(O)},b=h3(()=>{s.value&&(f=Wy(s.value));const $=w();c||pn($)||h($)}),w=()=>{if(!s.value)return;const $=Wy(s.value),O=[];for(const A of Object.keys(u)){const M=ic(A);if(!M)continue;const D=jy(M,s.value),U=ch(M,D);O.push({top:U-o.offset-o.bound,href:A})}O.sort((A,M)=>A.top-M.top);for(let A=0;A$))return M.href}},S=()=>{const $=ic(o.container);!$||ff($)?s.value=window:s.value=$};qt(s,"scroll",b);const E=k(()=>{if(!a.value||!l.value||!r.value)return{};const $=u[r.value];if(!$)return{};const O=a.value.getBoundingClientRect(),A=l.value.getBoundingClientRect(),M=$.getBoundingClientRect();return o.direction==="horizontal"?{left:`${M.left-O.left}px`,width:`${M.width}px`,opacity:1}:{top:`${M.top-O.top+(M.height-A.height)/2}px`,opacity:1}});return at(()=>{S();const $=decodeURIComponent(window.location.hash);ic($)?y($):b()}),ve(()=>o.container,()=>{S()}),yt(G2,{ns:d,direction:o.direction,currentAnchor:r,addLink:m,removeLink:v,handleClick:_}),t({scrollTo:y}),($,O)=>(T(),V("div",{ref_key:"anchorRef",ref:a,class:N(i(p))},[$.marker?(T(),V("div",{key:0,ref_key:"markerRef",ref:l,class:N(i(d).e("marker")),style:je(i(E))},null,6)):te("v-if",!0),F("div",{class:N(i(d).e("list"))},[ie($.$slots,"default")],2)],2))}});var _te=Ie(wte,[["__file","anchor.vue"]]);const Cte=Ne({title:String,href:String}),Ste=["href"],kte=Y({name:"ElAnchorLink"}),Ete=Y({...kte,props:Cte,setup(e){const t=e,n=R(null),{ns:o,direction:r,currentAnchor:a,addLink:l,removeLink:s,handleClick:u}=De(G2),c=k(()=>[o.e("link"),o.is("active",a.value===t.href)]),f=d=>{u(d,t.href)};return ve(()=>t.href,(d,p)=>{We(()=>{p&&s(p),d&&l({href:d,el:n.value})})}),at(()=>{const{href:d}=t;d&&l({href:d,el:n.value})}),zt(()=>{const{href:d}=t;d&&s(d)}),(d,p)=>(T(),V("div",{class:N(i(o).e("item"))},[F("a",{ref_key:"linkRef",ref:n,class:N(i(c)),href:d.href,onClick:f},[ie(d.$slots,"default",{},()=>[Ge(le(d.title),1)])],10,Ste),d.$slots["sub-link"]&&i(r)==="vertical"?(T(),V("div",{key:0,class:N(i(o).e("list"))},[ie(d.$slots,"sub-link")],2)):te("v-if",!0)],2))}});var X2=Ie(Ete,[["__file","anchor-link.vue"]]);const Tte=ut(_te,{AnchorLink:X2}),$te=tn(X2),Ote=Ne({options:{type:Q(Array),default:()=>[]},modelValue:{type:[String,Number,Boolean],default:void 0},block:Boolean,size:gn,disabled:Boolean,validateEvent:{type:Boolean,default:!0},id:String,name:String,...An(["ariaLabel"])}),Nte={[ft]:e=>nt(e)||Je(e)||dn(e),[Yt]:e=>nt(e)||Je(e)||dn(e)},Ite=["id","aria-label","aria-labelledby"],Mte=["name","disabled","checked","onChange"],Ate=Y({name:"ElSegmented"}),Pte=Y({...Ate,props:Ote,emits:Nte,setup(e,{emit:t}){const n=e,o=Se("segmented"),r=xn(),a=hn(),l=to(),{formItem:s}=qn(),{inputId:u,isLabeledByFormItem:c}=cr(n,{formItemContext:s}),f=R(null),d=nM(),p=Et({isInit:!1,width:0,translateX:0,disabled:!1,focusVisible:!1}),m=O=>{const A=v(O);t(ft,A),t(Yt,A)},v=O=>dt(O)?O.value:O,h=O=>dt(O)?O.label:O,C=O=>!!(l.value||dt(O)&&O.disabled),g=O=>n.modelValue===v(O),y=O=>n.options.find(A=>v(A)===O),_=O=>[o.e("item"),o.is("selected",g(O)),o.is("disabled",C(O))],b=()=>{if(!f.value)return;const O=f.value.querySelector(".is-selected"),A=f.value.querySelector(".is-selected input");if(!O||!A){p.width=0,p.translateX=0,p.disabled=!1,p.focusVisible=!1;return}const M=O.getBoundingClientRect();p.isInit=!0,p.width=M.width,p.translateX=O.offsetLeft,p.disabled=C(y(n.modelValue));try{p.focusVisible=A.matches(":focus-visible")}catch{}},w=k(()=>[o.b(),o.m(a.value),o.is("block",n.block)]),S=k(()=>({width:`${p.width}px`,transform:`translateX(${p.translateX}px)`,display:p.isInit?"block":"none"})),E=k(()=>[o.e("item-selected"),o.is("disabled",p.disabled),o.is("focus-visible",p.focusVisible)]),$=k(()=>n.name||r.value);return Qt(f,b),ve(d,b),ve(()=>n.modelValue,()=>{var O;b(),n.validateEvent&&((O=s==null?void 0:s.validate)==null||O.call(s,"change").catch(A=>void 0))},{flush:"post"}),(O,A)=>(T(),V("div",{id:i(u),ref_key:"segmentedRef",ref:f,class:N(i(w)),role:"radiogroup","aria-label":i(c)?void 0:O.ariaLabel||"segmented","aria-labelledby":i(c)?i(s).labelId:void 0},[F("div",{class:N(i(o).e("group"))},[F("div",{style:je(i(S)),class:N(i(E))},null,6),(T(!0),V(Ve,null,bt(O.options,(M,D)=>(T(),V("label",{key:D,class:N(_(M))},[F("input",{class:N(i(o).e("item-input")),type:"radio",name:i($),disabled:C(M),checked:g(M),onChange:U=>m(M)},null,42,Mte),F("div",{class:N(i(o).e("item-label"))},[ie(O.$slots,"default",{item:M},()=>[Ge(le(h(M)),1)])],2)],2))),128))],2)],10,Ite))}});var Rte=Ie(Pte,[["__file","segmented.vue"]]);const Lte=ut(Rte);var xte=[L8,U8,gB,YJ,kB,MB,tk,KB,UB,$n,ik,f5,g5,D5,F5,XH,xH,nz,Ho,nH,xk,hz,Az,Pz,kz,uj,$8,_j,Cj,Sj,kj,Ej,KW,nK,oK,yK,vE,PK,k9,E9,T9,EE,zS,BF,ze,bU,TE,zn,$E,AU,ZU,QU,e7,t7,i7,mq,_q,Iq,ZS,DE,jk,bH,gH,qq,Zq,uz,ea,Ol,Cd,H7,FY,UY,qY,SG,OG,n2,BG,YG,GG,lX,uJ,cJ,qJ,uZ,cZ,su,mZ,WV,_Z,TZ,$Z,Un,QZ,hQ,OQ,LQ,QQ,Mee,Hee,mte,vte,Tte,$te,Lte];const No="ElInfiniteScroll",Dte=50,Fte=200,Bte=0,Vte={delay:{type:Number,default:Fte},distance:{type:Number,default:Bte},disabled:{type:Boolean,default:!1},immediate:{type:Boolean,default:!0}},jg=(e,t)=>Object.entries(Vte).reduce((n,[o,r])=>{var a,l;const{type:s,default:u}=r,c=e.getAttribute(`infinite-scroll-${o}`);let f=(l=(a=t[c])!=null?a:c)!=null?l:u;return f=f==="false"?!1:f,f=s(f),n[o]=Number.isNaN(f)?u:f,n},{}),J2=e=>{const{observer:t}=e[No];t&&(t.disconnect(),delete e[No].observer)},Hte=(e,t)=>{const{container:n,containerEl:o,instance:r,observer:a,lastScrollTop:l}=e[No],{disabled:s,distance:u}=jg(e,r),{clientHeight:c,scrollHeight:f,scrollTop:d}=o,p=d-l;if(e[No].lastScrollTop=d,a||s||p<0)return;let m=!1;if(n===e)m=f-(c+d)<=u;else{const{clientTop:v,scrollHeight:h}=e,C=ch(e,o);m=d+c>=C+v+h-u}m&&t.call(r)};function Rp(e,t){const{containerEl:n,instance:o}=e[No],{disabled:r}=jg(e,o);r||n.clientHeight===0||(n.scrollHeight<=n.clientHeight?t.call(o):J2(e))}const zte={async mounted(e,t){const{instance:n,value:o}=t;Xe(o)||vn(No,"'v-infinite-scroll' binding value must be a function"),await We();const{delay:r,immediate:a}=jg(e,n),l=Ov(e,!0),s=l===window?document.documentElement:l,u=il(Hte.bind(null,e,o),r);if(l){if(e[No]={instance:n,container:l,containerEl:s,delay:r,cb:o,onScroll:u,lastScrollTop:s.scrollTop},a){const c=new MutationObserver(il(Rp.bind(null,e,o),Dte));e[No].observer=c,c.observe(e,{childList:!0,subtree:!0}),Rp(e,o)}l.addEventListener("scroll",u)}},unmounted(e){if(!e[No])return;const{container:t,onScroll:n}=e[No];t==null||t.removeEventListener("scroll",n),J2(e)},async updated(e){if(!e[No])await We();else{const{containerEl:t,cb:n,observer:o}=e[No];t.clientHeight&&o&&Rp(e,n)}}},vm=zte;vm.install=e=>{e.directive("InfiniteScroll",vm)};const jte=vm;function Wte(e){let t;const n=R(!1),o=Et({...e,originalPosition:"",originalOverflow:"",visible:!1});function r(p){o.text=p}function a(){const p=o.parent,m=d.ns;if(!p.vLoadingAddClassList){let v=p.getAttribute("loading-number");v=Number.parseInt(v)-1,v?p.setAttribute("loading-number",v.toString()):(Kn(p,m.bm("parent","relative")),p.removeAttribute("loading-number")),Kn(p,m.bm("parent","hidden"))}l(),f.unmount()}function l(){var p,m;(m=(p=d.$el)==null?void 0:p.parentNode)==null||m.removeChild(d.$el)}function s(){var p;e.beforeClose&&!e.beforeClose()||(n.value=!0,clearTimeout(t),t=window.setTimeout(u,400),o.visible=!1,(p=e.closed)==null||p.call(e))}function u(){if(!n.value)return;const p=o.parent;n.value=!1,p.vLoadingAddClassList=void 0,a()}const c=Y({name:"ElLoading",setup(p,{expose:m}){const{ns:v,zIndex:h}=Cf("loading");return m({ns:v,zIndex:h}),()=>{const C=o.spinner||o.svg,g=Ke("svg",{class:"circular",viewBox:o.svgViewBox?o.svgViewBox:"0 0 50 50",...C?{innerHTML:C}:{}},[Ke("circle",{class:"path",cx:"25",cy:"25",r:"20",fill:"none"})]),y=o.text?Ke("p",{class:v.b("text")},[o.text]):void 0;return Ke(fn,{name:v.b("fade"),onAfterLeave:u},{default:X(()=>[tt(K("div",{style:{backgroundColor:o.background||""},class:[v.b("mask"),o.customClass,o.fullscreen?"is-fullscreen":""]},[Ke("div",{class:v.b("spinner")},[g,y])]),[[kt,o.visible]])])})}}}),f=iv(c),d=f.mount(document.createElement("div"));return{...Cn(o),setText:r,removeElLoadingChild:l,close:s,handleAfterLeave:u,vm:d,get $el(){return d.$el}}}let Sc;const gm=function(e={}){if(!Ct)return;const t=Kte(e);if(t.fullscreen&&Sc)return Sc;const n=Wte({...t,closed:()=>{var r;(r=t.closed)==null||r.call(t),t.fullscreen&&(Sc=void 0)}});Ute(t,t.parent,n),L1(t,t.parent,n),t.parent.vLoadingAddClassList=()=>L1(t,t.parent,n);let o=t.parent.getAttribute("loading-number");return o?o=`${Number.parseInt(o)+1}`:o="1",t.parent.setAttribute("loading-number",o),t.parent.appendChild(n.$el),We(()=>n.visible.value=t.visible),t.fullscreen&&(Sc=n),n},Kte=e=>{var t,n,o,r;let a;return nt(e.target)?a=(t=document.querySelector(e.target))!=null?t:document.body:a=e.target||document.body,{parent:a===document.body||e.body?document.body:a,background:e.background||"",svg:e.svg||"",svgViewBox:e.svgViewBox||"",spinner:e.spinner||!1,text:e.text||"",fullscreen:a===document.body&&((n=e.fullscreen)!=null?n:!0),lock:(o=e.lock)!=null?o:!1,customClass:e.customClass||"",visible:(r=e.visible)!=null?r:!0,beforeClose:e.beforeClose,closed:e.closed,target:a}},Ute=async(e,t,n)=>{const{nextZIndex:o}=n.vm.zIndex||n.vm._.exposed.zIndex,r={};if(e.fullscreen)n.originalPosition.value=ga(document.body,"position"),n.originalOverflow.value=ga(document.body,"overflow"),r.zIndex=o();else if(e.parent===document.body){n.originalPosition.value=ga(document.body,"position"),await We();for(const a of["top","left"]){const l=a==="top"?"scrollTop":"scrollLeft";r[a]=`${e.target.getBoundingClientRect()[a]+document.body[l]+document.documentElement[l]-Number.parseInt(ga(document.body,`margin-${a}`),10)}px`}for(const a of["height","width"])r[a]=`${e.target.getBoundingClientRect()[a]}px`}else n.originalPosition.value=ga(t,"position");for(const[a,l]of Object.entries(r))n.$el.style[a]=l},L1=(e,t,n)=>{const o=n.vm.ns||n.vm._.exposed.ns;["absolute","fixed","sticky"].includes(n.originalPosition.value)?Kn(t,o.bm("parent","relative")):Mo(t,o.bm("parent","relative")),e.fullscreen&&e.lock?Mo(t,o.bm("parent","hidden")):Kn(t,o.bm("parent","hidden"))},Zc=Symbol("ElLoading"),x1=(e,t)=>{var n,o,r,a;const l=t.instance,s=p=>dt(t.value)?t.value[p]:void 0,u=p=>{const m=nt(p)&&(l==null?void 0:l[p])||p;return m&&R(m)},c=p=>u(s(p)||e.getAttribute(`element-loading-${mo(p)}`)),f=(n=s("fullscreen"))!=null?n:t.modifiers.fullscreen,d={text:c("text"),svg:c("svg"),svgViewBox:c("svgViewBox"),spinner:c("spinner"),background:c("background"),customClass:c("customClass"),fullscreen:f,target:(o=s("target"))!=null?o:f?void 0:e,body:(r=s("body"))!=null?r:t.modifiers.body,lock:(a=s("lock"))!=null?a:t.modifiers.lock};e[Zc]={options:d,instance:gm(d)}},qte=(e,t)=>{for(const n of Object.keys(t))xt(t[n])&&(t[n].value=e[n])},D1={mounted(e,t){t.value&&x1(e,t)},updated(e,t){const n=e[Zc];t.oldValue!==t.value&&(t.value&&!t.oldValue?x1(e,t):t.value&&t.oldValue?dt(t.value)&&qte(t.value,n.options):n==null||n.instance.close())},unmounted(e){var t;(t=e[Zc])==null||t.instance.close(),e[Zc]=null}},Yte={install(e){e.directive("loading",D1),e.config.globalProperties.$loading=gm},directive:D1,service:gm},Z2=["success","info","warning","error"],Bn=en({customClass:"",center:!1,dangerouslyUseHTMLString:!1,duration:3e3,icon:void 0,id:"",message:"",onClose:void 0,showClose:!1,type:"info",plain:!1,offset:16,zIndex:0,grouping:!1,repeatNum:1,appendTo:Ct?document.body:void 0}),Gte=Ne({customClass:{type:String,default:Bn.customClass},center:{type:Boolean,default:Bn.center},dangerouslyUseHTMLString:{type:Boolean,default:Bn.dangerouslyUseHTMLString},duration:{type:Number,default:Bn.duration},icon:{type:Dt,default:Bn.icon},id:{type:String,default:Bn.id},message:{type:Q([String,Object,Function]),default:Bn.message},onClose:{type:Q(Function),default:Bn.onClose},showClose:{type:Boolean,default:Bn.showClose},type:{type:String,values:Z2,default:Bn.type},plain:{type:Boolean,default:Bn.plain},offset:{type:Number,default:Bn.offset},zIndex:{type:Number,default:Bn.zIndex},grouping:{type:Boolean,default:Bn.grouping},repeatNum:{type:Number,default:Bn.repeatNum}}),Xte={destroy:()=>!0},Jo=Hm([]),Jte=e=>{const t=Jo.findIndex(r=>r.id===e),n=Jo[t];let o;return t>0&&(o=Jo[t-1]),{current:n,prev:o}},Zte=e=>{const{prev:t}=Jte(e);return t?t.vm.exposed.bottom.value:0},Qte=(e,t)=>Jo.findIndex(o=>o.id===e)>0?16:t,ene=["id"],tne=["innerHTML"],nne=Y({name:"ElMessage"}),one=Y({...nne,props:Gte,emits:Xte,setup(e,{expose:t}){const n=e,{Close:o}=Pv,{ns:r,zIndex:a}=Cf("message"),{currentZIndex:l,nextZIndex:s}=a,u=R(),c=R(!1),f=R(0);let d;const p=k(()=>n.type?n.type==="error"?"danger":n.type:"info"),m=k(()=>{const E=n.type;return{[r.bm("icon",E)]:E&&Pa[E]}}),v=k(()=>n.icon||Pa[n.type]||""),h=k(()=>Zte(n.id)),C=k(()=>Qte(n.id,n.offset)+h.value),g=k(()=>f.value+C.value),y=k(()=>({top:`${C.value}px`,zIndex:l.value}));function _(){n.duration!==0&&({stop:d}=_l(()=>{w()},n.duration))}function b(){d==null||d()}function w(){c.value=!1}function S({code:E}){E===Ue.esc&&w()}return at(()=>{_(),s(),c.value=!0}),ve(()=>n.repeatNum,()=>{b(),_()}),qt(document,"keydown",S),Qt(u,()=>{f.value=u.value.getBoundingClientRect().height}),t({visible:c,bottom:g,close:w}),(E,$)=>(T(),re(fn,{name:i(r).b("fade"),onBeforeLeave:E.onClose,onAfterLeave:$[0]||($[0]=O=>E.$emit("destroy")),persisted:""},{default:X(()=>[tt(F("div",{id:E.id,ref_key:"messageRef",ref:u,class:N([i(r).b(),{[i(r).m(E.type)]:E.type},i(r).is("center",E.center),i(r).is("closable",E.showClose),i(r).is("plain",E.plain),E.customClass]),style:je(i(y)),role:"alert",onMouseenter:b,onMouseleave:_},[E.repeatNum>1?(T(),re(i(tk),{key:0,value:E.repeatNum,type:i(p),class:N(i(r).e("badge"))},null,8,["value","type","class"])):te("v-if",!0),i(v)?(T(),re(i(ze),{key:1,class:N([i(r).e("icon"),i(m)])},{default:X(()=>[(T(),re(pt(i(v))))]),_:1},8,["class"])):te("v-if",!0),ie(E.$slots,"default",{},()=>[E.dangerouslyUseHTMLString?(T(),V(Ve,{key:1},[te(" Caution here, message could've been compromised, never use user's input as message "),F("p",{class:N(i(r).e("content")),innerHTML:E.message},null,10,tne)],2112)):(T(),V("p",{key:0,class:N(i(r).e("content"))},le(E.message),3))]),E.showClose?(T(),re(i(ze),{key:2,class:N(i(r).e("closeBtn")),onClick:Qe(w,["stop"])},{default:X(()=>[K(i(o))]),_:1},8,["class","onClick"])):te("v-if",!0)],46,ene),[[kt,c.value]])]),_:3},8,["name","onBeforeLeave"]))}});var rne=Ie(one,[["__file","message.vue"]]);let ane=1;const Q2=e=>{const t=!e||nt(e)||Wt(e)||Xe(e)?{message:e}:e,n={...Bn,...t};if(!n.appendTo)n.appendTo=document.body;else if(nt(n.appendTo)){let o=document.querySelector(n.appendTo);Fo(o)||(o=document.body),n.appendTo=o}return n},lne=e=>{const t=Jo.indexOf(e);if(t===-1)return;Jo.splice(t,1);const{handler:n}=e;n.close()},sne=({appendTo:e,...t},n)=>{const o=`message_${ane++}`,r=t.onClose,a=document.createElement("div"),l={...t,id:o,onClose:()=>{r==null||r(),lne(f)},onDestroy:()=>{er(null,a)}},s=K(rne,l,Xe(l.message)||Wt(l.message)?{default:Xe(l.message)?l.message:()=>l.message}:null);s.appContext=n||xs._context,er(s,a),e.appendChild(a.firstElementChild);const u=s.component,f={id:o,vnode:s,vm:u,handler:{close:()=>{u.exposed.visible.value=!1}},props:s.component.props};return f},xs=(e={},t)=>{if(!Ct)return{close:()=>{}};if(Je(Ch.max)&&Jo.length>=Ch.max)return{close:()=>{}};const n=Q2(e);if(n.grouping&&Jo.length){const r=Jo.find(({vnode:a})=>{var l;return((l=a.props)==null?void 0:l.message)===n.message});if(r)return r.props.repeatNum+=1,r.props.type=n.type,r.handler}const o=sne(n,t);return Jo.push(o),o.handler};Z2.forEach(e=>{xs[e]=(t={},n)=>{const o=Q2(t);return xs({...o,type:e},n)}});function ine(e){for(const t of Jo)(!e||e===t.props.type)&&t.handler.close()}xs.closeAll=ine;xs._context=null;const Cr=eS(xs,"$message"),une=Y({name:"ElMessageBox",directives:{TrapFocus:TV},components:{ElButton:$n,ElFocusTrap:Fu,ElInput:zn,ElOverlay:mg,ElIcon:ze,...Pv},inheritAttrs:!1,props:{buttonSize:{type:String,validator:tS},modal:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},closeOnHashChange:{type:Boolean,default:!0},center:Boolean,draggable:Boolean,overflow:Boolean,roundButton:{default:!1,type:Boolean},container:{type:String,default:"body"},boxType:{type:String,default:""}},emits:["vanish","action"],setup(e,{emit:t}){const{locale:n,zIndex:o,ns:r,size:a}=Cf("message-box",k(()=>e.buttonSize)),{t:l}=n,{nextZIndex:s}=o,u=R(!1),c=Et({autofocus:!0,beforeClose:null,callback:null,cancelButtonText:"",cancelButtonClass:"",confirmButtonText:"",confirmButtonClass:"",customClass:"",customStyle:{},dangerouslyUseHTMLString:!1,distinguishCancelAndClose:!1,icon:"",inputPattern:null,inputPlaceholder:"",inputType:"text",inputValue:null,inputValidator:null,inputErrorMessage:"",message:null,modalFade:!0,modalClass:"",showCancelButton:!1,showConfirmButton:!0,type:"",title:void 0,showInput:!1,action:"",confirmButtonLoading:!1,cancelButtonLoading:!1,confirmButtonLoadingIcon:Po(Er),cancelButtonLoadingIcon:Po(Er),confirmButtonDisabled:!1,editorErrorMessage:"",validateError:!1,zIndex:s()}),f=k(()=>{const L=c.type;return{[r.bm("icon",L)]:L&&Pa[L]}}),d=xn(),p=xn(),m=k(()=>c.icon||Pa[c.type]||""),v=k(()=>!!c.message),h=R(),C=R(),g=R(),y=R(),_=R(),b=k(()=>c.confirmButtonClass);ve(()=>c.inputValue,async L=>{await We(),e.boxType==="prompt"&&L!==null&&D()},{immediate:!0}),ve(()=>u.value,L=>{var P,x;L&&(e.boxType!=="prompt"&&(c.autofocus?g.value=(x=(P=_.value)==null?void 0:P.$el)!=null?x:h.value:g.value=h.value),c.zIndex=s()),e.boxType==="prompt"&&(L?We().then(()=>{var I;y.value&&y.value.$el&&(c.autofocus?g.value=(I=U())!=null?I:h.value:g.value=h.value)}):(c.editorErrorMessage="",c.validateError=!1))});const w=k(()=>e.draggable),S=k(()=>e.overflow);nS(h,C,w,S),at(async()=>{await We(),e.closeOnHashChange&&window.addEventListener("hashchange",E)}),zt(()=>{e.closeOnHashChange&&window.removeEventListener("hashchange",E)});function E(){u.value&&(u.value=!1,We(()=>{c.action&&t("action",c.action)}))}const $=()=>{e.closeOnClickModal&&M(c.distinguishCancelAndClose?"close":"cancel")},O=qv($),A=L=>{if(c.inputType!=="textarea")return L.preventDefault(),M("confirm")},M=L=>{var P;e.boxType==="prompt"&&L==="confirm"&&!D()||(c.action=L,c.beforeClose?(P=c.beforeClose)==null||P.call(c,L,c,E):E())},D=()=>{if(e.boxType==="prompt"){const L=c.inputPattern;if(L&&!L.test(c.inputValue||""))return c.editorErrorMessage=c.inputErrorMessage||l("el.messagebox.error"),c.validateError=!0,!1;const P=c.inputValidator;if(typeof P=="function"){const x=P(c.inputValue);if(x===!1)return c.editorErrorMessage=c.inputErrorMessage||l("el.messagebox.error"),c.validateError=!0,!1;if(typeof x=="string")return c.editorErrorMessage=x,c.validateError=!0,!1}}return c.editorErrorMessage="",c.validateError=!1,!0},U=()=>{const L=y.value.$refs;return L.input||L.textarea},j=()=>{M("close")},W=()=>{e.closeOnPressEscape&&j()};return e.lockScroll&&Fv(u),{...Cn(c),ns:r,overlayEvent:O,visible:u,hasMessage:v,typeClass:f,contentId:d,inputId:p,btnSize:a,iconComponent:m,confirmButtonClasses:b,rootRef:h,focusStartRef:g,headerRef:C,inputRef:y,confirmRef:_,doClose:E,handleClose:j,onCloseRequested:W,handleWrapperClick:$,handleInputEnter:A,handleAction:M,t:l}}}),cne=["aria-label","aria-describedby"],dne=["aria-label"],fne=["id"];function pne(e,t,n,o,r,a){const l=qe("el-icon"),s=qe("close"),u=qe("el-input"),c=qe("el-button"),f=qe("el-focus-trap"),d=qe("el-overlay");return T(),re(fn,{name:"fade-in-linear",onAfterLeave:t[11]||(t[11]=p=>e.$emit("vanish")),persisted:""},{default:X(()=>[tt(K(d,{"z-index":e.zIndex,"overlay-class":[e.ns.is("message-box"),e.modalClass],mask:e.modal},{default:X(()=>[F("div",{role:"dialog","aria-label":e.title,"aria-modal":"true","aria-describedby":e.showInput?void 0:e.contentId,class:N(`${e.ns.namespace.value}-overlay-message-box`),onClick:t[8]||(t[8]=(...p)=>e.overlayEvent.onClick&&e.overlayEvent.onClick(...p)),onMousedown:t[9]||(t[9]=(...p)=>e.overlayEvent.onMousedown&&e.overlayEvent.onMousedown(...p)),onMouseup:t[10]||(t[10]=(...p)=>e.overlayEvent.onMouseup&&e.overlayEvent.onMouseup(...p))},[K(f,{loop:"",trapped:e.visible,"focus-trap-el":e.rootRef,"focus-start-el":e.focusStartRef,onReleaseRequested:e.onCloseRequested},{default:X(()=>[F("div",{ref:"rootRef",class:N([e.ns.b(),e.customClass,e.ns.is("draggable",e.draggable),{[e.ns.m("center")]:e.center}]),style:je(e.customStyle),tabindex:"-1",onClick:t[7]||(t[7]=Qe(()=>{},["stop"]))},[e.title!==null&&e.title!==void 0?(T(),V("div",{key:0,ref:"headerRef",class:N([e.ns.e("header"),{"show-close":e.showClose}])},[F("div",{class:N(e.ns.e("title"))},[e.iconComponent&&e.center?(T(),re(l,{key:0,class:N([e.ns.e("status"),e.typeClass])},{default:X(()=>[(T(),re(pt(e.iconComponent)))]),_:1},8,["class"])):te("v-if",!0),F("span",null,le(e.title),1)],2),e.showClose?(T(),V("button",{key:0,type:"button",class:N(e.ns.e("headerbtn")),"aria-label":e.t("el.messagebox.close"),onClick:t[0]||(t[0]=p=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel")),onKeydown:t[1]||(t[1]=Pt(Qe(p=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel"),["prevent"]),["enter"]))},[K(l,{class:N(e.ns.e("close"))},{default:X(()=>[K(s)]),_:1},8,["class"])],42,dne)):te("v-if",!0)],2)):te("v-if",!0),F("div",{id:e.contentId,class:N(e.ns.e("content"))},[F("div",{class:N(e.ns.e("container"))},[e.iconComponent&&!e.center&&e.hasMessage?(T(),re(l,{key:0,class:N([e.ns.e("status"),e.typeClass])},{default:X(()=>[(T(),re(pt(e.iconComponent)))]),_:1},8,["class"])):te("v-if",!0),e.hasMessage?(T(),V("div",{key:1,class:N(e.ns.e("message"))},[ie(e.$slots,"default",{},()=>[e.dangerouslyUseHTMLString?(T(),re(pt(e.showInput?"label":"p"),{key:1,for:e.showInput?e.inputId:void 0,innerHTML:e.message},null,8,["for","innerHTML"])):(T(),re(pt(e.showInput?"label":"p"),{key:0,for:e.showInput?e.inputId:void 0},{default:X(()=>[Ge(le(e.dangerouslyUseHTMLString?"":e.message),1)]),_:1},8,["for"]))])],2)):te("v-if",!0)],2),tt(F("div",{class:N(e.ns.e("input"))},[K(u,{id:e.inputId,ref:"inputRef",modelValue:e.inputValue,"onUpdate:modelValue":t[2]||(t[2]=p=>e.inputValue=p),type:e.inputType,placeholder:e.inputPlaceholder,"aria-invalid":e.validateError,class:N({invalid:e.validateError}),onKeydown:Pt(e.handleInputEnter,["enter"])},null,8,["id","modelValue","type","placeholder","aria-invalid","class","onKeydown"]),F("div",{class:N(e.ns.e("errormsg")),style:je({visibility:e.editorErrorMessage?"visible":"hidden"})},le(e.editorErrorMessage),7)],2),[[kt,e.showInput]])],10,fne),F("div",{class:N(e.ns.e("btns"))},[e.showCancelButton?(T(),re(c,{key:0,loading:e.cancelButtonLoading,"loading-icon":e.cancelButtonLoadingIcon,class:N([e.cancelButtonClass]),round:e.roundButton,size:e.btnSize,onClick:t[3]||(t[3]=p=>e.handleAction("cancel")),onKeydown:t[4]||(t[4]=Pt(Qe(p=>e.handleAction("cancel"),["prevent"]),["enter"]))},{default:X(()=>[Ge(le(e.cancelButtonText||e.t("el.messagebox.cancel")),1)]),_:1},8,["loading","loading-icon","class","round","size"])):te("v-if",!0),tt(K(c,{ref:"confirmRef",type:"primary",loading:e.confirmButtonLoading,"loading-icon":e.confirmButtonLoadingIcon,class:N([e.confirmButtonClasses]),round:e.roundButton,disabled:e.confirmButtonDisabled,size:e.btnSize,onClick:t[5]||(t[5]=p=>e.handleAction("confirm")),onKeydown:t[6]||(t[6]=Pt(Qe(p=>e.handleAction("confirm"),["prevent"]),["enter"]))},{default:X(()=>[Ge(le(e.confirmButtonText||e.t("el.messagebox.confirm")),1)]),_:1},8,["loading","loading-icon","class","round","disabled","size"]),[[kt,e.showConfirmButton]])],2)],6)]),_:3},8,["trapped","focus-trap-el","focus-start-el","onReleaseRequested"])],42,cne)]),_:3},8,["z-index","overlay-class","mask"]),[[kt,e.visible]])]),_:3})}var hne=Ie(une,[["render",pne],["__file","index.vue"]]);const vu=new Map,mne=e=>{let t=document.body;return e.appendTo&&(nt(e.appendTo)&&(t=document.querySelector(e.appendTo)),Fo(e.appendTo)&&(t=e.appendTo),Fo(t)||(t=document.body)),t},vne=(e,t,n=null)=>{const o=K(hne,e,Xe(e.message)||Wt(e.message)?{default:Xe(e.message)?e.message:()=>e.message}:null);return o.appContext=n,er(o,t),mne(e).appendChild(t.firstElementChild),o.component},gne=()=>document.createElement("div"),bne=(e,t)=>{const n=gne();e.onVanish=()=>{er(null,n),vu.delete(r)},e.onAction=a=>{const l=vu.get(r);let s;e.showInput?s={value:r.inputValue,action:a}:s=a,e.callback?e.callback(s,o.proxy):a==="cancel"||a==="close"?e.distinguishCancelAndClose&&a!=="cancel"?l.reject("close"):l.reject("cancel"):l.resolve(s)};const o=vne(e,n,t),r=o.proxy;for(const a in e)Tt(e,a)&&!Tt(r.$props,a)&&(r[a]=e[a]);return r.visible=!0,r};function oi(e,t=null){if(!Ct)return Promise.reject();let n;return nt(e)||Wt(e)?e={message:e}:n=e.callback,new Promise((o,r)=>{const a=bne(e,t??oi._context);vu.set(a,{options:e,callback:n,resolve:o,reject:r})})}const yne=["alert","confirm","prompt"],wne={alert:{closeOnPressEscape:!1,closeOnClickModal:!1},confirm:{showCancelButton:!0},prompt:{showCancelButton:!0,showInput:!0}};yne.forEach(e=>{oi[e]=_ne(e)});function _ne(e){return(t,n,o,r)=>{let a="";return dt(n)?(o=n,a=""):pn(n)?a="":a=n,oi(Object.assign({title:a,message:t,type:"",...wne[e]},o,{boxType:e}),r)}}oi.close=()=>{vu.forEach((e,t)=>{t.doClose()}),vu.clear()};oi._context=null;const ma=oi;ma.install=e=>{ma._context=e._context,e.config.globalProperties.$msgbox=ma,e.config.globalProperties.$messageBox=ma,e.config.globalProperties.$alert=ma.alert,e.config.globalProperties.$confirm=ma.confirm,e.config.globalProperties.$prompt=ma.prompt};const bm=ma,eT=["success","info","warning","error"],Cne=Ne({customClass:{type:String,default:""},dangerouslyUseHTMLString:Boolean,duration:{type:Number,default:4500},icon:{type:Dt},id:{type:String,default:""},message:{type:Q([String,Object]),default:""},offset:{type:Number,default:0},onClick:{type:Q(Function),default:()=>{}},onClose:{type:Q(Function),required:!0},position:{type:String,values:["top-right","top-left","bottom-right","bottom-left"],default:"top-right"},showClose:{type:Boolean,default:!0},title:{type:String,default:""},type:{type:String,values:[...eT,""],default:""},zIndex:Number}),Sne={destroy:()=>!0},kne=["id"],Ene=["textContent"],Tne={key:0},$ne=["innerHTML"],One=Y({name:"ElNotification"}),Nne=Y({...One,props:Cne,emits:Sne,setup(e,{expose:t}){const n=e,{ns:o,zIndex:r}=Cf("notification"),{nextZIndex:a,currentZIndex:l}=r,{Close:s}=Av,u=R(!1);let c;const f=k(()=>{const _=n.type;return _&&Pa[n.type]?o.m(_):""}),d=k(()=>n.type&&Pa[n.type]||n.icon),p=k(()=>n.position.endsWith("right")?"right":"left"),m=k(()=>n.position.startsWith("top")?"top":"bottom"),v=k(()=>{var _;return{[m.value]:`${n.offset}px`,zIndex:(_=n.zIndex)!=null?_:l.value}});function h(){n.duration>0&&({stop:c}=_l(()=>{u.value&&g()},n.duration))}function C(){c==null||c()}function g(){u.value=!1}function y({code:_}){_===Ue.delete||_===Ue.backspace?C():_===Ue.esc?u.value&&g():h()}return at(()=>{h(),a(),u.value=!0}),qt(document,"keydown",y),t({visible:u,close:g}),(_,b)=>(T(),re(fn,{name:i(o).b("fade"),onBeforeLeave:_.onClose,onAfterLeave:b[1]||(b[1]=w=>_.$emit("destroy")),persisted:""},{default:X(()=>[tt(F("div",{id:_.id,class:N([i(o).b(),_.customClass,i(p)]),style:je(i(v)),role:"alert",onMouseenter:C,onMouseleave:h,onClick:b[0]||(b[0]=(...w)=>_.onClick&&_.onClick(...w))},[i(d)?(T(),re(i(ze),{key:0,class:N([i(o).e("icon"),i(f)])},{default:X(()=>[(T(),re(pt(i(d))))]),_:1},8,["class"])):te("v-if",!0),F("div",{class:N(i(o).e("group"))},[F("h2",{class:N(i(o).e("title")),textContent:le(_.title)},null,10,Ene),tt(F("div",{class:N(i(o).e("content")),style:je(_.title?void 0:{margin:0})},[ie(_.$slots,"default",{},()=>[_.dangerouslyUseHTMLString?(T(),V(Ve,{key:1},[te(" Caution here, message could've been compromised, never use user's input as message "),F("p",{innerHTML:_.message},null,8,$ne)],2112)):(T(),V("p",Tne,le(_.message),1))])],6),[[kt,_.message]]),_.showClose?(T(),re(i(ze),{key:0,class:N(i(o).e("closeBtn")),onClick:Qe(g,["stop"])},{default:X(()=>[K(i(s))]),_:1},8,["class","onClick"])):te("v-if",!0)],2)],46,kne),[[kt,u.value]])]),_:3},8,["name","onBeforeLeave"]))}});var Ine=Ie(Nne,[["__file","notification.vue"]]);const Md={"top-left":[],"top-right":[],"bottom-left":[],"bottom-right":[]},ym=16;let Mne=1;const Ds=function(e={},t=null){if(!Ct)return{close:()=>{}};(typeof e=="string"||Wt(e))&&(e={message:e});const n=e.position||"top-right";let o=e.offset||0;Md[n].forEach(({vm:f})=>{var d;o+=(((d=f.el)==null?void 0:d.offsetHeight)||0)+ym}),o+=ym;const r=`notification_${Mne++}`,a=e.onClose,l={...e,offset:o,id:r,onClose:()=>{Ane(r,n,a)}};let s=document.body;Fo(e.appendTo)?s=e.appendTo:nt(e.appendTo)&&(s=document.querySelector(e.appendTo)),Fo(s)||(s=document.body);const u=document.createElement("div"),c=K(Ine,l,Wt(l.message)?{default:()=>l.message}:null);return c.appContext=t??Ds._context,c.props.onDestroy=()=>{er(null,u)},er(c,u),Md[n].push({vm:c}),s.appendChild(u.firstElementChild),{close:()=>{c.component.exposed.visible.value=!1}}};eT.forEach(e=>{Ds[e]=(t={})=>((typeof t=="string"||Wt(t))&&(t={message:t}),Ds({...t,type:e}))});function Ane(e,t,n){const o=Md[t],r=o.findIndex(({vm:c})=>{var f;return((f=c.component)==null?void 0:f.props.id)===e});if(r===-1)return;const{vm:a}=o[r];if(!a)return;n==null||n(a);const l=a.el.offsetHeight,s=t.split("-")[0];o.splice(r,1);const u=o.length;if(!(u<1))for(let c=r;c{t.component.exposed.visible.value=!1})}Ds.closeAll=Pne;Ds._context=null;const Rne=eS(Ds,"$notify");var Lne=[jte,Yte,Cr,bm,Rne,xE],xne=N8([...xte,...Lne]);function tT(e,t){return function(){return e.apply(t,arguments)}}const{toString:Dne}=Object.prototype,{getPrototypeOf:Wg}=Object,Af=(e=>t=>{const n=Dne.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),Ar=e=>(e=e.toLowerCase(),t=>Af(t)===e),Pf=e=>t=>typeof t===e,{isArray:ri}=Array,gu=Pf("undefined");function Fne(e){return e!==null&&!gu(e)&&e.constructor!==null&&!gu(e.constructor)&&Lo(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const nT=Ar("ArrayBuffer");function Bne(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&nT(e.buffer),t}const Vne=Pf("string"),Lo=Pf("function"),oT=Pf("number"),Rf=e=>e!==null&&typeof e=="object",Hne=e=>e===!0||e===!1,Qc=e=>{if(Af(e)!=="object")return!1;const t=Wg(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},zne=Ar("Date"),jne=Ar("File"),Wne=Ar("Blob"),Kne=Ar("FileList"),Une=e=>Rf(e)&&Lo(e.pipe),qne=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||Lo(e.append)&&((t=Af(e))==="formdata"||t==="object"&&Lo(e.toString)&&e.toString()==="[object FormData]"))},Yne=Ar("URLSearchParams"),Gne=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Hu(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let o,r;if(typeof e!="object"&&(e=[e]),ri(e))for(o=0,r=e.length;o0;)if(r=n[o],t===r.toLowerCase())return r;return null}const aT=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,lT=e=>!gu(e)&&e!==aT;function wm(){const{caseless:e}=lT(this)&&this||{},t={},n=(o,r)=>{const a=e&&rT(t,r)||r;Qc(t[a])&&Qc(o)?t[a]=wm(t[a],o):Qc(o)?t[a]=wm({},o):ri(o)?t[a]=o.slice():t[a]=o};for(let o=0,r=arguments.length;o(Hu(t,(r,a)=>{n&&Lo(r)?e[a]=tT(r,n):e[a]=r},{allOwnKeys:o}),e),Jne=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Zne=(e,t,n,o)=>{e.prototype=Object.create(t.prototype,o),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},Qne=(e,t,n,o)=>{let r,a,l;const s={};if(t=t||{},e==null)return t;do{for(r=Object.getOwnPropertyNames(e),a=r.length;a-- >0;)l=r[a],(!o||o(l,e,t))&&!s[l]&&(t[l]=e[l],s[l]=!0);e=n!==!1&&Wg(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},eoe=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const o=e.indexOf(t,n);return o!==-1&&o===n},toe=e=>{if(!e)return null;if(ri(e))return e;let t=e.length;if(!oT(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},noe=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Wg(Uint8Array)),ooe=(e,t)=>{const o=(e&&e[Symbol.iterator]).call(e);let r;for(;(r=o.next())&&!r.done;){const a=r.value;t.call(e,a[0],a[1])}},roe=(e,t)=>{let n;const o=[];for(;(n=e.exec(t))!==null;)o.push(n);return o},aoe=Ar("HTMLFormElement"),loe=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,o,r){return o.toUpperCase()+r}),F1=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),soe=Ar("RegExp"),sT=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),o={};Hu(n,(r,a)=>{t(r,a,e)!==!1&&(o[a]=r)}),Object.defineProperties(e,o)},ioe=e=>{sT(e,(t,n)=>{if(Lo(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const o=e[n];if(Lo(o)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},uoe=(e,t)=>{const n={},o=r=>{r.forEach(a=>{n[a]=!0})};return ri(e)?o(e):o(String(e).split(t)),n},coe=()=>{},doe=(e,t)=>(e=+e,Number.isFinite(e)?e:t),Lp="abcdefghijklmnopqrstuvwxyz",B1="0123456789",iT={DIGIT:B1,ALPHA:Lp,ALPHA_DIGIT:Lp+Lp.toUpperCase()+B1},foe=(e=16,t=iT.ALPHA_DIGIT)=>{let n="";const{length:o}=t;for(;e--;)n+=t[Math.random()*o|0];return n};function poe(e){return!!(e&&Lo(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}const hoe=e=>{const t=new Array(10),n=(o,r)=>{if(Rf(o)){if(t.indexOf(o)>=0)return;if(!("toJSON"in o)){t[r]=o;const a=ri(o)?[]:{};return Hu(o,(l,s)=>{const u=n(l,r+1);!gu(u)&&(a[s]=u)}),t[r]=void 0,a}}return o};return n(e,0)},moe=Ar("AsyncFunction"),voe=e=>e&&(Rf(e)||Lo(e))&&Lo(e.then)&&Lo(e.catch),Be={isArray:ri,isArrayBuffer:nT,isBuffer:Fne,isFormData:qne,isArrayBufferView:Bne,isString:Vne,isNumber:oT,isBoolean:Hne,isObject:Rf,isPlainObject:Qc,isUndefined:gu,isDate:zne,isFile:jne,isBlob:Wne,isRegExp:soe,isFunction:Lo,isStream:Une,isURLSearchParams:Yne,isTypedArray:noe,isFileList:Kne,forEach:Hu,merge:wm,extend:Xne,trim:Gne,stripBOM:Jne,inherits:Zne,toFlatObject:Qne,kindOf:Af,kindOfTest:Ar,endsWith:eoe,toArray:toe,forEachEntry:ooe,matchAll:roe,isHTMLForm:aoe,hasOwnProperty:F1,hasOwnProp:F1,reduceDescriptors:sT,freezeMethods:ioe,toObjectSet:uoe,toCamelCase:loe,noop:coe,toFiniteNumber:doe,findKey:rT,global:aT,isContextDefined:lT,ALPHABET:iT,generateString:foe,isSpecCompliantForm:poe,toJSONObject:hoe,isAsyncFn:moe,isThenable:voe};function jt(e,t,n,o,r){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),o&&(this.request=o),r&&(this.response=r)}Be.inherits(jt,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Be.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const uT=jt.prototype,cT={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{cT[e]={value:e}});Object.defineProperties(jt,cT);Object.defineProperty(uT,"isAxiosError",{value:!0});jt.from=(e,t,n,o,r,a)=>{const l=Object.create(uT);return Be.toFlatObject(e,l,function(u){return u!==Error.prototype},s=>s!=="isAxiosError"),jt.call(l,e.message,t,n,o,r),l.cause=e,l.name=e.name,a&&Object.assign(l,a),l};const goe=null;function _m(e){return Be.isPlainObject(e)||Be.isArray(e)}function dT(e){return Be.endsWith(e,"[]")?e.slice(0,-2):e}function V1(e,t,n){return e?e.concat(t).map(function(r,a){return r=dT(r),!n&&a?"["+r+"]":r}).join(n?".":""):t}function boe(e){return Be.isArray(e)&&!e.some(_m)}const yoe=Be.toFlatObject(Be,{},null,function(t){return/^is[A-Z]/.test(t)});function Lf(e,t,n){if(!Be.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=Be.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(h,C){return!Be.isUndefined(C[h])});const o=n.metaTokens,r=n.visitor||f,a=n.dots,l=n.indexes,u=(n.Blob||typeof Blob<"u"&&Blob)&&Be.isSpecCompliantForm(t);if(!Be.isFunction(r))throw new TypeError("visitor must be a function");function c(v){if(v===null)return"";if(Be.isDate(v))return v.toISOString();if(!u&&Be.isBlob(v))throw new jt("Blob is not supported. Use a Buffer instead.");return Be.isArrayBuffer(v)||Be.isTypedArray(v)?u&&typeof Blob=="function"?new Blob([v]):Buffer.from(v):v}function f(v,h,C){let g=v;if(v&&!C&&typeof v=="object"){if(Be.endsWith(h,"{}"))h=o?h:h.slice(0,-2),v=JSON.stringify(v);else if(Be.isArray(v)&&boe(v)||(Be.isFileList(v)||Be.endsWith(h,"[]"))&&(g=Be.toArray(v)))return h=dT(h),g.forEach(function(_,b){!(Be.isUndefined(_)||_===null)&&t.append(l===!0?V1([h],b,a):l===null?h:h+"[]",c(_))}),!1}return _m(v)?!0:(t.append(V1(C,h,a),c(v)),!1)}const d=[],p=Object.assign(yoe,{defaultVisitor:f,convertValue:c,isVisitable:_m});function m(v,h){if(!Be.isUndefined(v)){if(d.indexOf(v)!==-1)throw Error("Circular reference detected in "+h.join("."));d.push(v),Be.forEach(v,function(g,y){(!(Be.isUndefined(g)||g===null)&&r.call(t,g,Be.isString(y)?y.trim():y,h,p))===!0&&m(g,h?h.concat(y):[y])}),d.pop()}}if(!Be.isObject(e))throw new TypeError("data must be an object");return m(e),t}function H1(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(o){return t[o]})}function Kg(e,t){this._pairs=[],e&&Lf(e,this,t)}const fT=Kg.prototype;fT.append=function(t,n){this._pairs.push([t,n])};fT.toString=function(t){const n=t?function(o){return t.call(this,o,H1)}:H1;return this._pairs.map(function(r){return n(r[0])+"="+n(r[1])},"").join("&")};function woe(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function pT(e,t,n){if(!t)return e;const o=n&&n.encode||woe,r=n&&n.serialize;let a;if(r?a=r(t,n):a=Be.isURLSearchParams(t)?t.toString():new Kg(t,n).toString(o),a){const l=e.indexOf("#");l!==-1&&(e=e.slice(0,l)),e+=(e.indexOf("?")===-1?"?":"&")+a}return e}class z1{constructor(){this.handlers=[]}use(t,n,o){return this.handlers.push({fulfilled:t,rejected:n,synchronous:o?o.synchronous:!1,runWhen:o?o.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){Be.forEach(this.handlers,function(o){o!==null&&t(o)})}}const hT={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},_oe=typeof URLSearchParams<"u"?URLSearchParams:Kg,Coe=typeof FormData<"u"?FormData:null,Soe=typeof Blob<"u"?Blob:null,koe=(()=>{let e;return typeof navigator<"u"&&((e=navigator.product)==="ReactNative"||e==="NativeScript"||e==="NS")?!1:typeof window<"u"&&typeof document<"u"})(),Eoe=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",yr={isBrowser:!0,classes:{URLSearchParams:_oe,FormData:Coe,Blob:Soe},isStandardBrowserEnv:koe,isStandardBrowserWebWorkerEnv:Eoe,protocols:["http","https","file","blob","url","data"]};function Toe(e,t){return Lf(e,new yr.classes.URLSearchParams,Object.assign({visitor:function(n,o,r,a){return yr.isNode&&Be.isBuffer(n)?(this.append(o,n.toString("base64")),!1):a.defaultVisitor.apply(this,arguments)}},t))}function $oe(e){return Be.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function Ooe(e){const t={},n=Object.keys(e);let o;const r=n.length;let a;for(o=0;o=n.length;return l=!l&&Be.isArray(r)?r.length:l,u?(Be.hasOwnProp(r,l)?r[l]=[r[l],o]:r[l]=o,!s):((!r[l]||!Be.isObject(r[l]))&&(r[l]=[]),t(n,o,r[l],a)&&Be.isArray(r[l])&&(r[l]=Ooe(r[l])),!s)}if(Be.isFormData(e)&&Be.isFunction(e.entries)){const n={};return Be.forEachEntry(e,(o,r)=>{t($oe(o),r,n,0)}),n}return null}const Noe={"Content-Type":void 0};function Ioe(e,t,n){if(Be.isString(e))try{return(t||JSON.parse)(e),Be.trim(e)}catch(o){if(o.name!=="SyntaxError")throw o}return(n||JSON.stringify)(e)}const ai={transitional:hT,adapter:["xhr","http"],transformRequest:[function(t,n){const o=n.getContentType()||"",r=o.indexOf("application/json")>-1,a=Be.isObject(t);if(a&&Be.isHTMLForm(t)&&(t=new FormData(t)),Be.isFormData(t))return r&&r?JSON.stringify(mT(t)):t;if(Be.isArrayBuffer(t)||Be.isBuffer(t)||Be.isStream(t)||Be.isFile(t)||Be.isBlob(t))return t;if(Be.isArrayBufferView(t))return t.buffer;if(Be.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let s;if(a){if(o.indexOf("application/x-www-form-urlencoded")>-1)return Toe(t,this.formSerializer).toString();if((s=Be.isFileList(t))||o.indexOf("multipart/form-data")>-1){const u=this.env&&this.env.FormData;return Lf(s?{"files[]":t}:t,u&&new u,this.formSerializer)}}return a||r?(n.setContentType("application/json",!1),Ioe(t)):t}],transformResponse:[function(t){const n=this.transitional||ai.transitional,o=n&&n.forcedJSONParsing,r=this.responseType==="json";if(t&&Be.isString(t)&&(o&&!this.responseType||r)){const l=!(n&&n.silentJSONParsing)&&r;try{return JSON.parse(t)}catch(s){if(l)throw s.name==="SyntaxError"?jt.from(s,jt.ERR_BAD_RESPONSE,this,null,this.response):s}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:yr.classes.FormData,Blob:yr.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};Be.forEach(["delete","get","head"],function(t){ai.headers[t]={}});Be.forEach(["post","put","patch"],function(t){ai.headers[t]=Be.merge(Noe)});const Moe=Be.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Aoe=e=>{const t={};let n,o,r;return e&&e.split(` +`).forEach(function(l){r=l.indexOf(":"),n=l.substring(0,r).trim().toLowerCase(),o=l.substring(r+1).trim(),!(!n||t[n]&&Moe[n])&&(n==="set-cookie"?t[n]?t[n].push(o):t[n]=[o]:t[n]=t[n]?t[n]+", "+o:o)}),t},j1=Symbol("internals");function yi(e){return e&&String(e).trim().toLowerCase()}function ed(e){return e===!1||e==null?e:Be.isArray(e)?e.map(ed):String(e)}function Poe(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let o;for(;o=n.exec(e);)t[o[1]]=o[2];return t}const Roe=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function xp(e,t,n,o,r){if(Be.isFunction(o))return o.call(this,t,n);if(r&&(t=n),!!Be.isString(t)){if(Be.isString(o))return t.indexOf(o)!==-1;if(Be.isRegExp(o))return o.test(t)}}function Loe(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,o)=>n.toUpperCase()+o)}function xoe(e,t){const n=Be.toCamelCase(" "+t);["get","set","has"].forEach(o=>{Object.defineProperty(e,o+n,{value:function(r,a,l){return this[o].call(this,t,r,a,l)},configurable:!0})})}class xo{constructor(t){t&&this.set(t)}set(t,n,o){const r=this;function a(s,u,c){const f=yi(u);if(!f)throw new Error("header name must be a non-empty string");const d=Be.findKey(r,f);(!d||r[d]===void 0||c===!0||c===void 0&&r[d]!==!1)&&(r[d||u]=ed(s))}const l=(s,u)=>Be.forEach(s,(c,f)=>a(c,f,u));return Be.isPlainObject(t)||t instanceof this.constructor?l(t,n):Be.isString(t)&&(t=t.trim())&&!Roe(t)?l(Aoe(t),n):t!=null&&a(n,t,o),this}get(t,n){if(t=yi(t),t){const o=Be.findKey(this,t);if(o){const r=this[o];if(!n)return r;if(n===!0)return Poe(r);if(Be.isFunction(n))return n.call(this,r,o);if(Be.isRegExp(n))return n.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=yi(t),t){const o=Be.findKey(this,t);return!!(o&&this[o]!==void 0&&(!n||xp(this,this[o],o,n)))}return!1}delete(t,n){const o=this;let r=!1;function a(l){if(l=yi(l),l){const s=Be.findKey(o,l);s&&(!n||xp(o,o[s],s,n))&&(delete o[s],r=!0)}}return Be.isArray(t)?t.forEach(a):a(t),r}clear(t){const n=Object.keys(this);let o=n.length,r=!1;for(;o--;){const a=n[o];(!t||xp(this,this[a],a,t,!0))&&(delete this[a],r=!0)}return r}normalize(t){const n=this,o={};return Be.forEach(this,(r,a)=>{const l=Be.findKey(o,a);if(l){n[l]=ed(r),delete n[a];return}const s=t?Loe(a):String(a).trim();s!==a&&delete n[a],n[s]=ed(r),o[s]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return Be.forEach(this,(o,r)=>{o!=null&&o!==!1&&(n[r]=t&&Be.isArray(o)?o.join(", "):o)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const o=new this(t);return n.forEach(r=>o.set(r)),o}static accessor(t){const o=(this[j1]=this[j1]={accessors:{}}).accessors,r=this.prototype;function a(l){const s=yi(l);o[s]||(xoe(r,l),o[s]=!0)}return Be.isArray(t)?t.forEach(a):a(t),this}}xo.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);Be.freezeMethods(xo.prototype);Be.freezeMethods(xo);function Dp(e,t){const n=this||ai,o=t||n,r=xo.from(o.headers);let a=o.data;return Be.forEach(e,function(s){a=s.call(n,a,r.normalize(),t?t.status:void 0)}),r.normalize(),a}function vT(e){return!!(e&&e.__CANCEL__)}function zu(e,t,n){jt.call(this,e??"canceled",jt.ERR_CANCELED,t,n),this.name="CanceledError"}Be.inherits(zu,jt,{__CANCEL__:!0});function Doe(e,t,n){const o=n.config.validateStatus;!n.status||!o||o(n.status)?e(n):t(new jt("Request failed with status code "+n.status,[jt.ERR_BAD_REQUEST,jt.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}const Foe=yr.isStandardBrowserEnv?function(){return{write:function(n,o,r,a,l,s){const u=[];u.push(n+"="+encodeURIComponent(o)),Be.isNumber(r)&&u.push("expires="+new Date(r).toGMTString()),Be.isString(a)&&u.push("path="+a),Be.isString(l)&&u.push("domain="+l),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(n){const o=document.cookie.match(new RegExp("(^|;\\s*)("+n+")=([^;]*)"));return o?decodeURIComponent(o[3]):null},remove:function(n){this.write(n,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}();function Boe(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function Voe(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}function gT(e,t){return e&&!Boe(t)?Voe(e,t):t}const Hoe=yr.isStandardBrowserEnv?function(){const t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");let o;function r(a){let l=a;return t&&(n.setAttribute("href",l),l=n.href),n.setAttribute("href",l),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return o=r(window.location.href),function(l){const s=Be.isString(l)?r(l):l;return s.protocol===o.protocol&&s.host===o.host}}():function(){return function(){return!0}}();function zoe(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function joe(e,t){e=e||10;const n=new Array(e),o=new Array(e);let r=0,a=0,l;return t=t!==void 0?t:1e3,function(u){const c=Date.now(),f=o[a];l||(l=c),n[r]=u,o[r]=c;let d=a,p=0;for(;d!==r;)p+=n[d++],d=d%e;if(r=(r+1)%e,r===a&&(a=(a+1)%e),c-l{const a=r.loaded,l=r.lengthComputable?r.total:void 0,s=a-n,u=o(s),c=a<=l;n=a;const f={loaded:a,total:l,progress:l?a/l:void 0,bytes:s,rate:u||void 0,estimated:u&&l&&c?(l-a)/u:void 0,event:r};f[t?"download":"upload"]=!0,e(f)}}const Woe=typeof XMLHttpRequest<"u",Koe=Woe&&function(e){return new Promise(function(n,o){let r=e.data;const a=xo.from(e.headers).normalize(),l=e.responseType;let s;function u(){e.cancelToken&&e.cancelToken.unsubscribe(s),e.signal&&e.signal.removeEventListener("abort",s)}Be.isFormData(r)&&(yr.isStandardBrowserEnv||yr.isStandardBrowserWebWorkerEnv?a.setContentType(!1):a.setContentType("multipart/form-data;",!1));let c=new XMLHttpRequest;if(e.auth){const m=e.auth.username||"",v=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";a.set("Authorization","Basic "+btoa(m+":"+v))}const f=gT(e.baseURL,e.url);c.open(e.method.toUpperCase(),pT(f,e.params,e.paramsSerializer),!0),c.timeout=e.timeout;function d(){if(!c)return;const m=xo.from("getAllResponseHeaders"in c&&c.getAllResponseHeaders()),h={data:!l||l==="text"||l==="json"?c.responseText:c.response,status:c.status,statusText:c.statusText,headers:m,config:e,request:c};Doe(function(g){n(g),u()},function(g){o(g),u()},h),c=null}if("onloadend"in c?c.onloadend=d:c.onreadystatechange=function(){!c||c.readyState!==4||c.status===0&&!(c.responseURL&&c.responseURL.indexOf("file:")===0)||setTimeout(d)},c.onabort=function(){c&&(o(new jt("Request aborted",jt.ECONNABORTED,e,c)),c=null)},c.onerror=function(){o(new jt("Network Error",jt.ERR_NETWORK,e,c)),c=null},c.ontimeout=function(){let v=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const h=e.transitional||hT;e.timeoutErrorMessage&&(v=e.timeoutErrorMessage),o(new jt(v,h.clarifyTimeoutError?jt.ETIMEDOUT:jt.ECONNABORTED,e,c)),c=null},yr.isStandardBrowserEnv){const m=(e.withCredentials||Hoe(f))&&e.xsrfCookieName&&Foe.read(e.xsrfCookieName);m&&a.set(e.xsrfHeaderName,m)}r===void 0&&a.setContentType(null),"setRequestHeader"in c&&Be.forEach(a.toJSON(),function(v,h){c.setRequestHeader(h,v)}),Be.isUndefined(e.withCredentials)||(c.withCredentials=!!e.withCredentials),l&&l!=="json"&&(c.responseType=e.responseType),typeof e.onDownloadProgress=="function"&&c.addEventListener("progress",W1(e.onDownloadProgress,!0)),typeof e.onUploadProgress=="function"&&c.upload&&c.upload.addEventListener("progress",W1(e.onUploadProgress)),(e.cancelToken||e.signal)&&(s=m=>{c&&(o(!m||m.type?new zu(null,e,c):m),c.abort(),c=null)},e.cancelToken&&e.cancelToken.subscribe(s),e.signal&&(e.signal.aborted?s():e.signal.addEventListener("abort",s)));const p=zoe(f);if(p&&yr.protocols.indexOf(p)===-1){o(new jt("Unsupported protocol "+p+":",jt.ERR_BAD_REQUEST,e));return}c.send(r||null)})},td={http:goe,xhr:Koe};Be.forEach(td,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const Uoe={getAdapter:e=>{e=Be.isArray(e)?e:[e];const{length:t}=e;let n,o;for(let r=0;re instanceof xo?e.toJSON():e;function Fs(e,t){t=t||{};const n={};function o(c,f,d){return Be.isPlainObject(c)&&Be.isPlainObject(f)?Be.merge.call({caseless:d},c,f):Be.isPlainObject(f)?Be.merge({},f):Be.isArray(f)?f.slice():f}function r(c,f,d){if(Be.isUndefined(f)){if(!Be.isUndefined(c))return o(void 0,c,d)}else return o(c,f,d)}function a(c,f){if(!Be.isUndefined(f))return o(void 0,f)}function l(c,f){if(Be.isUndefined(f)){if(!Be.isUndefined(c))return o(void 0,c)}else return o(void 0,f)}function s(c,f,d){if(d in t)return o(c,f);if(d in e)return o(void 0,c)}const u={url:a,method:a,data:a,baseURL:l,transformRequest:l,transformResponse:l,paramsSerializer:l,timeout:l,timeoutMessage:l,withCredentials:l,adapter:l,responseType:l,xsrfCookieName:l,xsrfHeaderName:l,onUploadProgress:l,onDownloadProgress:l,decompress:l,maxContentLength:l,maxBodyLength:l,beforeRedirect:l,transport:l,httpAgent:l,httpsAgent:l,cancelToken:l,socketPath:l,responseEncoding:l,validateStatus:s,headers:(c,f)=>r(U1(c),U1(f),!0)};return Be.forEach(Object.keys(Object.assign({},e,t)),function(f){const d=u[f]||r,p=d(e[f],t[f],f);Be.isUndefined(p)&&d!==s||(n[f]=p)}),n}const bT="1.4.0",Ug={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Ug[e]=function(o){return typeof o===e||"a"+(t<1?"n ":" ")+e}});const q1={};Ug.transitional=function(t,n,o){function r(a,l){return"[Axios v"+bT+"] Transitional option '"+a+"'"+l+(o?". "+o:"")}return(a,l,s)=>{if(t===!1)throw new jt(r(l," has been removed"+(n?" in "+n:"")),jt.ERR_DEPRECATED);return n&&!q1[l]&&(q1[l]=!0,console.warn(r(l," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(a,l,s):!0}};function qoe(e,t,n){if(typeof e!="object")throw new jt("options must be an object",jt.ERR_BAD_OPTION_VALUE);const o=Object.keys(e);let r=o.length;for(;r-- >0;){const a=o[r],l=t[a];if(l){const s=e[a],u=s===void 0||l(s,a,e);if(u!==!0)throw new jt("option "+a+" must be "+u,jt.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new jt("Unknown option "+a,jt.ERR_BAD_OPTION)}}const Cm={assertOptions:qoe,validators:Ug},ua=Cm.validators;let fl=class{constructor(t){this.defaults=t,this.interceptors={request:new z1,response:new z1}}request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=Fs(this.defaults,n);const{transitional:o,paramsSerializer:r,headers:a}=n;o!==void 0&&Cm.assertOptions(o,{silentJSONParsing:ua.transitional(ua.boolean),forcedJSONParsing:ua.transitional(ua.boolean),clarifyTimeoutError:ua.transitional(ua.boolean)},!1),r!=null&&(Be.isFunction(r)?n.paramsSerializer={serialize:r}:Cm.assertOptions(r,{encode:ua.function,serialize:ua.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let l;l=a&&Be.merge(a.common,a[n.method]),l&&Be.forEach(["delete","get","head","post","put","patch","common"],v=>{delete a[v]}),n.headers=xo.concat(l,a);const s=[];let u=!0;this.interceptors.request.forEach(function(h){typeof h.runWhen=="function"&&h.runWhen(n)===!1||(u=u&&h.synchronous,s.unshift(h.fulfilled,h.rejected))});const c=[];this.interceptors.response.forEach(function(h){c.push(h.fulfilled,h.rejected)});let f,d=0,p;if(!u){const v=[K1.bind(this),void 0];for(v.unshift.apply(v,s),v.push.apply(v,c),p=v.length,f=Promise.resolve(n);d{if(!o._listeners)return;let a=o._listeners.length;for(;a-- >0;)o._listeners[a](r);o._listeners=null}),this.promise.then=r=>{let a;const l=new Promise(s=>{o.subscribe(s),a=s}).then(r);return l.cancel=function(){o.unsubscribe(a)},l},t(function(a,l,s){o.reason||(o.reason=new zu(a,l,s),n(o.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}static source(){let t;return{token:new qg(function(r){t=r}),cancel:t}}}function Yoe(e){return function(n){return e.apply(null,n)}}function Goe(e){return Be.isObject(e)&&e.isAxiosError===!0}const Sm={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Sm).forEach(([e,t])=>{Sm[t]=e});function yT(e){const t=new fl(e),n=tT(fl.prototype.request,t);return Be.extend(n,fl.prototype,t,{allOwnKeys:!0}),Be.extend(n,t,null,{allOwnKeys:!0}),n.create=function(r){return yT(Fs(e,r))},n}const Nn=yT(ai);Nn.Axios=fl;Nn.CanceledError=zu;Nn.CancelToken=qg;Nn.isCancel=vT;Nn.VERSION=bT;Nn.toFormData=Lf;Nn.AxiosError=jt;Nn.Cancel=Nn.CanceledError;Nn.all=function(t){return Promise.all(t)};Nn.spread=Yoe;Nn.isAxiosError=Goe;Nn.mergeConfig=Fs;Nn.AxiosHeaders=xo;Nn.formToJSON=e=>mT(Be.isHTMLForm(e)?new FormData(e):e);Nn.HttpStatusCode=Sm;Nn.default=Nn;const Xoe={Terminal:"终端","Command run log":"命令运行日志","No mission yet":"还没有任务...","Test command":"测试命令","Install dependent packages":"安装依赖包",Republish:"重新发布","Clean up task list":"清理任务列表",unknown:"未知","Waiting for execution":"等待执行",Connecting:"连接中...",Executing:"执行中...","Successful execution":"执行成功","Execution failed":"执行失败","Unknown execution result":"执行结果未知","Are you sure you want to republish?":"确认要重新发布吗?","Failure to execute this command will block the execution of the queue":"本命令执行失败会阻断队列执行","Do not refresh the browser":"请勿刷新浏览器"},Joe=Object.freeze(Object.defineProperty({__proto__:null,default:Xoe},Symbol.toStringTag,{value:"Module"})),Zoe={Terminal:"Terminal","Command run log":"Command run log","No mission yet":"No mission yet","Test command":"Test command","Install dependent packages":"Install the dependent packages",Republish:"Republish","Clean up task list":"Clean up the task list",unknown:"Unknown","Waiting for execution":"Waiting for execution",Connecting:"Connecting",Executing:"Executing","Successful execution":"Execution successful","Execution failed":"Execution failed","Unknown execution result":"Unknown execution result","Are you sure you want to republish?":"Are you sure you want to republish?","Failure to execute this command will block the execution of the queue":"Failure to execute this command will block the execution of the queue.","Do not refresh the browser":"Please do not refresh your browser."},Qoe=Object.freeze(Object.defineProperty({__proto__:null,default:Zoe},Symbol.toStringTag,{value:"Module"}));var Pr={},wT={exports:{}},Ot={},_T={exports:{}},jo={},CT={exports:{}},Xt={};/*! + * shared v9.2.2 + * (c) 2022 kazuya kawaguchi + * Released under the MIT License. + */Object.defineProperty(Xt,"__esModule",{value:!0});const ere=typeof window<"u";let tre,nre;const ore=/\{([0-9a-zA-Z]+)\}/g;function rre(e,...t){return t.length===1&&Yg(t[0])&&(t=t[0]),(!t||!t.hasOwnProperty)&&(t={}),e.replace(ore,(n,o)=>t.hasOwnProperty(o)?t[o]:"")}const are=typeof Symbol=="function"&&typeof Symbol.toStringTag=="symbol",lre=e=>are?Symbol(e):e,sre=(e,t,n)=>ST({l:e,k:t,s:n}),ST=e=>JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029").replace(/\u0027/g,"\\u0027"),ire=e=>typeof e=="number"&&isFinite(e),ure=e=>xf(e)==="[object Date]",cre=e=>xf(e)==="[object RegExp]",dre=e=>Xg(e)&&Object.keys(e).length===0;function fre(e,t){typeof console<"u"&&(console.warn("[intlify] "+e),t&&console.warn(t.stack))}const pre=Object.assign;let Y1;const hre=()=>Y1||(Y1=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof rr<"u"?rr:{});function mre(e){return e.replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}const vre=Object.prototype.hasOwnProperty;function gre(e,t){return vre.call(e,t)}const kT=Array.isArray,km=e=>typeof e=="function",bre=e=>typeof e=="string",yre=e=>typeof e=="boolean",wre=e=>typeof e=="symbol",Yg=e=>e!==null&&typeof e=="object",_re=e=>Yg(e)&&km(e.then)&&km(e.catch),Gg=Object.prototype.toString,xf=e=>Gg.call(e),Xg=e=>xf(e)==="[object Object]",Cre=e=>e==null?"":kT(e)||Xg(e)&&e.toString===Gg?JSON.stringify(e,null,2):String(e),G1=2;function Sre(e,t=0,n=e.length){const o=e.split(/\r?\n/);let r=0;const a=[];for(let l=0;l=t){for(let s=l-G1;s<=l+G1||n>r;s++){if(s<0||s>=o.length)continue;const u=s+1;a.push(`${u}${" ".repeat(3-String(u).length)}| ${o[s]}`);const c=o[s].length;if(s===l){const f=t-(r-c)+1,d=Math.max(1,n>r?c-f:n-t);a.push(" | "+" ".repeat(f)+"^".repeat(d))}else if(s>l){if(n>r){const f=Math.max(Math.min(n-r,c),1);a.push(" | "+"^".repeat(f))}r+=c+1}}break}return a.join(` +`)}function kre(){const e=new Map;return{events:e,on(n,o){const r=e.get(n);r&&r.push(o)||e.set(n,[o])},off(n,o){const r=e.get(n);r&&r.splice(r.indexOf(o)>>>0,1)},emit(n,o){(e.get(n)||[]).slice().map(r=>r(o)),(e.get("*")||[]).slice().map(r=>r(n,o))}}}Xt.assign=pre;Xt.createEmitter=kre;Xt.escapeHtml=mre;Xt.format=rre;Xt.friendlyJSONstringify=ST;Xt.generateCodeFrame=Sre;Xt.generateFormatCacheKey=sre;Xt.getGlobalThis=hre;Xt.hasOwn=gre;Xt.inBrowser=ere;Xt.isArray=kT;Xt.isBoolean=yre;Xt.isDate=ure;Xt.isEmptyObject=dre;Xt.isFunction=km;Xt.isNumber=ire;Xt.isObject=Yg;Xt.isPlainObject=Xg;Xt.isPromise=_re;Xt.isRegExp=cre;Xt.isString=bre;Xt.isSymbol=wre;Xt.makeSymbol=lre;Xt.mark=tre;Xt.measure=nre;Xt.objectToString=Gg;Xt.toDisplayString=Cre;Xt.toTypeString=xf;Xt.warn=fre;CT.exports=Xt;var Jg=CT.exports,Df={},Zg={},Ff={},Qg={},X1="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");Qg.encode=function(e){if(0<=e&&e>1;return t?-n:n}Ff.encode=function(t){var n="",o,r=Ere(t);do o=r&$T,r>>>=eb,r>0&&(o|=OT),n+=ET.encode(o);while(r>0);return n};Ff.decode=function(t,n,o){var r=t.length,a=0,l=0,s,u;do{if(n>=r)throw new Error("Expected more digits in base 64 VLQ value.");if(u=ET.decode(t.charCodeAt(n++)),u===-1)throw new Error("Invalid base64 digit: "+t.charAt(n-1));s=!!(u&OT),u&=$T,a=a+(u<=0;M--)O=$[M],O==="."?$.splice(M,1):O===".."?A++:A>0&&(O===""?($.splice(M+1,A),A=0):($.splice(M,2),A--));return w=$.join("/"),w===""&&(w=E?"/":"."),S?(S.path=w,a(S)):w}e.normalize=l;function s(b,w){b===""&&(b="."),w===""&&(w=".");var S=r(w),E=r(b);if(E&&(b=E.path||"/"),S&&!S.scheme)return E&&(S.scheme=E.scheme),a(S);if(S||w.match(o))return w;if(E&&!E.host&&!E.path)return E.host=w,a(E);var $=w.charAt(0)==="/"?w:l(b.replace(/\/+$/,"")+"/"+w);return E?(E.path=$,a(E)):$}e.join=s,e.isAbsolute=function(b){return b.charAt(0)==="/"||n.test(b)};function u(b,w){b===""&&(b="."),b=b.replace(/\/$/,"");for(var S=0;w.indexOf(b+"/")!==0;){var E=b.lastIndexOf("/");if(E<0||(b=b.slice(0,E),b.match(/^([^\/]+:\/)?\/*$/)))return w;++S}return Array(S+1).join("../")+w.substr(b.length+1)}e.relative=u;var c=function(){var b=Object.create(null);return!("__proto__"in b)}();function f(b){return b}function d(b){return m(b)?"$"+b:b}e.toSetString=c?f:d;function p(b){return m(b)?b.slice(1):b}e.fromSetString=c?f:p;function m(b){if(!b)return!1;var w=b.length;if(w<9||b.charCodeAt(w-1)!==95||b.charCodeAt(w-2)!==95||b.charCodeAt(w-3)!==111||b.charCodeAt(w-4)!==116||b.charCodeAt(w-5)!==111||b.charCodeAt(w-6)!==114||b.charCodeAt(w-7)!==112||b.charCodeAt(w-8)!==95||b.charCodeAt(w-9)!==95)return!1;for(var S=w-10;S>=0;S--)if(b.charCodeAt(S)!==36)return!1;return!0}function v(b,w,S){var E=C(b.source,w.source);return E!==0||(E=b.originalLine-w.originalLine,E!==0)||(E=b.originalColumn-w.originalColumn,E!==0||S)||(E=b.generatedColumn-w.generatedColumn,E!==0)||(E=b.generatedLine-w.generatedLine,E!==0)?E:C(b.name,w.name)}e.compareByOriginalPositions=v;function h(b,w,S){var E=b.generatedLine-w.generatedLine;return E!==0||(E=b.generatedColumn-w.generatedColumn,E!==0||S)||(E=C(b.source,w.source),E!==0)||(E=b.originalLine-w.originalLine,E!==0)||(E=b.originalColumn-w.originalColumn,E!==0)?E:C(b.name,w.name)}e.compareByGeneratedPositionsDeflated=h;function C(b,w){return b===w?0:b===null?1:w===null?-1:b>w?1:-1}function g(b,w){var S=b.generatedLine-w.generatedLine;return S!==0||(S=b.generatedColumn-w.generatedColumn,S!==0)||(S=C(b.source,w.source),S!==0)||(S=b.originalLine-w.originalLine,S!==0)||(S=b.originalColumn-w.originalColumn,S!==0)?S:C(b.name,w.name)}e.compareByGeneratedPositionsInflated=g;function y(b){return JSON.parse(b.replace(/^\)]}'[^\n]*\n/,""))}e.parseSourceMapInput=y;function _(b,w,S){if(w=w||"",b&&(b[b.length-1]!=="/"&&w[0]!=="/"&&(b+="/"),w=b+w),S){var E=r(S);if(!E)throw new Error("sourceMapURL could not be parsed");if(E.path){var $=E.path.lastIndexOf("/");$>=0&&(E.path=E.path.substring(0,$+1))}w=s(a(E),w)}return l(w)}e.computeSourceURL=_})(li);var tb={},nb=li,ob=Object.prototype.hasOwnProperty,pl=typeof Map<"u";function Gr(){this._array=[],this._set=pl?new Map:Object.create(null)}Gr.fromArray=function(t,n){for(var o=new Gr,r=0,a=t.length;r=0)return n}else{var o=nb.toSetString(t);if(ob.call(this._set,o))return this._set[o]}throw new Error('"'+t+'" is not in the set.')};Gr.prototype.at=function(t){if(t>=0&&tn||o==n&&a>=r||IT.compareByGeneratedPositionsInflated(e,t)<=0}function Bf(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}Bf.prototype.unsortedForEach=function(t,n){this._array.forEach(t,n)};Bf.prototype.add=function(t){$re(this._last,t)?(this._last=t,this._array.push(t)):(this._sorted=!1,this._array.push(t))};Bf.prototype.toArray=function(){return this._sorted||(this._array.sort(IT.compareByGeneratedPositionsInflated),this._sorted=!0),this._array};NT.MappingList=Bf;var wi=Ff,yn=li,Ad=tb.ArraySet,Ore=NT.MappingList;function zo(e){e||(e={}),this._file=yn.getArg(e,"file",null),this._sourceRoot=yn.getArg(e,"sourceRoot",null),this._skipValidation=yn.getArg(e,"skipValidation",!1),this._sources=new Ad,this._names=new Ad,this._mappings=new Ore,this._sourcesContents=null}zo.prototype._version=3;zo.fromSourceMap=function(t){var n=t.sourceRoot,o=new zo({file:t.file,sourceRoot:n});return t.eachMapping(function(r){var a={generated:{line:r.generatedLine,column:r.generatedColumn}};r.source!=null&&(a.source=r.source,n!=null&&(a.source=yn.relative(n,a.source)),a.original={line:r.originalLine,column:r.originalColumn},r.name!=null&&(a.name=r.name)),o.addMapping(a)}),t.sources.forEach(function(r){var a=r;n!==null&&(a=yn.relative(n,r)),o._sources.has(a)||o._sources.add(a);var l=t.sourceContentFor(r);l!=null&&o.setSourceContent(r,l)}),o};zo.prototype.addMapping=function(t){var n=yn.getArg(t,"generated"),o=yn.getArg(t,"original",null),r=yn.getArg(t,"source",null),a=yn.getArg(t,"name",null);this._skipValidation||this._validateMapping(n,o,r,a),r!=null&&(r=String(r),this._sources.has(r)||this._sources.add(r)),a!=null&&(a=String(a),this._names.has(a)||this._names.add(a)),this._mappings.add({generatedLine:n.line,generatedColumn:n.column,originalLine:o!=null&&o.line,originalColumn:o!=null&&o.column,source:r,name:a})};zo.prototype.setSourceContent=function(t,n){var o=t;this._sourceRoot!=null&&(o=yn.relative(this._sourceRoot,o)),n!=null?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[yn.toSetString(o)]=n):this._sourcesContents&&(delete this._sourcesContents[yn.toSetString(o)],Object.keys(this._sourcesContents).length===0&&(this._sourcesContents=null))};zo.prototype.applySourceMap=function(t,n,o){var r=n;if(n==null){if(t.file==null)throw new Error(`SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map's "file" property. Both were omitted.`);r=t.file}var a=this._sourceRoot;a!=null&&(r=yn.relative(a,r));var l=new Ad,s=new Ad;this._mappings.unsortedForEach(function(u){if(u.source===r&&u.originalLine!=null){var c=t.originalPositionFor({line:u.originalLine,column:u.originalColumn});c.source!=null&&(u.source=c.source,o!=null&&(u.source=yn.join(o,u.source)),a!=null&&(u.source=yn.relative(a,u.source)),u.originalLine=c.line,u.originalColumn=c.column,c.name!=null&&(u.name=c.name))}var f=u.source;f!=null&&!l.has(f)&&l.add(f);var d=u.name;d!=null&&!s.has(d)&&s.add(d)},this),this._sources=l,this._names=s,t.sources.forEach(function(u){var c=t.sourceContentFor(u);c!=null&&(o!=null&&(u=yn.join(o,u)),a!=null&&(u=yn.relative(a,u)),this.setSourceContent(u,c))},this)};zo.prototype._validateMapping=function(t,n,o,r){if(n&&typeof n.line!="number"&&typeof n.column!="number")throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if(!(t&&"line"in t&&"column"in t&&t.line>0&&t.column>=0&&!n&&!o&&!r)){if(t&&"line"in t&&"column"in t&&n&&"line"in n&&"column"in n&&t.line>0&&t.column>=0&&n.line>0&&n.column>=0&&o)return;throw new Error("Invalid mapping: "+JSON.stringify({generated:t,source:o,original:n,name:r}))}};zo.prototype._serializeMappings=function(){for(var t=0,n=1,o=0,r=0,a=0,l=0,s="",u,c,f,d,p=this._mappings.toArray(),m=0,v=p.length;m0){if(!yn.compareByGeneratedPositionsInflated(c,p[m-1]))continue;u+=","}u+=wi.encode(c.generatedColumn-t),t=c.generatedColumn,c.source!=null&&(d=this._sources.indexOf(c.source),u+=wi.encode(d-l),l=d,u+=wi.encode(c.originalLine-1-r),r=c.originalLine-1,u+=wi.encode(c.originalColumn-o),o=c.originalColumn,c.name!=null&&(f=this._names.indexOf(c.name),u+=wi.encode(f-a),a=f)),s+=u}return s};zo.prototype._generateSourcesContent=function(t,n){return t.map(function(o){if(!this._sourcesContents)return null;n!=null&&(o=yn.relative(n,o));var r=yn.toSetString(o);return Object.prototype.hasOwnProperty.call(this._sourcesContents,r)?this._sourcesContents[r]:null},this)};zo.prototype.toJSON=function(){var t={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return this._file!=null&&(t.file=this._file),this._sourceRoot!=null&&(t.sourceRoot=this._sourceRoot),this._sourcesContents&&(t.sourcesContent=this._generateSourcesContent(t.sources,t.sourceRoot)),t};zo.prototype.toString=function(){return JSON.stringify(this.toJSON())};Zg.SourceMapGenerator=zo;var Vf={},MT={};(function(e){e.GREATEST_LOWER_BOUND=1,e.LEAST_UPPER_BOUND=2;function t(n,o,r,a,l,s){var u=Math.floor((o-n)/2)+n,c=l(r,a[u],!0);return c===0?u:c>0?o-u>1?t(u,o,r,a,l,s):s==e.LEAST_UPPER_BOUND?o1?t(n,u,r,a,l,s):s==e.LEAST_UPPER_BOUND?u:n<0?-1:n}e.search=function(o,r,a,l){if(r.length===0)return-1;var s=t(-1,r.length,o,r,a,l||e.GREATEST_LOWER_BOUND);if(s<0)return-1;for(;s-1>=0&&a(r[s],r[s-1],!0)===0;)--s;return s}})(MT);var AT={};function Bp(e,t,n){var o=e[t];e[t]=e[n],e[n]=o}function Nre(e,t){return Math.round(e+Math.random()*(t-e))}function Em(e,t,n,o){if(n=0){var l=this._originalMappings[a];if(t.column===void 0)for(var s=l.originalLine;l&&l.originalLine===s;)r.push({line:ht.getArg(l,"generatedLine",null),column:ht.getArg(l,"generatedColumn",null),lastColumn:ht.getArg(l,"lastGeneratedColumn",null)}),l=this._originalMappings[++a];else for(var u=l.originalColumn;l&&l.originalLine===n&&l.originalColumn==u;)r.push({line:ht.getArg(l,"generatedLine",null),column:ht.getArg(l,"generatedColumn",null),lastColumn:ht.getArg(l,"lastGeneratedColumn",null)}),l=this._originalMappings[++a]}return r};Vf.SourceMapConsumer=cn;function Dn(e,t){var n=e;typeof e=="string"&&(n=ht.parseSourceMapInput(e));var o=ht.getArg(n,"version"),r=ht.getArg(n,"sources"),a=ht.getArg(n,"names",[]),l=ht.getArg(n,"sourceRoot",null),s=ht.getArg(n,"sourcesContent",null),u=ht.getArg(n,"mappings"),c=ht.getArg(n,"file",null);if(o!=this._version)throw new Error("Unsupported version: "+o);l&&(l=ht.normalize(l)),r=r.map(String).map(ht.normalize).map(function(f){return l&&ht.isAbsolute(l)&&ht.isAbsolute(f)?ht.relative(l,f):f}),this._names=Bs.fromArray(a.map(String),!0),this._sources=Bs.fromArray(r,!0),this._absoluteSources=this._sources.toArray().map(function(f){return ht.computeSourceURL(l,f,t)}),this.sourceRoot=l,this.sourcesContent=s,this._mappings=u,this._sourceMapURL=t,this.file=c}Dn.prototype=Object.create(cn.prototype);Dn.prototype.consumer=cn;Dn.prototype._findSourceIndex=function(e){var t=e;if(this.sourceRoot!=null&&(t=ht.relative(this.sourceRoot,t)),this._sources.has(t))return this._sources.indexOf(t);var n;for(n=0;n1&&(h.source=s+g[1],s+=g[1],h.originalLine=a+g[2],a=h.originalLine,h.originalLine+=1,h.originalColumn=l+g[3],l=h.originalColumn,g.length>4&&(h.name=u+g[4],u+=g[4])),v.push(h),typeof h.originalLine=="number"&&m.push(h)}bu(v,ht.compareByGeneratedPositionsDeflated),this.__generatedMappings=v,bu(m,ht.compareByOriginalPositions),this.__originalMappings=m};Dn.prototype._findMapping=function(t,n,o,r,a,l){if(t[o]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+t[o]);if(t[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+t[r]);return rb.search(t,n,a,l)};Dn.prototype.computeColumnSpans=function(){for(var t=0;t=0){var r=this._generatedMappings[o];if(r.generatedLine===n.generatedLine){var a=ht.getArg(r,"source",null);a!==null&&(a=this._sources.at(a),a=ht.computeSourceURL(this.sourceRoot,a,this._sourceMapURL));var l=ht.getArg(r,"name",null);return l!==null&&(l=this._names.at(l)),{source:a,line:ht.getArg(r,"originalLine",null),column:ht.getArg(r,"originalColumn",null),name:l}}}return{source:null,line:null,column:null,name:null}};Dn.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(t){return t==null}):!1};Dn.prototype.sourceContentFor=function(t,n){if(!this.sourcesContent)return null;var o=this._findSourceIndex(t);if(o>=0)return this.sourcesContent[o];var r=t;this.sourceRoot!=null&&(r=ht.relative(this.sourceRoot,r));var a;if(this.sourceRoot!=null&&(a=ht.urlParse(this.sourceRoot))){var l=r.replace(/^file:\/\//,"");if(a.scheme=="file"&&this._sources.has(l))return this.sourcesContent[this._sources.indexOf(l)];if((!a.path||a.path=="/")&&this._sources.has("/"+r))return this.sourcesContent[this._sources.indexOf("/"+r)]}if(n)return null;throw new Error('"'+r+'" is not in the SourceMap.')};Dn.prototype.generatedPositionFor=function(t){var n=ht.getArg(t,"source");if(n=this._findSourceIndex(n),n<0)return{line:null,column:null,lastColumn:null};var o={source:n,originalLine:ht.getArg(t,"line"),originalColumn:ht.getArg(t,"column")},r=this._findMapping(o,this._originalMappings,"originalLine","originalColumn",ht.compareByOriginalPositions,ht.getArg(t,"bias",cn.GREATEST_LOWER_BOUND));if(r>=0){var a=this._originalMappings[r];if(a.source===o.source)return{line:ht.getArg(a,"generatedLine",null),column:ht.getArg(a,"generatedColumn",null),lastColumn:ht.getArg(a,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}};Vf.BasicSourceMapConsumer=Dn;function dr(e,t){var n=e;typeof e=="string"&&(n=ht.parseSourceMapInput(e));var o=ht.getArg(n,"version"),r=ht.getArg(n,"sections");if(o!=this._version)throw new Error("Unsupported version: "+o);this._sources=new Bs,this._names=new Bs;var a={line:-1,column:0};this._sections=r.map(function(l){if(l.url)throw new Error("Support for url field in sections not implemented.");var s=ht.getArg(l,"offset"),u=ht.getArg(s,"line"),c=ht.getArg(s,"column");if(u=0;n--)this.prepend(t[n]);else if(t[si]||typeof t=="string")this.children.unshift(t);else throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+t);return this};Co.prototype.walk=function(t){for(var n,o=0,r=this.children.length;o0){for(n=[],o=0;ot[E]===Dre&&t[E+1]===Xn,s=E=>t[E]===Xn,u=E=>t[E]===Bre,c=E=>t[E]===Fre,f=E=>l(E)||s(E)||u(E)||c(E),d=()=>n,p=()=>o,m=()=>r,v=()=>a,h=E=>l(E)||u(E)||c(E)?Xn:t[E],C=()=>h(n),g=()=>h(n+a);function y(){return a=0,f(n)&&(o++,r=0),l(n)&&n++,n++,r++,t[n]}function _(){return l(n+a)&&a++,a++,t[n+a]}function b(){n=0,o=1,r=1,a=0}function w(E=0){a=E}function S(){const E=n+a;for(;E!==n;)y();a=0}return{index:d,line:p,column:m,peekOffset:v,charAt:h,currentChar:C,currentPeek:g,next:y,peek:_,reset:b,resetPeek:w,skipToPeek:S}}const ca=void 0,J1="'",Hre="tokenizer";function zre(e,t={}){const n=t.location!==!1,o=Vre(e),r=()=>o.index(),a=()=>xT(o.line(),o.column(),o.index()),l=a(),s=r(),u={currentType:14,offset:s,startLoc:l,endLoc:l,lastType:14,lastOffset:s,lastStartLoc:l,lastEndLoc:l,braceNest:0,inLinked:!1,text:""},c=()=>u,{onError:f}=t;function d(B,z,Z,...ue){const se=c();if(z.column+=Z,z.offset+=Z,f){const me=Ld(se.startLoc,z),_e=ab(B,me,{domain:Hre,args:ue});f(_e)}}function p(B,z,Z){B.endLoc=a(),B.currentType=z;const ue={type:z};return n&&(ue.loc=Ld(B.startLoc,B.endLoc)),Z!=null&&(ue.value=Z),ue}const m=B=>p(B,14);function v(B,z){return B.currentChar()===z?(B.next(),z):(d(Nt.EXPECTED_TOKEN,a(),0,z),"")}function h(B){let z="";for(;B.currentPeek()===Dr||B.currentPeek()===Xn;)z+=B.currentPeek(),B.peek();return z}function C(B){const z=h(B);return B.skipToPeek(),z}function g(B){if(B===ca)return!1;const z=B.charCodeAt(0);return z>=97&&z<=122||z>=65&&z<=90||z===95}function y(B){if(B===ca)return!1;const z=B.charCodeAt(0);return z>=48&&z<=57}function _(B,z){const{currentType:Z}=z;if(Z!==2)return!1;h(B);const ue=g(B.currentPeek());return B.resetPeek(),ue}function b(B,z){const{currentType:Z}=z;if(Z!==2)return!1;h(B);const ue=B.currentPeek()==="-"?B.peek():B.currentPeek(),se=y(ue);return B.resetPeek(),se}function w(B,z){const{currentType:Z}=z;if(Z!==2)return!1;h(B);const ue=B.currentPeek()===J1;return B.resetPeek(),ue}function S(B,z){const{currentType:Z}=z;if(Z!==8)return!1;h(B);const ue=B.currentPeek()===".";return B.resetPeek(),ue}function E(B,z){const{currentType:Z}=z;if(Z!==9)return!1;h(B);const ue=g(B.currentPeek());return B.resetPeek(),ue}function $(B,z){const{currentType:Z}=z;if(!(Z===8||Z===12))return!1;h(B);const ue=B.currentPeek()===":";return B.resetPeek(),ue}function O(B,z){const{currentType:Z}=z;if(Z!==10)return!1;const ue=()=>{const me=B.currentPeek();return me==="{"?g(B.peek()):me==="@"||me==="%"||me==="|"||me===":"||me==="."||me===Dr||!me?!1:me===Xn?(B.peek(),ue()):g(me)},se=ue();return B.resetPeek(),se}function A(B){h(B);const z=B.currentPeek()==="|";return B.resetPeek(),z}function M(B){const z=h(B),Z=B.currentPeek()==="%"&&B.peek()==="{";return B.resetPeek(),{isModulo:Z,hasSpace:z.length>0}}function D(B,z=!0){const Z=(se=!1,me="",_e=!1)=>{const $e=B.currentPeek();return $e==="{"?me==="%"?!1:se:$e==="@"||!$e?me==="%"?!0:se:$e==="%"?(B.peek(),Z(se,"%",!0)):$e==="|"?me==="%"||_e?!0:!(me===Dr||me===Xn):$e===Dr?(B.peek(),Z(!0,Dr,_e)):$e===Xn?(B.peek(),Z(!0,Xn,_e)):!0},ue=Z();return z&&B.resetPeek(),ue}function U(B,z){const Z=B.currentChar();return Z===ca?ca:z(Z)?(B.next(),Z):null}function j(B){return U(B,Z=>{const ue=Z.charCodeAt(0);return ue>=97&&ue<=122||ue>=65&&ue<=90||ue>=48&&ue<=57||ue===95||ue===36})}function W(B){return U(B,Z=>{const ue=Z.charCodeAt(0);return ue>=48&&ue<=57})}function L(B){return U(B,Z=>{const ue=Z.charCodeAt(0);return ue>=48&&ue<=57||ue>=65&&ue<=70||ue>=97&&ue<=102})}function P(B){let z="",Z="";for(;z=W(B);)Z+=z;return Z}function x(B){C(B);const z=B.currentChar();return z!=="%"&&d(Nt.EXPECTED_TOKEN,a(),0,z),B.next(),"%"}function I(B){let z="";for(;;){const Z=B.currentChar();if(Z==="{"||Z==="}"||Z==="@"||Z==="|"||!Z)break;if(Z==="%")if(D(B))z+=Z,B.next();else break;else if(Z===Dr||Z===Xn)if(D(B))z+=Z,B.next();else{if(A(B))break;z+=Z,B.next()}else z+=Z,B.next()}return z}function H(B){C(B);let z="",Z="";for(;z=j(B);)Z+=z;return B.currentChar()===ca&&d(Nt.UNTERMINATED_CLOSING_BRACE,a(),0),Z}function G(B){C(B);let z="";return B.currentChar()==="-"?(B.next(),z+=`-${P(B)}`):z+=P(B),B.currentChar()===ca&&d(Nt.UNTERMINATED_CLOSING_BRACE,a(),0),z}function J(B){C(B),v(B,"'");let z="",Z="";const ue=me=>me!==J1&&me!==Xn;for(;z=U(B,ue);)z==="\\"?Z+=ee(B):Z+=z;const se=B.currentChar();return se===Xn||se===ca?(d(Nt.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,a(),0),se===Xn&&(B.next(),v(B,"'")),Z):(v(B,"'"),Z)}function ee(B){const z=B.currentChar();switch(z){case"\\":case"'":return B.next(),`\\${z}`;case"u":return fe(B,z,4);case"U":return fe(B,z,6);default:return d(Nt.UNKNOWN_ESCAPE_SEQUENCE,a(),0,z),""}}function fe(B,z,Z){v(B,z);let ue="";for(let se=0;sese!=="{"&&se!=="}"&&se!==Dr&&se!==Xn;for(;z=U(B,ue);)Z+=z;return Z}function oe(B){let z="",Z="";for(;z=j(B);)Z+=z;return Z}function ke(B){const z=(Z=!1,ue)=>{const se=B.currentChar();return se==="{"||se==="%"||se==="@"||se==="|"||!se||se===Dr?ue:se===Xn?(ue+=se,B.next(),z(Z,ue)):(ue+=se,B.next(),z(!0,ue))};return z(!1,"")}function ae(B){C(B);const z=v(B,"|");return C(B),z}function Oe(B,z){let Z=null;switch(B.currentChar()){case"{":return z.braceNest>=1&&d(Nt.NOT_ALLOW_NEST_PLACEHOLDER,a(),0),B.next(),Z=p(z,2,"{"),C(B),z.braceNest++,Z;case"}":return z.braceNest>0&&z.currentType===2&&d(Nt.EMPTY_PLACEHOLDER,a(),0),B.next(),Z=p(z,3,"}"),z.braceNest--,z.braceNest>0&&C(B),z.inLinked&&z.braceNest===0&&(z.inLinked=!1),Z;case"@":return z.braceNest>0&&d(Nt.UNTERMINATED_CLOSING_BRACE,a(),0),Z=we(B,z)||m(z),z.braceNest=0,Z;default:let se=!0,me=!0,_e=!0;if(A(B))return z.braceNest>0&&d(Nt.UNTERMINATED_CLOSING_BRACE,a(),0),Z=p(z,1,ae(B)),z.braceNest=0,z.inLinked=!1,Z;if(z.braceNest>0&&(z.currentType===5||z.currentType===6||z.currentType===7))return d(Nt.UNTERMINATED_CLOSING_BRACE,a(),0),z.braceNest=0,ge(B,z);if(se=_(B,z))return Z=p(z,5,H(B)),C(B),Z;if(me=b(B,z))return Z=p(z,6,G(B)),C(B),Z;if(_e=w(B,z))return Z=p(z,7,J(B)),C(B),Z;if(!se&&!me&&!_e)return Z=p(z,13,Te(B)),d(Nt.INVALID_TOKEN_IN_PLACEHOLDER,a(),0,Z.value),C(B),Z;break}return Z}function we(B,z){const{currentType:Z}=z;let ue=null;const se=B.currentChar();switch((Z===8||Z===9||Z===12||Z===10)&&(se===Xn||se===Dr)&&d(Nt.INVALID_LINKED_FORMAT,a(),0),se){case"@":return B.next(),ue=p(z,8,"@"),z.inLinked=!0,ue;case".":return C(B),B.next(),p(z,9,".");case":":return C(B),B.next(),p(z,10,":");default:return A(B)?(ue=p(z,1,ae(B)),z.braceNest=0,z.inLinked=!1,ue):S(B,z)||$(B,z)?(C(B),we(B,z)):E(B,z)?(C(B),p(z,12,oe(B))):O(B,z)?(C(B),se==="{"?Oe(B,z)||ue:p(z,11,ke(B))):(Z===8&&d(Nt.INVALID_LINKED_FORMAT,a(),0),z.braceNest=0,z.inLinked=!1,ge(B,z))}}function ge(B,z){let Z={type:14};if(z.braceNest>0)return Oe(B,z)||m(z);if(z.inLinked)return we(B,z)||m(z);switch(B.currentChar()){case"{":return Oe(B,z)||m(z);case"}":return d(Nt.UNBALANCED_CLOSING_BRACE,a(),0),B.next(),p(z,3,"}");case"@":return we(B,z)||m(z);default:if(A(B))return Z=p(z,1,ae(B)),z.braceNest=0,z.inLinked=!1,Z;const{isModulo:se,hasSpace:me}=M(B);if(se)return me?p(z,0,I(B)):p(z,4,x(B));if(D(B))return p(z,0,I(B));break}return Z}function q(){const{currentType:B,offset:z,startLoc:Z,endLoc:ue}=u;return u.lastType=B,u.lastOffset=z,u.lastStartLoc=Z,u.lastEndLoc=ue,u.offset=r(),u.startLoc=a(),o.currentChar()===ca?p(u,14):ge(o,u)}return{nextToken:q,currentOffset:r,currentPosition:a,context:c}}const DT="parser",jre=/(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g;function Wre(e,t,n){switch(e){case"\\\\":return"\\";case"\\'":return"'";default:{const o=parseInt(t||n,16);return o<=55295||o>=57344?String.fromCodePoint(o):"�"}}}function FT(e={}){const t=e.location!==!1,{onError:n}=e;function o(g,y,_,b,...w){const S=g.currentPosition();if(S.offset+=b,S.column+=b,n){const E=Ld(_,S),$=ab(y,E,{domain:DT,args:w});n($)}}function r(g,y,_){const b={type:g,start:y,end:y};return t&&(b.loc={start:_,end:_}),b}function a(g,y,_,b){g.end=y,t&&g.loc&&(g.loc.end=_)}function l(g,y){const _=g.context(),b=r(3,_.offset,_.startLoc);return b.value=y,a(b,g.currentOffset(),g.currentPosition()),b}function s(g,y){const _=g.context(),{lastOffset:b,lastStartLoc:w}=_,S=r(5,b,w);return S.index=parseInt(y,10),g.nextToken(),a(S,g.currentOffset(),g.currentPosition()),S}function u(g,y){const _=g.context(),{lastOffset:b,lastStartLoc:w}=_,S=r(4,b,w);return S.key=y,g.nextToken(),a(S,g.currentOffset(),g.currentPosition()),S}function c(g,y){const _=g.context(),{lastOffset:b,lastStartLoc:w}=_,S=r(9,b,w);return S.value=y.replace(jre,Wre),g.nextToken(),a(S,g.currentOffset(),g.currentPosition()),S}function f(g){const y=g.nextToken(),_=g.context(),{lastOffset:b,lastStartLoc:w}=_,S=r(8,b,w);return y.type!==12?(o(g,Nt.UNEXPECTED_EMPTY_LINKED_MODIFIER,_.lastStartLoc,0),S.value="",a(S,b,w),{nextConsumeToken:y,node:S}):(y.value==null&&o(g,Nt.UNEXPECTED_LEXICAL_ANALYSIS,_.lastStartLoc,0,fr(y)),S.value=y.value||"",a(S,g.currentOffset(),g.currentPosition()),{node:S})}function d(g,y){const _=g.context(),b=r(7,_.offset,_.startLoc);return b.value=y,a(b,g.currentOffset(),g.currentPosition()),b}function p(g){const y=g.context(),_=r(6,y.offset,y.startLoc);let b=g.nextToken();if(b.type===9){const w=f(g);_.modifier=w.node,b=w.nextConsumeToken||g.nextToken()}switch(b.type!==10&&o(g,Nt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,fr(b)),b=g.nextToken(),b.type===2&&(b=g.nextToken()),b.type){case 11:b.value==null&&o(g,Nt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,fr(b)),_.key=d(g,b.value||"");break;case 5:b.value==null&&o(g,Nt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,fr(b)),_.key=u(g,b.value||"");break;case 6:b.value==null&&o(g,Nt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,fr(b)),_.key=s(g,b.value||"");break;case 7:b.value==null&&o(g,Nt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,fr(b)),_.key=c(g,b.value||"");break;default:o(g,Nt.UNEXPECTED_EMPTY_LINKED_KEY,y.lastStartLoc,0);const w=g.context(),S=r(7,w.offset,w.startLoc);return S.value="",a(S,w.offset,w.startLoc),_.key=S,a(_,w.offset,w.startLoc),{nextConsumeToken:b,node:_}}return a(_,g.currentOffset(),g.currentPosition()),{node:_}}function m(g){const y=g.context(),_=y.currentType===1?g.currentOffset():y.offset,b=y.currentType===1?y.endLoc:y.startLoc,w=r(2,_,b);w.items=[];let S=null;do{const O=S||g.nextToken();switch(S=null,O.type){case 0:O.value==null&&o(g,Nt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,fr(O)),w.items.push(l(g,O.value||""));break;case 6:O.value==null&&o(g,Nt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,fr(O)),w.items.push(s(g,O.value||""));break;case 5:O.value==null&&o(g,Nt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,fr(O)),w.items.push(u(g,O.value||""));break;case 7:O.value==null&&o(g,Nt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,fr(O)),w.items.push(c(g,O.value||""));break;case 8:const A=p(g);w.items.push(A.node),S=A.nextConsumeToken||null;break}}while(y.currentType!==14&&y.currentType!==1);const E=y.currentType===1?y.lastOffset:g.currentOffset(),$=y.currentType===1?y.lastEndLoc:g.currentPosition();return a(w,E,$),w}function v(g,y,_,b){const w=g.context();let S=b.items.length===0;const E=r(1,y,_);E.cases=[],E.cases.push(b);do{const $=m(g);S||(S=$.items.length===0),E.cases.push($)}while(w.currentType!==14);return S&&o(g,Nt.MUST_HAVE_MESSAGES_IN_PLURAL,_,0),a(E,g.currentOffset(),g.currentPosition()),E}function h(g){const y=g.context(),{offset:_,startLoc:b}=y,w=m(g);return y.currentType===14?w:v(g,_,b,w)}function C(g){const y=zre(g,Rd.assign({},e)),_=y.context(),b=r(0,_.offset,_.startLoc);return t&&b.loc&&(b.loc.source=g),b.body=h(y),_.currentType!==14&&o(y,Nt.UNEXPECTED_LEXICAL_ANALYSIS,_.lastStartLoc,0,g[_.offset]||""),a(b,y.currentOffset(),y.currentPosition()),b}return{parse:C}}function fr(e){if(e.type===14)return"EOF";const t=(e.value||"").replace(/\r?\n/gu,"\\n");return t.length>10?t.slice(0,9)+"…":t}function Kre(e,t={}){const n={ast:e,helpers:new Set};return{context:()=>n,helper:a=>(n.helpers.add(a),a)}}function Z1(e,t){for(let n=0;nl;function u(C,g){l.code+=C,l.map&&(g&&g.loc&&g.loc!==LT&&h(g.loc.start,Qre(g)),eae(l,C))}function c(C,g=!0){const y=g?r:"";u(a?y+" ".repeat(C):y)}function f(C=!0){const g=++l.indentLevel;C&&c(g)}function d(C=!0){const g=--l.indentLevel;C&&c(g)}function p(){c(l.indentLevel)}const m=C=>`_${C}`,v=()=>l.needIndent;function h(C,g){l.map.addMapping({name:g,source:l.filename,original:{line:C.line,column:C.column-1},generated:{line:l.line,column:l.column-1}})}return n&&(l.map=new Rre.SourceMapGenerator,l.map.setSourceContent(o,l.source)),{context:s,push:u,indent:f,deindent:d,newline:p,helper:m,needIndent:v}}function Yre(e,t){const{helper:n}=e;e.push(`${n("linked")}(`),Vs(e,t.key),t.modifier?(e.push(", "),Vs(e,t.modifier),e.push(", _type")):e.push(", undefined, _type"),e.push(")")}function Gre(e,t){const{helper:n,needIndent:o}=e;e.push(`${n("normalize")}([`),e.indent(o());const r=t.items.length;for(let a=0;a1){e.push(`${n("plural")}([`),e.indent(o());const r=t.cases.length;for(let a=0;a{const n=Rd.isString(t.mode)?t.mode:"normal",o=Rd.isString(t.filename)?t.filename:"message.intl",r=!!t.sourceMap,a=t.breakLineCode!=null?t.breakLineCode:n==="arrow"?";":` +`,l=t.needIndent?t.needIndent:n!=="arrow",s=e.helpers||[],u=qre(e,{mode:n,filename:o,sourceMap:r,breakLineCode:a,needIndent:l});u.push(n==="normal"?"function __msg__ (ctx) {":"(ctx) => {"),u.indent(l),s.length>0&&(u.push(`const { ${s.map(d=>`${d}: _${d}`).join(", ")} } = ctx`),u.newline()),u.push("return "),Vs(u,e),u.deindent(l),u.push("}");const{code:c,map:f}=u.context();return{ast:e,code:c,map:f?f.toJSON():void 0}};function Qre(e){switch(e.type){case 3:case 9:case 8:case 7:return e.value;case 5:return e.index.toString();case 4:return e.key;default:return}}function eae(e,t,n=t.length){let o=0,r=-1;for(let a=0;a{l===void 0?l=s:l+=s},p[1]=()=>{l!==void 0&&(t.push(l),l=void 0)},p[2]=()=>{p[0](),r++},p[3]=()=>{if(r>0)r--,o=4,p[0]();else{if(r=0,l===void 0||(l=uae(l),l===!1))return!1;p[1]()}};function m(){const v=e[n+1];if(o===5&&v==="'"||o===6&&v==='"')return n++,s="\\"+v,p[0](),!0}for(;o!==null;)if(n++,a=e[n],!(a==="\\"&&m())){if(u=iae(a),d=Va[o],c=d[u]||d.l||8,c===8||(o=c[0],c[1]!==void 0&&(f=p[c[1]],f&&(s=a,f()===!1))))return;if(o===7)return t}}const Q1=new Map;function zT(e,t){return Ae.isObject(e)?e[t]:null}function cae(e,t){if(!Ae.isObject(e))return null;let n=Q1.get(t);if(n||(n=HT(t),n&&Q1.set(t,n)),!n)return null;const o=n.length;let r=e,a=0;for(;ae,fae=e=>"",jT="text",pae=e=>e.length===0?"":e.join(""),hae=Ae.toDisplayString;function ew(e,t){return e=Math.abs(e),t===2?e?e>1?1:0:1:e?Math.min(e,2):0}function mae(e){const t=Ae.isNumber(e.pluralIndex)?e.pluralIndex:-1;return e.named&&(Ae.isNumber(e.named.count)||Ae.isNumber(e.named.n))?Ae.isNumber(e.named.count)?e.named.count:Ae.isNumber(e.named.n)?e.named.n:t:t}function vae(e,t){t.count||(t.count=e),t.n||(t.n=e)}function WT(e={}){const t=e.locale,n=mae(e),o=Ae.isObject(e.pluralRules)&&Ae.isString(t)&&Ae.isFunction(e.pluralRules[t])?e.pluralRules[t]:ew,r=Ae.isObject(e.pluralRules)&&Ae.isString(t)&&Ae.isFunction(e.pluralRules[t])?ew:void 0,a=g=>g[o(n,g.length,r)],l=e.list||[],s=g=>l[g],u=e.named||{};Ae.isNumber(e.pluralIndex)&&vae(n,u);const c=g=>u[g];function f(g){const y=Ae.isFunction(e.messages)?e.messages(g):Ae.isObject(e.messages)?e.messages[g]:!1;return y||(e.parent?e.parent.message(g):fae)}const d=g=>e.modifiers?e.modifiers[g]:dae,p=Ae.isPlainObject(e.processor)&&Ae.isFunction(e.processor.normalize)?e.processor.normalize:pae,m=Ae.isPlainObject(e.processor)&&Ae.isFunction(e.processor.interpolate)?e.processor.interpolate:hae,v=Ae.isPlainObject(e.processor)&&Ae.isString(e.processor.type)?e.processor.type:jT,C={list:s,named:c,plural:a,linked:(g,...y)=>{const[_,b]=y;let w="text",S="";y.length===1?Ae.isObject(_)?(S=_.modifier||S,w=_.type||w):Ae.isString(_)&&(S=_||S):y.length===2&&(Ae.isString(_)&&(S=_||S),Ae.isString(b)&&(w=b||w));let E=f(g)(C);return w==="vnode"&&Ae.isArray(E)&&S&&(E=E[0]),S?d(S)(E,w):E},message:f,type:v,interpolate:m,normalize:p};return C}let zs=null;function gae(e){zs=e}function bae(){return zs}function yae(e,t,n){zs&&zs.emit(VT.IntlifyDevToolsHooks.I18nInit,{timestamp:Date.now(),i18n:e,version:t,meta:n})}const wae=_ae(VT.IntlifyDevToolsHooks.FunctionTranslate);function _ae(e){return t=>zs&&zs.emit(e,t)}const Ka={NOT_FOUND_KEY:1,FALLBACK_TO_TRANSLATE:2,CANNOT_FORMAT_NUMBER:3,FALLBACK_TO_NUMBER_FORMAT:4,CANNOT_FORMAT_DATE:5,FALLBACK_TO_DATE_FORMAT:6,__EXTEND_POINT__:7},Cae={[Ka.NOT_FOUND_KEY]:"Not found '{key}' key in '{locale}' locale messages.",[Ka.FALLBACK_TO_TRANSLATE]:"Fall back to translate '{key}' key with '{target}' locale.",[Ka.CANNOT_FORMAT_NUMBER]:"Cannot format a number value due to not supported Intl.NumberFormat.",[Ka.FALLBACK_TO_NUMBER_FORMAT]:"Fall back to number format '{key}' key with '{target}' locale.",[Ka.CANNOT_FORMAT_DATE]:"Cannot format a date value due to not supported Intl.DateTimeFormat.",[Ka.FALLBACK_TO_DATE_FORMAT]:"Fall back to datetime format '{key}' key with '{target}' locale."};function Sae(e,...t){return Ae.format(Cae[e],...t)}function KT(e,t,n){return[...new Set([n,...Ae.isArray(t)?t:Ae.isObject(t)?Object.keys(t):Ae.isString(t)?[t]:[n]])]}function kae(e,t,n){const o=Ae.isString(n)?n:ib,r=e;r.__localeChainCache||(r.__localeChainCache=new Map);let a=r.__localeChainCache.get(o);if(!a){a=[];let l=[n];for(;Ae.isArray(l);)l=tw(a,l,t);const s=Ae.isArray(t)||!Ae.isPlainObject(t)?t:t.default?t.default:null;l=Ae.isString(s)?[s]:s,Ae.isArray(l)&&tw(a,l,!1),r.__localeChainCache.set(o,a)}return a}function tw(e,t,n){let o=!0;for(let r=0;r`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;function Oae(){return{upper:(e,t)=>t==="text"&&Ae.isString(e)?e.toUpperCase():t==="vnode"&&Ae.isObject(e)&&"__v_isVNode"in e?e.children.toUpperCase():e,lower:(e,t)=>t==="text"&&Ae.isString(e)?e.toLowerCase():t==="vnode"&&Ae.isObject(e)&&"__v_isVNode"in e?e.children.toLowerCase():e,capitalize:(e,t)=>t==="text"&&Ae.isString(e)?nw(e):t==="vnode"&&Ae.isObject(e)&&"__v_isVNode"in e?nw(e.children):e}}let qT;function Nae(e){qT=e}let YT;function Iae(e){YT=e}let GT;function Mae(e){GT=e}let XT=null;const Aae=e=>{XT=e},Pae=()=>XT;let JT=null;const Rae=e=>{JT=e},Lae=()=>JT;let ow=0;function xae(e={}){const t=Ae.isString(e.version)?e.version:UT,n=Ae.isString(e.locale)?e.locale:ib,o=Ae.isArray(e.fallbackLocale)||Ae.isPlainObject(e.fallbackLocale)||Ae.isString(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:n,r=Ae.isPlainObject(e.messages)?e.messages:{[n]:{}},a=Ae.isPlainObject(e.datetimeFormats)?e.datetimeFormats:{[n]:{}},l=Ae.isPlainObject(e.numberFormats)?e.numberFormats:{[n]:{}},s=Ae.assign({},e.modifiers||{},Oae()),u=e.pluralRules||{},c=Ae.isFunction(e.missing)?e.missing:null,f=Ae.isBoolean(e.missingWarn)||Ae.isRegExp(e.missingWarn)?e.missingWarn:!0,d=Ae.isBoolean(e.fallbackWarn)||Ae.isRegExp(e.fallbackWarn)?e.fallbackWarn:!0,p=!!e.fallbackFormat,m=!!e.unresolving,v=Ae.isFunction(e.postTranslation)?e.postTranslation:null,h=Ae.isPlainObject(e.processor)?e.processor:null,C=Ae.isBoolean(e.warnHtmlMessage)?e.warnHtmlMessage:!0,g=!!e.escapeParameter,y=Ae.isFunction(e.messageCompiler)?e.messageCompiler:qT,_=Ae.isFunction(e.messageResolver)?e.messageResolver:YT||zT,b=Ae.isFunction(e.localeFallbacker)?e.localeFallbacker:GT||KT,w=Ae.isObject(e.fallbackContext)?e.fallbackContext:void 0,S=Ae.isFunction(e.onWarn)?e.onWarn:Ae.warn,E=e,$=Ae.isObject(E.__datetimeFormatters)?E.__datetimeFormatters:new Map,O=Ae.isObject(E.__numberFormatters)?E.__numberFormatters:new Map,A=Ae.isObject(E.__meta)?E.__meta:{};ow++;const M={version:t,cid:ow,locale:n,fallbackLocale:o,messages:r,modifiers:s,pluralRules:u,missing:c,missingWarn:f,fallbackWarn:d,fallbackFormat:p,unresolving:m,postTranslation:v,processor:h,warnHtmlMessage:C,escapeParameter:g,messageCompiler:y,messageResolver:_,localeFallbacker:b,fallbackContext:w,onWarn:S,__meta:A};return M.datetimeFormats=a,M.numberFormats=l,M.__datetimeFormatters=$,M.__numberFormatters=O,M}function Dae(e,t){return e instanceof RegExp?e.test(t):e}function Fae(e,t){return e instanceof RegExp?e.test(t):e}function zf(e,t,n,o,r){const{missing:a,onWarn:l}=e;if(a!==null){const s=a(e,n,t,r);return Ae.isString(s)?s:t}else return t}function Bae(e,t,n){const o=e;o.__localeChainCache=new Map,e.localeFallbacker(e,n,t)}const Vae=e=>e;let Tm=Object.create(null);function Hae(){Tm=Object.create(null)}function zae(e,t={}){{const o=(t.onCacheKey||Vae)(e),r=Tm[o];if(r)return r;let a=!1;const l=t.onError||Hs.defaultOnError;t.onError=c=>{a=!0,l(c)};const{code:s}=Hs.baseCompile(e,t),u=new Function(`return ${s}`)();return a?u:Tm[o]=u}}let ZT=Hs.CompileErrorCodes.__EXTEND_POINT__;const Vp=()=>++ZT,wr={INVALID_ARGUMENT:ZT,INVALID_DATE_ARGUMENT:Vp(),INVALID_ISO_DATE_ARGUMENT:Vp(),__EXTEND_POINT__:Vp()};function rl(e){return Hs.createCompileError(e,null,void 0)}wr.INVALID_ARGUMENT+"",wr.INVALID_DATE_ARGUMENT+"",wr.INVALID_ISO_DATE_ARGUMENT+"";const rw=()=>"",ka=e=>Ae.isFunction(e);function jae(e,...t){const{fallbackFormat:n,postTranslation:o,unresolving:r,messageCompiler:a,fallbackLocale:l,messages:s}=e,[u,c]=t$(...t),f=Ae.isBoolean(c.missingWarn)?c.missingWarn:e.missingWarn,d=Ae.isBoolean(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn,p=Ae.isBoolean(c.escapeParameter)?c.escapeParameter:e.escapeParameter,m=!!c.resolvedMessage,v=Ae.isString(c.default)||Ae.isBoolean(c.default)?Ae.isBoolean(c.default)?a?u:()=>u:c.default:n?a?u:()=>u:"",h=n||v!=="",C=Ae.isString(c.locale)?c.locale:e.locale;p&&Wae(c);let[g,y,_]=m?[u,C,s[C]||{}]:QT(e,u,C,l,d,f),b=g,w=u;if(!m&&!(Ae.isString(b)||ka(b))&&h&&(b=v,w=b),!m&&(!(Ae.isString(b)||ka(b))||!Ae.isString(y)))return r?Hf:u;let S=!1;const E=()=>{S=!0},$=ka(b)?b:e$(e,u,y,b,w,E);if(S)return b;const O=qae(e,y,_,c),A=WT(O),M=Kae(e,$,A);return o?o(M,u):M}function Wae(e){Ae.isArray(e.list)?e.list=e.list.map(t=>Ae.isString(t)?Ae.escapeHtml(t):t):Ae.isObject(e.named)&&Object.keys(e.named).forEach(t=>{Ae.isString(e.named[t])&&(e.named[t]=Ae.escapeHtml(e.named[t]))})}function QT(e,t,n,o,r,a){const{messages:l,onWarn:s,messageResolver:u,localeFallbacker:c}=e,f=c(e,o,n);let d={},p,m=null;const v="translate";for(let h=0;ho;return c.locale=n,c.key=t,c}const u=l(o,Uae(e,n,r,o,s,a));return u.locale=n,u.key=t,u.source=o,u}function Kae(e,t,n){return t(n)}function t$(...e){const[t,n,o]=e,r={};if(!Ae.isString(t)&&!Ae.isNumber(t)&&!ka(t))throw rl(wr.INVALID_ARGUMENT);const a=Ae.isNumber(t)?String(t):(ka(t),t);return Ae.isNumber(n)?r.plural=n:Ae.isString(n)?r.default=n:Ae.isPlainObject(n)&&!Ae.isEmptyObject(n)?r.named=n:Ae.isArray(n)&&(r.list=n),Ae.isNumber(o)?r.plural=o:Ae.isString(o)?r.default=o:Ae.isPlainObject(o)&&Ae.assign(r,o),[a,r]}function Uae(e,t,n,o,r,a){return{warnHtmlMessage:r,onError:l=>{throw a&&a(l),l},onCacheKey:l=>Ae.generateFormatCacheKey(t,n,l)}}function qae(e,t,n,o){const{modifiers:r,pluralRules:a,messageResolver:l,fallbackLocale:s,fallbackWarn:u,missingWarn:c,fallbackContext:f}=e,p={locale:t,modifiers:r,pluralRules:a,messages:m=>{let v=l(n,m);if(v==null&&f){const[,,h]=QT(f,m,t,s,u,c);v=l(h,m)}if(Ae.isString(v)){let h=!1;const g=e$(e,m,t,v,m,()=>{h=!0});return h?rw:g}else return ka(v)?v:rw}};return e.processor&&(p.processor=e.processor),o.list&&(p.list=o.list),o.named&&(p.named=o.named),Ae.isNumber(o.plural)&&(p.pluralIndex=o.plural),p}function Yae(e,...t){const{datetimeFormats:n,unresolving:o,fallbackLocale:r,onWarn:a,localeFallbacker:l}=e,{__datetimeFormatters:s}=e,[u,c,f,d]=o$(...t),p=Ae.isBoolean(f.missingWarn)?f.missingWarn:e.missingWarn;Ae.isBoolean(f.fallbackWarn)?f.fallbackWarn:e.fallbackWarn;const m=!!f.part,v=Ae.isString(f.locale)?f.locale:e.locale,h=l(e,r,v);if(!Ae.isString(u)||u==="")return new Intl.DateTimeFormat(v,d).format(c);let C={},g,y=null;const _="datetime format";for(let S=0;S{n$.includes(u)?l[u]=n[u]:a[u]=n[u]}),Ae.isString(o)?a.locale=o:Ae.isPlainObject(o)&&(l=o),Ae.isPlainObject(r)&&(l=r),[a.key||"",s,a,l]}function Gae(e,t,n){const o=e;for(const r in n){const a=`${t}__${r}`;o.__datetimeFormatters.has(a)&&o.__datetimeFormatters.delete(a)}}function Xae(e,...t){const{numberFormats:n,unresolving:o,fallbackLocale:r,onWarn:a,localeFallbacker:l}=e,{__numberFormatters:s}=e,[u,c,f,d]=a$(...t),p=Ae.isBoolean(f.missingWarn)?f.missingWarn:e.missingWarn;Ae.isBoolean(f.fallbackWarn)?f.fallbackWarn:e.fallbackWarn;const m=!!f.part,v=Ae.isString(f.locale)?f.locale:e.locale,h=l(e,r,v);if(!Ae.isString(u)||u==="")return new Intl.NumberFormat(v,d).format(c);let C={},g,y=null;const _="number format";for(let S=0;S{r$.includes(u)?l[u]=n[u]:a[u]=n[u]}),Ae.isString(o)?a.locale=o:Ae.isPlainObject(o)&&(l=o),Ae.isPlainObject(r)&&(l=r),[a.key||"",s,a,l]}function Jae(e,t,n){const o=e;for(const r in n){const a=`${t}__${r}`;o.__numberFormatters.has(a)&&o.__numberFormatters.delete(a)}}Ot.CompileErrorCodes=Hs.CompileErrorCodes;Ot.createCompileError=Hs.createCompileError;Ot.CoreErrorCodes=wr;Ot.CoreWarnCodes=Ka;Ot.DATETIME_FORMAT_OPTIONS_KEYS=n$;Ot.DEFAULT_LOCALE=ib;Ot.DEFAULT_MESSAGE_DATA_TYPE=jT;Ot.MISSING_RESOLVE_VALUE=$ae;Ot.NOT_REOSLVED=Hf;Ot.NUMBER_FORMAT_OPTIONS_KEYS=r$;Ot.VERSION=UT;Ot.clearCompileCache=Hae;Ot.clearDateTimeFormat=Gae;Ot.clearNumberFormat=Jae;Ot.compileToFunction=zae;Ot.createCoreContext=xae;Ot.createCoreError=rl;Ot.createMessageContext=WT;Ot.datetime=Yae;Ot.fallbackWithLocaleChain=kae;Ot.fallbackWithSimple=KT;Ot.getAdditionalMeta=Pae;Ot.getDevToolsHook=bae;Ot.getFallbackContext=Lae;Ot.getWarnMessage=Sae;Ot.handleMissing=zf;Ot.initI18nDevTools=yae;Ot.isMessageFunction=ka;Ot.isTranslateFallbackWarn=Dae;Ot.isTranslateMissingWarn=Fae;Ot.number=Xae;Ot.parse=HT;Ot.parseDateTimeArgs=o$;Ot.parseNumberArgs=a$;Ot.parseTranslateArgs=t$;Ot.registerLocaleFallbacker=Mae;Ot.registerMessageCompiler=Nae;Ot.registerMessageResolver=Iae;Ot.resolveValue=cae;Ot.resolveWithKeyValue=zT;Ot.setAdditionalMeta=Aae;Ot.setDevToolsHook=gae;Ot.setFallbackContext=Rae;Ot.translate=jae;Ot.translateDevTools=wae;Ot.updateFallbackLocale=Bae;wT.exports=Ot;var Zae=wT.exports;const Qae=mV(kI);/*! + * vue-i18n v9.2.2 + * (c) 2022 kazuya kawaguchi + * Released under the MIT License. + */Object.defineProperty(Pr,"__esModule",{value:!0});var It=Zae,Rt=Qae,Me=Jg;const l$="9.2.2";let s$=It.CompileErrorCodes.__EXTEND_POINT__;const oo=()=>++s$,mn={UNEXPECTED_RETURN_TYPE:s$,INVALID_ARGUMENT:oo(),MUST_BE_CALL_SETUP_TOP:oo(),NOT_INSLALLED:oo(),NOT_AVAILABLE_IN_LEGACY_MODE:oo(),REQUIRED_VALUE:oo(),INVALID_VALUE:oo(),CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN:oo(),NOT_INSLALLED_WITH_PROVIDE:oo(),UNEXPECTED_ERROR:oo(),NOT_COMPATIBLE_LEGACY_VUE_I18N:oo(),BRIDGE_SUPPORT_VUE_2_ONLY:oo(),MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION:oo(),NOT_AVAILABLE_COMPOSITION_IN_LEGACY:oo(),__EXTEND_POINT__:oo()};function _n(e,...t){return It.createCompileError(e,null,void 0)}const $m=Me.makeSymbol("__transrateVNode"),Om=Me.makeSymbol("__datetimeParts"),Nm=Me.makeSymbol("__numberParts"),i$=Me.makeSymbol("__setPluralRules");Me.makeSymbol("__intlifyMeta");const u$=Me.makeSymbol("__injectWithOption"),ele="__VUE_I18N_BRIDGE__";function Im(e){if(!Me.isObject(e))return e;for(const t in e)if(Me.hasOwn(e,t))if(!t.includes("."))Me.isObject(e[t])&&Im(e[t]);else{const n=t.split("."),o=n.length-1;let r=e;for(let a=0;a{if("locale"in s&&"resource"in s){const{locale:u,resource:c}=s;u?(l[u]=l[u]||{},Hi(c,l[u])):Hi(c,l)}else Me.isString(s)&&Hi(JSON.parse(s),l)}),r==null&&a)for(const s in l)Me.hasOwn(l,s)&&Im(l[s]);return l}const kc=e=>!Me.isObject(e)||Me.isArray(e);function Hi(e,t){if(kc(e)||kc(t))throw _n(mn.INVALID_VALUE);for(const n in e)Me.hasOwn(e,n)&&(kc(e[n])||kc(t[n])?t[n]=e[n]:Hi(e[n],t[n]))}function tle(e){return e.type}function c$(e,t,n){let o=Me.isObject(t.messages)?t.messages:{};"__i18nGlobal"in n&&(o=jf(e.locale.value,{messages:o,__i18n:n.__i18nGlobal}));const r=Object.keys(o);r.length&&r.forEach(a=>{e.mergeLocaleMessage(a,o[a])});{if(Me.isObject(t.datetimeFormats)){const a=Object.keys(t.datetimeFormats);a.length&&a.forEach(l=>{e.mergeDateTimeFormat(l,t.datetimeFormats[l])})}if(Me.isObject(t.numberFormats)){const a=Object.keys(t.numberFormats);a.length&&a.forEach(l=>{e.mergeNumberFormat(l,t.numberFormats[l])})}}}function aw(e){return Rt.createVNode(Rt.Text,null,e,0)}let lw=0;function sw(e){return(t,n,o,r)=>e(n,o,Rt.getCurrentInstance()||void 0,r)}function ub(e={},t){const{__root:n}=e,o=n===void 0;let r=Me.isBoolean(e.inheritLocale)?e.inheritLocale:!0;const a=Rt.ref(n&&r?n.locale.value:Me.isString(e.locale)?e.locale:It.DEFAULT_LOCALE),l=Rt.ref(n&&r?n.fallbackLocale.value:Me.isString(e.fallbackLocale)||Me.isArray(e.fallbackLocale)||Me.isPlainObject(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:a.value),s=Rt.ref(jf(a.value,e)),u=Rt.ref(Me.isPlainObject(e.datetimeFormats)?e.datetimeFormats:{[a.value]:{}}),c=Rt.ref(Me.isPlainObject(e.numberFormats)?e.numberFormats:{[a.value]:{}});let f=n?n.missingWarn:Me.isBoolean(e.missingWarn)||Me.isRegExp(e.missingWarn)?e.missingWarn:!0,d=n?n.fallbackWarn:Me.isBoolean(e.fallbackWarn)||Me.isRegExp(e.fallbackWarn)?e.fallbackWarn:!0,p=n?n.fallbackRoot:Me.isBoolean(e.fallbackRoot)?e.fallbackRoot:!0,m=!!e.fallbackFormat,v=Me.isFunction(e.missing)?e.missing:null,h=Me.isFunction(e.missing)?sw(e.missing):null,C=Me.isFunction(e.postTranslation)?e.postTranslation:null,g=n?n.warnHtmlMessage:Me.isBoolean(e.warnHtmlMessage)?e.warnHtmlMessage:!0,y=!!e.escapeParameter;const _=n?n.modifiers:Me.isPlainObject(e.modifiers)?e.modifiers:{};let b=e.pluralRules||n&&n.pluralRules,w;w=(()=>{o&&It.setFallbackContext(null);const ce={version:l$,locale:a.value,fallbackLocale:l.value,messages:s.value,modifiers:_,pluralRules:b,missing:h===null?void 0:h,missingWarn:f,fallbackWarn:d,fallbackFormat:m,unresolving:!0,postTranslation:C===null?void 0:C,warnHtmlMessage:g,escapeParameter:y,messageResolver:e.messageResolver,__meta:{framework:"vue"}};ce.datetimeFormats=u.value,ce.numberFormats=c.value,ce.__datetimeFormatters=Me.isPlainObject(w)?w.__datetimeFormatters:void 0,ce.__numberFormatters=Me.isPlainObject(w)?w.__numberFormatters:void 0;const de=It.createCoreContext(ce);return o&&It.setFallbackContext(de),de})(),It.updateFallbackLocale(w,a.value,l.value);function E(){return[a.value,l.value,s.value,u.value,c.value]}const $=Rt.computed({get:()=>a.value,set:ce=>{a.value=ce,w.locale=a.value}}),O=Rt.computed({get:()=>l.value,set:ce=>{l.value=ce,w.fallbackLocale=l.value,It.updateFallbackLocale(w,a.value,ce)}}),A=Rt.computed(()=>s.value),M=Rt.computed(()=>u.value),D=Rt.computed(()=>c.value);function U(){return Me.isFunction(C)?C:null}function j(ce){C=ce,w.postTranslation=ce}function W(){return v}function L(ce){ce!==null&&(h=sw(ce)),v=ce,w.missing=h}const P=(ce,de,xe,he,He,et)=>{E();let rt;if(rt=ce(w),Me.isNumber(rt)&&rt===It.NOT_REOSLVED){const[wt,Ze]=de();return n&&p?he(n):He(wt)}else{if(et(rt))return rt;throw _n(mn.UNEXPECTED_RETURN_TYPE)}};function x(...ce){return P(de=>Reflect.apply(It.translate,null,[de,...ce]),()=>It.parseTranslateArgs(...ce),"translate",de=>Reflect.apply(de.t,de,[...ce]),de=>de,de=>Me.isString(de))}function I(...ce){const[de,xe,he]=ce;if(he&&!Me.isObject(he))throw _n(mn.INVALID_ARGUMENT);return x(de,xe,Me.assign({resolvedMessage:!0},he||{}))}function H(...ce){return P(de=>Reflect.apply(It.datetime,null,[de,...ce]),()=>It.parseDateTimeArgs(...ce),"datetime format",de=>Reflect.apply(de.d,de,[...ce]),()=>It.MISSING_RESOLVE_VALUE,de=>Me.isString(de))}function G(...ce){return P(de=>Reflect.apply(It.number,null,[de,...ce]),()=>It.parseNumberArgs(...ce),"number format",de=>Reflect.apply(de.n,de,[...ce]),()=>It.MISSING_RESOLVE_VALUE,de=>Me.isString(de))}function J(ce){return ce.map(de=>Me.isString(de)||Me.isNumber(de)||Me.isBoolean(de)?aw(String(de)):de)}const fe={normalize:J,interpolate:ce=>ce,type:"vnode"};function Te(...ce){return P(de=>{let xe;const he=de;try{he.processor=fe,xe=Reflect.apply(It.translate,null,[he,...ce])}finally{he.processor=null}return xe},()=>It.parseTranslateArgs(...ce),"translate",de=>de[$m](...ce),de=>[aw(de)],de=>Me.isArray(de))}function oe(...ce){return P(de=>Reflect.apply(It.number,null,[de,...ce]),()=>It.parseNumberArgs(...ce),"number format",de=>de[Nm](...ce),()=>[],de=>Me.isString(de)||Me.isArray(de))}function ke(...ce){return P(de=>Reflect.apply(It.datetime,null,[de,...ce]),()=>It.parseDateTimeArgs(...ce),"datetime format",de=>de[Om](...ce),()=>[],de=>Me.isString(de)||Me.isArray(de))}function ae(ce){b=ce,w.pluralRules=b}function Oe(ce,de){const xe=Me.isString(de)?de:a.value,he=q(xe);return w.messageResolver(he,ce)!==null}function we(ce){let de=null;const xe=It.fallbackWithLocaleChain(w,l.value,a.value);for(let he=0;he{r&&(a.value=ce,w.locale=ce,It.updateFallbackLocale(w,a.value,l.value))}),Rt.watch(n.fallbackLocale,ce=>{r&&(l.value=ce,w.fallbackLocale=ce,It.updateFallbackLocale(w,a.value,l.value))}));const Ce={id:lw,locale:$,fallbackLocale:O,get inheritLocale(){return r},set inheritLocale(ce){r=ce,ce&&n&&(a.value=n.locale.value,l.value=n.fallbackLocale.value,It.updateFallbackLocale(w,a.value,l.value))},get availableLocales(){return Object.keys(s.value).sort()},messages:A,get modifiers(){return _},get pluralRules(){return b||{}},get isGlobal(){return o},get missingWarn(){return f},set missingWarn(ce){f=ce,w.missingWarn=f},get fallbackWarn(){return d},set fallbackWarn(ce){d=ce,w.fallbackWarn=d},get fallbackRoot(){return p},set fallbackRoot(ce){p=ce},get fallbackFormat(){return m},set fallbackFormat(ce){m=ce,w.fallbackFormat=m},get warnHtmlMessage(){return g},set warnHtmlMessage(ce){g=ce,w.warnHtmlMessage=ce},get escapeParameter(){return y},set escapeParameter(ce){y=ce,w.escapeParameter=ce},t:x,getLocaleMessage:q,setLocaleMessage:B,mergeLocaleMessage:z,getPostTranslationHandler:U,setPostTranslationHandler:j,getMissingHandler:W,setMissingHandler:L,[i$]:ae};return Ce.datetimeFormats=M,Ce.numberFormats=D,Ce.rt=I,Ce.te=Oe,Ce.tm=ge,Ce.d=H,Ce.n=G,Ce.getDateTimeFormat=Z,Ce.setDateTimeFormat=ue,Ce.mergeDateTimeFormat=se,Ce.getNumberFormat=me,Ce.setNumberFormat=_e,Ce.mergeNumberFormat=$e,Ce[u$]=e.__injectWithOption,Ce[$m]=Te,Ce[Om]=ke,Ce[Nm]=oe,Ce}function nle(e){const t=Me.isString(e.locale)?e.locale:It.DEFAULT_LOCALE,n=Me.isString(e.fallbackLocale)||Me.isArray(e.fallbackLocale)||Me.isPlainObject(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:t,o=Me.isFunction(e.missing)?e.missing:void 0,r=Me.isBoolean(e.silentTranslationWarn)||Me.isRegExp(e.silentTranslationWarn)?!e.silentTranslationWarn:!0,a=Me.isBoolean(e.silentFallbackWarn)||Me.isRegExp(e.silentFallbackWarn)?!e.silentFallbackWarn:!0,l=Me.isBoolean(e.fallbackRoot)?e.fallbackRoot:!0,s=!!e.formatFallbackMessages,u=Me.isPlainObject(e.modifiers)?e.modifiers:{},c=e.pluralizationRules,f=Me.isFunction(e.postTranslation)?e.postTranslation:void 0,d=Me.isString(e.warnHtmlInMessage)?e.warnHtmlInMessage!=="off":!0,p=!!e.escapeParameterHtml,m=Me.isBoolean(e.sync)?e.sync:!0;let v=e.messages;if(Me.isPlainObject(e.sharedMessages)){const w=e.sharedMessages;v=Object.keys(w).reduce((E,$)=>{const O=E[$]||(E[$]={});return Me.assign(O,w[$]),E},v||{})}const{__i18n:h,__root:C,__injectWithOption:g}=e,y=e.datetimeFormats,_=e.numberFormats,b=e.flatJson;return{locale:t,fallbackLocale:n,messages:v,flatJson:b,datetimeFormats:y,numberFormats:_,missing:o,missingWarn:r,fallbackWarn:a,fallbackRoot:l,fallbackFormat:s,modifiers:u,pluralRules:c,postTranslation:f,warnHtmlMessage:d,escapeParameter:p,messageResolver:e.messageResolver,inheritLocale:m,__i18n:h,__root:C,__injectWithOption:g}}function Mm(e={},t){{const n=ub(nle(e)),o={id:n.id,get locale(){return n.locale.value},set locale(r){n.locale.value=r},get fallbackLocale(){return n.fallbackLocale.value},set fallbackLocale(r){n.fallbackLocale.value=r},get messages(){return n.messages.value},get datetimeFormats(){return n.datetimeFormats.value},get numberFormats(){return n.numberFormats.value},get availableLocales(){return n.availableLocales},get formatter(){return{interpolate(){return[]}}},set formatter(r){},get missing(){return n.getMissingHandler()},set missing(r){n.setMissingHandler(r)},get silentTranslationWarn(){return Me.isBoolean(n.missingWarn)?!n.missingWarn:n.missingWarn},set silentTranslationWarn(r){n.missingWarn=Me.isBoolean(r)?!r:r},get silentFallbackWarn(){return Me.isBoolean(n.fallbackWarn)?!n.fallbackWarn:n.fallbackWarn},set silentFallbackWarn(r){n.fallbackWarn=Me.isBoolean(r)?!r:r},get modifiers(){return n.modifiers},get formatFallbackMessages(){return n.fallbackFormat},set formatFallbackMessages(r){n.fallbackFormat=r},get postTranslation(){return n.getPostTranslationHandler()},set postTranslation(r){n.setPostTranslationHandler(r)},get sync(){return n.inheritLocale},set sync(r){n.inheritLocale=r},get warnHtmlInMessage(){return n.warnHtmlMessage?"warn":"off"},set warnHtmlInMessage(r){n.warnHtmlMessage=r!=="off"},get escapeParameterHtml(){return n.escapeParameter},set escapeParameterHtml(r){n.escapeParameter=r},get preserveDirectiveContent(){return!0},set preserveDirectiveContent(r){},get pluralizationRules(){return n.pluralRules||{}},__composer:n,t(...r){const[a,l,s]=r,u={};let c=null,f=null;if(!Me.isString(a))throw _n(mn.INVALID_ARGUMENT);const d=a;return Me.isString(l)?u.locale=l:Me.isArray(l)?c=l:Me.isPlainObject(l)&&(f=l),Me.isArray(s)?c=s:Me.isPlainObject(s)&&(f=s),Reflect.apply(n.t,n,[d,c||f||{},u])},rt(...r){return Reflect.apply(n.rt,n,[...r])},tc(...r){const[a,l,s]=r,u={plural:1};let c=null,f=null;if(!Me.isString(a))throw _n(mn.INVALID_ARGUMENT);const d=a;return Me.isString(l)?u.locale=l:Me.isNumber(l)?u.plural=l:Me.isArray(l)?c=l:Me.isPlainObject(l)&&(f=l),Me.isString(s)?u.locale=s:Me.isArray(s)?c=s:Me.isPlainObject(s)&&(f=s),Reflect.apply(n.t,n,[d,c||f||{},u])},te(r,a){return n.te(r,a)},tm(r){return n.tm(r)},getLocaleMessage(r){return n.getLocaleMessage(r)},setLocaleMessage(r,a){n.setLocaleMessage(r,a)},mergeLocaleMessage(r,a){n.mergeLocaleMessage(r,a)},d(...r){return Reflect.apply(n.d,n,[...r])},getDateTimeFormat(r){return n.getDateTimeFormat(r)},setDateTimeFormat(r,a){n.setDateTimeFormat(r,a)},mergeDateTimeFormat(r,a){n.mergeDateTimeFormat(r,a)},n(...r){return Reflect.apply(n.n,n,[...r])},getNumberFormat(r){return n.getNumberFormat(r)},setNumberFormat(r,a){n.setNumberFormat(r,a)},mergeNumberFormat(r,a){n.mergeNumberFormat(r,a)},getChoiceIndex(r,a){return-1},__onComponentInstanceCreated(r){const{componentInstanceCreatedListener:a}=e;a&&a(r,o)}};return o}}const cb={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>e==="parent"||e==="global",default:"parent"},i18n:{type:Object}};function ole({slots:e},t){return t.length===1&&t[0]==="default"?(e.default?e.default():[]).reduce((o,r)=>o=[...o,...Me.isArray(r.children)?r.children:[r]],[]):t.reduce((n,o)=>{const r=e[o];return r&&(n[o]=r()),n},{})}function d$(e){return Rt.Fragment}const Am={name:"i18n-t",props:Me.assign({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>Me.isNumber(e)||!isNaN(e)}},cb),setup(e,t){const{slots:n,attrs:o}=t,r=e.i18n||Wf({useScope:e.scope,__useComponent:!0});return()=>{const a=Object.keys(n).filter(d=>d!=="_"),l={};e.locale&&(l.locale=e.locale),e.plural!==void 0&&(l.plural=Me.isString(e.plural)?+e.plural:e.plural);const s=ole(t,a),u=r[$m](e.keypath,s,l),c=Me.assign({},o),f=Me.isString(e.tag)||Me.isObject(e.tag)?e.tag:d$();return Rt.h(f,c,u)}}};function rle(e){return Me.isArray(e)&&!Me.isString(e[0])}function f$(e,t,n,o){const{slots:r,attrs:a}=t;return()=>{const l={part:!0};let s={};e.locale&&(l.locale=e.locale),Me.isString(e.format)?l.key=e.format:Me.isObject(e.format)&&(Me.isString(e.format.key)&&(l.key=e.format.key),s=Object.keys(e.format).reduce((p,m)=>n.includes(m)?Me.assign({},p,{[m]:e.format[m]}):p,{}));const u=o(e.value,l,s);let c=[l.key];Me.isArray(u)?c=u.map((p,m)=>{const v=r[p.type],h=v?v({[p.type]:p.value,index:m,parts:u}):[p.value];return rle(h)&&(h[0].key=`${p.type}-${m}`),h}):Me.isString(u)&&(c=[u]);const f=Me.assign({},a),d=Me.isString(e.tag)||Me.isObject(e.tag)?e.tag:d$();return Rt.h(d,f,c)}}const Pm={name:"i18n-n",props:Me.assign({value:{type:Number,required:!0},format:{type:[String,Object]}},cb),setup(e,t){const n=e.i18n||Wf({useScope:"parent",__useComponent:!0});return f$(e,t,It.NUMBER_FORMAT_OPTIONS_KEYS,(...o)=>n[Nm](...o))}},Rm={name:"i18n-d",props:Me.assign({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},cb),setup(e,t){const n=e.i18n||Wf({useScope:"parent",__useComponent:!0});return f$(e,t,It.DATETIME_FORMAT_OPTIONS_KEYS,(...o)=>n[Om](...o))}};function ale(e,t){const n=e;if(e.mode==="composition")return n.__getInstance(t)||e.global;{const o=n.__getInstance(t);return o!=null?o.__composer:e.global.__composer}}function p$(e){const t=l=>{const{instance:s,modifiers:u,value:c}=l;if(!s||!s.$)throw _n(mn.UNEXPECTED_ERROR);const f=ale(e,s.$),d=iw(c);return[Reflect.apply(f.t,f,[...uw(d)]),f]};return{created:(l,s)=>{const[u,c]=t(s);Me.inBrowser&&e.global===c&&(l.__i18nWatcher=Rt.watch(c.locale,()=>{s.instance&&s.instance.$forceUpdate()})),l.__composer=c,l.textContent=u},unmounted:l=>{Me.inBrowser&&l.__i18nWatcher&&(l.__i18nWatcher(),l.__i18nWatcher=void 0,delete l.__i18nWatcher),l.__composer&&(l.__composer=void 0,delete l.__composer)},beforeUpdate:(l,{value:s})=>{if(l.__composer){const u=l.__composer,c=iw(s);l.textContent=Reflect.apply(u.t,u,[...uw(c)])}},getSSRProps:l=>{const[s]=t(l);return{textContent:s}}}}function iw(e){if(Me.isString(e))return{path:e};if(Me.isPlainObject(e)){if(!("path"in e))throw _n(mn.REQUIRED_VALUE,"path");return e}else throw _n(mn.INVALID_VALUE)}function uw(e){const{path:t,locale:n,args:o,choice:r,plural:a}=e,l={},s=o||{};return Me.isString(n)&&(l.locale=n),Me.isNumber(r)&&(l.plural=r),Me.isNumber(a)&&(l.plural=a),[t,s,l]}function lle(e,t,...n){const o=Me.isPlainObject(n[0])?n[0]:{},r=!!o.useI18nComponentName;(Me.isBoolean(o.globalInstall)?o.globalInstall:!0)&&(e.component(r?"i18n":Am.name,Am),e.component(Pm.name,Pm),e.component(Rm.name,Rm)),e.directive("t",p$(t))}function sle(e,t,n){return{beforeCreate(){const o=Rt.getCurrentInstance();if(!o)throw _n(mn.UNEXPECTED_ERROR);const r=this.$options;if(r.i18n){const a=r.i18n;r.__i18n&&(a.__i18n=r.__i18n),a.__root=t,this===this.$root?this.$i18n=cw(e,a):(a.__injectWithOption=!0,this.$i18n=Mm(a))}else r.__i18n?this===this.$root?this.$i18n=cw(e,r):this.$i18n=Mm({__i18n:r.__i18n,__injectWithOption:!0,__root:t}):this.$i18n=e;r.__i18nGlobal&&c$(t,r,r),e.__onComponentInstanceCreated(this.$i18n),n.__setInstance(o,this.$i18n),this.$t=(...a)=>this.$i18n.t(...a),this.$rt=(...a)=>this.$i18n.rt(...a),this.$tc=(...a)=>this.$i18n.tc(...a),this.$te=(a,l)=>this.$i18n.te(a,l),this.$d=(...a)=>this.$i18n.d(...a),this.$n=(...a)=>this.$i18n.n(...a),this.$tm=a=>this.$i18n.tm(a)},mounted(){},unmounted(){const o=Rt.getCurrentInstance();if(!o)throw _n(mn.UNEXPECTED_ERROR);delete this.$t,delete this.$rt,delete this.$tc,delete this.$te,delete this.$d,delete this.$n,delete this.$tm,n.__deleteInstance(o),delete this.$i18n}}}function cw(e,t){e.locale=t.locale||e.locale,e.fallbackLocale=t.fallbackLocale||e.fallbackLocale,e.missing=t.missing||e.missing,e.silentTranslationWarn=t.silentTranslationWarn||e.silentFallbackWarn,e.silentFallbackWarn=t.silentFallbackWarn||e.silentFallbackWarn,e.formatFallbackMessages=t.formatFallbackMessages||e.formatFallbackMessages,e.postTranslation=t.postTranslation||e.postTranslation,e.warnHtmlInMessage=t.warnHtmlInMessage||e.warnHtmlInMessage,e.escapeParameterHtml=t.escapeParameterHtml||e.escapeParameterHtml,e.sync=t.sync||e.sync,e.__composer[i$](t.pluralizationRules||e.pluralizationRules);const n=jf(e.locale,{messages:t.messages,__i18n:t.__i18n});return Object.keys(n).forEach(o=>e.mergeLocaleMessage(o,n[o])),t.datetimeFormats&&Object.keys(t.datetimeFormats).forEach(o=>e.mergeDateTimeFormat(o,t.datetimeFormats[o])),t.numberFormats&&Object.keys(t.numberFormats).forEach(o=>e.mergeNumberFormat(o,t.numberFormats[o])),e}const h$=Me.makeSymbol("global-vue-i18n");function ile(e={},t){const n=Me.isBoolean(e.legacy)?e.legacy:!0,o=Me.isBoolean(e.globalInjection)?e.globalInjection:!0,r=n?!!e.allowComposition:!0,a=new Map,[l,s]=cle(e,n),u=Me.makeSymbol("");function c(p){return a.get(p)||null}function f(p,m){a.set(p,m)}function d(p){a.delete(p)}{const p={get mode(){return n?"legacy":"composition"},get allowComposition(){return r},async install(m,...v){m.__VUE_I18N_SYMBOL__=u,m.provide(m.__VUE_I18N_SYMBOL__,p),!n&&o&&yle(m,p.global),lle(m,p,...v),n&&m.mixin(sle(s,s.__composer,p));const h=m.unmount;m.unmount=()=>{p.dispose(),h()}},get global(){return s},dispose(){l.stop()},__instances:a,__getInstance:c,__setInstance:f,__deleteInstance:d};return p}}function Wf(e={}){const t=Rt.getCurrentInstance();if(t==null)throw _n(mn.MUST_BE_CALL_SETUP_TOP);if(!t.isCE&&t.appContext.app!=null&&!t.appContext.app.__VUE_I18N_SYMBOL__)throw _n(mn.NOT_INSLALLED);const n=dle(t),o=ple(n),r=tle(t),a=fle(e,r);if(n.mode==="legacy"&&!e.__useComponent){if(!n.allowComposition)throw _n(mn.NOT_AVAILABLE_IN_LEGACY_MODE);return vle(t,a,o,e)}if(a==="global")return c$(o,e,r),o;if(a==="parent"){let u=hle(n,t,e.__useComponent);return u==null&&(u=o),u}const l=n;let s=l.__getInstance(t);if(s==null){const u=Me.assign({},e);"__i18n"in r&&(u.__i18n=r.__i18n),o&&(u.__root=o),s=ub(u),mle(l,t),l.__setInstance(t,s)}return s}const ule=e=>{if(!(ele in e))throw _n(mn.NOT_COMPATIBLE_LEGACY_VUE_I18N);return e};function cle(e,t,n){const o=Rt.effectScope();{const r=t?o.run(()=>Mm(e)):o.run(()=>ub(e));if(r==null)throw _n(mn.UNEXPECTED_ERROR);return[o,r]}}function dle(e){{const t=Rt.inject(e.isCE?h$:e.appContext.app.__VUE_I18N_SYMBOL__);if(!t)throw _n(e.isCE?mn.NOT_INSLALLED_WITH_PROVIDE:mn.UNEXPECTED_ERROR);return t}}function fle(e,t){return Me.isEmptyObject(e)?"__i18n"in t?"local":"global":e.useScope?e.useScope:"local"}function ple(e){return e.mode==="composition"?e.global:e.global.__composer}function hle(e,t,n=!1){let o=null;const r=t.root;let a=t.parent;for(;a!=null;){const l=e;if(e.mode==="composition")o=l.__getInstance(a);else{const s=l.__getInstance(a);s!=null&&(o=s.__composer,n&&o&&!o[u$]&&(o=null))}if(o!=null||r===a)break;a=a.parent}return o}function mle(e,t,n){Rt.onMounted(()=>{},t),Rt.onUnmounted(()=>{e.__deleteInstance(t)},t)}function vle(e,t,n,o={}){const r=t==="local",a=Rt.shallowRef(null);if(r&&e.proxy&&!(e.proxy.$options.i18n||e.proxy.$options.__i18n))throw _n(mn.MUST_DEFINE_I18N_OPTION_IN_ALLOW_COMPOSITION);const l=Me.isBoolean(o.inheritLocale)?o.inheritLocale:!0,s=Rt.ref(r&&l?n.locale.value:Me.isString(o.locale)?o.locale:It.DEFAULT_LOCALE),u=Rt.ref(r&&l?n.fallbackLocale.value:Me.isString(o.fallbackLocale)||Me.isArray(o.fallbackLocale)||Me.isPlainObject(o.fallbackLocale)||o.fallbackLocale===!1?o.fallbackLocale:s.value),c=Rt.ref(jf(s.value,o)),f=Rt.ref(Me.isPlainObject(o.datetimeFormats)?o.datetimeFormats:{[s.value]:{}}),d=Rt.ref(Me.isPlainObject(o.numberFormats)?o.numberFormats:{[s.value]:{}}),p=r?n.missingWarn:Me.isBoolean(o.missingWarn)||Me.isRegExp(o.missingWarn)?o.missingWarn:!0,m=r?n.fallbackWarn:Me.isBoolean(o.fallbackWarn)||Me.isRegExp(o.fallbackWarn)?o.fallbackWarn:!0,v=r?n.fallbackRoot:Me.isBoolean(o.fallbackRoot)?o.fallbackRoot:!0,h=!!o.fallbackFormat,C=Me.isFunction(o.missing)?o.missing:null,g=Me.isFunction(o.postTranslation)?o.postTranslation:null,y=r?n.warnHtmlMessage:Me.isBoolean(o.warnHtmlMessage)?o.warnHtmlMessage:!0,_=!!o.escapeParameter,b=r?n.modifiers:Me.isPlainObject(o.modifiers)?o.modifiers:{},w=o.pluralRules||r&&n.pluralRules;function S(){return[s.value,u.value,c.value,f.value,d.value]}const E=Rt.computed({get:()=>a.value?a.value.locale.value:s.value,set:z=>{a.value&&(a.value.locale.value=z),s.value=z}}),$=Rt.computed({get:()=>a.value?a.value.fallbackLocale.value:u.value,set:z=>{a.value&&(a.value.fallbackLocale.value=z),u.value=z}}),O=Rt.computed(()=>a.value?a.value.messages.value:c.value),A=Rt.computed(()=>f.value),M=Rt.computed(()=>d.value);function D(){return a.value?a.value.getPostTranslationHandler():g}function U(z){a.value&&a.value.setPostTranslationHandler(z)}function j(){return a.value?a.value.getMissingHandler():C}function W(z){a.value&&a.value.setMissingHandler(z)}function L(z){return S(),z()}function P(...z){return a.value?L(()=>Reflect.apply(a.value.t,null,[...z])):L(()=>"")}function x(...z){return a.value?Reflect.apply(a.value.rt,null,[...z]):""}function I(...z){return a.value?L(()=>Reflect.apply(a.value.d,null,[...z])):L(()=>"")}function H(...z){return a.value?L(()=>Reflect.apply(a.value.n,null,[...z])):L(()=>"")}function G(z){return a.value?a.value.tm(z):{}}function J(z,Z){return a.value?a.value.te(z,Z):!1}function ee(z){return a.value?a.value.getLocaleMessage(z):{}}function fe(z,Z){a.value&&(a.value.setLocaleMessage(z,Z),c.value[z]=Z)}function Te(z,Z){a.value&&a.value.mergeLocaleMessage(z,Z)}function oe(z){return a.value?a.value.getDateTimeFormat(z):{}}function ke(z,Z){a.value&&(a.value.setDateTimeFormat(z,Z),f.value[z]=Z)}function ae(z,Z){a.value&&a.value.mergeDateTimeFormat(z,Z)}function Oe(z){return a.value?a.value.getNumberFormat(z):{}}function we(z,Z){a.value&&(a.value.setNumberFormat(z,Z),d.value[z]=Z)}function ge(z,Z){a.value&&a.value.mergeNumberFormat(z,Z)}const q={get id(){return a.value?a.value.id:-1},locale:E,fallbackLocale:$,messages:O,datetimeFormats:A,numberFormats:M,get inheritLocale(){return a.value?a.value.inheritLocale:l},set inheritLocale(z){a.value&&(a.value.inheritLocale=z)},get availableLocales(){return a.value?a.value.availableLocales:Object.keys(c.value)},get modifiers(){return a.value?a.value.modifiers:b},get pluralRules(){return a.value?a.value.pluralRules:w},get isGlobal(){return a.value?a.value.isGlobal:!1},get missingWarn(){return a.value?a.value.missingWarn:p},set missingWarn(z){a.value&&(a.value.missingWarn=z)},get fallbackWarn(){return a.value?a.value.fallbackWarn:m},set fallbackWarn(z){a.value&&(a.value.missingWarn=z)},get fallbackRoot(){return a.value?a.value.fallbackRoot:v},set fallbackRoot(z){a.value&&(a.value.fallbackRoot=z)},get fallbackFormat(){return a.value?a.value.fallbackFormat:h},set fallbackFormat(z){a.value&&(a.value.fallbackFormat=z)},get warnHtmlMessage(){return a.value?a.value.warnHtmlMessage:y},set warnHtmlMessage(z){a.value&&(a.value.warnHtmlMessage=z)},get escapeParameter(){return a.value?a.value.escapeParameter:_},set escapeParameter(z){a.value&&(a.value.escapeParameter=z)},t:P,getPostTranslationHandler:D,setPostTranslationHandler:U,getMissingHandler:j,setMissingHandler:W,rt:x,d:I,n:H,tm:G,te:J,getLocaleMessage:ee,setLocaleMessage:fe,mergeLocaleMessage:Te,getDateTimeFormat:oe,setDateTimeFormat:ke,mergeDateTimeFormat:ae,getNumberFormat:Oe,setNumberFormat:we,mergeNumberFormat:ge};function B(z){z.locale.value=s.value,z.fallbackLocale.value=u.value,Object.keys(c.value).forEach(Z=>{z.mergeLocaleMessage(Z,c.value[Z])}),Object.keys(f.value).forEach(Z=>{z.mergeDateTimeFormat(Z,f.value[Z])}),Object.keys(d.value).forEach(Z=>{z.mergeNumberFormat(Z,d.value[Z])}),z.escapeParameter=_,z.fallbackFormat=h,z.fallbackRoot=v,z.fallbackWarn=m,z.missingWarn=p,z.warnHtmlMessage=y}return Rt.onBeforeMount(()=>{if(e.proxy==null||e.proxy.$i18n==null)throw _n(mn.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);const z=a.value=e.proxy.$i18n.__composer;t==="global"?(s.value=z.locale.value,u.value=z.fallbackLocale.value,c.value=z.messages.value,f.value=z.datetimeFormats.value,d.value=z.numberFormats.value):r&&B(z)}),q}const gle=["locale","fallbackLocale","availableLocales"],ble=["t","rt","d","n","tm"];function yle(e,t){const n=Object.create(null);gle.forEach(o=>{const r=Object.getOwnPropertyDescriptor(t,o);if(!r)throw _n(mn.UNEXPECTED_ERROR);const a=Rt.isRef(r.value)?{get(){return r.value.value},set(l){r.value.value=l}}:{get(){return r.get&&r.get()}};Object.defineProperty(n,o,a)}),e.config.globalProperties.$i18n=n,ble.forEach(o=>{const r=Object.getOwnPropertyDescriptor(t,o);if(!r||!r.value)throw _n(mn.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${o}`,r)})}It.registerMessageCompiler(It.compileToFunction);It.registerMessageResolver(It.resolveValue);It.registerLocaleFallbacker(It.fallbackWithLocaleChain);Pr.DatetimeFormat=Rm;Pr.I18nInjectionKey=h$;Pr.NumberFormat=Pm;Pr.Translation=Am;Pr.VERSION=l$;Pr.castToVueI18n=ule;var wle=Pr.createI18n=ile,Bl=Pr.useI18n=Wf;Pr.vTDirective=p$;var _le={name:"zh-cn",el:{breadcrumb:{label:"面包屑"},colorpicker:{confirm:"确定",clear:"清空"},datepicker:{now:"此刻",today:"今天",cancel:"取消",clear:"清空",confirm:"确定",selectDate:"选择日期",selectTime:"选择时间",startDate:"开始日期",startTime:"开始时间",endDate:"结束日期",endTime:"结束时间",prevYear:"前一年",nextYear:"后一年",prevMonth:"上个月",nextMonth:"下个月",year:"年",month1:"1 月",month2:"2 月",month3:"3 月",month4:"4 月",month5:"5 月",month6:"6 月",month7:"7 月",month8:"8 月",month9:"9 月",month10:"10 月",month11:"11 月",month12:"12 月",weeks:{sun:"日",mon:"一",tue:"二",wed:"三",thu:"四",fri:"五",sat:"六"},months:{jan:"一月",feb:"二月",mar:"三月",apr:"四月",may:"五月",jun:"六月",jul:"七月",aug:"八月",sep:"九月",oct:"十月",nov:"十一月",dec:"十二月"}},select:{loading:"加载中",noMatch:"无匹配数据",noData:"无数据",placeholder:"请选择"},cascader:{noMatch:"无匹配数据",loading:"加载中",placeholder:"请选择",noData:"暂无数据"},pagination:{goto:"前往",pagesize:"条/页",total:"共 {total} 条",pageClassifier:"页",page:"页",prev:"上一页",next:"下一页",currentPage:"第 {pager} 页",prevPages:"向前 {pager} 页",nextPages:"向后 {pager} 页",deprecationWarning:"你使用了一些已被废弃的用法,请参考 el-pagination 的官方文档"},messagebox:{title:"提示",confirm:"确定",cancel:"取消",error:"输入的数据不合法!"},upload:{deleteTip:"按 delete 键可删除",delete:"删除",preview:"查看图片",continue:"继续上传"},table:{emptyText:"暂无数据",confirmFilter:"筛选",resetFilter:"重置",clearFilter:"全部",sumText:"合计"},tour:{next:"下一步",previous:"上一步",finish:"结束导览"},tree:{emptyText:"暂无数据"},transfer:{noMatch:"无匹配数据",noData:"无数据",titles:["列表 1","列表 2"],filterPlaceholder:"请输入搜索内容",noCheckedFormat:"共 {total} 项",hasCheckedFormat:"已选 {checked}/{total} 项"},image:{error:"加载失败"},pageHeader:{title:"返回"},popconfirm:{confirmButtonText:"确定",cancelButtonText:"取消"},carousel:{leftArrow:"上一张幻灯片",rightArrow:"下一张幻灯片",indicator:"幻灯片切换至索引 {index}"}}};const Cle={"Install BuildAdmin":"安装 BuildAdmin","Environmental inspection":"环境检查","Checking installation environment":"正在检查安装环境","Current execution to:":"当前执行到:","Step 2 site configuration":"第二步 站点配置","Environmental inspection passed":"环境检查通过","This environmental check failed":"此项环境检查未通过","The environment check failed, but the installation can continue":"环境检查为失败/未确认,但可以继续安装","Basic environment":"基础环境","NPM correlation":"NPM相关","Test npm install":"测试 npm install","Check complete":"检查完成","Congratulations, the installation can continue~":"恭喜,安装可以继续~","Sorry, the necessary installation environment conditions have not been met, please check the above form!":"抱歉,有必要的安装环境条件没有达成,请检查以上表格!","Network Timeout":"网络超时","Network connection error":"网络连接错误","The interface path cannot be found":"接口路径找不到了(404):{url}","unknown error":"未知错误",executing:"",php_version:"PHP 版本",config_is_writable:"配置目录是否可写",public_is_writable:"public 目录是否可写",php_pdo:"PHP pdo_mysql 扩展",php_safe_mode:"PHP安全模式",php_proc:"PHP 程序执行函数(proc)",php_gd2:"PHP gd2 或 freeType",npm_version:"NPM 版本",npm_package_manager:"包管理器",nodejs_version:"node.js 版本",error:"错误",success:"成功","test-npm-install":"测试 npm install","check npm install":"是否测试命令执行?","set-npm-registry":"设置NPM源","Set NPM source":"设置NPM源","Use current source":"使用当前源",recommend:"(推荐)",TaoBao:"淘宝",Tencent:"腾讯","Click to test":"点击进行测试","Can execute":"可以执行","Command execution test failed":"命令执行测试失败","PM is ready!":"npm包管理器已经准备好了!","already installed":"已安装","The installation can continue, and some operations need to be completed manually":"可以继续安装,部分操作需手动完成","Sorry, the automatic installation of package manager failed. Please complete the installation manually!":"抱歉,自动安装包管理器失败,请手动完成安装!","Click to see how to solve it":"点击查看如何解决","How to solve":"如何解决",terminal:"终端",narrow:"缩小",Connecting:"连接中...","No command":"无命令",executed:" 已执行","Waiting for execution":" 等待执行","Connection successful, executing":"连接成功 正在执行 ","Unfinished matters manually":"手动完成未尽事宜","Open terminal (windows PowerShell)":"打开您PC/服务器的终端(Windows PowerShell、cmd等)","Execute command":"执行命令","Execution failed?":"执行失败了?","Move the built file to the specified location of the system":"移动构建好的文件到系统指定位置","Click to try to automatically move the build file":"点击尝试自动移动构建文件","The build output directory is: site":"构建输出目录为:站点","root directory / dist":"根目录/web/dist","You can delete the build output directory directly":"您可以直接删除构建输出目录","Getting full path of root directory / Web":"正在获取 根目录/web 的完整路径","Moving automatically":"正在自动移动...","Please move 1":"请移动构建输出目录中的","Please move 2":"文件夹和","Please move 3":"文件到根目录的","Please move 4":"目录下","During construction, all files in the output directory will be overwritten, so the system is designed to build in the root directory first, and then move to the public directory to prevent other files in the public from being overwritten":"构建时,会覆盖输出目录的所有文件,所以系统设计为先构建,然后移动到public目录,以免public内的其他文件被覆盖掉","Thanks for using buildadmin":"感谢使用 BuildAdmin","Background URL":"后台地址","Access foreground":"访问前台","Access background":"访问后台","Install Tips Title 1":"安装环境检测并没有完全通过,但安装可以继续,只是您后续需要手动进行一些操作,建议您","Install Tips Title 2":",在所有检测通过后再安装,以便您体验到 BuildAdmin 的核心功能之一。","Back to previous page":"回到上一页","If you don't want to open the corresponding permission due to some security factors, please check ":"如果你考虑到一些安全因素而不愿开启相应权限,请查看","how installation services ensure system security":"安装服务如何保障系统安全","If you really can't adjust all the tests to pass, please ":"如果您确实无法将所有检测调整到通过状态,请","click to feed back to us":"点击向我们反馈","continue installation":",并继续安装,安装程序后续将引导您,如何手动完成未尽事宜。","Close the prompt of completing unfinished matters manually":"关闭手动完成未尽事宜提示","Test connection to data server":"测试连接数据服务器...","Install now":"立即安装","Mysql database address":"MySQL 数据库地址","MySQL connection user name":"MySQL 连接用户名","MySQL connection password":"MySQL 连接密码","MySQL connection port number":"MySQL 连接端口号","Mysql database name":"MySQL 数据库名","MySQL data table prefix":"MySQL 数据表前缀","Administrator user name":"管理员用户名","Administrator password":"管理员密码","Duplicate administrator password":"重复管理员密码","Site name":"站点名称","Site configuration":"站点配置","The entered database was not found!":"数据表不存在,安装时将自动建立!","Duplicate passwords do not match":"重复密码不匹配","Command execution failed":"命令执行失败",Installing:"正在安装...","After installation, please complete the unfinished matters manually":"安装完成,请手动完成未尽事宜","Automatically executing the build command on the web side":"正在自动执行 WEB端的 构建命令","Installation complete":"安装完成...","The table prefix can only contain alphanumeric characters and underscores, and starts with a letter":"表前缀只能包含字母数字和下划线,并以字母开头","Manual Install 1":"命令自动执行失败,请手动完成未尽事宜,","Manual Install 2":"{seconds}秒 后自动跳转到操作引导页面...",Retry:"重试",delete:"删除",Confirm:"确认",Cancel:"取消","Request timeout!":"请求超时!","Server internal error!":"服务器内部错误!","The service is temporarily unavailable. Please try again later!":"服务暂时无法访问,请稍后再试!","Abnormal problem, please contact the website administrator!":"异常问题,请联系网站管理员!","You're disconnected!":"您断网了!",Required:"必填","Please enter the correct password":`密码要求6到32位,不能包含 & < > " '`,"It is composed of letters, numbers and underscores, starting with letters (3-15 digits)":"由字母、数字、下划线组成,以字母开头(3-15位)","It is recommended to delete the root directory / public / install folder; This page is only visible on your device.":"建议删除: 根目录/public/install 文件夹;本页仅在您的设备上可见。","Switch package manager":"切换包管理器","Please select package manager":"请选择包管理器","Switch package manager title":"只读WEB终端,可以在CRUD等操作后方便的执行 npm install、npm build 等命令,请在下方选择一个已安装好或您喜欢的的 NPM 包管理器","I want to execute the command manually":"我想手动执行命令",Reminder:"温馨提醒","Ready to start":"准备开始",language:"语言","NPM package manager":"NPM包管理器","The system has a Web terminal. Please select an installed or your favorite NPM package manager":"系统拥有WEB终端,请选择一个已安装好或您喜欢的的NPM包管理器","Start installation":"开始安装","Setup will restart. Are you sure you want to switch package manager?":"将重新开始安装程序,请确定要切换包管理器吗?","None - manual execution":"无-手动执行","Previous step":"上一步","Hide index.html?":"隐藏 index.html?","Sorry, some operations could not be completed automatically You need to manually complete the outstanding matters according to the following guidance":"抱歉,一些操作未能自动完成,需要您根据以下引导手动完成未尽事宜。","Need to reinstall the system?":"需重新安装系统?","Please click on me":"请点击我","Backend login password":"后台登录密码","Port error prompt 1":"当前安装程序站点的端口不是8000,您可能以错误的方式启动了安装服务,请参考","Get started quickly":"快速上手文档","Port error prompt 3":"进行安装。","Table migration failed":"数据表迁移失败","We use Phinx to manage the data table, which can version the data table":"我们使用`Phinx`管理数据表,它可以对数据表进行版本化管理。","Data table automatic migration failed, please manually migrate as follows:":"数据表自动迁移失败了,请按以下方法手动迁移:","If the command fails to be executed, add sudo or press the error message":"若命令执行失败,请尝试加 sudo,或按报错解决即可","Migration check":"迁移检查","When the command is executed successfully, the output is similar to:":"命令执行成功时,输出类似于:","After the command is executed successfully, multiple data tables will be automatically created in the database, and then click below to ":"命令执行成功后,数据库内将自动建立多个数据表,然后请您点击下方的","continue install":"继续安装"},Sle={"Install BuildAdmin":"Install BuildAdmin","Environmental inspection":"Environmental inspection","Checking installation environment":"Checking the installation environment","Current execution to:":"Current execution to:","Step 2 site configuration":"Step 2 site configuration","Environmental inspection passed":"Environmental inspection passed","This environmental check failed":"This environmental inspection was not passed.","The environment check failed, but the installation can continue":"Environment check failed/unconfirmed, but you can continue to install.","Basic environment":"Basic Environment","NPM correlation":"NPM correlation","Test npm install":"Test npm install","Check complete":"Check complete","Congratulations, the installation can continue~":"Congratulations, the installation can continue~","Sorry, the necessary installation environment conditions have not been met, please check the above form!":"Sorry, the necessary installation environmental conditions have not been met, please check the above form!","Network Timeout":"Network timeout","Network connection error":"Network connection error","The interface path cannot be found":"The interface path cannot be found(404):{url}","unknown error":"Unknown error",executing:"",php_version:"PHP Version",config_is_writable:"Is the configuration directory writable?",public_is_writable:"Is the public directory writable?",php_pdo:"PHP pdo_mysql extension",php_safe_mode:"PHP security mode",php_proc:"PHP proc_open and proc_close permission",php_gd2:"PHP gd2 or freeType extensions",npm_version:"NPM Version",npm_package_manager:"NPM package manager",nodejs_version:"node.js Version",error:"error",success:"success","test-npm-install":"Test npm install","check npm install":"Whether to test command execution?","set-npm-registry":"Set NPM source","Set NPM source":"Set NPM source","Use current source":"Use the current source",recommend:"(Recommend)",TaoBao:"TaoBao","Click to test":"Click to test","Can execute":"Can be executed","Command execution test failed":"Command execution test failed","PM is ready!":"The NPM package manager is ready!","already installed":"Already installed","The installation can continue, and some operations need to be completed manually":"You can continue the installation, and some operations need to be completed manually.","Sorry, the automatic installation of package manager failed. Please complete the installation manually!":"Sorry, the automatic installation of the package manager failed. Please complete the installation manually!","Click to see how to solve it":"Click to see how to solve it","How to solve":"How to solve",terminal:"Terminal",narrow:"Narrow",Connecting:"Connecting...","No command":"No command",executed:" Executed","Waiting for execution":" Waiting for execution","Connection successful, executing":"Connection successful, executing ","Unfinished matters manually":"Complete unfinished matters manually","Open terminal (windows PowerShell)":"Open the terminal of your PC/Server (PowerShell, cmd)","Execute command":"Execute the command","Execution failed?":"Failed execution?","Move the built file to the specified location of the system":"Move the built file to the specified location on the system.","Click to try to automatically move the build file":"Click to try to move the build file automatically","The build output directory is: site":"Build the output directory as: site","root directory / dist":"root directory/web/dist","You can delete the build output directory directly":"You can delete the build output directory directly","Getting full path of root directory / Web":"Getting the full path to the root directory/web","Moving automatically":"Moving automatically","Please move 1":"Please move the ","Please move 2":" folder and ","Please move 3":" files from the build output directory to the ","Please move 4":" directory of the root directory.","During construction, all files in the output directory will be overwritten, so the system is designed to build in the root directory first, and then move to the public directory to prevent other files in the public from being overwritten":"When constructing the process, all files in the output directory are overwriting, so the system is designed to build first and then move to the public directory to prevent overwriting other files in the public directory","Thanks for using buildadmin":"Thanks for using BuildAdmin","Background URL":"Background URL","Access foreground":"Access to the foreground","Access background":"Access to the background","Install Tips Title 1":"The installation environment test does not completely passed, but the installation can continue, and you need to do some manual operations to see how to modify it.It is recommended that you go ","Install Tips Title 2":" and install it after all the tests have passed so that you can experience one of the core functions of BuildAdmin.","Back to previous page":"back to previous page","If you don't want to open the corresponding permission due to some security factors, please check ":"If you don't want to open the corresponding permission due to some security factors, please check ","how installation services ensure system security":"how installation services ensure system security","If you really can't adjust all the tests to pass, please ":"If you really can't adjust all the tests to pass, please ","click to feed back to us":"click to feed back to us","continue installation":" and continue the installation. The subsequent installation program will guide you on how to manually complete the outstanding matters.","Close the prompt of completing unfinished matters manually":"Close the prompt of completing unfinished matters manually","Test connection to data server":"Test connection to data server","Install now":"Install now","Mysql database address":"Mysql database address","MySQL connection user name":"MySQL connection username","MySQL connection password":"MySQL connection password","MySQL connection port number":"MySQL connection port number","Mysql database name":"Mysql database name","MySQL data table prefix":"MySQL data table prefix","Administrator user name":"Administrator username","Administrator password":"Administrator password","Duplicate administrator password":"Duplicate administrator password","Site name":"Site Name","Site configuration":"Site Configuration","The entered database was not found!":"The data table does not exist and will be created automatically during installation","Duplicate passwords do not match":"Duplicate passwords mismatch","Command execution failed":"Command execution failed",Installing:"Installing","After installation, please complete the unfinished matters manually":"Installation is complete, please complete the unfinished matters manually.","Automatically executing the build command on the web side":"Automatically executing the build command on the web side","Installation complete":"Installation completed","The table prefix can only contain alphanumeric characters and underscores, and starts with a letter":"The table prefix can only contain alphanumeric characters and underscores, and starts with letters","Manual Install 1":"Failed to execute Command automatically. Please complete the unfinished matters manually.","Manual Install 2":"Automatically jump to the operation boot page after {seconds} seconds...",Retry:"Retry",delete:"Delete",Confirm:"Confirm",Cancel:"Cancel","Request timeout!":"Request timeout!","Server internal error!":"Internal server error!","The service is temporarily unavailable. Please try again later!":"The service is temporarily unavailable. Please try again later!","Abnormal problem, please contact the website administrator!":"Abnormal problem, please contact the website administrator!","You're disconnected!":"You're disconnected!",Required:"Required","Please enter the correct password":`The password requires 6 to 32 bits and cannot contain & < > " '`,"It is composed of letters, numbers and underscores, starting with letters (3-15 digits)":"Composed of letters, numbers and underscores, start with letters (3-15 digits)","It is recommended to delete the root directory / public / install folder; This page is only visible on your device.":"It is recommended to delete the root directory / public / install folder; This page is only visible on your device.","Switch package manager":"Switch package manager","Please select package manager":"Please select the package manager","Switch package manager title":"Read-only Web terminal, you can easily execute NPM install, NPM builds, and other commands after crud and other operations. Please select an installed or your favorite NPM package manager below","I want to execute the command manually":"I want to execute the command manually",Reminder:"Reminder","Ready to start":"Ready to start",language:"Language","NPM package manager":"NPM package manager","The system has a Web terminal. Please select an installed or your favorite NPM package manager":"The system has a Web terminal. Please select an installed or your favorite NPM package manager","Start installation":"Start installation","Setup will restart. Are you sure you want to switch package manager?":"The install will restart. Are you sure you want to switch the package manager?","None - manual execution":"None - manual execution","Previous step":"Previous step","Hide index.html?":"Hide index.html?","Sorry, some operations could not be completed automatically You need to manually complete the outstanding matters according to the following guidance":"Sorry, some operations could not be completed automatically. You need to outstanding matters according to the following guidance manually.","Need to reinstall the system?":"Need to reinstall the system?","Please click on me":"Please click on me","Backend login password":"Backend login password","Port error prompt 1":"The current installation site port is not 8000. You may have started the installation service in the wrong way. Please refer to the","Get started quickly":" Quick Start documentation ","Port error prompt 3":" for installation.","Table migration failed":"Table migration failed","We use Phinx to manage the data table, which can version the data table":"We use 'Phinx' to manage the data table, which can version the data table","Data table automatic migration failed, please manually migrate as follows:":"Data table automatic migration failed, please manually migrate as follows:","If the command fails to be executed, add sudo or press the error message":"If the command fails to be executed, add sudo or press the error message","Migration check":"Migration check","When the command is executed successfully, the output is similar to:":"When the command is executed successfully, the output is similar to:","After the command is executed successfully, multiple data tables will be automatically created in the database, and then click below to ":"After the command is executed successfully, multiple data tables will be automatically created in the database, and then click below to ","continue install":"continue the installation"},dw={"zh-cn":fw(Object.assign({"./pages/zh-cn/terminal.ts":Joe}),"zh-cn"),en:fw(Object.assign({"./pages/en/terminal.ts":Qoe}),"en")},kle={"zh-cn":{...Cle,..._le,...dw["zh-cn"]},en:{...Sle,...oS,...dw.en}},$o=wle({locale:"zh-cn",legacy:!1,fallbackLocale:"en",messages:kle});function fw(e,t){const n={};for(const o in e)if(e[o].default){const r=o.slice(o.lastIndexOf(t)+(t.length+1),o.lastIndexOf("."));if(r.indexOf("/")>0){const a=r.split("/");for(const l in a)typeof n[a[l]]>"u"&&(n[a[l]]=[]);a.length==2?n[a[0]][a[1]]=Ec(e[o].default):a.length==3?n[a[0]][a[1]][a[2]]=Ec(e[o].default):n[r]=Ec(e[o].default)}else n[r]=Ec(e[o].default)}return n}function Ec(e){const t=[];for(const n in e)if(n.indexOf(".")>0){const o=n.split(".");typeof t[o[0]]>"u"?t[o[0]]=[]:t[o[0]][o[1]]=e[n]}else t[n]=e[n];return t}const Ele=window.localStorage.getItem("ba-lang")||"zh-cn",m$=()=>window.location.protocol+"//"+window.location.host,Rr=Nn.create({baseURL:m$(),timeout:1e3*10,headers:{"Content-Type":"application/json","think-lang":Ele}});Rr.interceptors.response.use(e=>e,e=>(Tle(e),Promise.reject(e)));function Tle(e){let t="";if(e&&e.response)switch(e.response.status){case 404:t=$o.global.t("The interface path cannot be found",{url:e.response.config.url});break;case 408:t=$o.global.t("Request timeout!");break;case 500:t=$o.global.t("Server internal error!");break;case 504:t=$o.global.t("The service is temporarily unavailable. Please try again later!");break;default:t=$o.global.t("Abnormal problem, please contact the website administrator!");break}e.message.includes("timeout")&&(t=$o.global.t("Network Timeout")),e.message.includes("Network Error")&&(t=$o.global.t("Network connection error")),e.message.includes("Network")&&(t=window.navigator.onLine?$o.global.t("Abnormal problem, please contact the website administrator!"):$o.global.t("You're disconnected!")),t||(t=$o.global.t("unknown error")),Cr({type:"error",message:t,center:!0})}const na="/index.php",$le=na+"/api/install/envBaseCheck",Ole=na+"/api/install/envNpmCheck",Nle=na+"/api/install/testDatabase",v$=na+"/api/install/baseConfig",Ile=na+"/api/install/commandExecComplete",Mle=na+"/api/install/mvDist",Ale=na+"/api/install/manualInstall",Ple=na+"/api/install/terminal",Rle=na+"/api/install/changePackageManager",Lle=()=>Rr.get($le),xle=()=>{const e=ii();return Rr.post(Ole,{manager:e.state.packageManager})},Dle=e=>Rr.post(Nle,e),Fle=()=>Rr.get(v$),Ble=e=>Rr.post(v$,e),pw=e=>Rr.post(Ile,e).then(t=>{t.data.code!=1&&Cr({type:"error",message:t.data.msg,center:!0})}),Ua=e=>{const t=ii();Rr.post(Rle,{manager:e}).then(n=>{n.data.code==1?t.changePackageManager(n.data.data.manager):n.data.msg&&Cr({type:"error",message:n.data.msg,center:!0})})},Vle=()=>Rr.post(Mle),Hle=()=>Rr.get(Ale),zle=(e,t,n)=>m$()+Ple+"?command="+e+"&uuid="+t+"&extend="+n,gt={Waiting:0,Connecting:1,Executing:2,Success:3,Failed:4,Unknown:5},ju=Y_("common",()=>{const e=Et({step:"check",showStartDialog:!0});function t(o){e.step=o}function n(o){e.showStartDialog=o}return{state:e,setStep:t,toggleStartDialog:n}},{persist:{key:AI}}),ii=Y_("terminal",()=>{const e=Et({show:!1,showDot:!1,taskList:[],packageManager:"pnpm",showPackageManagerDialog:!1});function t(){for(const b in e.taskList)(e.taskList[b].status==gt.Connecting||e.taskList[b].status==gt.Executing)&&(e.taskList[b].status=gt.Unknown)}function n(b=!e.show){e.show=b,b&&o(!1)}function o(b=!e.showDot){e.showDot=b}function r(b=!e.showPackageManagerDialog){n(!b),e.showPackageManagerDialog=b}function a(b){e.packageManager=b}function l(b,w){e.taskList[b]&&(e.taskList[b].status=w,(w==gt.Failed||w==gt.Unknown)&&e.taskList[b].blockOnFailure&&u(b,!0))}function s(b){if(!e.taskList[b]||typeof e.taskList[b].callback!="function")return;const w=e.taskList[b].status;if(w==gt.Failed||w==gt.Unknown)e.taskList[b].callback(gt.Failed,b);else if(w==gt.Success&&(e.taskList[b].callback(gt.Success,b),e.taskList[b].command=="web-build."+e.packageManager)){const S=ju();S.state.step=="manualInstall"&&(n(!1),S.setStep("done"))}}function u(b,w=!e.taskList[b].showMessage){e.taskList[b].showMessage=w}function c(b,w){e.show||o(!0),e.taskList[b].message=e.taskList[b].message.concat(w),We(()=>{_(e.taskList[b].uuid)})}function f(b,w=!0,S="",E=()=>{}){e.show||o(!0),e.taskList=e.taskList.concat({uuid:LI(),createtime:RI(),status:gt.Waiting,command:b,message:[],showMessage:!1,blockOnFailure:w,extend:S,callback:E}),m()}function d(b,w=!0,S="",E=()=>{}){f(b+"."+e.packageManager,w,S,E)}function p(b){e.taskList[b].status!=gt.Connecting&&e.taskList[b].status!=gt.Executing&&e.taskList.splice(b,1),m()}function m(){let b=null;for(const w in e.taskList){if(e.taskList[w].status==gt.Waiting){b=parseInt(w);break}if(e.taskList[w].status==gt.Connecting||e.taskList[w].status==gt.Executing)break;if(e.taskList[w].status!=gt.Success&&(e.taskList[w].status==gt.Failed||e.taskList[w].status==gt.Unknown)){if(e.taskList[w].blockOnFailure)break;continue}}b!==null&&(l(b,gt.Connecting),v(b))}function v(b){window.eventSource=new EventSource(zle(e.taskList[b].command,e.taskList[b].uuid,e.taskList[b].extend)),window.eventSource.onmessage=function(w){const S=JSON.parse(w.data);if(!S||!S.data)return;const E=g(S.uuid);E!==!1&&(S.data=="command-exec-error"?(l(E,gt.Failed),window.eventSource.close(),s(E),m()):S.data=="command-exec-completed"?(window.eventSource.close(),e.taskList[E].status!=gt.Success&&l(E,gt.Failed),s(E),m()):S.data=="command-link-success"?l(E,gt.Executing):S.data=="command-exec-success"?l(E,gt.Success):c(E,S.data))},window.eventSource.onerror=function(){window.eventSource.close();const w=y(b);w!==!1&&(l(w,gt.Failed),s(w))}}function h(b){e.taskList[b].message=[],l(b,gt.Waiting),m()}function C(){e.taskList=e.taskList.filter(b=>b.status!=gt.Success)}function g(b){for(const w in e.taskList)if(e.taskList[w].uuid==b)return parseInt(w);return!1}function y(b){if(e.taskList[b])return b;{let w=-1;for(const S in e.taskList)(e.taskList[S].status==gt.Connecting||e.taskList[S].status==gt.Executing)&&(w=parseInt(S));return w===-1?!1:w}}function _(b){const w=document.querySelector(".exec-message-"+b);w&&w.scrollHeight&&(w.scrollTop=w.scrollHeight)}return{state:e,init:t,toggle:n,toggleDot:o,setTaskStatus:l,setTaskShowMessage:u,addTaskMessage:c,addTask:f,addTaskPM:d,delTask:p,startTask:m,retryTask:h,clearSuccessTask:C,togglePackageManagerDialog:r,changePackageManager:a}},{persist:{key:PI}}),jle={class:"command"},Wle={class:"task-opt"},Kle=["onClick"],Ule={class:"indent-2"},qle={class:"package-manager-dialog-footer"},Yle=Y({__name:"index",setup(e){const{t}=Bl(),n=ii(),o=l=>{let s=t("terminal.unknown"),u="info";switch(l){case gt.Waiting:s=t("terminal.Waiting for execution"),u="info";break;case gt.Connecting:s=t("terminal.Connecting"),u="warning";break;case gt.Executing:s=t("terminal.Executing"),u="warning";break;case gt.Success:s=t("terminal.Successful execution"),u="success";break;case gt.Failed:s=t("terminal.Execution failed"),u="danger";break;case gt.Unknown:s=t("terminal.Unknown execution result"),u="danger";break}return{statusText:s,statusType:u}},r=()=>{bm.confirm(t("terminal.Are you sure you want to republish?"),t("Reminder"),{confirmButtonText:t("Confirm"),cancelButtonText:t("Cancel"),type:"warning"}).then(()=>{n.addTaskPM("web-build")})},a=()=>{bm.confirm(t("Setup will restart. Are you sure you want to switch package manager?"),t("Reminder"),{confirmButtonText:t("Confirm"),cancelButtonText:t("Cancel"),type:"warning"}).then(()=>{window.localStorage.clear(),location.reload()})};return(l,s)=>{const u=qe("el-tag"),c=qe("el-button"),f=qe("el-icon"),d=qe("el-card"),p=qe("el-timeline-item"),m=qe("el-timeline"),v=qe("el-empty"),h=qe("el-button-group"),C=qe("el-dialog"),g=qs("blur");return T(),V(Ve,null,[K(C,mt(l.$attrs,{modelValue:i(n).state.show,"onUpdate:modelValue":s[5]||(s[5]=y=>i(n).state.show=y),title:i(t)("terminal.Terminal")+" - "+i(n).state.packageManager,class:"ba-terminal-dialog","append-to-body":!0,"close-on-click-modal":!1}),{default:X(()=>[i(n).state.taskList.length?(T(),re(m,{key:0},{default:X(()=>[(T(!0),V(Ve,null,bt(i(n).state.taskList,(y,_)=>(T(),re(p,{key:_,class:N(["task-item","task-status-"+y.status]),type:o(y.status).statusType,center:"",timestamp:y.createtime,placement:"top"},{default:X(()=>[K(d,null,{default:X(()=>[F("div",null,[K(u,{type:o(y.status).statusType},{default:X(()=>[Ge(le(o(y.status).statusText),1)]),_:2},1032,["type"]),(y.status==i(gt).Failed||y.status==i(gt).Unknown)&&y.blockOnFailure?(T(),re(u,{key:0,class:"block-on-failure-tag",type:"warning"},{default:X(()=>[Ge(le(i(t)("terminal.Failure to execute this command will block the execution of the queue")),1)]),_:1})):te("",!0),y.status==i(gt).Connecting||y.status==i(gt).Executing?(T(),re(u,{key:1,class:"block-on-failure-tag",type:"danger"},{default:X(()=>[Ge(le(i(t)("terminal.Do not refresh the browser")),1)]),_:1})):te("",!0),F("span",jle,le(y.command),1),F("div",Wle,[y.status==i(gt).Failed||y.status==i(gt).Unknown?tt((T(),re(c,{key:0,title:i(t)("Retry"),size:"small",type:"warning",icon:i(XC),circle:"",onClick:b=>i(n).retryTask(_)},null,8,["title","icon","onClick"])),[[g]]):te("",!0),tt(K(c,{onClick:b=>i(n).delTask(_),title:i(t)("delete"),size:"small",type:"danger",icon:i(YC),circle:""},null,8,["onClick","title","icon"]),[[g]])])]),y.status!=i(gt).Waiting?(T(),V(Ve,{key:0},[y.status!=i(gt).Connecting&&y.status!=i(gt).Executing?(T(),V("div",{key:0,onClick:b=>i(n).setTaskShowMessage(_),class:"toggle-message-display"},[F("span",null,le(i(t)("terminal.Command run log")),1),K(f,{size:"16",color:"#909399"},{default:X(()=>[y.showMessage?(T(),re(i(pf),{key:0})):(T(),re(i(Nr),{key:1}))]),_:2},1024)],8,Kle)):te("",!0),y.status==i(gt).Connecting||y.status==i(gt).Executing||y.status>i(gt).Executing&&y.showMessage?(T(),V("div",{key:1,class:N(["exec-message","exec-message-"+y.uuid])},[(T(!0),V(Ve,null,bt(y.message,(b,w)=>(T(),V("pre",{key:w,class:"message-item"},le(b),1))),128))],2)):te("",!0)],64)):te("",!0)]),_:2},1024)]),_:2},1032,["class","type","timestamp"]))),128))]),_:1})):(T(),re(v,{key:1,"image-size":80,description:i(t)("terminal.No mission yet")},null,8,["description"])),K(h,null,{default:X(()=>[tt((T(),re(c,{class:"terminal-menu-item",onClick:s[0]||(s[0]=y=>i(n).addTaskPM("test",!1))},{default:X(()=>[Ge(le(i(t)("terminal.Test command")),1)]),_:1})),[[g]]),tt((T(),re(c,{class:"terminal-menu-item",onClick:s[1]||(s[1]=y=>i(n).addTaskPM("web-install"))},{default:X(()=>[Ge(le(i(t)("terminal.Install dependent packages")),1)]),_:1})),[[g]]),tt((T(),re(c,{class:"terminal-menu-item",onClick:s[2]||(s[2]=y=>r())},{default:X(()=>[Ge(le(i(t)("terminal.Republish")),1)]),_:1})),[[g]]),tt((T(),re(c,{class:"terminal-menu-item",onClick:s[3]||(s[3]=y=>i(n).addTask("version.npm",!1))},{default:X(()=>[Ge("npm -v")]),_:1})),[[g]]),tt((T(),re(c,{class:"terminal-menu-item",onClick:a},{default:X(()=>[Ge(le(i(t)("Switch package manager")),1)]),_:1})),[[g]]),tt((T(),re(c,{class:"terminal-menu-item",onClick:s[4]||(s[4]=y=>i(n).clearSuccessTask())},{default:X(()=>[Ge(le(i(t)("terminal.Clean up task list")),1)]),_:1})),[[g]])]),_:1})]),_:1},16,["modelValue","title"]),K(C,{onClose:s[12]||(s[12]=y=>i(n).togglePackageManagerDialog(!1)),modelValue:i(n).state.showPackageManagerDialog,"onUpdate:modelValue":s[13]||(s[13]=y=>i(n).state.showPackageManagerDialog=y),class:"ba-terminal-dialog",title:i(t)("Please select package manager"),center:""},{footer:X(()=>[F("div",qle,[K(c,{onClick:s[6]||(s[6]=y=>i(Ua)("npm"))},{default:X(()=>[Ge("npm")]),_:1}),K(c,{onClick:s[7]||(s[7]=y=>i(Ua)("cnpm"))},{default:X(()=>[Ge("cnpm")]),_:1}),K(c,{onClick:s[8]||(s[8]=y=>i(Ua)("pnpm"))},{default:X(()=>[Ge("pnpm")]),_:1}),K(c,{onClick:s[9]||(s[9]=y=>i(Ua)("yarn"))},{default:X(()=>[Ge("yarn")]),_:1}),K(c,{onClick:s[10]||(s[10]=y=>i(Ua)("ni"))},{default:X(()=>[Ge("ni")]),_:1}),K(c,{onClick:s[11]||(s[11]=y=>i(Ua)("none"))},{default:X(()=>[Ge(le(i(t)("I want to execute the command manually")),1)]),_:1})])]),default:X(()=>[F("div",Ule,le(i(t)("Switch package manager title")),1)]),_:1},8,["modelValue","title"])],64)}}}),ui=(e,t)=>{const n=e.__vccOpts||e;for(const[o,r]of t)n[o]=r;return n},Gle=ui(Yle,[["__scopeId","data-v-c55edab5"]]),g$="/install/assets/logo.svg",Xle="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADIAgMAAADQNkYNAAAACVBMVEUAAADc3eTc3+YFvQraAAAAAnRSTlMA9btEy6sAAAGFSURBVGje7dixbcNAEERR24EBuwSX4CpYimNVoRJYggIF1lTpAr6xPxgo2wkpHMEnUXe7+7LZbDabzWazeVo+/rv4My75Pnjt9XdckpPX3jOteMudF79yHZZ85sGLl9wmSnKAkkyYJCcpyURJ7qQk14GSPEhJbhMlOUCZMEmSk5RkoiR3UAbMa0LMJXxafmy34UOcpPA14ue8i2L4rIbhTQyjFGKUQoxTiFEKMUohRinEOIUYpxDjFGJIUQwphiFFMaQoBhTHkOIYUBwDimNAcQwpjgHFMaA4BhTHgOIYUBwDimNAcQwoggHFMaQ4hhTHkOIYUhxDimNIcczRL+kfzPn9l+w/Zf/C+GvZv/z+F+v/yL5d9JuSb339Bttv435Y9EeSH3z98eqHeF8qeEHSlz1eXPUlnBeKRTnaF71eWvcFvLcJfTPiLU/VWPXtmzeJfSvqDW/fVnvz3o8IfBBRjDv6oYqPbvoBkY+h+mGXj9T6wZ2PB/shpI86N5vNZrPZbDbPyh8nhMFbtczXEQAAAABJRU5ErkJggg==",Jle=Object.freeze(Object.defineProperty({__proto__:null,default:Xle},Symbol.toStringTag,{value:"Module"})),b$="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADIAgMAAADQNkYNAAAADFBMVEUAAAD2bGz1bGz1bGxNefxdAAAAA3RSTlMAVaoLuSc5AAABi0lEQVRo3u3YwXHCQBBEUeOLy+UgHIJTUCjOBDJzCgqBIDhwQe0APrX/0MVt+ihqVXogdmfmbTKZTCaTyWTysnw+u/i7XPKz8drpvlzyt/Pax7Fa8Z4bL37nsljylQcvnnNdUZINlOS+oiQ7KMmxoiQ3UpLLgpI8SEmuK0qygZLcV5RkByU5VpTkBsoCc0qIOYdPy4/tNnyIHZTwNeLnvIti+KyG4U0MoxRilEKMU4hRCjFKIUYpxDiFGKcQ4xRiSFEMKYYhRTGkKAYUx5DiGFAcA4pjQHEMKY4BxTGgOAYUx4DiGFAcA4pjQHEMKIIBxTGkOIYUx5DiGFIcQ4pjSHHM1i/pH8z5/ZfsP2X/wvhr2b/8/hfr/8i+XfSbkm99/Qbbb+N+WPRHkh98/fHqh3hfKnhB0pc9Xlz1JZwXikU52he9Xlr3Bby3CX0z4i1P1Vj17Zs3iX0r6g1v31Z7896PCHwQUYw7+qGKj276AZGPofphl4/U+sGdjwf7IaSPOieTyWQymUwmr8o/BXYQUa5D7j4AAAAASUVORK5CYII=",Zle=Object.freeze(Object.defineProperty({__proto__:null,default:b$},Symbol.toStringTag,{value:"Module"})),Qle="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAMAAACahl6sAAAAmVBMVEUAAABnwjpmwjlnwjpnwztnwjpnwjpnwjpmwzpowzpnwzlnwTtnwjpnwjpmwjlnwzpnwzpnwjpnwjlnwzpnxDltuTZnwjlnwjpnwzpnwzpnwzpnwjpnwjpnwjpnwjhlwDdixDtnwjpnwzlnwjpnwjlowjpnwjpnwzlnwjpnwjpnwjlmwjpnwjpnwjpnwjpmwTpmwjtnwjlnwjrJKS+EAAAAMnRSTlMA7GidKOfFulROSBng2c5vYVs7Mw8Fv7WqfnX1o0MiEwr61dKwlpOJh3o/LvHKgjYdj7mKH34AAANoSURBVHja7dzpUuJQFATgEwhhR1BAZBdwYRu13//hpqxxSsVziQEh98T+fltSVAHp7nARIiIiIiIiIiIiIiIiIiIiIqJfYdJcIKhH/Y7Y9jTDP9uSWFbBu6bY1ccHg7VYNcInRTFqgh1lsekWO/Ji0ha7ArHoDl9sxKAcvqqLPU9QRGJOB5qlmBNAUW+LNUVoLsSaB2iuxZoWNLOxGBNCM1iJNXhnOsTXobkRaxZ4ZT8u3kDTnYoxZWhqoRjzDFVFrNlAkxNrGtA8iDVDaHpizQU024kYs4JmcyXGtKGyN5QWoOmLNV1o7sWa+4xUqSY0s2cx5goqe1XqFpqWWDNjlfLKY0aqVAmajbkqFWalSgUZqVIRNI9iTVaq1BKambkqVYHKXJWqZqVK1TJyN6eY6SpVlJMbh1P5QRfQBKeuUq1eDcDsfiw/5BKqSzmp6R3eFPo/9B8HaVSpKj7odeQHNM5apfRHvW7L0XrQDOW0cvisODlNlZp35LQi7OhWT7H9IJQTC7ArGssR1qlUKT0RNUI5XCGlKrWCYr6WQ3XTqlJVaOqHZu18OsnE3aprl3KIPjRBW84ggqowkuRKaVapCnRBRZIap1ulltANypJQPeUq1YPutiSJXKc+8g4BHB9XX6CZyznl4dBMktlUz3JWdwCOuyKPUqlS+uvimLfqJPDlrtQjHPryHVt/Rt4/cLhJ8HHhxRGdJRz+HPgFv6Aj6ejD4UH2a7mqVFou4PASc4RCNZL05OBwJ27Tmod3pZpwyItTMfVkomnBYZjsWtqQtJVuoet1kryvPDjTUh5At2hrfw2VF6dVKwF01xPZFQ7wytMjnqsCFOp0N3dcQT1xWYNCme4Wvn8x7qoO3TaMPytVEI+Ec+jm69iLTlV8EjaAmOlu5UmVivEcAXunu2rBw2SiqXaxd7qLvEwmmnZx33SX9zSZaKYL6DZlVwvz9NdNOu7pDip/D3cO4eBzMkky3fmdTL5fN3xPJt+d7vxPJgolUXlbpRJOd7onMeAGHxlJJrHTnZlkEjMxGEomqhz2EUOaeGWhSsVpmUwmjukuI2eMygOLyUSf7iwmE82oYKVKxU931o8e/PdUt5hMNOtGNp6HSPsBb7pmX1dvRvfFGqKlb5MiEREREREREREREREREREREdHv8xfQb5TIVcxdIwAAAABJRU5ErkJggg==",ese=Object.freeze(Object.defineProperty({__proto__:null,default:Qle},Symbol.toStringTag,{value:"Module"})),tse="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAMAAACahl6sAAAAllBMVEUAAADnozzkoDzmojzmojzmojznozrnojzmojvmojvnojznojzmojznojzmojzmojznojznojzmojzmojzmojvnojzmojzmojzmpDvmojzmojzmojzmojzmoTvnojznojvlnjjmoDzmojzmojzmojzmojznojznozzmojznojzmoTvmojzmojznpjnmojzmojzmoDzmojxUQ0wVAAAAMXRSTlMAfz+/onQV5+GHevLRybavqJSObl9YUzcP7cRKRTIoGwYj+tedgWROmWks3LsK9s0fysZrJgAABRZJREFUeNrt3Wdv20AMBmDGQ17y3kveM178/3+uQVAUIWO7PuVO4gV8PhZFgdf2G51oqgGllFJKKaWUUkoppdTv1uvB7xCG8Cu8Ib7BLxDhhwj818APDfBeDz/twHchfrqC58r4Vxm8tljiX5cF+CyH/+TAYzv8Ygz+uuIXVfBWGYk8eGpxQaIyAz/lkFmDl8b4zQR8VMVvRuChPN7RBu/cKnjH0L++r/GuPXhmjA9kwC9VfCALXsnjQwfwyGyIDxUC8Mcan2iCNyZINX3t+wiJTUA/aSfwRBuJ929/sgUvzApIdAFg5GPf90jU7rSmBR7gTZ/eS9cH+UZ3X/xZhb1N4rFeFwb3r/UdEC5gTd8+OH0VByBbE4nsw/NwCUTLPDm053zqe/bJbdTt4k/fD0gMA/jkXd+D4vNRw5UeXeT2nTW9CszOk77zpo//N3ucgkwnJHLwTbTEr+og0haJyuL/8/kuCDR4R6IMd8xD/Golse8tJEK4q4fEBsTpI9WD+xrS+17D13p8xH9ErkSwpi+P8MgGCWErUOcVEqWX/2p4BklY01dzeKyLn0SuRPSXJufBOv8UylFHkxP6FD+IXInooNk9U0lo33nTW4aHgOscZCih6VyhI3IlYnpB4mB8+bzI6Hs9xndrfYF9503PmF14xKw8zkMk9rFu76vp9501vTAjN7/ZL+hbtRXW92kFifzju/jMsxvjSgTpavCtmZeDZEStQHWRGj8PwvsuZuVxfuU/Rg2C3ApyVqA2SAwXJkHgIGYF6sia/gYmQfjIe5he3xt8RGoYZCJkJYI3vWsaBPYy+l7lAxHjIIuhhBWoNyQqR/Mg0BbQ92jIBycxgvCViAUkL4dEOI8VZJd633tIdSBWEFinveI84iPSmEGOlXRXoMpILPtxg0A+1ZXHqMAHJ7GDnNlKxA2StEZiFcQPAr0UV6B2SB3AJAiXS6/vWT4i/VGQ6TKtlYgyUhPDIFw5pb4vivwq9sMggzCdvu+RKM6Mg3DdVPrOm54H8yBcI40V5xMfkVoI0sfkVyLySO1sBIFN4ivOtyKfR1kJEqzoCtQMXGsiUYjsBIFOwitQY6TKYCkI1JPt+4mPSK0FySTa9zZSXXtBoJRg32fvfERqLwj/x1e87w6bPpzCc/z7kee2ifV9gj/dthLS9xoS1bPbF6oBjhzQ9QZyK5EV59nK9QvGbxDCAFxoIVHJgH3tBFYeJ8skfqjU+JTJvjom8baPnX98D5jMhbfpuO9BiETdfFseXhLRvl8DsKuExHLiKgjknfY9c+HjAWdB5nRodum7bPrq5i4I9ByuQG2RaoPDIHzc1HXX9Bo4DTKlo/7qwFXTcew2CB+hvllreoWPSB0HGYzoYWgKdjSQKEaug0DXSd8730akzoNAzkHfB1cksvMEgvSHdFgzsL/KhD1IIAhsrD/S0B/GXdnjwwcwEVTZmMP2gkNhCongzVzbXmUqQ1IaVh9pGFTRtHWOrl7Zs81VJuxCckoWPwv9QorL+LOQtvNor+nDPiRpy/pur+kbSFbdUt/PIySqASRrsrTT97LBiNSNlpVHGqaF1B+rXdApbTFe39euR6Tm07R9vKVFCf/VRC3OI0x8KiPQaQ6m8iiScd+PRRSpGBmvMgnVNF1lEmtn1PQTinWa+99040caoncU7D0y+NZItJf7Pkbhxi8fC4SrwUvaKN5LfV+8ecDv38qilFJKKaWUUkoppZRSSimllFIv+wNEulUVw2/KggAAAABJRU5ErkJggg==",nse=Object.freeze(Object.defineProperty({__proto__:null,default:tse},Symbol.toStringTag,{value:"Module"})),ose="/install/assets/loading.gif",rse="/install/assets/lang.svg",ase=e=>(Xd("data-v-631c568f"),e=e(),Jd(),e),lse={class:"lang"},sse=["src"],ise={class:"lang-list"},use=ase(()=>F("span",{class:"lang-list-arrow"},null,-1)),cse={class:"logo-box"},dse=["src"],fse={class:"title"},pse=Y({__name:"index",setup(e){const{t}=Bl(),n=o=>{window.localStorage.setItem("ba-lang",o),location.reload()};return(o,r)=>(T(),V(Ve,null,[F("div",lse,[F("img",{src:i(rse),alt:"lang icon"},null,8,sse),F("div",ise,[use,F("div",{onClick:r[0]||(r[0]=a=>n("zh-cn")),class:"lang-item"},"中文简体"),F("div",{onClick:r[1]||(r[1]=a=>n("en")),class:"lang-item"},"English")])]),F("div",cse,[F("img",{class:"logo",alt:"Build Admin logo",src:i(g$)},null,8,dse),F("div",fse,le(i(t)("Install BuildAdmin")),1)])],64))}}),Kf=ui(pse,[["__scopeId","data-v-631c568f"]]);var hse={VITE_PORT:"2828",VITE_OPEN:"false",VITE_BASE_PATH:"/install/",BASE_URL:"/install/",MODE:"production",DEV:!1,PROD:!0,SSR:!1};const mse={class:"container"},vse={class:"table-title"},gse={class:"table"},bse={key:0,class:"global-warning"},yse={target:"_blank",href:"https://doc.buildadmin.com/guide/install/start.html"},wse={class:"table-label"},_se=["title","onClick"],Cse={class:"table-value"},Sse=["title","src","alt"],kse={key:1,class:"table-item"},Ese={class:"table-label"},Tse={class:"table-value"},$se=["title","alt"],Ose={class:"block-help"},Nse={class:"start-install"},Ise=Y({__name:"check",setup(e){const{t,locale:n}=Bl(),o=ju(),r=ii(),a=Et({envCheckData:[],stateTitle:{ok:"Environmental inspection passed",fail:"This environmental check failed",warn:"The environment check failed, but the installation can continue"},checkType:{base:"Basic environment",npm:"NPM correlation",npminstall:"Test npm install",done:"Check complete"},checkTypeIndex:"base",checkDone:{ok:"Congratulations, the installation can continue~",fail:"Sorry, the necessary installation environment conditions have not been met, please check the above form!",executing:"executing"},checkDoneIndex:"executing",startForm:{lang:n.value,packageManager:r.state.packageManager,setNpmRegistry:"taobao"},showPortErrorPrompt:!1}),l=Object.assign({"../assets/img/install/close.png":Jle,"../assets/img/install/fail.png":Zle,"../assets/img/install/ok.png":ese,"../assets/img/install/warn.png":nse}),s=w=>{const S=`../assets/img/install/${w}.png`;return l[S].default},u=w=>{window.localStorage.setItem("ba-lang",w),location.reload()},c=()=>{o.state.showStartDialog&&Ua(a.startForm.packageManager),o.toggleStartDialog(!1),Lle().then(w=>{if(w.data.code!=1)return p(w.data.msg);m(),a.envCheckData=w.data.data})},f=w=>{w.type=="faq"?window.open(w.url):w.type=="install-package-manager"?(a.checkDoneIndex="executing",v(),r.toggle(!0),r.addTaskPM("install",!0,"",S=>{r.toggle(!1),y(),S==gt.Failed?p(t("Sorry, the automatic installation of package manager failed. Please complete the installation manually!")):S==gt.Success&&(a.envCheckData=Object.assign({},a.envCheckData,{success:{describe:t("PM is ready!"),state:"ok",link:[]}}),a.envCheckData=Object.assign({},a.envCheckData,{npm_package_manager:{describe:t("already installed"),state:"ok",link:[],pm:r.state.packageManager}}),h())})):w.type=="test-npm-install"&&C()},d=()=>{a.checkDoneIndex=="ok"&&o.setStep("config")},p=w=>{y(),a.checkDoneIndex=="fail"&&(a.checkDoneIndex="executing"),Cr({type:"error",message:w,duration:0,center:!0})},m=()=>{a.checkTypeIndex="npm",xle().then(w=>{if(y(),w.data.code==2)return!1;if(w.data.code!=1)return p(w.data.msg);a.envCheckData=Object.assign({},a.envCheckData,w.data.data),w.data.data.npm_package_manager.state=="ok"&&(v(),h())})},v=()=>{if(a.startForm.setNpmRegistry!="none"){let w=!1;for(const S in r.state.taskList)if(r.state.taskList[S].command=="set-npm-registry."+a.startForm.setNpmRegistry&&r.state.taskList[S].status==gt.Success){w=!0;break}w||r.addTask("set-npm-registry."+a.startForm.setNpmRegistry,!1,"",S=>{if(S==gt.Failed){let E={"set-npm-registry":{describe:t("Command execution failed"),state:"fail",link:[{name:t("How to solve"),title:t("Click to see how to solve it"),type:"faq",url:"https://doc.buildadmin.com/guide/install/setNpmRegistryFail.html"}]}};a.envCheckData=Object.assign({},a.envCheckData,E)}})}},h=()=>{a.envCheckData=Object.assign({},a.envCheckData,{"check npm install":{describe:"",state:"warn",link:[{name:t("Click to test"),title:t("Click to test")+" npm install",type:"test-npm-install"}]}})},C=()=>{a.checkDoneIndex="executing",a.checkTypeIndex="npminstall",g("check npm install"),r.toggle(!0),r.addTaskPM("test",!0,"",w=>{if(y(),r.toggle(!1),w==gt.Failed){let S={"test-npm-install":{describe:t("Command execution test failed"),state:"warn",link:[{name:t("How to solve"),title:t("Click to see how to solve it"),type:"faq",url:"https://doc.buildadmin.com/guide/install/npmInstallFail.html"}]}};a.envCheckData=Object.assign({},a.envCheckData,S)}else if(w==gt.Success){let S={"test-npm-install":{describe:t("Can execute"),state:"ok",link:[]}};a.envCheckData=Object.assign({},a.envCheckData,S)}})},g=w=>{delete a.envCheckData[w]},y=()=>{a.checkTypeIndex="done";let w=["php_version","config_is_writable","public_is_writable","php_pdo","php_gd2"];for(const S in w)if(!a.envCheckData[w[S]]||a.envCheckData[w[S]].state!="ok")return a.checkDoneIndex="fail",!1;return a.checkDoneIndex="ok",!0},_=()=>r.state.packageManager=="none"?t("None - manual execution"):r.state.packageManager,b=()=>{let w=hse.VITE_AXIOS_BASE_URL;return w=w=="getCurrentDomain"||!w?window.location.protocol+"//"+window.location.host:w,new URL(w).port};return at(()=>{o.state.showStartDialog||c(),b()!="8000"&&(a.showPortErrorPrompt=!0)}),(w,S)=>{const E=qe("el-alert"),$=qe("el-option"),O=qe("el-select"),A=qe("el-form-item"),M=qe("el-radio"),D=qe("el-radio-group"),U=qe("el-form"),j=qe("el-icon"),W=qe("el-button"),L=qe("el-dialog");return T(),V("div",null,[K(Kf),F("div",mse,[F("div",vse,le(i(t)("Environmental inspection")),1),F("div",gse,[a.showPortErrorPrompt?(T(),V("div",bse,[K(E,{closable:!1,center:"",type:"error"},{default:X(()=>[Ge(le(i(t)("Port error prompt 1"))+" ",1),F("a",yse,le(i(t)("Get started quickly")),1),Ge(" "+le(i(t)("Port error prompt 3")),1)]),_:1})])):te("",!0),K(ku,{name:"slide-bottom"},{default:X(()=>[(T(!0),V(Ve,null,bt(a.envCheckData,(P,x)=>(T(),V("div",{class:N(["table-item",x]),key:x+P.describe+P.state},[F("div",wse,[Ge(le(x.toString()=="npm_package_manager"?i(t)(x)+" "+_():i(t)(x))+" ",1),P.link&&P.link.length>0?(T(!0),V(Ve,{key:0},bt(P.link,(I,H)=>(T(),V("span",{key:H,title:I.title?I.title:"",onClick:G=>f(I),class:N(["label-need",I.type])},le(I.name),11,_se))),128)):te("",!0)]),F("div",Cse,[Ge(le(P.describe)+" ",1),F("img",{title:i(t)(a.stateTitle[P.state]),class:"data-state",src:s(P.state),alt:P.state},null,8,Sse)])],2))),128))]),_:1}),a.checkTypeIndex!="done"?(T(),V("div",kse,[F("div",Ese,le(i(t)("Checking installation environment")),1),F("div",Tse,[Ge(le(i(t)(a.checkType[a.checkTypeIndex]))+" ",1),F("img",{title:i(t)("Current execution to:")+i(t)(a.checkType[a.checkTypeIndex]),class:"data-state",src:ose,alt:i(t)(a.checkType[a.checkTypeIndex])},null,8,$se)])])):te("",!0),F("div",{class:N(["check-done",a.checkDoneIndex])},le(i(t)(a.checkDone[a.checkDoneIndex])),3),F("div",{class:N(["button",a.checkDoneIndex=="ok"?"pass":""]),onClick:d},le(i(t)("Step 2 site configuration")),3)])]),K(L,{modelValue:i(o).state.showStartDialog,"onUpdate:modelValue":S[3]||(S[3]=P=>i(o).state.showStartDialog=P),"close-on-click-modal":!1,"close-on-press-escape":!1,"show-close":!1,"destroy-on-close":!0,class:"ba-terminal-dialog",title:i(t)("Ready to start"),center:""},{footer:X(()=>[K(W,{onClick:c,type:"primary",size:"large",round:""},{default:X(()=>[K(j,null,{default:X(()=>[K(i(D4))]),_:1}),F("span",Nse,le(i(t)("Start installation")),1)]),_:1})]),default:X(()=>[K(U,{onKeyup:Pt(c,["enter"]),class:"start-from","label-position":"left","label-width":"120px",model:a.startForm},{default:X(()=>[K(A,{label:i(t)("language")},{default:X(()=>[K(O,{onChange:u,class:"w100",modelValue:a.startForm.lang,"onUpdate:modelValue":S[0]||(S[0]=P=>a.startForm.lang=P)},{default:X(()=>[K($,{label:"中文简体",value:"zh-cn"}),K($,{label:"English",value:"en"})]),_:1},8,["modelValue"])]),_:1},8,["label"]),K(A,{label:i(t)("NPM package manager")},{default:X(()=>[K(O,{class:"w100",modelValue:a.startForm.packageManager,"onUpdate:modelValue":S[1]||(S[1]=P=>a.startForm.packageManager=P)},{default:X(()=>[K($,{label:"npm",value:"npm"}),K($,{label:"cnpm",value:"cnpm"}),K($,{label:"pnpm"+i(t)("recommend"),value:"pnpm"},null,8,["label"]),K($,{label:"yarn"+i(t)("recommend"),value:"yarn"},null,8,["label"]),K($,{label:"ni",value:"ni"}),K($,{label:i(t)("I want to execute the command manually"),value:"none"},null,8,["label"])]),_:1},8,["modelValue"]),F("div",Ose,le(i(t)("The system has a Web terminal. Please select an installed or your favorite NPM package manager")),1)]),_:1},8,["label"]),K(A,{label:i(t)("Set NPM source")},{default:X(()=>[K(D,{modelValue:a.startForm.setNpmRegistry,"onUpdate:modelValue":S[2]||(S[2]=P=>a.startForm.setNpmRegistry=P),class:"ml-4"},{default:X(()=>[K(M,{label:i(t)("Use current source"),value:"none",size:"large"},null,8,["label"]),K(M,{label:i(t)("TaoBao"),value:"taobao",size:"large"},null,8,["label"]),K(M,{label:"NPM",value:"npm",size:"large"}),K(M,{label:i(t)("Tencent"),value:"tencent",size:"large"},null,8,["label"])]),_:1},8,["modelValue"])]),_:1},8,["label"])]),_:1},8,["onKeyup","model"])]),_:1},8,["modelValue","title"])])}}}),Mse=ui(Ise,[["__scopeId","data-v-e96f3865"]]),y$=e=>(Xd("data-v-efc9ce06"),e=e(),Jd(),e),Ase={class:"container"},Pse={class:"table-title"},Rse={key:0,class:"install-tips-box"},Lse={class:"install-tips"},xse=["alt"],Dse={class:"install-tips-title"},Fse={class:"install-tips-item"},Bse={class:"install-tips-item"},Vse={class:"change-route",href:"https://gitee.com/wonderful-code/buildadmin/issues",target:"_blank"},Hse={class:"table"},zse={key:0,class:"table-item-br"},jse={key:1,class:"table-column table-item"},Wse={key:0,class:"block-help"},Kse={class:"connecting-prompt"},Use={class:"footer-buttons"},qse={class:"phinx-fail-box"},Yse={class:"title"},Gse={class:"content-item"},Xse={class:"content-item"},Jse={class:"command"},Zse={class:"content-item"},Qse=y$(()=>F("div",{class:"command"},"php think migrate:run",-1)),eie={class:"block-help"},tie={class:"content-item"},nie={class:"text"},oie=y$(()=>F("div",{class:"output-box"},[F("div",{class:"output"},"PS E:\\build-admin> php think migrate:run"),F("div",{class:"output mt10"},"== 20230620180908 Install: migrating"),F("div",{class:"output"},"== 20230620180908 Install: migrated 0.0165s"),F("div",{class:"output mt10"},"== 20230620180916 InstallData: migrating"),F("div",{class:"output"},"== 20230620180916 InstallData: migrated 0.0573s"),F("div",{class:"output mt10"},"All Done. Took 0.0898s")],-1)),rie={class:"block-help mt10"},aie={class:"command"},lie={class:"phinx-fail-footer-button"},sie=Y({__name:"config",setup(e){var t,n={hostname:"",username:"",password:"",hostport:""};const{t:o}=Bl(),r=ju(),a=ii(),l=R(),s=Et({formItem:{hostname:{label:o("Mysql database address"),value:"127.0.0.1",name:"hostname",type:"text"},username:{label:o("MySQL connection user name"),value:"root",name:"username",type:"text"},password:{label:o("MySQL connection password"),value:"",name:"password",type:"password"},hostport:{label:o("MySQL connection port number"),value:"3306",name:"hostport",type:"number"},database:{label:o("Mysql database name"),value:"",name:"database",type:"text",blockHelp:""},prefix:{label:o("MySQL data table prefix"),value:"ba_",name:"prefix",type:"text"},br1:{type:"br"},adminname:{label:o("Administrator user name"),value:"admin",name:"adminname",type:"text"},adminpassword:{label:o("Administrator password"),value:"",name:"adminpassword",type:"password",placeholder:o("Backend login password")},repeatadminpassword:{label:o("Duplicate administrator password"),value:"",name:"repeatadminpassword",type:"password"},br2:{type:"br"},sitename:{label:o("Site name"),value:"BuildAdmin",name:"sitename",type:"text"}},showFormItem:!1,showError:"",baseConfigSubmitState:!1,databaseCheck:"wait",databases:[],showInstallTips:!1,autoJumpSeconds:5,maximumCommandFailures:1,commandFailureCount:0,executionWebCommand:!0,execMigrateFail:!1,execMigrateIdx:0,rootPath:""}),u=async()=>{n={hostname:s.formItem.hostname.value,username:s.formItem.username.value,password:s.formItem.password.value,hostport:s.formItem.hostport.value,database:s.formItem.database.value},n.hostname&&n.username&&n.hostport&&(s.databaseCheck="connecting",await Dle(n).then(y=>{if(y.data.code==1)s.databaseCheck="connect-ok",s.databases=y.data.data.databases,s.formItem.database.value&&c.findDatabase(s.formItem.database.value);else throw s.databaseCheck="wait",s.databases=[],Cr({type:"error",message:y.data.msg,center:!0}),new Error(y.data.msg)}))},c={required:(y,_,b)=>_.value==""||!_.value?b(new Error(_.label+o("Required"))):b(),findDatabase:y=>{s.databaseCheck=="connect-ok"&&(y&&s.databases.indexOf(y)===-1?s.formItem.database.blockHelp=o("The entered database was not found!"):s.formItem.database.blockHelp="")},database:(y,_,b)=>(c.findDatabase(_.value),b()),connect:(y,_,b)=>{let w=!1;for(const S in n)n[S]!=s.formItem[S].value&&(w=!0);return w&&u(),b()},prefix:function(y,_,b){if(_.value){var w=new RegExp(/^[a-zA-Z][a-zA-Z0-9_]*$/i);if(!w.test(_.value))return b(new Error(o("The table prefix can only contain alphanumeric characters and underscores, and starts with a letter")))}return b()},adminname:function(y,_,b){return/^[a-zA-Z][a-zA-Z0-9_]{2,15}$/.test(_.value)?b():b(new Error(o("It is composed of letters, numbers and underscores, starting with letters (3-15 digits)")))},adminpassword:function(y,_,b){return/^(?!.*[&<>"'\n\r]).{6,32}$/.test(_.value)?b():b(new Error(o("Please enter the correct password")))},repeatadminpassword:function(y,_,b){return s.formItem.adminpassword.value&&_.value&&s.formItem.adminpassword.value!=_.value?b(new Error(o("Duplicate passwords do not match"))):b()}},f=Et({hostname:[{validator:c.required,trigger:"blur"}],username:[{validator:c.required,trigger:"blur"}],hostport:[{validator:c.required,trigger:"blur"}],database:[{validator:c.required,trigger:"blur"},{validator:c.database,trigger:"blur"}],prefix:[{validator:c.connect,trigger:"blur"},{validator:c.prefix,trigger:"blur"}],adminname:[{validator:c.required,trigger:"blur"},{validator:c.connect,trigger:"blur"},{validator:c.adminname,trigger:"blur"}],adminpassword:[{validator:c.required,trigger:"blur"},{validator:c.connect,trigger:"blur"},{validator:c.adminpassword,trigger:"blur"}],repeatadminpassword:[{validator:c.required,trigger:"blur"},{validator:c.repeatadminpassword,trigger:"blur"}],sitename:[{validator:c.required,trigger:"blur"}]}),d=y=>{window.open(y)},p=y=>{s.showError=y},m=()=>{a.addTask("migrate.run",!0,"",(y,_)=>{y==gt.Success?v():(s.execMigrateIdx=_,s.execMigrateFail=!0)})},v=()=>{s.execMigrateIdx&&a.delTask(s.execMigrateIdx),setTimeout(()=>{pw({type:"migrate",adminname:s.formItem.adminname.value,adminpassword:s.formItem.adminpassword.value,sitename:s.formItem.sitename.value}).then(()=>{h()})},1500)},h=()=>{if(s.execMigrateFail=!1,!s.executionWebCommand){s.showInstallTips=!1,r.setStep("manualInstall");return}a.toggle(!0),a.addTaskPM("web-install",!0,"",(y,_)=>{y==gt.Success?a.addTaskPM("web-build",!0,"",b=>{s.baseConfigSubmitState=!1,b==gt.Success?(pw({type:"web"}),a.toggle(!1),r.setStep("done")):b==gt.Failed&&g()}):y==gt.Failed&&(s.commandFailureCount{y&&(s.baseConfigSubmitState=!0,u().then(()=>{y.validate(_=>{if(_){let b={};for(const w in s.formItem)b=Object.assign(b,{[w]:s.formItem[w].value});Ble(b).then(w=>{w.data.code==1?(s.rootPath=w.data.data.rootPath,s.executionWebCommand=w.data.data.executionWebCommand,m()):(Cr({type:"error",message:w.data.msg,center:!0}),s.baseConfigSubmitState=!1)}).catch(()=>{s.baseConfigSubmitState=!1})}else s.baseConfigSubmitState=!1})}).catch(()=>{s.baseConfigSubmitState=!1}))};Fle().then(y=>{y.data.code==1?(s.rootPath=y.data.data.rootPath,s.showInstallTips=!y.data.data.executionWebCommand,s.executionWebCommand=y.data.data.executionWebCommand):y.data.code==0?Cr({type:"error",message:y.data.msg,center:!0,duration:0}):s.showInstallTips=!0});const g=()=>{a.toggle(!1),t=setInterval(()=>{s.autoJumpSeconds<=0?(clearInterval(t),r.setStep("manualInstall")):(s.autoJumpSeconds--,p(o("Manual Install 1")+o("Manual Install 2",{seconds:s.autoJumpSeconds})))},1e3)};return at(()=>{s.showFormItem=!0}),lr(()=>{clearInterval(t)}),(y,_)=>{const b=qe("el-input"),w=qe("el-form-item"),S=qe("el-button"),E=qe("el-alert"),$=qe("el-dialog");return T(),V(Ve,null,[F("div",null,[K(Kf),F("div",Ase,[F("div",Pse,le(i(o)("Site configuration")),1),s.showInstallTips?(T(),V("div",Rse,[F("div",Lse,[F("img",{class:"install-tips-close",onClick:_[0]||(_[0]=O=>s.showInstallTips=!1),src:b$,alt:i(o)("Close the prompt of completing unfinished matters manually")},null,8,xse),F("div",Dse,[F("span",null,le(i(o)("Install Tips Title 1")),1),F("span",{class:"change-route",onClick:_[1]||(_[1]=O=>i(r).setStep("check"))},le(i(o)("Back to previous page")),1),F("span",null,le(i(o)("Install Tips Title 2")),1)]),F("div",Fse,[Ge(le(i(o)("If you don't want to open the corresponding permission due to some security factors, please check "))+" ",1),F("span",{onClick:_[2]||(_[2]=O=>d("https://doc.buildadmin.com/guide/install/senior.html")),class:"change-route"},le(i(o)("how installation services ensure system security")),1)]),F("div",Bse,[Ge(le(i(o)("If you really can't adjust all the tests to pass, please "))+" ",1),F("a",Vse,le(i(o)("click to feed back to us")),1),Ge(" "+le(i(o)("continue installation")),1)])])])):te("",!0),F("div",Hse,[K(i(zS),{ref_key:"formRef",ref:l,"label-width":"150px",onKeyup:_[5]||(_[5]=Pt(O=>C(l.value),["enter"])),rules:f,model:s.formItem},{default:X(()=>[K(fn,{name:"slide-bottom"},{default:X(()=>[tt(F("div",{class:"table-column table-error"},le(s.showError),513),[[kt,s.showError]])]),_:1}),K(ku,{name:"slide-bottom"},{default:X(()=>[(T(!0),V(Ve,null,bt(s.formItem,(O,A)=>tt((T(),V("div",{key:A},[O.type=="br"?(T(),V("div",zse)):(T(),V("div",jse,[K(w,{prop:O.name,class:"table-label",label:O.label},{default:X(()=>[K(b,{placeholder:O.placeholder?O.placeholder:"",modelValue:O.value,"onUpdate:modelValue":M=>O.value=M,class:"table-input",type:O.type},null,8,["placeholder","modelValue","onUpdate:modelValue","type"]),O.blockHelp?(T(),V("div",Wse,le(O.blockHelp),1)):te("",!0)]),_:2},1032,["prop","label"])]))])),[[kt,s.showFormItem]])),128))]),_:1}),K(fn,{name:"slide-bottom"},{default:X(()=>[tt(F("div",null,[tt(F("div",Kse,[F("span",null,le(i(o)("Test connection to data server")),1)],512),[[kt,s.databaseCheck=="connecting"]]),F("div",Use,[K(S,{class:"button",onClick:_[3]||(_[3]=O=>i(r).setStep("check"))},{default:X(()=>[Ge(le(i(o)("Previous step")),1)]),_:1}),K(S,{type:"primary",class:"button",onClick:_[4]||(_[4]=O=>C(l.value)),loading:s.baseConfigSubmitState},{default:X(()=>[Ge(le(i(o)("Install now")),1)]),_:1},8,["loading"])])],512),[[kt,s.showFormItem]])]),_:1})]),_:1},8,["rules","model"])])])]),K($,{modelValue:s.execMigrateFail,"onUpdate:modelValue":_[6]||(_[6]=O=>s.execMigrateFail=O),top:"5vh","close-on-click-modal":!1,"close-on-press-escape":!1,"show-close":!1,title:i(o)("Table migration failed")},{default:X(()=>[K(E,{title:i(o)("We use Phinx to manage the data table, which can version the data table"),closable:!1,center:"",type:"info"},null,8,["title"]),F("div",qse,[F("div",Yse,le(i(o)("Data table automatic migration failed, please manually migrate as follows:")),1),F("div",Gse,"1、"+le(i(o)("Open terminal (windows PowerShell)")),1),F("div",Xse,[F("div",null,"2、"+le(i(o)("Execute command")),1),F("div",Jse,"cd "+le(s.rootPath),1)]),F("div",Zse,[F("div",null,"3、"+le(i(o)("Execute command")),1),Qse,F("div",eie,le(i(o)("If the command fails to be executed, add sudo or press the error message")),1)]),F("div",tie,[F("div",null,"4、"+le(i(o)("Migration check")),1),F("div",nie,le(i(o)("When the command is executed successfully, the output is similar to:")),1),oie,F("div",rie,[Ge(le(i(o)("After the command is executed successfully, multiple data tables will be automatically created in the database, and then click below to "))+" ",1),F("span",aie,le(i(o)("continue install")),1)])])]),F("div",lie,[K(S,{type:"primary",onClick:v},{default:X(()=>[Ge(le(i(o)("continue install")),1)]),_:1})])]),_:1},8,["modelValue","title"])],64)}}}),iie=ui(sie,[["__scopeId","data-v-efc9ce06"]]),uie={class:"container"},cie={class:"table-title"},die={class:"done-box"},fie={class:"reload-tips"},pie={class:"text-warning"},hie={class:"done-button"},mie=Y({__name:"done",setup(e){const{t}=Bl(),n=window.location.protocol+"//"+window.location.host,o=Et({hideIndexUrl:"https://doc.buildadmin.com/guide/install/hideIndex.html",indexUrl:n+"/index.html/#/",adminUrl:n+"/index.html/#/admin"}),r=l=>{window.open(l)},a=()=>{window.localStorage.clear(),location.reload()};return(l,s)=>{const u=qe("el-alert"),c=qe("el-button");return T(),V("div",null,[K(Kf),F("div",uie,[F("div",cie,"✨ "+le(i(t)("Thanks for using buildadmin"))+" ✨",1),F("div",die,[F("div",null,le(i(t)("Background URL")),1),F("div",{onClick:s[0]||(s[0]=f=>r(o.adminUrl)),class:"admin-url"},le(o.adminUrl),1),F("div",fie,[Ge(le(i(t)("Need to reinstall the system?")),1),F("span",{class:"reload",onClick:a},le(i(t)("Please click on me")),1)])]),F("div",pie,[K(u,{closable:!1,center:"",title:i(t)("It is recommended to delete the root directory / public / install folder; This page is only visible on your device."),type:"error"},null,8,["title"])]),F("div",hie,[K(c,{onClick:s[1]||(s[1]=f=>r(o.hideIndexUrl)),type:"primary",plain:"",size:"large"},{default:X(()=>[Ge(le(i(t)("Hide index.html?")),1)]),_:1}),K(c,{onClick:s[2]||(s[2]=f=>r(o.indexUrl)),type:"primary",plain:"",size:"large"},{default:X(()=>[Ge(le(i(t)("Access foreground")),1)]),_:1}),K(c,{onClick:s[3]||(s[3]=f=>r(o.adminUrl)),type:"primary",size:"large"},{default:X(()=>[Ge(le(i(t)("Access background")),1)]),_:1})])])])}}}),vie=ui(mie,[["__scopeId","data-v-e1e72612"]]),Wu=e=>(Xd("data-v-292784ff"),e=e(),Jd(),e),gie={class:"container"},bie={class:"title"},yie={class:"content"},wie={class:"content-item"},_ie={class:"content-item"},Cie={class:"command"},Sie={class:"content-item"},kie=Wu(()=>F("div",{class:"command"},"npm install",-1)),Eie={class:"content-item"},Tie=Wu(()=>F("div",{class:"command"},"npm run build",-1)),$ie={class:"content-item"},Oie={class:"step-box"},Nie={class:"step"},Iie={class:"text-bold"},Mie={class:"step"},Aie=Wu(()=>F("span",{class:"text-bold"},"assets",-1)),Pie=Wu(()=>F("span",{class:"text-bold"},"index.html",-1)),Rie=Wu(()=>F("span",{class:"text-bold"},"public",-1)),Lie={class:"step"},xie={class:"min-help"},Die={key:0,class:"loading"},Fie={class:"reload-tips"},Bie=Y({__name:"index",setup(e){const{t}=Bl(),n=ju(),o=Et({showLoading:"",webPath:t("Getting full path of root directory / Web")}),r=s=>{window.open(s)},a=()=>{o.showLoading=t("Moving automatically"),Vle().then(s=>{s.data.code==1?n.setStep("done"):Cr({type:"error",message:s.data.msg,center:!0})}).finally(()=>{o.showLoading=""})};Hle().then(s=>{s.data.code==1?o.webPath=s.data.data.webPath:Cr({type:"error",message:s.data.msg,center:!0})});const l=()=>{window.localStorage.clear(),location.reload()};return(s,u)=>{const c=qe("el-alert");return T(),V("div",gie,[F("div",bie,le(i(t)("Unfinished matters manually")),1),F("div",yie,[K(c,{title:i(t)("Sorry, some operations could not be completed automatically You need to manually complete the outstanding matters according to the following guidance"),type:"error"},null,8,["title"]),F("div",wie,"1、"+le(i(t)("Open terminal (windows PowerShell)")),1),F("div",_ie,[F("div",null,"2、"+le(i(t)("Execute command")),1),F("div",Cie,"cd "+le(o.webPath),1)]),F("div",Sie,[F("div",null,"3、"+le(i(t)("Execute command")),1),kie,F("div",{onClick:u[0]||(u[0]=f=>r("https://doc.buildadmin.com/guide/install/npmInstallFail.html")),class:"block-help link"},le(i(t)("Execution failed?")),1)]),F("div",Eie,[F("div",null,"4、"+le(i(t)("Execute command")),1),Tie,F("div",{onClick:u[1]||(u[1]=f=>r("https://doc.buildadmin.com/guide/install/npmBuildFail.html")),class:"block-help link"},le(i(t)("Execution failed?")),1)]),F("div",$ie,[F("div",null,"5、"+le(i(t)("Move the built file to the specified location of the system")),1),F("div",{onClick:a,class:"block-help link size-15"},le(i(t)("Click to try to automatically move the build file")),1),F("div",Oie,[F("div",Nie,[Ge(" 1. "+le(i(t)("The build output directory is: site")),1),F("span",Iie,le(i(t)("root directory / dist")),1)]),F("div",Mie,[Ge(" 2. "+le(i(t)("Please move 1")),1),Aie,Ge(le(i(t)("Please move 2")),1),Pie,Ge(le(i(t)("Please move 3")),1),Rie,Ge(le(i(t)("Please move 4")),1)]),F("div",Lie,"3. "+le(i(t)("You can delete the build output directory directly")),1)]),F("div",xie,le(i(t)("During construction, all files in the output directory will be overwritten, so the system is designed to build in the root directory first, and then move to the public directory to prevent other files in the public from being overwritten")),1)]),o.showLoading?(T(),V("div",Die,le(o.showLoading),1)):te("",!0)]),F("div",Fie,[Ge(le(i(t)("Need to reinstall the system?")),1),F("span",{class:"reload",onClick:l},le(i(t)("Please click on me")),1)])])}}}),Vie=ui(Bie,[["__scopeId","data-v-292784ff"]]),Hie=Y({__name:"manualInstall",setup(e){return(t,n)=>(T(),V("div",null,[K(Kf),K(Vie)]))}}),zie={class:"ba-terminal"},jie=["src"],Wie=Y({__name:"App",setup(e){const t=ju(),n=ii(),{locale:o,getLocaleMessage:r}=Bl();var a=window.localStorage.getItem("ba-lang")||"zh-cn";o.value=a;const l=r(a);return at(()=>{n.init()}),(s,u)=>{const c=qe("el-badge"),f=qe("el-config-provider");return T(),re(f,{locale:i(l)},{default:X(()=>[i(t).state.step=="check"?(T(),re(Mse,{key:0})):te("",!0),i(t).state.step=="config"?(T(),re(iie,{key:1})):te("",!0),i(t).state.step=="done"?(T(),re(vie,{key:2})):te("",!0),i(t).state.step=="manualInstall"?(T(),re(Hie,{key:3})):te("",!0),K(Gle),F("div",zie,[K(c,{"is-dot":i(n).state.showDot},{default:X(()=>[F("img",{onClick:u[0]||(u[0]=d=>i(n).toggle()),class:"terminal-logo",draggable:"false",src:i(g$),alt:"BuildAdmin Logo"},null,8,jie)]),_:1},8,["is-dot"])])]),_:1},8,["locale"])}}});function Kie(e){Yie(e),qie(e),Uie(e)}function Uie(e){e.directive("blur",{mounted(t){t.addEventListener("focus",()=>{t.blur()})}})}function qie(e){e.directive("zoom",{mounted(t,n){if(!n.value)return!1;We(()=>{const o=document.querySelector(n.value),r=document.createElement("div");r.className="zoom-handle",r.onmouseenter=()=>{r.onmousedown=a=>{const l=a.clientX,s=a.clientY,u=o.offsetWidth,c=o.offsetHeight;document.onmousemove=f=>{f.preventDefault();const d=u+(f.clientX-l)*2,p=c+(f.clientY-s);o.style.width=`${d}px`,o.style.height=`${p}px`},document.onmouseup=function(){document.onmousemove=null,document.onmouseup=null}}},o.appendChild(r)})}})}function Yie(e){e.directive("drag",{mounted(t,n){if(!n.value)return!1;const o=document.querySelector(n.value[0]),r=document.querySelector(n.value[1]);if(!r||!o)return!1;r.onmouseover=()=>r.style.cursor="move";function a(s,u){const c=u==="pc"?s.clientX-r.offsetLeft:s.touches[0].clientX-r.offsetLeft,f=u==="pc"?s.clientY-r.offsetTop:s.touches[0].clientY-r.offsetTop,d=document.body.clientWidth,p=document.body.clientHeight||document.documentElement.clientHeight,m=o.offsetWidth,v=o.offsetHeight,h=o.offsetLeft,C=d-o.offsetLeft-m,g=o.offsetTop,y=p-o.offsetTop-v;let _=getComputedStyle(o).left,b=getComputedStyle(o).top;return _.includes("%")?(_=+document.body.clientWidth*(+_.replace(/\%/g,"")/100),b=+document.body.clientHeight*(+b.replace(/\%/g,"")/100)):(_=+_.replace(/\px/g,""),b=+b.replace(/\px/g,"")),{disX:c,disY:f,minDragDomLeft:h,maxDragDomLeft:C,minDragDomTop:g,maxDragDomTop:y,styL:_,styT:b}}function l(s,u,c){const{disX:f,disY:d,minDragDomLeft:p,maxDragDomLeft:m,minDragDomTop:v,maxDragDomTop:h,styL:C,styT:g}=c;let y=u==="pc"?s.clientX-f:s.touches[0].clientX-f,_=u==="pc"?s.clientY-d:s.touches[0].clientY-d;-y>p?y=-p:y>m&&(y=m),-_>v?_=-v:_>h&&(_=h),o.style.cssText+=`;left:${y+C}px;top:${_+g}px;`}r.onmousedown=s=>{const u=a(s,"pc");document.onmousemove=c=>{l(c,"pc",u)},document.onmouseup=()=>{document.onmousemove=null,document.onmouseup=null}},r.ontouchstart=s=>{const u=a(s,"app");document.ontouchmove=c=>{l(c,"app",u)},document.ontouchend=()=>{document.ontouchmove=null,document.ontouchend=null}}}})}function Gie(e){return typeof e=="object"&&e!==null}function hw(e,t){return e=Gie(e)?e:Object.create(null),new Proxy(e,{get(n,o,r){return o==="key"?Reflect.get(n,o,r):Reflect.get(n,o,r)||Reflect.get(t,o,r)}})}function Xie(e,t){return t.reduce((n,o)=>n==null?void 0:n[o],e)}function Jie(e,t,n){return t.slice(0,-1).reduce((o,r)=>/^(__proto__)$/.test(r)?{}:o[r]=o[r]||{},e)[t[t.length-1]]=n,e}function Zie(e,t){return t.reduce((n,o)=>{const r=o.split(".");return Jie(n,r,Xie(e,r))},{})}function mw(e,{storage:t,serializer:n,key:o,debug:r}){try{const a=t==null?void 0:t.getItem(o);a&&e.$patch(n==null?void 0:n.deserialize(a))}catch(a){r&&console.error(a)}}function vw(e,{storage:t,serializer:n,key:o,paths:r,debug:a}){try{const l=Array.isArray(r)?Zie(e,r):e;t.setItem(o,n.serialize(l))}catch(l){a&&console.error(l)}}function Qie(e={}){return t=>{const{auto:n=!1}=e,{options:{persist:o=n},store:r}=t;if(!o)return;const a=(Array.isArray(o)?o.map(l=>hw(l,e)):[hw(o,e)]).map(({storage:l=localStorage,beforeRestore:s=null,afterRestore:u=null,serializer:c={serialize:JSON.stringify,deserialize:JSON.parse},key:f=r.$id,paths:d=null,debug:p=!1})=>{var m;return{storage:l,beforeRestore:s,afterRestore:u,serializer:c,key:((m=e.key)!=null?m:v=>v)(f),paths:d,debug:p}});r.$persist=()=>{a.forEach(l=>{vw(r.$state,l)})},r.$hydrate=({runHooks:l=!0}={})=>{a.forEach(s=>{const{beforeRestore:u,afterRestore:c}=s;l&&(u==null||u(t)),mw(r,s),l&&(c==null||c(t))})},a.forEach(l=>{const{beforeRestore:s,afterRestore:u}=l;s==null||s(t),mw(r,l),u==null||u(t),r.$subscribe((c,f)=>{vw(f,l)},{detached:!0})})}}var eue=Qie();const w$=TI();w$.use(eue);async function tue(){const e=iv(Wie);e.use(w$),e.use($o),e.use(xne,{i18n:$o.global.t}),Kie(e),e.mount("#app")}tue()});export default nue(); diff --git a/public/install/assets/lang.svg b/public/install/assets/lang.svg new file mode 100644 index 0000000..0d8224c --- /dev/null +++ b/public/install/assets/lang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/install/assets/loading.gif b/public/install/assets/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..ffcb5622b8c2d86b3eaf3d840a881edb8434e3d4 GIT binary patch literal 6494 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 WhyDwH9&2X-jsQmUkAFS>eEc6*E2)D3 literal 0 HcmV?d00001 diff --git a/public/install/assets/logo.svg b/public/install/assets/logo.svg new file mode 100644 index 0000000..da77266 --- /dev/null +++ b/public/install/assets/logo.svg @@ -0,0 +1,102 @@ + + + + diff --git a/public/install/favicon.ico b/public/install/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df30868d602492075d3b86a2c106d517651fdb75 GIT binary patch literal 4286 zcmc&&X>3$g6uyKI5;4IgA;F;F5~C()G%-OISzawrN@-`NKm`g0B_I_;=@hAjj zWmCFwr!(!$RJuT`P|9X0P?4ozp^^fIMh$`+RRfge&hec4=FPk}^TxLRvE*>yd-vS) zopbJY&b=*TJ@DV4L5%)qWe+gck1_TP3VvdvQ0Tk-!MTU~sG@#g3;>wey$~fmAoQ$% z*S_mVoZn+-qGtX;QS=UodWcGvJVp8_MU6?IFPsF;~1%BL?Ad$XiH z)o;CS7-lfW?&62psm;LnGnwFHKoq_TqBf(4%!l57XV2Y=Ux&|?eu676h_WepBL5YT z;!Cc;Z!eYs~7(!TgbaqN;P zHjtMAK1Rn+GhOSo9uWCMLV0&0?+A~Cp2-gyDF>dUQ>Hf5`sgKnFvI7{VAFN(IETd9 zhV>@nMI7QlY2s$RpwLUnaVLCoUu!CbIyLdJ@=3rr!)4Zpc>Tl=-C;2!_+3#7xIwK zzTo-Cm6!-!pY3zC&*}RN#bvGfdz&?T-n^S&c^#m`m$DkaIgPbRTtvQlt$QQvawWk8 zKf$2qj9HBDcO~yM&J`lBTyejX-j+qJ=V!ll8&YQZVg1tcSLIrF{Er4M()mF7a*fY1 z*yhSqll&(dbi9_MA`ku7YKzX=0_?G#q)#un({pFI&cK3XfV8v@NS*<3t9rgua-Mu7 zUCn1%kBQ$IY;z^WB>uRdPD%VK*=OjC3)-PGCgBq4ENZO2ZoBgtB)eN+^caA$Eyn?V z$hafdQ|%LGkc;Fu)++Hh#4j7231Ry`EI411aM@UIbk^b->z=TDU+L!Zq$?#btaUfk z{IUj4y1s<=!&?E)tptC){Q&m9EIgC_hJB-cKs*lN$C~8-aXIg`;JpH4)p)Gco7Z}X z=4Z9+fS229p!{4RK*LAB!D+|O(7F`h)H;CEA7kH%Uxu8kj>21Cz=!8e;_r!b>3Fwj z7jh2+oTs>*F}G=5!A{>dgRhlCWpfc?<-onl)Z81~k_{~miB0%$%yB_t6py=Zs9UAFoqBvky?L$_%~|(bC7>@fA(4{ zLVJcj%N{RzyJ44Weew3oxoX^$?YQzfEgy3)fiF^S%A(rkijU z^FTgQj_T%lG2aK#);+vC+(qe-LjIIbdn1VNNwi|_D@5_wBJ9~D#pv@fJYNf2cQ`8l zYWScD4%-_=!~2b*KJ%a!bNG0*di6dyo_+$3WSzhqo%Pqwb&JwT8&K~E)?We2M%>Sh z=mQttB%6j$BkF|9gZOQ3IL3c?e;3#EM={vfV@JU!{az>&Q6kU9u6?uN+WS!q*!12- zd~MwmxMnI!SN)idy3Z0$H0dV3W`} + + + + + + BuildAdmin-安装 + + + + +
+ + diff --git a/public/npm-install-test/package.json b/public/npm-install-test/package.json new file mode 100644 index 0000000..72603fc --- /dev/null +++ b/public/npm-install-test/package.json @@ -0,0 +1,12 @@ +{ + "name": "npm-install-test", + "private": true, + "version": "0.0.1", + "scripts": { + "dev": "vite" + }, + "dependencies": { + "vue": "^3.2.25" + }, + "devDependencies": {} +} diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..eb05362 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/public/router.php b/public/router.php new file mode 100644 index 0000000..9c43666 --- /dev/null +++ b/public/router.php @@ -0,0 +1,21 @@ + +// +---------------------------------------------------------------------- +// $Id$ + +@ini_set('zlib.output_compression', 'Off'); + +if (is_file($_SERVER["DOCUMENT_ROOT"] . $_SERVER["SCRIPT_NAME"])) { + return false; +} else { + $_SERVER["SCRIPT_FILENAME"] = __DIR__ . '/index.php'; + + require __DIR__ . "/index.php"; +} diff --git a/public/static/fonts/ttfs/1.ttf b/public/static/fonts/ttfs/1.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d4ee155870e0011906a24cf200a8f6a11d2daa0a GIT binary patch literal 57520 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 literal 0 HcmV?d00001 diff --git a/public/static/fonts/ttfs/2.ttf b/public/static/fonts/ttfs/2.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3a452b68f3baa612539ad43cd427725e96f44100 GIT binary patch literal 28328 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
h?Dh;`UO$BEWkO}@9qw>ZI2^xAN(lX_pcD;%+W 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 c%R7_2IG>vddcb)xU-zgoC({L12w|r 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 literal 0 HcmV?d00001 diff --git a/public/static/fonts/ttfs/6.ttf b/public/static/fonts/ttfs/6.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7f183e20820646f07ae833b64230629ce815fd36 GIT binary patch literal 28036 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

NiFR; z@9a_5d;0C}4zCuU<0N;&%XPV%l(~kiP0AS151BZoZbPoR>hjo-Ba$8FM9k<5HQ8}~ zuDr1{OqS@^9Nz-Ku6rizs5c(UI-0dduyPeIdm{1 z;?-eO3>EN{YtmFbon5zMAfThQ{>$rKcp+oQ-M%^<={B=}& zV5L%;!4n9#6x1Y~l@G&5{1#kYjs?>NWBe0l3F?&AzRm9_(Ax zTZs(H*VY|alcZ?ff&9L=KRAB{vX9oM{-VfG@Q&Ci`Jinhe+PlnXdiZ8BY)-8`k;3s ze<$?|t}0FJIwodC`%$pspjFrhMXhN23AWsLVYblMYWXYc z`P$k`YaeSbYX6~H{p0gjJU=y`+OO5${^*o^t^Hd5$|sQz3lw{Ycw&-w?V9hup&L;~ z`$fnvi6~rYY81{(&d8%tIGB0lYDt6F@!HP9Rj}#cbzzHJyDcq&JMS#5H~mwK$W^zM z%coxj)kbT4I%=jJf^x=QuCM&q=;mPy^JS}!;-<3-3p17HGt5Dn5HCinzP9?=XEhww z){n$bSU&v~6g>34 z*dO_C+lU`Y%Mi_o`&C*!fQIDEr0XQPHjDT#VfF$E-4u-OKzQI4taQjBcjtb#&@gS< zHR(|2NGH>@4f!%*i!UWr#BT=Uf0c5+TrOX+WNCBt>G(_4SKwF1+k^b&Uut$jLvJW} zr!kTnJG1EKPx z*H=urrv9!xdabp8m3G~bB?a~)-GB6Y&y;Jr|6@n5wfnEpt{XC>2-j-Y4gOSwk89Tr z{!=hFQu{}*KRJ0#e5eT5O)gGlpQ+JpMdsDBV?0j15_T}jm04?D7d;_%voVTLRlSqrmX$6Fojw8*Y#|M%2O#B3C zVd7q-#fck`_D(zjZ5N$*2x%PfvC5*KTt>~*AxcUoHg0>y?DW@OU=zzcOAku_( z-mIl< z$u8~QZou|5tm*{vyMX~Z&!B#{hM#VXj&gb?K995jyutnk)$k4@U^0g`4)7e4Tc`A%^r=fdNeHcXfXHS zeM*N=r(H{F?D!Q5^xK1e>3mQ-AJ)zn0jmYHd<)WM;J<(o9YopzNDAov5Yk>P?Z;RO zpzo7dRYbvQMGb}`?mCEb;)kL(x}w%X5s=ZD zAniqu(}3ZFNSC2bKji3ndXgGB{g9@=A)OC->=%ZCjebbhgGfgKL%%?h)vrlbKkj`J z`zFV5*9_#)Ikh%RYk4;My%($LQH;8b(nHuuNc=fh!}eU{9K?I9NM`4u&htpA<$1{e zBGP3@hf)7$NC~!KVJ7MiYxfRoP>o=`zsBCg-idD`rIts88Mtc%H6KJeOG{@1h7qBx zr9)ae7d?((jQf$!*Xj&w`GoTkVS$#jNUO6LBf^`fwDVD|K0!DF2&w(0TIn+Fd^ye+ z0EP#V&H$VX0RKC9*Zn9)y-0(95g>mO=Y+{c$p1W2YHbl}{s_O_umpE4K?_gf_Zs@4 zokr2lA*2JyAH`VcoVavU7}Cz?YUz9}hxm3>SOh$e3X735h88}KbO`s3X}mO!oX-m5 zXyHdl%cwJsQcCIGanv~|EJa^WBPB?dVvJ8BU51=xTEELs=hrx2j8gjGSuE`v3Cpm} z^>ZfpCeJy%ZjFzKI~!Nhlsd97!ZAl_9|gAP8k$qI&t9xmYUd15-^Mu?RA#E@i$W{b zv9&tVlsdA2t*`Zb?Am8*u*PJPz7A*Yyas3Oyas3Oyas3Oyas3Oyas3OyawmEuwK}J z71kzUHP$_gkgmn|R$(*p*I_-p8ne$_TyMcoOKe5W?Z~0u&RCB#%x0v4aX_a5%R7;~ z1^1tc)@pa1gIdStQ(MSgx^w-OwP$XM&fR*>_UPKJo41{_bN%+{8C$pP+z~yuyQ3?* zKiAdO9i6{=`_@hCq6@cf+=Ak-MCaGeX06`3sRMT*XXDPD+opGRZeG86&HC*-I_d?T z)DqoN`wVZ{vF*(5>(@osoFCn}aeZ{t)(u;uThEA=H?H2YW&NgTPc*Z9LCg614d-lH zy?xQ@wcEFDUcc_l)qrlx&aE4^uimy1P4#qicjTi}0so(C_H^cQ_#u$`4K&c>P;nGR zQ6P;_z741$Bob=Rs3Uy`&d=45+=VlmZo2T-jq~{$$+iO7>u|LY^)~|j+TBqY0w|xF zHw(3?Zb!YZs8(kq`rC z6z!akbf?BFQS?mgvlTg8(M}YqbR*i|qCrgTf=Lj@$8xBgmj5Rptl703-@8K7@2h@c1cMuj>%EHDJABf=||hRe%lt8wdPvF2wFVunT>NqXrNy z3t@*jMRJ>AO{HK(WdM3BY@Rk)FtATF0ALYdXa&rLC7Q>8=swIkGw|CJWq8EqK(^+A zP{X9LL9RulL81M|pv$1OfQ}RJ9>Ep(VHf&kn^pMTmMdZFe**8ExE?n3O~P&Xg`h9t zmwomNci~rpj{eHc{dl+F1H$)(AK<+dKNcPp9>cHw{8sqA@JHcK!k_WJ!I$xCLSGlY zAv}rS0lFK6S_^{x3}pL>@KfQJc&_Q^!Y_o^K&EGfUkOj+_j5Mj?H0clo&(ALCj0~b z(=+i4I-5b#Eg*g9&8@DP(dfP}OSWWN@*&$`8*Gp*Y-4O} z6WPY$G&m#>V!{zZ5`rE=<=vensr$FJV`@oRtQzpH_xKdY2hM~_d<9{aDyUr+cvRoL1`o-+I+8_nuXKD#88#&i(wWUi;wf|LvJCf0pn6qWXS* z;nla@a_d(%|K5vg;7W&U?N@U_f3L62?`3`uzxvF54;E5fkWR^%KqBfyYId4{2!?_ z_s_}wv-jL~_N=A5`27)n$M2W^ep~$-zdz3J;rr?D&#(FJb*lgUd8L;BMOkWq>$}u* zVDBjvc&(P-3W8mB%^B=h{m;Ecz2!MIs3@0F_p382lGNtbTu-8stR}iuCFZL}yeD4e<*T||QH^4(>V8Vi zm{$)l^r-RZ75?fOu}vz=$A~JaWygW;DyQ|H4OVylO=)+ds#w#hv8h;6C3RcXtjXlW zhIsnQ3GL@qOy$r2Q2m+u3UH)UH#iFfpy;*za?1^xewj|2t)|}wlIDfqzj{meEjN!V zHNHXXhRSBN&SW1SS9)xN;&)Dd=f3h)_0_zZnbmrBW~O1OT2<>EYGzXFNq*a^r$=ky z8W8+0_U@E!Qvm?JEmfcXerXeYQNZ*V1FY z(m~tOLru@pv_1+yl~-t9Gu@?iZ|RNcY*t&@)LRQ(+L|5c$yY{fd!*6TOqFdn<|r?P zI8~Y>Gx@HnrBNS|nQ0?4NJ1zrA}QP{p8p%QmpciO5dlR&o#^RSs=Eg~pHuCH(IvGw zv5~Sl%I*lu`Yquu2$jcrij=KZl=9W$T;CqGWo(MFUFxWMn6d@o16>Bb$eG{rJtS|j zrCOCrHdm>(RI^ga<@|?ZwODUvXgJ&J)ZG5e@Nm{ZEfV}N92KagvXR-%eQJtVpPE#Y z5A&th{OlEMyz}2z+l@3TA944(o4vIyYKv)Winfl3Rv`6$hGwUFsj86{rRKvr0opJ> zAexA#X_W%sS4C7qmR_~Bck6TCRNsUb33&bE>ND^zzB0nUj`v@_NgnWvHd@KsVz8O&fSx0h(4R4Xc(a-ZzxYbMGBlfx)HZ zo9PK6OUX9cMEzOQ(MKN)lyrQY_(KKU5kBjato!BWmVOzZBO;hWYTD@ zv|&+p!SjWpA?psS4I9*cwSPoadF|S^ZC6tb-l6VN4fI8; zIFP-Wn&lP91W)R=yijkN@uuBfvFvi*ZN^@!4q2Jvyyb3QoKPjLM|v&YtzS*UQ)z8& zUa(P@kV|hfT&mM*sEzFa3i1`)1y`^QFb=n9zijb0($tQdsH#+X&e7Ro-!^R@m|y7E zR^NcucdL}^C_SH1&Ri{zvK~645hpFWgE)Okcm=>f-Add`e~U*yr3Ri-KgHe9I=m&4 zn10F`;wqJ!Sal+iFPLOPg)Gf5>u{w_19(rmdbH%UbZY z_F?t1PV|k(?1=#{IW%osGYGMzVuq@pQF)O#I4+_J_Q(-tu_?cWEb*3;>$P*m>6pE| zT{(L;!y{TORVRcU3u*1l1~GN?4y_(R%X<4TNVFa5&7*=FZ3~|}+7oHe7SSRr(#gld zay~*KNk}8##Y(1RQ7O;=0S}Gf}{ZtLb>WL|5tWnD(c66}*uKI6ygCUeiGy&5ZNnjbJ z^^Bn~pYVfj%f1I|q|`6?WjizI#jZN#*jH71z1r|=-Si`;W2uF5+|P}v#HLC-Vb`j0 zr@MAe9m!hu)?HTey4|i$l`}ei`rbt9x&xLf6fHfvCt>A>2Xt&h)ppcV7QGZonFyr~7Cu6| zC@L}l{qY*rzTUlR?{-`FtCr>TDFjsuV@inA(=?{08!4R{nH1eYLO%wb#7~G`Vu9L0 z5E1BOzETPR%YwodLoII~0AM|+Rou1=q(Pz1BkE+)JdnBVpW;5;U9 zKHcHQU+_bGs@H1K-U?!0m>-zYM20(BdVDLNAO5iVu>KHbiHmvvPz25A_%6I$Rrzy^ z`=#RMz4ES});~j$_voJx%aj7|=S{>$kA9?*t)}k=Fy_{4E$iB=ZTsqJt*0j`F4AV7 zzTqQk_in9r?T+N`y)+jOr5B}uc&)&1V_e&wyU$X+ zcKT`<(h!QT7%0R`(X)YoI1D2Z8fyd@C)f^d1&m3+`3ZGJ%&~1-M<7tMY02L-|h|5db+in*51QQv_@d~zn#{@Qixrv73?40*sps>rX~i4H*Or8 ze20?PbLz<_d83}hNT1=W$SKldI)D$?Pi)w+Wu`egzGcVE-o5JPQ)=5bb?RoRAw7w% zn`kjAzf*0SYPLqVGI)GMU46BBgkdc4FC|4HO*Bu_fyCUNy5Sn4)$4Cms_!9)W8T7O zULt=(!_brF0^)><3Z5gD|0sV-pa0*qc$8AWK+i3=w$u=#L0|c3={c!m8QXe}h%qM7de9UxYqdm4%D#L@eS%PV+5vLzo*ZM4QXU%7g-mr5J<`IU zrPB2=f~dlPvU9m*tIQZ|pDHIkt*7={wnqRN?^f1OBkid)BT?$4ktpH5hk!~9S4LZ1 z52Q@T;S)jFrw?&i3t=DmpRO z#!$ezFdBXc>`Fp4bP}&OxwRxEvpvZ&q)+7b4A1PU4IP37y2G?p)-KvP+zve4tv zJj}C873CCD#Umjx_~=!3?FcA$V1BcquJ5nygT^l=ZBsp((-)Cent^KK>wm&Xf=E&% z@1BS%qWKf{_8peBWBc{G4lC+)^wHYB!?t%I_2{Y8Pm|qy5B0mu*!hCKi|c8lJD@I2 zxnzkVZBJ=94+ez5p(%JY7wNk0CXMnwR6VvMG6d2?k{&_`F}$LmCJv$b2v{GExp$zQ zWU4CT&@NIEb<_;xGP zGZeRlJw_dkog-)5rL1Z^P2AtBt=bjp&Y0(QVvTpup7CG+7I<^hV~yV7Nv@qd$s2v5 zmFjzZHCBp#2m@LY3Q+njHC=6P9P81wu??dYU3>HvbqghL=JhDwZi#A34@NJgVqj|C zykTQc&*;SX#!63X=T0>>rS>eVagvq95Xg$)XeS!?-5V** zsAf!MVzz5LDK%y})dW1=h8Ouw^#N=iAqccYj|ic~&Pz-S&k%o~>og6mgl_F$DdvmG zd?8gVFrbTrX0fZ7D&&*Jt`gB))$z$4_f)oZ7mD0W6br-~*=#1&-NkRqrEoG^$W=%L zNsif4hmq}1o3R2`3E1fY`uG6Q>S*JNMuMJ!OJHk1lD5zq3r|CuD}@WI3~61iD0@?h zq(*`4VsX+^)v~fDORsYZ=~yhA-&a=}5lW@vDRMEH?mM877GM28F(s92pCU)ya zV(p(dK0>4sMhWMB9=V#}?`erQc~LIIti^Te^T_OK3v4iGxz{;EL$*CM6zJ}5%kC=v zr1|AILm0EJE?Z)lorv3)7?`I_{QyFX?Unw5z<*t@n&4&Lr%XDiO0N>k_NiA209w78 z7T&M!F**|xseP_w+a=O#_n7x`iBdbypQo1xjV?+b9&84oo#oNd&i`9Wqobv<(PFDr zWE`Qkz?0urpEEHAhz6^oD+B?pAtFLfL^cqS)~&ixwe4zSQA{lzHc9Yf$!&YFnB6>7 zx)5m<)E%)z!d66tp+&dydqwd6bv;6#%k`KY8ZNHHcI)&w5caqe9KU3E%$yK78rokX z&btOA_MEUP-Of;K6A4seJqP{NC&(uH61|_k5btegvS@X@XG4GK>2vsjis|W6(WEf` zOPA_pcyOq=DyqD=mr+3pDt2&ku{pvwVRPW)9L4;>u>iG!f1=EyNl$fkm20)0%BA{@ z#xs{j&QhgJ@%J`~1P6yOw~t~3SIL32 zCv#pQS0YjCL^dY}OU3;cq8pL{b;fTa>crXzXSG!2Olxae5`zEsnwF-a^V(R+kXNW1 z>XG0Y`n3ROhz10{D6!1i$mike3hJaq)cpEKsD@{e7OF}!E&i_!G|+~ zurTi0G8DYv#T&|a@pNjXU6Cq@txVW|ahpQn_pj6D1~6O|8LYJVlOYE#z#EP*XvIj; zIz4nO;=nq+bgbla>p|b)%qM>o3nLW1oW2*yXkJd=w{#&~9o_ik%WEOsT~Z5o(bpxl zaJO`{(o?AKMhh>Yez0Bws!Mj(Q>fH>dn%XgkDP?bHdu@%mHLGGbt_*PM?4EBlZbAm+Nz3XsC3#KEEth zcx|5|QJ2Fr-rSYz~%b=E5X=`WU`ajx{Ur@PH`@$ zG4!#W+}R5zVqJkmr|) zh-7RX^5tBpgCFhCS7Wb#340ypppel|AcxO|7J33*{8dX zdR0ly)NHFZt2PbTR{t|f_l_|J#r}_xxcu;<(zTj(WE-o7`tSx??cvrJ=qVb7piq}`P1X4#bHPq6|@=s};JRA}uv_sUnQciejF83NBDf0Wurso#v+ zl@2#dB5WT_pj#l44v6(BeC4S1)EiICINCda*IY%Cr+x96U!uaH(Soa z6^?!Em~Guok5^j<_BqzU{blF+>n;1#jr4y%{lA@-?T|9}7gbSs#2w+zZ}XL`qeS46 zt3lWdbnTBc`sXZbuG!bvWIzm_QS<#;4=<>R(G%1;%xFrJomJ{j_+{h?Y4BS2*7nzy zmuk|((@%3(6M8E3NBkr`0NREEH~_yj)i*cSpzVb?lg7`e+is)Gd(WzS-*0L$(PAWr z0dZ7|DqD-!Qz3PmVDQKzlxL1-1&?RLF{Br9B4}-S^OaW~zgqqHRaYLn@>!BC$6?!5 z%rPSaA%!oDjW43@Iax&{bUkW2N1^L4S_k$z)&WCP9nzGELG>+GpopxPF>yFHCMV)E z=jX!+y7?d2`a^q^ z)jK3}zsuDB9dZ%Uqll#uH^EWedi2<Ij2U<|VaMws7T zG-L9e9oQ(<;h>r8f;%2Sjn_7Bt{nz;gz{?jntcMi9cj=r?s+fW5h~OvbCI=5$H# z=X3uvYDfC8I+EP2P9<4kAbC~hRMj713na>-ir64gFTMsc3Ke|5igHhCZ*I}nlWMaX z+Mr?w_j}eD9O|jh&Bg55+5R46ad>`LEVgeGO9hNI_$sSjN@0#(w8@7;CeV;ZvFDKv zyI&=-rF&E@p>%Fw-qwqKS*?>d>A?~0HkuEW;{%Ok$z$kA`e-vVD+Da1rBTb?z+4kO z?K%H7ti$J#Boo00z%2PFzbs#1MTmkgHr8#utxu&Ij#cX?w_h5z?Smy{%}&}nt@^Yb z6uYlO{jFNBR{eLTl`}Z>r24{)rKh_yIzPaQ$T;+xKmU73(t}2Wh1b%ZAoPX8&PFNG z6%X8{T=~KLt{YWz;7Ysb>>Cq_KLC|Ki^PT*e6K0?1&BmwptAWcL}`9Dv6Q!l<}7En zt@U6l9q%8k4f3rw=6s~PuTaPqrvl4b8q1dJdFHO|v0>Y4(u08xeX8g5($s6}{xuNP69h;3EbTuo9l2-QKu0pjaD-m^}Q7x4x^BHYr@`#02d(ZzR zl>Nm}HbS6bBuERDO@hz=cvovGsjEpQ&Fs;FovK)>(yx-sznI)!8%dQDP9fhb%e8bm zQLJ|_@kQ-A|NE?bcrYB8FJ4Kd|`GdXhBW>pfJ=0efLAlc2B)F4KwFRH!eH1`Voc8 z_>ewvy`^tBaa3(4$Enp>sQ46lYvaXyA`Uk=3(Oha&&3-ucEJ%04pZvWU?8(@^db6E z_F<+djo<#+g0@OE*Q*y;Qwj=2)%PGPX1hyn%+C~h>r3hZHAm1Q`M!T4-}LJd&u}+T zwrS`fRG`iBm(uwz&zUF&=~SvamUH9r25-4^UT>>pU!fi*Et)F27DjQQ*w`#>9z6f= zS!eZnAsxVoQ1RgkbO-_vipbZh4)=93@7n2NcUl!+uXYStR{t)wznV^Y36j<+vFchZ zH*|fYiE#oLAIkcNimBPWm(La5f!C|+YU<`pCVLIcV5$81uVQ7NC7%Lin$Sh0P!K^3 z1Bu?`Wn}&nYFkYA52@Y>Vw`d1?uc#FPN|$^X=AA&WhdMc3!Ie315%^a7$NDV0cTn5?o0$EX*UoF~(Fv_5#*6mS z4rOm6WFliL5!{2=DC4)#NwF3HEac*Q>$N47^~gpuJ^mCHU#F~^EZb1G(L1t<;1$)b zxK-9Q)EgZ?|8?Mb09qNjh)fTfC-MPkr|HRBn2b47)oMR$T5)c9_PC_}EWb~~WJ*s^79C0}?I6M|^wPG*e1#NGoYtc@KJYKTY*PU51_ zc^~53Z=e9*S<9L=A1sIHv#jEAZ*buBoSI8)+T^hfATd9mIvyJy1fr$$-%wvAoyQ2l zG-T`t5*I-3GT0eGXtu8O7ptz9i1lPM=@EZ6mrJ0GPJe+37Hd*nH{-ev?xkE_Qb&6m z1p?x(d<%Q#(!&hC37s*UKPe|YiKB)OlIa59L=Ixrg_?n(0n`menGuRd=zG4#4NRZ^B3BvR`9|( zD0e&aCpW4)50UQPDa=9D%W4yUo7KNz{)D;KD$+R3jc;-*9O+0?t(F9q(>vXy99sYZua{8TSE+?1%WB(;YFU=_K1=u0%9&~F zYZxQwUgqGV7~<2W70e}cmp1sLf76b~2aH})C&pvCHmt2p?t+>c)=o800Uy|CYiux{ z9GqkD(PjZs`7n*@Is&6v1fj^pgkvN_pPPKF|EZ7$;4pIjJLgd#|CgX|zfw!sBv0?h!PG2w3R~R9$@M1L& zR@0suj49PWQ^WW&`j-F5oN&);-Ec+kL6~%~aqM{CA-)`K+;m(WIijw(LS1#Uy6!p^ zt}hMH*xv(38EYEj!Dtf#V%c1{&;}D>M$5gj?Cf0dbiLnkmk-5!-5&GQXq`zq<&I1| zjy&jz{$y-yPFu@rl+b9^xne*iGDd=R0|O*Snx; zSoZsr?aUi-Y&*l!<`o1{qFAzISOi!mcsGoSB;E?+zH9EM90T^ zk6+hEs_j{I^a^$5EfF>5fb;8IV=5SG3MKJSF5tu`>?H(^Q{Y+kvugHEHvITq zyXa?xdfx#CGh#EG5Eiuj5jC_J3{rKe8|(dydg>|Oe(I;xd)^~d>5L}B@iQF;rqdIE z=M$>Q`|;yckR`IuFc`Dc1Qz1kt7a%e+aL@RZ?NQ|m5#pp3di}Fy=R|o?cd#F z-N?xH`s?U191}eoMlK2ZZuxbZr>!?~4AL1>y@kHvY1h{p$UBPHH7tBe#onm#3(5VVATBDm!@?ySv^ zR+m!j+M0Y^-F~}zPb*PI^w(H#SbymbUk? z59_*ERsnHMK{zXJghP7!36@YWZ23WL!T>`p7oA_FWpc(Kcft z#M}b7G$G2`Y_+~pR^^WXN_&%SEzZphTlT=5$>2Prb}Mgcf#%oX zK{s~rkW*JE_W{z61uk^@MtNVae6C}JEc$?TEXzN zTrtZuDlc&sGT<$Hz;7_XKqOU;6<6BQrD1}b4OVQ3^%A`eqT)?+tcs}<#P|1|-k!1u zevvJ$OO8_?A=7kdz4!R#L z#U^I#{6G+M*e0N?dbaHE(8Hs)Jv{nFX8Eltmac5ysmZ&{ce|Fpo6+y&98SxYof5}%-P%G6(!cR%1yX3Mm!R2*W}qL8LFf(i*CzDus=t@RqmScF67< z*`k^*0Ut@6oqM&tz`A$i$H4+W_jn{n7z_T3p+i71T{kT>=vGbFgQeO$U*>9yd$*{C z1^K^auiCLg{xi%Vu7ZD`W0#7I00j&mvhpr2f)As6fzY@;MSlYwhjm*`X{OZ|9fjhO)53U28Ez8&(W zKl4`Mb%a8oqLt z5@*%qE=Ik0G%XP;@mpBSSP6j=2|ePgzKMxCHOITgrK?xHiZ>8_rPS)cw#xTNe`3D3 z^C$0=-oy(Sd5OmT5RH55OUKc$to>sQMp{kFYA)OM<}J4UdV6xt(sQ%j)~;QawR<}~ z9sthI(wY}iLwY;F)=EF@NpL!AB=y^PxVJ$Av8M<^C=;N>cQGvGQ>xIIaqV_*R_e0T zaF`t$Z!VOTvwH`F(XHy&A8=;pEqiWW@Z1g5&l7wbe-i~DVzOj}(EbHKF-vx5Y2Ndl zz7e*1^i8W7ZSC3_b2i}O?b#`WJ{$vl*32>)K8mdGXKrI7RC*oDy4CA=Y3TDu(C5)L zk;sD!wXwlUJJUoXAC-jt`-ao9tj<==^M8USefCn3i0t_cBavl-I#4|-X%@m(tzV@U z5w}~cshI~DOj+#pVI{TRwY&Qk*#*>z5*}Y0iQF?$>+A2CnC=-G>DjeiO;4-syVSg) z(iUvZZ-e0~X%KbZLVr8K(zkH4Z#Ha_XfuFzFpk5jpqUDMwKhIQhOul*Xu zH<>>=v<;{tOyO%vycS^tqmRdoC5MMbO%SYBWXG>p0|b&2tdtve#?)vL%Y7CLhdmu@ zF<>M0#1c}QDLT(swGq*%rQajydJmvXj5t=yrY$!9Dyls87_C_&V|uGN zfN~L-LJfTE;<%&ZS;R`4zNd2B>TLPY|#^AK||XKBY+D5 zzrO6vGj?9ugvaU|a2V@)y?r;R3Dj}7)-$SK=?w_)hyd6bSG*nVymZ|0z9yVQ(QhjO z9ro92v%hh9=?&I&n=Qw)0StZ=MzFJa_ijL5!BON&{EiV1#7dH_5_kB)eG;$s4D<{Q zD1Fr!Sd~ZL43ov|Z1M)0T@ap}Gud4{*m-Q@XN?DwBOQzvD_`uzgc0J@@Ndu}Xp2{? zCyiH&Z4SNK)`ZrHq}J2?C9%tRxtOjnqZ8Y?N4(syt+(rBig?8o&?-eCf#3*luYmI^ z7-3AukMsN_47b#+WUhYJ%sgV*PyoR)xI3j%8~K}7e`{XU_*F6~|5p9J@j@^O5dFaa zRTb-%CFgnd@W_yxcN2`MDZ7!f$D^_oq&Q4HuGprUv?=@hBg3)0&PrK}JoJyLe`3s< z3P%N|W!I-|353F4{y^FNiiN_`&n+uG{@BPsJa4myNZPs3JBx5>@$5>AVgCjKf{qB5 zvjU6bU>@@r>JD6AmsWHvMubL-D=^x~)E@PpSB6)5@dO-Fa)xC+*qT_y0@0oB{g*H3sDt8Ks*&inQPKX}cxHi2%d&L_iT< zlV5VpM~P9NmFs>}pz)fIW1Glt%iI_Lw<&V;YIt~5R4N`W`*P z!sVfn9N`mNTVyK&YniL;eAqB9i3xV`MAzO(&@F-YP0y?6?^SH153lq23Mh*le&tSUUui4`9b?$%&(M;bQnG>BL9v=bF<+?Wd6ExU3D~$I6k9Pukpi~b zV^Iaq}O>tpO%8*tk4y$!-I}9NCvf7ux;!Tq-Q)VJ0*oyW^S?NL-GK* z67387B(ycs$c?v8;EWn-lEg*hZh{n2^K%DCV&N71C5eq!?f-oZ*$@UTEKepyPvre7 zIa`3)r}O_+y_>OtSR-0|H{E{iJH!%}I)472urqQ;qAczang_p1kS#AMqotg!wo&dk zqjKVdDb*?cE)s!9`8&v;X|+>}-7M7l0kzyHqQzMe#I=I=w0rl~_cmmoOa6JXq2E>E z8%qs=^v~2EP(vaoDSvLM?_lqtzWf)s{%0U-DW6vVW=*RC%$bGW{q_C5pN6a#wQ93x z_Mg<>N6ArJvV+Ol4fUn^LhtCSBZxaSACDl$ zLf4?g_g7JK6&*VGdr|-2hmRHh4@J=5I$B@o*;H??rSF#>Gw?kI>;>Ta2U_pw2su4t z-&Sji&}9wfuNbM!R;GIfugB@LeY!k^W0w6p!)Oo*2|xQNdD{=FM;`-^It>bEJD(8; zM(O$AT`Zf11FK|nXGE2o+XKy!{`UO9@KAq;r*A)|mX_49D;>hUe@Xm{CupJWL`*yK%BR;{T*l^e5(zlAL-fY&bt{dW5>%n|xxK4=5s)GMO zHu6O&4>4Th2b--o$2p;9D3=*&uzCBNC968hOf_LJ?ObSIB6Z_D**^HKZe44&YP$3- zwtzK;Gx*xQI`YZKnPZm07eeIXv?d?~FAn2fuB(THAxW_8z*al4SKl%(7!~=bRIBtW&2l*)I_( zTjULIxK>$x%1ac=n*5@H|JM5$e$baX|9#%R6UN+uj{;+qA3o=(x4Ks~>?!Uf|5kk< zPbP=0fQ%~sh;ddQ(T~KB#0fsE0TuyDVn|-*H&^5?zkzhh8tuvD2YrVf?Xj3OSSa+{ zo@2QxUK&Uj>SL~MlvwGJt`1za(bhvmhHgwYtt)$?4!r=+hV+9Bt2VNdWst4yr0H$u ziyP`2On~N~??4A0dKD5${{oW?p@_Ah9oJ^{NHv+OHHlz)5`~_TpR_9FENm^-pX8XP zY^v0Ic*?fw%$QEFyrs8aTQe-eVf4o|HzK548Os*#@b{H!I{LviQi4WDcOrt{b%(*h4KrW%J93aMug>|+6KRyS=gG{ zm3P(Weghc^%lr?@ykMdO-o0rqu^V?te!WRhTeoxBGQt}(DEi&_Qpecq;c;kOr zSzETs={WkxVVHdb3mO)0P&e$e?R|)&n&n)EZ-9rX7Y1TMAoTh&Rjk7d=cu`L%kCT1 z_4_Pq-}UN7aw^ojg)Gj8nNJeQHyuH2BLJRIT_gZ{ztOfToWQ{OCQPK5JRo{Ht}2{hGO4Tg$%9T)tqg>gcZ4cSOHm zzGX;Zdbm`}cbN8RIr`imeIk)(aRpB?K^4XxNMpd?Q~k=kBvr6Q(ghB4SrszQ?~HJh zNIk;Ik3K^~+*%pU{7TBQQfYQRMxO`Q{C;P2_mq{CQpp?F{6?C3$=ZA`T2W)9NLY!! zitQ+WFJ+H(_0&sqI;mU5YR#XXQJXlrk%{=7l56T=Cl{{?+W0o>g$j(s#2QEPC~b%= z`Y*ZiZSqTndNo6qs9em~tJxyCn$DF{Nv?F?pJf4+#R zrw39jg=z8IA7{m5^tzimSMlfb2W`jb|4)&fa6}^&e9!0OPg#ldYwG>)=WTO-IzOEo zyEZdLFnFOxxHks_DMpgs!WyQ|mfTe4CTfk2nHn7&tuO~B?PD_qHo?^MUgux&0d=~R z_IIjR=F{0lwXL>gzISW7Ij!bq;pGZ zd(U<1reeChL%pJ2#>@>?GS#iasgY^5iPm<`Blw)thn~NPHgxn{OpR!P@o3niNF&a% z#5S9;tjxi9{NN$aJ9Huuzxo<4emK0E-R&JZ6ptS|^zp=r6Q0MwL{?C1BpTz_0*dy3)=siDV>`3WB<^zWfhEqx z7-ytwkF)e_pSVkMK7UEh=Q}IVck~#Nm_Wtk_JiiRds3-;?oB4&M0YGSb7N_$P`dV;qS1}ha-#fsn?qJr|rG|2ris=eduERsNZn=pyklo)+^u&4{ zV!%M#>Z zm#R($L3RxUA0!bwu1c?AT8MQ@Pj$Lm&GBBDM>Y6M5bTAdSRsNd(TK#l7j=5Q#~KL7 z**qI7+k@7%3@ZDmCx**SYgdYSc`mYTm^{;goiYg zeR6Ih&;j2=FkUJtzg%)FBaTk>ViF6vdc8mlwsrDqYpCC{`(Gk4`*3j97F`6m9y!vp zT5O%NoO@WvHcSHRp7p2{o~7B5UPuCA+Am>7fLB?}`RS#hHI!gRzH93>>d?N0PUFOb z7dS2v=@?$=0v`lZ6TE|Uh&e2f@AN8!DX$gIkE?P`J3*z;tyRNU_RQ?eprwa7vu}_c zOufwEHrBwjx0*^fpjReaYoz1Vjhs`9Y%5j`6t$cJ+*7%&1MF()tPlq<+q5DvXpsQZ zF?a&(x&Ur2TeU$iU1uV3epx%4r{-8HFfgFi@EW*2fUsye&t_9#>nmyfJL_5iU_nEa59qvR{%LfbwSnUpQYlT?WgpH~3*c-?!E8QHbT1$xP=A|3gz!O?E zJ#b=|*1PsFO?0hRC$9na4mjA-^M8#U{S*9TsJV1W*Jh-Mb>k(H8>(?R*pM%~EV~%V zk*EH4j$z7hZqm~C;nT;}MC?y6b3M(e9cs(s;wRP8u8n)tu1(AD`!q8MU7VkDabFwY z!}@(0lUDY;)%LZye$O8(tF7~np6ROFx2T8oxIcu>46hHz)oL4CB%0+^t{YTm%Gq3v zWl(FNV*dORP{9n5j!RnH^#Odha$RJlZ%~)@;wD?RQrKHcnX2{?3|o&~f@T3RkZLd_ zY^fz}Z>%R$eT!m!WolOsBIpvsuI5}n3CT-Aevu8n1Pgb_>Y=0Rc$ccpE-oPs>v1we z@_&OW-^=P|PNuzbE$xtrOVDn8%e+3tp7zpy;5b|7-HOc-D^|0Z?atnK35d?kB(*!g zRc0_bjiJTvp1i&pOx93mTt<$UfX&$IOPK2QA>3DXtD|uP!Iv}M1MwJI$Z8my(G%;YB<_S0Fs@diB zx%UXW>ULeHu4L&2L()}R-(vj92;&lczN|H09~kDW>)KiD5u4u2TAjJM**Kd-eS(=8P8e;ip>QWYSf8t_ zZNB(Pi5L*b^2j zoU!%BLe;rWz0Mjbp{Kq5mxpkN+RC6~m>gO+t<3n@e2@5wweT_!yM)$sc>4d(YkU|o zj;gWPF6DSDQ9Gjvyoa+?$W>VZIbx#rOJEUs+?y`;B8__&@Si}G$|0Q1R@*@7zWt%|@$Nk8tWs7n)PtQlAmU<*W>vKW8 zn%<39vxCU1U9DSeC~LKD=?MD8axN=E$Q55gLe{g`t{LALUl(GvzSw*zuO^!0eX?wY zXO~r9p~|w~o_A|W9M*fftZ}nDbA2qrXn({{79=Gx9a?a`C-j4Q@AX>zpk!3%u{2*Z z*{^U;Fp#W~k9OXVPveOqu~$?7bCE^;5Lr~}G^z7l>O@asSkEU(3p;$ZmF)sE-F5pF zWFyBbj7|oIeugIAaM4&~suKE_w}q|Cin8yrifPbfHIIWVM@bcPvShpA&mB+}J2 zW}IR7$_a;My~LLIaxVc)F;lTQZ`h19&e89wjz<_l%VlKIh$s73jV$_E+$2CSDjEUD ze-DmHW=+Ten*{+YnH=fzW3u9z-DBOVXJ%>X4r)zZG(KPjUq~z4(5g)0!pw4n;6vna zuq`e1k`?*C&yzr_tA2s>G8R>O z`d}2lbF6*WOXByRfvIm_iPn3%UlOhFH@z}hW@O+uSc^sSSTbBDt0L`>aE1YKczVlm zVE=F!bsstMgsJDi(-7KlZPEyJU&dO&ZyJ62lJWF#FPTN+>GuKoJ6|q(?zvjPV7>7w zC?sD8JIbQKFR?Mw_o&Z=GM1zfSaz^gJ6mSk#Kl9z#UG?GSpxi$D0svo3SO4J9GP2V zO=5Ufh^!lsncl!?8I1B*Spn(mXk?q7SQFn?!S1t>{kg6a%|=>mv{Kd;+T@YLJhsds zM7?xArS)r~)?d%31Xw$$^tnzn8hu8s$sqy%Xj z7K?8zRGd@HNHtLdjv#0ZJiMy69mWETR8}HPrSnzxAQ>AVPchM~w-B0*5)`fA;-fT| z%|Zy0$0Fp8yj=8n(<+*t?pTH}j*k@k#pumrz1N17sZ7^2NFqByDwa*^5n ztEj$FlFOHh!$M0F(&C?tB+ByI3(y3sY>sRO5Yg*p$4`(cCl@!bqA}ZJihE8HP=z)q zW~A#MjdX?CTghE_a9rOSl}UYtbT4-pEBfhtNnFGe z>WGUHJ&f&5T%?COaZ&Y}&|-8raKT2x_Vw-4Y7uy4X-&kllBaD&D)H;k-fUU8YVHEe$%~GVZpE{#>*?3AVtqxmV8)y^&7h()=KKvkh%65d`c@#%_zCjR<_#SD z@63>uXvgH zs#;MEsrBSa>kakI4zyCsAmfS6O&-DccqBbWvY5pUOCY^rnY=pFV0!K$SzKmh$+UEFxqIn0AGY?8 zEL`uDJ0oMDl^&&(Y3m(QLY}Yk1U#aIL{=@blR}M?834L}<^Gv)UfGudEn==XMIMla zZVv%dRO(4u0UjFZl*-f7+1n`m5KXO=GSHZ=T2Pb{XV_bAT6w_e+=~Vl)5sIle5-m< zl;{cSKVbCkMbk^z37mU~L|0tBDC(34GH{Ms5m=&9PqGx`9JftN@u-yO@T$I~%u``I zPYSHauIO<{7cioCpty~XCk!rVpWHVX3pP;+T0a8_kI-Axis=06QW2!mk`U6AI%X`x zg}$WBlhV$Uavz&wVC`UJB=#XN$F>Mm_Z$0ixl+>JT^%cA+Db&!5r(3}_wvegD0DyT z--ME{j{03yHZT-_$Phc~TNu!hvUJdExdOvH_?_#Xh?|oH^02*q0 zXjV94J2X=dhzY-+myv73?K9yjP*Ft@Hnb)bU1L8o2G9_1ns|M*Vzg8C0n}f_oMweu zreQ-P-a?zSwtq4Ig8PO3UjnBXK+Mw1!PyaC?2~ZSG}`HVEu3dD9Z|C{52q=35uB?m zmKfoHoo=Et53$)z%!GV5_(b+^9esR)LfAl2;fRxJKfp%vc|qpHo*J2ZfO3MCk-3ZQ z>WGm}={#&yyxG~Xe~F1!bX>{_ktm073XsyA@NzvkLvlVTMPC+9Df<*9O|zGU^Fse; zfwBWM{MWkf<+E~!1~cF8*j+AUbuq?kb9mV-v3PwRFE>MPjf~C4`W2fU!(<6o4C;z zKYycaeBjrG>k`X&Vt39Ret+TfH-7AA7!5p6&3W+Ay zpyg57KX)bnD3jsibXYFzBg{R?egR1oFl03;i}txSD<%_bS4uh&jGZ-@EU)X-B`0T= zuSHqkHZ6wB*`n2#S0D4dV@KohqnllK^KvYpy*wt$7B1vVf zlua|RH8D4?wbk;>VY_h6R6V|NqwbnqEa<|*#=>OSPH}NxdT>Cu2U&*@sKMYDrP0w* zX_Qv?o&RU{R7x&PvP}kisEh6FBr78?e%u}(bDXhp$J! zX*HghnseQ`sl+(f%~(u&_#gBjPf3)u7f}zg0G01$pR5z_VQw^VS9-Ar(y@52!y@~< znvBKfH#zpSDok#$?G1pz#9~Pm%B=rS6t*O$W@EA0$>cJ_Jk3t6A7Fu}!YE#vuXXoT zyQ_V9zfqENaDDFI2_0T?Mx|tDcQ6ChsM~gZ#BoMiw!P7=*KE61&p0E)jx#(${VQ3E z_(|5b%M*~1ciAG*_QQ|IHac}Xo|xpril^UvtvbQZ_JsKm$mW6RYwWC-m8PJ~;>7?$ zOU4cSTdaLD%Ul6NUR)D7hZU@wYqif*uwE`B_~fz`i`n^@=JAl0R(@@y=H+5Klhxh% zUUuai>M1#TYf68S!zgXGALrTe;&4)T3OQ6U1g^I)sj6|ikhbEfK@N{ojf8R*2Dq)& z8`xd-J1oZ#P4+#o`fO(N=FIj#@m_zQ_Yn7&x&OA6`-tCx?b|8wCl5d5-S>KEbKCj9 z;O-w&-*{DNA#CRtOgp!l_doXTyVrXoHF&4aICVa-s*VV?)N5UD+V;)+A3yX)?_OY# zci?z{6DqzzZbIOc2s8M`ULu=oUSKNZZv~H8?!Ps>k1@j}&6@kE@V=$)IseyKrf+oM zlqOh0OVQ_HZi88ott9cj(aW}&zpivKPxJf0xraLM?$nW1CCb2Nu}kqnoobz3e4RR4 z-FN=av7LV^Hh`ioTeX`4Yu}bWh4wn^EpXDYu^ z&hWq=&gr4lTRNqrOwc;Aq?V-Mw;RtjGUZ>X&}RpJBkKl(vh<652KTAW1Dr#%S>|sgyV!k_b(u65yUA&+ zG24sBIBnLqda9OAW@J+rr)IHmAw$NN_cF88DwpLnE~_tF)gE`HNSc!|*qp`A0_D5u zq??Y%?S`nc_Vclvlj_Q*;xX-{&|CJ1pyk3>&U&z&n1Ce9w`{lD(+S!^yB$lhPtWmk zm6)H;v3W0JTd7PT){_{l#5X5oqY2Ra6tz{6mHnA)*~NOqb5Og&?!*72{*Ahipy{1Z z+fc;N1!DPFCTJpbkxP7OVx!~|9N>bv$ki1R8_OkEMMTU?Zi;Oerf?yu)Z|JFp2Ahx z-p8BtQSLNZ_6;)@aJ?nxz}dHaP8|;Aqb&=NzBPjjXS&STgPAENyYXhGivrPNgd6*nyhK zrZ{zjV@Gr$QSkH!4HIn2ItT!D9T?_#o~?K^a3v1w`DbN4o0AG``D!^9j|)tfYu-pD zAx)>8SUOjBd>$PPr?CK;nD(^mvMW$o15Tqil_|<`=JZGsUuoL^F}qyPRMYV+r(@9U zj!G<3?r{WJ@xmp{+0$5sG0}8ajEi|iRK&#yRaeL?jy4F&JadxjNHn`_9UEbBT?=EK zie-}BnKXD?>NBN0Cr8wtM&R5glMH!rG%=n(7+2kR5{DgF{iXRt%!?n14-dqFg#9+= zOo)$@$v103IS2%ZTz?fr9e5(i2%6ZF5MmLGE}q1kfi)uR@Y+jxULtO#0W+R2RI;8E zhuPM9eV)n;Wpu^P4E&O28z5rgx?ZVN>S7k%i*r~I&t~iF7v+aD^f}Ew#RuoLI(K}hhsJ#?x z@bFe32Dn}MLSie2ULpK!5pFKWs(fSHu!|Y8wLGs)&cFL3Vo6s{AQRdGEiOoiDfT&h ziH$Mw4$zy;wFY{T)#wG)qp!jMUcZ#8RaB~%W8X4ej^*(jR-vBlWMa7-i?dRBWEsQC z9!+$EW9XA^(g8)w=^h{SvUv~X=4{T~V3+!Z?s(S9=SNa@!WYvLb6q=@agj5{f@t33 zUdoAkG0tcag^s1Y4CfSDwv!v1McPEMIV+S$cM8XP&;J+omz>>`W1Ab6)1b$@CwLo& zBETc|A^xkeZ-%_<;LlId0YQ~ltAqSqSe7b}?8VSq{dMImy48AtqfmIbt;%(KwukIn znEzCoRXA=c<&=upBV^Kw#nXvumz7JX#weRbT`O72d2F7wzs`~38Dr>5I#sX|dn6_l z;$1aRV_5&fxsTr%LXZ-LCc36ZRlYL(h_{dF>oQgWHgZ?;#%BROB}pZrVzfGLZ*ECW64q> zWn0CQJ#1NrZ5bz~;z^#l#?!>}SsrDoyD~LQ+N{>Sc{WlSBsh?}pBpKt$?r^tgP1&? zVj#Ab7@G48V+q6Cx93wCp5l<3#Dj7aze1jPYON(PGP02_IDR@A(|OCS5o&WTef490fD%F=>8Zr!BunrLF3Z zd$FpF2du7)oY}~ZpsG{J6RohqDP3te2}>6xgi%|D!bOvpVbv1cj1vPx)0=VX|&770fysQa)Aj@ehJ<@NbD!!G3 zAbAWY;weA)m5AXG>?9AMh}#J#?ywErkkS|!JDyJ0hX!SE5V0eZER-v0n4$I7S%P=` zQBSq#b>xr=WkWd~j;d&Axhc8Ih;!5}{fTTis zLo}!-Vl8()WH=&Zctzet#KTV-Yk%B|>s;QA^C;y6XROJQWISPpsEOEjV9L#U*_cJF zB65w=-RSUGjjnRC#4@W`+)gEHbt|pCdP6c1gu$GVXwXxBg=m%#t`>{uJ}-2NWwR1A zT5@0m7QrrIaU8qEIfL3xWL)?o_Qh%_cP5sX&_pG)6VLK6b}_tEA@(5l&$zfBkE4ij zVJQt>X=#hRj=jlOs)JuncDl}e6CEzXHulohkoWIgo|E&NOmJ(9r77H ze#-7qF1yQ%-53`F7Kc!oV{m%#j%!mj4<%%R!=3()7Kdqr_!-P z-pZ?ZE*Y;TJ$6UtQVxzb9&?L5;BBKhf5BOgUuWd8s1AnO(*ZEzEo_R6l(5!-(9$Usr@`p4V5Gb8A2rQJ?F8e~tI+las9jcwn$Xu!T2*q(lWR!5ZASFNENa`_O`7 z#9W4jf;OdFM%vw$d=1J0|9Oy#igU;g-NxY$*+WN?AdI!rMS^DAzMBoF@C{JSABKcS z)F3quVY+RL7t(dHkHr#Mk%X?f*+jy+F;(XP%OoD$9jL(hRAOK(TN*EBRGfirSK+uN z=MC8;G~y0{xf83ncA=WiCHsA88pp2-J;m{i>A5OSj|`Hm_VLdDEhhthhx~FA8NE|z z0^;T`Bo1G_kSc~!eju!tE8(Y!7x3;}6aty65K;_)P&9ls!_f#ABYRM$V9+e|W2_X4 zXT;b=gY0fH>4<}jLDa{yj8j}j))~jiar3H}n{@~g_=lM&h~ZV7(P(~i1&e_4W-_{h zNbxV`7D(xk-W8MaTX8pTTjlQVe9mVqludC+;^?MKDw8Q?7%tms$4FWX+#ckX$fYFE|XHJ++7Ro!#% zId^#P-Kxi%c@G}wV-Qq81w?&{LKKHqN!p-Bqn{Wxjger|DoPsdMrk6Ek0ZV`h_sl* zG|}dhm~QAc8sd3mzk!H2(;60ht`*H8*HvV`Y{`afniUs3F{B(@s$&`*=kRi?Ha6{-#!Sr^DUnZ z0YkSs&tW};E<@Jm2io0wz8?6=sPLu}tJg~h&qo%qYge1CSJu&SZ!qZ7KiH@H(O)ZiCdSR&+TDX4MK}^dT0lVybghfJ zv)gUhVRbiuO@FlwxWX_kNo08w&VOwKCM^e1BLxgE8yl;}@gVb%uHwr`OpM-q=tRST z>-PuEZ0%J7)Da6Q?fL0Jd&H~<^(gM`Re8#u@^y{smJX^y-CWtN(6bJtow!l+jt z9#)ve4+TN+Z3AP1&`vn6=y+uf6MU9-MA=^TP4om||CHZ`O5X>Ey+b|kwuVsk%>B0f zXN{fTmYcRW(fr?Dj#m!gcEFh1M74K-@Pi>X<59TC6NdHDr?L{?2VX;Zb-tljFfIE8 z(;FAJY@oKD|M%JcQ(A<~mblh$6NAc)-wG-c)iEewd8^h z%)Hz3HK~a$Z~5kS^^N#$STqbQi)d4Khz`*koWbtvCPXO8GAuBX=b}IFoj-VWB?Wr2ts;5QW$hw0dIE{ z2(E**aT6K{-ng`bulc=pg-igvJhoeouTz^1^jOf?sSM^o2$p0`ys+0(kcjsTvFMqR z=DwObyG2&|z{ByP+>21ce7pgoplCm!y49&Jwj(Q!o1{RBOP`s;@xI3JbtXIvqX^=H zXQfFlm!a4lj@F)+;L!%J)gTqN*z#IZ5ivMU)llBStU$MjFtq`ieOhB(*a6N(k)$6? zl6IvC7Nd8K=i!%(toX*KC@aqyiC4)yoSjL`%ye;(UfIEjLMVcA@VA6&!*t?G=E5>(}GGh5K1) z5-Ub98leu3N-#wy6SGkB0wK&#+V=nSR3r;laU55)Cj=+bJVo0+BHarEw+O-z1jI7c z1E}6{j$;r>u*8bkJlGoEDep;tivn(A~ec0VT z)7DvN69YJl%YND?T;O3_qulsmIrDpiBns&t3MWc&*5NZkBNCNcakh^(0LQ`Z`Y-g$ z4IzxaTC|+A%kH&%hRO^~^xVPa94v?*@H!7sTk3H`T-r{{MHC&@av=2b)b}2qR}p4*p7jys$u#Bi?@FT!QO+h| z*a>M)NQ~#66A?gwZc^zW%#-%ARuboBUMSc&4-()}4Tyu~R7)ZQ57V+Em ztc>$SVc&<`UX`Q=j)Oi`6VUUU*EoAvr=B;!Q9LHbJ|Px-*y4;2usmGcd?BuVqHABx z3Ig5oZCEarjr|42`apGOHzNSb>(5z{;wT0B{Dkj%FS!;u4?fBXwi93tXc5BmW*8+< zB0A6~SO>kGuR+-fnyFX^(+&);X}3aXsE=m;!s%8VhgTj(D2mx^cL#LZXuap~>4-*L zO^*;5ZMa@wYVG-~eXbrzgfScF3x;;->Z@&qZy%0$6R@G+r1|kCX28ia& zIlzIdfzn1u0fIt;;KnEZ??8wQ1|eUCR~*_`*_b-eA%kq^@+@d+5vP4$W&vT)0M_7O zy#woPp2Q>XbP>eJeOLsf|J(^Y3XG)WJ9K_idg%WL^oxH5-znLj>IT;d!xj7k zsdWyVrWJwQ1WEvZ(GiXr0S7>sc(7ZN=C}!OY!R7TLwFy{;Q_8&R=ZcWzpIwG5SUz6 z4Tr%@`4o1R)$PSHNa8v>=8P9bX?WLo==p6M#iU4}$7<=|%F6;pGeSGhr|-;*B6Hn* zvU^3ags|63z%h-a4QEw@vk$G%gAj0l6=Tmf={D|JaCYk03TpGi7_>+?p}=D$_j{dV z$XcS!ewh5IW35Vn(gGLo-z^}6e)CZzVb;{mJ|lAC6!)R+(4*rdN-wz3EbcF}qg|{QhD}mp(i?6Kk-V(u#NS76O^0xj(L} zB*(6$A77eOMeWx;1RYGANIvnWnd24-`W?EUG^>xBE}my>u5kYi_y{_TPSV_v!tKM` z4USVl6GAf_ORwJ@?2pA8lXx)Q5GELpjzkR@U=cRGD(lB~mfKM>C~I5^PyoCL{W2}*b}pubNFNq4;S?vE>|TNM$aoZ( zHIO`qrxzqm;PvbM<%E!iXZuN;3<)bi*j7m{R}@*%@dT>0mvMZd!Kdd|KUq{!Q9z7I z={m_9kxEErRs+n4#0B1my@@>M!AQOg^=h|!&56G{;9X@PQS@&xL_~Q#b}&HzeQ>BmuxI}c+Fp&BF3OlVf8=4>BZrm*-@xy?HpF&Ze%yc z)&Ta~Y$D;oj8A8FkN>&MQ+P$x>|PIPP1rw})r6AR88Ywt)n4SgQC_gwcz+T}O=!YF zHk{<-@?bhSF^F;B9+y?(r^#sdx<4d%QS{QBC~Pn0ONv2~%g6+Y%$7;vx1*@Ic)^=q zCIbhSk8cpa5TP~n=-(nz5tAqLBJ1;+rRYP{)2;!$43xEalhKK`4G+!3oHr&7rubHr z#`R6xsU4WqLRg0*b2YYi$PWcAUv0Llf9Lea1xqt@KFezGc=iw6);{PfuHr^%YRm!{ zc#?EcXS?njzZ1(3TLr_;wF{aBkR#Uy!yLOktp*|HUgcFDlh>w?@hh#i*C!=0@Xsb8 z8p6GIBH=G>p<6UOR!oMWCm?>LmyYCfYGG#mxI>(!3mch~KRxmh1t zF$=^_94|=WJh+90NWAa9_4R2~K_Ow9kyA6MLKm-D8P8@;J4!E;%2)TENc?JbF=9iC zBz2Z0iG`EVRKB&*I8rW`jm$UX;3EB@pl^fpr|wt=gS2qR_yPGKwtn2G1Ks5Q)s zpgW5Nuj+_>Sr4=jkkoO_^Z|qM226`Ii;|-FR3ub@rzVVusrCcH(k9>yKOqC)WV$8e*s zw7x;S$Z*9Da1^v5ZlIAq`sZSo!d!gG_43xzh+SMv~Zc4#!8 zx105<<>x?F!vVf^pSvX6U&biQAxdk47K_#!lHG+PrB@VSBF3d%Fa24Zw0Yml3&A|e z5ws++DwYmxJM~FcPj0&-{Q0(9Yr>WrHnFZ+!tnH21pIYHIV3wG1mS%7{Zt-gRV9fG zB?tAeUm`#4>3~KYb(Hg7=@8BoboZKC?mDlms(um&(JaftdKr@p1I=Uug3jau^b@Oc zea1bWDTCT^;*js+h8B5Y&ik4FL!nyOVl4phef`Rct6BVpwocqB&QI8}$rc67p%eHHDr4wMLlQs4p0-|n zs5k*4b4WZ_Bog;}Nkyd#FbVUK-%qtP%e3$3#9LVMzLzyaHy)Gp0M+tMd*Bxc&3^4W z`TO7ifN=rB~StC zX3J9xY&uvQd9ntGa9jgZ-h~1=K;L2FCj7OyfwC~ii-61*bp-7RbQs_RZ_e-tbzKMk znLD>)*-CJ&3>&&pW+$-%>wUQ&C#1Lf$^6E<$Cn^MXaFmNfu&vSSegL0*(bo-+hoWA2c!h4f_N9ZQ-K<8Ng96Y5|00x>)z~cyY>^1dRK$eS4Voh!fVD{$ z7~H|ey%bsRM(LZ=h-ZeyMW%@LLL%+1dw_h`KYfvcj?Bv03C7^fvc@xl?r8dc(FP~f z%n?)tOptBdB|Wx7A95IY5UmA%LJt|%HoYXp8xxjUlKGCeC<&A2`Fz={POt{61A8`g zoawBzFs2aR$K3n4RxTpmFuX##xf_f<@~X;^=xpQ>9Fithd8{ITfi=q&-f$+a2Vb(s z;g=9Nl{^f>SS2leIMsi`^7$0u#{l*wibTog*hZ|z0J4L)c@Bj&b1|=++-!HaU9bDW z@uB53tY>YHi5CRjulC1Pg|vcTy6I-Q?-M z6~=`79hX={yUsm)2pLM4RreQFA5S_!QwFMwshrigY{*6E4`)~Bbey$&y+w5OxLznOwQh2pGY_ujk}c1AeE~gXF?nSz zc$ef%&~mYoEbFa?6{?7nj;{vuAt^N0K2;f5Ei99x8kzs)1xX57(q)en?5O1A;}#p$ zW1n^z{e;h-w*?-Z*a>#4vU zMHXB3MCoL6*Bcc{0G(e#Z5$T+WiL!~b`^r~ZST@q74{>PME;G71L&+rIZcAMC(H1_ zkQbnwX8ZslahWr=T$@4=bE-c{2~k=KE88W~_ovoBgM01M??`qCa|~DE7Brg&fDxlX z#beIAS#3kE;Ju+9iE|#^LIHv=?Ty>I9nitsr}IDAs&PYf6g%Fol7LjX!hYGv_3?b8 zmBukuOh~*z5&e_FWP-4G8#@XO>I2K|CB*fey^6rS*lmlJ81=JaG}Snkg^PpVWHwK-vQ?RTjc&RRooDZxIWcODRg+*gnx1gm3h|nb4s;Kl)lufE zEB_*3yo~JnWnQ&cP{C7@BE6Do3p9B2SBidodW4ThJ*~q$ln_E4e^yy!6@0+Ir^@h6 z{{6oIR&S%7WG}DlFCJ2+L=+BIN=cRNCX_5u;k1`q>sD4K3B>rO$kPbEIV*Y@T3lSF zI39~De*q|Ahr0;n6JY-$uzHlW^CBpqn{;~)4PL>rz+oP1z_z0Vqd^$-cLZ=w6#}1h zSpoHiO#2_Jo@&2f$$0iBA`ZxJTo{5TfaNmDkt=X9UFTESwHBsBA4)M zhWmr2&CZ3Ch!`RDrW&)LxUOW9h&l*lwdc+Fb=VP@FI-+gPHS;Ar5SWz901l z{5WwT=qQ+Fi$%Ww9D5J9sJXjPE(D?&6na3Ye zV77jmhb72hh*G*_d*j`jVWE@%p4x7|BK-!1rY-g!Aiz1ehCF8Oq{88zfUi-{>{^V1 zR0!%Ws zx#O=ezfXTE(H2Q`?LG1_>dxg`yB8?jMrdKP)2*HouHG+dQjNTJt3rLa=dXafuebN~ z%{@p4#OCG8{|a+u76YPhzr&7shg5t>b2r4Z)rtuNGld&^h^WdC+?JQsmb0QcMbtWq z6A|ba?g*dx6zU87EWe}cRu`q*VJTrAD-*Cmk%1uPJRpLd z1sRDF&Ode|1$XdX)QDm-pryG_Thiq!s$>f9lIvW;@upR$tJ+46dvbnCs+qJU99v`O z)RFYE`3zQwEz}EA)(A;>kELRr7CSuz>4btLYwvo!zwi4k<+3v`Fn_y?M1`(+_jGuT8AIRX2tPfOa zLZ~+(|Ak!G9DmS))6A6oW$+`QqoVhQ4t-<23(UBThXLPHq?Ncv=nPx(3HY_)Fvha# zWpUn|c|$6`$jr6l_p>u42?~zgk^wmzm$>QkU>^zOoLou?0S>42ooQK;vXJc|g77aQ zh6+3esn3p6BTAGf1XhwklT&<#AqBgy@QyRCJA@w;V`{hf2wHKC!S%$q9p@h@&ylN1 z;sH1IlfMgY-b);6LmPvyr)PojmNZ*|^#)?hni2gQA=TNuf}-%#o-+vG%lSZDTdPOk zF{o;U-tZ=-x^=`V0!iQor?gNG-ub}$TWu?ILu#xUIW@C}+5)17l=>=_&l35WPXx6tBwW$5h|oMI`aIbjtxi>F=jbHl>!Ok5NF)<5_^miKP1m z^g4Fa;@bj*LK`+wKfrrfa?i6Q8KD4N=Y1|%4*Mhk1oEqRV zrk{H36RV7OY=Z$0QSCjF8wa3_k2nsfF7*RqO>jMa!pE@@ldzU0kn`mIP&yt(RDI&V z*uygAfJ`_F?A{_B5P==Yor6WltKR4*a}s1h7s%vJ{PPm|2Vt<(Qe(VXWW0MnLfA%y z;<6ajJpl?pYJ8k}%P!s`Mz5LbiK&bByAP0c1EUg@^$=9KY}>(IpF=^Huk6009{|ES z0G!Dx+cr9~4Pe}9m`)Z@Z(2Bq@ELTJtR}3De@p#WutZ~d&Iv6Hm>PLElsqu2(J&)j z8-p$C?_tKr){?Rv%RZcE`Dohi(W4~~aYInoyYQ$sjY+Kw0uq5pdBo4klrbA&30hdV zzDtiHH5U)vv`4+VlTcSg$OSZ(Y^PMDL@un%wR<)DkJ@!GYA*W0of*oL9dm!QXXI@U z$o+p%V2CCDMdI&U1BFn$0$7L{m^sV7-%%y}UXW`zV@`8{fy!ok1Cj!xNY5M(I@aE? z3lZ#g^w=F#B)!s}VL5G839a z+WN8-N&?up5R{?n+EF(3b8n=CO1`U_VESLvI>Gf3pA3yoAdJb4C}DxtU8{s2e-wWF z2pfRC!oU%L86b(83_Sr4K-3W!KsLIjAuXU~0L2S1ZAD>RxZzv;z}6h-M6WXHE|hu<$zWpC<0;l5FDs332ufdSyQ6GFq{l%R0I!8vpgaH%S#Rqy2TdF8|?=k zviic80A(*r=@EcCKa7Ipy&Pbl&&EG+5LT)oI=n6DLk-0e zpm;)$eGdhd$SDTEBYIZOk&00nA) zS3@1vj!LMtM>X`&7PyS!<~ky#gI!#CJ+>WiMnrT>GE!A6lQ2=A5ph6%t73Iq9_3L4 zAZbz{i9zn9_5ad0Cp0x-p_y(Iifp=h-hc-zuMv<8y$Cu$6F}+D&?OYOBP9+1Karpg zY`?20d(>)I^n{QFR@H|CpCx9`*@ZQ+(jn7jbSi6fZL+%*?zJPhma5{jq#u&eN$8k= zl<%|g(?H!*nl~vO5oSq(ylisff)L_?-;xi4ZGlh-Yl^~zj*+`3o=|g&2S^LxBQn(g{w9as&V# zyNsc8Kx|)85%SKi!+KEk$zd)ReV@IYnf_jL0oU=ozr+FK4Hj%iXJ9o>DXM6uo-?Gt zo|t2))N>pVC?APEduNr^6$z)r>2Wr@xp6T^l;Q7@#7=&r9TsEh2e|U#`Y58;CT?nN zHYCVkz$Ok~!`Wf=d=(hB&UwKI zQOM~HPcUVD$^5nE8*O(+6wwHNo4+ZK%*4=XzaCNJ9w#sWq&o%+`Q|by5GcR~wHStA z0V(Ff7`0GrcJ7nYit!Kcz?<88eYztNEK9o>rv1|@7qxr+fw$K!vod2bAs?M|zFLNKxPq$77$)Nvo5>r(jV9wm1{;?Zzo}`j-nYPQMZFK-Tl?B6Nx(o-57FWM%v| zbh3jKv%dvc;W@Cn<+K&B0Lo?yO!P3o0usQ>gnh)w;X@n;R<}c{2{*502MXrsEldS; z-7Gz#jOC~#q?^agk`jCY1rX6EVM6B`RL7B%bZRk&wFH&{n6>uq^QXX3VK9^=9Z#(H zQaXvY44ZG};a(&D@76>f2U&%o!Y5}sACkNQVtmqsdR5dbV~Db@3E$upCLzcU2Htd< z-COm)Tl(oZsEgdiZG1rEK8N=3q4mE*Q&)`_0irsGfaVM=x>XaJRU`gvAkwsY!(Ry9 z=!NUP+C@l;aGBs?9rP}chV2taDx9*VAbt>#?~CA|WK?v)N}2kkvsFXdWVtk#K{z{P z&Lg41#Ey>WVd4O=Q|q2^r4I`t_u8ktRh>Ff?PWp8St=O?odgc(&Gs zL7;}ehL{;De@0-ep=-^_d;sG-wwrDy!au5Y$R!YpIkS3$`YTx0rKy7%E zrFI!CVh6@vuabAa&W5o(X3#vJm|by!3<{?SXdi+F^lm5bXSnTC{fzSWvj?+Ds|1;( zK-;Bb6nG?m%PVo+Ny|VT9}Wiu`~v6uEyvWW&;_Y$QFRF$;{POTG{BeL+2`RZWLC_@ zpi1*&hUgRBEY?hk&-(D}YC@Id=<1Ygox^BCRuH1DSmarb6TdguhX?Qb!+IRfVPp2Y z@HOL49QmtbHdVEg-q0WSX)8c0G?dUV9eF}XocEKuKUbfidy($%<*_t7xB>L-wj&`B z0gV7(16UjhkV~L*Tw}&8np>^cW{}&>X96VF2f-}DDMT@`A|+qZcuHdJ@XBZHOX4yn znGC6RxN7ZDhMjDEolpKmWhE}$8v#%0LrS!|uBF!@;hi~K3`e~H|HwG2mh%fZcv7cr z=IcJdbgWaP%dg-$f1rzsHDdDHU5*ahUkNY&jtLq+SAR>ob$ z89p)$f{B$={7ynYMMwTbV#J=eQ|}6@+rn=r%)mYHFH9jM@?Y*aJTe)p`6E6`YE(dN z{yU`CYWWOkS{G(HxeLtNF5%FNJ~Gzd6H>^59Qad^bAVVvey%r^oncMw|1V6^N970< zIktRkflrdF@EXyP%=@N8mu4z9u+>bUo7PNvvxO~cl5GbTPMFI%bQ8CNg|0D=R4B2xN z3=7*EtctuO6Wr1LaJQp`5UJ;ULiR#=5cxD7$q2esl~J`P<0i9KSwU7s?rcv>O317X zeFqZ(7XYi_Bdmt|1l`@Vx4=-a0Ziv~q?O7;Omw~O;AWOV_cmCs9|-E+9^*j{G*(je z`{R{h4adaTJ8YHjH1P7_$fG>S4__13?Fdsr9+0bhXG<3lSvpLwdMHmke+4K1*wFWo_XyhSFo3eAd zV>nJdv{%J+6o*M#v@=O4WJ*U#?}Hv+4g64}%tX&=ij{HB2_#W~MJG{q8jAr;DBiH* zt%wUDYT(4Tq_UW!8~|)UIase-p@<*ZZvK`Xk-X`LBc)@EDV5Da57!WkZ8Y2?UvD;~ z-%gD+daat_M(@>Wm{@qJoFK1~cxDft&I%>T1jm;}@k-hrXRSN5&Q@X3W0kmMlVIJF zhLrd0=To^6<4O63n!qAWVT`kvj3n~z@x!p_h~ZlGA*p%SLmLgB<`qQ^pDB@s;V^Yh z_X2VaaiQDp#GZz6*@jbqdO(J|N>*Ka37kO!Ca4I10&o2f7~root5Z`4Zs)6X(+Z*n z1O^ZSbz@`~xv?DKKVJZR-Px7aDDdq*?f@;NmX*7^M!)s>OBfY|G#pstaY)(@9bZUD zaG*ekL^(VoL+cW?EDVp;#Gj^}C4+#%l4`+Hj>0-BCMLylmiO=^C9KB7KCM6^GUcfG zU|xXjmm^9`altwfS{huAUqMW<@UfanImgvCqQeRTQg$^qGf537{~@6#uH-lNxIgdW zqVguF)|KaY*_HIlDaXi#;8|dF`q(8_4v+f-cIIIO&$nG4LTY<8B zm_vYh_Yf#QqNuiayysIEVAM0ZND;}#WX4G}jqim|`?#$RaJ%61LO2lZ2W&?y^SsmcZg>(x*H=m{FrsK0=wp5Hzn}Tl+X2(r+*cGoe6TnS6R8uW@f#w zAlZ#JCihO{m1ZqnlFLG&YU@OyCi{mKoI)+2DIEH`L!FpdF)Y|w8%IZ;oKj>d5=M6& zpW&Hgb%{HC1Ud5#+Ebg6Hd{ze!)<{5%AmvyN(1gl81S1BYrI^j#PoXbokY!P!$~@!?v#cwm+k`Yc#vD||pQzlA zL+7ZOqaK6HL((DWPr+z^5lw(Z8lY*&z+m4{hejIiMBR@Mt=Pr#5vk#2*1d{iQqZAd ziAMV_Ixl)*9ls>ZGklCuP&_M(@V54yWHvkE;se(9hwxCNer#``jXQN~m-}oDmYyKX zve$Tckx+3CfU9M#>0&>$Ru{K?*+HUn?sRkAswT7QBCbzo;8x2E+~F#J>Sub%+(A;R z1(E>W%<7yD)*SEVW>B(Ty~dLyB1cUEg;eX_Ghk;#JgjG>U&^Ax3Bt)ZzRaur)7Ykf zQM0EzgyX*C0*g)^{|=sO?dA0PB0>5(u&*7XE2_KwZ!qV31lyq9HrtJXZKr7owj$0Q zd9HWElEcF2?M5Nv((hmtcw4wLy@`xh%}d+q8FzN!BNxZh{99oU8m0a|lcC{z5dqlt z+XzDNZP*mthXOou?$^r|g+Ex~bb{O4-&haPh?jb5REYrXt3vp7%DH~*lC{Jp{a))> z5H+CGXpuz#)x7K08^hhLyvMhF%2rHaePbQ;8#;j%!Hc7UaSw<4)=(`tt^PmKZ`)MY zGe+EfPWKKvwA71c9l_^3Cut~S#6c1)twmB$ zTATI<$>$~geq>FjYdTV><-&zG0~Xs}Y9Kh>7>PrP6XVgn7yRLf<9R7_(n>-@&(tnecFf(cdbPb8#fHl%~jm}GF z!q@;9*iw@KK*=e_hoUZ3%%%!a$zuADQQbvb3JOd`rT zIHzN{`euGu%+!DgM`+#Dh?>cyOvyet=%UNE^919?*+B^)DZkJc|8RgjZ9d1TPOc3~ zaGWL$ZQIZR@ISYM1EPxfGe~i6di^04q*Oct156>pR#?oWQ=!d&lss7F41Ep|FgOFf zyVvjrL=4IsL%3$zAeNbPbO#fV&Y=cy1R@2)Cs((@4ja*03$vkpBfP&)w`L%!C{w|AdIB>t#3i0dP25Y{V1tbq5!1Y?Qd^W43n zB=Hk5JyLWUbEue%Px~bW*~aOkelqA{lr@)SEnlK?XkK`R|BVha%R_xv0WRYptrDvNX`o!7Q8X!nx)SnUBp+ppf67W6!ZGO>pj`m3J<2JT+ zc1Ek^yb_K&99oqKdW6Epp}yh*l+<^c=4it z@uCb2h0J<;3-&tcri$CYY02^1Kk!29NXm*5gQq`g+WJJhCO@YNoKZ_##z8y_g4K~7 zwQI~9D2mR6c){=u!cYLfgsgZ1!nmHDevZrqHeIKa_jmqML(@!Y(~+`f#x%|mx!Iao zX|AC2Yn`P<#DU?5!I3-zB&)|r?9*q`%8#7XSDihYs0%1%a)JFYdny5M>Ht6xG{#Cy zal7To^DaVFv_ro5g;tUD)YuwN6G{Z#^*>Ao{s#>PH$wDu@qaT4z?;GDzt{$NMxkN!8{976jd_5W(1yTLLa zhQ1rTBt`R~ydl@@QjVLR?69wfP)Mlro|jK?=}VKqr`0<`BttS4MKW}#zlZh@#Ql^L zYn=`-_H0U0e>CL>D5R??1b1VaEYkgh7!eDZ(mobB+W7)KjA^+LcwS5oi6f2stYX|% z&e3&*c*3R*t`W7_ zTR8gphx_V~g|*6u&(%*_`*19If&LUPkoL04(VlO}4So;407noP?C!JK-u3}F>G1*D zW#Ve;ui$QuYV>7{0298DVSCDU97tcTnC=eck~Copb}!ZnmP@cK1Of z{4)%Lu!a=V9-BFkH<+f@J;wcT4`F#}7bQ(?*lb?Cbr=nU5W?=o9x)#r=bx@XjH>k+ z@5RXpmQxhCr}tv|x(pI=MOQxk&XOQtI(E6+7u)r2u^}WV@<+E%`jcd_s_JZx8ADmfLsSX=6J7Z%AS&}(EhK( zZ*qT}+Voa>)SWd)7%b{NPN`eq6zly1{C>Xi?)@HCvCpR!_S<7-?P*nT?^erW+nPaY zXe)r;u|K$qF$Q!A_*rvS?4|pTIk+`PHdTMwZy&^h^d|Xm_(W z*GI$Q#RJymU)mM(t^H)&?_Z`Xt3&F2pQP0NQQJp!LSe3TfOw_$KWpxLN(t!Fl0Jc! z^kZZSYqfQA+-jB@J|97WK8ZE#ka2_P#8WpvjpG|l9YrwHP9A0o=bgFA6z zWY*(UsNPFQ_YhWbMe^7Gu@aI&iDX}h0paw#rN>xet&WL~1V>olgj>%ZGxdxPY>X8Q z4f8@VEOo}8+{s#2=`)|ZnNhEdi2bietwpuj{^o59<}v)sLDgJ582R1>*cxDT ze5G0Ud(Yp$nhhK3Ck~0%tB17h+%9S76hI`)>HN6$y_5b$8qAX5q9pSmx%dd{%;;@e zGqNuAsDSzJS??yR!B{U)eaPC^p!B#wX_|$s7J~q=(TF{4wyh3}$jmyp(p z$}RPDbwW2->5+T5zwnt1eeA4+yhSobdtz7iU?t9FefEILM6joh3hX>ZzRC>sjzPX# zPx6d7mkBfCj$^g=oshl(WL=@=+TMuzWEv0T^9dezA&4MdlF^hD{X~8RoYbhV&VdgN zfV+qef`0`6i|Ntz*&Xh{4b$r64`f9&`Okxc))aFLV22$9fB{swz7-05f@$&)`}}oM z<8rpwq4bL8J6Y&Q{{w}4&`>fQq$L8H#LhU;9vH6dwne#KlZS9Xr%UpKjW^@I2}%`0 zUwv4hNt?PQpaKMbhyu^lQ`Z}MKx5gfOFkW4qAO_dX13~)-lHK9Gy$!Q=wb2@g$4iz zFF->z{Ezr#BwmFbvFrdbjAh*OHQpQ4LS~W_PLRu6W$? zI#Ctg(U*qG&uZ1D`6s(P&}E)<;^H4T1p*_A=9lDq73~D>W0w?jkmCw-xf))6MnU$W zpSXKDz37Ra?>vnEf}TIplLRACK-2Qro(~gi_Xe~Kv275VoZPNAU#*ISIJ_RQUfcqO z0NX7dEQvLd0FQlz1LfYsVcVY<_&^_=5px_p{4Z4X>(g^Z15;uzom!ep`+GQ8NrDBC z$frwHUKhy-#9lbsF^ybP@|;M7#QDck~Mz2#aVT@&Eb zdh?;2;{GbgOJX-)X9_Hg--0dVXqN*6hRU(2N3;Dcc_7-O;ozXmiUoqBzoaFF^X!%! z1yc1Nd>gskITaH$G^}x^5wXK$)q){fFRF*8S>oII;Y9Wu+uy}AHkl!9zfVq*KkZu! ze9v$S$c5dHup&N+74a$HMN`qE)yP@2jM^M9YjTim zetV8#rpk28)IMVr(gf6r#-qd^MV~e`HdRRIVsMDLePuH9zck{zl*^JW)A)0_P%xKz z^v!QsGQIJ^(Pi%2_276ryNC4A$xJ^c0S>6H1Kr%Pqz1#^+?wZ=w6aS$rl`+m-z{=N zR#V(orT;P)5TS^B&TKhHYi+F8zMOhDbSAq!hCH6_&*#3qx0Fyoq9y(VQ^BTo?gj|x z?Z0dE_T0pw?y;UB7>Gi7bOY)>!5#&bTLHoq9ZGp-#G%NVw_L~j4Vxt3+flQ+$WLFW z9TVda508`Gk6}lyKQZifiK&?Yfoe5@Dryo!(x4>43~B7L^6OWo%7yo9!k4&)Y476u zdlhXtg4u#q>lQU`q(uX(hw=I;+V605OhGE?Fz(E-*O)Ld*azCbfgboXcobzBGRTf% zI~p|<959=;VBJmKOzhkOdDW$c@HB}`SLwqQS#A96qa$NJQxlcn2ji!n$2zPa=Dnp@%eu+MnZYkL%VUB zaqY&**tWa%hp^)9`8+i4Zsa$|&G{EzB$W;ieR!uDjamJ-+@=)1{pFOWldUrtChREY zc;z)J4{~eDW(3wzlG1Ty@0|=4(~04UWz3!4ZFbW$w4ksY_2PS@^eU^0;+>?OtYNOq zYsnXF>$z}|e+tLML9i9i*tRV+(u%C0l*U-P>&)h2S>EI($YP){Wk1nAkf86-)(4*x&IlofnnshS#0M_Qv);nwGG}tMbuFp<7geGQ;O?bD$?O- zxbs%D>D=or@!cFBfrMZ%07sVdeQJ>k>;a%<&4x>5hhVzX4zxLLbkw$l7wtzSGlkqH zE+mfu&Fn4E-u|CMcioV0p~Nq}k7XsB=Ztndku^@AkyrWDl7xDe5mWpBm|tCLJce=> zj_HTX8aO`!$>aFP-uZusD+_DqjK%Pg+vr(D4+7B)R-H)M0G^*`<0c{*85VmxfEC06 z8%ooH#Jc<9bY3myag>CQ8mnwf#5Qu?fpQ;~<)AL>ref!~#G6wvLDJRWQort3Xd0#5 zGbEHTFnO=fb7J0&?f9U^$4$4pQJxbJM;NK0DOoaRgp9Vs9@?Z>;+Dbl_#XVObR-&~ z#gb5H5Cm1>E?TnZ3bu@IUs|u4MLwD4N@G(whhx8_KbjK#B2b;a1yV;_sa<@z+1(^o zht{w?X1@=VMdeAN)3k#w--?ucMLy9czHG?cs6MC?BLs1NYVWL={(ZR9CNRIDAenC|rrxOO6 zEkD~WyKcQ15G)*!GoyTuI67W`wwMmupJOwofR>%DGdiU4Dqie)J2}R1Mn$IkUwRrj zJ?x1Gmh9*L06HvPu;Gky zzhh(@lA$>_G&ON^?;sS-f(VGTT}hRJ5sFS%XP&a6#TAO#swKrjN0recl1qvnLfBuk}V`;1dIhi(a z_8sm+s1syxkfTghb1)BPyPGdZb&46U4B0SIP_%gu)P||_TCzl0F$3813is@$>4h{visCq%~-?qj)^ zUE9xJZo!?_UAOchcCmvs zGhy|;_+gqhO!zvHdqO;`*%c6Fz4Gu&V9=2@dy7)a)bU$v*}i@>#Ya{d8kP^P$QHWm8kG-W3Qw4p_JfU+ z?!mH^zCdbjke=1pVTUI~??|6yHxG6^0%8d}C4SucIdqH@BlBH->Hu_@FEJ z1IvJ?ZL=6!GZM&X=GkkLFuZzDIVY`}j#k-u6#Mt0(`ChjV>TLPOpsMY zt=4h1XU!HVG{|NlY>!IIuFp)UT8jxT7OjV?455ci`=s@rT?YfC{w+fiRJviEKN}jq z1$5_2{hZBz66^%zU{20dlEx5NXg-lajTH_>HrBW$K_JNns-?a^P%|~`wo4BEL@Afv z;NoydnyXgy*-%cY^aO3EMlOZ?F(ap}N#?*uNyUJB?REOHJ)cY{^;EkZLAC8~rP(k24+su;%WuKA=etYRYv&E=ReN)~bkXY%2WEJxpkRCe&WpCA%#;GBxAV;B&YjCJ_e`?Eec_l7R9#)J)|=r5JMipC&x zY12$?>#%LvlBf)E4TvdggCT-k5lL+*awy#~3BIT9%h(i~9qUOnMa7rFk3YI7$9p~E zSM%4%!$JprIZ0$^0!Gl_`+`|#oId9Jv;j9+JC@0=s-JIgqZsA|AeG{;{TSZTl6AWv zZ|%hfQqV~EFuVh>7|Pg~Hv*m%jSWki7eh`!NyK6-G2kQUcJST7sO9R_y)L~-ln;;+ zd~U7DH`k+S={rs6m==TcGssIVH(tx`W$bt?&bL0HcUBdls1y+v04oePC7a1xE5k6) z&IHKMrr7|=#dPzRyV4o7y}=3lIVAe<@l4yR$76vZ8ppIpG(*nUxZNI86 z{{*Qb_^#NA=Ds!QGGU({0N74fN&KLBI1N6D0zuzeI-Y$j3+^Q%#9?q5Ek=3-Nb^P;cn^zvn3We9R|EWho6PT>*05tDj9~Y! zY0di^dhadlJ~r76Ed37SQk_jy~|Hw38i6i*&Ju@HknwQlbUaM!!e;n^%!DD zIf|~Fb{})%o%m{*l;X*lj>y4?9eA=?!=7mqTyM>AG4t;vPQs<2e}rC)I5j=it?dp~OZk$zw7ku}D z2SWQ9Pvi1r3H0$g`N0&Q6V~KD^}_$a7WTmlv>h1RPrcx_cT|H>(U85#x_WgwR8k8A^I@EAu{B>lVm(hwj7;lKwLSw|C9oE6wO-%LaoS51 zD0YuAvU}I96tmyq9+lp|PVc{xJx{pn<_1U&cj2>HFj^bC$By&d6dBD+p3`TyB66l5 zGWV^LuY$EXIG;@p8qJlfy(1EFNdB-sbN))DqFL;`^wVbe1`%dd_?>|QH6c`l(sq$f zlT*B0?2_R-hmUZrkOkNrq{)ZLH-0a&L_P$8NepqT?EOXygF|MhW}s#Q=Bx~H&I)Q> z(z9^Dc5;qQ#(6+ZO`*G!dFT#fHS1?&6};a0(T69vd#L>1`dMxaXxtpfM~9ONwoX?# zqB&){xc-ouDagD==;1Jeygq5Y9ZlpR1J$#e z?X)e13P2c=TkVtPoZ1VrCPl@c1LXFuqFe7>A5lT0VkZrNt0~P>Ao8t(Egn?NiEv4b zB09lmO+r*}Hb0`@RP4bvk~7a8?JuaErw4%Lw#7?TQz872`>7v0#Aon-BMFQSVYH=g z)ZMTdx=|-YFde*C?0t<=;>=D~hmm#iY_?OR?+88hg-bI!#{M?MsONl@6^`2F*g4sU zYhp97F$4;rXvTRBzEDB*3KRN(^(N>PO=Al)H_O8~Lu2(9S< zLNmc1ZiEhG+iVR9?8vt>Ih9~`^xX&`0v`r+%JIs^1jifeT1_11Z_*h>3!8l%q*eO% zQGYZ%#nR|G2S=AqJf%=UE>HeCdeHmv5F3ibm|E{>(k%M55roXT)ubWKwMGID*f2KH zBrq~CVK}^b-h-sju%{RIW5R=~vhIQsEqh(p>~m+^OK`lu91#zhW!zkA{+0mc9$K>Uk)V~1cKWbL16fHF z^Vb;l9in5Q+6-LF-Yk4GLcv>jxqYx(==9f6FyI5dqocbCHAx}9`=pmXrZHRn`U^ex zaU-G6mY<-q z{na&Y4`M*g3;%X)wL^Zqm^cZp zvF+UyI+Y~E#CzBT88rcaxXT}dB08^0_uMvN%k($xt!q-;Tmac|dw>J9ns%e1eE7Do z*q2$RW(!M}$x#EjC(cgR^NWVxs%l(Ngm-~cH2%j);lA~@7#T%|Xiqjd+7QL1@!?3l zQV0~Dz8oBvLgWs^__AHz-{1DEOH!Pzi{Umy-?`=+iG$^ZN{WnjIUh14jNKxDOhL86v|CLJe1RxYmcj z*vz~Y++R6T5-yp7?x$ni2GobPK~fPJ>s#CC+F$|$D1Smb+}d#nnxzwQ1M8?>pxorn z!TrQSOK0&g2T!ncJ_sjb&fxfb*$ONMZjyk!*DyK+Z#0(f=oedr$_T8JWU;yKu z4>HxNW5ML?$v*^}za(t7yK$INGCn{dmdM!7M;hKTYB5kFy@P9^fBC{_hSSVDoU{~c z+_6VZt+P+4pU8F+###IfZ7hIl&fY%6A!#>W44M`0zWjJdz>h@KazYMsKnJj(>Yo+V zGt=UP-K;ZQPeF|nij6$0q{0_7Xu47V38Vg*^GdlJ!)k$Vqh+LFZ_J`GumrdeC}(#w z>P~H0PmhF$_s9oLh|vTeU|Hl6(mn!15^Khv``H2IQ;?RZ%cWopahG!n^MTMEHXDH{ zyuo{jP_ri++jEDb#qkC9ha|NEDg_U*e{!(cbHdDx4zH&335FI%AQ-s%J!P7>Jvr;qHh=uItTJy3$aWu4X>X zx5DgkDAEvmgCECvIOqk`i(<}su9970XY|!o{;uaYN!ng$@xuCf&BlxAg7QN^tpW+w zOc_jicG*AhznDxH-1naQD76ueb^I8g@E+hha(e8vL3oC~A$$`}cFrc9AzTNYr^eD- zz6ggsxgUgOR9wZ6emYg}rm@V)lYhW|zwa^KJzyecYQm5~57UDJ%`wh^&$T9tXp_f< zBTU*Xby2BN+Bw_-!~k%;Vl$w+-!c&X18{Ey__3^l65hz%UG{XwPaS(%K8)O|?@q3= z(-S)Io%F|Nq>uvXR>u$|QGkZF!HH9TCBSq%HU}2ddQ8xV^}Z1#^Rd7}W{W^v>` zPKmHr9o$ckANQ{Lg~w6iY`Sto2#XapSMXhzJYn{vA#s{+X>5|jTHtikSMMaUNue8r zMDlVv&{9dNx-Fut&KCse*q?F4k2*(>sg_I8?0=2dZfy25J(p$O%sXNhMprFQHvnP; z1t-6PianQ&OM7i`i1S~atb50Z_?|Pc?qf zj=gtg+jrg(Jnn3l0Szh;bnfBwo)$N3go~+@w7-g_{31xW8-Z3B;1Vj$NRn_83R@a}PeZQyk@R)g<#mIcj z%maiB5HKWd$ofV89hW0godb%)@$BPXS0iHU8kFVWp2ly=2;YICN#9Z`4VVK1;RO-> z%|{H;Sv=1E&s}FF+j<7F?Puu@c#pKM8&cWayaRj(V6zr>>t}}|M$|1TF8*{TJo|73?BLKeIvzf+5loi@mqt~@W`@pX1Fl~_dGf!&S$>vitMpMrpF5q!Ku1K` zk*R@`ksWRGccg&;ajZ-ETK9>Y_zn!yx%AnYyP$zCrrUv>;P%&EINW2iN;jYjdjIU1 zq}AftRk)WlCAm_><`DcTd+yoRK3x36L~QX zGmmp@wHw0%`3bq0jo(7&nV}8|a^_0&o!3#chKmNqVstIqi%2mg=^ICw)D}?}4MgF~ zjFt?F3=YmAMlSrqs(H_1f;k|ZBP?o;(D#)jTy~O+v*4k-Yb+aXjb&ipLjWIkrbcM- zNk-C?PtSfYc)I0&DsfCW9L$!kdgSlYo~MPL;XWh^ACMV_=UT->z}$Nl@N(EF!C|w2 zT$@y?bsA4%(5?grJV|XT;g#3X5&k()t?7^nTp0#bbIbf&ptwUha0~_79i(&>C(SqB zNTQR{m@ix>X6oPHGD#H9&~ScMqjmK-^qx;lKzXjrpW@(ZMEu6Hf59qY`?h^~hL6O# zc!?_K*B#SJrbNF>4*g)A*}?kxcp18!x0_baf$l)*qVM1^~$-EwcuPp8uPzb?NhPI zTJ+u?OFOj!(uX+idhBA44!uY9551`&S?@Ebes|o{M*||zH0Y!Bj^?+tg>YG|e+s;rf;``Ats^c5TvT+DTt1NB|Flvsm5xL90i zXm?L_5IVZcakVG(Q{TWybgI z_V0Q?QVGrMkMOO(*Lu46%S}SlTy}Ufm@?CZFgviYG&$cL69|~MA;MQx_L+!1HI;$gkC53%{PI=x$55hY9G5h#k$WJ0Sm=ZyIlT}N=%D0 zIyvGIL!vKaHK@ytG^>z0HygIgq{Z~(jlM5Ep7bSW$sC|vC`7^V6mp-uR)(81W`8Ad zATA7umWuAdc|7V%pDXssiDA1cv?q0mOTxW~MGBRuC7O_dKV(0TDInn(tipqFs=l4t z4G^Mzek5)F7|8uIQ)|hz4M5s%Z3yM(VCsN*^K8I12B^<-POsCAfYIDZ5Ry`RMtIj% zdf(9#Nt>%QcNYT|s1kJfr*1)3e@#{w39-mT(xGulVch!>9bpl{%IdW3{-+xHVJS(V_`P%e0D4Zb>NYH+Uigf(G!4;^m?VlO4`z3wG%3OU}?mwVf zg;pen#;Ml|tXIIsSd{+YIo!R6dGj~9(XwAc zUY5VF3U8PxTNQ}Zc*992CEGc2sTyZfi##uJ^6DDa2F}Zs?VgVD8o7RNez)(wlCFZX zQeBmkMP-lX^7s{0E=*Bn$_m!x;HB()%3CupYs}VZG)CfH&fx|2V~NOt8aUx~0);lw zpg*$y9kS)chMyYNvBS`ocmacHaTbJ)cHA;U5tSWDCDmXD`G&hJNCJTY0%U`Cm?07m!<0Ghbn+JOL=o( zC(-hir+0FWE43p)uX>ugRB|mc7NP0b8yeI~mp1NHG^uKzO)p?I;*}-q9Vtb7^uRU^UqZNrreHZ0iRk?qqObk*dMA|zvLyvwXS>obS8KYs-8jhZ3QSUNnU9VjG2hTzOl8KL}u)n z5xGU=R+U>-W-VP^UDef@)%&h)^&+*@QcGw7Er?YMn}lVt$Y2``W)rJe4EV7~wgH33 z9_(j~VP=f6!4i1J-^{b$d)Q#h*q+CL&GPwu@ALc5jjZk#^J$dI>fGbpbIv{I+_P#V z!>bzgTyPADvOStHCj^;-r^&KKj48#38IjIR=8)seQk4Uh+B-~-fpv7a=`3>!LO&up zZ9Q zW$ip43BolVG#2=zBkKbLo8dv4+|qRdkZ>PX_99q3$XiKTBZFD>mbKiUK`j_|ql@gQ z7-~1kCDv~fb?2j}J1H$o|Z05DC3OWQ}phOozwm0b2JGACmuUX$}!cH5$%tddwuOW(=0&Cq_fXL)>CbSV z_9x)QIg5)Cr#JhIt7B=qT-6Bolcr6QzmN3b<5(1y@kai$w%OTk?GDfT4r>swG&v=syn>&Lt#u`e~8p!BrAV;B?GI2z-A^j&) z2lp`pe1?EW8&7a@erJkA5rK!cF=_{i@tRi;z=XAUm7Ek2Vkq27igyNmg7HZv1{o}Y zN9H#^W${tr7GdX8atmXVi2z4`oip0J=IAY!)yt4Ac9BL~;%59l95ixHw?_Ln*7HUi z!P}jkpv?0qC)R)|y*W@{#;XI18P>t`q89_iw8$NKJCrVeEb+jNP>NXe54AU}rlWBg z=YV2Crl4DRB9%P@Jp{NR&F6Vtf6lS5#(^%YKrQ4BL3C@K#4zKOQbTqCidK~mf)dn( zK?hrK^ElEEc)^JAify7!R-Vli2k(|Ov68W7P`k(Pq$xkB%OkGjg!5A1dmEfBITAuo z82X~>yL4jZjfssfi2n?xt-*mjf-mu4Bb{iM#((x_UQ4*gO$~?eJ#8Y2gVtJwmRCgC z;B8zATx|(z`~{XA)JSEWQ?bX=MXYR5M?{Ne$C15*by_Qf-VjqX*Insy5QI7`k+4$h z5V26wG3S?Yx|`-;qt_DxRp-actdH7pJeRq-#oY~}2~KBmqPgK;$xHdNI&^8ZkU?9K zTu^R85WwPgi40S|pOQBInb8 ze*$KJ#z9>fzSq*SPHZeSYSh+>c&%o#o45K!{v^O{Ny90W{-^DfgdV+2vQ> z{bu#%_#So7%*WNopSHrwuKqc$yo>um?q7c<2rjK!uHMOVU@l?v@@tNOX+q+}WWwKM zGM;eyu;p<^iP7L0u<-kWf_qe@a*ygFH$Aj;1LL8r%vw~=sn$220k&Dv^9uT~`c`!< za;FmDii~ejs|yXkyg=^G(_vrKInS4I!cW5vK4k?!tXD7@JtM@w^9$;zyJ-#7V>FST zQC)Y(^2A(xCOCT<&v%kWRATJ0;QW0u{`eAYrI&Y2_esBgB>>-$DRShu9yJ2_}S-h>^;p4BeBF-gI#Cc=Ajb|2Z-K(9$BIDF$+VPF*x<#O|a9 zwAR9g%%#yzf2FWpp*o+50^9hqST$BTbU0gCMZdMVIJ_21U1?b&h=^z;& zZPOe%S9+a%t3dAE_p!Gyn)%ikGZB^(eJTV+Cd$qbH7oK_6z+)k?o={Ih(n}m?jp$! z_XovY4a6cIG)7$0u%l8-a$aTlDoh`2E;rbQ`yhk12SzV2NVn{#6z zq+0!u0;apvW$SWyj(L7n3F) zjyjqZi? z2V9qUXe!Lar6D*X{RITbzonk9tY%|=cBcM$zB8*n|GHXzu|CJuOJvUefchnj=!s^0 zP$)*3{KgMfRkmwCy3Bn!>*D4_9y|`s}Bf33eKd1;bx>HK$HLl&GKaI`s?2!`R)N<-7%s2G(-U z{3Kf@P#M-0Zc7ZFl=z~1lu1g}gQ*oIjnF_y2ufl&+{~hliTQOTk%0;(azsyxkO zc9?4$@UKC!llgJ3JHLFUqW4m#&!SzgzDOH1HM5I8A+-Q27o$?7$KSw*-^}`)$xg{u zs4te8ec)a1Dj~2K>PecU0vpgxMstTb2N+IE=DL7j<7#z7{(kk4eMhw$wTM-l`!)$2 zxu%n*e(_v%QeBnb_c;nHFsE}ky76AwI7jG-A@}|aE~5hDe24~D@ov#9DW)Jo-a@+; z@oD`FCkfeQS;qWil4?w)?6&EBFGs5-^>^wj_W0H<`Yrn3v{n1P?7Tg4AHZD%qKP#9 zGq^A7Tws2P-w?cSadMh5ar4jA)t$2mkhcYB#@14vkn^lP$c;CAf(2RffTFy2VnHix1h#=_hFe%gz!B zu$|j;NKbe-#a}~ib*Z(KH|qMK{)`BfH%X8{gtb3}?8ms>4rs69F&qNZVI{Q4rW6$_ zpSfaD5)))6{|k`*8L9WU5;R7qcwpzHvXA8kz&ER(gBYjiq8EOE0o~I+feA}b*w6`5I)R16tbnzIy#)Q^2^Sm3 z>Tkd~?4&kK8-22d(dF0US}~ztURRxBJ&UUMF~NP!RzKe`h(3iEaAI_VdbKoD3+%D_ z6_roM>V)j=h)UWY;KP>uTrR;DOZgW_QyvM|Z>=k>fX3!T_ zRDJSQtYaP5A`MS>+!u{jqIzRlLzqD(D3LpISzra)49w}P;BfSQ)x(8m*hfqLpimyf z(Se&(S6%^BvyzmUV;HsLX#40d)nC4CKM=*?O$%W(Gg@f`PVd|%uh8(GernZv5Vq|# z`X3GtfK;HWkj*Zce`9#&iVSapCV@k)>LkF=>|!sA6s8-tVE9JdCd9?88b^6XR*A088veIknxtS8PGgqUeQw_2(&4`C*5 z4nuQ$LflI_!Tk^Hr?11+8|t~T&M7~zphRTB*IIdtv+4ei4W1PmBl&2 zb#gSaT8Q196l$dR6P7zC194S)csu2YhQATSJ06EmyB*6Z=Bor_#Sw)m5Y_ys+??CM z0V~3R1bzQDe;v`*&Tkts6_$kn@3(>X8wkit@=gHEZsH-!cokOG&}rh1Wnua*AJd{? zB)q`0cXHZ2uI^BGi+hqb?KH>ebr}}los}VJUVL(%&H*;%`Jb`$!k9jAV z*#l2piNL$Um?&#Z2{v9g>CcV8XCiq_8302Jkag&8Qi;jf>AtiM%IlkTRqYdoCnHGF z!jj$|{l(7Mm8os8wBC zV^AuFZ&r8n107+T*Ey@Q&=e|aBEg8VQh8}=<3h$1i^0kEF%zx+Gn|m%KqdYO)*YGc zIir4+%CC?tRxG0ql6l+?JSib}ew{&g#3XP&GECI2VN{z-3To+XUeCQVY-O<8 zP<~_USNyqF6Pqw@iMU(d6MK6H^Sk`(C^^)@#bgBQM2 zZwoSuyr1Q&Lp0jA(X(Y1q0cN+Nzdi7TgEW#=Q)mtL->Y}5dAZQAUa#=8})Qhx#Lx= z(U@N&Ed!h}Z#gKry`fQQZbL+x>L^$EFjr`0md-eZRH7lX-Ij5rP%opie)JkK;<821 z2}}moFv!y_l6Odo6a$Dj{b0cg(E~tBS-x%FTl5zvbLA0|(8cd2p8LeKNVU z*2~t*wE;yhS(Yu2?>ot*>yq&XV#S+t0TW`KU)#a`nh|#P3GVCM&hgScNIk9#hf$Tl zdMVN#wGx=qwTjFHgyV|B9pCrLJ&NX1oPy-CUaDzyosWw`Ni_wwF70ZR9 z%{-XcPma-Yk#r)<3E!$(WOjgYGaf0wd#zh1z8{x!Gj_C4R@ZJ8-IWunU#^)Hrc^85 zo_3kUj)bt7NWGHwWql1lXPR-j#@ht0h06Nwj3%wGp`=c*>f2c9v)Mvds_Pya*$W?m zk>}aQYuvNH^J`Yu}H%iyQN$!GKBkVc~Z~}Y!+Ov1RiYlW<)^MdoH^sp$h8b!1G@p zSC7!~3WM6~d*#-P)#K{zOc=z}Az7VKCSJMp;%Bd^I7yj1A2y^Y!C2wDhD$DN+C7qOH#<6V$d9q$W!!-<-0I2sG#)n4Gy$d zaqHvHyo!re3SM!!woAP_!399x+btc(>f{F9V!6X?l}yQW<9E&YbdpQSYr#Se%LP>q zkrfiM81gr!zSyQ2v^dIoGi6R-QQxj7`RZ8f`qf zX;b}%bbDB!A^W=NmAc|ir)oaP%`5xnptOP^{Hsu`P^UY}&(g}jMB~h%&v;v9EVoqf z0GT?i&dhGE95B`F$H-=mxpLi%B2yA%|7euI=!{bcPR0K2q<^Is-CJBN)JoAP#A%Yx zJ*MXSdwOx)-B_P1M9a^nf4XC@o+7aXqgA}S-@~u>$D$%9sq9kruuY5&VnR+^%RlXi zm+Ol{&@Vgon^bj?6vbwP{v4)1ALMHVYq-B-sp~oV)E87`$k{%)XJ_3iS1TXfBb71W z!BmT62|8rrPe>F<57^Qt)7&kAw6JO=J#tylaak8`nO7cYKgg8TK>JXG2$;fX`X*2UYiW7<9dUdEywCE5<(tYlH`e;0zR3|^b@QnPgl%bf&fT0R2iWz zX$%c2l(Q+gw64YN5s$ONL&<^k~DV5eY?QKHpPt^3wF&1E%B#wkDdEqPIkI zr2s2>L_n6!#UdDf*(Z@Ar1XUBrYptsveRU*?6C0hy$z*{doNhBf^||ZK7}uB-$TmJ zE{-*==DKb`ejLXe|FYO9mgofW~EwN6-lml!FM?K{AV$oxLzjlMro9Dv!tgO#&LfR?~Z}n zN)q>jQY)-LE79=+XQVBpt;G)k6b?!?E})v`Eqw;(RlpsOF8R{NA}5FSSMD;3I3EjM zeCjm){ZA~C#AddhtLD#?hu2y5+0|L5d&n%Kh>;3nQicz8J9uD$z zk>@Rh9vRdSeb*8xuMYCCmRHP0#+4}iAk6r-BtVJEy1vS&2Qxg3HA`HgAv0KTnlW4* zXQ7&TsNHa>JZ1DAY0vI@>@(D$)|H(U{@Y)p6TYds*kG4?g@9f-RoE!eD@Z1+$4MuX zTkwZ3s-x-=W&w|u-SW=n^?DZwB_w^Sm!w@vqgtQu(Xx z_e*vP95>SB6FN^};rSFPnG_T%C)!B0-*ksMoNk7BTHXz4@xbA^DE<_rR>9jA#7F&d z*DG$+kE&~!W;4pWcOA^<@F7*Bp7jW*>Ch6`kDtw1)2nd~fUfMMg-XlPlV=tkQc$hI}i&>h2CSS@B2>RrG`HkT(Bd4DW&l2yP!FCM22JVzRJQdKU zAPJrJPE1dGPXiX4+37I_FI2^-Kp}HW?A2AiM8APsxoyXhZ0Fxdk*5>nelx`Qq}0p_ z4yzgk>Nvus8G5c^=a(?4tPVxKQK2>D*gkAUVK`7y0-!2*8O3i^REL6^*smn%GVR_| z2sxMIh(Rxl@1uo24??%>OpOB;FKjVlxo@~j{l*e@EKtLZnCUkP)2 zq4(Sc*Y3erSe&9=zOMZsP&n136`16vZQP4w=LG=H$mvXORCHjG)L(eFQt~8sSPtKX zBDPDeGe<)`r)ypnR2CU0y-&THh!OwMnj8vb9r%CUUISq^e!3(%G3Ip&?)L%-H+ z?4$@BM+L@@f?H>gML@OAVkriq8>)2nM{ zjd_Z$lib$>T8!;ORkT@Jm za=t&m-#2*+=)O-(`Omg|7GptMhBOBvR^tXO<-wY*F!zNu>%huSI{&|4aQL{jB5wr}~+kUVbEu@XZ=h2%KnVl|v42k;rK|Zbq?c3^JyII}zTg)Nz z(uzK(&2yUl4s!K?P*Au@elO!I{p%AUr*IShPW68F=#t?g-{5xVVuPfM8E4ySp&Emu4{VvG)E7U^k2Iyl0t+|1D)s7B@lCH1dYZK|7!_BJ#mm4zkw zzNya6)SYr@F9?Uo43Ru#amdXW&mQ!*neR-?N-7gL5NG)%;;mfCsw9Pk5K$X2aG;=y zl>liv0gXsJZ98W=1cfWBpU1o3l)kbO6W$ZjuEm}yGJ8gxR9)rn^DSp&;&kibGdrV> z^xyzPy)MfrBIN1h+c=9FG=45LC}>Wqp4z*e9HMfbo^scsw>py7v`lkGro$6{+BGK1mDM{8GW#&k?QFekHcK2qN2-096moTv7FPff7%Lzo7|TWe z(&0lm1U3+6Z~)I4rur{?MZ+yT-~e9s30~DWcLc4I8TF_1l`rS=uc>syTKjNiu+p4g zQ>lns5jciuKF6ulGP-xRkzGA=ltm&XHnv|R=&Oi z^xIz*lNIzoZu4L!RH$?7^I|^M(YIyP*9&=sT_BuRDo_mv*NDD1U(n^(ZS0?KqxWSk zeHdti^`NAIH^~@WSZ1VICX@VIJ9(&2M6y9gns6-1(GU0@oCG;jwstz?efc5YVpGVc zhofwRPsZ<2MG9zS;b!QT8HZ-H7rSq;oV}#=QCsWoI+A-a{zPLItsqEvQMF4bqREkR)kMGUluc!h~= z8KW&j>AtEJd#u*JNm4+${~CPG=n!=p*tEWaxbneUt6=^de7;Cq4C*22FZG zf8O%uE!8Z1bXKkO?yAxWyIl2ZFOr%agE`?(p>wl*Rn1>88sY-vg2*w*NkAt&#(VNy z*l_&*d)2?IEs+wX@~6aRBpcIOSLR;BpA%E^j;K{(kR5&cAIAphbJ#;`(kN#@tze<5 zZtPg4ic>v`{0f4EE>pC46Y1r#W2D#7n%@0~Wkn*NrgXftvP&e*fSiJ*L7o6HuL?mO z?)Tgn1>2C4JqR@?K7|3T;4EUk$JK4zcB9B7p`zrjFqo8Rtz!&#JGosLVtGx=GP{V@JLV>>;5v5II}q>9TDvdQbts6T;+ z$5=K8IICZwsl}F;Md<~~A}?DiC>Qp88u#jD%fk4aUR(-sqB}Tg;(KCSN@PP8b`@+> z*Fwi!!$)G$%vR3w&*yfI+i{}ncOF2(b@_~h!$iM*nU(M(i0B;O^$=G~*(7|h3>%i( zCTfuo2BZFXImNoEO+Pa0^Mu=e?n@poqSGsApYJhaTJmqF@qu*o-#)88`$vDJ{^}8a z^^H)2&y~=n|Bw0-pTkO!ML}vU(#Wq8cH53~=|B9RvgHGBsKSx0Zu=OHtUkw>+hc@Q zQm}$^0yMU^M2fz=b)wLiyi7QPx0jy+pdW1GER4#Da!4whlO zLj|2&Wc?vw(l^l%ohh_(Nt=fL2B4qM#Rk(V4UrV$k@^Q>l#;nDerhh|OfM&w*b?vT zKlY`ziY^KLCqAS;^pdkQ+q|<#GpZeBYGFxmv5nG_8ep87dsn@H+$D0uOK$Z;0C1BA zqsb|N5uD7nm5xBw{YI6OADfY{(4CIHNr4C;@cR=^Y+nGs+C!gVAk}*l04Ev)u;j>2 zIas_Btw7SLxr?yUo6TFvkhW@jtcmpzSvNi;rnc{fgtMFxE7cv%>%cFed#>?axJI~v z=pR?$fBpy+*$GP4!n_0q(ZIcPHcDWUAd2H zj0KWo(bz%b7g_?LYq)gn-KW3)c#K7S68Pm ztRq!98r~(5Bptu|A$0r$aC|9e7Z`-g9LOi~QZV!FKURNS{fPR=t0>Ab_{kIBQQwi( ze^9*yc@U{Z^&q#!Xi8Pb{%Fgn&+VtGWc%zcAKDBukl}y zL|;L!wh*3#`G?WP~NTd-6CP$qG|hE$i1G6ReA{5IXSDx8JM&_YU)RyALC$ zt~1OU!iCJNLfeScp|uHQ?M=Z1^eN3^=z^0(1yFPm#a6bu5ELZQ$HZa{41CY+SmGe%GxMwLyJ zxIq%d9W+L<;)eCc8rAoGGpG?o{bXVYPu#MhnpU?sgY z@5Yq-2anEdv+1kW*-lRHQA)b^G1$V`D-}%=`4k@d25VT#b^_>!B?SLGkR@c$XB%TQ zly`+T_YI-Ex(1a&S;s#05o^UQ&*2Kgi)q%cQMX~HY@_jHE*v_4%3OJXAybqbQXZUI z4E*-?9mMj?-~WMB6*M*xf7Th4?>$RYl%p|t6n-=qgQpV zFl&aKs!Mn{q&_A<9;R9%4rE_VFAll%LoE$~0cq%Hi8vX(ul5owlG}1*G`lbQ6u5k` z>K?}mK7n9(G5_{CApARP!Y416y)$qP9WD;yCtKWRtj+=2&)xNt9dFazk|*H#1wO! zMl)G*Q6_`GDejyMRwz4#c?2I##*d!Er+$N&n1)np>|!3!%kc~J(Tx8MKD-f|@D2QG ze$(`b0R0{;Lia|_-h^Xtx8dyR1}Ye5agWBHM87{sRY`h}X!xGOf3`*0*)3Uj8GMdl zQ1EsUKIFF6A}Nw^r1gm2lBkitR5w%kp{iu{gS=k`zB3qNvv^6m>S4lGNN%5SG$-TE zh>=pA{7Jho{sM%nv+rnUB&W(}ZKw^Z!-8=gqi{tf{kmEfhG@`f1KU)oq^DNHB8_{* z8v3@*aa=>v=~^FwTZCH*%ohcQJkbov8-iT9X9{S{L-|~a>~KVc@a^pHgjZ*;#p&o& z9rIdsphz2}ynCDjmH0?;{p710_9PkgHg#B9G@_$&2VTwQ_AIxbKbEU>`d*>(M+Lv! z^MXp*|6P*D#T6=B7=y#HL%6lfll@i2{5R!_gGdh9bhXdnd4ac)3o)79{tdZuqgDug zKM2Zg&u4_Pa8^a1AGRnbXKb_-%VLqTB3biXC_H6_cM}b+Wuw;0GADFVoL{xdk z0vX1H?tBD1@h6=K?&LaLLxhJG==ux1J=XjqAI(@TdFRdQ8d`+H@*?3_eBNXvaUByn zV(JdVZJdDCUB1P@3!5II9Jv@==H=sM`ePgCXkvrQkseOVGzR0WXrkqfe3jYLd4Err z>~Et&3sMw;oD=a-PWY#a4;Bp3W0v}zHJYzr^~Ll)AzXoA>~dRBvI=|9}Na2Ld;xBx`ktT<*dfKe6f*pnnk+V(HorB z$PSi0tutM}LSTV5Cp6lsV%0lbCnrrG@R$&M)*Y6NYC|TOGG8^PDwsOBi$dNn@lh7d z5@Z!V`t3(}H!gl8I3~7g<8QdIJ1oN*_?N*fkTi$HNy$X zGPBw;^6~sgPFRd5_A-32R-hZnA6fE6pdI_>O+|v9oZaMjO)oY&6?%d8L!Ev3_3)Z^YMIKF3A|dckL5Sq;_ms z)ymy&spi|E$=or+eIe2I$m<`es`jVVD@sK-T0ccm4smD=tK=R%31?vvf$vL*h95vb zS#2CkCqoer*Meil0=f&8T#qEW_XC7|(DWOegAH|5z2kB9K+NRQl`|$iN@qzLe_xZN zA*8xt{1PgFtGRgNex&{b_NMNew#X`_`R`Z8Qdn6yM}tY6>u3-2TvS-E z)R)5e#61`I(Y*(D`?(!7S`eS7<0iYe`IX+{%53PZay=hU+)uCrM%sQ#<>;Jody=L) z8B8c}anV925yvCM?Kw4=nk7PYkN@6b#eH+`MXwW$^7WM zs*SbXaJhMEQZE_g*EEt^JEn^7XCl11%cq#uYS}Rv(mQ84zS61~{7sP{POzss z?D++0N9Mubk~Mu;cGg%lX@+Si%}sClsl_8ocARnLC7euzcjcpCZ!~!om!^9ziWJGU zgNKBOd=(I4wpvy467(x&V=uK)Gtxf9AHsq2x~Ze>aC94}cg;DZ9-%1_&jUr~@CfN8 z)sSizI-(Iqg+{%hp1bJ#4fR0X3c?+SscS>PVMUp zCvl{9oqUJoX~ z4^1)5hQI~Lyz!oV_k`~q>kh|3@v16`7Gw+>%YD&SeRug@_3@ecBy4@v-CYgS_GFBM zW#OpCGfe?}r%0>tML zp))hp{$`0Rm@4%LWLR8L^pgikBP6OL)^DLW^y0nuyk7kx$rzhG3K#Za&*3QA7c>33 zy{yF*hUGX->CY@IswL|`vHS2&LnT;i0yvK5JBdZ{Jdu|!Bb2I$*8JD!vdDAdZGInjt@WV~C*9e7g7_1R((bmps);#DLhqHtXo81V zJaU;IDg}11_aN-nq|KT>jsF;rQmWwt7El5crCeWdG}4G+$87DF%U>N&WK0`*LR`Zx zCSEZvhJL>guimCYdU1+8ROY_e?^cT2o!U|uz4o-cW;(5A*^3*YAJ4|?+X8!X^KMuQ z|BT!3oLmYjoyCQLQ)qM~xj`%l;ig?+Zwm%NBJcql`*BNOk48Mopw+nBg8yndY-{b& zpRo;(V*8-l?;UgJWa+eAiWkt@8`F22t!S9!3CC@5&f~q*$ZXOt~jMeHUFI^SX+9Z?ZEkN15J@DfNQukvx@P zq!z6Du;NuMvl3aseje6nfCU6%Ua6#+A~6-D#2qhMxRettYEGV?{4$Dvo3^`VKJ!JF-4*4g})m%jH7$1^5Ol zff-CIMHC0?$H?@}vq+*V6o*4_08-3V!a#=CT#lW7yW8@L-9}PM@?j(v^eaiL2{xJR zLkmB!(D$uoAbLyo#y{#4 zj@A}W+npCV5_o}4ZY&At$Fhzzot#B+hgMLWk5C3yZjUWTE6_~TGuOmW;lCcv!Tj{) zi!sKNC3COF4L3Yjo+&7MbRfzd?j^T_(_O$i!{25xO81e6?~a{X zT-zmHun>v=UG!y{k4aWwMmNOcR4Jyyh1toT3r@H^+y@!u>hcD(os6=FY(gO*ttCj! z7?it+ZvtT3jFLlAcu3B;6Kzwk2S*re;HpsQ7(tmvqY2016*nFQh4+6(-S3kQ?eJ?`wl*>?k_umyR!%SXo+mpb7mooNLSLuTIAK5bCR9S>*;<~3q8m0AChtnY$4g# ze-A$Y1nsdei;-$k#14P~(y<)k`3FI*nS{ks*Hn zR9dE7N#bmv*75VyuSSF!1&V&$N`DRnMA)p0=V)|IyKh8(Pr#bHP{=T?|S(z`Bp3UsmH3_VzIny zSKO@x_l6UFcb|(6Da4&cjz7a;2Q>GlH5(r{{hHjWxB4(k^h6fwb%tjclG@8GpN>$=|s#UPb z@mMcK^vcHbcp;(UItgoGuH-y)ilcLAUo~tuyojzgl^)ra#hIDb`*=OF9;{b<5_GNOTg_1drT4eiyC7{X7>6XAh$#1c}6f5pg<$t!kw#dG~Sxq+`y zuMtnjn?9&M_=b&8QTSwy-PN@2lc+SIt&?i7oK7MYUs7aa^A=W?e9t)M_@ z30>whe*1gPZv{LABw5H7x&(R(q;Ocan}n>Ipn4G*wRv-V7d?MKh8u+8C@$YNQ>pZG zx%D*}EaL`)QPXo4Dqg+e5tc%*bvr?{?aOAZ#x{tH1!v=={q90{xj?6(K#`fC{Dtcx z+u1i$V0z)lW9jL>F$jFjMXX!w>%S!eop4rL)e#L1YPQJ*IPeM9?Ua|%jAMD8PI#lD@w(vXLtZ*+#vdo%APX-e<^T>ingAlH7UO=1e;2Oeoexd2}#a#(Due?$(4B%WN( z9hwIPFnv-GrhzvE%>t@m`~kLd7V&jAn{|Z0BAYS~aU$%cZ9Ch{2J8K{~+n-!(p^JD6A< zQ?#LG(+Nn_>PbSNTg(hfHBwV>il)6~qL@oA>QfP4>*4$BaGxm&JGfq9K2k-3?v^zx z@8BBzAS|ZEWZv$pSAdJFxrOQlcqKzW^tPYG7L_!gbwWk_FB;Uqz27gafZY47yp& zMRP&#NMRFw4!#-yDGZE)fSoN~#Gev7MV|P!s39JQ>g$vLB(5E;|)$g@;K*jvF#b<) zj??J}&kCfZ(8weda8Elqs@gZmHzHY#^EVe?(}qq5<$jD_zBqSEj-u_l5XXGSWB5YY zwKfGy_(K_fVM%;xC!&GLbCmvPnMT(V$!p^mOXzenSR>Gm#ZH4l7%xB{NaX2gCg<36 z`q+j@#ta$@__7?m@mLislrcX4!aFPh7K6z&-uZCyuhixM7vmIR5Qcq~sKk`x9i7S{ zhG;IVL`u5|Pq+q6XXhiEL!IftNUKqk5CzR49>6RRmU13eZ&I~Zvqm(8!4b>lQZ00A z+ecJa$PYfGUW%Yj8%BlIFPkaX7)4SIP$2c5VMtM+Gy`6ZqczbmgPRn~ZS!!N7hc!*AB=kJ3 zR?7*!)bOWO%XBn>cCS$P1uo+N*iPF|5$>jX5THcnKc%DCMYiKbs!Z3B3N5B&aG+R< zuapI6Sm5SKtI6IF> z!`c#EhA0eFJiLI|sxNO#Zlhn4H-E4WPf66)~E^B4ECRUk{w z*esRHjm_mn|JwU7K-kU{Q?^*1_+{W2Udj6hrrJq5c@?otruFyP2AnD*z(e3Cu!Y{N z$jHo%IvxS;gqNM+o&iD@o1#P3kLQn$0+b1*3MH!CqFM4TYs%ViqoppLlqWrAL0R7* zGc7LD8sH@bx8QBwd`La7VCB2a)DjtPCbz2E@!7zyy$4_q;e@bbAeF8xlI<_?#SJ;- z3ji4}Z&BOU^iBnln$NQ=6~Gj=#6K*?VF9P%PRt6%mJEtabHHrQOY-Dv08|>9^>brf zz5WuZaFCE;OsLPU>h)CjQO<)*ayCPM{TQ`t=$PVAI!y24ewf4GuAW8ONNpQn6Ar{R z*J!B5RpjA_4Y=hkiPRvoPPClc()o#CGaWgsNY(|E!UZsh!2TRk#qmpv`R9iHQgw4q zy;kkBHyOcBfPXd^sFAgcDv>$%=vPe7t$Mf$5$c7FE3Fk^6G6SPrUi+#!6N^7eoh61 zKLo0*`+}UaFY12LJX)8-rke2SC`reoDOf^v&7J_70;F~f05=%@YIt;5C0J;sB3 zhD<0&61&e?q%iJK#9k1?Bcc#i%mGoK%S03#P4F#!HSBIw@7hr>Ngn+ikwjfsX&L(u zk?RU~=W^wWRbJHTrZejVpdRS=suR=Dja=b=d;eKn^<7ON;{5h9as78evP^4TMpxI=L|Ac13s~4%IAF$xb z_#j=x0@}eahI+O%;<$*VDXB&rS`Vn5<&{FA%z2jm9?y_LXk`pbY;N=fi~}aDS@*$# zczj?Nu!38`o#)vmO+k}UL`S*17ke@kVV!7nfdiC5qN_wxq>Aqw@Pv-bW$>{80W%}P zm?g;LWU?i;p8oFEr&#nOxwu&y(KU*RW=D(8LbWvK$6Y+7s@pF&o0jibdS9tpY^9Xk z58XlKy%RwmOW#jm9H~5a@FmJ zIVce8jZ13KAnTsy1?a$ce@Z=o-Q(d`$hB>A7w3-ZeR3g_FmZNzlL&B(ledeYzs$mzt~D$4A)$(e%N|R!btUQL zRKF5FqaOnEvB{w}=9KlCmOL1QZ=3Z|d^UEVZtw*?j1%Qxdq53Gc;t~!sk@6bv1-lE zV8w@qe;X~Zaz?PQXpfrtmDn6Un>CaFl0SKRsaWW5U+WSc1Zp`4OH5Cs`nt|zzPRHv zrps84Z6cfqsYJkQ@DUJO3^*ByF**E_dRUbszpzPGzyj%ai{(|ox{sr2-~`3Wf}hBU?)4zS4aHeB9L(ILWp~bLm1y0H z8-}c>S>i8dtWcte45Xc$*1peP5-%O`%Sk%ce73a|5G@KQ!@qz(-A^#z*7CBY3^%(J zVp>SE89C$!b2~A{b%|t$ef5sCO8WXjlBS?0MDM9#jamckdh6e)DL2;hl_S zWKUe&^Q>Z=ZtW75Ci_Mxv9%g!7@i?wRl>}sn&42;KhzuScCS}eDIrC9-omZVeP$-M z+uqH--{LH0RfCuJ_po0i{ABL;i`C|MXD=Mzr1{=wlEh9$XG_mV}JapI$>Q< z&&r)G#~!pz=GWt5gmdty^5)foHLpf!lQyoIym>)*tLTOE#afYh36EoJ$xw)jT1*M; z7|lj0rGq5!8QZ3Bg}NKAqWi&bsfXecQHGP)j1<_g0te2Q>4~wf0=Wz-ZHT0J+HFBO zkjqlw9!IYy+YaevDVO6bK`jAFzel{FfjiecTef8cZ!VzQIIWMdoLoX>XGpi83R$T0xuY9U`^p{Wz$aXoZlaeJ7?uZ_WO?JsNIoX)2eIV&nC00}CwbpZ z>iG!{nK>G3qp)*1?V%w>dal%?&X{<~t$P?fQzdzn9y3GO$ADH5QIcrgUBV)UqnaEx z*(C-Y(weI8xz6IM48|nEtM>_YpGP9rH{Cn9QPMTo8~F*SyIQzB;@O_n&7X0rOL zKp(y{0aV?lc7^K+(L4gxG==YRGB)X5B2B(%O2in`VH{U+Hf(l_HJZ~AByHG_bk)rO zg^13d0@%H^LU9SBl`^fcp+el6)>&%x9w_=WDl(T&kd$xK`m@pk%#FmWPUO26cmKKi?=- zT67Sh&`FKav+472*^_bgTJ_QZLw)@U_98)%M$#PYCE1$D)LJEqn#+~CNI*HMN!HvX z+kIQY8s`a7FA;OBkzI$%XPJ7nm+#P&g{A2@MR(e79_3VNPmyqzq650y$#criC6Z%M zG=~Rf@P;_Ju8Sj9t{ z-bO=nJX)Ng18>(+Mr<4Y5=|OLv-HtL4$9f?DXJzVE}C^Me;SL~A_;|37k5^oNr@=Q z{vB=kNq8kmu?rw7qEo#3#9_&;>lf=`?gb4y7cH0FwZcv{mH=O=CR)cbF|h=(8+Lx# z(Jkrd+vXX2Xy7Qy_C22wUmG(^t;I8W+kT5zDDPaZdQ_O=DJ9Z36ErFK?~tSS=(qI?Knxp?@9>B zAHDcITSt*{3@@s`~&dWmy9e`{sajvD#5LNT!oB^vb) zWFkr4aqp*N&%y;Fv1EH>U`%9}b3Y9~V}|(Mn4THZ6n$ixOBk$sS-?@n|N4gPeKA8? zy@l&>xLN&wPdRmim~@jcLs?Z`iE_IiO$i1(;x&@fT;(ZVTDg|qfO^G=zCQdq8K(%K z)J{bJ$vwl1{7ol9Q=6n;&zYzDQkAm~1#0e|Y&;E{A3c49UmswF_3)hUc|Ly2cl{c^ zFkFP8w|0nQ6**^lkJ(9j@|HC7>!1?`>XjfTAP6x)3<8`*v`|jr-vpgAnPeP89bgch zr6JG2*2oiVX|VN%5?spO%7o1bZXJzqrp_7s{0&NN!!+m+>#i+E0}Q#`L0t2mDoNB? zBtMPDa6HP)b+Tb3YE&k~KHvJ4kJQiHM(IW6`Z>=jsFzp5=Ee!;WHcSg@q6rra-<_s zgFsI}$xMWA)@aO-c$e>b<{E+pF0irk#19)olHHelC|ewt@xi5aOwlg{nDC$I@k<}w zdaM^JSz)#pMoV5Lq3;sy)9`v_P6zBhh83y9-1?azg)@pntdA?wV^hkQSNeVB$YXSz zM;=!%3k$xz_b46cSV7@ni}E5_7c(iuu`Dhu`Kh*Q%ozxK%WAZ2r%fx1ULq>q*;gZm*&e>^9q-`zeIJutnBpxDVY*s5pV~Hkuuwbc^ zkYXP)6I!gm*|nWr88rT&dP&Vn*HLG^a%b4ahfSd>EuW#+Kd}a>#LGO1`?hvXwg8sG zx`fkY2Ty=k)bYhV16Rt++|z9Luzfl*bQ-qm6=xk;7=_KISw?|WvJe*N>Vf8-WD4nn zq__kdLQeI|A5-@*{*f}uZKrWXvNDEk`?>qy1Ut#u&LO+|mq=t60tNR{pJq_+b&9)g zR8J+7@ZUdZ8%w0nbaLsI9V>fApci_`14lF%yvL4{SGbQTI>1Eq3L(x=hG|np^8mdr zex85`4p6TfspqLf(hKkgge1npd-2E>32kjV;p3>YYVITNEu$tHKH1eMm~4N;K-o>hogL*e){<|4_^I*1!uZ;V zeuCmYz(T`8I`YkY6UVl7!i|Ht;)VOhB@{iTf?vf~hg?H!yDd5m7vhv5fVBB!(mA?D zbseW)cMSjSn0<6T&XZ7M?4wJqZ50|$d6d|8edxTUF&9RSD`L{hdBcc?wzbyiCr&t1 zZnVO6?_qwOxT<|aH}X0(Ds{9D{yX|qJOQW4G#6|q5ornAC50aBd<+Rla8deYSV$&9 zs&p)GO(sxD{u!m$MD+FsUU+9-<+hVGhyRKb)htn~89dHjagLNBk}D_}5KfD3BGe>h z?Q;8w))rzXQn;AjQRiyy2MJW8bH0!~ zo~*Jqo0tK*WbaP-Nm$$g7J(tm(%OiqtZd9e+OAY&k{d6*A(B1SRCZfAbhia|NO9{ue-&?0s%53Q~eV-I}?o= z(@unQ9r%6xPZaZt+9HXxvK)XJ3f6Fiz0rsbqz$==}%GX##IfPhUt6t)fOSquy|03$hlG?HP{8F!c1TbRyktCM14{fnyg3 zUOmp=i4>#eLTz~DcA|P?W}ZZ2CL!YqqkpDrrnFMUea}J7(&drx^pW+V>&5XA79z}E zc<*P_-36C(+m)Pf_ zRVkP7=(*eAL3AYQQ?QWHu?iorUycP?j>t?_2p$9%au;^a?yNprvQ8p&V}G5zGq1^r zNTN#lM==7VW!xd?w}}jwpxQ)yPi0yf7T){`O2Z0K{_G-(*rf}AVJ8f3V?VdRkx)+l z;%6p&hMF@QRB3<%2Z~ATf@FeAg&V*c*pbFhXAIQA{J~%de;#o72m0VxmV@= zHf@7;tNSD%U$j@QVl`19XWy*r9cF!MtS^XPQa_ytQdX_}MA@^`sh< zhiZq1dCXWX#F}B8RM&90buOUlRuMu0haccZ_p&WIaifSXF#K2W-kYxh7 z+)#&TEi3ggN~O~Bd=xtFN%c}QSI9F2=w=5^VOh<$NqU5MF60dO1YrZ|z{M&u?$3~) z$#6Rrq|57KB(x2@f;Hp@8oc#kj}eG+ek2V5hPt! zL@K?Nqh%ZW$Fsd){^!!z87Inpf=HuRExPwEjY0hmaE#Z|lBuA3=L?Zv^m%QEqHNO5 zN$v1<=?J2FVv8#{1^1Dh=`8rcx)0tWT3Qg%z8VH z;F{mv2^!DQcu@8X?LG>$&~Zwu6yAI!xHThkb4EI=Y~p>wl61xbM^cW!JF~lUf?r z74>eF{OS}fc~L`LV(*M+#6ZrltSy0LOS&w9nf;E-nu=mfUlE(@B97>I#g z2Jpiyq_9OiUYM@M{(XK;aw@EyIlF0+wthW7{{OS}=0URM)qUsh?tAW;H?#INv#MUz z+bi$e_t*V;qc`YodZD}7X?mqugb)@W5E25KMUsUiY)dRc2n$&Yk|Hd7X6%q0_Jj>B zJ0>P#{<3AsGZ9vdV`?G?6Lx{Non-{~zE@m42!DFmaW#PnSnFl0(*pp6B!)wl(g$$Wso zWEf=4Uc5rd(ZUxxi%po{bLJa)HXLNx0`-GXop$j5f=1D{-mDoBu^Y433H_y{>l6TQ zE*OyNYz2rM)QA9D5K@C&Uw9w1pTu#o+%bzJsgT!}$i#&bdkhuqVV-2{MyR1pI)Abi z@`fGZ%JV5xg~y9*wcXinG)}gD`FG6=*m2p`ap~#}x z(hvhvgQ0@pB2O7-$Mg0=-W`oM=G#fPLT~e-#{a@vBGWL%o5Y^qD0x=#Uvi3H{AWR@ zC5vXkyX}xAuUK2H^FWuvpf#|3pqfNCacAlFm(eJ8csxviXCIaG$`}_Vj#xpOg9J<@ z9ct>$W>Cu*{keRH8p=qS#;d_b?T`^~WxrtKVJ90sE^zhU0pAVKNk1vjLQu%?2)B4_^x zPyqt9R>@}I)HDs)H+NPowSDs@Nj#0kho_e;eR7vvd|^xvAWPMIlE19ThH7wdF;THe zxk}+C!#{W9qLtwG>Lh;4a}Pa$jp$`*$bxC6fO@hWHUFU1qZMvI8jnXDQl3cJs(*>b zds+7=t`dbtS`(|Jurh;6)H-E3>UShVQAf2WiEcU2$3(U&tZq?LOU*j*3M(R`Y=<|$o{b04~xyY{s14jN8_8Akuzb6I{A90oJVRUsPq4>`7o`_;-kmWx8ESasVXD< znWkA1OJR&rJ8dJ@fg+NHhTj2+W4*AC^p%j6}GFX3{OoY&Wg>By2a5~;<1g8>dN9+zSoa~xr@yc$Mf(| z5ML$BXEhJD=9gEaY=cRK0gW*TC^t5#p!#6g0EBpYhoU=fl5{jl%5A-Clt-;RU!HGJ zZrXXhVGb=feL@E9lC0;X=S88Pq4{kcOIS;JQ~o>BrH?SbY`tIH_H1cpcWW0A0PXXP zEN4V1aRUM-*42Dd?C|+&@Wp52sN2LK@~$OmkGy~_f)Fm@3j*A|Rz&$DW>b`Ao8g!! zMf46*I^zv5S|?qBrmK=PHNpc(P!8b!(3{ zdI`fa!@T3f%&rOUxd+$M9GLiUPU96i<)WgI^BEu)|MSiKhE+BV#nx}Zfk*@r?q390 ziGM6m5w8T5uB$5FCH9$h|VF6mAq8*zCZsm`7cT)=60MEJ0e z(&9(Z^R7@}vBj1xd<;s9#c(nSEBi@(R*PQ~K)w7*o?w%0taiLrd?PHH|B%7p9wnh) z6q`)-r82iq1}pNz_}hg0qNTP{q(*lPS^5@xL$p0Sho&Xm5D>F^jZ$B^!P&hlx9hn+&}6=)a06uz{X!oykq2Q&u@_%=d_aU9M{PiumQ2q z7=f=9U8~~!2jE{>i54R>GJqF_2YxKi0lkpGB@jdXs40Jj0Ewf7HGWo6qEDe$9zz(6XgQgeAeIyPkHYzG}bXH z=w+pTf^8g-%VyXj82Lez6Xp(`y&k*^vY*qsTD$(QtT(dHdK~zdMQ7y!esx#%JrPmY_?a zl!v`Z$;)Z^qiaxEZ(&jt+eOYc?CnAcAAyukLALbkQ~X3COOhP9uHul&prd_&9F6$Y zb)x%W{LfnWU*2Je0k4?91N+TnrSPpe6ZLO)$H2x|zmL7Q4HRl)4y_`m(W*+McP+%x zM~G-NWcS8-E4{n70uyGcOGpZ|;ZBM~E-fjC7Fvwt121^2rH0P&s+|&M2lg z8`scEZjaCb-w_8NxZGwgvo$=}=-NBWI5}^k7Ezi~K+m zs#ez(B5ta&I<&ZgCTbj61R)S>2Ic)oEXx1?RpG>yFy08!d}QBSw{4VlH(P4=Kr-c8 zvE=9d8}uM@vSWD^Jwl4TT35XL-I}4m1bZ5(A2A=x0N_)^v$OK>4cc@jWp94rQs$9w zIXW7e{pEIp8g>HZ^6+Y9|H@_p-iO~wd-W~WWRXiP^n_ixs-ZeqH+%EdbRyVlp>vy1 zw`*ThL|N+XvU>ECJm?Ut%i3Llc~R3%x_E+$GJj)lo?*oe#+1Zihc1SZBXN2h$G9w2 z4sGbNL6Jnv?v0z*TSY+b|Jno3ji?3X>LLf1!l$*+ia2S6{Z=Qze8qF zj2gst5t2;vd*=NLVR|S$rwE~;Ub+5V1NLV9uVZGKGoxuX6K>?XD1K^D11_NG*`n5K zXpvJ1Q$SnR5+l-exMc?uF1J{kmYljFK~7o)w{6^&reczz?+>;hEBbgve&@sH!z=8t zOB$lq)CeQwK8#5BIOjnwE|lPHKJ(fBRcvSZ?UF0&ncqWYiQLZRvp`{(AGStYnKPI= z|JXSFx6iJ-giS{)<=uC@UE|J)Rw!3NI*GD}TXhuT7EfDJwZOpB2c_b~Kaeb$_7j!2^ivVN2;WF4X-C-^x}x4!fCh%_O3oQ`&0`)%`n z(%5ML0}DbS^h}&LUE+u+XnE?l#)KLj?ShN!D-`u|L<8C&83x+`Vm+1r70Gmk<%fEq zLx~rjwK(+xO%LugIOeFQ2jElkUC$@;>hQx+Z| z%bC9c)YOhM;ef08k|?}xMsX8I*?pC)7kP6nCrgU|fc@F#(%weH z0AwMCx`7z@Za(B~0TB}L$fy||R9voX7qo%)q(e^8DJiq1qO*ccroG}o-B6Fis{ZL#VQukOGT%dRp{tWnLogduHwp$ zqhxKJLN2`9cvx66GHjI6z6y4>+MPyc<1TaWCO%-=8mUf35o+1Q(vWYi(}7SDB-4`J zvP7;zg%#vl4I)+y)}4_m?`mml0=JDqG*^*qbq|L|*L0j$&_notY=0L~+9ybtkiX#3 zoGU!-Mk}-^(SC|!AkG)Mn`D@N$n`X6+4D|c34L$ZyF!2VEu_fHHv0vP47pX(20y*v z(J;P68yWL78Qe5@nj@}KXW^@N{B^b*q;D-=Yvhk3yEc&}KQZ1-!n1Ox0xZ#7O?hIy z*B;KYr+xWw`azk()__(8F-kVFxcDjAMmVn!qdA;Kt31aKL+GMDF3 zIN~4)hY&m3HQHmoN|{vXEXOVC(Ixq_{OozgsK(a!rm7ryL6vi(jGG_nv|*7ksaR(~ zg&+0*_7zsX7EQhztNA>U?(hY$>%nz0*l6I}xc|#0zTm`EAW%_3FM{Wrex4n@3*V2Q zZjm1JnP;hWNlo)E`1Ca#oB=D>{6&T!q1n`4h<}ZoILuO>24A=9@>QstLOeo>x7MqI z9(i!mp5|3q*(Hv&VyvQk?eth{ZZyVTa*7vyFl3oYs`4i7k{3bikj|~NDPhG>O}e9n zve|6B+V2vg?Wu2i!w$Z?0gO2kVg5uGVR;yz#0($UG6orVktrALpT{qfCwrrw&=Wf*1Xqq zb7mAAzk}{JFhi2|!#A%gFJ{QQPH`I^XB67SUztV&5{My=0nXC~?p90;+>$Pu9#5+RhcI6z!y zncA?^N`{rcBm@XJ77h0_E|GKDexB_oD2 zOF)9{%BqSgz!Ft+{7$E|xoZbj{Bw7^AZvrvbjG+J zevo8|;8FAF{EAumAKzzQL0a@5*A$Bw>UI9oG1RdG>IGWCYf)H& z82zw%6?oFivJ{SaXjKnR+G|9;!c~p0sZf`^^KGuf=wrjBxgj+!}-;e2yo*|zhhn{^A3yD_gdY&xwJy}PvY`Ag8^7$a>wn@}T=JQb-pBDaWYl|v7Rz2g_QN;Fd;ov5r z2rdC>;TA4x-TvT=WSbrq5eL_lw{h`hI0TkWmbn8`-+(>%e3u*-m=~XUxa`Ht{+eyC zuibWytG7_%mQ8EcU02Z+dLbvxZrV$lJ71vcf!-j|)&s1ua($By*#k<)3crW0;j8>D z{uR!k`$a$ZwJ({UB*66A3s@~^%)WmSHJ<@LdC_UL2AOhRlr8rktdHf#doQun@Y577 zk{)4wNT^C$Viv!KQ5R^vt7!!HfSf5W_+59DC258B6* zN#%N{y7?sjx6lD(Il)geo^XcCbm^?~K^49ga%}|WPJ?9~+W+sGbgFlmo5u2h|bsB%6VS76>rJ zsu`3PtZ-(IScJ#t4Vyb=*s2Upo0+v z?C#Ps9$Cm-k(FL2Y?}&#r;Ykf)Xbj3QpZa;&epKJ~D)jO0#P>cq=o|{8SnY z_m0ukJdY982H~o9&!$mX8PF#+`5>>3C27LGG`DA6-)N&*a zG++TVORW{lSJnbe=BOYFfs0dmQ3E)`03>}Iz;~HRsokAnsrW^9C77gyEf6GRlo=Dl zv-!?OJKu+*k-1Fvio&2hPj-q+9x-lXkpO7|%?TO*#!El{%wbKFtjJAdvsOdwCZd-( z#cG!-QKHUScMYHD_-?xOh8K9Zz#-B_SfPF{bsLT7qPh^J`N^vkoAu-fwZO9Y^@ zsUI`X)H|U_+OC*g_^RYd4=cjTTD*fG%inN#bU^y`o+q-eCLvM{5)g*;D&loipSja4 z;z23N{YR?2&AjaU??eSvxiPb1;&r7{cL}dx&2$+$16c-P->i@`66LFuhni%sLuf2@ zN0@*JCN~?TA*G*=IX+l7%p-BWSgamKJIBsaZP$V!=~JyRmUwiDp9QX_=r|-ms?1A$ zHu&Z*n3n^ZjBZn0>2x1~2$_5($w2+A8=j{>ZkVCo$t{REA|9!u;j$Uenac;eUyT}} z0l0;L3hY=M+9!)c5K;>Pi$Hw>+=8GRz!*cQOOUGLlx)74^OSS1dC_%N%#)&>hfuE1 zo2q-L>5u37yJ4~0IAzMP)r}YE{2Ii+^1I|EL`<=`sNxn{IXYyu_JDDuRtn%1klEev za?lYuUmkW_MWOO3KW$On(gyiE$?u5P(kLLGV?@3UhFi zH-N8}1OOIsHLN4x*uA)=Jl>!Q(Hs?D2-e4NN_^COj5%PBj?C8#BN`Sd$vie%UZt5e zt&@WHyu-X>vOudnC;H6S&C4E>hDlF~k6j~a8rNSr7+_Bg`JSPnt-vlZqd}SCSSOE^ z|4u^R&o%P7MkI%0kJl9c*H)4r%qEuJttHahXc-2TD0%>>H6sfaE$4J1Di_Rf{w*#S z8hAvr=cm0dvP4sud_b?6Gj#JnRXVfS-3Y0(VQc}@L{K@L5@Os(*G{A)r#^D8G28+M zK8EmD!P3C|g%YxIIx>@V!fJ)fqpU2%IWN_C7kHH1SUURbrV{ad0LZrRab^^8Go$)6TCJ4 ziXoeW{g=>0vsgfn*vESg0JO$-hBW{6J<6F}>R&MuqfT$sl1&N?Qln(zMJ7RGL*cw5 z6D&ycVV|KJq;d}l>=TZpN}6kBQLCvmEpiY%XW&Vph%xk}&_GGJFfl-j_`AypB)wvc zF(@rIASwzA85ten3c)Mw58AHR_1#_?oWvhSlR(ag6fPPnv(q^eozlX8%zPlH@%zF< z&>ESaF82;-U3Z5Vn==+cdTtxukBb|##JmMq$f+*F6bYY1@l~>IxPPx z5B1DcY~~RxR`xsXW_wKW0%fSlW}jFzOld?qm20m{c#>_FrvrLC*6>6kP@xtx~*1}o1mmR zn0zFc8l}M;qs>XbPg-r{EQztyZD|e-D}AIN<1ry0?pYpp zLU;|DslGrWRsxn zt~S;PSH^GMY0%M?f%c`T@C?6!=Tl_zKL3Tm{9(4PXwj3WQ0>G9e00kXDdceSX!Fb8 zp|V;NMVu4N8*nrehe;%fb6U9!{2$Gpzi8G*<~2$kU0hgc3zh8<-pAj-L?M^VDRAmo z9rUl+^S^JS2lvjh9|WGL0&%ECx5OY=YT2g)d$ztRwAa>eje*mCQlG6auMKl>b(cAY zzqs8|plP&6O=pNiQE474sJ^@!F+|t#bVXGXVfsLxmn(P{z0Ev)xZmc6lNJU7&f`JL z?;bzViIIVa&F8PppQ51-Ib)QwWxci=JPd&}%)<&$X4%u`J!m;J;n}$(cN2f1n`Z3= z`Ifht`_W&b);r*%a!Jqkd^G%KtGhK}=TV$W{Vrbz{bRCQAHR(bCbz)|h6Fzh01F5Q z(-N?&(&|7UPJ{rNu=*8(Qmn%@ayko397{k}gL}aO_{e>CnM8JvLM- z<(}2=0agpfM$b#zL4rtvHvk18?D|^q8o_U}NaOdSD(wqFS z)X&3Uc`eZQ%`XBFnKfaS9xbRh#-vR5kSvU7?Ox;=>)0gMsAKvS^N4pR>ypIVZnX2% zGw7Yjawkm9(?`B;UJAoT*v!se!^@AqxF2F{I9M42J@a@k+m_&?T&uZ6MQ4Ku36fr& zUX-V%`H^@XxlQhJwxj8Os~P}{{CY8Nvbnvk-n`OuoW*#lZ~(~AxVTHScH4Xqrn_Q} zwkM5ru@8{#`JlV<>95M$k*E7tbfZ~+P~tLrCsMR;o31H>xY2Cqo%IXm(i&Qb2n*aRGhu`}XyW!p}c~Ep)*gFE@&Cuh%_H zYvs-mj zQ1Ct|OG`IT!=o6=b;_bY~RuB`C6}392N{spiB$g48j@BMiy)>HUBGEPtT%+>al6E z6<%adBi6V|WZS2dY_&O`ka;Aif6jc;eDYJ~Q*T?Q5Av$Hc!9jTKOmkV6F85P@0br| z1i#a8ay=r>3LCoKHvDuEx4_?F&ECv19tR1vZLAE(AHZE2!An$$8>k{~IpSW#QwR4N z^7_X(%dYYN_9643H`^8x%7tRL%XS*8c-w;$w?p6DEBitGFccbj+#~~fM zA)3**nRh}WT-MmThX7+c{V;dc=28D%&YPY7@?sZ#(OQL?p!x$sv^T6(SWb1T2M^iT zQ&| z$<7>V_&g37HkUbbq``jPYWM{sEvRi+HLuWlikT66cO@?2;Pd!eHdAbFa*~v}Slh+g zl{S%CKfWiGS~#I(#*-FOi=?tVfLUp{G$JXs5**=Sa4*T%i-ezELp?Z5ZTe!~)Q%JN z=3CE{%yI6ZX@8Dtr3Sw9!}p@OwhN_bpFa--BM#=wjY%4v+4r~bHWHFg7>7qAcU-%;N_O?R zeRKbCi-|!Y`aKeftjVJ+80&YCk=aE4p^XNmyRCF_Xh=2sINyVeHD~pQp{2YG3!M_MZektLN z@0gcqj+tGa21m_TJ1#9cviV@pdW&&?*Zf*ZD<(Hz3RfTh<+i_cXb{Yk>w*rctYUT7 zJ&b^Uh;)>CCk6^F;0&C4&9q8(83h)s$ZuU$vF5-5Xtkq)kMYj96brMo!pDJ9IT`=Y z=2>)W+I6~tv}trU`Wt&@op!HCLx;v!hk9#R{*LLL!R~m=@opTQ+#)aKO-M~5&x%|y zHB71H>nP`teE6ZYOgRiV&)!92LfWn%(!=y;%!@FehsNpb-0KkN#mqh2nZHgFFE~Ed zW;)lB>9rd_4>2t;6WZ}1nmM`=?jjIM;@mL~)<*kCvb03hz;V{3mnm=Mzp+=+@(^wK z5WdZ~n0L=G1}20Tpe-j*a|HaB8TdVxhh`>vC-!h)uN{a3EGl6R@FZMWPXwP4KDE7q zXMGx^a(o?fkLlXCmapNnN}pdLmy<&LFw%>rJ9`z%% z_k`A)IeBynt9ikb&f#t=kC+Lc%)6T%dQ|%~D)qg4g24&ZTM=jp&FU~UMK9>IiD3BA zb)2=ZC5PU5XV9V6Jfow9)j-rm?=Oj)NTxtZVC4WWCHMg+mJTPvjy)1GZeB5krw#~I z{8eMLEcHc$2)XnpXUxYjM;O1CF^?2uHIL`X(I?JVx|el3MXz|wJV0CQ!=oZ3&pW60 z+k~`VD*gQK`o~uHA0)(tV=Z<*0>7^EeUukb^*&hY={&!r>m+CRzuH9eG$`YTC# zqVFWb9uB%?vM66B$t&MKFWbF?AJl-nY*lI_&zo!%pW%m$-*~QDl6Ba{0oWv+j}&Mt z8D+gRQ2ZqoZ!Vc7brJTIg@LSj=iqVcBq|eYSU;>cg29H9bW{*ycx8naXSFj*sjk`s zj+!G6F#JJ!F$u2hdK3PrMqPaN8|GbT``NyxwrBaDGX+f2CdBPTy%`TBynSvPS|(FF z{Z}aXOVEM#3G&&Qp}|Th27JFtHmee>O1#;pgF`_B1P6~=7|tL%0HR)qQk#PIfEmpK z`FH{~1LrgvM9k~z6hrPD8MSV<+#R!rh;n*u33CHw*mA+x@tU27kJ!78BV*NjC-p3ta z>{;xX_b^i66>+l#8Gma{l;G=tIxQGT0|g;lUA#8p$F48*cb zdafdV@$^%2qZ3V`lQDkLD@ZFZx<;3=0$pJPV$H6d3>}u+$_}LrG8sz)GOh^UqD#@7(5{ z=>CtA*`Q{l%luiEjMgAwTx{lL%T3RDOHZ4pyYlB?iT%sO_sEF@0cTmcd%=E#w43c_ z@eT8Q9OsSdLP+O)Q=I0D4&mm02I{cdp(Odg3&feY4a@J_A9ENX(7gR!+N0@NxqNIhVfa)o`5W3T}Il{I^F z;S|ocjLjvb9FOBkG%csPN~?BK<2^nMbU6^*49{Ys0TOL;~EB9utSdB2D{7;L6}%^v)x zW^+E}PY{hq<7}uDqT92`PGkZU+2R8Mbx+?pUq$Bz4m*>B?hp(P{)mXIo{8`EIY z0bMq=`^l`u(;OXU%1Q%BftB_+#CuWwMwAoC^`usZp}X-LCN1lrNqEYOm;Oyc{Ft;0 zH%yp(+e-7!mc>ozziRG53W(g0t&T^cKiEO}x8*gUk9pJdIb|CH;lBxn5~9ie^kaX< z$4OF-zBeG?W_^arLsPGv`)C&SsHhHnfPe!W>3BvrC0G#k9h?}Hya}>&X?+X|q0|Fm zG39&-K0#kqJ@y(#B;9pq&~3xgSp(-i_ah}EV1~FX27E`n=FKtnQM}1gj6kY&d-+gGslz<-ai3(KFVB6?UT?WD14%=-`CW{0oxno=Yspl8TG_N3)%DsYj&> zwcS^?Gf(w{G3{OMq;=2PPtQMnaXHsE#JnS{IK|CW#USCmYyHKyNWlVbsl#&9G^zx9 zjlT(q;C&k<8`OeSXtO+eO^`s?c`#1K?5G52Ke6O3&fy=M0J+9&?eRyK=dx^+y=W_o?pr%u&{-a7FyF#%c~WgDQVLR=%%bO*P(sX z&m7+_mAJ+t!Gd}fx+d^ohVyi9!B@XdUx3iV#p4!Xn||uvMe{uNX}n?HMwb%bzmK&$ zWlr`ti(sSd9!+vLIGRqxLpd9O<1%0Og^;#-^M~$MZhh~0+)d1hrRCm0t`_{XWJfsU zmNLfzb(4%sE@0$o!pN4@xdAEqPG{ac^Fi}zkp*U2UF)iz0zE#XJo%dy0yWe%8dzf~ zNuqo(B=)$SMP?Y_sk9=&@`OGY89aBJ~6&J#tUH)Z1Yl7TGiP({!^g z#n`Ot1#@nl7NyEe@+&t+a=ge;s>ZmvXRsb$Y`U#z_bj6~V}>Eo8m+a?G=SFo?!x1T z^L>@*-)oDY34IAWi+w1C!{^N-rPEEE!YSF0KZ zLHR?xY!Oija$O@>IgG#thdMX8PWhGjCF=3rh*74Gu?$6K1zno0hZ~Gwr!c~N?O6zz~bF{`+|FD%*h9&nL-MnKUticgPP&k0wE2ibap@1xj-mYk@ zKy#AJla!d8ri_KJ;x!S30xJtA9zR6t3mon6d{Y%U^ zh6q8ychTKmLb#pfv4M~69elAhl#ov(4QS|tq!#A17(j73>8R?l{GYL*6ylNxeFt6W z_yME`ylSCg{X)AsKpE+A6LJ9OwIXj)t`nNZplCbJ2(#3Q+8;F^U6%WjpF3C0FY`AZ zei%7xc)a#4L*w|!Z|39kAx+NcbcXw*(KBx|cN2TvUjtte6d?=huSgUX%ox>uc#*ZixR1L^OLZO|6*UhlKVve~kesdyH^aX1+ zvl#WuamKR5ea5nzn1)@<{5>~dl;R5gkjE`e7LKF&U7BUIhyew$ z)jra6oe?+);m3Nk^;;dQ%%zAvb03`&sgDTx#fM0@qzC{NXNkBnmHE+Nj&L<*S>MN* zig8N_An7m@W6*N)LRR!9;@V%%+(oF^xWj$YFZhf1!P-eXKY1DZHzwvxn#V&-$YCX^ zvPL%j4Zf=%Aer`9y!{%}75FP>4_H@BJNXd_C4%RgXm;HlIGy`3Fc{eHSAM6wMZ<>&(W^nKc(M|r!t zfVSTxj-ySZ&$U*f%IB*N%!=_UtLX9pS02!YR@2`2i~w}2@Sz|XaEhhA4Z`~T#s}Jnv^PsA-S!To+h zDp$F2Azn8O6IvLm3BpFyk0dQCo#K5<=@aO7#^A*6`6xU5S^C_iX(K;&2jNEIcri_?xalPH zBp|ih95X-3@C5b#OLGvnPt}gM6nIly)BQWmrDcXZN=8Ww7R?p6OH|!v&7VN=|FcR^ zp`}CKjQ~rYwMJa*q^p$39}I5vefC5ZU=8*UfQ5JN#~5$6>K6h1Pll>-aL69LU}u-RCf6$|>A2(aniRZb}mb zP04c1lg)&*Bet>Nf*+J*1Brd4p zX^?MPu!mw|p={1!+d~@8+>m6kI{RLoyI;R4U#veEgn=y{H4`47$O6wg3yqc*%1S6? z!FlkXu?5TBL#*g=Jn~DK;}~`^lS|^c)R`hLPOxBi@w^Oae(sY9 zbHzX3!;iw9D~(pWzk1f3TPpK#XkLu7c5&n?rtT^}5b_jS$Zqo2(07#S@gL}2qMWt; zx?8Vq@!%${FuA$T_1P)QS;CJsyG8>G$IVlKB(UtGvS7fQPeUAMD*};Eh96}8EK9sHHuwIw>Q3lU7#L-17j*gq3|4s8wwT$hg zhwsLVttlTP~~myH9TA%E(3>wf4@EJ2}Wd#b(gm_;aRe(cDAAc zdT_92`rXP%I{PD>VdZbF3jtzT3QkMn)j)XB4$Xt#V1V}oe(KYWsX;=rlf37^(=TT~ z|KB;)UGkm0={eWT9nJ}E=Ibo(*x4r@`~oGQ#rFLgKA&A;eS0(hT|?LV4I&4)=s+6# zp9U7vVgNdw-!DpkD0Tm%S$H z12&&t(k@679rE$AVMLuKNj>~D47rmuwm@P3DRb1{L8|R>i)D|_T@F){2n8~`t5C+6 zR@w7L~C&n`e==d;Tzr ze-fza%5xuCIQmkoq`h`F$l6UxYkSRJ6m^j6wUk!gJ2?kz5bA!SMJriF%eb>e6eHB2 za%6>H?Fke5Y6@qgy2a9p7@l{9QWF$~cB4fmetV7h z9WEKhc(O5b8W+MRNJXIx1rK+WHdd1MqX-23FqK*P3RIi<|4Q8zo*>B$jo}VMXw`vU zNR%bqN>_EwlVKLBh>7qy88$>?PxFC)*BktSd2fnW^w1l;GpJtZckwywTWe`x!(#c_ zxQhB1E#alu`LSB5Qg{g~iz#7?$86&g)VxM?9N=p#mKd`|msa8j2;enLSN@vs7dLQ$ zZ1AIq(83olv01N~OK*o}%7^@JzK}-?jX7#T&04EV0cjZg#-ExOz)^Pk60Q{*m^C+O zPuc}2DNbk2m-(%lv^jobg)SD&yferLIYYFH_6CHA{H&+Cs{&XNksg{29xAP()iDkP zp4Jl>fI`qIXJT4Y1mq#$Ykk|UuOgo!5H9(|S#E-#)5_S6({ZxyI{h28X@JD}Gssn1 ziIqsBpENfDLRN9S>V-?R^v3z_F)@{T4(dR$QNM{q+C_E!EqWRyMf3DIl#wYmd5E6q zNyhK{jhv=@n#7u6k5fiTdwPbfYljL`>U`B!n}J;7edUBG|MVU_GMHUeX+hC1E0?UO z0?ev9IMQ+oqDoKv0y`q^`nLd`?Occ|-ir9>4Kvr{16KF zEvW484d%@Oc7(DqmM{ktp(oV~t0Bt94azpSLNTC#;qLP+V=lV*#7*9h;!i$b&da*p=qWOIGmeERb?!KFygo}*;0 zQ^d0kdqWm5KWC&(V>gk;naC9s)4Pw(yo;C24&&1q!%3IFlb= zT!#{@S5~ylTGs1ZukQHZ>E_O09j;Zq;sdQUsF>*4q6p|G)gK%+&*7Z+52-v=saA?q zQhBN9y^@h#vs$d-sq(pasEbKbh zZU9kTChiFbXf?IGwal(zg_v1N*1jz5yBxE^HXBbT?A6tbJSI0Utto;}MO+RtAco0g z{BhJ4{$KbYL{1|!N|ZL#;f9;4`J0NY6i7Yr8-QY#Zjq@E5JjI7 z)F9IaT&6JieYP^X!Z_WAKRCpMPt(|d628co=yt@&a%bti4cOLG-ZOI z+GBci9zDldn~aDro_k6e{JCefGhigO7=q_u^gB_LGz&cAu}e}F71mZK{C}}P_t_gC zgm#}1?m(Oc8jxoq;+Ckl8)A(qxPgBlQ3#DJriIG`LJF&}oP@kTjSwvQLcPZl{Hh3> zDg$Ri@{AXrFpM8*4;pE^Gw7umdMd0S|9Ra$H^T`be4f`v=~8zX#olt%YO;%(Z}TA6V4qex0o?Q+^GD34B!PkgR@AT|vuc`OGtbc`Eu+N}m5Sjy3Gsx~ zinnIKyDN*e<+O7*9+V;&t3Cb=_RaU{bof#8@p=bgTQ3Q5S#@Y!4Rp_z9<(Lu#g9Fv zTn?cCAwPmnzx5bY_IvF5iw5*HmKF}MGcGL^aoURI2ppYfoN5t_2+32sfCV3Kbl?R*mWG260J&R-bu7va=n30P?z8G=# zNj_6Ag;-N1DVBUoEh2}rr*XvkvHYyi1nRD)5nuPom~wq@Go;b97rq6>bHS%i9IcI_ z!FDiLFz0KTp}H}$e6bO1K*rt^nE#%kZ;o->=nHg!BjnKXnf$;+jFPl9&+iiIq=WVo z3q`YNrB{Yb%FZ|gM)B4dO0*YuMvhsP%=}dbN~(=tgS5gt`h~$D9;~Mw^S-p0yL6I7 zqh@xTWD-QCyS{58IGX51zCW6C&@@T@n1^%*gwWby${dj-X{fP}Hzc`+Qm1px_F^3M z*Be=ny6B$UWa2ehK+JT2wptZ8kF-IdX5W!l{a|Xt7RG8-cUP>*T9QCNAPxaJBkgKZ zTFZf_3NEs&!4*0UyYU+=+qIb7T$S&ro)7U@-^I${G4VQ8-I*t?9Ys6SX=1HzfZZ#>DYq zuN)05B$L|Rz|!(i{TcPAT-6Zdsh`p!E$p2Q^p4FX787}}cp`aukA?&cscXWRklGo! zHG8J_g7*_GG;TL}ftFCzog#cb&hRVp2&L|QoQ<9-xSuD!<~7stofx_KMn7FViR*)} zJya0jho~vNTQ7qRHgcw3Sl|qO@bh z4A@*>&Yh$|Gnz);Y7`4CtYQ#}du|DSqh%7~cF;6O%pxNaP+R%+Oq>F8-MlR>U8k&s zWd*g|!W~Gn_!)?ZEPH`6_)!SG9e14JY$>+94q(be>uyjJ?CdZa@A*c=JClemR=L}z zC#KIJK1_`jwpSS7LdGJA6oM}>$18G^A`9t!$RG2ZT@u;~q|ek) zIzZ5+kyV%RuQ(~wlfh1kM3RQ1oN-xet3*qCVwH6t5278$eloRUy6`5V-P+n^Zwlrj` z^dh=MzBi4UadlZ$ysJv?Be$mmd34nBf?s!237WMN+OYD+ngyXZs<50;&BtM^{`$gF zD_+`#qCQAF8oX7o0BKesUJHx7lvw*A>a1=uDBq*YOBPIP_N_q@%+uqY7SeYh#-%T< z80WAbG0N&>l8?GsYiunfjbBja@f3zc0xCyMp%+6hE>PVj*V1!NA4s-&JddZj9Iv%m z;`n=X`)7CpnQihSKM9XBTB%E`SLLWAd9Q^G(>o0qv&mlaEXQFndBC?8U$f2C zYI>!8N9c+4F`oH9xndUjJLU?CfxL3Rij30ClRM4+a12!h+Z_;&!iW{*HKmtZ3#^SIh5KB)3io(6cdCfUmcjL9lYlYt9<_sxQKHm56 zym`dE!G@W}3#^ylCiJwIkKFwgSub)` z39@L03?W31dXtw1A&6%>q(z3X1IO@zfuzuQ0#2k))aw3>V89d?Bm0EUskE+>RLA3^ zaF2Klo+Hr;t>&`1=23FyKVi1>%`|M`lAuIB?~@(8<0b=_vGf!@`5Ux3)CaUJHyiQD zbLj#$Fu9-6AlQ0M^U1@qY+BwaIPSY&z`*=m=@`HA)O!4t7iHn%6!J`}HT~b^vjs>~2|igOQI|mfEhRJGi41i`+yEST8|#$uzsizpIMn3sw-fRQVK>o^p_hEC6ts1eUDqr*#8;&3$~PYqW&<0 zc9)~Oc@K~=cJgzo70_^iI}kSy=3Rz$MeKFo{72@4gTcuw!W@ONq6$GT-MmGv-J{&# z({}#?f_gbwUqA|h4?ZbH7huE^1Q%HGbW28A(4hz3u(TsgajkGBPUA>;f^Ik%qhzS% zeL_3z4IH5qO1u79=(3|4N>~CRNkVx{;3x@*d?d*(o10u9Ia;x4kU)ovujR0P7YK8O zm+?L##6qv5(Wkofu3?l7Gc3O6o9No7uFy^jE^0>VG{-&&_hH{K2@oy}l8&-DDCc~I zoj)}Xp?F1$MO+Lh`Yh=szt160q5cX#Y>vPdGnLS3g+^h+xX`ZabYXlWS+DOw7%uH#)73V#xRd<{@Y`=F( zUOWjfR~gcVKX8-7f5uld$t6K!vy>(Uf?^%BM>Q%la{JwUVqWZJ@wL-Q&?q{2wA8hE zq~(Uv6+Gt08&~3e_yqk9m>D#Pm@;$L&sG)LJji$ZK3IAqG0rC?@2guRcJl}?jR+8q z6FP23;4LJAOXvv#1A#U2YD$GW`A*PVRv+NzsR^`{1sHWS-h7C@+~8%2lF+_Kzo28* zbtd;&g}O)FH(`9wA|)`{ViGOmpIj(##uLqO9FZIUmseKI${*%9-lP}Grd+ZLP7rPw zhRjI7`zf`cD%hqq9wLlZUOZanN&MT{9)Ow+yQ31H`z<$IxaZ7tAu$ktXz!$76XE z?`*p{z@=LdpKOd;YAr?ljtC+Z)ol_?7Gzt(TR3;T6VjwG6EG*=)le!$bi71-5lX_L zqm6Y8CSy$Bd&za0kcUYR7svf`I-2um*$BzF0lm3tFH}&T%Ut4lb9sHx!0p{^le#pb z*%zr@=%APjS+|?{9TH6w)|DIo(pLIub z=1udYm-z*g@1P}WerLIkbQof#I!Ldx1b`k!idqXGtR^hMM4TH%B?>9{3x(1Hbww!G z5=^vPAR@%|1N=S*1dZUR22ogY&R#cr{^A;SvqzdZc&?yicyj@hah^)jGx2*ONY~v_ zi*@$0h^WebU9$YBMIK^{2ziFNpP32(!v`^mb8B4h?<17=j!+pJU%;lY~S_E9NQ1qq;1Js=MPSbUMnFL1ab*qV!x{50{e%fi4Lks`Pi!HV}mq#-@R_S?LMwi z+`Ms-&nI|RT{D?mUH4lP8hONwxl9_%WOCt(LDC%`=8<;-LX^iBQ*p#hG6ArG-djw4Pi@aAl*M#j!{NstaXph$W-9wiukbi`NLzW#yj&-jnE-;mH`1?X*pOb7)EOoK?>^Hy3qD%e>rp>XS8DQLX_LN+#$6~6j^J3lN_9(0L#N`<8YkSPQJk#KxwKx0k`dl=EIP&7 z^E_FPymeyfNA{v^g6^##nD+7A5vklw)AnXsw7lR~(zzWFk81#JWP@FuMz#>P@6Rvi z#ljxV>XLW~dDf(r4t+B-dT+1;49WaWO8Upp<{B}#LP=Qm56nybJl?;P5_me(At~a8 zHr$E*iw%I}O4IyOifM)lta_R{uXh7Kn0%$uBakLlH3g@G5^U?iYhe&{>8Yl7orQy{ zftKVzN9Aht2MMAdD(HLWI7xEC8T#&dWQF>r?kgiy6K#nF?B>q8v%E-dQ;DZH-Z8&v z)^US4&I2T7?$WQEiY|vLIQ5OWB>&bwMPN&(LO1K9KcQ3byWL@;;J3{Ci)1)GNALcZ z*kO+$1zg!VM2^(PYXe1ggW^HW6@NSNE! zrbtaMYl5rkZzf+kYr%$=te^l-V@cNfC7;tFA0EryHI1gFrO^_K=E2*#ZpVW~g9e-&H|OJkx(xY9&zXEs7IBZM63L%H4e}%Mbwh@UM@+B4WG_hlAb!*6q^HR!YaNz(tDO7%wSXvx3f*Z z2-d<`k-yKOJSs()()BN7RgRcr%yqPHpmUKX6nVoA7E``jkbz6@16L{MbVgWAda6{v z+JJLGF~cNy;9m9`lv0`OOFvWgbRvfom2Nu7NUUxqkagD_r2{D<@4PpGz_Tn*|ajh{a9uI7K z!CdT>QFjMzi0l`1ioeA#RKQu=aOMwr!)`}k1&YPmqEyQZu)Oswf_Z6%lc~imt1=Nm zgJk=^swNt9gtvIuTSmI2OAF1gQwF#Sv5pdX$F}@o$BQ~dC=Ycpr@~m(%2e`dETd9D z-mq#`-?C=bzViF#r9qM`KMQu9UWZPr3}Bll37K>)xb+zmUQDPcr-e>0=rXwQmk@|YWvLoOE(GNXpmcGf`x9AH{ zfqYV0@IjX4bbgO#G#Cnn_B?5POT@%wF|V@iIvqMCZgFQa1@vV3u$6X zW}9p(HFqj_$dQLh0YbeXQOa-0?m~LH%PjALy9!R_ z{74F~OELmBsD^%C2Eo_Ue398PwAUHnv}foi?Vsri42J2ywi*>>c=WQl%zyLMt2BEa z^R>z`5HrgP9+>uu&Txv|s6NA4CV4{7sCXtThOv1Trp@>r1pOsO-> z2Jba5pu1i=L$u&4tjdnA#oKRfe9gF>;NQB${(NJ$LxTsQ!}8+{x8Q7I@iwm5NXlC5 zac;H~9}scHDIUUISyf0t`{D}7A@iqLP0>H!dX~V@p82*JQ(i+#BI1t`yi|7^XQAsa zdj3hq{8e@<)I4>G&=NC9K18eC{OSq%h1G?sa?3@uW4hsLcC|@Kp>heiIU)9__c$_%WMqS*E+4bQ zcY8Qx838*yivO|YcwhOI9H%dPMy)tsgJEU4HlPAXO94tcQY0=;m$E!&w$*A#Ih!HT z_2(U$j(Xnq4YVnup9Fkic9bOPN&2~)R0npg&0NITyRYcGBvG zqCVu~ExHr7z!x+Gx_Fx0q9=qPXY6|xm+ZI)IOU{hjlN_tV+`@X;wt_6SIk#_i8ebg zKsy@ZJ>_}I^S$PG%vU~ZKKmkcwa@F5Jkx`H?mkjLzy4?D1C$R%r_N#7Q)xnLlYx2q zlDV`6-|(NHNc}tl;3uI`T9n5uT1(6hPjc4XeC-xX@ zn?-{H-zEBU-3R0Qcxs=gj`TwZ_+iOs;#|-Ip9ta>X6#F0(()CE6gs(x-?eq7=K)C6 zTUCul{hpZ@LNuO>avDiV1B?8Pi+BPUDxe?cvLV_bTQ%)NW#&li(ZIW}H;&<1p=2Ah z;u|8FCuCqs610eYC%D%9Xw5gP(TbHfee4J&LMMaeXxRhTKg%cJniZl)jf`FziTTxQ zomIPKu1L(YE4R>=FyBeLl2p_DmKNFnvd9}d_%CpNOW7-rZ=@L0In;cq!@OrD9R;&;gR3cjt&$D$(fN#sQ!YIh+60olK>}H}9{}a888*{Xa z+Q;$bc%xJy09@brSxhjB8so-@B*w6b{LbU3Ll4P#cPOX8HngeMjLV3$bNE}n4yT7f zQfvkcPj~2U$AB4-4j-eMY*j@_C816V4dEUd?GiV44uGC*m_1AZi)u9Oavvqu7#=j-9N+=UX1h=5R z4R{E+0w=ryy$PoS9gIbtyd?}p7E$HYqLxpV{~uXz9wy0E9r)hZ_l%5OA~Gv8D=TZs ztg5cA?&|8!=q~l9UesD!8v-ODj1WeE5khR1j0Lg)BS1#%+Ws5 z&mZ$jjZYhcXnn)Mn*>7d+s^sp8fFTMqE&q=Tx^* z$6#j}SEuW0kkMn!Hs-K9(G){Whb{`lD1go)>&V1eF(`I{QcDz=VYFyM;Ku8SX*8=A zsTkS?``&&ZZYcf>LwErwC!N*b8@4y31tENs7+lRs6bB2$<2Uvn@=CQs3!%4-7j-HA)r_XbR^2i~0^E zC3QBcoOY>4@^AJ40hz|43J@9?0v6uNACCi`92G+9Iq=j#mk;#?z;1e$8PaAb7&*&? zI}rYG3L*HH5dNj{=sEycVIH|U3sK+@>D#vPJ%NfcqH6R;32RA3FR+O zPvFCI7ZP%w|3HOT{_I|-&vD`u(+lm|LX7tg1sxiE7JJwhBSr@1vmA8KG2j&H0jZ9X zt6Sd2LN?j$&hunD!JNi>o=4<8&)2+9-IsZdBPR_!P{B<&Qm+*%<3CBe`tiOH-^7dQ z-2yWTI3$ip{v*9np^k&5fRqR9PCszKCrA?is{WWEtpEi!Pd)#_Ew!MZPbMzYo_cz_ z&}qlz^sy>i8ceq8QA4FIW8VUtG@dmvv9F7hm zUF<8LId1xO0v=GqsnYg8)aO|neqY15`gP6W_}Pbha1rn0e5IgD2hQ+CqRHy2HFMsQTsp!2c}Gj*6qH+9yF@3xu{!4`@Y&7fEaJxs>Bl9{xAz+S}XBW-EFt1d1 zN;3|7MSUCwM`t6pLEo?UizYH>f8WK$*>q{IqJ z}B+ls=`SmJq&T2V{86vo3`h0q0>Hqdr(Xw=#seWB;(>s}ihdN`nLpi`%;!?Dh* zuLa)B!;9}dKaQiphTE<;l9*s|?CV({$i4ATc(Sh0mt($Oo)H+VESg*C~ej~X8 ztCfvy*fS471N^LNuun;TlGLQ&-)!!zVh$@)7-H?eVgQ6*h#18c@@JSKk6(x7lrHW4>(EGGe_H0{&er2h;W{ zK!JOF?u{Fah_r6Nz{sDDPDk*4-Dqa6>t!1Yh@#GIakxr1tY^+OlbjT&sO7wM5aol~ z9eo5b#5wA;rd#0BRgBzN@XZliUQ@@DMsU)4wzimc=2IdPqprW+PUoqSXQ~$1CfR?| zt3i+cCqX{LpV{y$Knu(Zm~IQl4)s1+U>Wk$+2HqKh0H0U)NlsJ2&qh?D}(qLaWuyf z0q#`q=>tJ@M5IIUakW{SHO6QRLj%%K`7w2>NQ3kM=i3(~pw)(3Rrs(U`0j8M#;Aoo ze*MQrHX9hctU8)ugV;DHu3!)3T?nSU5OI8)Wkg#H<}&02YvCA$Sm#c8Sve;y>l{ij zY|^7{UGfDEo%G#lG+D#TU|79%;zvKPsIz<<){A}Mt}%+uO_r>A=)f>cnj7rJXE6c! zgH5_Akt0FQky!i1H;j}f)l4xTtJ;tLO6Nj}HqLy6P?^)-h-Y{X-T-v)XQF2`5#A&d z*%_rc2YqjyhQ1NhS(9e2L{v76cFkGX7~9mdyv9$?7)z9GzxytA*VnQR#q+RPWDB&z zBBg;afGz4)IhZL9lZDtjqpt4Nqt;>0H}*4A(W9k=~92 zVl}{@gneG*G9dxHyi6GM6buK?A9xZSt&=UJ83Nbmo0(ZpjsE#A%JRveb|RNVG;+9- ztqw&;ZD(yKErXqXYGMw@YSDZa4!KVFMW8-kM{=b`5k3!hDKNL#(7T%laTL=CI8Zx; zm;|FEP^jf>v(Aweh$qJwBj^RH`EbM`Gs{z>-Zba0po@BDu{T}Ye2C9(R?Qno3ftuIklKL>s!?PMYPYXd z*Z1mS{VAATqzEu05Y8dpftCR~u&opsVPn8mhmUEV#*fc-q~g*B#ue27k-Fp?;15^H z1}2XR{8|j*T>kDStE+k|vA4G1MOWH3IU2(#^lNjS9raVl21dUI8@qCjb`xe?FVJu8 zo+e%6X19JGqdsjMPzr?QrN2%48%eu;`iE@L&Hll7DjdlJ4CCFIDZ z6eFZ=s9M5-L21&6o{jj1=G1H82S$`MG1z0x3%sTF8l>T0#KUBq3E5vhnqVfym4=2l zR_z8klt|uwgRMXkT6a`hBhfl|9f}XCkLcVzq7DsGMws7VU0vylf5$v4+(@bn2rvFK zMj_mIn@virS3fpU*DGXwg=5TCTz|}*WY$7y%v}JbFX1xKqS%9)%lQdk=XK)VM!kh4 zL^FpP3>2f5vdFk-S1`$hFa>0QB6ELAtZKMjmu9JhQz~0=5d}bRa_iS0i<`PDW$%(mEh z;Fs=BRwvd6K95f9haE&(cZ~)jMhT4rXe}N6tNJz&dNOqLbb$~5n3Ki|nLJOS0U)Gl z0|vB9NF|V{uFZ=IP#RHY5(U7y>{38Dk?Wf<*BZ>ye7n%9lT<{*L%m6@P&$Jyx zIk=$u*zIE{O8hu>oHccHA@+zmy+EyUu@@st*+dWMYp+p~207=O`ytKdS#=ufE4DF~ zG)@E5N`E8H;Ya_7MD;D+s-+IJpcw3c~-a93*%Kk2Ew|3j9_;q zkJ}J%Z&Rmv9HA{q6x~7yCLI=x;rS>CUVBH8H}8?0c}bF#h(CG7O-g8Vv_^GCq)21C zS!-h0Oov@Y6aMI5pqxJh-bi=_43meDzF-AEE^JU^2!s01oAhR&?v35o^l#qS{!hoH zPCIDaInbzYoNRA(C_JW(Sk?=VX6~s6D8Wr7mitdi2be(T8T<*`48e>7QGQ9I+wO08 zieE4oH&)Exnl*F-oDid)yFfwzJUbYl zUbz@i#I!t^T1O7yBe2e|MXknx#X5~HQM8!63hyAE$Xs1BY%2V-qx=B5;#Re0k0Y0_f=RvS#H=iLCAie&gsG3aDqbM~&>@Yv)$#Nq>#Jj=xlIZRd8_nDeI8 zi19;byb?P5PaN6sqlJ_HJ4BZj-CX3~Kf?$vSRe*9*^;DYJY1P~duX7K_XafniaHhE zVuZ#umUjg5zN;YKk9JCNeJhU%Tc*%aaaSj6hpppL6uw9b_-xJ>R+iafP$+3Kp3yQR zUOMRzm`Yq8%?l~OcXC*3VAPbI<)g>c zm(`XOF(*&X=(w~KG?u6sOI1;#Sn9v5etD?=f&!e9t5%TG;!;0m5z{;TuQ666rx7*v zFrQtJ3v8skztO89BiLfdz(*J{KYAIfDl2libox>xIFKtfCcOaVqN@u&!C1(o!^rV} z!9K;1RcUh!U{yV~RSZzG9J4jD?<-d4hs7rw;+hb?>LYsgkx7Jo&nPH>q9*NHKA5cb0-VqJ#_VL$%37F* z+kL6vjH2&gJ@`I4{WqbyIgEYVS`V1vF~DSWKvu>eqnM#w_1-NQ_8txv@|_t1yo6#o z1)F?QqjS|?t4E856Vh4>y3bx;>jgxI*lx=w3)P8-gQULIA{^YcajxSz-VV42CBUFne5VfN=mnxJbjk+~A{ zEgrgM7Dg~+kBjEaM~1Ei>DeUol=XQ%kvr8RK;yLf9-QdO2jgfs>`>W<+6D7&xYDO= zsK41O4o;T+Y&154;KMoeKv^Lk54nI?R7R_x z72?m(2@;s5Yw9gf#&@qq+`s&BV^W{?!rFnKaigVXJz84n9H%(u8$j8|(E%5+!;j>N zYinPWP?8YSo<&|zEy)QCCk7a7_#v>~?T=c?fD*-b8PpjR>p$ZlGFtgJDday-8Ly0A z-g=iIz9xW;11cmh0`Ze+M-8-A*opXO|628jfJXX!odOyw9T8IEv|bdo+$mb3@v~Qb z5AOIK^=4)_*`?c3Q>RAyJ@us+Yx))R(n!xW9Pcr6jcyfZmxa=I&x&GyvhAz862v?MeBvan+H2YGk(4Z!IEYQ>~FOAXb9dvDjkF z#(;R<5Jd`BWF(Y_#aNe$_(YQqD>9vqNvetz#tR5UsBvCGRH2+69(7zvH4E4D1Xn9P z--F@Er52L}j5L_L<+SNVXPOcHGwgJCmyl{3qNVI@0s?n=%7W=7kaZJ86-kM+yXY%o z0^qI$MS(k)TzaWQ2$t!k{@C&+03q}asaq`!ae&!)zB*nzTJt+OBD7B+oiQgxg@oL> z@&wwcyG6DrrGo-%qafzYHcnGL(6~iSX{TtiM0W56S0yAbGX32MDjlugr78*%8bz3% zDoQUdOA>!X7&IHJZEO>sH=nf8Y*Qx@od`v)LntsWR81E#k?2%3IgyH_*F+VCApWD< zgo<;$S55^hHFW}?qT~U5DlP+@1XdNQ@AA>vU%*vB+a6E;Pvo!A`MCvhX$QnhWE7SX zN2_xs%EA_`o=349d221mS)PrRAR2d;`RrOA5=?teokX8lgXrZkmQx`@4Vwyc1Y{;Q)SeAS0K{iwQm{0YKCr2E6vnOav zG$F*#ijNkV96_b*ey7#f&cX9tGQNdOi0UFaj%X1t>lS9zPoN>M<$gfa)-iE96OA8N zsS_hAb59mrBR)uTkX!t4e~lU?E{JfRWa#t!J;SxqT3sH0fJqdOo^9nWZL|BXHz>IDXdC{v$S0H&5chOj1RlgEN?Ar(=KM6U6MnRB!hToRa-9SQ z-lIBAi&_-efn>iQ&@tw(k-8u!0do%T&js)UY_QH1hQH#f*Q)$4)K`b96`JY0)V~)! zZjA5wFVI7(s+%GQO$C%Jk-h_VEX^wg=s>&>@Uu3U!KU}Cm_i2Z$b{#ZM@%;%o-e_m z)Thc9Kz+Mfmmrn7(^&RDgzkz+;|4AD!9LA4+5FaOK{{CVL-#86rJue|)#+r}IjL?T z=+98gNG|_H{Q;s=H4|C-YA%(`0y5v8=uX%KM9sH*rDAM!%KV zMiI3W+_r&a#49XdY_jaR6f}(H2>4}%{*(ImHL}Tas+_z{{d}_6CibvRbt24hb|&_a zB2H2=S}`GXl9VuVH#kvgPT$k|`K6BBTAD1U#SD&u(y|&LD$AkKmIdNa<2s-$_e0~< zZq&e(=xd0`}Uy z@q#)(BFNW>POI?rQfLoPBRI{96{DR-I@aeH@ zauJ6IPvh7A4$pHC`v`P3d~!?g;c!{4oF1vsnMJjD4}Y)Z^S3ivQQ=yIL(wxA<7r|c zeM%ANfhJU;?fp!Z|GW@!4!-{Fp1xBsa=`_$*2n}4CD@V8q_UHl&LpIAob6y=w_H1RuLsBBS=K4-Yx$` zYhBWbS8|+Xo#hw#r9x1T*NU@3)YS*B@K4z5WHK%}skc5ZOr)CHo#5nrzJqcz6e#E?ISc-wS}69^~^=iGRwD}D4xg`-1!Ya4djS)^L) zU`?%<58i@@>4Z9d2$QTdly6D}bP@2g8s-;FZSZ8(qPn3tGv@7|MsU5OVg_B{K|BCl@?V*U#|L}YF;6xuEj0)W z5fK6k5Mb=yp+TgO@`*>x>eR^V4Jmv><^Su$`c=Om8Cu+X|E5%oR?cci)+LlEPg%0AxGNr4ql@>e2TVjC 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 z

l2uyc`J0Mvh2#wPc9U)j0R>2vI@@-J8a%29a*3!V=6uYf zp<=^xb}|b*p8oC~X`@k$s*C6paf*RZ@z>eG!%oqjgD4H-^M9&-vTMXuE0`sw^PNBI zvk(H2!_2kt07(L%SU&mQ{WlqzCLrXy%gNBU3B`e5)9mvM$W8o4rC;Y*F`=@OUU z$TfhO1{TCIa^K#HW5!3T2tROU)lHWDsM_5e7X4O5xw{MW{Mb}xb$g9uXlwDtIh#_E zQM6Xuqt3dARX?OuQB2+|xt`3g?h&oykH)UsbDyCmbBRoP+YG2cK(>&iBD4a2T`J65 zJ%gZ?B?)Dq$jmxK)!eLl#faz(mhzBCT<~fA&PGL{gIea=G<~}Vo0!FkR1%Tw{6B_= zCtXiqVIZQPGCy&R$?UT&x&e560A>Ob4MHd*Cwva4jdKUJB9`Uf0*&(MPlO|I_jXo! zDio%GOd`a^0V$LdRyy8*5j)4QWzAJ8Fo^f7@hdVtMlMTU@=i@0^_Wgkni$#uq|V5S zaRuK~rqOl1-W(CEruV1+yLz^1mJ9n&KcQZY#HT?BIR6JC(}k;r0~ohhdpYW5T7q(! zM=ClX7f|{fkU1V@;}rTJwPG^6MkYVZHw;Jmm!r|}ZFj1l4|bR?J-6vGLl=r}l@J{Z zz9zROs`;U-R-zSk-f7Xz46lCy3n5ud?#F-*j??$n=Un3ytKV~N0$3;uv~-`N@h4kQ%74t-YGdr-I<5Ffi0fz_#aGYZ~=XVc00~B~h03*NPdwwZ$ zolB(hXUsDrt)o@-F=Ll;d0BSDj@2>tMe%Kj-h?IXu!YZ z173)6xsj{vKf&TwDj&Pn1y;E?Ui7LZ*Jt%aWRYV8VgJMGSu!%ieQKFi9^mk6rj&f7 zi0@maIPF>ID0+jM+3wQSD?vCT?NVv`PS6@5FY4|m)GL*`RyHM(K`xfxci4Ch1v0=y zPjR&EH!zLOm2zp>{0)Y`_sp(>vvyppG?(byzg3^*{MXJn0xg5)l=zI%{R4h6~qAubO}2Y6xJ*`R$RrlDDqSdN`q3*6-c zt1eKZ4tc)rX zCZ3E>ki((z5CHuQnJl-lc0-k!nH^L^GG6AwopI$LeHN6_k7|PlZe>{c>c?BDM;#If zP)12#?Ouxg#lxv8U9m}Mx5yo-cp_tvV%=iFZy_Ux5HeHlj9dXtTO6gwnT{4%dprxe z;-vF>$^D?Lq3t)lmmgyFwxKAls<}i`_0FkJ-1-0{dF83~I2a6Y`q0=X@vNjI?HxLJ zYdMujj~efff@^_JprZz#!z!3UCxf9=&C(N2*0ky|8a>Dftn!yNsQm-j{!K~rG7zz| z4#nk)NfaQ)>{)fZa=0Aqsx&qVrL(lK7!tRC{~g?U2j~}^5w}p5V(~ahiRLEZ1tE5@ zk(9d2D_sha>{0u7mTUkf7S!_8KBsInoY0|wbqscM z88w~@(EpFyVWAR7LOF^ld};S&+Y>k zfgt;TaslZCB&83rOsR1t&e|$ZL5;iv_jHCbC?8BHZAqOzm_<%Uwgn{H{aZ+v-+?At zTwpby8Dq}}nQoDRd~S@Gfy|2MWUkB_nql5TIU|wGQ10OO)GuK{MYX2!bBZ)XO&XHZ zKX^$K0pCT$U8JB<3+RcpSreCqsLMNqO&@ut+Q z2i77ba$bt(>Jc`j1#_-{?4UXvg>IqX1QA`aqGBU<5j(^KFthIgV`*eI-6eP)&C6WU z$rI!;C;5wz$`8ss7g$GpgxY9Pg>90zL)@}MeGOq0r}aB2W_z6gm4`&^K5&N&{LDD? zmO2tGkQWM;5IJ2qcpnMpQk|j3NB;8%!Kr!j3ydqx09{Xy zjpQ&b#ToB-4nyLjkOZ4{pHOdLuF{F^lxknC-jTL(7hS1H_zL@$CMfTo2N>%$hmfvI zuenlPStH52#fs{n*f#`UHdM7ujc$`&tp@cNP+d6`zrdPbd~=e|FSTxgBSV}#HO?8F z08kF*!xcDkM4r4!v&AnWbEHns-%>2)?%{*5G{-K#F*t>TyL+UC_8egM|;sKage=W?8j zdqq_yv)2J#18d?w z*${F|om%nZRClBt6RB!Rp&GyBJfo=MqukTbNu(p*lD~ZI?#NrZ4LaBX3EbIbC&_2i zrC=o;))l5l<9C%Xxc1WXF&qp45|J>yKeFXgV1L|$ENq2Iexxo+SMT&KJAQ8a^i2d zST~C2jh#e`j>))>@Fl7fG+%4`RQ46yoX0+DX@aR zI@}$zHYNU*nTpR)=-6kin?|MPn`p$DIuGbo#%$d<6jkd&VtYWG0a0e~^#k|vtH6@& zpB51T$WrTi777C%p}K*p5vLbmrYA#CYqe!l_)J(IDYsf{u~7-&bh&)tdXd5|Uf_RF zzsoPD`$FlI)3a0-ZZc_C(<+mbj}!eO)5fkzF>&OrJQ1|uS8$)h1aOR@a94wX)u2G4 zhwtFy%52A_bh#NPb;m3aEzEL_Ns{zPr$E1o7`4rv)Krm8OIRqY`0c2;U|XSgn8J0; z+mGkNVz1by_r-OC??qH5KZ}mn>1wgxTFf5R6Y%H`2L9uP(;*iucOz;gZ;O~I-MUqG4Kjl!% zWn@RZ*}!KDc2Kt9Uq45UbUZ@nWIWT6fYQtI71cyL0amT4I4ZgdI{6s>fuvG@@3rb$ z{_97vPtx};3CG%tX>rWjqfUC)cxh$iI?JPt1t+wfB_Kxpu)TdQzeoG7vuXGI3OuS$C|m(IBC(WmzYy>QDq;7Fu1yxDNetwIuGT4)Gkf zP~tQR-00Dp;h94xcYEgg@f2E-9U0kJZK}s;v&51V3-#hAuG75;^6Rk>saJwSt!aAg znCkoGBkD*LPzsZ6c2d;UqUALtyqOYp?E3#eTPykQ>Rr!=iblC+AMoyG;(u<8MsAj) zIumIK(gpnx!59#Vl!0D^R>o-#&9Mm7R3JEF`I(Jp+57-N)P`>Ufy-8#uUr9nXJ-?HU~QZ$KO00^1oEfoPMsmrz~HSZ@Ite$dDFw3h0%(ZXXYnrhYD`ao)U!wUMXK{N-5?AbRJHQxDys@?O|z7Ao<^ZKUeT$h zvR@}rNhW>7T!c*n)iP8A+Aibi(l*}rF%u+T?)0P&=2UO3=ahh2;2(VCm=M64%>EI^gaJ%P$(6e=dnxLoTQ33FhfZI5l0M4r2%7^*46Ex zNt-puAFE4c^|Pn zJBV1XSJlZLo7b`}&CYp9BRW4SbqbE;qSwfs_#RGl7GF&J@xC6~O>X=DGk5i8wT#GX$YcL_$gy&0?Kf`?>;*&h?RxiQl?bU0`-9my&U2OS| z`|=`t39N}0IA;-NZc*BL+h_nB zAvTs9l?VtWsN73s1r;q}AsrP5jd&LRk_@!3B3mvjrp@RcAvM>i1t(}ojLDjB+dRP9gK3jX0{w^8i3y|4FJpOKm|czvD_3H&gje6LM#FiQ ztn4*98|l)l9Xao<*<_BA9&Z4qmRGE#tHgv9tA5nMlOOm6!aPf|lz|9@;b3nRD4XjM z+1+9V5hVoMU}IBqqjj+m4hg)Yv59NU(8niW>A;tM#7>r|4|WE=jjsC)VoPEopbfEN zG{H=OfG0Q`W)RW%XrkU*njh?=vitsidoOfh$G$o;Gk@zLzgc}B%yZjvFER^heKu{$ z#$-YP@R^NWYIU}uvG;Ab?AH;ST3Ju;C6LZBmEQ#!00n!)y=C=bZ?%22YVTj{9rud+ z`@;vW4rjXK4#LRk`p+=nd)8`ErB>}Ws5eonubspS2e__ZPH-5?PO{Vqe-7Faf0&+| zp5A4*oDvDQgjB%ywJYkQexc*FyDN#e(d&%-a(|wz^j*c$$qSpR#JZnY&gf^k`}~~B z7OP&AR!Y@4iQF{p@7xtT`(C7)$C~Uv1S|^}h187sC+r_-P^KlJo}f^lwjp>)^{5*B z%?Vn_b_x_>-*H`?wka{oQkl(P+jvAhftXM?d1-Z<4+Ac));1|KQdqB--S%8kJXk(E z^orrzyJ`^yCD995%VY)-ZHXAl1_idIN_CRr>Hd^Nq{f%GcMJZ`t5`cxmP9Hqdw^iyg(n5bBD27&29UAKH9d++zaluUId(G3^+)DD(IDm|UixG)soP2Z#fE5?;v>{JrSoX>S4>exzL;+7Q@j(uOF4>y3|i!@*Cq; z)$On`)^oC;eO!cp5gNaRrr{>fKL#33KS|ZD6)pOu9iyIpm>|FnrcS{~OJupF}C4iQU9< z@CtX!u8}pZu<)T-ALGAMy1j#AP<#?FLI4N%m}g4oV9FK^`d0;{0~-85}mwT`%O;BtYuD@%?f-n;So3$ z`$o{0a)Ma8nJk?6PH2yhpwr_es(C@OV-5+aK z{h95Oj!Lnx@gfV^pg|=W>Nn8{`$v;TXESzo&M)k6!;Mz?$XX$ZUyVYo(S4m*kA!j< zYucP&qv5DnA!bx^A_~q}^qO%?l)T&H3@pQl(XnE*w;$N>eAeky(e23#Mc_j$dC zi~ykFT+viN5w_*?Us&>{J3y`t6NR$Psa`XA6Dpgq!fW`f0`UeVmI2Nl}*VL4R2;81J6SgSZuoyz4HAB|bvDgj(e^(WC)CpD&T z)m;295C%arW0`d(DApt_Q_6SzVEU0KYhNv;cgsF)1=Bhg?v!7(jeRVd?{{u%9kQMX9w$fyEOS_B(Fv8{_ zU&97S37p0wS-uKffP{V#Q1Kk6V+|(cKtp~hAWiwPyylR~Ul9|l(*A)C?et`bZ;)Hd z@(AM&XR7MnL_rtS{2C_qYE*1T1Al<`I9P;MB@{twh~oGac#=`DcRlde*VPU96WYWJ zS#i~)Cbr|?9;-#4VtbEMsmfh9uK_ab^n?fLoJVyt3AMKUR)}@uU$>nGjyUS)eW$ge zLD<5ng>gwZq(7j&7WtZ`I=EPmd<<3UPT17;p>TJxEuoTF8ed0O|1qdNh>Kfv z;uIP=Z~&0N6KL?<;-!(mE!W-+U?pepwW|T0jUS^q4U0UHXiIREJVYU#EYI$k3GHm# z%3&|uJt$W@jP?pO-^5TJ>9dxU9hA@PsnW10{uCOHOPFqO6>ewQS?RFkh&jDLR*YLJ z(gM{gP+L@jOdhmJ$gl__mGcflCa+MW0E>Yhv6`3tp+CU)a1hyfL3?B$Al>H`#B9Ef z!2T_pJ6HRSOn8YYWg<~vn|u+HzfKM`CWl9jbnHPk$Q1nzzZ0@SvGPqLXEwxd$_Zn+ zsOCDrBp1%%s#mZc&^z5!&$f$=nl~Gle2QTaabT4Z!D3{SnTpD>OH{CD#ZVw8f$DZd z$RdOdb=|fyot4N;s<3oXJ&MfLSA&>Z=_@qk=J!3s8@I83Wwg6kgAkKj}4R~c|^;}NzACEMid_*1_OALv|w z3=zOJ0XDdlC%+c3>+6*6qKoGw9rhj~!VYoK8`S{)de>>f+Mi)Rm0?JbfGmuM&i#t+1x~KUrBx z=@EP`ayMq0c}!6x7*8342ridFWsPit>HGl}w5^APWEexzmQIQtBzXiueB*l>5|82sXe+ww( zYs(CnOrVi!sVjaBjH?M6eh5HX`>k-5Di6xIBC4J;FyNYMJj3s2)D0i*sZY(?<&sr- z6T8Se3cKkjO>oP?1$E&)!}*pkUYE6E;bZACt(?pPGiSzg%AMLMHJT?&B zr8o>0XUPpWi++JUm6&<;xbrv3uimPZv#evzynd7OPp9Cg0`hw2KCC@IS?8; zJj6@!4fSX2x9V()47dsmw#a<~d*}^_2(jO@58fnuj3$%YeYG>#cnf@T3vjGpS>1Ru z6@PvnJgzTMNjIswjizD??s3gz57Oy7?%pq1T#|9~O+0L01jEuXUbGW47s}Q~O{$TA z8q$aOlWTR&=P7_0r5{FSvBPPIOB#3&$)GTHuB$md<0mywSCSbzpj80MwW_$zn=gWV z5l|k^*>ZLNh7}VYcjpddAO6?Y%XXJ6v{r;nc%OP**SZQLO^;IiDxU#bI!7lHjL493 z@LZ0dm!ok;_!YgO6$~8!d<(QFuCvXZyG>*wLqlIrZf6g(%>TRUcf!1UQ1aT!@@ir7MMz{l#!Yb ztKw1lN~%H#z5fxMluIv< z+y+*&MlQj{n&YFult=1j$TP+=f)_N&=@AJ)#=@a*M)y+&7gwjqtTZMcri$||@M~qt z!iANHWMyM^6S|;;glut2viMCZT4gir{1Y$`^N@9mbGX?=`Vuc_V(wO@>7_0rMv)bT zyT_rNITX{UPRrx&IVl!Fg=wNZ{vI8)6+OYQ88`%+YOwuFGm2S^fn+Yb1*DIw63#-D zBO|{8c3CnD>qi6kijDb|AX@H5m7ZVp%oXn1M_XKhrT$T%r%gVZ+kxr?S4YjM)||8+ zmLj(trig2b3HEO;|1cb+zRWO#5wrn@)cYr1P<`VFzC@ib$=O@v z-HRdS>vNgWL1svHw)B@{OETjhNXVv0kXd1y?a>mC8T>c36iZu9sie zF%VIcV8bHJbCdhMj>id<)JKRe97&p;Og0IsXhm`C6-9+9l00x@nq%K(2z@ko3N>T^SSrn_9f$Mh|sfU3Fml^dPpb#WlZ;# z>VsV3SENO=VX}TJKZz(h%~Y2K9rvlbMIY9Y|3Ba&lKUw6Q~HkMG+!lctqbxgGnkPO z_Rs@!FZ0zC(8{1TU-f#e!6+(i&a_Uo|Qo^N+#W5EW902II@dnqWQ zkD!OM1EZSG7zZtXB+bFy>%!8Kl!SN{!l2IqsdD~Q4+_;1!Hy{$`J*c~twSkb9^SPx z3fi6a4)?KV5q1;|9 zUSQL}4*Rc~77HR*BD+P0=gN4w`!>2gI^T z2#gQU5Mn(QK@qLArLM-IDSp-Y9T6pGHV!~`dVBoiHuG)8h78!@Zwv-IG_20^1-(=e?C z%nHL89gf}FYj3KgwIk=j69&|IY>EfyU|vQpC;rl50tDD?G>wC#?E0kD%(p*)7`RA) z$7%5|Sz1O*g`!E$Gjb+FEapN{fQbwcpvoJ0$wu|tRE+PQ^&fid4vg7f#pt+gmYFXK zGu^Ci{srDitp_5zwUsIcWJi7UZj=J1+cF4;*GG6*{v2MH>dD}n>vOX$DLlcfzU40D z`7sF0-S6154o1C*@ILyki|~A0Y9iI?*JPE8HvVsJkAwFv3KYnC1&9xjDSv@%6XfLg zLdkMFG5i|eisWDCn z;@vx`W@`42&rxTXF+Po!Kc=2(fQED1LVI-N0@BK(w+*{epOo5h537f+6|bQqY$QAmy3C9}pMsa~QrHGm{efVrolH2JN6J zXS7c(9wNL=l7st<;mzs@)CD&auP(W*cLC5Yf5)uhUKcTjXR&5vt@Sl*gfDaVNySuw zkiI)qmJ@S+QyGQ~Cd+0{KrBX;%puRA?dyIEnpSU8{awIB3LeOk|7UTrkr;tePPo&I zfk&hCa(H?61qca>k6tDAzf=X2s{UW%z0|zcx;ZCdAzmTh)I;oQB0~0#My>!MXJUcH zea#%eFMcp=kb)vcbSjD67(n$X?mE`G)R@E*{Ie2u*!G zxrRJ*dxI&YTszAdLV)c`Wk->y^0;S_KoVU3{Wyi1Dsv^viHUnNehxRMn3orp4mf zy;IF3#X{;yl^D}+_SLp^SV2NX+Vt~$9Ak$?p=wjiV~x`V2Qhl%2j~r1g-$9vF$hM( zc+!!;M-PlaP1P!2GIkA8zUQp0Ovlmf>cilEpdKLd*n9<;x(4_WMrRfLQEguBFwMp7 zY7=|Pu#Q}#u6eDr2yFu)sW(MnhDqvG1lsmD$m}mTvom}_Wf)F6P{tNLE=rDR7tsj+ zfWDWQ2JMT=k@`Q`dhaO7?(4qu_g=kNuX1`_)z#hAscL4rC-j7R6EK6x0}SHKAPwRm z5&%JhB)}jh5flj~iKIwSB*6rbgqTE07DbDaX<1%NvQ`$w;61x%&+gehwz-sKOXe{t zQL=ac*w6R(s(J>pr>D9rysG-$@Voc^ZX9d1(_;`zwXC^$AR6&RCmn00Gk57=-|jet zb7rO1TpK0d ze-JyaR;f0Ea)Sf2sYUU<&|IsOU-}=w>9X}fOe}AVU!n44TPWZ2La0o#QIN9oR~|(% zp3!0Rk~!YpR|#4%AA1JWCS=(hZl1zV9G_v*a%nrye%W#@Gh-!!=i){y3U6d>RdYiW zRZFz)0FBqtX3wNIh&tlVACcAa=Wx!FHTA96+Tts<5-{teFe<;bHr>(;Ua-U;+ti@R zOT&lx2zypB%am2oShVhdrrB+k;?@R*+Ix9%t9d$IDm531%fz1vFrnu?@7|ME1iVPY zjSV0EwvHaNV^FJX8LZEHM=zR-kIb5b+hcz?b4tF8dYh?5*z&X{W`8TEMfCxyXWLx6 zmY&+(6~eLknU_V6Q~PWx?wG!s10}0n;Eo=eK=A^e8z+jGa>IlKf*|ihtSqf6hK8o$ z{}FRld?ZTfDD5n@X4Y7jhnz2*G^@Y!JnLzgm*D%*snz5+5|7m)thq9wXi<_*G3vB> zdKi>Q2y^Ck?U~g@5t?^&opz!0!B45tAd}mima`+v!1Jam99yIZlSKp9RC4K>r`7mj`+pR4e0|)VIPYB3X_xNAaP0NOFO-JtLxpKE=fBITI4I#0wFd zbh+s~hgG8Ro~o&4e;sQHkG8j+m0s|Qt)NXb3~A#8{|rhJEF}iGvmBxU8%#YNoW@Qs z^hi54>wHaGdFka>p9rAst8^EvfPMLS~76`}KWI_b-t4X(vnO*L#|4lVEOCUv>Du0~*-`wHRE zT=(o3F$E|se4pG+d~O?!|NkME@~W}ir6UP51PW9SLR9x*WMHxnrj$>`w@55Wf9^mS z;QS%Y-8R@tbQ5=-0a365JzN5u2ZlQ_xgTmQH4hc$fTicTODN3ZVJ3RdyW{pZdH%-g zg$3TtE(W$j?W8%o6^}nzLyo(^#79mPVS&F~`5ANV(m}2a*J<8%mE&Bs)Hyzhb(C$E zv3fpEtb*y9B{)Yp%ZgB;01$w1)KK9H!6NR?KDm!KE1-K^O*79KpG^9*ZDw^9)(=Ch61hMTn`M9PENwu%C6?E9c9&}#1#_Z@ zPw6Ffu{+1-5ETC!rn1uKm6(2kQuMXcw-*vGXg>q*ya2Di1^=nJL^GqN)0?N~ zJjs*gct=#(5*6Ea0*1N%Pq08doFT#kI-Z`v3+6FAFy2D3u#3n*=S~yvYu3B9Vxx*n zFlLP(gZ0I+{}V8M9JoF zFgJXc7MAFbHrW7pUd)5pS`zIzcwXg6r=Y=Wbmo}YDgPCI93iD9U9u#{#-ci3rDaTw zRo0P;4~8R9n!yZqff?(O$ufQ=HdKmV%!;;y@`V-VXBVqsw107+33=N)O)3Vqm`k*K z22kwKrg`luO+!DTxC`=;08yx>uJdNsGHI+$m$qP!vxULR;i*?t|vRx4eLYu9z=;_lHWpVe;i4Yk#XR-ro|N z(m8PeE%lXrXDB3v7EvN+PEw)qf58{6X4&sG-!RuXm(01&kt95_&^a3=Cz|JJ*7}DG zn3!dU->Qv6fR}cP4E0mOpp|2YfiG;8$dk0T=#tg*x}l$c`ZR?x0ALjNw+$a7At)+ z3(Gspi2=srFpZlgX)c1quj3GSWD}*-Be%AFVZdA z>Q8xb74=33Yh_5JP&l+yh29po=@sH8&2mh4Qt;0fvNZV2Epd@9f8;xP-o9c38<+SN zw{uJuK+rhhYj}7a1ERE_oKqSFv$dRDom6i7l34;!^*!UHky7Y$0%_UA1H5PUkX(MX z5p8~zSg)+>~*DSdJmv3ZlUg% z7rtno=yuwqfXx)?v+EYaT^r`rdrQU9!{(YL7fZbeiC#3r9))=z31Gt4p$9Pr=-Q#V zqq5fiE0F_r2m%uRjV*>zV3c@5nP4QtOlyW5N&&HV1+Wb%@d!S;0!AJQ17f=S*#wx| z2vh`G6jSQJ5^CL^XCkJVQx%9G5)G>(7mb36Gk9dLMC6Q2#K##!H*hFNs@65^k1zHR zT&nsE!_WJU*NdIG0GrfleLbm%g*nndgFxke&UF<6jqTWtcYsUBsqfB(jJdxM&qf%q zQRN9_kM@tcCI2lacf}1aXW1ZRLc|QX;Fdxw{#yt|wFgdc{XO1wG%fidm0-IVT;uO@ z--uRPB(+RGUqR3*w|18V4cij;CnvFAxefD}W7SZnvYdy0f{YtZ?Jd3`)eX#!CYTi_ zEuVu=;r)t*q#0=oZ{eer_D+y_$&ZEvjE^MMy*1eqlUY%^@NAUwbtgeow+Rk-)OQ?mmzn#isEEBRr+D!0jIfGGu z&m2N$&Rl={t6AsWdv=jKx#jJw;lwYSqbr44xljbh%yRbzp_k!>5MgKVvBSr?59W_1 zRJ7}3jh0(;{>%{xL7`!m?PIH7#YQ;U-Irh?XL4lrH;R=#{WC-?`b0sVBJ+*a_01yn zIAmzATx(7)cFV<7dbB+jX?52536emkKKWyEO=Z7;@0rk(zxvMX2W-Q^C39(>LcTu$ z{!^&UyUqWOAMCjKpOE*o*fCGE#4HesjBP$oO?D+OTj2l4=x2Ip=3X#uQurhV^TNLU zf+?d+Wu_J&PyzNLEk6n7Xd9|W>aFJgz&X7Idbdi{@jA{D^6p~B+c&D^?r@O9Vg`(EJXEt%p-@}IY(M~H?d?k8F;#)6y~)U1iPRS zNiBsc0oX}jxxtu_{4~n^^sJypt5JzOa;C$XxeFTO!fdc@{Cc!y8heT6a~$=2>gP!P zAw4dlV*RC_Td8}|f*&T0d6HE3B33>H>Y8R9PtpZ*er_LPGV$pN#|amkNc~~|5W8f* z#Vus!Y+Nz)F`f-MH889%l=}l&@<6LcyI}AL4A!xZqlfX8!Mw@f< zsODYe%8|+l)!YDw=V-C!IA^*4Wy=G!N2U=W$c*C*JKdR!3WJcxPUEUwgPK1$gJZSH zrujV7!qIxCqKTG&)iq7_@fu7I)~7hXd@r4MgJn_`_`<8C4K68v=odekd45MqNrEvW`8tL+0L7LA{Y5!B0ZGh#z z&c=csV4sCaatPDn@X5ABv-2V}u$+`>D|6ZK$!8EC?NTxHXFV)1BulM0z@y5^j_yVe zn|IyLNpBv@L%kTTCF~miE9fy(s@EE=#O(n@^FgG_ z+#Q{nDty!CT=HW&Qi$h|+TE&!f>zj_tq5uZmZy7GVUBo)dzLx0SFIs3-Mxb03DnR- zaDz=n0@0Wj4#YB1IB?>5tN}`p7K3W!%tx_XFKop1*)Tkau~p|yeL#A06bWB!3zBSO5IKBVLqeQpslD zgh=QQEfE9<@K_LFBhYV2kg+8ucRx;}9WttXyzs2W-QDtw*i+ujOlwamq772PeFclP z-Y+1ya~==gf;sS7w71soCB?N*kfqiDvPMIFZ>iqC@MQm0aFHrh2xYx_|f|Cno5(K-JfnO;D$ zpnXA)&?Ke+eVuH~6BeJBv1##_(MaY7^W;a(olE>JP`f`%Lu#{~=5G!?NGJ|&R!d94 zIvBgr9QX$6Z&v=mws|Fq%LJ_4>VD&=#X`sRs^wmzTm5-qm7NUsx$BR&Dy4_P<}24$sANIB&6t})heWr~qW}ujb{=5M z;=Q@S+IC+s*$RO>7dm9^Y6HJNan;^TBBQo|+)zcNG61LYZ7k#1(p%WJ)&`Fzmf#rq zElTh-@ag~SP0MqJA%m$g`}cbOe8E{Yck;maN8Mlr5&jL(eK$!NP1ek&s~`F~(n{FNZuZ`W*?R83vUX4y_&d#+jnD?WTs%WM5`*<&UUYhbB*k7_ks;pIdeu`r8 z0~qB$GK8h3IXPagKJ5mx;^RK~-7wg;lOlIFch8%0OKi*h(dw+zTjrolh_J+TpRhAK zTq16LhqJ#_-@nFTvW11IaAz4~_xZq@XTzX7Bf-h=e50to#M!=R~p zPXac3*;D@3nc7mcmlt1s+&o<svIFbETVgjyCn${=R*y6j70Z2^(u`Hq7s;Dm}Cdc!Ik-?BuqNUFCT;1 zYhXJdA->AUsRO1oLu2-ULZbk);uIyIUQ(;~l6E!l8atwaLJtn}!WD^DPvali9IRYp z2w&_mr4?vbrS`^i;DyJQZ&QmTp5V113B-l56V7?~CY4XLjkN6*v&hf7G0RcCuS~Fe zfZHsa<$E48|GHnOmfhm#*@ZMX<(B_$nhV#jM$syzHP^EVy=}Y>zp4UEnJrs4wY23< zC?LWg=4o7yNOGRFq16T zlKPr!j*h|t^h$yut^DW+jHL74ErXjBP&VADFQ*sxmy@*HqR|5*TvhW$J!bE1&b3$X ziT#~N?sn*)qmGOu4Sj?TB7}Pu1}oSd?|{@Te2IdqV&iJx!SFi?yf=$W#a81m%d`W7 zln0wqME62Htt$XdjJqjQMpz`4FLhYXaxg`hFM(VR1=pEs4ZdVYx@cBRCKwh3Q@p?28gmMp(n2y8#ov&#MycEaeG`<4D_$y!QY4a zss&O%Qfr;CMiD|Ag|58C zW;dy>loR?&vdCHUQIw5ZP-1ZfKEni@F!(GlWHio*y%|{RpSDeB#x1lJLVjqyLHs_( z2j1?qN|+gR(`hGRuU(8+(6Jna=v^8d<NkqX~kdT*hv$!SBw0}xdK+pRm^wMh!g*R-5Y_ z5Y4wvm{_Y3b*wb9k`+t~?;Y6lS;oL1MH+)fi7{};U_eHQ)+w@8V5?;w-fKoo4mPb9 zB!(DR(@#2E8CBg;zwN#`LlP0?E~~7v`4My5)`3D+U`cUg&1=YgkIKlJT2|RO?MR$l zfv*YIf*oOq8^2k-z5mE=Q|ja!Z4X#$TkOs6(^qp7L*K#T7Rcw{!z%ZYI{9@}fSlVp ze0`Ed%P$0@w@7G&wch|^-yw~_ZNE)*MEb}!(LVcgdye18ZChb1-~8~aMJL;frBBsU zE)Y^J7|crcBNzESdDHlQQ2EIZC}f(zH<8#X(+9tmhx5-SbSekQDoi z293a;a7y@`YcyDwhL!K?`)J66SSGUBL&fPZE?7ByF<}a;(Ja>@-t5^-(1bY$agkn! zB>$&z*OBN!LIr{%YBv*=k2S1=MkUuH{3P-ilX?wKwHV*SmaCb7^7cbi0l5{m?6`D+ zd^M-R(YUyc^Xl6nR80Rc3=RUWPryV>L-Z=e`KzTgJa1g5N@=I5FHPD!#zp$@sW zKZD!zJj;9sTD!qA)D^76F0|25E&Gk69JgTYrW`1g3cU$a;UReCA^z&8{7q6aajaz7n#%|?v3d@8**8gv$CmHu-s3>!74e9eVkDfz073=1I<)xmvZQd&g6K#F@o?Xyn(^=I8JKGJY1>5Jr z)MVkK^u3$~YW2xUfU`h;Zxj|{+z-#lIkn-~Vn-#bJ^vCQ*67i!32BM|{-w=EkS{0q z4O-?!O#~V2E7lA~BksemcKss2*b2QI|0pF$!~M@*WBd)*TQ!B+mX3>)EDq)PhSq_=wr(`+H47%{(mwo*EQLt6bnr?#)Md1#tsw5-=ydB^fA`~Y52+}W-S#Iq(SGP#X%shp$V>Wa~0W}(<4MKBC+ zf=g7uqY{BB=q3sah4-;sD-jHD=Z$A@*kjJsG{ zhY9>LO+%xb8nkA>)l@t`FoPravg(1E|Js0+(P5-nFIVoy_gg6u>>I9Xxj1)BxkB!s zi8xEJ{09&TU$ce>^jGhizvEQC&q^-qUCsG5wYZc-g76(ysx{{@NSg7i7H@HlNiu>{ z#<2JlitJ-j29|x9V3fvD=yDvPZ+|IvUo}|m#HAHNq6~8^)#hUqE}_ND>m;4|APFOC zN}fjHpJU_R|D?E?*_J(G2{hgb-BxuU$49qYa{F^piHbu`lBKfekJj+W;m|T$22o~e z#o{{kva*Iu#dIntZLicSj5Suq)pfM6Zeg9Sz``^Pi-Of3> z<^pXDR=RZancdTI*z?8f4y;nH%fM!&>8H#Ga1-R2`NSsi;>4w>QfR2`2I{q--cRAU zl&{#!iC8-Tx}+>oT(1Ce4oC_RRt%*nd}hgJfgOov0BLE-+W`Jv!w@ZJ$dQT4Fp{%% ztkv#)*NA@fxun7v(8*%45Dl0j^a!Vodjp0yX=Zg07yZJwjvuBgNE{A--8`+RI6U~RqVZc2`i|ouGu1SfswTG#FVfXR8yenn0ztv(Pb>( z{^t%rv3!{GWr9l3i9^TlBl7ppNh%zGo*NJ&ucOr3P^sgT+N_|lxW$9Xyc=lZ7N2}I z2o+A%N!=lG_S8;u&IiMTs4y=tz1uxvs(Vv9*7=Fu>8kkqKBnR2j{8%7(szT&VJNP- zjP-D2iJ`TF@n63N)2dAeVaFl*?&Dlz$W0X)O!6UTIEnp(&Vg55QPcb$guz0ouz}dA z(UiKET;#p(FYxSHdo)A-gVVPI>t>a+DuDk6{`fZ&{BclYO=5}MTF&o|Q&w(uRcd8s z{w%4^6o2#SH|^rjn~^@-cH4e(e5t`VxgRTTk!RKMVs{fOx{3MRL#Mo*dC>16fCmJe z7wN^)hxuOv{cHTjXoRlni|}K(R#Nf+y36vdP!;Cu;CReEF)}OTS^XVZ$HZj$5FQ`^ zgav2(2i58LR;-35!Cm2QNqow|ly3F~de%v!s$z0)vDPGcro@^)f!v?t-Uq0Y`~ZKS zl==GWMa&dy*3t{N-@j&+6ddwId2@3dm8zw#dGj`U=@S9q>gRv=TNHs&zVtb4-P;&_ z(J7n9IKAXqHR@`^u@mB;rM1S)3d>a19*YmzjQpfI(^wYf0*TnsQ0hU_X7VSeSjtC0 zpRx3?-qg7tAQ%aTXGyTZx)+=o!O3B?G-sBu7s49(HB}C6y#}Xfrhp|g6%!w?mS-9% zYFGNKZVsT*UeRsQ&)JJ>ze!IIWo(D^*)1h5W-o0IUCOz7_1TIuZmLwNKuM4t?`UfD zP%9Q2m7~|}EBO??DXsm}J^b`tbKBtI1|qoVM^#I2by)Zw`(`H;KZa1uF#JZw4JYyOFLDH86^0Mxj!!uCyDA<-({r zGfx?6%vHMbeGci$ej{7bsPJ91h4=QQD_*pcAMW`LYnpd5zO#^MYv(=T6vqcX3X5l-1d- zCN303@*m5#6IZDiluNWf)w4iRuJ)?*adFgG+ckqa9#AE&YX0a+dg)ea>+8jiOF<5) z=MDlitkuhRv71Nqb9W15a922G9A${H^06ETxsPM$U^&w8K|ef7xiM7@C3=+|s5CxFBt`!&{c)&3#yhbogAp zOm(ry`v@GC&ny!mEzb&UkzW5Vi#muMWC%H!dBk-Rb9#rBc)CnG-99t?NTnQ=NO00oY&)hzrSd{jox@rlnDJsQW|mBW3@WGh-ms7| zOU;k!&;Keyn|>6($Z6xF5`4@*Q~c~K!7;B-g*hMGzSXRC+TBuIYfw8(>dNeV7%t4HXVV{&1N{Rmt$g0gNkO|wN)`^p+++-E?~VjfF2%+ffZ1DUVV>x%G*?{rV7WD# zR&VJLvI{4|Q8;$1>(|{ubSw$?Hq+hZ(y^Kn>-Vv{FRGW(3DZ}F{~HlPd%3-&gfWiz zq}(6@iWu`{GYsoasZuDLT>;&ERu)?Iu)dDERnAlKZCw8n$zAVKS_01BT`-e)SUt-A zGcuvZLgdS^G|eWOc`BDIo!H3Q=OW;6#2-sJy@H(P&p6f9fSrzHVZ+g+#^zuu;cS6w z*jH9ij|;B5}e_?O&_H(xfF>)3ot?Q)CrAoBXY|g5J z-~#(`IgGbf{Q|>$%Ef-tE7L9VwpPk0KW{N9AAwmH!(x||y4J_J{I^Y?!V;zsQpQ=U z_?1R;j(6N=Pd4`%JhpwGFkw>iXPA(Ti+-(9QGfGpk{n}x zvxDx0gqRDxsK{CAK^=*(I~1LL$yAy#LYcS%EhM3JkDJcea`yMRmp{|sVBr>POgMFZ z1#$IRSo7&=e=T(l`YvCz8+OTU3d?q>pvdqXcA6UVHa z5j+!8i3Y42xRl78|BQ0;cnrxz!wf+qYYAN~5K~6zUSb4axk_EyER7OK-HSU*2RLt; zdb3$QSi>N2=Svk5U!TCYe2B$AjCbx$Nu$7!sbY)rpr_AqM%&S9%|uS@c=e>?CwPAy zS3NPP*jwyxn47oJylSR3e8@a>E#vJRK%hH`OI~qx6?+WsQ?2vg!+nx0w@$T%Wh%)C z5lXlJkx0pz5P+;oCE#V{AYQ^h8hM(q3WdnDE6sJ=ZncFa zhzGywC24apaTzBnli_pbTwD2$%nk^#Y4FYwgzb=6aI10)apYi6y9=etGP6vpRBTNo zt~6-w#h35sO1%OZMM}VjrkU=HG9cG~y9GhQD`5W`gKl*2(U8X-B=&AMkI@zgZsj0N zn;^B{(g)+-{jkns#PT?-D=A67U6PF7O@^LKfj1HL_|1p025I@FCYShvTWAFNw%7QY zG2A$*H_Ztq4zvrg4(-kRS&C9fhoTEi3Ynmr2$t&koW`l{2)56ktaWB-HO`=tkX3Hs zTj5e%(@LID0!_Q_FbN%Nz;io84ST7)%WlMON&{JpxnS{Rt6p8C%f#=o>7m_lHE?GkBiG_LU7F<{ZO>#iH&Jd#xBiA3Fv zFyQ}w9i+cz77-%MDo*gYtJT`S#`3JhhofCPj?zlEL%VE>U7O6z zGHjyI!;6E_eg zOQA=ZK7RPJYC2rfbi2pjDvgN>ZfzU6tDl%TTMd{x88k^DqDHIGOJ*9CMf6>Z(+oJM zE7EI0J{?^KYoor{?k-FDRRaTJ6L7~^x?=l zs;s=t_{Y_$kdbC1@ku7n%jDf(!QecGJIAL35Ok`POGuDPgZ#x}x8JIl2~ZZjD%-LL zS0=Qsx&^VPAr+Vgk2A=H%02*ig7Cx+E;>#NaYl&waiLKC9hIA{r@fv%mIYf<`d4*B zcbSc-Wzr;`XUF6n5VaM(T3nx-3$Ca=Gcf9=16hY$&I>L)Tu z;N@H}eDDLnaf4a7ncM`vbMD(bXma==M-@1%65%fAq%iq3zVq|Ej30+i25~^AgFmKE zDK0P6)l0zEG~1stZ%c*p%wH{cC~$kS2Z0-`;lTNnGet!|z-0`fQFy z+^i$>n>sVoRibbJ_x1Y${cXsT(}>wQhDZJj7NToQW^E}B%H|0sI*hrdj>I{!x{pLI z&pjxO6w|m{{YQgK=F*;l85|VoPhlLgA2qw{A2=ZIJGGRyw#qvoT_D5pgf>HXZU z2XpuH=tGNU@l_mwobw!?rS;xp1?nh zKc6-iE$je~t6Gf#r47b>MW@TYQF?im-~CTgp{2UhXZfrK@_KxvTw6SJ$js4#l)bBD zZ$b!r%y!~*c;J7C?=!Dm*a=@;C9W8UFm%e|Ht(e@mD>a?EgKA5c=&6987qvKb>2F4 zai`ctO5N66upZm#qvB3(H}DAh?FXs1L9d+y#st+C-#%!y`;9-fwvSh|4Kih&CK5;L zdNlwZRjJ=&A4SmT1h(S!m0^$CfNpcSTelIJ4)*&`*}XJf!_}y!Jwz1Pny@*buxk9Y zLc4U!FwI|qvo8aNLeW;Xnn^Ex zNf!AsqXVPDDRq1(m&oQ^Is-HfHu^HE+VLtRFJpfi68oO;sSQoa;@2A{gQ8CTw`QKA91SL@OA78=~ucW+(d~Xp@Nf!smUC{Yb=VOl1bbjW;>7OwP zqUw^XI9(j4mp;0m5E*qpu&+ibTyK~E0>X60+=2hPt*5yJZy8-@xm*mQiG8XZ_EdocGZgU6ENWe11jH_%xFZv>L)6O2^OAz3Ms5C){{$Du|%whJ)BFULQI-X+PRry z>Nn6E537P{c5Xt z*|+tb$+_~pFegM=Ao0wCCwp3+?#)z0zTyh-ljhg!(g|viMbpm+K<@Y+bJGIjBSK2i z2Wt+Jz0>Mf5G?r|Kd2ESB!TINL-x&@`f#=B>3-|mhIwaL{4NO!=1V==(FUzI zniqG}kTnRV9?bq)fO?FIr&U-63qtZ$ogftNUd0@-`%~+&)UgDCEK_n!h3A;njUi0V z&`@~F*}Tz`_Z4u5+zWG4PK9VFaCw%#nx8~}iZ1w<);4O2gaRYw21Rms0EGXU zeXJLBG42ABBgSsaEvGf;{ew$OVhi9D<7 z-f5lhjJ-Dl?`Q(9>hg3dmZwHI)fY~99Ig?+OunB7u)AF%PYLI`up`vBuEATris&M# zGD(7vLnv}(9phjZ{gZL{YLsBj^gqCvzK=mwu7o!bYWZ!JH)k$};WG0Y94Fm2gTs1> z<em~Lmus%+PoC+f@%7aLAVBFXp!?v&oCZX>4+RoRui zK*t&3yqv4GigX0PIbFb6Ka1nTnIU78jGeYy_&Ah0d8q}cI5ARwHHd1sZ1h4kIfhP_ zxcUOc{a_8}4r1E+-}lXz=tf>j23^F0J2+%oZqRK|B;zm;S=z2)^Rd3q-oMqJ=z(*X zje!pMpk27RB~mMvL6QKs2*~V%&S*3QP1YZbMVw(0@& zb*>)V&XeCFtlkDqcJCLY!@Q`-UFJK_>&(2>=ey}fzJtFFqH1l@)^@`G z)DM{V2kAu_-I2U}M4RXL7155bZGf6)y@}{yOK)+3q5wP8+ z_BL!Xw)hhBb20305d^+cP%`-#ArrLyDt;ZMktoxt;4<$eXkd&HHX@_H-{~Dvqb2*Y zV(!R$H>Iz2h>y3xpdO1IWRcmoOM{bjoq~IdX4m7duzEjWpeHpzQH^YiGF7`Oq*zBN z4M-(a$%Q9J!XOArHA?YZ`iHoMyS|ExmaKzynom%FCAOkX7vH4hYw?b{Q3yBE9@l`E z3GoG5YWKxBy8;=P(Xx4O1e>wdvRqV%QG_nEe15dh?|1EN#a?rsNwHG{sYPCUeh|^U z+~&D}h$a8xOguk(D2bOAl4dn5x02uaTyAOi2s)lO{i0v(jZmHH$r0cvC(f%H6C!uG zs^w1!cc5bEBT!%;bsN=~!QfGYxxwV*pO4;ISdaVfgV&Jf+AJtQ*QXmRxdt@V~A5pM7Yj%!m_$6 zH%bl4Fgt#MNlR{><`Gf6VfK{Sm$$JsT8wPpSjYOIYYVQp@GWF+=*XE;%8d zjpWMHvWQgOhLN&q>rdrATmk6961d96rWF#x0k6R^7#bilm#4Z!7wIO9{V5-rgxH@< zKSCX-H`j8t+L5TQ?TN^vD4pKN0P)9A4ST7ZK3K$K7&Wk?5q2d;48}38;$Y`?KWH#g z@O5>ZtB40$7J)lDjhL(E4vE2Cvm>RwfJY)xdA4yohqwnMdZ?h2>jT8mO*)#LXTy-> zUZ@m1{v2*BMRs-8`JXuo%i^=A?hK(Ihl}`Nl*>op1W-$J-OVgEQl82Y!b>^0GI@;O zEOO)-FfXF8SZvJQEcwTee&5Jxg^U!D^0?V3uQkF!jj!!5R7=}>UndfnAVvsfdxHhD zos^7b3u!j{c`N9?{IvRX04qm2_WWX-^r5vg=HxnM4OJ+qef=YwZKzZS(UH}S!^yI< zbaJYJNM6)JSzq zu0?TXKpc!gI>0b6Wief=T-ShZ_}IHDq+x531Py-=l>4};7L&tcbeT#$@1xnY3;++u z5?wzum#tl|7$zul@(JAY7{2<@fR~kZ=XuB43_7fqRs%1-?Gom(dLk&(^1Db>`5J(5 zy0L-NB4YE2DG#&b?KR?8E5XK@#l{r~V^fcS{nCb%RG$Ng=N@36be$r`jze66*hG0i z$r6nN3-A)zA_bph8bdOL2O>0f6^yA?=ZqPWA~?T{2kGmK`NJZHX^UknF!-*YP%G;* z3NUGPOQo4~F5MP|C)5kN7SzC~tMHJ&TBL^&Q{CaD7tCu0iuTNk-{4~PFa8-GMa7=h zIRS%#d^ZY05zs1ie&@7@ydfmDr~zEv&1s(Ul)Zs7o}6sr4!jV2bcftsE~~8dHEFWd z+Muiy8aoTMMw_gvr!AbSjqIB@H<@>v3qr;B52AzzsNrK~+4rkqBLQ^3oJ9~WYpJJujAa}d;A{iR#ws~}=d5-e&|^>-4II^c$36117VA-}rv z7Bms^&+z~}OqmII2s`}bB8g(w3?c)S#Y&EsO+@M0P}s5zKhEsEQNHQ5d%!}n zo5i<2VV;=ZWp-V{;Qfz$O0XZmfO>-$Urp5=6#Y#|s+^wvI7eE1*}IOxAV{K;@io7aA_#enZy4mI?J_5y`g61hy&rK4D1!GIRu}YE6lF_n5N3TK3Am1A) zLXM^Lrz2smXL%+EBUM6T2&jB8w;+||;MFm3^9g*{@D5g8cB9p*Up7g=;ZNk%1T0(s zF+=BGj}90S_PcRviPLGd;xZ#~Nt@kD&Y4FWPLGacq@^mERy*iJ=!mdr&S4Hb!axZU z2na1PF117-)=s%N6D969)|fk6qNi>_U6;6?6SRavo1raiRJ3H^({O_+XY8@UzJfEN zP>g1lSWv!$FQ&{GLHe6Tu0MkD;D)t%R_FFA2-Jh78&=EF_F8E$+Tlhkr%TOhg-S$r zSl!B+@7b7)G8Zil*bElOsd&PoHQz>3A|Q06&62AV%Pb*y6vGI^+2s1+L)#gg0xx12 z?1CqbV2u=G5}Ak+Qsv-ppcvHeGY*%_)p=A2-QUf2%Eiolp~Y_<%p$KHl`Ca3p@a@B zOPbOnV7rVw4h9Q)qT9QsO@{}se2+O+@649{TH01RY-%pjp>`CYks3H%o@qDy!l*}8 zlJ&KyQ-aL3JhnfU1)5Vny+U%rJ`=}KHf0r%ks)*>I{1N!HhJp)`BFSz*<+#^a1O8R zG~O;ZA?M}@n}PX#^=EYs;3ugT-Js@k`f}(B|0n`NhQzlj^R>$C{27ElyS%vD{8F3g zat^Kf_L$Gsa8T^W)|%nc`%_A82^{hrwKN)hk*8%f0hem%bjRU36R0_7U`V(+^ro|ea{j3U-%KEOhlpxoZg{cFfN zc?(~v_G7toqHBghl{=e!0^T3J(zM3N`#*_EG@8Ly|H(FUi$1Ufj;;(GX zB6Ie#%*DzwZQ&4`Qgwyij>?xTnX{*T zPTn<_ZW)o8{Y+l|KKmrjj9U`3ycm88TmM?P<*QxuTeFVR4+)oyR*D{VI5XIEU9&i2 z=9Y`4bZ!@h>;Y^OTkwvAT4Wc!!#z1npwnJk_9_jodhS0)d*{*4iF_5`gdiU|1*Drm z07NNp*ETNDHpGcYVOA=gGbA;G z=7P7IcO!D1VV}H_NZd`#xeBme`eq&HUu)aWa$QI5J}u29(MTO8s;TB@_i(LpO&rN< zED+TgD`QKitm_Gi+4WzsIdWmEEx?k~k#d|50FFQ}@zf(4mzgneo^xaRu}g9%gqwdQd6d z&aA%LGKC8I_haI%w}QC2atk`Tq&zlwI*-VRCvMh$6-BcvFpx_|I01T3K!!a)j0M-S z{6whc8kuWATgK}a1+TF3p(OVT;*mHKp*mR9!H-O%wpHQ@*hjTa9mlbJcSQB)@ha^q z1atIYCncDw`ly((hb3l;fPD8Vmu$-(vFjHuufw$?r8n-csuOl@s{Tz##BmQfpmntWf7njdfQgtwL8=gjV<+~e*C8>s) zROJM?DYimwauBDdd5>_z9bG0&jMCqt7`2p^lcdMzj!l7LCQ_d@ElmyFG*eHaxrw#m zIPbQdCO`!LKLpTck;!dt`+)!3Bo~+JjIsi@s`6u%FRAVmeVr**{0XqHG$Aal2f$-Q<{zgqnIe z5MY)fISu%oLW*!gl5o^X#}6tG;iGsI_OiKJZrI%uM?0C6S&f!jAu~zI@45gV$OXjz z>aD0o^`ulW@dkvOC!XNF$VQU+s|jbCDA90}PKY5^=gkyV!NX?ZbEJEaQM!$jAU$xa zNUdrIX(W-9lE5pQxq>YEDfCds@}bo*r!0(i%Z)mjILsb*z`bOQ6-0s$xI&4YPAE8e zEb8Pe3df2eJ4g~v-vwuxjfaJa-1L`-dDemop78iiG{Jrle=kj{gP9b6-J6hz!9mwk z3dbzX%y5@|&U~JxpI#ApLNp!eV|G_U4uw%G@i=jo`a5W=y#ZmVc&rrti^Tg6%`m>) zrxx4?yi?|wo1ElZ@_r!y1x2Y-?DU~$0gnI(XmzUV>+~&7x|d`&3=UD zklO>~abJK~or%s=6z}g@tu*F2gfJhKiv;Q$jv+p!Kr!7u zaq9%NqMIZHri;B5g0G~spGH$Qu=j5Ek(Qi+=|Ed6G1cYg!PF%~3_D9J%~nkBB=#s8 zRe%O3?VF{mw8@V)udFT;@ z%vN|0p^G1yL<&QPMy&0#Y}yi3t!y(Lj3(-9P?}Vc5%J!?5to-9L_qK7t6dYG=B~A% z{sM0JKF6BTgd1{J4S-N$Cs&YyOc3itDuTnmDJX&BR~m`B8i4s_ui{RQuL-+6(rYai z=R592Q)XNu50k?N_ySAxNvJJ?8Wnew+KFo+iF~xi8Zeioc<236 zt1{nfctO#xFbd1y6RYF!b)8O^GqdkpWW&hTLN>^zk{r88NbP>@7QroE7rnuPcEmUb zQM;mJcX_@)z(DTgySzzqeCh+H+@gEpDn1gtrsM3_&X`*Yq!baOD?7fsTkODaMb;x_ zgx!m_lv7*#WQRx2rdOS-CoL>5e0PuxWNspWjDOG8%NU8>3;D9O`M4o z$O#Sdh}==J#BNbCB*=bwl&C-xoA@s6*s1gg$sqRbdUKJi3mmTx7l; zHP^Fa+(U(KZxBbzgYGszneRt_M0R<>StxI?RDp1s1;MBHU^~5;-n_}zU^z@FN(&0E z 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≻d;ycWSqKxMrFva1_ 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 ttadbN)KkB`o93VPe`p>kARxCs`}iJdNs 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¶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

^SXbDKBsQ1XA*)qi2H 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

^CQo4_4}AmejKBGFmFAO&Abo0!5(&&~ltX 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 z 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�}ATq8*lvF&xo8oF6E9$Y=E)i$n%`e^<@k*Wk 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