From c931f0bdb1b78c78296e0f506664db7317a16dff Mon Sep 17 00:00:00 2001 From: yanzai Date: Tue, 11 Jun 2024 16:49:29 +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 --- Laravel/.editorconfig | 18 + Laravel/.env.example | 52 + Laravel/.gitattributes | 10 + Laravel/.gitignore | 15 + Laravel/.styleci.yml | 14 + Laravel/README.md | 64 + Laravel/app/Console/Commands/MakeService.php | 59 + .../app/Console/Commands/Stubs/services.stub | 7 + Laravel/app/Console/Kernel.php | 34 + Laravel/app/Exceptions/Handler.php | 41 + .../API/Admin/BaseInfoController.php | 38 + .../API/Admin/ConfigController.php | 23 + .../Controllers/API/Admin/GroupController.php | 45 + .../Controllers/API/Admin/LoginController.php | 21 + .../Controllers/API/Admin/MenuController.php | 45 + .../Controllers/API/Admin/UserController.php | 49 + .../API/Admin/YeWu/CheckItemController.php | 124 + .../API/Admin/YeWu/DepartmentController.php | 45 + .../YeWu/DepartmentResourceController.php | 62 + .../API/Admin/YeWu/DevicesController.php | 42 + .../API/Admin/YeWu/PlanListController.php | 473 + .../API/Admin/YeWu/PlanModelController.php | 270 + .../API/Admin/YeWu/TimePeriodController.php | 117 + .../API/Admin/YeWu/WorkMainController.php | 86 + .../API/Admin/YeWu/YuYueTypeController.php | 15 + .../Admin/YeWu/healthCalendarController.php | 47 + .../Http/Controllers/API/TokenController.php | 23 + .../Http/Controllers/API/UpLoadController.php | 30 + Laravel/app/Http/Controllers/Controller.php | 13 + .../app/Http/Controllers/TestController.php | 14 + Laravel/app/Http/Kernel.php | 70 + Laravel/app/Http/Middleware/Authenticate.php | 21 + Laravel/app/Http/Middleware/CheckSign.php | 35 + Laravel/app/Http/Middleware/CheckToken.php | 32 + .../app/Http/Middleware/EncryptCookies.php | 17 + Laravel/app/Http/Middleware/Log.php | 78 + .../PreventRequestsDuringMaintenance.php | 17 + .../Middleware/RedirectIfAuthenticated.php | 32 + Laravel/app/Http/Middleware/TrimStrings.php | 19 + Laravel/app/Http/Middleware/TrustHosts.php | 20 + Laravel/app/Http/Middleware/TrustProxies.php | 28 + .../app/Http/Middleware/VerifyCsrfToken.php | 17 + Laravel/app/Lib/JWT.php | 132 + Laravel/app/Lib/Tools.php | 66 + Laravel/app/Lib/Yz.php | 30 + Laravel/app/Models/User.php | 44 + Laravel/app/Providers/AppServiceProvider.php | 28 + Laravel/app/Providers/AuthServiceProvider.php | 30 + .../Providers/BroadcastServiceProvider.php | 21 + .../app/Providers/EventServiceProvider.php | 32 + .../app/Providers/RouteServiceProvider.php | 63 + Laravel/app/Services/Admin/GroupService.php | 72 + Laravel/app/Services/Admin/MenuService.php | 122 + Laravel/app/Services/Admin/UserService.php | 130 + .../Services/Admin/YeWu/CheckItemService.php | 80 + .../Admin/YeWu/DepartmentResourceService.php | 93 + .../Services/Admin/YeWu/DepartmentService.php | 65 + .../Services/Admin/YeWu/DevicesService.php | 51 + .../Admin/YeWu/HealthCalendarService.php | 138 + .../Services/Admin/YeWu/YuYueTypeService.php | 13 + Laravel/app/Services/ConfigService.php | 37 + Laravel/app/Services/LogService.php | 85 + Laravel/app/Services/Login/LoginService.php | 77 + Laravel/app/Services/TokenService.php | 43 + Laravel/artisan | 53 + Laravel/bootstrap/app.php | 55 + Laravel/bootstrap/cache/.gitignore | 2 + Laravel/composer.json | 65 + Laravel/composer.lock | 8427 +++++++++++++++++ Laravel/config/app.php | 249 + Laravel/config/auth.php | 111 + Laravel/config/broadcasting.php | 64 + Laravel/config/cache.php | 110 + Laravel/config/cors.php | 34 + Laravel/config/database.php | 147 + Laravel/config/filesystems.php | 73 + Laravel/config/hashing.php | 52 + Laravel/config/logging.php | 118 + Laravel/config/mail.php | 118 + Laravel/config/queue.php | 93 + Laravel/config/sanctum.php | 65 + Laravel/config/services.php | 33 + Laravel/config/session.php | 201 + Laravel/config/view.php | 36 + Laravel/database/.gitignore | 1 + Laravel/database/factories/UserFactory.php | 39 + .../2014_10_12_000000_create_users_table.php | 36 + ...12_100000_create_password_resets_table.php | 32 + ..._08_19_000000_create_failed_jobs_table.php | 36 + ...01_create_personal_access_tokens_table.php | 36 + Laravel/database/seeders/DatabaseSeeder.php | 18 + Laravel/package.json | 18 + Laravel/phpunit.xml | 31 + Laravel/public/.htaccess | 0 Laravel/public/favicon.ico | 0 Laravel/public/index.php | 55 + Laravel/public/jq_page/appointment.html | 490 + .../css/bootstrap-datetimepicker.min.css | 9 + .../js/bootstrap-datetimepicker.min.js | 1 + .../js/locales/bootstrap-datetimepicker.ar.js | 17 + .../js/locales/bootstrap-datetimepicker.az.js | 16 + .../js/locales/bootstrap-datetimepicker.bg.js | 16 + .../js/locales/bootstrap-datetimepicker.bn.js | 16 + .../js/locales/bootstrap-datetimepicker.ca.js | 16 + .../js/locales/bootstrap-datetimepicker.cs.js | 19 + .../js/locales/bootstrap-datetimepicker.da.js | 16 + .../js/locales/bootstrap-datetimepicker.de.js | 18 + .../js/locales/bootstrap-datetimepicker.ee.js | 18 + .../js/locales/bootstrap-datetimepicker.el.js | 15 + .../js/locales/bootstrap-datetimepicker.es.js | 16 + .../js/locales/bootstrap-datetimepicker.fi.js | 16 + .../js/locales/bootstrap-datetimepicker.fr.js | 18 + .../js/locales/bootstrap-datetimepicker.he.js | 17 + .../js/locales/bootstrap-datetimepicker.hr.js | 15 + .../js/locales/bootstrap-datetimepicker.hu.js | 17 + .../js/locales/bootstrap-datetimepicker.hy.js | 16 + .../js/locales/bootstrap-datetimepicker.id.js | 19 + .../js/locales/bootstrap-datetimepicker.is.js | 16 + .../js/locales/bootstrap-datetimepicker.it.js | 18 + .../js/locales/bootstrap-datetimepicker.ja.js | 16 + .../js/locales/bootstrap-datetimepicker.ka.js | 16 + .../js/locales/bootstrap-datetimepicker.ko.js | 17 + .../js/locales/bootstrap-datetimepicker.lt.js | 18 + .../js/locales/bootstrap-datetimepicker.lv.js | 18 + .../js/locales/bootstrap-datetimepicker.ms.js | 16 + .../js/locales/bootstrap-datetimepicker.nb.js | 16 + .../js/locales/bootstrap-datetimepicker.nl.js | 16 + .../js/locales/bootstrap-datetimepicker.no.js | 16 + .../js/locales/bootstrap-datetimepicker.pl.js | 17 + .../locales/bootstrap-datetimepicker.pt-BR.js | 17 + .../js/locales/bootstrap-datetimepicker.pt.js | 17 + .../js/locales/bootstrap-datetimepicker.ro.js | 17 + .../bootstrap-datetimepicker.rs-latin.js | 16 + .../js/locales/bootstrap-datetimepicker.rs.js | 16 + .../js/locales/bootstrap-datetimepicker.ru.js | 16 + .../js/locales/bootstrap-datetimepicker.sk.js | 19 + .../js/locales/bootstrap-datetimepicker.sl.js | 16 + .../js/locales/bootstrap-datetimepicker.sv.js | 16 + .../js/locales/bootstrap-datetimepicker.sw.js | 17 + .../js/locales/bootstrap-datetimepicker.th.js | 16 + .../js/locales/bootstrap-datetimepicker.tr.js | 17 + .../js/locales/bootstrap-datetimepicker.ua.js | 15 + .../js/locales/bootstrap-datetimepicker.uk.js | 16 + .../locales/bootstrap-datetimepicker.zh-CN.js | 16 + .../locales/bootstrap-datetimepicker.zh-TW.js | 16 + Laravel/public/nginx.htaccess | 8 + Laravel/public/report.pdf | Bin 0 -> 115311 bytes Laravel/public/robots.txt | 2 + Laravel/resources/css/app.css | 0 Laravel/resources/js/app.js | 1 + Laravel/resources/js/bootstrap.js | 28 + Laravel/resources/lang/en/auth.php | 20 + Laravel/resources/lang/en/pagination.php | 19 + Laravel/resources/lang/en/passwords.php | 22 + Laravel/resources/lang/en/validation.php | 163 + Laravel/resources/views/welcome.blade.php | 132 + Laravel/routes/api.php | 102 + Laravel/routes/channels.php | 18 + Laravel/routes/console.php | 19 + Laravel/routes/web.php | 28 + Laravel/server.php | 21 + Laravel/storage/app/.gitignore | 3 + Laravel/storage/framework/.gitignore | 9 + Laravel/storage/framework/cache/.gitignore | 3 + .../storage/framework/cache/data/.gitignore | 2 + Laravel/storage/framework/sessions/.gitignore | 2 + Laravel/storage/framework/testing/.gitignore | 2 + Laravel/storage/framework/views/.gitignore | 2 + Laravel/storage/logs/.gitignore | 2 + Laravel/tests/CreatesApplication.php | 22 + Laravel/tests/Feature/ExampleTest.php | 21 + Laravel/tests/TestCase.php | 10 + Laravel/tests/Unit/ExampleTest.php | 18 + Laravel/webpack.mix.js | 17 + YiJi-admin/.env.development | 3 + YiJi-admin/.env.production | 4 + YiJi-admin/.eslintrc.cjs | 14 + YiJi-admin/.gitignore | 28 + YiJi-admin/.prettierrc.json | 8 + YiJi-admin/.vscode/extensions.json | 8 + YiJi-admin/README.md | 35 + YiJi-admin/index.html | 13 + YiJi-admin/package-lock.json | 3349 +++++++ YiJi-admin/package.json | 32 + YiJi-admin/public/favicon.ico | Bin 0 -> 4286 bytes YiJi-admin/public/js/xtxsync.js | 984 ++ YiJi-admin/src/App.vue | 90 + YiJi-admin/src/api/api.js | 276 + YiJi-admin/src/assets/backg_l.jpg | Bin 0 -> 159532 bytes YiJi-admin/src/assets/base.css | 92 + YiJi-admin/src/assets/loginBackg.png | Bin 0 -> 126290 bytes YiJi-admin/src/assets/logo.png | Bin 0 -> 7050 bytes YiJi-admin/src/assets/logo.svg | 1 + YiJi-admin/src/assets/main.css | 35 + YiJi-admin/src/assets/user.jpg | Bin 0 -> 36407 bytes YiJi-admin/src/components/HelloWorld.vue | 44 + YiJi-admin/src/components/IconList.vue | 66 + YiJi-admin/src/components/TheWelcome.vue | 88 + YiJi-admin/src/components/WelcomeItem.vue | 86 + .../Yewu/DepartmentResourcesSave.vue | 128 + .../src/components/icons/IconCommunity.vue | 7 + .../components/icons/IconDocumentation.vue | 7 + .../src/components/icons/IconEcosystem.vue | 7 + .../src/components/icons/IconSupport.vue | 7 + .../src/components/icons/IconTooling.vue | 19 + YiJi-admin/src/main.js | 23 + YiJi-admin/src/router/index.js | 187 + YiJi-admin/src/stores/counter.js | 12 + YiJi-admin/src/stores/index.js | 14 + YiJi-admin/src/style/dark/css-vars.css | 15 + YiJi-admin/src/tools/Tools.js | 3 + YiJi-admin/src/tools/axios.js | 117 + YiJi-admin/src/views/AboutView.vue | 15 + .../views/AppointmentMngr/HealthCalendar.vue | 404 + .../src/views/AppointmentMngr/PlanList.vue | 452 + .../src/views/AppointmentMngr/PlanModel.vue | 620 ++ .../src/views/AppointmentMngr/RatioMngr.vue | 80 + .../views/AppointmentMngr/TimePeriodMngr.vue | 204 + YiJi-admin/src/views/HomeView.vue | 9 + YiJi-admin/src/views/Index.vue | 330 + YiJi-admin/src/views/Login.vue | 146 + .../src/views/MedicalCenter/Dashboard.vue | 174 + .../src/views/SystemMngr/Group/List.vue | 159 + YiJi-admin/src/views/SystemMngr/Menu/List.vue | 163 + .../src/views/SystemMngr/SystemConfig.vue | 129 + .../src/views/SystemMngr/User/ChangPwd.vue | 198 + YiJi-admin/src/views/SystemMngr/User/List.vue | 173 + YiJi-admin/src/views/YeWu/CheckItemConfig.vue | 457 + .../src/views/YeWu/DepartmentConfig.vue | 325 + .../src/views/YeWu/DepartmentResources.vue | 268 + YiJi-admin/src/views/YeWu/DevicesConfig.vue | 168 + YiJi-admin/src/views/YeWu/MainList.vue | 308 + YiJi-admin/vite.config.js | 33 + 233 files changed, 26719 insertions(+) create mode 100644 Laravel/.editorconfig create mode 100644 Laravel/.env.example create mode 100644 Laravel/.gitattributes create mode 100644 Laravel/.gitignore create mode 100644 Laravel/.styleci.yml create mode 100644 Laravel/README.md create mode 100644 Laravel/app/Console/Commands/MakeService.php create mode 100644 Laravel/app/Console/Commands/Stubs/services.stub create mode 100644 Laravel/app/Console/Kernel.php create mode 100644 Laravel/app/Exceptions/Handler.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/BaseInfoController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/ConfigController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/GroupController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/LoginController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/MenuController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/UserController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/YeWu/CheckItemController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/YeWu/DepartmentController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/YeWu/DepartmentResourceController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/YeWu/DevicesController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/YeWu/PlanListController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/YeWu/PlanModelController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/YeWu/TimePeriodController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/YeWu/WorkMainController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/YeWu/YuYueTypeController.php create mode 100644 Laravel/app/Http/Controllers/API/Admin/YeWu/healthCalendarController.php create mode 100644 Laravel/app/Http/Controllers/API/TokenController.php create mode 100644 Laravel/app/Http/Controllers/API/UpLoadController.php create mode 100644 Laravel/app/Http/Controllers/Controller.php create mode 100644 Laravel/app/Http/Controllers/TestController.php create mode 100644 Laravel/app/Http/Kernel.php create mode 100644 Laravel/app/Http/Middleware/Authenticate.php create mode 100644 Laravel/app/Http/Middleware/CheckSign.php create mode 100644 Laravel/app/Http/Middleware/CheckToken.php create mode 100644 Laravel/app/Http/Middleware/EncryptCookies.php create mode 100644 Laravel/app/Http/Middleware/Log.php create mode 100644 Laravel/app/Http/Middleware/PreventRequestsDuringMaintenance.php create mode 100644 Laravel/app/Http/Middleware/RedirectIfAuthenticated.php create mode 100644 Laravel/app/Http/Middleware/TrimStrings.php create mode 100644 Laravel/app/Http/Middleware/TrustHosts.php create mode 100644 Laravel/app/Http/Middleware/TrustProxies.php create mode 100644 Laravel/app/Http/Middleware/VerifyCsrfToken.php create mode 100644 Laravel/app/Lib/JWT.php create mode 100644 Laravel/app/Lib/Tools.php create mode 100644 Laravel/app/Lib/Yz.php create mode 100644 Laravel/app/Models/User.php create mode 100644 Laravel/app/Providers/AppServiceProvider.php create mode 100644 Laravel/app/Providers/AuthServiceProvider.php create mode 100644 Laravel/app/Providers/BroadcastServiceProvider.php create mode 100644 Laravel/app/Providers/EventServiceProvider.php create mode 100644 Laravel/app/Providers/RouteServiceProvider.php create mode 100644 Laravel/app/Services/Admin/GroupService.php create mode 100644 Laravel/app/Services/Admin/MenuService.php create mode 100644 Laravel/app/Services/Admin/UserService.php create mode 100644 Laravel/app/Services/Admin/YeWu/CheckItemService.php create mode 100644 Laravel/app/Services/Admin/YeWu/DepartmentResourceService.php create mode 100644 Laravel/app/Services/Admin/YeWu/DepartmentService.php create mode 100644 Laravel/app/Services/Admin/YeWu/DevicesService.php create mode 100644 Laravel/app/Services/Admin/YeWu/HealthCalendarService.php create mode 100644 Laravel/app/Services/Admin/YeWu/YuYueTypeService.php create mode 100644 Laravel/app/Services/ConfigService.php create mode 100644 Laravel/app/Services/LogService.php create mode 100644 Laravel/app/Services/Login/LoginService.php create mode 100644 Laravel/app/Services/TokenService.php create mode 100644 Laravel/artisan create mode 100644 Laravel/bootstrap/app.php create mode 100644 Laravel/bootstrap/cache/.gitignore create mode 100644 Laravel/composer.json create mode 100644 Laravel/composer.lock create mode 100644 Laravel/config/app.php create mode 100644 Laravel/config/auth.php create mode 100644 Laravel/config/broadcasting.php create mode 100644 Laravel/config/cache.php create mode 100644 Laravel/config/cors.php create mode 100644 Laravel/config/database.php create mode 100644 Laravel/config/filesystems.php create mode 100644 Laravel/config/hashing.php create mode 100644 Laravel/config/logging.php create mode 100644 Laravel/config/mail.php create mode 100644 Laravel/config/queue.php create mode 100644 Laravel/config/sanctum.php create mode 100644 Laravel/config/services.php create mode 100644 Laravel/config/session.php create mode 100644 Laravel/config/view.php create mode 100644 Laravel/database/.gitignore create mode 100644 Laravel/database/factories/UserFactory.php create mode 100644 Laravel/database/migrations/2014_10_12_000000_create_users_table.php create mode 100644 Laravel/database/migrations/2014_10_12_100000_create_password_resets_table.php create mode 100644 Laravel/database/migrations/2019_08_19_000000_create_failed_jobs_table.php create mode 100644 Laravel/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php create mode 100644 Laravel/database/seeders/DatabaseSeeder.php create mode 100644 Laravel/package.json create mode 100644 Laravel/phpunit.xml create mode 100644 Laravel/public/.htaccess create mode 100644 Laravel/public/favicon.ico create mode 100644 Laravel/public/index.php create mode 100644 Laravel/public/jq_page/appointment.html create mode 100644 Laravel/public/jq_page/css/bootstrap-datetimepicker.min.css create mode 100644 Laravel/public/jq_page/js/bootstrap-datetimepicker.min.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ar.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.az.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.bg.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.bn.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ca.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.cs.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.da.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.de.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ee.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.el.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.es.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.fi.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.fr.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.he.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.hr.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.hu.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.hy.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.id.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.is.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.it.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ja.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ka.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ko.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.lt.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.lv.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ms.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.nb.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.nl.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.no.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.pl.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.pt-BR.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.pt.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ro.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.rs-latin.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.rs.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ru.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.sk.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.sl.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.sv.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.sw.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.th.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.tr.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ua.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.uk.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.zh-CN.js create mode 100644 Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.zh-TW.js create mode 100644 Laravel/public/nginx.htaccess create mode 100644 Laravel/public/report.pdf create mode 100644 Laravel/public/robots.txt create mode 100644 Laravel/resources/css/app.css create mode 100644 Laravel/resources/js/app.js create mode 100644 Laravel/resources/js/bootstrap.js create mode 100644 Laravel/resources/lang/en/auth.php create mode 100644 Laravel/resources/lang/en/pagination.php create mode 100644 Laravel/resources/lang/en/passwords.php create mode 100644 Laravel/resources/lang/en/validation.php create mode 100644 Laravel/resources/views/welcome.blade.php create mode 100644 Laravel/routes/api.php create mode 100644 Laravel/routes/channels.php create mode 100644 Laravel/routes/console.php create mode 100644 Laravel/routes/web.php create mode 100644 Laravel/server.php create mode 100644 Laravel/storage/app/.gitignore create mode 100644 Laravel/storage/framework/.gitignore create mode 100644 Laravel/storage/framework/cache/.gitignore create mode 100644 Laravel/storage/framework/cache/data/.gitignore create mode 100644 Laravel/storage/framework/sessions/.gitignore create mode 100644 Laravel/storage/framework/testing/.gitignore create mode 100644 Laravel/storage/framework/views/.gitignore create mode 100644 Laravel/storage/logs/.gitignore create mode 100644 Laravel/tests/CreatesApplication.php create mode 100644 Laravel/tests/Feature/ExampleTest.php create mode 100644 Laravel/tests/TestCase.php create mode 100644 Laravel/tests/Unit/ExampleTest.php create mode 100644 Laravel/webpack.mix.js create mode 100644 YiJi-admin/.env.development create mode 100644 YiJi-admin/.env.production create mode 100644 YiJi-admin/.eslintrc.cjs create mode 100644 YiJi-admin/.gitignore create mode 100644 YiJi-admin/.prettierrc.json create mode 100644 YiJi-admin/.vscode/extensions.json create mode 100644 YiJi-admin/README.md create mode 100644 YiJi-admin/index.html create mode 100644 YiJi-admin/package-lock.json create mode 100644 YiJi-admin/package.json create mode 100644 YiJi-admin/public/favicon.ico create mode 100644 YiJi-admin/public/js/xtxsync.js create mode 100644 YiJi-admin/src/App.vue create mode 100644 YiJi-admin/src/api/api.js create mode 100644 YiJi-admin/src/assets/backg_l.jpg create mode 100644 YiJi-admin/src/assets/base.css create mode 100644 YiJi-admin/src/assets/loginBackg.png create mode 100644 YiJi-admin/src/assets/logo.png create mode 100644 YiJi-admin/src/assets/logo.svg create mode 100644 YiJi-admin/src/assets/main.css create mode 100644 YiJi-admin/src/assets/user.jpg create mode 100644 YiJi-admin/src/components/HelloWorld.vue create mode 100644 YiJi-admin/src/components/IconList.vue create mode 100644 YiJi-admin/src/components/TheWelcome.vue create mode 100644 YiJi-admin/src/components/WelcomeItem.vue create mode 100644 YiJi-admin/src/components/Yewu/DepartmentResourcesSave.vue create mode 100644 YiJi-admin/src/components/icons/IconCommunity.vue create mode 100644 YiJi-admin/src/components/icons/IconDocumentation.vue create mode 100644 YiJi-admin/src/components/icons/IconEcosystem.vue create mode 100644 YiJi-admin/src/components/icons/IconSupport.vue create mode 100644 YiJi-admin/src/components/icons/IconTooling.vue create mode 100644 YiJi-admin/src/main.js create mode 100644 YiJi-admin/src/router/index.js create mode 100644 YiJi-admin/src/stores/counter.js create mode 100644 YiJi-admin/src/stores/index.js create mode 100644 YiJi-admin/src/style/dark/css-vars.css create mode 100644 YiJi-admin/src/tools/Tools.js create mode 100644 YiJi-admin/src/tools/axios.js create mode 100644 YiJi-admin/src/views/AboutView.vue create mode 100644 YiJi-admin/src/views/AppointmentMngr/HealthCalendar.vue create mode 100644 YiJi-admin/src/views/AppointmentMngr/PlanList.vue create mode 100644 YiJi-admin/src/views/AppointmentMngr/PlanModel.vue create mode 100644 YiJi-admin/src/views/AppointmentMngr/RatioMngr.vue create mode 100644 YiJi-admin/src/views/AppointmentMngr/TimePeriodMngr.vue create mode 100644 YiJi-admin/src/views/HomeView.vue create mode 100644 YiJi-admin/src/views/Index.vue create mode 100644 YiJi-admin/src/views/Login.vue create mode 100644 YiJi-admin/src/views/MedicalCenter/Dashboard.vue create mode 100644 YiJi-admin/src/views/SystemMngr/Group/List.vue create mode 100644 YiJi-admin/src/views/SystemMngr/Menu/List.vue create mode 100644 YiJi-admin/src/views/SystemMngr/SystemConfig.vue create mode 100644 YiJi-admin/src/views/SystemMngr/User/ChangPwd.vue create mode 100644 YiJi-admin/src/views/SystemMngr/User/List.vue create mode 100644 YiJi-admin/src/views/YeWu/CheckItemConfig.vue create mode 100644 YiJi-admin/src/views/YeWu/DepartmentConfig.vue create mode 100644 YiJi-admin/src/views/YeWu/DepartmentResources.vue create mode 100644 YiJi-admin/src/views/YeWu/DevicesConfig.vue create mode 100644 YiJi-admin/src/views/YeWu/MainList.vue create mode 100644 YiJi-admin/vite.config.js diff --git a/Laravel/.editorconfig b/Laravel/.editorconfig new file mode 100644 index 0000000..1671c9b --- /dev/null +++ b/Laravel/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[docker-compose.yml] +indent_size = 4 diff --git a/Laravel/.env.example b/Laravel/.env.example new file mode 100644 index 0000000..b7becba --- /dev/null +++ b/Laravel/.env.example @@ -0,0 +1,52 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=laravel +DB_USERNAME=root +DB_PASSWORD= + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +FILESYSTEM_DRIVER=local +QUEUE_CONNECTION=sync +SESSION_DRIVER=file +SESSION_LIFETIME=120 + +MEMCACHED_HOST=127.0.0.1 + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=smtp +MAIL_HOST=mailhog +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS=null +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_APP_CLUSTER=mt1 + +MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" diff --git a/Laravel/.gitattributes b/Laravel/.gitattributes new file mode 100644 index 0000000..510d996 --- /dev/null +++ b/Laravel/.gitattributes @@ -0,0 +1,10 @@ +* text=auto + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore +CHANGELOG.md export-ignore diff --git a/Laravel/.gitignore b/Laravel/.gitignore new file mode 100644 index 0000000..eb003b0 --- /dev/null +++ b/Laravel/.gitignore @@ -0,0 +1,15 @@ +/node_modules +/public/hot +/public/storage +/storage/*.key +/vendor +.env +.env.backup +.phpunit.result.cache +docker-compose.override.yml +Homestead.json +Homestead.yaml +npm-debug.log +yarn-error.log +/.idea +/.vscode diff --git a/Laravel/.styleci.yml b/Laravel/.styleci.yml new file mode 100644 index 0000000..877ea70 --- /dev/null +++ b/Laravel/.styleci.yml @@ -0,0 +1,14 @@ +php: + preset: laravel + version: 8 + disabled: + - no_unused_imports + finder: + not-name: + - index.php + - server.php +js: + finder: + not-name: + - webpack.mix.js +css: true diff --git a/Laravel/README.md b/Laravel/README.md new file mode 100644 index 0000000..1b6397c --- /dev/null +++ b/Laravel/README.md @@ -0,0 +1,64 @@ +

+ +

+Build Status +Total Downloads +Latest Stable Version +License +

+ +## About Laravel + +Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: + +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). + +Laravel is accessible, powerful, and provides tools required for large, robust applications. + +## Learning Laravel + +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. + +If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 1500 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. + +## Laravel Sponsors + +We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell). + +### Premium Partners + +- **[Vehikl](https://vehikl.com/)** +- **[Tighten Co.](https://tighten.co)** +- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** +- **[64 Robots](https://64robots.com)** +- **[Cubet Techno Labs](https://cubettech.com)** +- **[Cyber-Duck](https://cyber-duck.co.uk)** +- **[Many](https://www.many.co.uk)** +- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)** +- **[DevSquad](https://devsquad.com)** +- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** +- **[OP.GG](https://op.gg)** +- **[WebReinvent](https://webreinvent.com/?utm_source=laravel&utm_medium=github&utm_campaign=patreon-sponsors)** +- **[Lendio](https://lendio.com)** + +## Contributing + +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. + +## License + +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/Laravel/app/Console/Commands/MakeService.php b/Laravel/app/Console/Commands/MakeService.php new file mode 100644 index 0000000..893c916 --- /dev/null +++ b/Laravel/app/Console/Commands/MakeService.php @@ -0,0 +1,59 @@ +command('inspire')->hourly(); + } + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands() + { + $this->load(__DIR__.'/Commands'); + MakeService::class; + + require base_path('routes/console.php'); + + } +} diff --git a/Laravel/app/Exceptions/Handler.php b/Laravel/app/Exceptions/Handler.php new file mode 100644 index 0000000..8e7fbd1 --- /dev/null +++ b/Laravel/app/Exceptions/Handler.php @@ -0,0 +1,41 @@ +> + */ + protected $dontReport = [ + // + ]; + + /** + * A list of the inputs that are never flashed for validation exceptions. + * + * @var array + */ + protected $dontFlash = [ + 'current_password', + 'password', + 'password_confirmation', + ]; + + /** + * Register the exception handling callbacks for the application. + * + * @return void + */ + public function register() + { + $this->reportable(function (Throwable $e) { + // + }); + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/BaseInfoController.php b/Laravel/app/Http/Controllers/API/Admin/BaseInfoController.php new file mode 100644 index 0000000..2dfd5bd --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/BaseInfoController.php @@ -0,0 +1,38 @@ +get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $s=app()->make(MenuService::class); + // dd($s->GetBaseMenuList(['userid'=>$userid,'group'=>$group])); + return $s->GetBaseMenuList(['userid'=>$userid,'group'=>$group]); + + } + //获取自身基本信息 + public function GetBaseUserInfo(Request $request){ + $userid = $request->get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $s=app()->make(UserService::class); + return $s->GetDetail(['id'=>$userid]); + + } + + //检查用户是否有某个目录的权限 + public function CheckMenuAuth(Request $request){ + $userid = $request->get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $url= request('url'); + $s=app()->make(UserService::class); + return $s->CheckMenuAuth(['userid'=>$userid,'group'=>$group,'url'=>$url]); + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/ConfigController.php b/Laravel/app/Http/Controllers/API/Admin/ConfigController.php new file mode 100644 index 0000000..57ae4d1 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/ConfigController.php @@ -0,0 +1,23 @@ +GetConfigInfo(['站点名称','站点图片']); + } + public function SaveConfig(){ + $name = request('name'); + $logo = request('logo'); + $configs = new ConfigService(); + return $configs->SaveConfig($name,$logo); + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/GroupController.php b/Laravel/app/Http/Controllers/API/Admin/GroupController.php new file mode 100644 index 0000000..d767f84 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/GroupController.php @@ -0,0 +1,45 @@ +make(GroupService::class); + return $s->GetList(['type'=>$type,'page'=>$page,'pagesize'=>$pagesize]); + } + public function ChangeMenu(Request $request){ + $userid = $request->get('userid');//中间件产生的参数 + $group =request('groupId'); + $menuList =request('menuList'); + $s=app()->make(GroupService::class); + return $s->ChangeMenu(['groupid'=>$group,'menuList'=>$menuList]); + } + public function Save(){ + $groupInfo =request('groupInfo'); + $type =request('type'); + $s=app()->make(GroupService::class); + return $s->Save(['info'=>$groupInfo,'type'=>$type]); + + } + //管理员查询分组使用的菜单 + public function GetGroupMenuList(){ + $groupId =request('groupId'); + if($groupId){ + $group =$groupId; + $userid='search'; + $s=app()->make(MenuService::class); + // dd($s->GetBaseMenuList(['userid'=>$userid,'group'=>$group])); + return $s->GetBaseMenuList(['userid'=>$userid,'group'=>$group]); + } + + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/LoginController.php b/Laravel/app/Http/Controllers/API/Admin/LoginController.php new file mode 100644 index 0000000..ca7caec --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/LoginController.php @@ -0,0 +1,21 @@ +make(LoginService::class); + //$login= new LoginService(); + return Yz::echo($login->Login(['username'=>$username,'password'=>$password])); + } + +} diff --git a/Laravel/app/Http/Controllers/API/Admin/MenuController.php b/Laravel/app/Http/Controllers/API/Admin/MenuController.php new file mode 100644 index 0000000..a5419ca --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/MenuController.php @@ -0,0 +1,45 @@ +make(MenuService::class); + return $s->GetList(['type'=>$type,'page'=>$page,'pagesize'=>$pagesize]); + } + //获取可用的一级菜单 + public function GetFatherMenuList(){ + $s=app()->make(MenuService::class); + return $s->GetFatherMenuList(); + } + public function AddMenu(){ + $menuInfo =request('menuInfo'); + if($menuInfo['id']){ + if(!($menuInfo['name'] and $menuInfo['pid'] and $menuInfo['url'])){ + return Yz::echoError('请填写全部信息'); + } + }else{ + if(!($menuInfo['name'])){ + return Yz::echoError('请填写全部信息'); + } + } + $s=app()->make(MenuService::class); + return $s->AddMenu(['info'=>$menuInfo]); + } + public function EditMenu(){ + $menuInfo =request('menuInfo'); + $s=app()->make(MenuService::class); + return $s->EditMenu(['info'=>$menuInfo]); + } + +} diff --git a/Laravel/app/Http/Controllers/API/Admin/UserController.php b/Laravel/app/Http/Controllers/API/Admin/UserController.php new file mode 100644 index 0000000..d1bd529 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/UserController.php @@ -0,0 +1,49 @@ +make(UserService::class); + return $s->GetInfoList(['page'=>$page,'pagesize'=>$pagesize]); + } + public function Save(){ + $userInfo =request('userInfo'); + $s=app()->make(UserService::class); + return $s->Save(['info'=>$userInfo]); + } + public function GetDetail(){ + $id =request('id'); + $s=app()->make(UserService::class); + return $s->GetDetail(['id'=>$id]); + } + public function ChangePwd(Request $request){ //admin修改密码 + $userid = $request->get('userid');//中间件产生的参数 + $oldpwd =request('oldpwd'); + $newpwd =request('newpwd'); + if($oldpwd and $newpwd){ + $s=app()->make(UserService::class); + return $s->ChangePwd(['id'=>$userid,'oldpwd'=>$oldpwd,'newpwd'=>$newpwd]); + }else{ + return \Yz::echoError("参数不完整"); + } + + } + + //修改自身信息 + public function ChangInfo(Request $request){ + $userid = $request->get('userid');//中间件产生的参数 + $headimg =request('headimg'); + $name =request('name'); + if(!isset($name)) return \Yz::echoError1('名称不可为空'); + $ser=new UserService(); + return $ser->ChangInfo(['userid'=>$userid,'name'=>$name,'headimg'=>$headimg]); + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/CheckItemController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/CheckItemController.php new file mode 100644 index 0000000..af80f08 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/CheckItemController.php @@ -0,0 +1,124 @@ +GetClassList($searchInfo); + } + + //获取检查项目列表 + public function GetItemList() + { + $page = request('page'); + $pageSize = request('pageSize'); + $searchInfo = request('searchInfo'); + $s = new CheckItemService; + return $s->GetItemList($searchInfo, $page, $pageSize); + } + + //绑定设备 + public function BindDevice() + { + $item_id = request('item_id'); + $device_ids = request('device_ids'); + $s = new CheckItemService; + return $s->BindDevice($item_id, $device_ids); + } + + //保存检查项目信息 + public function Save() + { + $Info = request('Info'); + $s = new CheckItemService; + return $s->Save($Info); + } + + //设置互斥 + public function SetHuChi(Request $request) + { + $userid = $request->get('userid');//中间件产生的参数 + $code1 = request('code1'); + $code2 = request('code2'); + $time = request('time'); + if(!isset($time)) return \Yz::echoError1("时间不能为空"); + + $q = DB::table('s_huchi') + ->where('is_del', 0) + ->where(function ($query) use ($code1, $code2) { + $query->where('code1', $code1)->where('code2', $code2); + }) + ->orWhere(function ($query) use ($code1, $code2) { + $query->where('code1', $code2)->where('code2', $code1); + }) + ->get(); + + if (count($q) > 0) return \Yz::echoError1("此条互斥已存在,请删除后再添加!"); + $i = DB::table('s_huchi')->insert([ + 'code1' => $code1, + 'code2' => $code2, + 'time' => $time, + 'is_del' => 0, + 'add_user' => $userid, + ]); + if ($i) { + return \Yz::Return(true, '设置成功', []); + } else { + return \Yz::echoError1("添加失败"); + } + + } + + public function DelHuChi() + { + $id = request('id'); + $u = DB::table('s_huchi') + ->where('id', $id) + ->update([ + 'is_del' => 1 + ]); + + if ($u) { + return \Yz::Return(true, '操作成功', []); + } else { + return \Yz::echoError1("操作失败"); + } + } + + //获取某个项目已经设置的互斥列表 + public function GetHuChiList() + { + $code = request('code'); + $q=DB::select("SELECT + s_huchi.code1, + COALESCE(ci1.item_name, '未找到') AS code1_item_name, + s_huchi.code2, + COALESCE(ci2.item_name, '未找到') AS code2_item_name,time,s_huchi.id +FROM + s_huchi +LEFT JOIN + s_check_item AS ci1 +ON + s_huchi.code1 = ci1.item_code +LEFT JOIN + s_check_item AS ci2 +ON + s_huchi.code2 = ci2.item_code +WHERE + s_huchi.is_del = 0 AND + (s_huchi.code1 = ? OR s_huchi.code2 = ?)",[$code,$code]); + + return \Yz::Return(true, '操作成功', $q); + + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/DepartmentController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/DepartmentController.php new file mode 100644 index 0000000..6f459ed --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/DepartmentController.php @@ -0,0 +1,45 @@ +GetList($searchInfo,$page,$pageSize); + } + //获取启用的科室列表 + public function GetEnableList(Request $request) + { + $userid = $request->get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $service = new DepartmentService(); + return $service->GetEnableList(['userid'=>$userid,'group'=>$group]); + } + + //保存科室信息 + public function Save() + { + $info =request('info'); + $service = new DepartmentService(); + return $service->Save($info); + } + public function Del() + { + $id =request('id'); + $service = new DepartmentService(); + return $service->Del($id); + } + + +} diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/DepartmentResourceController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/DepartmentResourceController.php new file mode 100644 index 0000000..817e774 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/DepartmentResourceController.php @@ -0,0 +1,62 @@ +get('userid');//中间件产生的参数 + $info =request('info'); + $service = new DepartmentResourceService(); + return $service->Save($info,$userid); + } + public function GetList() + { + $page =request('page'); + $pageSize =request('pageSize'); + $searchInfo =request('searchInfo'); + $service = new DepartmentResourceService(); + return $service->GetList($searchInfo,$page,$pageSize); + } + public function GetEnableList(Request $request) + { + $userid = $request->get('userid');//中间件产生的参数 + $userInfo = DB::table('users')->where(['id' => $userid])->first(); + if(!isset($userInfo->department_id)){ + return \Yz::echoError1('科室信息不存在'); + } + $resource=DB::table('s_department_resources')->where(['department_id'=>$userInfo->department_id,'department_resources_status'=>1,'is_del'=>0])->get(); + if(count($resource)>0){ + return \Yz::Return(true, '操作成功',$resource); + }else{ + return \Yz::echoError1('获取科室资源失败'); + } + } + public function Del() + { + $id =request('id'); + $service = new DepartmentResourceService(); + return $service->Del($id); + } + public function BindDevice() + { + $department_id =request('department_id'); + $resource_id =request('resource_id'); + $device_ids = request('device_ids'); + $service = new DepartmentResourceService(); + return $service->BindDevice($department_id,$resource_id,$device_ids); + } + //获取诊室关联的服务组(设备) + public function GetBindDeviceList() + { + $resource_id =request('resource_id'); + $service = new DepartmentResourceService(); + return $service->GetBindDeviceList($resource_id); + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/DevicesController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/DevicesController.php new file mode 100644 index 0000000..f9b4a9a --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/DevicesController.php @@ -0,0 +1,42 @@ +GetList($searchInfo, $page, $pageSize); + } + + //获取启用的设备列表 + public function GetEnableList() + { + $service = new DevicesService(); + return $service->GetEnableList(); + } + + public function Save(Request $request) + { + $userid = $request->get('userid');//中间件产生的参数 + $data = request('Info'); + $service = new DevicesService(); + return $service->Save($data, $userid); + } + + public function Del() + { + $id = request('id'); + $service = new DevicesService(); + return $service->Del($id); + } + +} diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/PlanListController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/PlanListController.php new file mode 100644 index 0000000..1c8c1b7 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/PlanListController.php @@ -0,0 +1,473 @@ +get('userid');//中间件产生的参数 + $userInfo = DB::table('users')->where(['id' => $userid])->get(); + $department_id = $userInfo[0]->department_id; + $dateRange = request('dateRange'); + $planModelIds = request('ids'); + //循环日期和勾选的模板创建明细 + if (count($dateRange) == 2 && count($planModelIds) > 0) { + $models = DB::table('s_source_roster')->whereIn('id', $planModelIds)->get(); + //检查是否有异常状态模板 + foreach ($models as $model) { + if ($model->status != 1 || $model->is_del != 0) { + return \Yz::echoError1('模板状态异常,请重新选择!异常模板Id:' . $model->id); + } + } + $start_date = new DateTime($dateRange[0]); + $end_date = new DateTime($dateRange[1]); + // 循环日期并判断星期 + $current_date = clone $start_date; + DB::beginTransaction(); + while ($current_date <= $end_date) { + // 获取当前日期的星期几(0表示星期日,1表示星期一,以此类推) + $weekday = $current_date->format('w'); + $weekname = ''; + switch ($weekday) { + case 0: + $weekname = '星期日'; + break; + case 1: + $weekname = '星期一'; + break; + case 2: + $weekname = '星期二'; + break; + case 3: + $weekname = '星期三'; + break; + case 4: + $weekname = '星期四'; + break; + case 5: + $weekname = '星期五'; + break; + case 6: + $weekname = '星期六'; + break; + } + foreach ($models as $model) { + if ($model->weekname == $weekname) { + // 插入明细表 + $data = [ + 'roster_id' => $model->id, + 'date' => $current_date, + 'weekname' => $weekname, + 'department_id' => $model->department_id, + 'resources_id' => $model->resources_id, + 'device_id' => $model->device_id, + 'period_id' => $model->period_id, + 'patient_type' => $model->patient_type, + 'begin_time' => $model->begin_time, + 'end_time' => $model->end_time, + 'end_reservation_time' => $model->end_reservation_time, + 'time_unit' => $model->time_unit, + 'status' => 1, + 'adduser' => $userid, + 'is_del' => 0, + ]; + $plan_id = DB::table('s_source_roster_detail')->insertGetId($data); + // 插入数量表 + $model_count_info = DB::table('s_source_roster_count')->where(['roster_id' => $model->id])->get(); + if (count($model_count_info) > 0) { + foreach ($model_count_info as $info) { + $i_c = DB::table('s_source_roster_detail_count')->insert([ + 'roster_detail_id' => $plan_id, + 'appointment_type_id' => $info->appointment_type_id, + 'count' => $info->count, + 'max_total' => $info->max_total, + ]); + if (!$i_c) { + DB::rollBack(); + return \Yz::echoError1('保存失败'); + } + } + } else { + DB::rollBack(); + return \Yz::echoError1('模板数量信息异常,请重新选择!异常模板Id:' . $model->id); + } + + } + } + // 将当前日期增加一天 + $current_date->modify('+1 day'); + } + DB::commit(); + return \Yz::Return(true, '保存成功', []); + } + } + + public function GetList(Request $request) + { + $userid = $request->get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $searchInfo = request('searchInfo'); + $page = request('page'); + $pageSize = request('pageSize'); + $department_id = 0; + $list = DB::table('s_source_roster_detail') + ->leftJoin('s_department_resources', 's_source_roster_detail.resources_id', '=', 's_department_resources.id') + // ->leftJoin('s_devices', 's_source_roster_detail.device_id', '=', 's_devices.id') + ->leftJoin('s_period', 's_source_roster_detail.period_id', '=', 's_period.id') + ->select('s_source_roster_detail.*', 's_department_resources.department_resources_name', 's_period.period_name') + ->where(['s_source_roster_detail.is_del' => 0]); + if ($group == 1) {//如果是管理员 + if (!empty($searchInfo['department_id'])) { + $list = $list->where('s_source_roster_detail.department_id', $searchInfo['department_id']); + } + + } else { + $userInfo = DB::table('users')->where(['id' => $userid])->get(); + $department_id = $userInfo[0]->department_id; + $list = $list->where(['s_source_roster_detail.department_id' => $department_id]); + } + if (!empty($searchInfo['resources_id'])) { + $list = $list->where('s_source_roster_detail.resources_id', $searchInfo['resources_id']); + } + if (!empty($searchInfo['device_id'])) { + //$list = $list->where('s_source_roster_detail.device_id', 'like','%,'.$searchInfo['device_id'].',%' ); + $list = $list->whereRaw("FIND_IN_SET({$searchInfo['device_id']}, s_source_roster_detail.device_id)"); + } + if (!empty($searchInfo['xingqi'])) { + $list = $list->where('s_source_roster_detail.weekname', $searchInfo['xingqi']); + } + if (isset($searchInfo['status'])) { + $list = $list->where('s_source_roster_detail.status', $searchInfo['status']); + } + if (count($searchInfo['dateRange']) == 2) { + $list = $list->whereBetween('s_source_roster_detail.date', $searchInfo['dateRange']); + } + + $count = $list; + $count = $count->count(); + $list = $list->orderBy('id', 'desc')->limit($pageSize)->skip(($page - 1) * $pageSize) // 跳过前9999条记录 + ->take($pageSize)->get(); + $ids = []; + foreach ($list as $key => $value) { + $list[$key]->countsInfo = []; + $ids[] = $value->id; + } + //匹配渠道数量 + $countsInfo = DB::table('s_source_roster_detail_count') + ->leftJoin('s_appointment_type', 's_source_roster_detail_count.appointment_type_id', '=', 's_appointment_type.id') + ->select('s_source_roster_detail_count.*', 's_appointment_type.name') + ->whereIn('roster_detail_id', $ids)->get(); + + if (count($countsInfo) > 0) { + foreach ($list as $key => $value) { + foreach ($countsInfo as $k => $v) { + if ($value->id == $v->roster_detail_id) { + $list[$key]->countsInfo[] = $v; + } + } + } + } + //匹配设备(服务组) + $devices = DB::table('s_devices')->get(); + foreach ($list as $key => $value) { + $list[$key]->devices = []; + $array_device_id = explode(",", $value->device_id); + foreach ($devices as $k => $v) { + if (in_array($v->id, $array_device_id)) { + $list[$key]->devices[] = $v; + } + } + } + + return \Yz::Return(true, '获取成功', ['list' => $list,'count' => $count]); + } + + public function GetDetail() + { + $id = request('id'); + $info = DB::table('s_source_roster_detail')->where(['id' => $id, 'is_del' => 0])->first(); + $info->patientType = explode(',', $info->patient_type); + $info->department_name = DB::table('s_department')->where('id', $info->department_id)->first()->department_name; + $info->resources_name = DB::table('s_department_resources')->where('id', $info->resources_id)->first()->department_resources_name; + $info->devices = DB::table('s_devices')->whereIn('id', explode(',', $info->device_id))->get(); + $info->coutsInfo = DB::table('s_source_roster_detail_count') + ->leftJoin('s_appointment_type', 's_source_roster_detail_count.appointment_type_id', '=', 's_appointment_type.id') + ->leftJoin('s_appointment_type_ratio', 's_appointment_type.id', '=', 's_appointment_type_ratio.appointment_type_id') + ->select('s_source_roster_detail_count.*', 's_appointment_type.name', 's_appointment_type_ratio.ratio') + ->where(['s_source_roster_detail_count.roster_detail_id' => $id, 's_appointment_type_ratio.department_id' => $info->department_id])->get(); + $info->max_total = 0; + if (count($info->coutsInfo) > 0) { + $info->max_total = $info->coutsInfo[0]->max_total; + } + return \Yz::Return(true, '获取成功', $info); + } + + public function ChangeInfo(Request $request) + { + $userid = $request->get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $PlanDetaiInfo = request('PlanDetaiInfo'); + $userInfo = DB::table('users')->where(['id' => $userid])->get(); + $department_id = $userInfo[0]->department_id; + $check = DB::table('s_source_roster_detail')->where(['id' => $PlanDetaiInfo['id']]) + ->where('department_id', $department_id) + ->where('is_del', 0) + ->first(); + if (!$check) return \Yz::echoError1('没有权限'); + $u1 = DB::table('s_source_roster_detail')->where(['id' => $PlanDetaiInfo['id']])->update([ + 'status' => $PlanDetaiInfo['status'] + ]); + $i = 0; + foreach ($PlanDetaiInfo['coutsInfo'] as $key => $value) { + $u2 = DB::table('s_source_roster_detail_count')->where(['id' => $value['id']])->update([ + 'count' => $value['count'], + 'max_total' => $value['max_total'], + ]); + if ($u2) $i++; + } + if ($u1 or $i > 0) { + return \Yz::Return(true, '保存成功', []); + } else { + return \Yz::echoError1('没有数据更新'); + } + } + + public function Del(Request $request) + { + $userid = $request->get('userid');//中间件产生的参数 + $userInfo = DB::table('users')->where(['id' => $userid])->get(); + $department_id = $userInfo[0]->department_id; + $ids = request('ids'); + $u1 = DB::table('s_source_roster_detail')->where(['department_id' => $department_id])->whereIn('id', $ids)->update([ + 'is_del' => 1 + ]); + if ($u1) { + return \Yz::Return(true, '删除成功', []); + } else { + return \Yz::echoError1('删除失败'); + } + } + + //获取可用的计划,用于计划占用 + public function GetEnablePlan() + { + date_default_timezone_set('PRC'); + $regnum = request('regnum'); + $entrustid = request('entrustid'); + $episodeid = request('episodeid'); + $appointment_type = request('appointment_type'); //预约类型 + $appointment_date = request('date'); //预约日期 + + $info = DB::table('s_list')->where(['reg_num' => $regnum, 'entrust_id' => $entrustid, 'episodeid' => $episodeid])->first(); + if (!$info) return \Yz::echoError1('没有找到对应医嘱信息'); + + $itemInfo = DB::table('s_check_item')->where(['item_name' => $info->entrust, 'status' => 1, "is_del" => 0])->get(); + if (count($itemInfo) == 0) return \Yz::echoError1('没有找到可用的检查项目信息'); + + $itemInfo = $itemInfo[0]; + $qudaos = explode(',', $itemInfo->reservation_method); + if (!in_array($appointment_type, $qudaos)) return \Yz::echoError1('此检查项目不支持在当前渠道预约'); + + $entrust_time = $info->entrust_date . ' ' . $info->entrust_time; //医嘱时间 + $date = new DateTime($entrust_time); + $date->modify("+" . $itemInfo->check_begin_time . " minutes"); + $enableCheckTime = $date;//到此时间后可进行预约 + $current_time = new DateTime(); + if ($current_time < $enableCheckTime) return \Yz::echoError1("请于" . $enableCheckTime->format("Y-m-d H:i:s") . "后进行预约"); + + //获取检查项目绑定的服务组(设备),判断状态正常的 + $devices = DB::table('s_check_item_device') + ->leftJoin("s_devices", "s_check_item_device.device_id", "=", "s_devices.id") + ->where(['s_check_item_device.item_id' => $itemInfo->id]) + ->where(['s_devices.status' => 1, 'is_del' => 0])->pluck('s_devices.id')->toArray(); + + //获取主表检查项目绑定的科室id + $department_id = DB::table('s_department')->where(['department_number' => $info->RISRAcceptDeptCode])->first(); + if (!$department_id) return \Yz::echoError1('获取医嘱检查项目科室信息失败'); + + + //获取对应日期的计划明细 + $plan = DB::table('s_source_roster_detail as a') + ->select('a.*', 'b.department_resources_name', 'c.roster_detail_id', 'c.count', 'c.used_count') + ->leftJoin('s_department_resources as b', 'a.resources_id', '=', 'b.id') + ->leftJoin('s_source_roster_detail_count as c', 'a.id', '=', 'c.roster_detail_id') + ->where(['a.department_id' => $department_id->id, 'a.date' => $appointment_date, 'a.status' => 1, 'a.is_del' => 0, 'b.is_del' => 0, 'c.appointment_type_id' => $appointment_type])->get(); + $plan_enable = []; + foreach ($plan as $key => $value) { + if (array_intersect($devices, array_map('intval', explode(',', $value->device_id)))) { + $plan_enable[] = $value; + } + } + + return \Yz::Return(true, '查询完成', ['today_date' => date("Y-m-d"), 'appointment_date' => $appointment_date, 'weekname' => Tools::GetWeekName($appointment_date), 'mainInfo' => $info, 'plan_list' => $plan_enable]); + } + + //开始预约占用名额 + public function YuYue() + { + date_default_timezone_set('PRC'); + $nowdatetime = date("Y-m-d H:i:s"); + $planid = request('planid'); + $appointment_type = request('appointment_type');//渠道id + $mainlistid = request('mainlistid');//主表id + $do_type = request('dotype');//操作类型,1预约,2改约 + if (!isset($do_type)) return \Yz::echoError1('参数:操作类型 不能为空'); + + $mainInfo = DB::table('s_list')->where(['id' => $mainlistid])->first(); + if (!$mainInfo) return \Yz::echoError1('医嘱不存在'); + //判断状态 + if ($do_type == 1 && $mainInfo->list_status <> 0) return \Yz::echoError1('该信息状态不允许预约,当前状态:' . $mainInfo->list_status); + if ($do_type == 2 && $mainInfo->list_status <> 1) return \Yz::echoError1('该信息状态不允许改约操作,当前状态:' . $mainInfo->list_status); + $planInfo = DB::table('s_source_roster_detail')->where(['id' => $planid, 'status' => 1, 'is_del' => 0])->first(); + if (!$planInfo) return \Yz::echoError1('当前时段不可用'); + if ($nowdatetime > $planInfo->date . ' ' . $planInfo->end_reservation_time) return \Yz::echoError1('已经超过预约截止时间'); + $planCount = DB::table('s_source_roster_detail_count')->where(['roster_detail_id' => $planid, + 'appointment_type_id' => $appointment_type])->first(); + if ($planCount->count <= $planCount->used_count) return \Yz::echoError1('当前预约时间已无名额'); + + //判断互斥(暂时根据reg_num判断身份) + //查询想要预约的项目 其自身code + $item=DB::table('s_check_item')->where(['item_name'=>$mainInfo->entrust,'status'=>1,'is_del'=>0])->first(); + if(!$item) return \Yz::echoError1('此检查项目不可用'); + //查询当前检查项目是否存在互斥 + $cha_hc=DB::table('s_huchi')->where('is_del',0) + ->where(function ($q) use($item) { + $q->where(['code1'=>$item->item_code])->orWhere('code2',$item->item_code); + })->get(); + if(count($cha_hc)>0){ + //查询用户预约中的医嘱 + $status_1=DB::table('s_list') + ->select('s_check_item.item_code','s_list.entrust','s_list.reservation_date','s_list.reservation_time') + ->leftJoin('s_check_item','s_list.entrust','=','s_check_item.item_name') + ->where(['s_list.reg_num'=>$mainInfo->reg_num,'s_list.list_status'=>1,'s_list.is_del'=>0,'s_list.is_nullify'=>0])->get(); + if(count($status_1)>0){ + foreach ($status_1 as $key=>$value){ + foreach ($cha_hc as $k=>$v){ + if($v->code1==$value->item_code or $v->code2==$value->item_code){ + if($v->time==0){ + //如果是永久互斥,直接拒绝 + return \Yz::Return(false, '当前预约项目与'.$value->entrust.'互斥,暂不可预约', ['name'=>$value->entrust]); + } + if($v->time>0){ + //如果设置互斥时间,则判断预约时间是否超过 正在预约的最后时间段+互斥时间 + $period=DB::table('s_period')->where(['id'=>$value->reservation_time])->first(); + $endTime=$period->period_end_time; + $periodEndDateTime=$value->reservation_date.' '.$endTime; + $date = new DateTime($periodEndDateTime); + // 添加互斥时间/小时 + $date->add(new \DateInterval('PT'.$v->time.'H')); // PTXH 表示X小时的时间间隔 + $HuChi_EndDateTime = $date->format('Y-m-d H:i:s');//已经预约的项目结束互斥时间 + $YuYueDateTime=substr($planInfo->date,0,10) .' '.$planInfo->begin_time; + if($HuChi_EndDateTime>$YuYueDateTime){ + return \Yz::Return(false, '当前预约项目与'.$value->entrust.'互斥,暂不可预约,请预约'.$HuChi_EndDateTime.'后的日期', ['name'=>$value->entrust]); + } + + } + + } + } + } + } + } + + + + DB::beginTransaction(); + try { + //更新计划明细表使用数量 + $u = DB::table('s_source_roster_detail_count')->where(['id' => $planCount->id])->where('count', '>', 'used_count')->increment('used_count'); + if ($u) { + $cha = DB::table('s_source_roster_detail_count')->where(['id' => $planCount->id])->first(); + if ($cha->count >= $cha->used_count) { + //更新主表信息 + $u_mainList = DB::table('s_list')->where(['id' => $mainlistid])->update([ + 'list_status' => 1, + 'reservation_date' => $planInfo->date, + 'reservation_time' => $planInfo->period_id, + 'reservation_sources' => $planInfo->resources_id, + 'services_group' => $planInfo->device_id, + 'roster_id' => $planInfo->id, + 'xuhao' => 0, + 'appointment_type_id' => $appointment_type, + ]); + if ($do_type == 2) { + //如果是改约,则恢复原来的数量 + $u_old = DB::table('s_source_roster_detail_count')->where(['roster_detail_id' => $mainInfo->roster_id, 'appointment_type_id' => $mainInfo->appointment_type_id])->decrement('used_count'); + } + if ($u_mainList) { + DB::commit(); + return \Yz::Return(true, '预约成功', []); + } else { + DB::rollBack(); + return \Yz::echoError1('预约失败'); + } + + } else { + DB::rollBack(); + return \Yz::echoError1('当前预约时间已无名额'); + } + + } else { + return \Yz::echoError1('操作失败'); + } + + } catch (\Exception $e) { + DB::rollBack(); + return \Yz::echoError1('预约异常'); + } + + + } + + public function CancelYuYue(Request $request) + { + date_default_timezone_set('PRC'); + $nowdatetime = date("Y-m-d H:i:s"); + $MainListId = request('MainListId'); + $password = request('password'); + $userid = $request->get('userid');//中间件产生的参数 + $query = DB::table('users')->where(['id' => $userid])->get(); + if(password_verify($password,$query[0]->pwd)) { + $mainInfo = DB::table('s_list')->where(['id' => $MainListId])->first(); + if (!$mainInfo) return \Yz::echoError1('医嘱不存在'); + //判断状态 + if ($mainInfo->list_status <> 1) return \Yz::echoError1('该记录无法取消,当前状态:' . $mainInfo->list_status); + DB::beginTransaction(); + try { + $u_mainList = DB::table('s_list')->where(['id' => $MainListId])->update([ + 'list_status' => 0, + 'reservation_date' => null, + 'reservation_time' => null, + 'reservation_sources' =>null, + 'services_group' => null, + 'roster_id' => null, + 'xuhao' => null, + 'appointment_type_id' => null, + 'canel_time'=>$nowdatetime, + ]); + $u_count = DB::table('s_source_roster_detail_count')->where(['roster_detail_id' => $mainInfo->roster_id, 'appointment_type_id' => $mainInfo->appointment_type_id])->decrement('used_count'); + if($u_mainList && $u_count){ + DB::commit(); + return \Yz::Return(true, '取消成功', []); + }else{ + DB::rollBack(); + return \Yz::echoError1('取消失败'); + } + } catch (\Exception $e) { + DB::rollBack(); + return \Yz::echoError1('取消异常'); + } + + }else{ + return \Yz::echoError1('密码不正确'); + } + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/PlanModelController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/PlanModelController.php new file mode 100644 index 0000000..89aafd5 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/PlanModelController.php @@ -0,0 +1,270 @@ +get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $searchInfo = request('searchInfo'); + $page = request('page'); + $pageSize = request('pageSize'); + $department_id = 0; + $list = DB::table('s_source_roster') + ->leftJoin('s_department_resources', 's_source_roster.resources_id', '=', 's_department_resources.id') + // ->leftJoin('s_devices', 's_source_roster.device_id', '=', 's_devices.id') + ->leftJoin('s_period', 's_source_roster.period_id', '=', 's_period.id') + ->select('s_source_roster.*', 's_department_resources.department_resources_name', 's_period.period_name') + ->where(['s_source_roster.is_del' => 0]); + if ($group == 1) {//如果是管理员 + if (!empty($searchInfo['department_id'])) { + $list = $list->where('s_source_roster.department_id', $searchInfo['department_id']); + } + + } else { + $userInfo = DB::table('users')->where(['id' => $userid])->get(); + $department_id = $userInfo[0]->department_id; + $list = $list->where(['s_source_roster.department_id' => $department_id]); + } + if (!empty($searchInfo['resources_id'])) { + $list = $list->where('s_source_roster.resources_id', $searchInfo['resources_id'] ); + } + if (!empty($searchInfo['device_id'])) { + //$list = $list->where('s_source_roster.device_id', 'like','%,'.$searchInfo['device_id'].',%' ); + $list = $list->whereRaw("FIND_IN_SET({$searchInfo['device_id']}, s_source_roster.device_id)"); + } + if (!empty($searchInfo['xingqi'])) { + $list = $list->where('s_source_roster.weekname', $searchInfo['xingqi'] ); + } + if (isset($searchInfo['status'])) { + + $list = $list->where('s_source_roster.status', $searchInfo['status']); + } + + $count = $list; + $count = $count->count(); + $list = $list->orderBy('id','desc')->limit($pageSize)->skip(($page - 1) * $pageSize) // 跳过前9999条记录 + ->take($pageSize)->get(); + $ids = []; + foreach ($list as $key => $value) { + $list[$key]->countsInfo = []; + $ids[] = $value->id; + } + //匹配渠道数量 + $countsInfo = DB::table('s_source_roster_count') + ->leftJoin('s_appointment_type', 's_source_roster_count.appointment_type_id', '=', 's_appointment_type.id') + ->select('s_source_roster_count.*', 's_appointment_type.name') + ->whereIn('roster_id', $ids)->get(); + + if (count($countsInfo) > 0) { + foreach ($list as $key => $value) { + foreach ($countsInfo as $k => $v) { + if ($value->id == $v->roster_id) { + $list[$key]->countsInfo[] = $v; + } + } + } + } + //匹配设备(服务组) + $devices = DB::table('s_devices')->get(); + foreach ($list as $key => $value) { + $list[$key]->devices = []; + $array_device_id = explode(",", $value->device_id); + foreach ($devices as $k => $v) { + if (in_array($v->id, $array_device_id)) { + $list[$key]->devices[] = $v; + } + } + } + + return \Yz::Return(true, '操作成功', ['list' => $list, 'count' => $count]); + } + + public function Save(Request $request) + { + $userid = $request->get('userid');//中间件产生的参数 + $bitian = array('xingqi', 'max_total', 'qudao_total', 'period_id', 'begin_time', 'end_time', 'end_reservation_time', 'resources_id', 'devices', 'patientType'); + $bitian_zh = array('星期', '当日总量', '渠道数量', '时间段', '开始时间', '结束时间', '停止预约时间', '资源', '设备', '患者类型'); + $planInfo = request('planInfo'); + foreach ($bitian as $key => $field) { //必填项不能为空 + if (array_key_exists($field, $planInfo) && $planInfo[$field] !== '' && $planInfo[$field] !== null && $planInfo[$field] !== [] && $planInfo[$field] !== 0) { + } else { + return \Yz::echoError1($bitian_zh[$key] . ' 不能为空'); + } + } + $userInfo = DB::table('users')->where(['id' => $userid])->first(); + if (!isset($userInfo->department_id)) return \Yz::echoError1('该用户未绑定科室'); + $department_id = $userInfo->department_id; + + DB::beginTransaction(); + foreach ($planInfo['xingqi'] as $key => $value) { + $data=[ + 'department_id' => $department_id, + 'weekname' => $value, + 'resources_id' => $planInfo['resources_id'], + 'device_id' => isset($planInfo['devices'])?implode(',', $planInfo['devices']):'', + 'period_id' => $planInfo['period_id'], //时间段id + 'patient_type' =>isset($planInfo['patientType'])?implode(',', $planInfo['patientType']):'',//病人类型 + 'begin_time' => $planInfo['begin_time'], + 'end_time' => $planInfo['end_time'], + 'end_reservation_time' => $planInfo['end_reservation_time'], + 'time_unit' => $planInfo['time_unit'], + 'status' => $planInfo['status'], + 'adduser' => $userid, + ]; + if($planInfo['id']==0){//新增 + //判断记录是否存在 + $is_ex=DB::table('s_source_roster')->where([ + 'department_id' => $department_id, + 'weekname' => $value, + 'resources_id' => $planInfo['resources_id'], + 'period_id' => $planInfo['period_id'], //时间段id + ])->get(); + if(count($is_ex)>0){ + DB::rollBack(); + return \Yz::echoError1($value.'已存在相同记录,id为:'.$is_ex[0]->id); + } + $roster_id=DB::table('s_source_roster')->insertGetId($data); + if ($roster_id) { + foreach ($planInfo['qudao_total'] as $k => $v) { + $i_c=DB::table('s_source_roster_count')->insert([ + 'roster_id' => $roster_id, + 'appointment_type_id' => $v['id'], + 'max_total' => $planInfo['max_total'], + 'count' => $v['count'], + ]); + if (!$i_c) { + DB::rollBack(); + return \Yz::echoError1('保存失败'); + } + } + } else { + DB::rollBack(); + return \Yz::echoError1('保存失败'); + } + }else{//修改 + $data['id']=$planInfo['id']; + + $i=DB::table('s_source_roster')->where(['id'=>$planInfo['id'],'is_del'=>0])->update($data); + + foreach ($planInfo['qudao_total'] as $k => $v) { + $i_c=DB::table('s_source_roster_count')->where(['roster_id'=>$planInfo['id'],'appointment_type_id'=>$v['appointment_type_id']])->update([ + 'max_total' => $planInfo['max_total'], + 'count' => $v['count'], + ]); + + } + if ($i or $i_c) { } else { + DB::rollBack(); + return \Yz::echoError1('保存失败'); + } + } + + } + DB::commit(); + return \Yz::Return(true, '保存成功', []); + } + //获取模板信息详情 + public function GetDetailInfo() + { + $id = request('id'); + $info = DB::table('s_source_roster')->where(['id' => $id])->first(); + if (!!$info) { + $info->devices =array_map('intval',explode(',', $info->device_id)) ; + $info->patientType = explode(',', $info->patient_type); + $info->qudao_total = DB::table('s_source_roster_count') + ->select('s_source_roster_count.*', 's_appointment_type.name') + ->leftJoin('s_appointment_type', 's_source_roster_count.appointment_type_id', '=', 's_appointment_type.id') + ->where(['roster_id' => $id])->get(); + $ratio= DB::table('s_appointment_type_ratio') + ->where(['department_id' => $info->department_id])->get(); + foreach ($info->qudao_total as $key => $value) { + foreach ($ratio as $k => $v) { + if ($value->appointment_type_id == $v->appointment_type_id) { + $info->qudao_total[$key]->ratio = $v->ratio; + } + } + } + return \Yz::Return(true, '操作成功', $info); + }else{ + return \Yz::echoError1('数据不存在'); + } + + } + //获取自己的预约类型比例 + public function GetAppointmentRatio(Request $request) + { + $userid = $request->get('userid');//中间件产生的参数 + $userInfo = DB::table('users')->where(['id' => $userid])->first(); + if (!!$userInfo) { + $appointment_type = DB::table('s_appointment_type')->where(['status' => 1, 'is_del' => 0])->get(); + $department_id = $userInfo->department_id; + $ratio = DB::table('s_appointment_type_ratio') + ->where(['department_id' => $department_id])->get(); + + foreach ($appointment_type as $key => $value) { + $appointment_type[$key]->ratio = 0; + foreach ($ratio as $k => $v) { + if ($value->id == $v->appointment_type_id) { + $appointment_type[$key]->ratio = $v->ratio; + } + } + } + return \Yz::Return(true, '操作成功', $appointment_type); + } + } + //保存预约类型比例 + public function SaveAppointmentRatio(Request $request) + { + $userid = $request->get('userid');//中间件产生的参数 + $userInfo = DB::table('users')->where(['id' => $userid])->first(); + if (!!$userInfo) { + $department_id = $userInfo->department_id; + $ratioInfo = request('ratioInfo'); + $u = false; + DB::table('s_appointment_type_ratio')->where(['department_id' => $department_id])->delete(); + + foreach ($ratioInfo as $key => $value) { + $u=DB::table('s_appointment_type_ratio')->insert([ + 'department_id' => $department_id, + 'appointment_type_id' => $value['id'], + 'ratio' => $value['ratio'], + ]); + } + if($u){ + return \Yz::Return(true, '操作成功', []); + }else{ + return \Yz::echoError1('保存失败,无数据更新'); + } + + } + } + + //删除计划模板 + public function Del(Request $request) + { + $userid = $request->get('userid');//中间件产生的参数 + $ids = request('ids'); + $userInfo = DB::table('users')->where(['id' => $userid])->first(); + if (!!$userInfo) { + $appointment_type = DB::table('s_appointment_type')->where(['status' => 1, 'is_del' => 0])->get(); + $department_id = $userInfo->department_id; + $d= DB::table('s_source_roster') + ->where(['department_id' => $department_id])->whereIn('id',$ids)->update([ + 'is_del'=>1, + ]); + if($d){ + return \Yz::Return(true, '操作成功', []); + }else{ + return \Yz::echoError1('操作失败'); + } + + } + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/TimePeriodController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/TimePeriodController.php new file mode 100644 index 0000000..8959fcb --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/TimePeriodController.php @@ -0,0 +1,117 @@ +=$PeriodInfo['period_end_time']) return \Yz::echoError1('截止时间不能超过结束时间'); + if($PeriodInfo['id']==0){ + $userid = $request->get('userid');//中间件产生的参数 + $userInfo = DB::table('users')->where(['id'=>$userid])->get(); + if(count($userInfo)>0 && $userInfo[0]->department_id>0){ + $PeriodInfo['department_id']=$userInfo[0]->department_id; + $query=DB::table('s_period')->insert($PeriodInfo); + }else{ + return \Yz::echoError1('用户未关联科室,操作失败'); + } + + }else{ + $query=DB::table('s_period')->where(['id'=>$PeriodInfo['id']])->update($PeriodInfo); + } + if ($query) { + return \Yz::Return(true, '操作成功',[]); + } else { + return \Yz::echoError1('操作失败'); + } + + } + //获取时间段详情 + public function GetDetail() + { + $id =request('id'); + $info=DB::table('s_period')->where('id',$id)->first(); + if(!!$info){ + return \Yz::Return(true, '操作成功',$info); + }else{ + return \Yz::echoError1('获取时间段信息失败'); + } + } + public function GetList(Request $request) + { + $userid = $request->get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $searchInfo =request('searchInfo'); + $page =request('page'); + $pageSize =request('pageSize'); + $department_id=0; + $list=DB::table('s_period') + ->leftJoin('s_department', 's_period.department_id', '=', 's_department.id') + ->select('s_period.*','s_department.department_name') + ->where(['s_period.is_del'=>0]); + + if($group==1){//如果是管理员 + if(!empty($searchInfo['department_id'])){ + $list= $list->where('department_id', $searchInfo['department_id']); + } + + }else{ + $userInfo = DB::table('users')->where(['id'=>$userid])->get(); + $department_id=$userInfo[0]->department_id; + $list=$list->where(['department_id'=>$department_id]); + } + $count=$list; + $count=$count->count(); + $list=$list->limit($pageSize)->skip(($page-1)*$pageSize) // 跳过前9999条记录 + ->take($pageSize)->get(); + return \Yz::Return(true, '操作成功',['list'=>$list,'count'=>$count]); + } + public function GetEnableList(Request $request) + { + $userid = $request->get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $userInfo = DB::table('users')->where(['id'=>$userid])->get(); + $department_id=$userInfo[0]->department_id; + $list=DB::table('s_period'); + $list=$list->where(['department_id'=>$department_id,'period_status'=>1,'is_del'=>0])->get(); + if(count($list)>0){ + return \Yz::Return(true, '操作成功',$list); + }else{ + return \Yz::echoError1('无可用时间段'); + } + + } + public function Del(Request $request) + { + $userid = $request->get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $id =request('id'); + $table=DB::table('s_period')->where('id',$id); + if($group!=1){ + $userInfo = DB::table('users')->where(['id'=>$userid])->get(); + $department_id=$userInfo[0]->department_id; + $table=$table->where(['department_id'=>$department_id]); + } + $table=$table->update([ + 'is_del'=>1 + ]); + if ($table) { + return \Yz::Return(true, '操作成功',[]); + } else { + return \Yz::echoError1('操作失败'); + } + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/WorkMainController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/WorkMainController.php new file mode 100644 index 0000000..436246f --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/WorkMainController.php @@ -0,0 +1,86 @@ +where(['reg_num' => $regnum,'entrust_id'=>$entrustid,'episodeid'=>$episodeid])->first(); + if (!$info) return \Yz::echoError1('没有找到对应医嘱信息'); + + $itemInfo = DB::table('s_check_item')->where(['item_name' => $info->entrust,'status'=>1,"is_del"=>0])->get(); + if (count($itemInfo) == 0) return \Yz::echoError1('没有找到可用的检查项目信息'); + $itemInfo=$itemInfo[0]; + return \Yz::Return(true,'查询完成',['today_date'=>date("Y-m-d"),'mainInfo'=>$info,'itemInfo'=>$itemInfo]); + } + public function GetList(Request $request) + { + $searchInfo = request('searchInfo'); + $page = request('page'); + $pageSize = request('pageSize'); + + $userid = $request->get('userid');//中间件产生的参数 + $userInfo = DB::table('users')->where(['id' => $userid])->get(); + $department_id = $userInfo[0]->department_id; + $department = DB::table('s_department')->where(['id' => $department_id,'is_del'=>0])->first(); + if(!$department) return \Yz::echoError1('科室信息不存在'); + + $list=DB::table('s_list') + ->leftJoin('s_period','s_list.reservation_time','=','s_period.id') + ->leftJoin('s_department_resources','s_list.reservation_sources','=','s_department_resources.id') + ->select('s_list.*','s_period.period_begin_time','s_period.period_end_time','s_department_resources.department_resources_name') + ->where(['RISRAcceptDeptCode'=>$department->department_number]); + + if ($searchInfo['dateRange']!=null and count($searchInfo['dateRange']) == 2) { + $list = $list->whereBetween('s_list.entrust_date', $searchInfo['dateRange']); + } + if (isset($searchInfo['list_status'])) { + $list = $list->where('s_list.list_status', $searchInfo['list_status']); + } + if (isset($searchInfo['patient_type'])) { + $list = $list->where('s_list.patient_type', $searchInfo['patient_type']); + } + if (isset($searchInfo['reg_num'])) { + $list = $list->where('s_list.reg_num', $searchInfo['reg_num']); + } + if (isset($searchInfo['user_name'])) { + $list = $list->where('s_list.user_name', 'like','%'.$searchInfo['user_name'].'%'); + } + + $count = $list; + $count = $count->count(); + $list=$list->orderBy('id', 'desc')->limit($pageSize)->skip(($page - 1) * $pageSize) // 跳过前9999条记录 + ->take($pageSize)->get(); + + //匹配设备(服务组) + $devices = DB::table('s_devices')->get(); + foreach ($list as $key => $value) { + $list[$key]->age = Tools::calculateAgeText($value->user_brithday); + $list[$key]->devices = []; + $array_device_id = explode(",", $value->services_group); + foreach ($devices as $k => $v) { + if (in_array($v->id, $array_device_id)) { + $list[$key]->devices[] = $v; + } + } + } + return \Yz::Return(true,'查询完成',['list'=>$list,'count'=>$count]); + } + + //计算年龄 + + +} diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/YuYueTypeController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/YuYueTypeController.php new file mode 100644 index 0000000..f8b4000 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/YuYueTypeController.php @@ -0,0 +1,15 @@ +GetTypes(); + } +} diff --git a/Laravel/app/Http/Controllers/API/Admin/YeWu/healthCalendarController.php b/Laravel/app/Http/Controllers/API/Admin/YeWu/healthCalendarController.php new file mode 100644 index 0000000..072f58b --- /dev/null +++ b/Laravel/app/Http/Controllers/API/Admin/YeWu/healthCalendarController.php @@ -0,0 +1,47 @@ +get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $page =request('page'); + $pageSize =request('pageSize'); + $searchInfo=request('searchInfo'); + $s=app()->make(HealthCalendarService::class); + return $s->getList(['group'=>$group,'userid'=>$userid,'page'=>$page,'pageSize'=>$pageSize,'searchInfo'=>$searchInfo]); + } + + //创建日历 + public function CreateCalendar(Request $request){ + $userid = $request->get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $info= request('info'); + if($group<>1 and $group<>7) return \Yz::echoError('无此接口访问权限'); + + $s=app()->make(HealthCalendarService::class); + return $s->CreateCalendar(['info'=>$info,'group'=>$group,'userid'=>$userid]); + } + public function Del(Request $request){ + $userid = $request->get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $list= request('list'); + $s=app()->make(HealthCalendarService::class); + return $s->Del(['list'=>$list,'group'=>$group,'userid'=>$userid]); + } + + //修改日历信息 + public function ChangeInfo(Request $request){ + $userid = $request->get('userid');//中间件产生的参数 + $group = $request->get('role');//中间件产生的参数 + $changeInfo= request('changeInfo'); + $s=app()->make(HealthCalendarService::class); + return $s->ChangeInfo(['changeInfo'=>$changeInfo,'group'=>$group,'userid'=>$userid]); + } +} diff --git a/Laravel/app/Http/Controllers/API/TokenController.php b/Laravel/app/Http/Controllers/API/TokenController.php new file mode 100644 index 0000000..ee709a1 --- /dev/null +++ b/Laravel/app/Http/Controllers/API/TokenController.php @@ -0,0 +1,23 @@ +header('Authorization');; + $service=app()->make(TokenService::class); + $s=$service->RefreshToken(['token'=>$token]); + +// // var_dump($m); + if(!$s['status']){ + $s['status']=false; + } + return $s; + } +} diff --git a/Laravel/app/Http/Controllers/API/UpLoadController.php b/Laravel/app/Http/Controllers/API/UpLoadController.php new file mode 100644 index 0000000..8c9bb1f --- /dev/null +++ b/Laravel/app/Http/Controllers/API/UpLoadController.php @@ -0,0 +1,30 @@ +isValid()) { +// $s=app()->make(HealthCheckupService::class); +// $save=$s->SaveFile(['file'=>$file]); + $date = date("Ymd"); + $save = $file->store('public/'.$date); + return \Yz::Return(true,'上传成功',Storage::url($save)); + + + + + }else{ + return \Yz::echoError1('获取文件失败'); + } + } +} diff --git a/Laravel/app/Http/Controllers/Controller.php b/Laravel/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..a0a2a8a --- /dev/null +++ b/Laravel/app/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ +count(); + } +} diff --git a/Laravel/app/Http/Kernel.php b/Laravel/app/Http/Kernel.php new file mode 100644 index 0000000..999ddf9 --- /dev/null +++ b/Laravel/app/Http/Kernel.php @@ -0,0 +1,70 @@ + + */ + protected $middleware = [ + // \App\Http\Middleware\TrustHosts::class, + \App\Http\Middleware\TrustProxies::class, + \Fruitcake\Cors\HandleCors::class, + \App\Http\Middleware\PreventRequestsDuringMaintenance::class, + \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, + \App\Http\Middleware\TrimStrings::class, + \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, + ]; + + /** + * The application's route middleware groups. + * + * @var array> + */ + protected $middlewareGroups = [ + 'web' => [ + \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + // \Illuminate\Session\Middleware\AuthenticateSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + 'api' => [ + // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, + 'throttle:api', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + ]; + + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + * + * @var array + */ + protected $routeMiddleware = [ + 'auth' => \App\Http\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + 'checktoken' => \App\Http\Middleware\CheckToken::class, + 'log' => \App\Http\Middleware\Log::class, + 'check.sign' => \App\Http\Middleware\CheckSign::class, + ]; +} diff --git a/Laravel/app/Http/Middleware/Authenticate.php b/Laravel/app/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..704089a --- /dev/null +++ b/Laravel/app/Http/Middleware/Authenticate.php @@ -0,0 +1,21 @@ +expectsJson()) { + return route('login'); + } + } +} diff --git a/Laravel/app/Http/Middleware/CheckSign.php b/Laravel/app/Http/Middleware/CheckSign.php new file mode 100644 index 0000000..85d6eca --- /dev/null +++ b/Laravel/app/Http/Middleware/CheckSign.php @@ -0,0 +1,35 @@ +input('app_id'); + $time=$request->input('time'); //时间戳 + $nonce=$request->input('nonce'); + $sign=$request->input('sign'); + $timeDiff = abs(time() - $time); // 获取时间差的绝对值 + + if ($timeDiff >= 600) return \Yz::echoError1('时间异常'); + $cha_s=DB::table('outside_user')->where(['app_id'=>$app_id])->get(); + if(!count($cha_s)==1) return \Yz::echoError1('第三方用户不存在'); + $s_sign=strtoupper(md5($app_id.$time.$nonce.$cha_s[0]->app_secrect)); + if($sign<>$s_sign) return \Yz::echoError1('签名验证失败'); + + return $next($request); + } +} diff --git a/Laravel/app/Http/Middleware/CheckToken.php b/Laravel/app/Http/Middleware/CheckToken.php new file mode 100644 index 0000000..ed03902 --- /dev/null +++ b/Laravel/app/Http/Middleware/CheckToken.php @@ -0,0 +1,32 @@ +attributes->add($payload);//添加参数 + + return $next($request); + }else { + // return response()->json([$payload]); + return response($payload); + } + } +} diff --git a/Laravel/app/Http/Middleware/EncryptCookies.php b/Laravel/app/Http/Middleware/EncryptCookies.php new file mode 100644 index 0000000..867695b --- /dev/null +++ b/Laravel/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/Laravel/app/Http/Middleware/Log.php b/Laravel/app/Http/Middleware/Log.php new file mode 100644 index 0000000..6e515d0 --- /dev/null +++ b/Laravel/app/Http/Middleware/Log.php @@ -0,0 +1,78 @@ +getContent(); + $data = json_decode($content, true); // 解码响应内容为关联数组 + + // 在关联数组中添加 code 字段 + // $data['code'] = 200; + $data['code'] = $response->getStatusCode(); + $modifiedContent = json_encode($data); // 编码修改后的关联数组为 JSON 字符串 + $response->setContent($modifiedContent); + if(env('REQUEST_LOG') and $response->getStatusCode()==200){ //如果返回状态为200进行log + + $ip=self::getTrustedProxiesIp(); //真实ip + $request_header=$request->header(); //请求头 + // dd($response); + $response_data = $response->getData(); //返回data,json格式 + $post_data=$request->post(); //post请求数据 + $get_data=$request->query(); //get请求 + $request_url=$request->getPathInfo();//访问的接口地址 + $log=app()->make(LogService::class); + $log->RequestLog([ + 'ip'=>$ip, + 'response_data'=>$response_data, + 'request_header'=>$request_header, + 'post_data'=>$post_data, + 'get_data'=>$get_data, + 'request_url'=>$request_url, + ],$insert_id); + } + + + return $response; + } + public static function getTrustedProxiesIp(){ //获取用户真实ip + \request()->setTrustedProxies(\request()->getClientIps(),Request::HEADER_X_FORWARDED_FOR); + return \request()->getClientIp(); + } + + public static function requestLog($request,$insert_id){ //记录请求时日志,不含返回信息 + if(env('REQUEST_LOG') ){ //如果返回状态为200进行log + $ip=self::getTrustedProxiesIp(); //真实ip + $request_header=$request->header(); //请求头 + $post_data=$request->post(); //post请求数据 + $get_data=$request->query(); //get请求 + $request_url=$request->getPathInfo();//访问的接口地址 + $log=app()->make(LogService::class); + return $log->RequestLog([ + 'ip'=>$ip, + 'request_header'=>$request_header, + 'post_data'=>$post_data, + 'get_data'=>$get_data, + 'request_url'=>$request_url, + ],$insert_id); + } + + } +} diff --git a/Laravel/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/Laravel/app/Http/Middleware/PreventRequestsDuringMaintenance.php new file mode 100644 index 0000000..74cbd9a --- /dev/null +++ b/Laravel/app/Http/Middleware/PreventRequestsDuringMaintenance.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/Laravel/app/Http/Middleware/RedirectIfAuthenticated.php b/Laravel/app/Http/Middleware/RedirectIfAuthenticated.php new file mode 100644 index 0000000..a2813a0 --- /dev/null +++ b/Laravel/app/Http/Middleware/RedirectIfAuthenticated.php @@ -0,0 +1,32 @@ +check()) { + return redirect(RouteServiceProvider::HOME); + } + } + + return $next($request); + } +} diff --git a/Laravel/app/Http/Middleware/TrimStrings.php b/Laravel/app/Http/Middleware/TrimStrings.php new file mode 100644 index 0000000..88cadca --- /dev/null +++ b/Laravel/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,19 @@ + + */ + protected $except = [ + 'current_password', + 'password', + 'password_confirmation', + ]; +} diff --git a/Laravel/app/Http/Middleware/TrustHosts.php b/Laravel/app/Http/Middleware/TrustHosts.php new file mode 100644 index 0000000..7186414 --- /dev/null +++ b/Laravel/app/Http/Middleware/TrustHosts.php @@ -0,0 +1,20 @@ + + */ + public function hosts() + { + return [ + $this->allSubdomainsOfApplicationUrl(), + ]; + } +} diff --git a/Laravel/app/Http/Middleware/TrustProxies.php b/Laravel/app/Http/Middleware/TrustProxies.php new file mode 100644 index 0000000..3391630 --- /dev/null +++ b/Laravel/app/Http/Middleware/TrustProxies.php @@ -0,0 +1,28 @@ +|string|null + */ + protected $proxies; + + /** + * The headers that should be used to detect proxies. + * + * @var int + */ + protected $headers = + Request::HEADER_X_FORWARDED_FOR | + Request::HEADER_X_FORWARDED_HOST | + Request::HEADER_X_FORWARDED_PORT | + Request::HEADER_X_FORWARDED_PROTO | + Request::HEADER_X_FORWARDED_AWS_ELB; +} diff --git a/Laravel/app/Http/Middleware/VerifyCsrfToken.php b/Laravel/app/Http/Middleware/VerifyCsrfToken.php new file mode 100644 index 0000000..9e86521 --- /dev/null +++ b/Laravel/app/Http/Middleware/VerifyCsrfToken.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/Laravel/app/Lib/JWT.php b/Laravel/app/Lib/JWT.php new file mode 100644 index 0000000..ddcdc5d --- /dev/null +++ b/Laravel/app/Lib/JWT.php @@ -0,0 +1,132 @@ +date('Y-m-d H:i:s',time())) //判断Token是否过期 + { + $result['status']='OK'; + $result['tokentype']=$payload['tokentype']; + $result['role']=$payload['role']; + $result['userid']=$payload['userid']; + $result['meg']= 'Token验证通过'; + }else{ + $result['status']='Token_TimeOut'; + $result['meg']= 'Token已过期,请返回登录界面重新授权'; + $result['code']=10002; + } + + } + else{ + $result['status']='Toke_Error'; + $result['meg']= '签名异常,拒绝操作!'; + $result['code']=10001; + } + return $result; + } + + +//URL安全的字符串编码: + static function urlsafe_b64encode($string) { + $data = base64_encode($string); + $data = str_replace(array('+','/','='),array('-','_',''),$data); + return $data; + } + +//URL安全的字符串解码: + static function urlsafe_b64decode($string) { + $data = str_replace(array('-','_'),array('+','/'),$string); + $mod4 = strlen($data) % 4; + if ($mod4) { + $data .= substr('====', $mod4); + } + return base64_decode($data); + } + +} diff --git a/Laravel/app/Lib/Tools.php b/Laravel/app/Lib/Tools.php new file mode 100644 index 0000000..45c8f8e --- /dev/null +++ b/Laravel/app/Lib/Tools.php @@ -0,0 +1,66 @@ +diff($birthdate)->y; + return $age; + } + //计算年龄,返回年龄 如 31岁3月3天 + public static function calculateAgeText($birthdate) { + $birthdate = new DateTime($birthdate); + $currentDate = new DateTime(); + $ageDiff = $currentDate->diff($birthdate); + + $years = $ageDiff->y; + $months = $ageDiff->m; + $days = $ageDiff->d; + + $ageString = ""; + if ($years > 0) { + $ageString .= $years . "岁"; + } + if ($months > 0) { + $ageString .= $months . "月"; + } + if ($days > 0) { + $ageString .= $days . "天"; + } + + return $ageString; + } +} diff --git a/Laravel/app/Lib/Yz.php b/Laravel/app/Lib/Yz.php new file mode 100644 index 0000000..2bb8947 --- /dev/null +++ b/Laravel/app/Lib/Yz.php @@ -0,0 +1,30 @@ +json($result)->setEncodingOptions(JSON_UNESCAPED_UNICODE); + } + public static function echoError($msg){ + $result=array(); + $result['status']='no'; + $result['msg']=$msg; + return response()->json($result)->setEncodingOptions(JSON_UNESCAPED_UNICODE); + } + public static function echoError1($msg){ + $result=array(); + $result['status']=false; + $result['msg']=$msg; + return response()->json($result)->setEncodingOptions(JSON_UNESCAPED_UNICODE); + } + + public static function Return($status,$msg,$data=[]){ + $result=array(); + $result['status']=$status; + $result['msg']=$msg; + $result['data']=$data; + return $result; + } +} + diff --git a/Laravel/app/Models/User.php b/Laravel/app/Models/User.php new file mode 100644 index 0000000..8996368 --- /dev/null +++ b/Laravel/app/Models/User.php @@ -0,0 +1,44 @@ + + */ + protected $fillable = [ + 'name', + 'email', + 'password', + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var array + */ + protected $hidden = [ + 'password', + 'remember_token', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'email_verified_at' => 'datetime', + ]; +} diff --git a/Laravel/app/Providers/AppServiceProvider.php b/Laravel/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..ee8ca5b --- /dev/null +++ b/Laravel/app/Providers/AppServiceProvider.php @@ -0,0 +1,28 @@ + + */ + protected $policies = [ + // 'App\Models\Model' => 'App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + $this->registerPolicies(); + + // + } +} diff --git a/Laravel/app/Providers/BroadcastServiceProvider.php b/Laravel/app/Providers/BroadcastServiceProvider.php new file mode 100644 index 0000000..395c518 --- /dev/null +++ b/Laravel/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,21 @@ +> + */ + protected $listen = [ + Registered::class => [ + SendEmailVerificationNotification::class, + ], + ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + // + } +} diff --git a/Laravel/app/Providers/RouteServiceProvider.php b/Laravel/app/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..3bd3c81 --- /dev/null +++ b/Laravel/app/Providers/RouteServiceProvider.php @@ -0,0 +1,63 @@ +configureRateLimiting(); + + $this->routes(function () { + Route::prefix('api') + ->middleware('api') + ->namespace($this->namespace) + ->group(base_path('routes/api.php')); + + Route::middleware('web') + ->namespace($this->namespace) + ->group(base_path('routes/web.php')); + }); + } + + /** + * Configure the rate limiters for the application. + * + * @return void + */ + protected function configureRateLimiting() + { + RateLimiter::for('api', function (Request $request) { + return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip()); + }); + } +} diff --git a/Laravel/app/Services/Admin/GroupService.php b/Laravel/app/Services/Admin/GroupService.php new file mode 100644 index 0000000..440e5d1 --- /dev/null +++ b/Laravel/app/Services/Admin/GroupService.php @@ -0,0 +1,72 @@ +where('group_id', '=', $arr['groupid'])->delete(); + foreach ($arr['menuList'] as $v){ + // dd($v); + $i=DB::table('group_menu')->insert([ + 'group_id' => $arr['groupid'], + 'menu_id' => $v['id'], + ]); + } + DB::commit(); // 手动提交事务 + $result['status']='ok'; + } catch (\Exception $e) { + DB::rollback(); // 发生异常时手动回滚事务 + $result['status']='no'; + $result['msg']='操作失败'; + } + return $result; + } + public function Save($arr){ + $result=array(); + if($arr['type']=='save'){ + $query=DB::table('group')->insert([ + 'group_name' => $arr['info']['name'], + 'status' => 1, + ]); + }else{ + $query=DB::table('group') + ->where('id', $arr['info']['id']) + ->update([ + 'pid' => $arr['info']['pid'], + 'name' => $arr['info']['name'], + 'url' => $arr['info']['url'], + 'icon' => $arr['info']['icon'] + ]); + } + if($query){ + $result['status']='ok'; + }else{ + $result['status']='no'; + $result['msg']='操作失败'; + } + return $result; + + } +} diff --git a/Laravel/app/Services/Admin/MenuService.php b/Laravel/app/Services/Admin/MenuService.php new file mode 100644 index 0000000..861a853 --- /dev/null +++ b/Laravel/app/Services/Admin/MenuService.php @@ -0,0 +1,122 @@ +group==$arr['group']){ + $menulist=DB::select("select b.id,b.pid,b.order,b.icon, b.name,b.url from group_menu as a left join menu as b on a.menu_id=b.id where a.group_id =? and b.status=1",[$arr['group']]); + + $result['list']=$menulist; + $result['status']='ok'; + + }else{ + $result['status']='no'; + $result['msg']='权限不匹配'; + } + } + + return $result; + } + + public function GetList($arr){ + $result=array(); + $sql=''; + if( $arr['type']=='enable'){ + $sql=" and status=1"; + } + $query_p = DB::select("select * from menu where pid is null".$sql); + $result['list'] = []; + $i=0; + foreach ($query_p as $item) { + $query = DB::select("select * from menu where pid = ?".$sql, [$item->id]); + $child_items = []; + $result['list'][$i] = [ + 'id' => $item->id, + 'pid' => $item->pid, + 'name' => $item->name, + 'url' => $item->url, + 'icon' => $item->icon, + 'created_at' => $item->created_at, + 'updated_at' => $item->updated_at, + 'children' => [] // 子级节点先为空数组,稍后再填充 + ]; + $j=0; + foreach ($query as $child) { + $child_items[$j] = [ + 'id' => $child->id, + 'pid' => $child->pid, + 'name' => $child->name, + 'url' => $child->url, + 'icon' => $child->icon, + 'created_at' => $child->created_at, + 'updated_at' => $child->updated_at, + // 'children' => [] // 子级节点先为空数组,稍后再填充 + ]; + $result['list'][$i]['children'][$j]=$child_items[$j]; + $j++; + } + + $i++; + } + + return $result; + } + public function GetFatherMenuList(){ + $result=array(); + $list=DB::table('menu')->where(['status'=>1,'pid'=>null])->get(); + if(count($list)){ + $result['status']='ok'; + $result['msg']='获取成功'; + $result['list']=$list; + }else{ + $result['status']='no'; + $result['msg']='未找到有效一级菜单'; + } + return $result; + } + public function AddMenu($arr){ + $result=array(); + //dd($arr); + $i=DB::table('menu')->insert([ + 'pid' => $arr['info']['pid'], + 'name' => $arr['info']['name'], + 'url' => $arr['info']['url'], + 'status'=>1 + ]); + if($i){ + $result['status']='ok'; + $result['msg']='插入成功'; + }else{ + $result['status']='no'; + $result['msg']='操作失败'; + } + return $result; + } + public function EditMenu($arr){ + $result=array(); + $U=DB::table('menu') + ->where('id', $arr['info']['id']) + ->update([ + 'pid' => $arr['info']['pid'], + 'name' => $arr['info']['name'], + 'url' => $arr['info']['url'], + 'icon' => $arr['info']['icon'] + ]); + if($U){ + $result['status']='ok'; + $result['msg']='更新成功'; + }else{ + $result['status']='no'; + $result['msg']='操作失败'; + } + return $result; + } +} diff --git a/Laravel/app/Services/Admin/UserService.php b/Laravel/app/Services/Admin/UserService.php new file mode 100644 index 0000000..9521aa8 --- /dev/null +++ b/Laravel/app/Services/Admin/UserService.php @@ -0,0 +1,130 @@ +c; + return $result; + } + public function Save($arr){ + $result=[]; + if($arr['info']['id']){ + $query=DB::table('users')->where(['id'=>$arr['info']['id']])->update([ + 'group' => $arr['info']['groupId'], + 'cn_name' => $arr['info']['cname'], + 'username' => $arr['info']['uname'], + 'status'=>$arr['info']['status'], + 'department_id'=> isset($arr['info']['department_id']) ?$arr['info']['department_id']: 0 + ]); + if($query){ + $result['status']='ok'; + $result['msg']='操作成功'; + }else{ + $result['status']='no'; + $result['msg']='操作失败,没有记录被更新'; + } + }else{ + $hash = password_hash('111111', PASSWORD_DEFAULT); + $c=DB::table('users')->where(['username'=>$arr['info']['uname']])->get(); + if(count($c)){ + $result['status']='no'; + $result['msg']='用户名已存在'; + return $result; + } + DB::beginTransaction(); + try { + $id=DB::table('users')->insertGetId([ + 'group' => $arr['info']['groupId'], + 'cn_name' => $arr['info']['cname'], + 'username' => $arr['info']['uname'], + 'pwd' => $hash, + 'status'=>1, + 'department_id'=> isset($arr['info']['department_id']) ?$arr['info']['department_id']: 0 + ]); + + DB::commit(); // 手动提交事务 + if($id){ + $result['status']='ok'; + $result['msg']='操作成功'; + } + } catch (\Exception $e) { + DB::rollback(); // 发生异常时手动回滚事务 + $result['status']='no'; + $result['msg']='操作失败'; + } + + } + + return $result; + } + public function GetDetail($arr){ + $c=DB::table('users')->select(['id','cn_name','username','status','group','img',])->where(['id'=>$arr['id']])->whereIn('status',[0,1])->get(); + if(count($c)){ + $result['info']=$c; + $result['status']='ok'; + $result['msg']='成功'; + }else{ + $result['status']='no'; + $result['msg']='获取详情失败'; + } + return $result; + } + public function ChangePwd($arr){ + $result=array(); + $s=app()->make(LoginService::class); + $check=$s->CheckPwd(['userid'=>$arr['id'],'password'=>$arr['oldpwd']]); + if($check['status']){ + $hash = password_hash($arr['newpwd'], PASSWORD_DEFAULT); + $u=DB::table('users')->where(['id'=>$arr['id'],'status'=>1])->update(['pwd'=>$hash]); + if($u){ + $result['status']='ok'; + }else{ + $result['status']='no'; + $result['msg']='修改密码失败'; + } + }else{ + $result=$check; + } + return $result; + } + + //检查用户是否有某个目录的权限 + //参数['userid'=>$userid,'group'=>$group,'url'=>$url] + public function CheckMenuAuth($arr){ + $list=['index','dashboard']; + $q=DB::select("select * from users where id=? and `group` =?",[$arr['userid'],$arr['group']]); + if(count($q)==1){ + if(in_array($arr['url'],$list)){ + return \Yz::Return(true,'',[]); + } + $check=DB::select("select * from (select menu_id from group_menu where group_id=? ) as a inner JOIN (select id from menu where url = ? ) as b on a.menu_id=b.id +",[$arr['group'],$arr['url']]); + if(count($check)>0){ + return \Yz::Return(true,'',[]); + }else{ + return \Yz::echoError1('暂无权限'); + } + }else{ + return \Yz::echoError1('权限不匹配'); + } + } + + //修改自身信息 + public function ChangInfo($arr){ + $u=DB::table('users')->where(['id'=>$arr['userid']])->update([ + 'cn_name'=>$arr['name'], + 'img'=>$arr['headimg'], + ]); + if($u>0){ + return \Yz::Return(true,'操作成功',[]); + }else{ + return \Yz::echoError1('更新失败'); + } + } +} diff --git a/Laravel/app/Services/Admin/YeWu/CheckItemService.php b/Laravel/app/Services/Admin/YeWu/CheckItemService.php new file mode 100644 index 0000000..5798d3f --- /dev/null +++ b/Laravel/app/Services/Admin/YeWu/CheckItemService.php @@ -0,0 +1,80 @@ +where(['pid'=>0,'is_del'=>0])->get(); + $smallClass=[]; + if(!empty($searchInfo['bigClass'])) { + $smallClass = DB::table('s_check_item_class')->where(['pid'=>$searchInfo['bigClass'],'is_del'=>0])->get(); + } + return \Yz::Return(true, '查询成功', ['bigClass'=>$bigClass,'smallClass'=>$smallClass]); + } + //获取检查项目列表 + public function GetItemList($searchInfo,$page,$pageSize){ + $where=['s_check_item.is_del'=>0]; + $small_id=[]; + $list=DB::table('s_check_item'); + if(empty($searchInfo['bigClass'])!==true and empty($searchInfo['smallClass'])===true){ + $small_id= DB::table('s_check_item_class')->where(['pid'=>$searchInfo['bigClass'],'is_del'=>0])->pluck('id')->toArray(); + $list= $list->whereIn('item_class_id',$small_id); + } + if(!empty($searchInfo['smallClass'])){ + $small_id[0]=$searchInfo['smallClass']; + $list= $list->whereIn('item_class_id',$small_id); + } + if(!empty($searchInfo['name'])){ + $where[]=['item_name','like','%'.$searchInfo['name'].'%']; + } + $count= $list->where($where)->count(); + $list= $list ->leftJoin('s_appointment_type', 's_check_item.reservation_method', '=', 's_appointment_type.id') + ->select('s_check_item.*','s_appointment_type.name as reservation_method_name') + ->where($where)->skip(($page-1)*$pageSize) // 跳过前9999条记录 + ->take($pageSize)->get(); + foreach ($list as $k=>$v){ + $list[$k]->devicesInfo=DB::table('s_check_item_device') + ->join('s_devices', 's_check_item_device.device_id', '=', 's_devices.id') + ->select('s_devices.*') + ->where('item_id',$v->id)->get(); + } + + return \Yz::Return(true, '查询成功', ['list'=>$list,'count'=>$count]); + } + + //绑定设备 + public function BindDevice($item_id,$device_ids){ + $data=[]; + foreach ($device_ids as $k=>$v){ + $data[$k]['item_id']=$item_id; + $data[$k]['device_id']=$v; + } + DB::beginTransaction(); + DB::table('s_check_item_device')->where('item_id',$item_id)->delete(); + $i= DB::table('s_check_item_device')->insert($data); + if($i>0){ + DB::commit(); + return \Yz::Return(true, '绑定成功', []); + }else{ + DB::rollBack(); + return \Yz::Return(false, '绑定失败'); + } + } + public function Save($Info){ + if(!empty($Info['id'])){ + $res=DB::table('s_check_item')->where('id',$Info['id'])->update($Info); + if($res){ + return \Yz::Return(true, '修改成功'); + }else{ + return \Yz::Return(false, '修改失败'); + } + }else{ + return \Yz::Return(false, 'id不能为空'); + } + } +} diff --git a/Laravel/app/Services/Admin/YeWu/DepartmentResourceService.php b/Laravel/app/Services/Admin/YeWu/DepartmentResourceService.php new file mode 100644 index 0000000..1f465de --- /dev/null +++ b/Laravel/app/Services/Admin/YeWu/DepartmentResourceService.php @@ -0,0 +1,93 @@ +where('id', $department_id) + ->where('is_del', 0) + ->where('department_status', 1) + ->first(); + if(!$department) { + return \Yz::Return(false, '科室状态异常', []); + } + if(isset($id)) { + $c = DB::table('s_department_resources') + ->where('id', $id) + ->update($info); + }else { + $info['is_del']=0; + $info['adduser']=$userid; + $c = DB::table('s_department_resources') + ->insert($info); + } + if(!$c) { + return \Yz::Return(false, '保存失败', []); + }else{ + return \Yz::Return(true, '保存成功', []); + } + } + public function GetList($searchInfo,$page,$pageSize){ + $list=DB::table('s_department_resources as a')->join('s_department','a.department_id','=','s_department.id') + ->where('a.is_del',0); + if(isset($searchInfo['department_id'])){ + $list= $list->where('a.department_id',$searchInfo['department_id']); + } + if(isset($searchInfo['status'])){ + $list= $list->where('a.department_resources_status',$searchInfo['status']); + } + if(!empty($searchInfo['name'])){ + $list= $list->where('a.department_resources_name','like','%'.$searchInfo['name'].'%'); + } + $c=$list->count(); + $list=$list->select(['a.*','s_department.department_name'])->skip(($page-1)*$pageSize) + ->take($pageSize)->get() ; + foreach ($list as $k=>$v){ + $list[$k]->devicesInfo=DB::table('s_department_resources_device') + ->join('s_devices', 's_department_resources_device.device_id', '=', 's_devices.id') + ->select('s_devices.*') + ->where('rsourece_id',$v->id)->get(); + } + return \Yz::Return(true, '查询成功', ['list'=>$list,'count'=>$c]); + } + public function Del($id){ + $c= DB::table('s_department_resources')->where('id',$id)->update(['is_del'=>1]); + if(!$c){ + return \Yz::Return(false, '删除失败', []); + }else{ + return \Yz::Return(true, '删除成功', []); + } + } + //绑定设备 + public function BindDevice($department_id,$resource_id,$device_ids){ + $data=[]; + foreach ($device_ids as $k=>$v){ + $data[$k]['department_id']=$department_id; + $data[$k]['rsourece_id']=$resource_id; + $data[$k]['device_id']=$v; + } + DB::beginTransaction(); + DB::table('s_department_resources_device')->where('rsourece_id',$resource_id)->delete(); + $i= DB::table('s_department_resources_device')->insert($data); + if($i>0){ + DB::commit(); + return \Yz::Return(true, '绑定成功', []); + }else{ + DB::rollBack(); + return \Yz::Return(false, '绑定失败'); + } + } + public function GetBindDeviceList($resource_id) + { + $list =DB::table('s_department_resources_device as a') + ->join('s_devices as b', 'a.device_id', '=', 'b.id') + ->select('b.*') + ->where(['a.rsourece_id'=>$resource_id,'b.status'=>1,'b.is_del'=>0])->get(); + return \Yz::Return(true, '查询成功', $list); + } +} diff --git a/Laravel/app/Services/Admin/YeWu/DepartmentService.php b/Laravel/app/Services/Admin/YeWu/DepartmentService.php new file mode 100644 index 0000000..3f5c38a --- /dev/null +++ b/Laravel/app/Services/Admin/YeWu/DepartmentService.php @@ -0,0 +1,65 @@ +where('is_del',0); + if(isset($searchInfo['status'])){ + $list= $list->where('department_status',$searchInfo['status']); + + } + if(!empty($searchInfo['name'])){ + $list= $list->where('department_name','like','%'.$searchInfo['name'].'%'); + } + $c=$list->count(); + $l=$list ->orderBy('id','desc')->skip(($page-1)*$pageSize) + ->take($pageSize)->get() ; + //查询科室下的资源总数 + foreach ($l as $k=>$v){ + $l[$k]->user_list=DB::table('users')->where(['department_id'=>$v->id,'status'=>1])->get(); + $l[$k]->resource_count=DB::table('s_department_resources')->where(['department_id'=>$v->id,'is_del'=>0])->count(); + } + return \Yz::Return(true, '查询成功', ['list'=>$l,'count'=>$c]); + } + public function GetEnableList($arr) + { + $list=DB::table('s_department'); + if($arr['group']!=1){ + $userInfo = DB::table('users')->where(['id'=>$arr['userid']])->get(); + $department_id=$userInfo[0]->department_id; + $list= $list->where(['id'=>$department_id]); + } + $list= $list->where(['is_del'=>0,'department_status'=>1])->get(); + return \Yz::Return(true, '查询成功', ['list'=>$list]); + } + public function Save($info) + { + if(isset($info['id'])){ + $id=$info['id']; + unset($info['id']); + $c= DB::table('s_department')->where('id',$id)->update($info); + }else{ + $info['is_del']=0; + $c= DB::table('s_department')->insert($info); + } + if(!$c){ + return \Yz::Return(false, '保存失败', []); + }else{ + return \Yz::Return(true, '保存成功', []); + + } + } + public function Del($id) + { + $c= DB::table('s_department')->where('id',$id)->update(['is_del'=>1]); + if(!$c){ + return \Yz::Return(false, '删除失败', []); + }else{ + return \Yz::Return(true, '删除成功', []); + } + } +} diff --git a/Laravel/app/Services/Admin/YeWu/DevicesService.php b/Laravel/app/Services/Admin/YeWu/DevicesService.php new file mode 100644 index 0000000..09c4ac4 --- /dev/null +++ b/Laravel/app/Services/Admin/YeWu/DevicesService.php @@ -0,0 +1,51 @@ +0]; + $list=DB::table('s_devices'); + if(!empty($searchInfo['name'])){ + $where[]=['device_name','like','%'.$searchInfo['name'].'%']; + } + $count= $list->where($where)->count(); + $list= $list->where($where)->skip(($page-1)*$pageSize) // 跳过前9999条记录 + ->take($pageSize)->get(); + return \Yz::Return(true, '查询成功', ['list'=>$list,'count'=>$count]); + } + //获取启用的设备列表 + public function GetEnableList(){ + $list=DB::table('s_devices')->where(['is_del'=>0,'status'=>1])->get(); + return \Yz::Return(true, '查询成功', $list); + } + public function Save($data,$userid){ + if(empty($data['id'])){ + $data['adduser']=$userid; + $data['is_del']=0; + $id=DB::table('s_devices')->insertGetId($data); + if($id){ + return \Yz::Return(true, '添加成功', $id); + }else{ + return \Yz::Return(false, '添加失败'); + } + }else{ + $res=DB::table('s_devices')->where('id',$data['id'])->update($data); + if($res){ + return \Yz::Return(true, '修改成功'); + }else{ + return \Yz::Return(false, '修改失败'); + } + } + } + public function Del($id){ + $res=DB::table('s_devices')->where('id',$id)->update(['is_del'=>1]); + if($res){ + return \Yz::Return(true, '删除成功'); + }else{ + return \Yz::Return(false, '删除失败'); + } + } +} diff --git a/Laravel/app/Services/Admin/YeWu/HealthCalendarService.php b/Laravel/app/Services/Admin/YeWu/HealthCalendarService.php new file mode 100644 index 0000000..7f47dee --- /dev/null +++ b/Laravel/app/Services/Admin/YeWu/HealthCalendarService.php @@ -0,0 +1,138 @@ +$info,'group'=>$group,'userid'=>$userid] + + public function CreateCalendar($arr){ + + //如果是体检机构为自己创建日历判断权限,是否是为自己创建,否则拒绝 + if($arr['group']==7){ + $cha=DB::table('medical_institution')->where(['link_user_id'=>$arr['userid']])->get(); + if($cha[0]->id <> $arr['info']['orgId']){ + return \Yz::echoError1('无权限为此机构创建体检日历'); + } + } + $startDate = Carbon::parse($arr['info']['dateRange'][0]); + $endDate = Carbon::parse($arr['info']['dateRange'][1]); + $currentDate = $startDate; + $time=$arr['info']['timeRange'][0].'--'.$arr['info']['timeRange'][1]; + $j=0; + while ($currentDate->lte($endDate)) { + $day= $currentDate->format('Y-m-d') . "\n"; + $weekday=date('N',strtotime($day)); + if (in_array($weekday,$arr['info']['xingqi'] )) { //判断循环到的日期那天的星期是否在勾选的星期内,是则进行添加 + $i=DB::table('institutional_calendar')->insert([ + 'institution_id'=>$arr['info']['orgId'], + 'date'=>$day, + 'week'=>$weekday, + 'time'=>$time, + 'end_time'=>$day.' '.$arr['info']['endTime'], + 'count'=>$arr['info']['count'], + 'status'=>1 + ]); + $j++; + } + + $currentDate->addDay(); // 增加一天 + } + + return \Yz::Return(true,'成功创建'.$j.'天体检日历',[]); + } + //获取体检机构日历 + //参数['group'=>$group,'userid'=>$userid,'page'=>$page,'pageSize'=>$pageSize,'searchInfo'=>$searchInfo] + public function getList($arr){ + $sql=' where a.status in(0,1)'; + $canshu=array(); + + + + if($arr['searchInfo']['status']==99){ + $sql=' where a.status in(0,1)'; + } + if($arr['searchInfo']['status']==0){ + $sql=' where a.status in(0)'; + } + if($arr['searchInfo']['status']==1){ + $sql=' where a.status in(1)'; + } + + + if($arr['searchInfo']['dateRange']){ + + $sql=$sql . ' and a.date>=? and a.date<=? '; + array_push($canshu,$arr['searchInfo']['dateRange'][0],$arr['searchInfo']['dateRange'][1]); + } + if($arr['searchInfo']['xingqi']){ + $placeholders = rtrim(str_repeat('?,', count($arr['searchInfo']['xingqi'])), ','); + $sql=$sql . ' and a.week in('.$placeholders.') '; + foreach ($arr['searchInfo']['xingqi'] as $item){ + array_push($canshu,$item); + } + + } + + if($arr['group']==7){ + $cha=DB::table('medical_institution')->where(['link_user_id'=>$arr['userid']])->get(); + $sql=$sql .' and a.institution_id=?'; + array_push($canshu, $cha[0]->id); + }else{ + if($arr['searchInfo']['orgId']){ + + $sql=$sql .' and a.institution_id=?'; + array_push($canshu, $arr['searchInfo']['orgId']); + } + + } + array_push($canshu,($arr['page']-1)*$arr['pageSize'],$arr['pageSize']); + // $query=DB::select("select a.*,b.org_name,c.usedcount from institutional_calendar as a left join medical_institution as b on a.institution_id=b.id LEFT JOIN (select calendar_id,count(*) as usedcount from appointment_record where status=1 group by calendar_id) as c on a.id=c.calendar_id ".$sql." order by a.date limit ?,?",$canshu); + // $count=DB::select("select count(*) as c from institutional_calendar as a left join medical_institution as b on a.institution_id=b.id LEFT JOIN (select calendar_id,count(*) as usedcount from appointment_record where status=1 group by calendar_id) as c on a.id=c.calendar_id ".$sql,$canshu); + // return \Yz::Return(true,'',['list'=>$query,'count'=>$count[0]->c]); + return []; + } + + //参数['list'=>$list,'group'=>$group,'userid'=>$userid] + public function Del($arr){ + $query = DB::table('institutional_calendar'); + if($arr['group']==7) { + $cha = DB::table('medical_institution')->select(['id'])->where(['link_user_id' => $arr['userid']])->get(); + $query->where('institution_id',$cha[0]->id); + } + $d=$query->whereIn('id',$arr['list'])->delete(); + if($d){ + return \Yz::Return(true,'',[]); + }else{ + return \Yz::Return(false,'删除失败',[]); + } + } + + + //参数['changeInfo'=>$changeInfo,'group'=>$group,'userid'=>$userid] + //修改日历信息 + public function ChangeInfo($arr){ + $u=0; + $query = DB::table('institutional_calendar'); + if($arr['group']==7) { + $cha = DB::table('medical_institution')->select(['id'])->where(['link_user_id' => $arr['userid']])->get(); + $query->where('institution_id',$cha[0]->id); + } + $query->whereIn('id',$arr['changeInfo']['list']); + if($arr['changeInfo']['type']=='status'){ + $u=$query->update(['status'=>$arr['changeInfo']['status']]); + } + if($arr['changeInfo']['type']=='count'){ + $u=$query->update(['count'=>$arr['changeInfo']['count']]); + } + if($u){ + return \Yz::Return(true,'成功更新'.$u.'条记录',[]); + }else{ + return \Yz::Return(false,'更新失败',[]); + } + } +} diff --git a/Laravel/app/Services/Admin/YeWu/YuYueTypeService.php b/Laravel/app/Services/Admin/YeWu/YuYueTypeService.php new file mode 100644 index 0000000..101ca55 --- /dev/null +++ b/Laravel/app/Services/Admin/YeWu/YuYueTypeService.php @@ -0,0 +1,13 @@ +get(); + return \Yz::Return(true, '查询成功', $l); + } +} diff --git a/Laravel/app/Services/ConfigService.php b/Laravel/app/Services/ConfigService.php new file mode 100644 index 0000000..ced8996 --- /dev/null +++ b/Laravel/app/Services/ConfigService.php @@ -0,0 +1,37 @@ +select(['label','value'])->whereIn('label',$arr)->get(); + if(count($q)>0) { + $result = []; + foreach ($q as $k => $v) { + $result[$v->label] = $v->value; + } + return \Yz::Return(true, '查询成功', $result); + }else{ + return \Yz::Return(false, '查询失败'); + } + } + public function SaveConfig($name,$logo){ + $result=array(); + DB::beginTransaction(); + try { + $d= DB::table('configs')->where('label', '=', '站点名称')->update(['value'=>$name]); + $d= DB::table('configs')->where('label', '=', '站点图片')->update(['value'=>$logo]); + DB::commit(); // 手动提交事务 + return \Yz::Return(true, '操作成功'); + } catch (\Exception $e) { + DB::rollback(); // 发生异常时手动回滚事务 + return \Yz::Return(false, '操作失败'); + } + + + } +} diff --git a/Laravel/app/Services/LogService.php b/Laravel/app/Services/LogService.php new file mode 100644 index 0000000..03879b3 --- /dev/null +++ b/Laravel/app/Services/LogService.php @@ -0,0 +1,85 @@ +0){ + return DB::table($table_name)->where('id', $id)->update([ + 'response_data' => $response_data, + + ]); + }else{ + return DB::table($table_name)->insertGetId([ + 'request_ip' => $arr['ip'], + 'response_data' => $response_data, + 'header_data' => $header_data, + 'post_data' => $post_data, + 'get_data' => $get_data, + 'request_url' => $arr['request_url'], + 'create_time' => $formatted_date, + 'update_time' => $formatted_date + ]); + } + + + } + public static function CheckTableName(){ // 查看日志表是否存在,每月一个表,如果没有就创建 + $table_name='zz_request_log_' . date('ym'); + if(Schema::hasTable($table_name)){ + + }else{ + Schema::create($table_name, function (Blueprint $table) { + $table->id(); + $table->string('request_ip', 15); + $table->text('post_data'); + $table->text('get_data'); + $table->text('header_data'); + $table->text('response_data')->nullable(); + $table->string('request_url', 300); + $table->string('create_time', 30); + $table->string('update_time', 30); + $table->timestamps(); + }); + } + } + public static function JsonEncode($data){ //格式化数据,转json + $post_data =$data; + foreach ($post_data as $key => $post_datum) { + $str_len = mb_strlen(json_encode($post_datum, JSON_UNESCAPED_UNICODE)); + $str_size = $str_len / 1024; + if ($str_size > 10) { + if(is_array($post_data)){ + $post_data[$key]= 'Row size too large'; + }elseif(is_object($post_data)){ + $post_data->$key= 'Row size too large'; + }else{ + $post_data="data size too large"; + } + } + } + $post_data = json_encode($post_data, JSON_UNESCAPED_UNICODE); + $str_len = mb_strlen($post_data); + $str_size = $str_len / 1024; + if ($str_size > 40) $post_data = '{"data":"Row size too large"}'; + return $post_data; + } +} diff --git a/Laravel/app/Services/Login/LoginService.php b/Laravel/app/Services/Login/LoginService.php new file mode 100644 index 0000000..ca6922b --- /dev/null +++ b/Laravel/app/Services/Login/LoginService.php @@ -0,0 +1,77 @@ +select('id','pwd','group')->where([['username','=',$arr['username']],['status','=',1],['lock_to','<',$nowTime]])->get(); + if(count($query)==1){ + // $hash = password_hash($arr['password'], PASSWORD_DEFAULT); + // dd($query[0]->pwd); + $check=$this->CheckPwd(['userid'=>$query[0]->id,'password'=>$arr['password']]); + if($check['status']){ + $jwt= new JWT(); + $accessTimeout = $jwt -> GetGetSecretTimeOut(); + $refreshTimeout = $jwt -> GetRefreshTokenTimeOut(); + $access_token = $jwt->BuildJWT('yz','access',$query[0]->id,$query[0]->group,$accessTimeout); + $refresh_token = $jwt->BuildJWT('yz','refresh',$query[0]->id,'',$refreshTimeout); + if(!empty($arr['mian7'])){ + $mian7_token = $jwt->BuildJWT('yz','mian7',$query[0]->id,'',$jwt -> GetMian7TokenTimeOut()); + $result['mian7_token']=$mian7_token; + } + DB::table('users')->where(['id'=>$query[0]->id,'status'=>1])->update(['token'=>md5($refresh_token)]); + $result['token']=$access_token; + $result['refresh_token']=$refresh_token; + $result['status']='ok'; + }else{ + $result=$check; + } + + }else{ + $result['status']='no'; + $result['msg']='查询出错'; + } + }else{ + $result['status']='no'; + $result['msg']='缺少参数'; + } + return $result; + } + public function CheckPwd($arr){ + date_default_timezone_set('PRC'); + $nowTime=date('Y-m-d H:i:s',time()); + // 当前时间戳XXXX分 + $LockToTime=date('Y-m-d H:i:s', strtotime('+'.env('LOCK_TIME').'minute')); + + $query=DB::table('users')->select('pwd','times','lock_to')->where(['id'=>$arr['userid'],'status'=>1,['lock_to','<',$nowTime]])->get(); + if(count($query)==1){ + if (password_verify($arr['password'],$query[0]->pwd)) { + $u=DB::table('users')->where(['id'=>$arr['userid']])->update(['times'=>env('LOGOIN_CHECK_FAIL_TIMES')]); + return ['status'=>true,'msg'=>'ok']; + }else{ + $shengyuTimes=$query[0]->times; + if($shengyuTimes==0){ + $u=DB::table('users')->where(['id'=>$arr['userid']])->update(['times'=>env('LOGOIN_CHECK_FAIL_TIMES')]); + $shengyuTimes=env('LOGOIN_CHECK_FAIL_TIMES'); + } + //减少剩余失败次数 + $jian=DB::table('users')->where(['id'=>$arr['userid'],'status'=>1])->decrement('times',1); + if($shengyuTimes<=1 and $jian==1){ + $u=DB::table('users')->where(['id'=>$arr['userid']])->update(['lock_to'=>$LockToTime]); + } + return ['status'=>false,'msg'=>'密码不正确,剩余次数'.($shengyuTimes-1)]; + } + }else{ + return ['status'=>false,'msg'=>'用户不存在或因密码错误次数过多暂时被锁定,请稍后再试']; + } + + } +} diff --git a/Laravel/app/Services/TokenService.php b/Laravel/app/Services/TokenService.php new file mode 100644 index 0000000..148fb70 --- /dev/null +++ b/Laravel/app/Services/TokenService.php @@ -0,0 +1,43 @@ +where(['id'=>$cc['userid'],'type'=>1,'del'=>2,'token'=>md5($OldRefreshToken)])->update(['token'=>md5($refresh_token)]); + $result['token']=$access_token; + $result['refresh_token']=$refresh_token; + + if($u==1){ + $result['status']=true; + }else{ + $result['status']=false; + $result['msg']='刷新授权失败'; + } + // var_dump($result); + + }else{ + $result['status']=false; + $result['msg']='无效令牌'; + } + return $result; + } +} diff --git a/Laravel/artisan b/Laravel/artisan new file mode 100644 index 0000000..67a3329 --- /dev/null +++ b/Laravel/artisan @@ -0,0 +1,53 @@ +#!/usr/bin/env php +make(Illuminate\Contracts\Console\Kernel::class); + +$status = $kernel->handle( + $input = new Symfony\Component\Console\Input\ArgvInput, + new Symfony\Component\Console\Output\ConsoleOutput +); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running, we will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$kernel->terminate($input, $status); + +exit($status); diff --git a/Laravel/bootstrap/app.php b/Laravel/bootstrap/app.php new file mode 100644 index 0000000..037e17d --- /dev/null +++ b/Laravel/bootstrap/app.php @@ -0,0 +1,55 @@ +singleton( + Illuminate\Contracts\Http\Kernel::class, + App\Http\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/Laravel/bootstrap/cache/.gitignore b/Laravel/bootstrap/cache/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/Laravel/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/Laravel/composer.json b/Laravel/composer.json new file mode 100644 index 0000000..003e598 --- /dev/null +++ b/Laravel/composer.json @@ -0,0 +1,65 @@ +{ + "name": "laravel/laravel", + "type": "project", + "description": "The Laravel Framework.", + "keywords": ["framework", "laravel"], + "license": "MIT", + "require": { + "php": "^7.3|^8.0", + "fruitcake/laravel-cors": "^2.0", + "guzzlehttp/guzzle": "^7.0.1", + "laravel/framework": "^8.75", + "laravel/sanctum": "^2.11", + "laravel/tinker": "^2.5" + }, + "require-dev": { + "facade/ignition": "^2.5", + "fakerphp/faker": "^1.9.1", + "laravel/sail": "^1.0.1", + "mockery/mockery": "^1.4.4", + "nunomaduro/collision": "^5.10", + "phpunit/phpunit": "^9.5.10" + }, + "autoload": { + "classmap": [ + "app/Lib" + ], + "psr-4": { + "App\\": "app/", + "Database\\Factories\\": "database/factories/", + "Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "scripts": { + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi" + ], + "post-update-cmd": [ + "@php artisan vendor:publish --tag=laravel-assets --ansi --force" + ], + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate --ansi" + ] + }, + "extra": { + "laravel": { + "dont-discover": [] + } + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true + }, + "minimum-stability": "dev", + "prefer-stable": true +} diff --git a/Laravel/composer.lock b/Laravel/composer.lock new file mode 100644 index 0000000..9788af3 --- /dev/null +++ b/Laravel/composer.lock @@ -0,0 +1,8427 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "c61ff82cbf0142a401a48a8161e1595a", + "packages": [ + { + "name": "asm89/stack-cors", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/asm89/stack-cors.git", + "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/asm89/stack-cors/zipball/73e5b88775c64ccc0b84fb60836b30dc9d92ac4a", + "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2|^8.0", + "symfony/http-foundation": "^4|^5|^6", + "symfony/http-kernel": "^4|^5|^6" + }, + "require-dev": { + "phpunit/phpunit": "^7|^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "Asm89\\Stack\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander", + "email": "iam.asm89@gmail.com" + } + ], + "description": "Cross-origin resource sharing library and stack middleware", + "homepage": "https://github.com/asm89/stack-cors", + "keywords": [ + "cors", + "stack" + ], + "support": { + "issues": "https://github.com/asm89/stack-cors/issues", + "source": "https://github.com/asm89/stack-cors/tree/v2.1.1" + }, + "time": "2022-01-18T09:12:03+00:00" + }, + { + "name": "brick/math", + "version": "0.9.3", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", + "vimeo/psalm": "4.9.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.9.3" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/brick/math", + "type": "tidelift" + } + ], + "time": "2021-08-15T20:50:18+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "0992cc19268b259a39e86f296da5f0677841f42c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c", + "reference": "0992cc19268b259a39e86f296da5f0677841f42c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^3.14" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1" + }, + "time": "2021-08-13T13:06:58+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.8", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^11.0", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25 || ^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.8" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2023-06-16T13:40:37+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-02-28T11:07:21+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.3.3", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2023-08-10T19:36:49+00:00" + }, + { + "name": "egulias/email-validator", + "version": "2.1.25", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.10" + }, + "require-dev": { + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/2.1.25" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2020-12-29T14:50:06+00:00" + }, + { + "name": "fruitcake/laravel-cors", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/laravel-cors.git", + "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/783a74f5e3431d7b9805be8afb60fd0a8f743534", + "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "asm89/stack-cors": "^2.0.1", + "illuminate/contracts": "^6|^7|^8|^9", + "illuminate/support": "^6|^7|^8|^9", + "php": ">=7.2" + }, + "require-dev": { + "laravel/framework": "^6|^7.24|^8", + "orchestra/testbench-dusk": "^4|^5|^6|^7", + "phpunit/phpunit": "^6|^7|^8|^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + }, + "laravel": { + "providers": [ + "Fruitcake\\Cors\\CorsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Laravel application", + "keywords": [ + "api", + "cors", + "crossdomain", + "laravel" + ], + "support": { + "issues": "https://github.com/fruitcake/laravel-cors/issues", + "source": "https://github.com/fruitcake/laravel-cors/tree/v2.2.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "abandoned": true, + "time": "2022-02-23T14:25:13+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/a878d45c1914464426dc94da61c9e1d36ae262a8", + "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.28 || ^9.5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2022-07-30T15:56:11+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.7.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5", + "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0", + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "ext-curl": "*", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.7.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2023-05-21T14:04:53+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "111166291a0f8130081195ac4556a5587d7f1b5d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d", + "reference": "111166291a0f8130081195ac4556a5587d7f1b5d", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.0.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2023-08-03T15:11:55+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/8bd7c33a0734ae1c5d074360512beb716bef3f77", + "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.6.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2023-08-03T15:06:02+00:00" + }, + { + "name": "laravel/framework", + "version": "v8.83.27", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "e1afe088b4ca613fb96dc57e6d8dbcb8cc2c6b49" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/e1afe088b4ca613fb96dc57e6d8dbcb8cc2c6b49", + "reference": "e1afe088b4ca613fb96dc57e6d8dbcb8cc2c6b49", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "doctrine/inflector": "^1.4|^2.0", + "dragonmantank/cron-expression": "^3.0.2", + "egulias/email-validator": "^2.1.10", + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "laravel/serializable-closure": "^1.0", + "league/commonmark": "^1.3|^2.0.2", + "league/flysystem": "^1.1", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.53.1", + "opis/closure": "^3.6", + "php": "^7.3|^8.0", + "psr/container": "^1.0", + "psr/log": "^1.0|^2.0", + "psr/simple-cache": "^1.0", + "ramsey/uuid": "^4.2.2", + "swiftmailer/swiftmailer": "^6.3", + "symfony/console": "^5.4", + "symfony/error-handler": "^5.4", + "symfony/finder": "^5.4", + "symfony/http-foundation": "^5.4", + "symfony/http-kernel": "^5.4", + "symfony/mime": "^5.4", + "symfony/process": "^5.4", + "symfony/routing": "^5.4", + "symfony/var-dumper": "^5.4", + "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^1.6.1" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.0", + "psr/simple-cache-implementation": "1.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.198.1", + "doctrine/dbal": "^2.13.3|^3.1.4", + "filp/whoops": "^2.14.3", + "guzzlehttp/guzzle": "^6.5.5|^7.0.1", + "league/flysystem-cached-adapter": "^1.0", + "mockery/mockery": "^1.4.4", + "orchestra/testbench-core": "^6.27", + "pda/pheanstalk": "^4.0", + "phpunit/phpunit": "^8.5.19|^9.5.8", + "predis/predis": "^1.1.9", + "symfony/cache": "^5.4" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.198.1).", + "brianium/paratest": "Required to run tests in parallel (^6.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", + "ext-bcmath": "Required to use the multiple_of validation rule.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.5.5|^7.0.1).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "mockery/mockery": "Required to use mocking (^1.4.4).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^8.5.19|^9.5.8).", + "predis/predis": "Required to use the predis connector (^1.1.9).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0|^7.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^5.4).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^5.4).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", + "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2022-12-08T15:28:55+00:00" + }, + { + "name": "laravel/sanctum", + "version": "v2.15.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/sanctum.git", + "reference": "31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473", + "reference": "31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "illuminate/console": "^6.9|^7.0|^8.0|^9.0", + "illuminate/contracts": "^6.9|^7.0|^8.0|^9.0", + "illuminate/database": "^6.9|^7.0|^8.0|^9.0", + "illuminate/support": "^6.9|^7.0|^8.0|^9.0", + "php": "^7.2|^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0", + "phpunit/phpunit": "^8.0|^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Sanctum\\SanctumServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sanctum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", + "keywords": [ + "auth", + "laravel", + "sanctum" + ], + "support": { + "issues": "https://github.com/laravel/sanctum/issues", + "source": "https://github.com/laravel/sanctum" + }, + "time": "2022-04-08T13:39:49+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/e5a3057a5591e1cfe8183034b0203921abe2c902", + "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "nesbot/carbon": "^2.61", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2023-07-14T13:56:28+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.8.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "04a2d3bd0d650c0764f70bf49d1ee39393e4eb10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/04a2d3bd0d650c0764f70bf49d1ee39393e4eb10", + "reference": "04a2d3bd0d650c0764f70bf49d1ee39393e4eb10", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.10.4|^0.11.1", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpunit/phpunit": "^8.5.8|^9.3.3" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.8.1" + }, + "time": "2023-02-15T16:40:09+00:00" + }, + { + "name": "league/commonmark", + "version": "2.3.9", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "c1e114f74e518daca2729ea8c4bf1167038fa4b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c1e114f74e518daca2729ea8c4bf1167038fa4b5", + "reference": "c1e114f74e518daca2729ea8c4bf1167038fa4b5", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.0", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2023-02-15T14:07:24+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "1.1.10", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1", + "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-fileinfo": "*", + "league/mime-type-detection": "^1.3", + "php": "^7.2.5 || ^8.0" + }, + "conflict": { + "league/flysystem-sftp": "<1.0.6" + }, + "require-dev": { + "phpspec/prophecy": "^1.11.1", + "phpunit/phpunit": "^8.5.8" + }, + "suggest": { + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", + "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", + "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", + "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", + "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", + "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", + "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", + "league/flysystem-webdav": "Allows you to use WebDAV storage", + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", + "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Filesystem abstraction: Many filesystems, one API.", + "keywords": [ + "Cloud Files", + "WebDAV", + "abstraction", + "aws", + "cloud", + "copy.com", + "dropbox", + "file systems", + "files", + "filesystem", + "filesystems", + "ftp", + "rackspace", + "remote", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/1.1.10" + }, + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "other" + } + ], + "time": "2022-10-04T09:16:37+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.12.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "c7f2872fb273bf493811473dafc88d60ae829f48" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/c7f2872fb273bf493811473dafc88d60ae829f48", + "reference": "c7f2872fb273bf493811473dafc88d60ae829f48", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.12.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2023-08-03T07:14:11+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f259e2b15fb95494c83f52d3caad003bbf5ffaa1", + "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpspec/prophecy": "^1.15", + "phpstan/phpstan": "^0.12.91", + "phpunit/phpunit": "^8.5.14", + "predis/predis": "^1.1 || ^2.0", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.9.1" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2023-02-06T13:44:46+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.69.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "4308217830e4ca445583a37d1bf4aff4153fa81c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4308217830e4ca445583a37d1bf4aff4153fa81c", + "reference": "4308217830e4ca445583a37d1bf4aff4153fa81c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "psr/clock": "^1.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^2.0 || ^3.1.4", + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "*", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2023-08-03T09:00:52+00:00" + }, + { + "name": "nette/schema", + "version": "v1.2.3", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": ">=7.1 <8.3" + }, + "require-dev": { + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.2.3" + }, + "time": "2022-10-13T01:24:26+00:00" + }, + { + "name": "nette/utils", + "version": "v3.2.10", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "a4175c62652f2300c8017fb7e640f9ccb11648d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/a4175c62652f2300c8017fb7e640f9ccb11648d2", + "reference": "a4175c62652f2300c8017fb7e640f9ccb11648d2", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2 <8.4" + }, + "conflict": { + "nette/di": "<3.0.6" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "~2.0", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v3.2.10" + }, + "time": "2023-07-30T15:38:18+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.17.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "844c228bf2b34a25ea8fed58f7929d14cf0c068e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/844c228bf2b34a25ea8fed58f7929d14cf0c068e", + "reference": "844c228bf2b34a25ea8fed58f7929d14cf0c068e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.0" + }, + "time": "2023-08-13T14:53:08+00:00" + }, + { + "name": "opis/closure", + "version": "3.6.3", + "source": { + "type": "git", + "url": "https://github.com/opis/closure.git", + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad", + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.4 || ^7.0 || ^8.0" + }, + "require-dev": { + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.6.x-dev" + } + }, + "autoload": { + "files": [ + "functions.php" + ], + "psr-4": { + "Opis\\Closure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], + "support": { + "issues": "https://github.com/opis/closure/issues", + "source": "https://github.com/opis/closure/tree/3.6.3" + }, + "time": "2022-01-27T09:35:39+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.1", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e", + "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2023-02-25T19:38:58+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.2" + }, + "time": "2021-11-05T16:50:12+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, + "time": "2020-06-29T06:28:15+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "e616d01114759c4c489f93b099585439f795fe35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + }, + "time": "2023-04-10T20:10:41+00:00" + }, + { + "name": "psr/http-message", + "version": "1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/1.1" + }, + "time": "2023-04-04T09:50:52+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/master" + }, + "time": "2017-10-23T01:57:42+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.11.19", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "1724ceff278daeeac5a006744633bacbb2dc4706" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/1724ceff278daeeac5a006744633bacbb2dc4706", + "reference": "1724ceff278daeeac5a006744633bacbb2dc4706", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^4.0 || ^3.1", + "php": "^8.0 || ^7.0.8", + "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.11.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.11.19" + }, + "time": "2023-07-15T19:42:19+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/ad7475d1c9e70b190ecffc58f2d989416af339b4", + "reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.4 || ^8.0", + "symfony/polyfill-php81": "^1.23" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.28.3", + "fakerphp/faker": "^1.21", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^1.0", + "mockery/mockery": "^1.5", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcsstandards/phpcsutils": "^1.0.0-rc1", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18.4", + "ramsey/coding-standard": "^2.0.3", + "ramsey/conventional-commits": "^1.3", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/1.3.0" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2022-12-27T19:12:24+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.2.3", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "brick/math": "^0.8 || ^0.9", + "ext-json": "*", + "php": "^7.2 || ^8.0", + "ramsey/collection": "^1.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php80": "^1.14" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "moontoast/math": "^1.1", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5 || ^9", + "slevomat/coding-standard": "^7.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-ctype": "Enables faster processing of character classification using ctype functions.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.x-dev" + }, + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.2.3" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2021-09-25T23:10:38+00:00" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "egulias/email-validator": "^2.0|^3.1", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.4" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "https://swiftmailer.symfony.com", + "keywords": [ + "email", + "mail", + "mailer" + ], + "support": { + "issues": "https://github.com/swiftmailer/swiftmailer/issues", + "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", + "type": "tidelift" + } + ], + "abandoned": "symfony/mailer", + "time": "2021-10-18T15:26:12+00:00" + }, + { + "name": "symfony/console", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "b504a3d266ad2bb632f196c0936ef2af5ff6e273" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/b504a3d266ad2bb632f196c0936ef2af5ff6e273", + "reference": "b504a3d266ad2bb632f196c0936ef2af5ff6e273", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-19T20:11:33+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "0ad3f7e9a1ab492c5b4214cf22a9dc55dcf8600a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/0ad3f7e9a1ab492c5b4214cf22a9dc55dcf8600a", + "reference": "0ad3f7e9a1ab492c5b4214cf22a9dc55dcf8600a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-07T06:10:25+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "b26719213a39c9ba57520cbc5e52bfcc5e8d92f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/b26719213a39c9ba57520cbc5e52bfcc5e8d92f9", + "reference": "b26719213a39c9ba57520cbc5e52bfcc5e8d92f9", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/serializer": "^4.4|^5.0|^6.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-16T16:48:57+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "5dcc00e03413f05c1e7900090927bb7247cb0aac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/5dcc00e03413f05c1e7900090927bb7247cb0aac", + "reference": "5dcc00e03413f05c1e7900090927bb7247cb0aac", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^2|^3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-06T06:34:20+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.4.27", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/ff4bce3c33451e7ec778070e45bd23f74214cd5d", + "reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.4.27" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-31T08:02:31+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "e7793151e99dc2ac1352ff3735d100fb3b3bfc08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e7793151e99dc2ac1352ff3735d100fb3b3bfc08", + "reference": "e7793151e99dc2ac1352ff3735d100fb3b3bfc08", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-21T11:30:15+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v5.4.27", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "9f5624816c0b8d92f85666ac7ed2825a18fcd899" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9f5624816c0b8d92f85666ac7ed2825a18fcd899", + "reference": "9f5624816c0b8d92f85666ac7ed2825a18fcd899", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1|^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^5.0|^6.0", + "symfony/http-foundation": "^5.4.21|^6.2.7", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<5.3", + "symfony/doctrine-bridge": "<5.0", + "symfony/form": "<5.0", + "symfony/http-client": "<5.0", + "symfony/mailer": "<5.0", + "symfony/messenger": "<5.0", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<5.0", + "symfony/validator": "<5.0", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^5.0|^6.0", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.3|^6.0", + "symfony/dom-crawler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/translation": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v5.4.27" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-31T10:18:38+00:00" + }, + { + "name": "symfony/mime", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "2ea06dfeee20000a319d8407cea1d47533d5a9d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/2ea06dfeee20000a319d8407cea1d47533d5a9d2", + "reference": "2ea06dfeee20000a319d8407cea1d47533d5a9d2", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<4.4", + "symfony/serializer": "<5.4.26|>=6,<6.2.13|>=6.3,<6.3.2" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/property-access": "^4.4|^5.1|^6.0", + "symfony/property-info": "^4.4|^5.1|^6.0", + "symfony/serializer": "^5.4.26|~6.2.13|^6.3.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-27T06:29:31+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "927013f3aac555983a5059aada98e1907d842695" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/927013f3aac555983a5059aada98e1907d842695", + "reference": "927013f3aac555983a5059aada98e1907d842695", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-iconv": "*" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/process", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "1a44dc377ec86a50fab40d066cd061e28a6b482f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/1a44dc377ec86a50fab40d066cd061e28a6b482f", + "reference": "1a44dc377ec86a50fab40d066cd061e28a6b482f", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-12T15:44:31+00:00" + }, + { + "name": "symfony/routing", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "853fc7df96befc468692de0a48831b38f04d2cb2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/853fc7df96befc468692de0a48831b38f04d2cb2", + "reference": "853fc7df96befc468692de0a48831b38f04d2cb2", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<5.3", + "symfony/dependency-injection": "<4.4", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.3|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-24T13:28:37+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-30T19:17:29+00:00" + }, + { + "name": "symfony/string", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "1181fe9270e373537475e826873b5867b863883c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/1181fe9270e373537475e826873b5867b863883c", + "reference": "1181fe9270e373537475e826873b5867b863883c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "conflict": { + "symfony/translation-contracts": ">=3.0" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-06-28T12:46:07+00:00" + }, + { + "name": "symfony/translation", + "version": "v5.4.24", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "de237e59c5833422342be67402d487fbf50334ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/de237e59c5833422342be67402d487fbf50334ff", + "reference": "de237e59c5833422342be67402d487fbf50334ff", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation-contracts": "^2.3" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/console": "<5.3", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" + }, + "provide": { + "symfony/translation-implementation": "2.3" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.0|^6.0", + "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v5.4.24" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-19T12:34:17+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/136b19dd05cdf0709db6537d058bcab6dd6e2dbe", + "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v2.5.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-06-27T16:58:25+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v5.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "e706c99b4a6f4d9383b52b80dd8c74880501e314" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/e706c99b4a6f4d9383b52b80dd8c74880501e314", + "reference": "e706c99b4a6f4d9383b52b80dd8c74880501e314", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/console": "<4.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/uid": "^5.1|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v5.4.26" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-13T07:32:46+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.6", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6" + }, + "time": "2023-01-03T09:29:04+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.4.1", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f", + "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.2", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.8", + "symfony/polyfill-ctype": "^1.23", + "symfony/polyfill-mbstring": "^1.23.1", + "symfony/polyfill-php80": "^1.23.1" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.4-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2021-12-12T23:22:04+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a", + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/1.6.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2022-01-24T18:55:24+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.30 || ^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:15:36+00:00" + }, + { + "name": "facade/flare-client-php", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/facade/flare-client-php.git", + "reference": "213fa2c69e120bca4c51ba3e82ed1834ef3f41b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/flare-client-php/zipball/213fa2c69e120bca4c51ba3e82ed1834ef3f41b8", + "reference": "213fa2c69e120bca4c51ba3e82ed1834ef3f41b8", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "facade/ignition-contracts": "~1.0", + "illuminate/pipeline": "^5.5|^6.0|^7.0|^8.0", + "php": "^7.1|^8.0", + "symfony/http-foundation": "^3.3|^4.1|^5.0", + "symfony/mime": "^3.4|^4.0|^5.1", + "symfony/var-dumper": "^3.4|^4.0|^5.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.14", + "phpunit/phpunit": "^7.5", + "spatie/phpunit-snapshot-assertions": "^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Facade\\FlareClient\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/facade/flare-client-php", + "keywords": [ + "exception", + "facade", + "flare", + "reporting" + ], + "support": { + "issues": "https://github.com/facade/flare-client-php/issues", + "source": "https://github.com/facade/flare-client-php/tree/1.10.0" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-08-09T11:23:57+00:00" + }, + { + "name": "facade/ignition", + "version": "2.17.7", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition.git", + "reference": "b4f5955825bb4b74cba0f94001761c46335c33e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition/zipball/b4f5955825bb4b74cba0f94001761c46335c33e9", + "reference": "b4f5955825bb4b74cba0f94001761c46335c33e9", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "facade/flare-client-php": "^1.9.1", + "facade/ignition-contracts": "^1.0.2", + "illuminate/support": "^7.0|^8.0", + "monolog/monolog": "^2.0", + "php": "^7.2.5|^8.0", + "symfony/console": "^5.0", + "symfony/var-dumper": "^5.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.14", + "livewire/livewire": "^2.4", + "mockery/mockery": "^1.3", + "orchestra/testbench": "^5.0|^6.0", + "psalm/plugin-laravel": "^1.2" + }, + "suggest": { + "laravel/telescope": "^3.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Facade\\Ignition\\IgnitionServiceProvider" + ], + "aliases": { + "Flare": "Facade\\Ignition\\Facades\\Flare" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Facade\\Ignition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://github.com/facade/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/facade/ignition/issues", + "source": "https://github.com/facade/ignition" + }, + "time": "2023-01-26T12:34:59+00:00" + }, + { + "name": "facade/ignition-contracts", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition-contracts.git", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v2.15.8", + "phpunit/phpunit": "^9.3.11", + "vimeo/psalm": "^3.17.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Facade\\IgnitionContracts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://flareapp.io", + "role": "Developer" + } + ], + "description": "Solution contracts for Ignition", + "homepage": "https://github.com/facade/ignition-contracts", + "keywords": [ + "contracts", + "flare", + "ignition" + ], + "support": { + "issues": "https://github.com/facade/ignition-contracts/issues", + "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" + }, + "time": "2020-10-16T08:27:54+00:00" + }, + { + "name": "fakerphp/faker", + "version": "v1.22.0", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "f85772abd508bd04e20bb4b1bbe260a68d0066d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/f85772abd508bd04e20bb4b1bbe260a68d0066d2", + "reference": "f85772abd508bd04e20bb4b1bbe260a68d0066d2", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "v1.21-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.22.0" + }, + "time": "2023-05-14T12:31:37+00:00" + }, + { + "name": "filp/whoops", + "version": "2.15.3", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "c83e88a30524f9360b11f585f71e6b17313b7187" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/c83e88a30524f9360b11f585f71e6b17313b7187", + "reference": "c83e88a30524f9360b11f585f71e6b17313b7187", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.15.3" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2023-07-13T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.19.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "4f230634a3163f3442def6a4e6ffdb02b02e14d6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/4f230634a3163f3442def6a4e6ffdb02b02e14d6", + "reference": "4f230634a3163f3442def6a4e6ffdb02b02e14d6", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "illuminate/console": "^8.0|^9.0|^10.0", + "illuminate/contracts": "^8.0|^9.0|^10.0", + "illuminate/support": "^8.0|^9.0|^10.0", + "php": "^7.3|^8.0" + }, + "bin": [ + "bin/sail" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Docker files for running a basic Laravel application.", + "keywords": [ + "docker", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/sail/issues", + "source": "https://github.com/laravel/sail" + }, + "time": "2023-01-31T13:37:57+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.6", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/b8e0bb7d8c604046539c1115994632c74dcb361e", + "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.10", + "psalm/plugin-phpunit": "^0.18.4", + "symplify/easy-coding-standard": "^11.5.0", + "vimeo/psalm": "^4.30" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2023-08-09T00:03:52+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2023-03-08T13:26:56+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v5.11.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/8b610eef8582ccdc05d8f2ab23305e2d37049461", + "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "facade/ignition-contracts": "^1.0", + "filp/whoops": "^2.14.3", + "php": "^7.3 || ^8.0", + "symfony/console": "^5.0" + }, + "require-dev": { + "brianium/paratest": "^6.1", + "fideloper/proxy": "^4.4.1", + "fruitcake/laravel-cors": "^2.0.3", + "laravel/framework": "8.x-dev", + "nunomaduro/larastan": "^0.6.2", + "nunomaduro/mock-final-classes": "^1.0", + "orchestra/testbench": "^6.0", + "phpstan/phpstan": "^0.12.64", + "phpunit/phpunit": "^9.5.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2022-01-10T16:22:52+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.26", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.15", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-03-06T12:58:08+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.6.10", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "a6d351645c3fe5a30f5e86be6577d946af65a328" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a6d351645c3fe5a30f5e86be6577d946af65a328", + "reference": "a6d351645c3fe5a30f5e86be6577d946af65a328", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "doctrine/instantiator": "^1.3.1 || ^2", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.13", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.5", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.2", + "sebastian/version": "^3.0.2" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.6-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.10" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2023-07-10T04:04:23+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:41:17+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-05-07T05:35:17+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:03:51+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T06:03:37+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bde739e7565280bda77be70044ac1047bc007e34" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", + "reference": "bde739e7565280bda77be70044ac1047bc007e34", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-02T09:26:13+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:07:39+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:13:03+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^7.3|^8.0" + }, + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/Laravel/config/app.php b/Laravel/config/app.php new file mode 100644 index 0000000..ef6ebfa --- /dev/null +++ b/Laravel/config/app.php @@ -0,0 +1,249 @@ + [ + 'WxAppid' => 'wx526430047d34c85c', //岚科公众号 + 'WxAppSecret' => '975b8a8b627b1bde71bbe49149134549', //岚科公众号 + +// 'WxAppid' => 'wx8f83ab76a99ba560',//测试 +// 'WxAppSecret' => 'eebc53a9e94f676bd680d3a09eb20303',//测试 + 'BaseServerUrl' =>'http://localhostcommon', + 'WxRedirectUrl'=>'https://www.yanzai.vip/common/laravel/public/wxGetCode', //微信授权登录,重定向地址 + + 'WxReturnCodeUrl_local'=>'http://192.168.31.106:5173/#/getWxCode/', //获取code后引导返回到前端的地址 开发 + 'WxReturnCodeUrl_server'=>'https://www.yanzai.vip/common/mH5/#/getWxCode/', //获取code后引导返回到前端的地址 生产 + + + ], + + /* + |-------------------------------------------------------------------------- + | Application Name + |-------------------------------------------------------------------------- + | + | This value is the name of your application. This value is used when the + | framework needs to place the application's name in a notification or + | any other location as required by the application or its packages. + | + */ + + 'name' => env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + 'asset_url' => env('ASSET_URL', null), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => 'UTC', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Faker Locale + |-------------------------------------------------------------------------- + | + | This locale will be used by the Faker PHP library when generating fake + | data for your database seeds. For example, this will be used to get + | localized telephone numbers, street address information and more. + | + */ + + 'faker_locale' => 'en_US', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY'), + + 'cipher' => 'AES-256-CBC', + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + Illuminate\Auth\AuthServiceProvider::class, + Illuminate\Broadcasting\BroadcastServiceProvider::class, + Illuminate\Bus\BusServiceProvider::class, + Illuminate\Cache\CacheServiceProvider::class, + Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, + Illuminate\Cookie\CookieServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + Illuminate\Encryption\EncryptionServiceProvider::class, + Illuminate\Filesystem\FilesystemServiceProvider::class, + Illuminate\Foundation\Providers\FoundationServiceProvider::class, + Illuminate\Hashing\HashServiceProvider::class, + Illuminate\Mail\MailServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, + Illuminate\Pagination\PaginationServiceProvider::class, + Illuminate\Pipeline\PipelineServiceProvider::class, + Illuminate\Queue\QueueServiceProvider::class, + Illuminate\Redis\RedisServiceProvider::class, + Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, + Illuminate\Session\SessionServiceProvider::class, + Illuminate\Translation\TranslationServiceProvider::class, + Illuminate\Validation\ValidationServiceProvider::class, + Illuminate\View\ViewServiceProvider::class, + + /* + * Package Service Providers... + */ + + /* + * Application Service Providers... + */ + App\Providers\AppServiceProvider::class, + App\Providers\AuthServiceProvider::class, + // App\Providers\BroadcastServiceProvider::class, + App\Providers\EventServiceProvider::class, + App\Providers\RouteServiceProvider::class, + + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => [ + + 'App' => Illuminate\Support\Facades\App::class, + 'Arr' => Illuminate\Support\Arr::class, + 'Artisan' => Illuminate\Support\Facades\Artisan::class, + 'Auth' => Illuminate\Support\Facades\Auth::class, + 'Blade' => Illuminate\Support\Facades\Blade::class, + 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, + 'Bus' => Illuminate\Support\Facades\Bus::class, + 'Cache' => Illuminate\Support\Facades\Cache::class, + 'Config' => Illuminate\Support\Facades\Config::class, + 'Cookie' => Illuminate\Support\Facades\Cookie::class, + 'Crypt' => Illuminate\Support\Facades\Crypt::class, + 'Date' => Illuminate\Support\Facades\Date::class, + 'DB' => Illuminate\Support\Facades\DB::class, + 'Eloquent' => Illuminate\Database\Eloquent\Model::class, + 'Event' => Illuminate\Support\Facades\Event::class, + 'File' => Illuminate\Support\Facades\File::class, + 'Gate' => Illuminate\Support\Facades\Gate::class, + 'Hash' => Illuminate\Support\Facades\Hash::class, + 'Http' => Illuminate\Support\Facades\Http::class, + 'Js' => Illuminate\Support\Js::class, + 'Lang' => Illuminate\Support\Facades\Lang::class, + 'Log' => Illuminate\Support\Facades\Log::class, + 'Mail' => Illuminate\Support\Facades\Mail::class, + 'Notification' => Illuminate\Support\Facades\Notification::class, + 'Password' => Illuminate\Support\Facades\Password::class, + 'Queue' => Illuminate\Support\Facades\Queue::class, + 'RateLimiter' => Illuminate\Support\Facades\RateLimiter::class, + 'Redirect' => Illuminate\Support\Facades\Redirect::class, + // 'Redis' => Illuminate\Support\Facades\Redis::class, + 'Request' => Illuminate\Support\Facades\Request::class, + 'Response' => Illuminate\Support\Facades\Response::class, + 'Route' => Illuminate\Support\Facades\Route::class, + 'Schema' => Illuminate\Support\Facades\Schema::class, + 'Session' => Illuminate\Support\Facades\Session::class, + 'Storage' => Illuminate\Support\Facades\Storage::class, + 'Str' => Illuminate\Support\Str::class, + 'URL' => Illuminate\Support\Facades\URL::class, + 'Validator' => Illuminate\Support\Facades\Validator::class, + 'View' => Illuminate\Support\Facades\View::class, + + ], + +]; diff --git a/Laravel/config/auth.php b/Laravel/config/auth.php new file mode 100644 index 0000000..d8c6cee --- /dev/null +++ b/Laravel/config/auth.php @@ -0,0 +1,111 @@ + [ + 'guard' => 'web', + 'passwords' => 'users', + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | here which uses session storage and the Eloquent user provider. + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | Supported: "session" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | If you have multiple user tables or models you may configure multiple + | sources which represent each model / table. These sources may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => App\Models\User::class, + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | You may specify multiple password reset configurations if you have more + | than one user table or model in the application and you want to have + | separate password reset settings based on the specific user types. + | + | The expire time is the number of minutes that each reset token will be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => 'password_resets', + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the amount of seconds before a password confirmation + | times out and the user is prompted to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => 10800, + +]; diff --git a/Laravel/config/broadcasting.php b/Laravel/config/broadcasting.php new file mode 100644 index 0000000..2d52982 --- /dev/null +++ b/Laravel/config/broadcasting.php @@ -0,0 +1,64 @@ + env('BROADCAST_DRIVER', 'null'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over websockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + 'cluster' => env('PUSHER_APP_CLUSTER'), + 'useTLS' => true, + ], + ], + + 'ably' => [ + 'driver' => 'ably', + 'key' => env('ABLY_KEY'), + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'log' => [ + 'driver' => 'log', + ], + + 'null' => [ + 'driver' => 'null', + ], + + ], + +]; diff --git a/Laravel/config/cache.php b/Laravel/config/cache.php new file mode 100644 index 0000000..8736c7a --- /dev/null +++ b/Laravel/config/cache.php @@ -0,0 +1,110 @@ + env('CACHE_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "apc", "array", "database", "file", + | "memcached", "redis", "dynamodb", "octane", "null" + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc', + ], + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + 'lock_connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'cache', + 'lock_connection' => 'default', + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + 'octane' => [ + 'driver' => 'octane', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing a RAM based store such as APC or Memcached, there might + | be other applications utilizing the same cache. So, we'll specify a + | value to get prefixed to all our keys so we can avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'), + +]; diff --git a/Laravel/config/cors.php b/Laravel/config/cors.php new file mode 100644 index 0000000..8a39e6d --- /dev/null +++ b/Laravel/config/cors.php @@ -0,0 +1,34 @@ + ['api/*', 'sanctum/csrf-cookie'], + + 'allowed_methods' => ['*'], + + 'allowed_origins' => ['*'], + + 'allowed_origins_patterns' => [], + + 'allowed_headers' => ['*'], + + 'exposed_headers' => [], + + 'max_age' => 0, + + 'supports_credentials' => false, + +]; diff --git a/Laravel/config/database.php b/Laravel/config/database.php new file mode 100644 index 0000000..b42d9b3 --- /dev/null +++ b/Laravel/config/database.php @@ -0,0 +1,147 @@ + env('DB_CONNECTION', 'mysql'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DATABASE_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + 'schema' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + ], + + ], + +]; diff --git a/Laravel/config/filesystems.php b/Laravel/config/filesystems.php new file mode 100644 index 0000000..760ef97 --- /dev/null +++ b/Laravel/config/filesystems.php @@ -0,0 +1,73 @@ + env('FILESYSTEM_DRIVER', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been setup for each driver as an example of the required options. + | + | Supported Drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app'), + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL').'/storage', + 'visibility' => 'public', + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [ + public_path('storage') => storage_path('app/public'), + ], + +]; diff --git a/Laravel/config/hashing.php b/Laravel/config/hashing.php new file mode 100644 index 0000000..bcd3be4 --- /dev/null +++ b/Laravel/config/hashing.php @@ -0,0 +1,52 @@ + 'bcrypt', + + /* + |-------------------------------------------------------------------------- + | Bcrypt Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Bcrypt algorithm. This will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'bcrypt' => [ + 'rounds' => env('BCRYPT_ROUNDS', 10), + ], + + /* + |-------------------------------------------------------------------------- + | Argon Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Argon algorithm. These will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'argon' => [ + 'memory' => 65536, + 'threads' => 1, + 'time' => 4, + ], + +]; diff --git a/Laravel/config/logging.php b/Laravel/config/logging.php new file mode 100644 index 0000000..880cd92 --- /dev/null +++ b/Laravel/config/logging.php @@ -0,0 +1,118 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => 14, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => env('LOG_LEVEL', 'critical'), + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => SyslogUdpHandler::class, + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + ], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + ], + +]; diff --git a/Laravel/config/mail.php b/Laravel/config/mail.php new file mode 100644 index 0000000..f96c6c7 --- /dev/null +++ b/Laravel/config/mail.php @@ -0,0 +1,118 @@ + env('MAIL_MAILER', 'smtp'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers to be used while + | sending an e-mail. You will specify which one you are using for your + | mailers below. You are free to add additional mailers as required. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", + | "postmark", "log", "array", "failover" + | + */ + + 'mailers' => [ + 'smtp' => [ + 'transport' => 'smtp', + 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + 'port' => env('MAIL_PORT', 587), + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + 'auth_mode' => null, + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'mailgun' => [ + 'transport' => 'mailgun', + ], + + 'postmark' => [ + 'transport' => 'postmark', + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -t -i'), + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL'), + ], + + 'array' => [ + 'transport' => 'array', + ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + ], + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + + /* + |-------------------------------------------------------------------------- + | Markdown Mail Settings + |-------------------------------------------------------------------------- + | + | If you are using Markdown based email rendering, you may configure your + | theme and component paths here, allowing you to customize the design + | of the emails. Or, you may simply stick with the Laravel defaults! + | + */ + + 'markdown' => [ + 'theme' => 'default', + + 'paths' => [ + resource_path('views/vendor/mail'), + ], + ], + +]; diff --git a/Laravel/config/queue.php b/Laravel/config/queue.php new file mode 100644 index 0000000..25ea5a8 --- /dev/null +++ b/Laravel/config/queue.php @@ -0,0 +1,93 @@ + env('QUEUE_CONNECTION', 'sync'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'retry_after' => 90, + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'retry_after' => 90, + 'block_for' => 0, + 'after_commit' => false, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'default'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => 90, + 'block_for' => null, + 'after_commit' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/Laravel/config/sanctum.php b/Laravel/config/sanctum.php new file mode 100644 index 0000000..9281c92 --- /dev/null +++ b/Laravel/config/sanctum.php @@ -0,0 +1,65 @@ + explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( + '%s%s', + 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', + env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : '' + ))), + + /* + |-------------------------------------------------------------------------- + | Sanctum Guards + |-------------------------------------------------------------------------- + | + | This array contains the authentication guards that will be checked when + | Sanctum is trying to authenticate a request. If none of these guards + | are able to authenticate the request, Sanctum will use the bearer + | token that's present on an incoming request for authentication. + | + */ + + 'guard' => ['web'], + + /* + |-------------------------------------------------------------------------- + | Expiration Minutes + |-------------------------------------------------------------------------- + | + | This value controls the number of minutes until an issued token will be + | considered expired. If this value is null, personal access tokens do + | not expire. This won't tweak the lifetime of first-party sessions. + | + */ + + 'expiration' => null, + + /* + |-------------------------------------------------------------------------- + | Sanctum Middleware + |-------------------------------------------------------------------------- + | + | When authenticating your first-party SPA with Sanctum you may need to + | customize some of the middleware Sanctum uses while processing the + | request. You may change the middleware listed below as required. + | + */ + + 'middleware' => [ + 'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class, + 'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class, + ], + +]; diff --git a/Laravel/config/services.php b/Laravel/config/services.php new file mode 100644 index 0000000..2a1d616 --- /dev/null +++ b/Laravel/config/services.php @@ -0,0 +1,33 @@ + [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), + ], + + 'postmark' => [ + 'token' => env('POSTMARK_TOKEN'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + +]; diff --git a/Laravel/config/session.php b/Laravel/config/session.php new file mode 100644 index 0000000..ac0802b --- /dev/null +++ b/Laravel/config/session.php @@ -0,0 +1,201 @@ + env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => env('SESSION_LIFETIME', 120), + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION', null), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | While using one of the framework's cache driven session backends you may + | list a cache store that should be used for these sessions. This value + | must match with one of the application's configured cache "stores". + | + | Affects: "apc", "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE', null), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel'), '_').'_session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => env('SESSION_DOMAIN', null), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you when it can't be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. You are free to modify this option if needed. + | + */ + + 'http_only' => true, + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" since this is a secure default value. + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => 'lax', + +]; diff --git a/Laravel/config/view.php b/Laravel/config/view.php new file mode 100644 index 0000000..22b8a18 --- /dev/null +++ b/Laravel/config/view.php @@ -0,0 +1,36 @@ + [ + resource_path('views'), + ], + + /* + |-------------------------------------------------------------------------- + | Compiled View Path + |-------------------------------------------------------------------------- + | + | This option determines where all the compiled Blade templates will be + | stored for your application. Typically, this is within the storage + | directory. However, as usual, you are free to change this value. + | + */ + + 'compiled' => env( + 'VIEW_COMPILED_PATH', + realpath(storage_path('framework/views')) + ), + +]; diff --git a/Laravel/database/.gitignore b/Laravel/database/.gitignore new file mode 100644 index 0000000..9b19b93 --- /dev/null +++ b/Laravel/database/.gitignore @@ -0,0 +1 @@ +*.sqlite* diff --git a/Laravel/database/factories/UserFactory.php b/Laravel/database/factories/UserFactory.php new file mode 100644 index 0000000..a3eb239 --- /dev/null +++ b/Laravel/database/factories/UserFactory.php @@ -0,0 +1,39 @@ + $this->faker->name(), + 'email' => $this->faker->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password + 'remember_token' => Str::random(10), + ]; + } + + /** + * Indicate that the model's email address should be unverified. + * + * @return \Illuminate\Database\Eloquent\Factories\Factory + */ + public function unverified() + { + return $this->state(function (array $attributes) { + return [ + 'email_verified_at' => null, + ]; + }); + } +} diff --git a/Laravel/database/migrations/2014_10_12_000000_create_users_table.php b/Laravel/database/migrations/2014_10_12_000000_create_users_table.php new file mode 100644 index 0000000..621a24e --- /dev/null +++ b/Laravel/database/migrations/2014_10_12_000000_create_users_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users'); + } +} diff --git a/Laravel/database/migrations/2014_10_12_100000_create_password_resets_table.php b/Laravel/database/migrations/2014_10_12_100000_create_password_resets_table.php new file mode 100644 index 0000000..0ee0a36 --- /dev/null +++ b/Laravel/database/migrations/2014_10_12_100000_create_password_resets_table.php @@ -0,0 +1,32 @@ +string('email')->index(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('password_resets'); + } +} diff --git a/Laravel/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/Laravel/database/migrations/2019_08_19_000000_create_failed_jobs_table.php new file mode 100644 index 0000000..6aa6d74 --- /dev/null +++ b/Laravel/database/migrations/2019_08_19_000000_create_failed_jobs_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('failed_jobs'); + } +} diff --git a/Laravel/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php b/Laravel/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php new file mode 100644 index 0000000..4315e16 --- /dev/null +++ b/Laravel/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php @@ -0,0 +1,36 @@ +id(); + $table->morphs('tokenable'); + $table->string('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('personal_access_tokens'); + } +} diff --git a/Laravel/database/seeders/DatabaseSeeder.php b/Laravel/database/seeders/DatabaseSeeder.php new file mode 100644 index 0000000..57b73b5 --- /dev/null +++ b/Laravel/database/seeders/DatabaseSeeder.php @@ -0,0 +1,18 @@ +create(); + } +} diff --git a/Laravel/package.json b/Laravel/package.json new file mode 100644 index 0000000..00c6506 --- /dev/null +++ b/Laravel/package.json @@ -0,0 +1,18 @@ +{ + "private": true, + "scripts": { + "dev": "npm run development", + "development": "mix", + "watch": "mix watch", + "watch-poll": "mix watch -- --watch-options-poll=1000", + "hot": "mix watch --hot", + "prod": "npm run production", + "production": "mix --production" + }, + "devDependencies": { + "axios": "^0.21", + "laravel-mix": "^6.0.6", + "lodash": "^4.17.19", + "postcss": "^8.1.14" + } +} diff --git a/Laravel/phpunit.xml b/Laravel/phpunit.xml new file mode 100644 index 0000000..4ae4d97 --- /dev/null +++ b/Laravel/phpunit.xml @@ -0,0 +1,31 @@ + + + + + ./tests/Unit + + + ./tests/Feature + + + + + ./app + + + + + + + + + + + + + + diff --git a/Laravel/public/.htaccess b/Laravel/public/.htaccess new file mode 100644 index 0000000..e69de29 diff --git a/Laravel/public/favicon.ico b/Laravel/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/Laravel/public/index.php b/Laravel/public/index.php new file mode 100644 index 0000000..1d69f3a --- /dev/null +++ b/Laravel/public/index.php @@ -0,0 +1,55 @@ +make(Kernel::class); + +$response = $kernel->handle( + $request = Request::capture() +)->send(); + +$kernel->terminate($request, $response); diff --git a/Laravel/public/jq_page/appointment.html b/Laravel/public/jq_page/appointment.html new file mode 100644 index 0000000..0951090 --- /dev/null +++ b/Laravel/public/jq_page/appointment.html @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
医嘱项:
+
是否空腹:
+
开单科室:
+
开单医生:
+
开医嘱时间:
+
当前状态:
+
+
+
+
姓名: 患者id: 性别: + 年龄: 电话: 孕周:
+
+
+
+ 预约日期 + +
+
+
+
+ 预约时间段 + +
+
+
+
+ 资源 + +
+
+
+
+
+
+ 检查项目 + +
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+
日期
+
+
+
+ + + + +
+
+
+
33333
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
日期星期资源服务组时间段剩余
+
+
+
+
日期
+
+
+
+ + + + +
+
+
+
33333
+ +
+ + + + + + + + + + + + + + + + + + + + + +
日期星期资源服务组时间段剩余
+
+ + +
+
+ + + + diff --git a/Laravel/public/jq_page/css/bootstrap-datetimepicker.min.css b/Laravel/public/jq_page/css/bootstrap-datetimepicker.min.css new file mode 100644 index 0000000..78485fe --- /dev/null +++ b/Laravel/public/jq_page/css/bootstrap-datetimepicker.min.css @@ -0,0 +1,9 @@ +/*! + * Datetimepicker for Bootstrap + * + * Copyright 2012 Stefan Petre + * Improvements by Andrew Rowls + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + */.datetimepicker{padding:4px;margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;direction:ltr}.datetimepicker-inline{width:220px}.datetimepicker.datetimepicker-rtl{direction:rtl}.datetimepicker.datetimepicker-rtl table tr td span{float:right}.datetimepicker-dropdown,.datetimepicker-dropdown-left{top:0;left:0}[class*=" datetimepicker-dropdown"]:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);position:absolute}[class*=" datetimepicker-dropdown"]:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute}[class*=" datetimepicker-dropdown-top"]:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,0.2);border-bottom:0}[class*=" datetimepicker-dropdown-top"]:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;border-bottom:0}.datetimepicker-dropdown-bottom-left:before{top:-7px;right:6px}.datetimepicker-dropdown-bottom-left:after{top:-6px;right:7px}.datetimepicker-dropdown-bottom-right:before{top:-7px;left:6px}.datetimepicker-dropdown-bottom-right:after{top:-6px;left:7px}.datetimepicker-dropdown-top-left:before{bottom:-7px;right:6px}.datetimepicker-dropdown-top-left:after{bottom:-6px;right:7px}.datetimepicker-dropdown-top-right:before{bottom:-7px;left:6px}.datetimepicker-dropdown-top-right:after{bottom:-6px;left:7px}.datetimepicker>div{display:none}.datetimepicker.minutes div.datetimepicker-minutes{display:block}.datetimepicker.hours div.datetimepicker-hours{display:block}.datetimepicker.days div.datetimepicker-days{display:block}.datetimepicker.months div.datetimepicker-months{display:block}.datetimepicker.years div.datetimepicker-years{display:block}.datetimepicker table{margin:0}.datetimepicker td,.datetimepicker th{text-align:center;width:20px;height:20px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border:0}.table-striped .datetimepicker table tr td,.table-striped .datetimepicker table tr th{background-color:transparent}.datetimepicker table tr td.minute:hover{background:#eee;cursor:pointer}.datetimepicker table tr td.hour:hover{background:#eee;cursor:pointer}.datetimepicker table tr td.day:hover{background:#eee;cursor:pointer}.datetimepicker table tr td.old,.datetimepicker table tr td.new{color:#999}.datetimepicker table tr td.disabled,.datetimepicker table tr td.disabled:hover{background:0;color:#999;cursor:default}.datetimepicker table tr td.today,.datetimepicker table tr td.today:hover,.datetimepicker table tr td.today.disabled,.datetimepicker table tr td.today.disabled:hover{background-color:#fde19a;background-image:-moz-linear-gradient(top,#fdd49a,#fdf59a);background-image:-ms-linear-gradient(top,#fdd49a,#fdf59a);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdd49a),to(#fdf59a));background-image:-webkit-linear-gradient(top,#fdd49a,#fdf59a);background-image:-o-linear-gradient(top,#fdd49a,#fdf59a);background-image:linear-gradient(to bottom,#fdd49a,#fdf59a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a',endColorstr='#fdf59a',GradientType=0);border-color:#fdf59a #fdf59a #fbed50;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.datetimepicker table tr td.today:hover,.datetimepicker table tr td.today:hover:hover,.datetimepicker table tr td.today.disabled:hover,.datetimepicker table tr td.today.disabled:hover:hover,.datetimepicker table tr td.today:active,.datetimepicker table tr td.today:hover:active,.datetimepicker table tr td.today.disabled:active,.datetimepicker table tr td.today.disabled:hover:active,.datetimepicker table tr td.today.active,.datetimepicker table tr td.today:hover.active,.datetimepicker table tr td.today.disabled.active,.datetimepicker table tr td.today.disabled:hover.active,.datetimepicker table tr td.today.disabled,.datetimepicker table tr td.today:hover.disabled,.datetimepicker table tr td.today.disabled.disabled,.datetimepicker table tr td.today.disabled:hover.disabled,.datetimepicker table tr td.today[disabled],.datetimepicker table tr td.today:hover[disabled],.datetimepicker table tr td.today.disabled[disabled],.datetimepicker table tr td.today.disabled:hover[disabled]{background-color:#fdf59a}.datetimepicker table tr td.today:active,.datetimepicker table tr td.today:hover:active,.datetimepicker table tr td.today.disabled:active,.datetimepicker table tr td.today.disabled:hover:active,.datetimepicker table tr td.today.active,.datetimepicker table tr td.today:hover.active,.datetimepicker table tr td.today.disabled.active,.datetimepicker table tr td.today.disabled:hover.active{background-color:#fbf069}.datetimepicker table tr td.active,.datetimepicker table tr td.active:hover,.datetimepicker table tr td.active.disabled,.datetimepicker table tr td.active.disabled:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-ms-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc',endColorstr='#0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datetimepicker table tr td.active:hover,.datetimepicker table tr td.active:hover:hover,.datetimepicker table tr td.active.disabled:hover,.datetimepicker table tr td.active.disabled:hover:hover,.datetimepicker table tr td.active:active,.datetimepicker table tr td.active:hover:active,.datetimepicker table tr td.active.disabled:active,.datetimepicker table tr td.active.disabled:hover:active,.datetimepicker table tr td.active.active,.datetimepicker table tr td.active:hover.active,.datetimepicker table tr td.active.disabled.active,.datetimepicker table tr td.active.disabled:hover.active,.datetimepicker table tr td.active.disabled,.datetimepicker table tr td.active:hover.disabled,.datetimepicker table tr td.active.disabled.disabled,.datetimepicker table tr td.active.disabled:hover.disabled,.datetimepicker table tr td.active[disabled],.datetimepicker table tr td.active:hover[disabled],.datetimepicker table tr td.active.disabled[disabled],.datetimepicker table tr td.active.disabled:hover[disabled]{background-color:#04c}.datetimepicker table tr td.active:active,.datetimepicker table tr td.active:hover:active,.datetimepicker table tr td.active.disabled:active,.datetimepicker table tr td.active.disabled:hover:active,.datetimepicker table tr td.active.active,.datetimepicker table tr td.active:hover.active,.datetimepicker table tr td.active.disabled.active,.datetimepicker table tr td.active.disabled:hover.active{background-color:#039}.datetimepicker table tr td span{display:block;width:23%;height:54px;line-height:54px;float:left;margin:1%;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.datetimepicker .datetimepicker-hours span{height:26px;line-height:26px}.datetimepicker .datetimepicker-hours table tr td span.hour_am,.datetimepicker .datetimepicker-hours table tr td span.hour_pm{width:14.6%}.datetimepicker .datetimepicker-hours fieldset legend,.datetimepicker .datetimepicker-minutes fieldset legend{margin-bottom:inherit;line-height:30px}.datetimepicker .datetimepicker-minutes span{height:26px;line-height:26px}.datetimepicker table tr td span:hover{background:#eee}.datetimepicker table tr td span.disabled,.datetimepicker table tr td span.disabled:hover{background:0;color:#999;cursor:default}.datetimepicker table tr td span.active,.datetimepicker table tr td span.active:hover,.datetimepicker table tr td span.active.disabled,.datetimepicker table tr td span.active.disabled:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-ms-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc',endColorstr='#0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datetimepicker table tr td span.active:hover,.datetimepicker table tr td span.active:hover:hover,.datetimepicker table tr td span.active.disabled:hover,.datetimepicker table tr td span.active.disabled:hover:hover,.datetimepicker table tr td span.active:active,.datetimepicker table tr td span.active:hover:active,.datetimepicker table tr td span.active.disabled:active,.datetimepicker table tr td span.active.disabled:hover:active,.datetimepicker table tr td span.active.active,.datetimepicker table tr td span.active:hover.active,.datetimepicker table tr td span.active.disabled.active,.datetimepicker table tr td span.active.disabled:hover.active,.datetimepicker table tr td span.active.disabled,.datetimepicker table tr td span.active:hover.disabled,.datetimepicker table tr td span.active.disabled.disabled,.datetimepicker table tr td span.active.disabled:hover.disabled,.datetimepicker table tr td span.active[disabled],.datetimepicker table tr td span.active:hover[disabled],.datetimepicker table tr td span.active.disabled[disabled],.datetimepicker table tr td span.active.disabled:hover[disabled]{background-color:#04c}.datetimepicker table tr td span.active:active,.datetimepicker table tr td span.active:hover:active,.datetimepicker table tr td span.active.disabled:active,.datetimepicker table tr td span.active.disabled:hover:active,.datetimepicker table tr td span.active.active,.datetimepicker table tr td span.active:hover.active,.datetimepicker table tr td span.active.disabled.active,.datetimepicker table tr td span.active.disabled:hover.active{background-color:#039}.datetimepicker table tr td span.old{color:#999}.datetimepicker th.switch{width:145px}.datetimepicker th span.glyphicon{pointer-events:none}.datetimepicker thead tr:first-child th,.datetimepicker tfoot th{cursor:pointer}.datetimepicker thead tr:first-child th:hover,.datetimepicker tfoot th:hover{background:#eee}.input-append.date .add-on i,.input-prepend.date .add-on i,.input-group.date .input-group-addon span{cursor:pointer;width:14px;height:14px} \ No newline at end of file diff --git a/Laravel/public/jq_page/js/bootstrap-datetimepicker.min.js b/Laravel/public/jq_page/js/bootstrap-datetimepicker.min.js new file mode 100644 index 0000000..eba15ce --- /dev/null +++ b/Laravel/public/jq_page/js/bootstrap-datetimepicker.min.js @@ -0,0 +1 @@ +(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{if(typeof exports==="object"){a(require("jquery"))}else{a(jQuery)}}}(function(d,f){if(!("indexOf" in Array.prototype)){Array.prototype.indexOf=function(k,j){if(j===f){j=0}if(j<0){j+=this.length}if(j<0){j=0}for(var l=this.length;jthis.endDate){o.push("disabled")}else{if(Math.floor(this.date.getUTCMinutes()/this.minuteStep)===Math.floor(n.getUTCMinutes()/this.minuteStep)){o.push("active")}}return o.concat((p?p:[]))};this.onRenderYear=function(o){var q=(j.onRenderYear||function(){return[]})(o);var p=["year"];if(typeof q==="string"){q=[q]}if(this.date.getUTCFullYear()===o.getUTCFullYear()){p.push("active")}var n=o.getUTCFullYear();var r=this.endDate.getUTCFullYear();if(or){p.push("disabled")}return p.concat((q?q:[]))};this.onRenderMonth=function(n){var p=(j.onRenderMonth||function(){return[]})(n);var o=["month"];if(typeof p==="string"){p=[p]}return o.concat((p?p:[]))};this.startDate=new Date(-8639968443048000);this.endDate=new Date(8639968443048000);this.datesDisabled=[];this.daysOfWeekDisabled=[];this.setStartDate(j.startDate||this.element.data("date-startdate"));this.setEndDate(j.endDate||this.element.data("date-enddate"));this.setDatesDisabled(j.datesDisabled||this.element.data("date-dates-disabled"));this.setDaysOfWeekDisabled(j.daysOfWeekDisabled||this.element.data("date-days-of-week-disabled"));this.setMinutesDisabled(j.minutesDisabled||this.element.data("date-minute-disabled"));this.setHoursDisabled(j.hoursDisabled||this.element.data("date-hour-disabled"));this.fillDow();this.fillMonths();this.update();this.showMode();if(this.isInline){this.show()}};g.prototype={constructor:g,_events:[],_attachEvents:function(){this._detachEvents();if(this.isInput){this._events=[[this.element,{focus:d.proxy(this.show,this),keyup:d.proxy(this.update,this),keydown:d.proxy(this.keydown,this)}]]}else{if(this.component&&this.hasInput){this._events=[[this.element.find("input"),{focus:d.proxy(this.show,this),keyup:d.proxy(this.update,this),keydown:d.proxy(this.keydown,this)}],[this.component,{click:d.proxy(this.show,this)}]];if(this.componentReset){this._events.push([this.componentReset,{click:d.proxy(this.reset,this)}])}}else{if(this.element.is("div")){this.isInline=true}else{this._events=[[this.element,{click:d.proxy(this.show,this)}]]}}}for(var j=0,k,l;j=this.startDate&&i<=this.endDate){this.date=i;this.setValue();this.viewDate=this.date;this.fill()}else{this.element.trigger({type:"outOfRange",date:i,startDate:this.startDate,endDate:this.endDate})}},setFormat:function(j){this.format=c.parseFormat(j,this.formatType);var i;if(this.isInput){i=this.element}else{if(this.component){i=this.element.find("input")}}if(i&&i.val()){this.setValue()}},setValue:function(){var i=this.getFormattedDate();if(!this.isInput){if(this.component){this.element.find("input").val(i)}this.element.data("date",i)}else{this.element.val(i)}if(this.linkField){d("#"+this.linkField).val(this.getFormattedDate(this.linkFormat))}},getFormattedDate:function(i){i=i||this.format;return c.formatDate(this.date,i,this.language,this.formatType,this.timezone)},setStartDate:function(i){this.startDate=i||this.startDate;if(this.startDate.valueOf()!==8639968443048000){this.startDate=c.parseDate(this.startDate,this.format,this.language,this.formatType,this.timezone)}this.update();this.updateNavArrows()},setEndDate:function(i){this.endDate=i||this.endDate;if(this.endDate.valueOf()!==8639968443048000){this.endDate=c.parseDate(this.endDate,this.format,this.language,this.formatType,this.timezone)}this.update();this.updateNavArrows()},setDatesDisabled:function(j){this.datesDisabled=j||[];if(!d.isArray(this.datesDisabled)){this.datesDisabled=this.datesDisabled.split(/,\s*/)}var i=this;this.datesDisabled=d.map(this.datesDisabled,function(k){return c.parseDate(k,i.format,i.language,i.formatType,i.timezone).toDateString()});this.update();this.updateNavArrows()},setTitle:function(i,j){return this.picker.find(i).find("th:eq(1)").text(this.title===false?j:this.title)},setDaysOfWeekDisabled:function(i){this.daysOfWeekDisabled=i||[];if(!d.isArray(this.daysOfWeekDisabled)){this.daysOfWeekDisabled=this.daysOfWeekDisabled.split(/,\s*/)}this.daysOfWeekDisabled=d.map(this.daysOfWeekDisabled,function(j){return parseInt(j,10)});this.update();this.updateNavArrows()},setMinutesDisabled:function(i){this.minutesDisabled=i||[];if(!d.isArray(this.minutesDisabled)){this.minutesDisabled=this.minutesDisabled.split(/,\s*/)}this.minutesDisabled=d.map(this.minutesDisabled,function(j){return parseInt(j,10)});this.update();this.updateNavArrows()},setHoursDisabled:function(i){this.hoursDisabled=i||[];if(!d.isArray(this.hoursDisabled)){this.hoursDisabled=this.hoursDisabled.split(/,\s*/)}this.hoursDisabled=d.map(this.hoursDisabled,function(j){return parseInt(j,10)});this.update();this.updateNavArrows()},place:function(){if(this.isInline){return}if(!this.zIndex){var j=0;d("div").each(function(){var o=parseInt(d(this).css("zIndex"),10);if(o>j){j=o}});this.zIndex=j+10}var n,m,l,k;if(this.container instanceof d){k=this.container.offset()}else{k=d(this.container).offset()}if(this.component){n=this.component.offset();l=n.left;if(this.pickerPosition==="bottom-left"||this.pickerPosition==="top-left"){l+=this.component.outerWidth()-this.picker.outerWidth()}}else{n=this.element.offset();l=n.left;if(this.pickerPosition==="bottom-left"||this.pickerPosition==="top-left"){l+=this.element.outerWidth()-this.picker.outerWidth()}}var i=document.body.clientWidth||window.innerWidth;if(l+220>i){l=i-220}if(this.pickerPosition==="top-left"||this.pickerPosition==="top-right"){m=n.top-this.picker.outerHeight()}else{m=n.top+this.height}m=m-k.top;l=l-k.left;this.picker.css({top:m,left:l,zIndex:this.zIndex})},hour_minute:"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]",update:function(){var i,j=false;if(arguments&&arguments.length&&(typeof arguments[0]==="string"||arguments[0] instanceof Date)){i=arguments[0];j=true}else{i=(this.isInput?this.element.val():this.element.find("input").val())||this.element.data("date")||this.initialDate;if(typeof i==="string"){i=i.replace(/^\s+|\s+$/g,"")}}if(!i){i=new Date();j=false}if(typeof i==="string"){if(new RegExp(this.hour_minute).test(i)||new RegExp(this.hour_minute+":[0-5][0-9]").test(i)){i=this.getDate()}}this.date=c.parseDate(i,this.format,this.language,this.formatType,this.timezone);if(j){this.setValue()}if(this.datethis.endDate){this.viewDate=new Date(this.endDate)}else{this.viewDate=new Date(this.date)}}this.fill()},fillDow:function(){var i=this.weekStart,j="";while(i'+e[this.language].daysMin[(i++)%7]+""}j+="";this.picker.find(".datetimepicker-days thead").append(j)},fillMonths:function(){var l="";var m=new Date(this.viewDate);for(var k=0;k<12;k++){m.setUTCMonth(k);var j=this.onRenderMonth(m);l+=''+e[this.language].monthsShort[k]+""}this.picker.find(".datetimepicker-months td").html(l)},fill:function(){if(!this.date||!this.viewDate){return}var E=new Date(this.viewDate),t=E.getUTCFullYear(),G=E.getUTCMonth(),n=E.getUTCDate(),A=E.getUTCHours(),w=this.startDate.getUTCFullYear(),B=this.startDate.getUTCMonth(),p=this.endDate.getUTCFullYear(),x=this.endDate.getUTCMonth()+1,q=(new h(this.date.getUTCFullYear(),this.date.getUTCMonth(),this.date.getUTCDate())).valueOf(),D=new Date();this.setTitle(".datetimepicker-days",e[this.language].months[G]+" "+t);if(this.formatViewType==="time"){var k=this.getFormattedDate();this.setTitle(".datetimepicker-hours",k);this.setTitle(".datetimepicker-minutes",k)}else{this.setTitle(".datetimepicker-hours",n+" "+e[this.language].months[G]+" "+t);this.setTitle(".datetimepicker-minutes",n+" "+e[this.language].months[G]+" "+t)}this.picker.find("tfoot th.today").text(e[this.language].today||e.en.today).toggle(this.todayBtn!==false);this.picker.find("tfoot th.clear").text(e[this.language].clear||e.en.clear).toggle(this.clearBtn!==false);this.updateNavArrows();this.fillMonths();var I=h(t,G-1,28,0,0,0,0),z=c.getDaysInMonth(I.getUTCFullYear(),I.getUTCMonth());I.setUTCDate(z);I.setUTCDate(z-(I.getUTCDay()-this.weekStart+7)%7);var j=new Date(I);j.setUTCDate(j.getUTCDate()+42);j=j.valueOf();var r=[];var F;while(I.valueOf()")}F=this.onRenderDay(I);if(I.getUTCFullYear()t||(I.getUTCFullYear()===t&&I.getUTCMonth()>G)){F.push("new")}}if(this.todayHighlight&&I.getUTCFullYear()===D.getFullYear()&&I.getUTCMonth()===D.getMonth()&&I.getUTCDate()===D.getDate()){F.push("today")}if(I.valueOf()===q){F.push("active")}if((I.valueOf()+86400000)<=this.startDate||I.valueOf()>this.endDate||d.inArray(I.getUTCDay(),this.daysOfWeekDisabled)!==-1||d.inArray(I.toDateString(),this.datesDisabled)!==-1){F.push("disabled")}r.push(''+I.getUTCDate()+"");if(I.getUTCDay()===this.weekEnd){r.push("")}I.setUTCDate(I.getUTCDate()+1)}this.picker.find(".datetimepicker-days tbody").empty().append(r.join(""));r=[];var u="",C="",s="";var l=this.hoursDisabled||[];E=new Date(this.viewDate);for(var y=0;y<24;y++){E.setUTCHours(y);F=this.onRenderHour(E);if(l.indexOf(y)!==-1){F.push("disabled")}var v=h(t,G,n,y);if((v.valueOf()+3600000)<=this.startDate||v.valueOf()>this.endDate){F.push("disabled")}else{if(A===y){F.push("active")}}if(this.showMeridian&&e[this.language].meridiem.length===2){C=(y<12?e[this.language].meridiem[0]:e[this.language].meridiem[1]);if(C!==s){if(s!==""){r.push("")}r.push('
'+C.toUpperCase()+"")}s=C;u=(y%12?y%12:12);if(y<12){F.push("hour_am")}else{F.push("hour_pm")}r.push(''+u+"");if(y===23){r.push("
")}}else{u=y+":00";r.push(''+u+"")}}this.picker.find(".datetimepicker-hours td").html(r.join(""));r=[];u="";C="";s="";var m=this.minutesDisabled||[];E=new Date(this.viewDate);for(var y=0;y<60;y+=this.minuteStep){if(m.indexOf(y)!==-1){continue}E.setUTCMinutes(y);E.setUTCSeconds(0);F=this.onRenderMinute(E);if(this.showMeridian&&e[this.language].meridiem.length===2){C=(A<12?e[this.language].meridiem[0]:e[this.language].meridiem[1]);if(C!==s){if(s!==""){r.push("")}r.push('
'+C.toUpperCase()+"")}s=C;u=(A%12?A%12:12);r.push(''+u+":"+(y<10?"0"+y:y)+"");if(y===59){r.push("
")}}else{u=y+":00";r.push(''+A+":"+(y<10?"0"+y:y)+"")}}this.picker.find(".datetimepicker-minutes td").html(r.join(""));var J=this.date.getUTCFullYear();var o=this.setTitle(".datetimepicker-months",t).end().find(".month").removeClass("active");if(J===t){o.eq(this.date.getUTCMonth()).addClass("active")}if(tp){o.addClass("disabled")}if(t===w){o.slice(0,B).addClass("disabled")}if(t===p){o.slice(x).addClass("disabled")}r="";t=parseInt(t/10,10)*10;var H=this.setTitle(".datetimepicker-years",t+"-"+(t+9)).end().find("td");t-=1;E=new Date(this.viewDate);for(var y=-1;y<11;y++){E.setUTCFullYear(t);F=this.onRenderYear(E);if(y===-1||y===10){F.push(b)}r+=''+t+"";t+=1}H.html(r);this.place()},updateNavArrows:function(){var m=new Date(this.viewDate),k=m.getUTCFullYear(),l=m.getUTCMonth(),j=m.getUTCDate(),i=m.getUTCHours();switch(this.viewMode){case 0:if(k<=this.startDate.getUTCFullYear()&&l<=this.startDate.getUTCMonth()&&j<=this.startDate.getUTCDate()&&i<=this.startDate.getUTCHours()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(k>=this.endDate.getUTCFullYear()&&l>=this.endDate.getUTCMonth()&&j>=this.endDate.getUTCDate()&&i>=this.endDate.getUTCHours()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break;case 1:if(k<=this.startDate.getUTCFullYear()&&l<=this.startDate.getUTCMonth()&&j<=this.startDate.getUTCDate()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(k>=this.endDate.getUTCFullYear()&&l>=this.endDate.getUTCMonth()&&j>=this.endDate.getUTCDate()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break;case 2:if(k<=this.startDate.getUTCFullYear()&&l<=this.startDate.getUTCMonth()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(k>=this.endDate.getUTCFullYear()&&l>=this.endDate.getUTCMonth()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break;case 3:case 4:if(k<=this.startDate.getUTCFullYear()){this.picker.find(".prev").css({visibility:"hidden"})}else{this.picker.find(".prev").css({visibility:"visible"})}if(k>=this.endDate.getUTCFullYear()){this.picker.find(".next").css({visibility:"hidden"})}else{this.picker.find(".next").css({visibility:"visible"})}break}},mousewheel:function(j){j.preventDefault();j.stopPropagation();if(this.wheelPause){return}this.wheelPause=true;var i=j.originalEvent;var l=i.wheelDelta;var k=l>0?1:(l===0)?0:-1;if(this.wheelViewModeNavigationInverseDirection){k=-k}this.showMode(k);setTimeout(d.proxy(function(){this.wheelPause=false},this),this.wheelViewModeNavigationDelay)},click:function(m){m.stopPropagation();m.preventDefault();var n=d(m.target).closest("span, td, th, legend");if(n.is("."+this.icontype)){n=d(n).parent().closest("span, td, th, legend")}if(n.length===1){if(n.is(".disabled")){this.element.trigger({type:"outOfRange",date:this.viewDate,startDate:this.startDate,endDate:this.endDate});return}switch(n[0].nodeName.toLowerCase()){case"th":switch(n[0].className){case"switch":this.showMode(1);break;case"prev":case"next":var i=c.modes[this.viewMode].navStep*(n[0].className==="prev"?-1:1);switch(this.viewMode){case 0:this.viewDate=this.moveHour(this.viewDate,i);break;case 1:this.viewDate=this.moveDate(this.viewDate,i);break;case 2:this.viewDate=this.moveMonth(this.viewDate,i);break;case 3:case 4:this.viewDate=this.moveYear(this.viewDate,i);break}this.fill();this.element.trigger({type:n[0].className+":"+this.convertViewModeText(this.viewMode),date:this.viewDate,startDate:this.startDate,endDate:this.endDate});break;case"clear":this.reset();if(this.autoclose){this.hide()}break;case"today":var j=new Date();j=h(j.getFullYear(),j.getMonth(),j.getDate(),j.getHours(),j.getMinutes(),j.getSeconds(),0);if(jthis.endDate){j=this.endDate}}this.viewMode=this.startViewMode;this.showMode(0);this._setDate(j);this.fill();if(this.autoclose){this.hide()}break}break;case"span":if(!n.is(".disabled")){var p=this.viewDate.getUTCFullYear(),o=this.viewDate.getUTCMonth(),q=this.viewDate.getUTCDate(),r=this.viewDate.getUTCHours(),k=this.viewDate.getUTCMinutes(),s=this.viewDate.getUTCSeconds();if(n.is(".month")){this.viewDate.setUTCDate(1);o=n.parent().find("span").index(n);q=this.viewDate.getUTCDate();this.viewDate.setUTCMonth(o);this.element.trigger({type:"changeMonth",date:this.viewDate});if(this.viewSelect>=3){this._setDate(h(p,o,q,r,k,s,0))}}else{if(n.is(".year")){this.viewDate.setUTCDate(1);p=parseInt(n.text(),10)||0;this.viewDate.setUTCFullYear(p);this.element.trigger({type:"changeYear",date:this.viewDate});if(this.viewSelect>=4){this._setDate(h(p,o,q,r,k,s,0))}}else{if(n.is(".hour")){r=parseInt(n.text(),10)||0;if(n.hasClass("hour_am")||n.hasClass("hour_pm")){if(r===12&&n.hasClass("hour_am")){r=0}else{if(r!==12&&n.hasClass("hour_pm")){r+=12}}}this.viewDate.setUTCHours(r);this.element.trigger({type:"changeHour",date:this.viewDate});if(this.viewSelect>=1){this._setDate(h(p,o,q,r,k,s,0))}}else{if(n.is(".minute")){k=parseInt(n.text().substr(n.text().indexOf(":")+1),10)||0;this.viewDate.setUTCMinutes(k);this.element.trigger({type:"changeMinute",date:this.viewDate});if(this.viewSelect>=0){this._setDate(h(p,o,q,r,k,s,0))}}}}}if(this.viewMode!==0){var l=this.viewMode;this.showMode(-1);this.fill();if(l===this.viewMode&&this.autoclose){this.hide()}}else{this.fill();if(this.autoclose){this.hide()}}}break;case"td":if(n.is(".day")&&!n.is(".disabled")){var q=parseInt(n.text(),10)||1;var p=this.viewDate.getUTCFullYear(),o=this.viewDate.getUTCMonth(),r=this.viewDate.getUTCHours(),k=this.viewDate.getUTCMinutes(),s=this.viewDate.getUTCSeconds();if(n.is(".old")){if(o===0){o=11;p-=1}else{o-=1}}else{if(n.is(".new")){if(o===11){o=0;p+=1}else{o+=1}}}this.viewDate.setUTCFullYear(p);this.viewDate.setUTCMonth(o,q);this.element.trigger({type:"changeDay",date:this.viewDate});if(this.viewSelect>=2){this._setDate(h(p,o,q,r,k,s,0))}}var l=this.viewMode;this.showMode(-1);this.fill();if(l===this.viewMode&&this.autoclose){this.hide()}break}}},_setDate:function(i,k){if(!k||k==="date"){this.date=i}if(!k||k==="view"){this.viewDate=i}this.fill();this.setValue();var j;if(this.isInput){j=this.element}else{if(this.component){j=this.element.find("input")}}if(j){j.change()}this.element.trigger({type:"changeDate",date:this.getDate()});if(i===null){this.date=this.viewDate}},moveMinute:function(j,i){if(!i){return j}var k=new Date(j.valueOf());k.setUTCMinutes(k.getUTCMinutes()+(i*this.minuteStep));return k},moveHour:function(j,i){if(!i){return j}var k=new Date(j.valueOf());k.setUTCHours(k.getUTCHours()+i);return k},moveDate:function(j,i){if(!i){return j}var k=new Date(j.valueOf());k.setUTCDate(k.getUTCDate()+i);return k},moveMonth:function(j,k){if(!k){return j}var n=new Date(j.valueOf()),r=n.getUTCDate(),o=n.getUTCMonth(),m=Math.abs(k),q,p;k=k>0?1:-1;if(m===1){p=k===-1?function(){return n.getUTCMonth()===o}:function(){return n.getUTCMonth()!==q};q=o+k;n.setUTCMonth(q);if(q<0||q>11){q=(q+12)%12}}else{for(var l=0;l=this.startDate&&i<=this.endDate},keydown:function(o){if(this.picker.is(":not(:visible)")){if(o.keyCode===27){this.show()}return}var k=false,j,i,n;switch(o.keyCode){case 27:this.hide();o.preventDefault();break;case 37:case 39:if(!this.keyboardNavigation){break}j=o.keyCode===37?-1:1;var m=this.viewMode;if(o.ctrlKey){m+=2}else{if(o.shiftKey){m+=1}}if(m===4){i=this.moveYear(this.date,j);n=this.moveYear(this.viewDate,j)}else{if(m===3){i=this.moveMonth(this.date,j);n=this.moveMonth(this.viewDate,j)}else{if(m===2){i=this.moveDate(this.date,j);n=this.moveDate(this.viewDate,j)}else{if(m===1){i=this.moveHour(this.date,j);n=this.moveHour(this.viewDate,j)}else{if(m===0){i=this.moveMinute(this.date,j);n=this.moveMinute(this.viewDate,j)}}}}}if(this.dateWithinRange(i)){this.date=i;this.viewDate=n;this.setValue();this.update();o.preventDefault();k=true}break;case 38:case 40:if(!this.keyboardNavigation){break}j=o.keyCode===38?-1:1;m=this.viewMode;if(o.ctrlKey){m+=2}else{if(o.shiftKey){m+=1}}if(m===4){i=this.moveYear(this.date,j);n=this.moveYear(this.viewDate,j)}else{if(m===3){i=this.moveMonth(this.date,j);n=this.moveMonth(this.viewDate,j)}else{if(m===2){i=this.moveDate(this.date,j*7);n=this.moveDate(this.viewDate,j*7)}else{if(m===1){if(this.showMeridian){i=this.moveHour(this.date,j*6);n=this.moveHour(this.viewDate,j*6)}else{i=this.moveHour(this.date,j*4);n=this.moveHour(this.viewDate,j*4)}}else{if(m===0){i=this.moveMinute(this.date,j*4);n=this.moveMinute(this.viewDate,j*4)}}}}}if(this.dateWithinRange(i)){this.date=i;this.viewDate=n;this.setValue();this.update();o.preventDefault();k=true}break;case 13:if(this.viewMode!==0){var p=this.viewMode;this.showMode(-1);this.fill();if(p===this.viewMode&&this.autoclose){this.hide()}}else{this.fill();if(this.autoclose){this.hide()}}o.preventDefault();break;case 9:this.hide();break}if(k){var l;if(this.isInput){l=this.element}else{if(this.component){l=this.element.find("input")}}if(l){l.change()}this.element.trigger({type:"changeDate",date:this.getDate()})}},showMode:function(i){if(i){var j=Math.max(0,Math.min(c.modes.length-1,this.viewMode+i));if(j>=this.minView&&j<=this.maxView){this.element.trigger({type:"changeMode",date:this.viewDate,oldViewMode:this.viewMode,newViewMode:j});this.viewMode=j}}this.picker.find(">div").hide().filter(".datetimepicker-"+c.modes[this.viewMode].clsName).css("display","block");this.updateNavArrows()},reset:function(){this._setDate(null,"date")},convertViewModeText:function(i){switch(i){case 4:return"decade";case 3:return"year";case 2:return"month";case 1:return"day";case 0:return"hour"}}};var b=d.fn.datetimepicker;d.fn.datetimepicker=function(k){var i=Array.apply(null,arguments);i.shift();var j;this.each(function(){var n=d(this),m=n.data("datetimepicker"),l=typeof k==="object"&&k;if(!m){n.data("datetimepicker",(m=new g(this,d.extend({},d.fn.datetimepicker.defaults,l))))}if(typeof k==="string"&&typeof m[k]==="function"){j=m[k].apply(m,i);if(j!==f){return false}}});if(j!==f){return j}else{return this}};d.fn.datetimepicker.defaults={};d.fn.datetimepicker.Constructor=g;var e=d.fn.datetimepicker.dates={en:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa","Su"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],meridiem:["am","pm"],suffix:["st","nd","rd","th"],today:"Today",clear:"Clear"}};var c={modes:[{clsName:"minutes",navFnc:"Hours",navStep:1},{clsName:"hours",navFnc:"Date",navStep:1},{clsName:"days",navFnc:"Month",navStep:1},{clsName:"months",navFnc:"FullYear",navStep:1},{clsName:"years",navFnc:"FullYear",navStep:10}],isLeapYear:function(i){return(((i%4===0)&&(i%100!==0))||(i%400===0))},getDaysInMonth:function(i,j){return[31,(c.isLeapYear(i)?29:28),31,30,31,30,31,31,30,31,30,31][j]},getDefaultFormat:function(i,j){if(i==="standard"){if(j==="input"){return"yyyy-mm-dd hh:ii"}else{return"yyyy-mm-dd hh:ii:ss"}}else{if(i==="php"){if(j==="input"){return"Y-m-d H:i"}else{return"Y-m-d H:i:s"}}else{throw new Error("Invalid format type.")}}},validParts:function(i){if(i==="standard"){return/t|hh?|HH?|p|P|z|Z|ii?|ss?|dd?|DD?|mm?|MM?|yy(?:yy)?/g}else{if(i==="php"){return/[dDjlNwzFmMnStyYaABgGhHis]/g}else{throw new Error("Invalid format type.")}}},nonpunctuation:/[^ -\/:-@\[-`{-~\t\n\rTZ]+/g,parseFormat:function(l,j){var i=l.replace(this.validParts(j),"\0").split("\0"),k=l.match(this.validParts(j));if(!i||!i.length||!k||k.length===0){throw new Error("Invalid date format.")}return{separators:i,parts:k}},parseDate:function(A,y,v,j,r){if(A instanceof Date){var u=new Date(A.valueOf()-A.getTimezoneOffset()*60000);u.setMilliseconds(0);return u}if(/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(A)){y=this.parseFormat("yyyy-mm-dd",j)}if(/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}$/.test(A)){y=this.parseFormat("yyyy-mm-dd hh:ii",j)}if(/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}\:\d{1,2}[Z]{0,1}$/.test(A)){y=this.parseFormat("yyyy-mm-dd hh:ii:ss",j)}if(/^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(A)){var l=/([-+]\d+)([dmwy])/,q=A.match(/([-+]\d+)([dmwy])/g),t,p;A=new Date();for(var x=0;x',headTemplateV3:' ',contTemplate:'',footTemplate:''};c.template='
'+c.headTemplate+c.contTemplate+c.footTemplate+'
'+c.headTemplate+c.contTemplate+c.footTemplate+'
'+c.headTemplate+""+c.footTemplate+'
'+c.headTemplate+c.contTemplate+c.footTemplate+'
'+c.headTemplate+c.contTemplate+c.footTemplate+"
";c.templateV3='
'+c.headTemplateV3+c.contTemplate+c.footTemplate+'
'+c.headTemplateV3+c.contTemplate+c.footTemplate+'
'+c.headTemplateV3+""+c.footTemplate+'
'+c.headTemplateV3+c.contTemplate+c.footTemplate+'
'+c.headTemplateV3+c.contTemplate+c.footTemplate+"
";d.fn.datetimepicker.DPGlobal=c;d.fn.datetimepicker.noConflict=function(){d.fn.datetimepicker=b;return this};d(document).on("focus.datetimepicker.data-api click.datetimepicker.data-api",'[data-provide="datetimepicker"]',function(j){var i=d(this);if(i.data("datetimepicker")){return}j.preventDefault();i.datetimepicker("show")});d(function(){d('[data-provide="datetimepicker-inline"]').datetimepicker()})})); \ No newline at end of file diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ar.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ar.js new file mode 100644 index 0000000..a709e52 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ar.js @@ -0,0 +1,17 @@ +/** +* Arabic translation for bootstrap-datetimepicker +* Ala' Mohammad +*/ +;(function($){ + $.fn.datetimepicker.dates['ar'] = { + days: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت", "الأحد"], + daysShort: ["أحد", "اثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت", "أحد"], + daysMin: ["أح", "إث", "ث", "أر", "خ", "ج", "س", "أح"], + months: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], + monthsShort: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], + today: "هذا اليوم", + suffix: [], + meridiem: [], + rtl: true + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.az.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.az.js new file mode 100644 index 0000000..ddc6883 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.az.js @@ -0,0 +1,16 @@ +/** + * Azerbaijani translation for bootstrap-datetimepicker + * Konstantin Kaluzhnikov + */ +;(function($){ + $.fn.datetimepicker.dates['az'] = { + days: ["Bazar", "Bazar ertəsi", "Çərşənbə axşamı", "Çərşənbə", "Cümə axşamı", "Cümə", "Şənbə", "Bazar"], + daysShort: ["B", "Be", "Ça", "Ç", "Ca", "C", "Ş", "B"], + daysMin: ["B", "Be", "Ça", "Ç", "Ca", "C", "Ş", "B"], + months: ["Yanvar", "Fevral", "Mart", "Aprel", "May", "İyun", "İyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"], + monthsShort: ["Yan", "Fev", "Mar", "Apr", "May", "İyun", "İyul", "Avq", "Sen", "Okt", "Noy", "Dek"], + today: "Bugün", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.bg.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.bg.js new file mode 100644 index 0000000..6a11680 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.bg.js @@ -0,0 +1,16 @@ +/** + * Bulgarian translation for bootstrap-datetimepicker + * Apostol Apostolov + */ +;(function($){ + $.fn.datetimepicker.dates['bg'] = { + days: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота", "Неделя"], + daysShort: ["Нед", "Пон", "Вто", "Сря", "Чет", "Пет", "Съб", "Нед"], + daysMin: ["Н", "П", "В", "С", "Ч", "П", "С", "Н"], + months: ["Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"], + monthsShort: ["Ян", "Фев", "Мар", "Апр", "Май", "Юни", "Юли", "Авг", "Сеп", "Окт", "Ное", "Дек"], + today: "днес", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.bn.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.bn.js new file mode 100644 index 0000000..bd00e48 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.bn.js @@ -0,0 +1,16 @@ +/** + * Bangla(Bangladesh) translation for bootstrap-datetimepicker + * Mahbub Rabbani + */ +;(function($){ + $.fn.datetimepicker.dates['bn'] = { + days: ["রবিবার", "সোমবার", "মঙ্গলবার", "বুধবার", "বৃহষ্পতিবার", "শুক্রবার", "শনিবার", "রবিবার"], + daysShort: ["রবি", "সোম", "মঙ্গল", "বুধ", " বৃহঃ", "শুক্র", "শনি", "রবি"], + daysMin: ["রবি", "সোম", "মঙ্গ", "বুধ", "বৃহ", "শুক্র", "শনি", "রবি"], + months: ['জানুয়ারী', 'ফেব্রুয়ারী', 'মার্চ', 'এপ্রিল', 'মে', 'জুন', 'জুলাই', 'অগাস্ট', 'সেপ্টেম্বর', 'অক্টোবর', 'নভেম্বর', 'ডিসেম্বর' ], + monthsShort: ['জানু', 'ফেব্রু', 'মার্চ', 'এপ্রি', 'মে', 'জুন', 'জুলা', 'অগা', 'সেপ্টে', 'অক্টো', 'নভে', 'ডিসে' ], + today: "আজ", + suffix: [], + meridiem: ['পূর্বাহ্ণ', 'অপরাহ্ন'] + }; +}(jQuery)); \ No newline at end of file diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ca.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ca.js new file mode 100644 index 0000000..dd3a5e0 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ca.js @@ -0,0 +1,16 @@ +/** + * Catalan translation for bootstrap-datetimepicker + * J. Garcia + */ +;(function($){ + $.fn.datetimepicker.dates['ca'] = { + days: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte", "Diumenge"], + daysShort: ["Diu", "Dil", "Dmt", "Dmc", "Dij", "Div", "Dis", "Diu"], + daysMin: ["dg", "dl", "dt", "dc", "dj", "dv", "ds", "dg"], + months: ["Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"], + monthsShort: ["Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Des"], + today: "Avui", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.cs.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.cs.js new file mode 100644 index 0000000..4a67804 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.cs.js @@ -0,0 +1,19 @@ +/** + * Czech translation for bootstrap-datetimepicker + * Matěj Koubík + * Fixes by Michal Remiš + */ +;(function($){ + $.fn.datetimepicker.dates['cs'] = { + days: ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota", "Neděle"], + daysShort: ["Ned", "Pon", "Úte", "Stř", "Čtv", "Pát", "Sob", "Ned"], + daysMin: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So", "Ne"], + months: ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"], + monthsShort: ["Led", "Úno", "Bře", "Dub", "Kvě", "Čer", "Čnc", "Srp", "Zář", "Říj", "Lis", "Pro"], + today: "Dnes", + suffix: [], + meridiem: [], + weekStart: 1, + format: "dd.mm.yyyy" + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.da.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.da.js new file mode 100644 index 0000000..067322d --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.da.js @@ -0,0 +1,16 @@ +/** + * Danish translation for bootstrap-datetimepicker + * Christian Pedersen + */ +;(function($){ + $.fn.datetimepicker.dates['da'] = { + days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"], + daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"], + daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"], + months: ["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], + today: "I Dag", + suffix: [], + meridiem: [] + }; +}(jQuery)); \ No newline at end of file diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.de.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.de.js new file mode 100644 index 0000000..7327596 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.de.js @@ -0,0 +1,18 @@ +/** + * German translation for bootstrap-datetimepicker + * Sam Zurcher + */ +;(function($){ + $.fn.datetimepicker.dates['de'] = { + days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"], + daysShort: ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam", "Son"], + daysMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"], + months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], + monthsShort: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], + today: "Heute", + suffix: [], + meridiem: [], + weekStart: 1, + format: "dd.mm.yyyy" + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ee.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ee.js new file mode 100644 index 0000000..345b7a3 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ee.js @@ -0,0 +1,18 @@ +/** + * Estonian translation for bootstrap-datetimepicker + * Rene Korss + */ +;(function($){ + $.fn.datetimepicker.dates['ee'] = { + days: ["Pühapäev", "Esmaspäev", "Teisipäev", "Kolmapäev", "Neljapäev", "Reede", "Laupäev", "Pühapäev"], + daysShort: ["P", "E", "T", "K", "N", "R", "L", "P"], + daysMin: ["P", "E", "T", "K", "N", "R", "L", "P"], + months: ["Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember"], + monthsShort: ["Jaan", "Veebr", "Märts", "Apr", "Mai", "Juuni", "Juuli", "Aug", "Sept", "Okt", "Nov", "Dets"], + today: "Täna", + suffix: [], + meridiem: [], + weekStart: 1, + format: "dd.mm.yyyy hh:ii" + }; +}(jQuery)); \ No newline at end of file diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.el.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.el.js new file mode 100644 index 0000000..e3c93d3 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.el.js @@ -0,0 +1,15 @@ +/** +* Greek translation for bootstrap-datetimepicker +*/ +;(function($){ + $.fn.datetimepicker.dates['el'] = { + days: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο", "Κυριακή"], + daysShort: ["Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ", "Κυρ"], + daysMin: ["Κυ", "Δε", "Τρ", "Τε", "Πε", "Πα", "Σα", "Κυ"], + months: ["Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"], + monthsShort: ["Ιαν", "Φεβ", "Μαρ", "Απρ", "Μάι", "Ιουν", "Ιουλ", "Αυγ", "Σεπ", "Οκτ", "Νοε", "Δεκ"], + today: "Σήμερα", + suffix: [], + meridiem: [] + }; +}(jQuery)); \ No newline at end of file diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.es.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.es.js new file mode 100644 index 0000000..8a76879 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.es.js @@ -0,0 +1,16 @@ +/** + * Spanish translation for bootstrap-datetimepicker + * Bruno Bonamin + */ +;(function($){ + $.fn.datetimepicker.dates['es'] = { + days: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"], + daysShort: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb", "Dom"], + daysMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa", "Do"], + months: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"], + monthsShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"], + today: "Hoy", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.fi.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.fi.js new file mode 100644 index 0000000..85c1df5 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.fi.js @@ -0,0 +1,16 @@ +/** + * Finnish translation for bootstrap-datetimepicker + * Jaakko Salonen + */ +;(function($){ + $.fn.datetimepicker.dates['fi'] = { + days: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai", "sunnuntai"], + daysShort: ["sun", "maa", "tii", "kes", "tor", "per", "lau", "sun"], + daysMin: ["su", "ma", "ti", "ke", "to", "pe", "la", "su"], + months: ["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"], + monthsShort: ["tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mar", "jou"], + today: "tänään", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.fr.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.fr.js new file mode 100644 index 0000000..7ca19bc --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.fr.js @@ -0,0 +1,18 @@ +/** + * French translation for bootstrap-datetimepicker + * Nico Mollet + */ +;(function($){ + $.fn.datetimepicker.dates['fr'] = { + days: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"], + daysShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"], + daysMin: ["D", "L", "Ma", "Me", "J", "V", "S", "D"], + months: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"], + monthsShort: ["Jan", "Fev", "Mar", "Avr", "Mai", "Jui", "Jul", "Aou", "Sep", "Oct", "Nov", "Dec"], + today: "Aujourd'hui", + suffix: [], + meridiem: ["am", "pm"], + weekStart: 1, + format: "dd/mm/yyyy hh:ii" + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.he.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.he.js new file mode 100644 index 0000000..4b17e63 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.he.js @@ -0,0 +1,17 @@ +/** + * Hebrew translation for bootstrap-datetimepicker + * Sagie Maoz + */ +;(function($){ + $.fn.datetimepicker.dates['he'] = { + days: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"], + daysShort: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"], + daysMin: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"], + months: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"], + monthsShort: ["ינו", "פבר", "מרץ", "אפר", "מאי", "יונ", "יול", "אוג", "ספט", "אוק", "נוב", "דצמ"], + today: "היום", + suffix: [], + meridiem: [], + rtl: true + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.hr.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.hr.js new file mode 100644 index 0000000..b79a2c6 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.hr.js @@ -0,0 +1,15 @@ +/** + * Croatian localisation + */ +;(function($){ + $.fn.datetimepicker.dates['hr'] = { + days: ["Nedjelja", "Ponedjelja", "Utorak", "Srijeda", "Četrtak", "Petak", "Subota", "Nedjelja"], + daysShort: ["Ned", "Pon", "Uto", "Srr", "Čet", "Pet", "Sub", "Ned"], + daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su", "Ne"], + months: ["Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"], + monthsShort: ["Sije", "Velj", "Ožu", "Tra", "Svi", "Lip", "Jul", "Kol", "Ruj", "Lis", "Stu", "Pro"], + today: "Danas", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.hu.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.hu.js new file mode 100644 index 0000000..156e770 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.hu.js @@ -0,0 +1,17 @@ +/** + * Hungarian translation for bootstrap-datetimepicker + * darevish + */ +;(function($){ + $.fn.datetimepicker.dates['hu'] = { + days: ["Vasárnap", "Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat", "Vasárnap"], + daysShort: ["Vas", "Hét", "Ked", "Sze", "Csü", "Pén", "Szo", "Vas"], + daysMin: ["V", "H", "K", "Sze", "Cs", "P", "Szo", "V"], + months: ["Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"], + monthsShort: ["Jan", "Feb", "Már", "Ápr", "Máj", "Jún", "Júl", "Aug", "Sze", "Okt", "Nov", "Dec"], + today: "Ma", + suffix: [], + meridiem: [], + weekStart: 1 + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.hy.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.hy.js new file mode 100644 index 0000000..e2c601b --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.hy.js @@ -0,0 +1,16 @@ +/** + * Armenian translation for bootstrap-datepicker + * Hayk Chamyan + */ +;(function($){ + $.fn.datetimepicker.dates['hy'] = { + days: ["Կիրակի", "Երկուշաբթի", "Երեքշաբթի", "Չորեքշաբթի", "Հինգշաբթի", "Ուրբաթ", "Շաբաթ", "Կիրակի"], + daysShort: ["Կիր", "Երկ", "Երք", "Չոր", "Հնգ", "Ուր", "Շաբ", "Կիր"], + daysMin: ["Կի", "Եկ", "Եք", "Չո", "Հի", "Ու", "Շա", "Կի"], + months: ["Հունվար", "Փետրվար", "Մարտ", "Ապրիլ", "Մայիս", "Հունիս", "Հուլիս", "Օգոստոս", "Սեպտեմբեր", "Հոկտեմբեր", "Նոյեմբեր", "Դեկտեմբեր"], + monthsShort: ["Հնվ", "Փետ", "Մար", "Ապր", "Մայ", "Հուն", "Հուլ", "Օգս", "Սեպ", "Հոկ", "Նոյ", "Դեկ"], + today: "Այսօր", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.id.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.id.js new file mode 100644 index 0000000..d22dff0 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.id.js @@ -0,0 +1,19 @@ +/** + * Bahasa translation for bootstrap-datetimepicker + * Azwar Akbar + * Addtional by Yulian Sutopo + */ +;(function($){ + $.fn.datetimepicker.dates['id'] = { + days: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"], + daysShort: ["Mng", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab", "Mng"], + daysMin: ["Mg", "Sn", "Sl", "Ra", "Ka", "Ju", "Sa", "Mg"], + months: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ags", "Sep", "Okt", "Nov", "Des"], + today: "Hari Ini", + suffix: [], + meridiem: [], + weekStart: 1, + format: "dd/mm/yyyy hh:ii:ss" + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.is.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.is.js new file mode 100644 index 0000000..fc9173c --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.is.js @@ -0,0 +1,16 @@ +/** + * Icelandic translation for bootstrap-datetimepicker + * Hinrik Örn Sigurðsson + */ +;(function($){ + $.fn.datetimepicker.dates['is'] = { + days: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur", "Sunnudagur"], + daysShort: ["Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau", "Sun"], + daysMin: ["Su", "Má", "Þr", "Mi", "Fi", "Fö", "La", "Su"], + months: ["Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maí", "Jún", "Júl", "Ágú", "Sep", "Okt", "Nóv", "Des"], + today: "Í Dag", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.it.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.it.js new file mode 100644 index 0000000..030d3e7 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.it.js @@ -0,0 +1,18 @@ +/** + * Italian translation for bootstrap-datetimepicker + * Enrico Rubboli + */ +;(function($){ + $.fn.datetimepicker.dates['it'] = { + days: ["Domenica", "Lunedi", "Martedi", "Mercoledi", "Giovedi", "Venerdi", "Sabato", "Domenica"], + daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"], + daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"], + months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], + monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"], + today: "Oggi", + suffix: [], + meridiem: [], + weekStart: 1, + format: "dd/mm/yyyy hh:ii:ss" + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ja.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ja.js new file mode 100644 index 0000000..d079610 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ja.js @@ -0,0 +1,16 @@ +/** + * Japanese translation for bootstrap-datetimepicker + * Norio Suzuki + */ +;(function($){ + $.fn.datetimepicker.dates['ja'] = { + days: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜", "日曜"], + daysShort: ["日", "月", "火", "水", "木", "金", "土", "日"], + daysMin: ["日", "月", "火", "水", "木", "金", "土", "日"], + months: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], + monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], + today: "今日", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ka.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ka.js new file mode 100644 index 0000000..740740d --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ka.js @@ -0,0 +1,16 @@ +/** + * Georgian translation for bootstrap-datetimepicker + * Zura Jijavadze + */ +;(function($){ + $.fn.datetimepicker.dates['ka'] = { + days: ["კვირა", "ორშაბათი", "სამშაბათი", "ოთხშაბათი", "ხუთშაბათი", "პარასკევი", "შაბათი", "კვირა"], + daysShort: ["კვი", "ორშ", "სამ", "ოთხ", "ხუთ", "პარ", "შაბ", "კვი"], + daysMin: ["კვ", "ორ", "სა", "ოთ", "ხუ", "პა", "შა", "კვ"], + months: ["იანვარი", "თებერვალი", "მარტი", "აპრილი", "მაისი", "ივნისი", "ივლისი", "აგვისტო", "სექტემბერი", "ოქტომბერი", "ნოემბერი", "დეკემბერი"], + monthsShort: ["იან", "თებ", "მარ", "აპრ", "მაი", "ივნ", "ივლ", "აგვ", "სექ", "ოქტ", "ნოე", "დეკ"], + today: "დღეს", + suffix: [], + meridiem: [] + }; +}(jQuery)); \ No newline at end of file diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ko.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ko.js new file mode 100644 index 0000000..1d007a7 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ko.js @@ -0,0 +1,17 @@ +/** + * Korean translation for bootstrap-datetimepicker + * Gu Youn + * Baekjoon Choi + */ +;(function($){ + $.fn.datetimepicker.dates['ko'] = { + days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"], + daysShort: ["일", "월", "화", "수", "목", "금", "토", "일"], + daysMin: ["일", "월", "화", "수", "목", "금", "토", "일"], + months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], + monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], + suffix: [], + meridiem: ["오전", "오후"], + today: "오늘", + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.lt.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.lt.js new file mode 100644 index 0000000..8018a70 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.lt.js @@ -0,0 +1,18 @@ +/** + * Lithuanian translation for bootstrap-datetimepicker + * Šarūnas Gliebus + */ + +;(function($){ + $.fn.datetimepicker.dates['lt'] = { + days: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis", "Sekmadienis"], + daysShort: ["S", "Pr", "A", "T", "K", "Pn", "Š", "S"], + daysMin: ["Sk", "Pr", "An", "Tr", "Ke", "Pn", "Št", "Sk"], + months: ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"], + monthsShort: ["Sau", "Vas", "Kov", "Bal", "Geg", "Bir", "Lie", "Rugp", "Rugs", "Spa", "Lap", "Gru"], + today: "Šiandien", + suffix: [], + meridiem: [], + weekStart: 1 + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.lv.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.lv.js new file mode 100644 index 0000000..333156b --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.lv.js @@ -0,0 +1,18 @@ +/** + * Latvian translation for bootstrap-datetimepicker + * Artis Avotins + */ + +;(function($){ + $.fn.datetimepicker.dates['lv'] = { + days: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena", "Svētdiena"], + daysShort: ["Sv", "P", "O", "T", "C", "Pk", "S", "Sv"], + daysMin: ["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "St", "Sv"], + months: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jūn", "Jūl", "Aug", "Sep", "Okt", "Nov", "Dec."], + today: "Šodien", + suffix: [], + meridiem: [], + weekStart: 1 + }; +}(jQuery)); \ No newline at end of file diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ms.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ms.js new file mode 100644 index 0000000..11b4f98 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ms.js @@ -0,0 +1,16 @@ +/** + * Malay translation for bootstrap-datetimepicker + * Ateman Faiz + */ +;(function($){ + $.fn.datetimepicker.dates['ms'] = { + days: ["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu", "Ahad"], + daysShort: ["Aha", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab", "Aha"], + daysMin: ["Ah", "Is", "Se", "Ra", "Kh", "Ju", "Sa", "Ah"], + months: ["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ogo", "Sep", "Okt", "Nov", "Dis"], + today: "Hari Ini", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.nb.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.nb.js new file mode 100644 index 0000000..0b26ea6 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.nb.js @@ -0,0 +1,16 @@ +/** + * Norwegian (bokmål) translation for bootstrap-datetimepicker + * Fredrik Sundmyhr + */ +;(function($){ + $.fn.datetimepicker.dates['nb'] = { + days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"], + daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"], + daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"], + months: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], + today: "I Dag", + suffix: [], + meridiem: [] + }; +}(jQuery)); \ No newline at end of file diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.nl.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.nl.js new file mode 100644 index 0000000..5950f1c --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.nl.js @@ -0,0 +1,16 @@ +/** + * Dutch translation for bootstrap-datetimepicker + * Reinier Goltstein + */ +;(function($){ + $.fn.datetimepicker.dates['nl'] = { + days: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"], + daysShort: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], + daysMin: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], + months: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"], + monthsShort: ["Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], + today: "Vandaag", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.no.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.no.js new file mode 100644 index 0000000..8685745 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.no.js @@ -0,0 +1,16 @@ +/** + * Norwegian translation for bootstrap-datetimepicker + * Rune Warhuus + */ +;(function($){ + $.fn.datetimepicker.dates['no'] = { + days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"], + daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"], + daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"], + months: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], + today: "I Dag", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.pl.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.pl.js new file mode 100644 index 0000000..806b55d --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.pl.js @@ -0,0 +1,17 @@ +/** + * Polish translation for bootstrap-datetimepicker + * Robert + */ +;(function($){ +$.fn.datetimepicker.dates['pl'] = { + days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"], + daysShort: ["Nie", "Pn", "Wt", "Śr", "Czw", "Pt", "So", "Nie"], + daysMin: ["N", "Pn", "Wt", "Śr", "Cz", "Pt", "So", "N"], + months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"], + monthsShort: ["Sty", "Lu", "Mar", "Kw", "Maj", "Cze", "Lip", "Sie", "Wrz", "Pa", "Lis", "Gru"], + today: "Dzisiaj", + suffix: [], + meridiem: [], + weekStart: 1 +}; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.pt-BR.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.pt-BR.js new file mode 100644 index 0000000..6828698 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.pt-BR.js @@ -0,0 +1,17 @@ +/** + * Brazilian translation for bootstrap-datetimepicker + * Cauan Cabral + */ +;(function($){ + $.fn.datetimepicker.dates['pt-BR'] = { + format: 'dd/mm/yyyy', + days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"], + daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"], + daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"], + months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], + monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], + today: "Hoje", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.pt.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.pt.js new file mode 100644 index 0000000..36e9787 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.pt.js @@ -0,0 +1,17 @@ +/** + * Portuguese translation for bootstrap-datetimepicker + * Original code: Cauan Cabral + * Tiago Melo + */ +;(function($){ + $.fn.datetimepicker.dates['pt'] = { + days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"], + daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"], + daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"], + months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], + monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], + suffix: [], + meridiem: [], + today: "Hoje" + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ro.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ro.js new file mode 100644 index 0000000..55436ae --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ro.js @@ -0,0 +1,17 @@ +/** + * Romanian translation for bootstrap-datetimepicker + * Cristian Vasile + */ +;(function($){ + $.fn.datetimepicker.dates['ro'] = { + days: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă", "Duminică"], + daysShort: ["Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm", "Dum"], + daysMin: ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ", "Du"], + months: ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"], + monthsShort: ["Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec"], + today: "Astăzi", + suffix: [], + meridiem: [], + weekStart: 1 + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.rs-latin.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.rs-latin.js new file mode 100644 index 0000000..91b3cac --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.rs-latin.js @@ -0,0 +1,16 @@ +/** + * Serbian latin translation for bootstrap-datetimepicker + * Bojan Milosavlević + */ +;(function($){ + $.fn.datetimepicker.dates['rs'] = { + days: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota", "Nedelja"], + daysShort: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub", "Ned"], + daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su", "N"], + months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], + today: "Danas", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.rs.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.rs.js new file mode 100644 index 0000000..e49d10e --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.rs.js @@ -0,0 +1,16 @@ +/** + * Serbian cyrillic translation for bootstrap-datetimepicker + * Bojan Milosavlević + */ +;(function($){ + $.fn.datetimepicker.dates['rs'] = { + days: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота", "Недеља"], + daysShort: ["Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб", "Нед"], + daysMin: ["Н", "По", "У", "Ср", "Ч", "Пе", "Су", "Н"], + months: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"], + monthsShort: ["Јан", "Феб", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Нов", "Дец"], + today: "Данас", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ru.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ru.js new file mode 100644 index 0000000..8873e95 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ru.js @@ -0,0 +1,16 @@ +/** + * Russian translation for bootstrap-datetimepicker + * Victor Taranenko + */ +;(function($){ + $.fn.datetimepicker.dates['ru'] = { + days: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"], + daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Вск"], + daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"], + months: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"], + monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"], + today: "Сегодня", + suffix: [], + meridiem: [] + }; +}(jQuery)); \ No newline at end of file diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.sk.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.sk.js new file mode 100644 index 0000000..15596be --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.sk.js @@ -0,0 +1,19 @@ +/** + * Slovak translation for bootstrap-datetimepicker + * Marek Lichtner + * Fixes by Michal Remiš + */ +;(function($){ + $.fn.datetimepicker.dates["sk"] = { + days: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota", "Nedeľa"], + daysShort: ["Ned", "Pon", "Uto", "Str", "Štv", "Pia", "Sob", "Ned"], + daysMin: ["Ne", "Po", "Ut", "St", "Št", "Pi", "So", "Ne"], + months: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sep", "Okt", "Nov", "Dec"], + today: "Dnes", + suffix: [], + meridiem: [], + weekStart: 1, + format: "dd.mm.yyyy" + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.sl.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.sl.js new file mode 100644 index 0000000..69bae12 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.sl.js @@ -0,0 +1,16 @@ +/** + * Slovene translation for bootstrap-datetimepicker + * Gregor Rudolf + */ +;(function($){ + $.fn.datetimepicker.dates['sl'] = { + days: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota", "Nedelja"], + daysShort: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob", "Ned"], + daysMin: ["Ne", "Po", "To", "Sr", "Če", "Pe", "So", "Ne"], + months: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], + today: "Danes", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.sv.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.sv.js new file mode 100644 index 0000000..9892999 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.sv.js @@ -0,0 +1,16 @@ +/** + * Swedish translation for bootstrap-datetimepicker + * Patrik Ragnarsson + */ +;(function($){ + $.fn.datetimepicker.dates['sv'] = { + days: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag", "Söndag"], + daysShort: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör", "Sön"], + daysMin: ["Sö", "Må", "Ti", "On", "To", "Fr", "Lö", "Sö"], + months: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], + today: "I Dag", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.sw.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.sw.js new file mode 100644 index 0000000..e2286a5 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.sw.js @@ -0,0 +1,17 @@ +/** + * Swahili translation for bootstrap-datetimepicker + * Edwin Mugendi + * Source: http://scriptsource.org/cms/scripts/page.php?item_id=entry_detail&uid=xnfaqyzcku + */ +;(function($){ + $.fn.datetimepicker.dates['sw'] = { + days: ["Jumapili", "Jumatatu", "Jumanne", "Jumatano", "Alhamisi", "Ijumaa", "Jumamosi", "Jumapili"], + daysShort: ["J2", "J3", "J4", "J5", "Alh", "Ij", "J1", "J2"], + daysMin: ["2", "3", "4", "5", "A", "I", "1", "2"], + months: ["Januari", "Februari", "Machi", "Aprili", "Mei", "Juni", "Julai", "Agosti", "Septemba", "Oktoba", "Novemba", "Desemba"], + monthsShort: ["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ago", "Sep", "Okt", "Nov", "Des"], + today: "Leo", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.th.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.th.js new file mode 100644 index 0000000..9a0fd38 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.th.js @@ -0,0 +1,16 @@ +/** + * Thai translation for bootstrap-datetimepicker + * Suchau Jiraprapot + */ +;(function($){ + $.fn.datetimepicker.dates['th'] = { + days: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"], + daysShort: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"], + daysMin: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"], + months: ["มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม"], + monthsShort: ["ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค."], + today: "วันนี้", + suffix: [], + meridiem: [] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.tr.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.tr.js new file mode 100644 index 0000000..4536b2e --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.tr.js @@ -0,0 +1,17 @@ +/** + * Turkish translation for bootstrap-datetimepicker + * Serkan Algur + */ +;(function($){ + $.fn.datetimepicker.dates['tr'] = { + days: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar"], + daysShort: ["Pz", "Pzt", "Sal", "Çrş", "Prş", "Cu", "Cts", "Pz"], + daysMin: ["Pz", "Pzt", "Sa", "Çr", "Pr", "Cu", "Ct", "Pz"], + months: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"], + monthsShort: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"], + today: "Bugün", + suffix: [], + meridiem: [] + }; +}(jQuery)); + diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ua.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ua.js new file mode 100644 index 0000000..3a0cbfb --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.ua.js @@ -0,0 +1,15 @@ +/** + * Ukrainian translation for bootstrap-datepicker + * Igor Polynets + */ +;(function($){ + $.fn.datetimepicker.dates['ua'] = { + days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четверг", "П'ятниця", "Субота", "Неділя"], + daysShort: ["Нед", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Нед"], + daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Нд"], + months: ["Cічень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"], + monthsShort: ["Січ", "Лют", "Бер", "Квт", "Трв", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Грд"], + today: "Сьогодні", + weekStart: 1 + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.uk.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.uk.js new file mode 100644 index 0000000..232518d --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.uk.js @@ -0,0 +1,16 @@ +/** + * Ukrainian translation for bootstrap-datetimepicker + * Andrey Vityuk + */ +;(function($){ + $.fn.datetimepicker.dates['uk'] = { + days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота", "Неділя"], + daysShort: ["Нед", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Нед"], + daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Нд"], + months: ["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"], + monthsShort: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Гру"], + today: "Сьогодні", + suffix: [], + meridiem: [] + }; +}(jQuery)); \ No newline at end of file diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.zh-CN.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.zh-CN.js new file mode 100644 index 0000000..418fb30 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.zh-CN.js @@ -0,0 +1,16 @@ +/** + * Simplified Chinese translation for bootstrap-datetimepicker + * Yuan Cheung + */ +;(function($){ + $.fn.datetimepicker.dates['zh-CN'] = { + days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], + daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], + daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], + months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], + monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], + today: "今天", + suffix: [], + meridiem: ["上午", "下午"] + }; +}(jQuery)); diff --git a/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.zh-TW.js b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.zh-TW.js new file mode 100644 index 0000000..6d1ed20 --- /dev/null +++ b/Laravel/public/jq_page/js/locales/bootstrap-datetimepicker.zh-TW.js @@ -0,0 +1,16 @@ +/** + * Traditional Chinese translation for bootstrap-datetimepicker + * Rung-Sheng Jang + */ +;(function($){ + $.fn.datetimepicker.dates['zh-TW'] = { + days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], + daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], + daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], + months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], + monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], + today: "今天", + suffix: [], + meridiem: ["上午", "下午"] + }; +}(jQuery)); diff --git a/Laravel/public/nginx.htaccess b/Laravel/public/nginx.htaccess new file mode 100644 index 0000000..743de63 --- /dev/null +++ b/Laravel/public/nginx.htaccess @@ -0,0 +1,8 @@ +location / { + # root html; + index index.php index.html index.htm; + + try_files $uri $uri/ /index.php$is_args$query_string; + + + } \ No newline at end of file diff --git a/Laravel/public/report.pdf b/Laravel/public/report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ef330bd3717a992414147facef6e174f7abcda68 GIT binary patch literal 115311 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 C%zKmo literal 0 HcmV?d00001 diff --git a/Laravel/public/robots.txt b/Laravel/public/robots.txt new file mode 100644 index 0000000..eb05362 --- /dev/null +++ b/Laravel/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/Laravel/resources/css/app.css b/Laravel/resources/css/app.css new file mode 100644 index 0000000..e69de29 diff --git a/Laravel/resources/js/app.js b/Laravel/resources/js/app.js new file mode 100644 index 0000000..40c55f6 --- /dev/null +++ b/Laravel/resources/js/app.js @@ -0,0 +1 @@ +require('./bootstrap'); diff --git a/Laravel/resources/js/bootstrap.js b/Laravel/resources/js/bootstrap.js new file mode 100644 index 0000000..6922577 --- /dev/null +++ b/Laravel/resources/js/bootstrap.js @@ -0,0 +1,28 @@ +window._ = require('lodash'); + +/** + * We'll load the axios HTTP library which allows us to easily issue requests + * to our Laravel back-end. This library automatically handles sending the + * CSRF token as a header based on the value of the "XSRF" token cookie. + */ + +window.axios = require('axios'); + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; + +/** + * Echo exposes an expressive API for subscribing to channels and listening + * for events that are broadcast by Laravel. Echo and event broadcasting + * allows your team to easily build robust real-time web applications. + */ + +// import Echo from 'laravel-echo'; + +// window.Pusher = require('pusher-js'); + +// window.Echo = new Echo({ +// broadcaster: 'pusher', +// key: process.env.MIX_PUSHER_APP_KEY, +// cluster: process.env.MIX_PUSHER_APP_CLUSTER, +// forceTLS: true +// }); diff --git a/Laravel/resources/lang/en/auth.php b/Laravel/resources/lang/en/auth.php new file mode 100644 index 0000000..6598e2c --- /dev/null +++ b/Laravel/resources/lang/en/auth.php @@ -0,0 +1,20 @@ + 'These credentials do not match our records.', + 'password' => 'The provided password is incorrect.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/Laravel/resources/lang/en/pagination.php b/Laravel/resources/lang/en/pagination.php new file mode 100644 index 0000000..d481411 --- /dev/null +++ b/Laravel/resources/lang/en/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/Laravel/resources/lang/en/passwords.php b/Laravel/resources/lang/en/passwords.php new file mode 100644 index 0000000..2345a56 --- /dev/null +++ b/Laravel/resources/lang/en/passwords.php @@ -0,0 +1,22 @@ + 'Your password has been reset!', + 'sent' => 'We have emailed your password reset link!', + 'throttled' => 'Please wait before retrying.', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that email address.", + +]; diff --git a/Laravel/resources/lang/en/validation.php b/Laravel/resources/lang/en/validation.php new file mode 100644 index 0000000..783003c --- /dev/null +++ b/Laravel/resources/lang/en/validation.php @@ -0,0 +1,163 @@ + 'The :attribute must be accepted.', + 'accepted_if' => 'The :attribute must be accepted when :other is :value.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', + 'alpha' => 'The :attribute must only contain letters.', + 'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.', + 'alpha_num' => 'The :attribute must only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'current_password' => 'The password is incorrect.', + 'date' => 'The :attribute is not a valid date.', + 'date_equals' => 'The :attribute must be a date equal to :date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'declined' => 'The :attribute must be declined.', + 'declined_if' => 'The :attribute must be declined when :other is :value.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'dimensions' => 'The :attribute has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'email' => 'The :attribute must be a valid email address.', + 'ends_with' => 'The :attribute must end with one of the following: :values.', + 'enum' => 'The selected :attribute is invalid.', + 'exists' => 'The selected :attribute is invalid.', + 'file' => 'The :attribute must be a file.', + 'filled' => 'The :attribute field must have a value.', + 'gt' => [ + 'numeric' => 'The :attribute must be greater than :value.', + 'file' => 'The :attribute must be greater than :value kilobytes.', + 'string' => 'The :attribute must be greater than :value characters.', + 'array' => 'The :attribute must have more than :value items.', + ], + 'gte' => [ + 'numeric' => 'The :attribute must be greater than or equal to :value.', + 'file' => 'The :attribute must be greater than or equal to :value kilobytes.', + 'string' => 'The :attribute must be greater than or equal to :value characters.', + 'array' => 'The :attribute must have :value items or more.', + ], + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'ipv4' => 'The :attribute must be a valid IPv4 address.', + 'ipv6' => 'The :attribute must be a valid IPv6 address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'lt' => [ + 'numeric' => 'The :attribute must be less than :value.', + 'file' => 'The :attribute must be less than :value kilobytes.', + 'string' => 'The :attribute must be less than :value characters.', + 'array' => 'The :attribute must have less than :value items.', + ], + 'lte' => [ + 'numeric' => 'The :attribute must be less than or equal to :value.', + 'file' => 'The :attribute must be less than or equal to :value kilobytes.', + 'string' => 'The :attribute must be less than or equal to :value characters.', + 'array' => 'The :attribute must not have more than :value items.', + ], + 'mac_address' => 'The :attribute must be a valid MAC address.', + 'max' => [ + 'numeric' => 'The :attribute must not be greater than :max.', + 'file' => 'The :attribute must not be greater than :max kilobytes.', + 'string' => 'The :attribute must not be greater than :max characters.', + 'array' => 'The :attribute must not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'mimetypes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'multiple_of' => 'The :attribute must be a multiple of :value.', + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute format is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'password' => 'The password is incorrect.', + 'present' => 'The :attribute field must be present.', + 'prohibited' => 'The :attribute field is prohibited.', + 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', + 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', + 'prohibits' => 'The :attribute field prohibits :other from being present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_array_keys' => 'The :attribute field must contain entries for: :values.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'starts_with' => 'The :attribute must start with one of the following: :values.', + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid timezone.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'url' => 'The :attribute must be a valid URL.', + 'uuid' => 'The :attribute must be a valid UUID.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/Laravel/resources/views/welcome.blade.php b/Laravel/resources/views/welcome.blade.php new file mode 100644 index 0000000..dd6a45d --- /dev/null +++ b/Laravel/resources/views/welcome.blade.php @@ -0,0 +1,132 @@ + + + + + + + Laravel + + + + + + + + + + +
+ @if (Route::has('login')) + + @endif + +
+
+ + + + + +
+ +
+
+
+ + +
+
+ Laravel has wonderful, thorough documentation covering every aspect of the framework. Whether you are new to the framework or have previous experience with Laravel, we recommend reading all of the documentation from beginning to end. +
+
+
+ +
+
+ + +
+ +
+
+ Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process. +
+
+
+ +
+
+ + +
+ +
+
+ Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials. +
+
+
+ +
+
+ +
Vibrant Ecosystem
+
+ +
+
+ Laravel's robust library of first-party tools and libraries, such as Forge, Vapor, Nova, and Envoyer help you take your projects to the next level. Pair them with powerful open source libraries like Cashier, Dusk, Echo, Horizon, Sanctum, Telescope, and more. +
+
+
+
+
+ +
+
+
+ + + + + + Shop + + + + + + + + Sponsor + +
+
+ +
+ Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}) +
+
+
+
+ + diff --git a/Laravel/routes/api.php b/Laravel/routes/api.php new file mode 100644 index 0000000..ac5c844 --- /dev/null +++ b/Laravel/routes/api.php @@ -0,0 +1,102 @@ +get('/user', function (Request $request) { + return $request->user(); +}); + + +Route::post('admin/login','App\Http\Controllers\API\Admin\LoginController@Login')->middleware('log'); //登录 +Route::post('/tokenRefresh','App\Http\Controllers\API\TokenController@TokenRefresh')->middleware('log'); //刷新token + +Route::group(['middleware'=>['checktoken','log'],'prefix'=>'v1'],function () { //路由分组 + Route::post('admin/getBaseMenuList','App\Http\Controllers\API\Admin\BaseInfoController@GetBaseMenuList'); //登录后获取admin后台用户对应菜单列表 + Route::post('admin/GetBaseUserInfo','App\Http\Controllers\API\Admin\BaseInfoController@GetBaseUserInfo'); //获取admin用户基本信息 + Route::post('admin/getMenuList','App\Http\Controllers\API\Admin\MenuController@GetList'); //admin后台所有菜单管理 + Route::post('admin/GetFatherMenuList','App\Http\Controllers\API\Admin\MenuController@GetFatherMenuList'); //admin后台获取一级菜单 + Route::post('admin/AddMenu','App\Http\Controllers\API\Admin\MenuController@AddMenu'); //admin后台添加菜单 + Route::post('admin/EditMenu','App\Http\Controllers\API\Admin\MenuController@EditMenu'); //admin后台修改菜单 + Route::post('admin/getUserList','App\Http\Controllers\API\Admin\UserController@GetInfoList'); //admin后台获取用户列表 + Route::post('admin/GetSystemUserDetail','App\Http\Controllers\API\Admin\UserController@GetDetail'); //admin后台获取用户详情 + Route::post('admin/adminChangePwd','App\Http\Controllers\API\Admin\UserController@ChangePwd'); //admin后台修改密码 + Route::post('admin/SaveSystemUserInfo','App\Http\Controllers\API\Admin\UserController@Save'); //admin后台保存用户信息 + Route::post('admin/getGroupList','App\Http\Controllers\API\Admin\GroupController@GetList'); //admin后台组列表 + Route::post('admin/GroupChangeMenu','App\Http\Controllers\API\Admin\GroupController@ChangeMenu'); //admin后台组列表 + Route::post('admin/GetGroupMenuList','App\Http\Controllers\API\Admin\GroupController@GetGroupMenuList'); //管理员查询分组使用的菜单 + Route::post('admin/SaveGroup','App\Http\Controllers\API\Admin\GroupController@Save'); //admin后台组列表 + Route::post('admin/CheckMenuAuth','App\Http\Controllers\API\Admin\BaseInfoController@CheckMenuAuth'); //admin后台检查用户菜单权限 + Route::post('UpFile','App\Http\Controllers\API\UpLoadController@UpFile'); //上传文件 + Route::post('admin/ChangInfo','App\Http\Controllers\API\Admin\UserController@ChangInfo'); //修改自身用户信息 + Route::post('admin/GetConfigInfo','App\Http\Controllers\API\Admin\ConfigController@GetConfigInfo'); //获取配置信息 + Route::post('admin/SaveConfigInfo','App\Http\Controllers\API\Admin\ConfigController@SaveConfig'); //保存配置信息 + //--------------以上为系统基本接口 + Route::post('admin/GetHealthOrganizationEnableList','App\Http\Controllers\API\Admin\YeWu\HealthOrganizationController@GetEnableList'); //admin后台获取可用体检机构列表 + Route::post('admin/CreateCalendar','App\Http\Controllers\API\Admin\YeWu\healthCalendarController@CreateCalendar'); //admin后台创建日历 + Route::post('admin/CalendarGetList','App\Http\Controllers\API\Admin\YeWu\healthCalendarController@getList'); //admin后台获取日历列表 + Route::post('admin/CalendarListDel','App\Http\Controllers\API\Admin\YeWu\healthCalendarController@Del'); //admin后台删除日历 + Route::post('admin/CalendarChangeInfo','App\Http\Controllers\API\Admin\YeWu\healthCalendarController@ChangeInfo'); //admin后台更新日历 + Route::post('admin/GetCheckItemClassList','App\Http\Controllers\API\Admin\YeWu\CheckItemController@GetClassList');//admin后台获取检查项目类别列表 + Route::post('admin/GetCheckItemList','App\Http\Controllers\API\Admin\YeWu\CheckItemController@GetItemList');//admin后台获取检 + Route::post('admin/GetDeviceList','App\Http\Controllers\API\Admin\YeWu\DevicesController@GetList');//admin后台获取设备列表 + Route::post('admin/SaveDeviceList','App\Http\Controllers\API\Admin\YeWu\DevicesController@Save');//admin后台保存设备列表 + Route::post('admin/GetEnableDeviceList','App\Http\Controllers\API\Admin\YeWu\DevicesController@GetEnableList');//admin后台可用设备列表 + Route::post('admin/DelDevice','App\Http\Controllers\API\Admin\YeWu\DevicesController@Del');//admin后台删除设备列表 + Route::post('admin/ItemBindDevice','App\Http\Controllers\API\Admin\YeWu\CheckItemController@BindDevice');//admin后台检查项目绑定设备 + Route::post('admin/GetYuYueTypes','App\Http\Controllers\API\Admin\YeWu\YuYueTypeController@GetTypes');//admin后台获取预约类型 + Route::post('admin/SaveItemInfo','App\Http\Controllers\API\Admin\YeWu\CheckItemController@Save');//admin后台保存检查项目信息 + Route::post('admin/GetDepartmentList','App\Http\Controllers\API\Admin\YeWu\DepartmentController@GetList');//admin后台获取科室列表 + Route::post('admin/SaveDepartment','App\Http\Controllers\API\Admin\YeWu\DepartmentController@Save');//保存科室信息 + Route::post('admin/DelDepartment','App\Http\Controllers\API\Admin\YeWu\DepartmentController@Del');//删除科室信息 + Route::post('admin/GetEnableDepartmentList','App\Http\Controllers\API\Admin\YeWu\DepartmentController@GetEnableList');//获取启用的科室列表 + Route::post('admin/SaveDepartmentResource','App\Http\Controllers\API\Admin\YeWu\DepartmentResourceController@Save');//保存科室资源信息 + Route::post('admin/DepartmentResourceGetList','App\Http\Controllers\API\Admin\YeWu\DepartmentResourceController@GetList');//获取科室资源list + Route::post('admin/DepartmentResourceGetEnableList','App\Http\Controllers\API\Admin\YeWu\DepartmentResourceController@GetEnableList');//获取可用科室资源 + Route::post('admin/DepartmentResourceDel','App\Http\Controllers\API\Admin\YeWu\DepartmentResourceController@Del');//删除科室资源信息 + Route::post('admin/DepartmentResourceBindDevice','App\Http\Controllers\API\Admin\YeWu\DepartmentResourceController@BindDevice');//绑定科室资源与设备 + Route::post('admin/ResourceGetBindDeviceList','App\Http\Controllers\API\Admin\YeWu\DepartmentResourceController@GetBindDeviceList');//获取资源已经绑定的设备 + Route::post('admin/TimePeriodSave','App\Http\Controllers\API\Admin\YeWu\TimePeriodController@Save');//保存时间段信息 + Route::post('admin/TimePeriodGetList','App\Http\Controllers\API\Admin\YeWu\TimePeriodController@GetList');//保存时间段信息 + Route::post('admin/TimePeriodGetEnableList','App\Http\Controllers\API\Admin\YeWu\TimePeriodController@GetEnableList');//获取启用的时间段列表 + Route::post('admin/TimePeriodGetDetail','App\Http\Controllers\API\Admin\YeWu\TimePeriodController@GetDetail');//获取时间段详情 + Route::post('admin/TimePeriodDel','App\Http\Controllers\API\Admin\YeWu\TimePeriodController@Del');//删除时间段信息 + Route::post('admin/PlanModelGetList','App\Http\Controllers\API\Admin\YeWu\PlanModelController@GetList');//获取预约计划模板list + Route::post('admin/PlanModelSave','App\Http\Controllers\API\Admin\YeWu\PlanModelController@Save');//保存计划模板 + Route::post('admin/GetAppointmentRatio','App\Http\Controllers\API\Admin\YeWu\PlanModelController@GetAppointmentRatio');//获取预约类型比例 + Route::post('admin/GetPlanModelDetailInfo','App\Http\Controllers\API\Admin\YeWu\PlanModelController@GetDetailInfo');//获取计划模板详情 + Route::post('admin/PlanModelDel','App\Http\Controllers\API\Admin\YeWu\PlanModelController@Del');//删除计划模板 + Route::post('admin/SaveAppointmentRatio','App\Http\Controllers\API\Admin\YeWu\PlanModelController@SaveAppointmentRatio');//保存渠道比例 + Route::post('admin/CreatePlanList','App\Http\Controllers\API\Admin\YeWu\PlanListController@Create');//生成计划明细 + Route::post('admin/PlanListGetList','App\Http\Controllers\API\Admin\YeWu\PlanListController@GetList');//生成计划明细 + Route::post('admin/PlanListGetDetail','App\Http\Controllers\API\Admin\YeWu\PlanListController@GetDetail');//计划详情 + Route::post('admin/PlanDetailChangeInfo','App\Http\Controllers\API\Admin\YeWu\PlanListController@ChangeInfo');//修改计划详情信息 + Route::post('admin/PlanListDel','App\Http\Controllers\API\Admin\YeWu\PlanListController@Del');//删除计划详情 + Route::post('admin/GetMainList','App\Http\Controllers\API\Admin\YeWu\WorkMainController@GetList');//获取主表列表 + Route::post('admin/CancelYuYue','App\Http\Controllers\API\Admin\YeWu\PlanListController@CancelYuYue');//取消预约 + Route::post('admin/SetHuChi','App\Http\Controllers\API\Admin\YeWu\CheckItemController@SetHuChi');//设置互斥 + Route::post('admin/DelHuChi','App\Http\Controllers\API\Admin\YeWu\CheckItemController@DelHuChi');//删除互斥 + Route::post('admin/GetHuChiList','App\Http\Controllers\API\Admin\YeWu\CheckItemController@GetHuChiList');//获取某个项目已经设置的互斥列表 +}); + +//暂时不加权限 +Route::post('admin/getMainDetail','App\Http\Controllers\API\Admin\YeWu\WorkMainController@getMainDetail');//获取主表信息 +Route::post('admin/GetEnablePlan','App\Http\Controllers\API\Admin\YeWu\PlanListController@GetEnablePlan');//获取可用的计划,用于计划占用 +Route::post('admin/PlanYuYue','App\Http\Controllers\API\Admin\YeWu\PlanListController@YuYue');//开始预约 + + + + + + diff --git a/Laravel/routes/channels.php b/Laravel/routes/channels.php new file mode 100644 index 0000000..5d451e1 --- /dev/null +++ b/Laravel/routes/channels.php @@ -0,0 +1,18 @@ +id === (int) $id; +}); diff --git a/Laravel/routes/console.php b/Laravel/routes/console.php new file mode 100644 index 0000000..e05f4c9 --- /dev/null +++ b/Laravel/routes/console.php @@ -0,0 +1,19 @@ +comment(Inspiring::quote()); +})->purpose('Display an inspiring quote'); diff --git a/Laravel/routes/web.php b/Laravel/routes/web.php new file mode 100644 index 0000000..08abe1d --- /dev/null +++ b/Laravel/routes/web.php @@ -0,0 +1,28 @@ + + */ + +$uri = urldecode( + parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) ?? '' +); + +// This file allows us to emulate Apache's "mod_rewrite" functionality from the +// built-in PHP web server. This provides a convenient way to test a Laravel +// application without having installed a "real" web server software here. +if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { + return false; +} + +require_once __DIR__.'/public/index.php'; diff --git a/Laravel/storage/app/.gitignore b/Laravel/storage/app/.gitignore new file mode 100644 index 0000000..8f4803c --- /dev/null +++ b/Laravel/storage/app/.gitignore @@ -0,0 +1,3 @@ +* +!public/ +!.gitignore diff --git a/Laravel/storage/framework/.gitignore b/Laravel/storage/framework/.gitignore new file mode 100644 index 0000000..05c4471 --- /dev/null +++ b/Laravel/storage/framework/.gitignore @@ -0,0 +1,9 @@ +compiled.php +config.php +down +events.scanned.php +maintenance.php +routes.php +routes.scanned.php +schedule-* +services.json diff --git a/Laravel/storage/framework/cache/.gitignore b/Laravel/storage/framework/cache/.gitignore new file mode 100644 index 0000000..01e4a6c --- /dev/null +++ b/Laravel/storage/framework/cache/.gitignore @@ -0,0 +1,3 @@ +* +!data/ +!.gitignore diff --git a/Laravel/storage/framework/cache/data/.gitignore b/Laravel/storage/framework/cache/data/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/Laravel/storage/framework/cache/data/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/Laravel/storage/framework/sessions/.gitignore b/Laravel/storage/framework/sessions/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/Laravel/storage/framework/sessions/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/Laravel/storage/framework/testing/.gitignore b/Laravel/storage/framework/testing/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/Laravel/storage/framework/testing/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/Laravel/storage/framework/views/.gitignore b/Laravel/storage/framework/views/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/Laravel/storage/framework/views/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/Laravel/storage/logs/.gitignore b/Laravel/storage/logs/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/Laravel/storage/logs/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/Laravel/tests/CreatesApplication.php b/Laravel/tests/CreatesApplication.php new file mode 100644 index 0000000..547152f --- /dev/null +++ b/Laravel/tests/CreatesApplication.php @@ -0,0 +1,22 @@ +make(Kernel::class)->bootstrap(); + + return $app; + } +} diff --git a/Laravel/tests/Feature/ExampleTest.php b/Laravel/tests/Feature/ExampleTest.php new file mode 100644 index 0000000..4ae02bc --- /dev/null +++ b/Laravel/tests/Feature/ExampleTest.php @@ -0,0 +1,21 @@ +get('/'); + + $response->assertStatus(200); + } +} diff --git a/Laravel/tests/TestCase.php b/Laravel/tests/TestCase.php new file mode 100644 index 0000000..2932d4a --- /dev/null +++ b/Laravel/tests/TestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } +} diff --git a/Laravel/webpack.mix.js b/Laravel/webpack.mix.js new file mode 100644 index 0000000..2a22dc1 --- /dev/null +++ b/Laravel/webpack.mix.js @@ -0,0 +1,17 @@ +const mix = require('laravel-mix'); + +/* + |-------------------------------------------------------------------------- + | Mix Asset Management + |-------------------------------------------------------------------------- + | + | Mix provides a clean, fluent API for defining some Webpack build steps + | for your Laravel applications. By default, we are compiling the CSS + | file for the application as well as bundling up all the JS files. + | + */ + +mix.js('resources/js/app.js', 'public/js') + .postCss('resources/css/app.css', 'public/css', [ + // + ]); diff --git a/YiJi-admin/.env.development b/YiJi-admin/.env.development new file mode 100644 index 0000000..a0193c2 --- /dev/null +++ b/YiJi-admin/.env.development @@ -0,0 +1,3 @@ +ENV = 'development' +VITE_APP_API = '/api/' +VITE_APP_FILE = 'http://yijiyuyue' \ No newline at end of file diff --git a/YiJi-admin/.env.production b/YiJi-admin/.env.production new file mode 100644 index 0000000..da866f7 --- /dev/null +++ b/YiJi-admin/.env.production @@ -0,0 +1,4 @@ +ENV = 'production' +VITE_APP_API = 'https://yiji.yuluo.online/Laravel/public/api/' +VITE_APP_FILE = 'https://yiji.yuluo.online/Laravel/public/' + diff --git a/YiJi-admin/.eslintrc.cjs b/YiJi-admin/.eslintrc.cjs new file mode 100644 index 0000000..b64731a --- /dev/null +++ b/YiJi-admin/.eslintrc.cjs @@ -0,0 +1,14 @@ +/* eslint-env node */ +require('@rushstack/eslint-patch/modern-module-resolution') + +module.exports = { + root: true, + 'extends': [ + 'plugin:vue/vue3-essential', + 'eslint:recommended', + '@vue/eslint-config-prettier/skip-formatting' + ], + parserOptions: { + ecmaVersion: 'latest' + } +} diff --git a/YiJi-admin/.gitignore b/YiJi-admin/.gitignore new file mode 100644 index 0000000..38adffa --- /dev/null +++ b/YiJi-admin/.gitignore @@ -0,0 +1,28 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/YiJi-admin/.prettierrc.json b/YiJi-admin/.prettierrc.json new file mode 100644 index 0000000..66e2335 --- /dev/null +++ b/YiJi-admin/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": false, + "tabWidth": 2, + "singleQuote": true, + "printWidth": 100, + "trailingComma": "none" +} \ No newline at end of file diff --git a/YiJi-admin/.vscode/extensions.json b/YiJi-admin/.vscode/extensions.json new file mode 100644 index 0000000..009a534 --- /dev/null +++ b/YiJi-admin/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "Vue.volar", + "Vue.vscode-typescript-vue-plugin", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode" + ] +} diff --git a/YiJi-admin/README.md b/YiJi-admin/README.md new file mode 100644 index 0000000..eeed457 --- /dev/null +++ b/YiJi-admin/README.md @@ -0,0 +1,35 @@ +# el-admin + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). + +## Customize configuration + +See [Vite Configuration Reference](https://vitejs.dev/config/). + +## Project Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run dev +``` + +### Compile and Minify for Production + +```sh +npm run build +``` + +### Lint with [ESLint](https://eslint.org/) + +```sh +npm run lint +``` diff --git a/YiJi-admin/index.html b/YiJi-admin/index.html new file mode 100644 index 0000000..03cdc53 --- /dev/null +++ b/YiJi-admin/index.html @@ -0,0 +1,13 @@ + + + + + + + 体检平台 + + +
+ + + diff --git a/YiJi-admin/package-lock.json b/YiJi-admin/package-lock.json new file mode 100644 index 0000000..c2d3307 --- /dev/null +++ b/YiJi-admin/package-lock.json @@ -0,0 +1,3349 @@ +{ + "name": "el-admin", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "el-admin", + "version": "0.0.0", + "dependencies": { + "@element-plus/icons-vue": "^2.1.0", + "@vueuse/core": "^10.4.1", + "axios": "^1.5.1", + "echarts": "^5.4.3", + "element-plus": "^2.3.14", + "pinia": "^2.1.6", + "qrcode": "^1.5.3", + "vue": "^3.3.4", + "vue-router": "^4.2.4" + }, + "devDependencies": { + "@rushstack/eslint-patch": "^1.3.3", + "@vitejs/plugin-vue": "^4.3.4", + "@vue/eslint-config-prettier": "^8.0.0", + "eslint": "^8.49.0", + "eslint-plugin-vue": "^9.17.0", + "prettier": "^3.0.3", + "vite": "^4.4.9" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.1.0.tgz", + "integrity": "sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.0.tgz", + "integrity": "sha512-zJmuCWj2VLBt4c25CfBIbMZLGLyhkvs7LznyVX5HfpzeocThgIj5XQK4L+g3U36mMcx8bPMhGyPpwCATamC4jQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", + "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz", + "integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==", + "dependencies": { + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", + "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", + "dependencies": { + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.4.tgz", + "integrity": "sha512-qprfWkn82Iw821mcKofJ5Pk9wgioHicxcQMxx+5zt5GSKoqdWvgG5AxVmpmUUjzTLPVSH5auBrhI93Deayn/DA==" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.7", + "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.0.tgz", + "integrity": "sha512-EF3948ckf3f5uPgYbQ6GhyA56Dmv8yg0+ir+BroRjwdxyZJsekhZzawOecC2rOTPCz173t7ZcR1HHZu0dZgOCw==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.199", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.199.tgz", + "integrity": "sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.9", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.9.tgz", + "integrity": "sha512-ZTcmhiI3NNU7dEvWLZJkzG6ao49zOIjEgIE0RgV7wbPxU0f2xT3VSAHw2gmst8swH6V0YkLRGp4qPlX/6I90MQ==", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", + "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.3.4.tgz", + "integrity": "sha512-ciXNIHKPriERBisHFBvnTbfKa6r9SAesOYXeGDzgegcvy9Q4xdScSHAmKbNT0M3O0S9LKhIf5/G+UYG4NnnzYw==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", + "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", + "dependencies": { + "@babel/parser": "^7.21.3", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", + "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", + "dependencies": { + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", + "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", + "dependencies": { + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-ssr": "3.3.4", + "@vue/reactivity-transform": "3.3.4", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.0", + "postcss": "^8.1.10", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", + "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", + "dependencies": { + "@vue/compiler-dom": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz", + "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==" + }, + "node_modules/@vue/eslint-config-prettier": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-8.0.0.tgz", + "integrity": "sha512-55dPqtC4PM/yBjhAr+yEw6+7KzzdkBuLmnhBrDfp4I48+wy+Giqqj9yUr5T2uD/BkBROjjmqnLZmXRdOx/VtQg==", + "dev": true, + "dependencies": { + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^5.0.0" + }, + "peerDependencies": { + "eslint": ">= 8.0.0", + "prettier": ">= 3.0.0" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", + "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", + "dependencies": { + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", + "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", + "dependencies": { + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.0" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", + "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", + "dependencies": { + "@vue/reactivity": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", + "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", + "dependencies": { + "@vue/runtime-core": "3.3.4", + "@vue/shared": "3.3.4", + "csstype": "^3.1.1" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", + "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", + "dependencies": { + "@vue/compiler-ssr": "3.3.4", + "@vue/shared": "3.3.4" + }, + "peerDependencies": { + "vue": "3.3.4" + } + }, + "node_modules/@vue/shared": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", + "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==" + }, + "node_modules/@vueuse/core": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.4.1.tgz", + "integrity": "sha512-DkHIfMIoSIBjMgRRvdIvxsyboRZQmImofLyOHADqiVbQVilP8VVHDhBX2ZqoItOgu7dWa8oXiNnScOdPLhdEXg==", + "dependencies": { + "@types/web-bluetooth": "^0.0.17", + "@vueuse/metadata": "10.4.1", + "@vueuse/shared": "10.4.1", + "vue-demi": ">=0.14.5" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.4.1.tgz", + "integrity": "sha512-2Sc8X+iVzeuMGHr6O2j4gv/zxvQGGOYETYXEc41h0iZXIRnRbJZGmY/QP8dvzqUelf8vg0p/yEA5VpCEu+WpZg==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.4.1.tgz", + "integrity": "sha512-vz5hbAM4qA0lDKmcr2y3pPdU+2EVw/yzfRsBdu+6+USGa4PxqSQRYIUC9/NcT06y+ZgaTsyURw2I9qOFaaXHAg==", + "dependencies": { + "vue-demi": ">=0.14.5" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", + "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/echarts": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz", + "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==", + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.4.4" + } + }, + "node_modules/echarts/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "node_modules/element-plus": { + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.3.14.tgz", + "integrity": "sha512-9yvxUaU4jXf2ZNPdmIxoj/f8BG8CDcGM6oHa9JIqxLjQlfY4bpzR1E5CjNimnOX3rxO93w1TQ0jTVt0RSxh9kA==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.0.6", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.14.182", + "@types/lodash-es": "^4.17.6", + "@vueuse/core": "^9.1.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.3", + "escape-html": "^1.0.3", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.2", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/element-plus/node_modules/@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==" + }, + "node_modules/element-plus/node_modules/@vueuse/core": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz", + "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", + "dependencies": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.13.0", + "@vueuse/shared": "9.13.0", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/element-plus/node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/element-plus/node_modules/@vueuse/metadata": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz", + "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/element-plus/node_modules/@vueuse/shared": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz", + "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", + "dependencies": { + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/element-plus/node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", + "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.50.0", + "@humanwhocodes/config-array": "^0.11.11", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz", + "integrity": "sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz", + "integrity": "sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.13", + "semver": "^7.5.4", + "vue-eslint-parser": "^9.3.1", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "dev": true, + "dependencies": { + "flatted": "^3.2.7", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.22.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", + "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-wsl/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.30.4", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.4.tgz", + "integrity": "sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" + }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.6.tgz", + "integrity": "sha512-bIU6QuE5qZviMmct5XwCesXelb5VavdOWKWaB17ggk++NUwQWWbP5YnsONTk3b752QkW9sACiR81rorpeOMSvQ==", + "dependencies": { + "@vue/devtools-api": "^6.5.0", + "vue-demi": ">=0.14.5" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.3.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz", + "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==", + "dependencies": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/run-applescript/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/run-applescript/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/run-applescript/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/vite": { + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", + "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", + "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", + "dependencies": { + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-sfc": "3.3.4", + "@vue/runtime-dom": "3.3.4", + "@vue/server-renderer": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz", + "integrity": "sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-router": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz", + "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==", + "dependencies": { + "@vue/devtools-api": "^6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zrender": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz", + "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==", + "dependencies": { + "tslib": "2.3.0" + } + }, + "node_modules/zrender/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + } + } +} diff --git a/YiJi-admin/package.json b/YiJi-admin/package.json new file mode 100644 index 0000000..a35e531 --- /dev/null +++ b/YiJi-admin/package.json @@ -0,0 +1,32 @@ +{ + "name": "el-admin", + "version": "0.0.0", + "private": true, + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore", + "format": "prettier --write src/" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.1.0", + "@vueuse/core": "^10.4.1", + "axios": "^1.5.1", + "echarts": "^5.4.3", + "element-plus": "^2.3.14", + "pinia": "^2.1.6", + "qrcode": "^1.5.3", + "vue": "^3.3.4", + "vue-router": "^4.2.4" + }, + "devDependencies": { + "@rushstack/eslint-patch": "^1.3.3", + "@vitejs/plugin-vue": "^4.3.4", + "@vue/eslint-config-prettier": "^8.0.0", + "eslint": "^8.49.0", + "eslint-plugin-vue": "^9.17.0", + "prettier": "^3.0.3", + "vite": "^4.4.9" + } +} diff --git a/YiJi-admin/public/favicon.ico b/YiJi-admin/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/YiJi-admin/public/js/xtxsync.js b/YiJi-admin/public/js/xtxsync.js new file mode 100644 index 0000000..de4ab8b --- /dev/null +++ b/YiJi-admin/public/js/xtxsync.js @@ -0,0 +1,984 @@ +/* + -------------------------------------------------------------- + * FileName:xtxsync.js + * This Javascript provides synchronous interfaces + * Support bjca client version 3.4.1 and later + * Author:BJCA-zys + * Date: 2021-05-06 + * + -------------------------------------------------------------- + */ + +(function() { +if (typeof xtxsync === 'undefined') { + xtxsync = {}; +} +})(); + +// initialize xtxsync hashMap object +(function() { + +function xtxsyncHashMap(){ + this.map = {}; +} + +xtxsyncHashMap.prototype = { + put : function(key , value){ + this.map[key] = value; + }, + + get : function(key){ + if(this.map.hasOwnProperty(key)){ + return this.map[key]; + } + return null; + }, + + remove : function(key){ + if(this.map.hasOwnProperty(key)){ + return delete this.map[key]; + } + return false; + }, + + removeAll : function(){ + this.map = {}; + }, + + keySet : function(){ + var _keys = []; + for(var i in this.map){ + _keys.push(i); + } + return _keys; + } +}; + +xtxsyncHashMap.prototype.constructor = xtxsyncHashMap; + +xtxsync.HashMap = xtxsyncHashMap; +})(); + +// initialize xtxsync util object +(function() { + +function initUtilObject(xtxsync) { + + var util = xtxsync.util = xtxsync.util || {}; + + util.checkBrowserISIE = function() { + return (!!window.ActiveXObject || 'ActiveXObject' in window) ? true : false; + } + + util.checkLocationIsHttps = function() { + return 'https:' == document.location.protocol ? true: false; + } + + util.evalFunction = function (func) { + if (typeof func === 'function') { + return func; + } else if (typeof func === 'string') { + cb = eval(func); + } else { + return null; + } + } + + util.consolelog = function(param) { + if (window.console == undefined || window.console.log == undefined) { + return; + } + console.log(param); + } + + util.isEmpty = function(param) { + if (!param) { + return true; + } + if (typeof param == 'string' && param == "") { + return true; + } + + return false; + } + + util.loadIECtl = function(clsid, ctlName, checkFunc) { + if (!util.checkBrowserISIE()) { + return null; + } + var ctl = document.getElementById(ctlName); + if (ctl) { + return ctl; + } + try { + var loadObjString = ''; + loadObjString += ''; + document.write(loadObjString); + if (checkFunc != null && checkFunc != "" && eval(ctlName + "." + checkFunc) == undefined) { + return null; + } + } catch (e) { + util.consolelog(e); + return null; + } + return document.getElementById(ctlName); + } + + util.getAutoExecFunctionString = function (func) { + var ret = "("; + ret += func.toString(); + ret += ")()"; + + return ret; + } + + util.attachIEEvent = function(ctlName, eventName, eventFunc) { + var ctl; + if (typeof ctlName === 'string') { + ctl = eval(ctlName); + } else { + ctl = ctlName; + } + eventName = eventName.toLowerCase(); + + var cb = util.evalFunction(eventFunc); + if (cb == null) { + return; + } + + if (ctl.attachEvent) { + ctl.attachEvent(eventName, cb); + } else { // IE11 not support attachEvent, and addEventListener do not work well, so addEvent ourself + var handler = document.createElement("script"); + handler.setAttribute("for", ctlName); + handler.setAttribute("event", eventName); + var eventScript = util.getAutoExecFunctionString(eventFunc); + handler.appendChild(document.createTextNode(eventScript)); + document.getElementsByTagName("head")[0].appendChild(handler); + } + } + + util.loadWebSocketCtl = function(wsUrl, wssUrl) { + if (xtxsync.wsObject) { + return xtxsync.wsObject; + } + var url; + if (util.checkLocationIsHttps()) { + url = "wss://" + wssUrl; + } else { + url = "ws://" + wsUrl; + } + + var wsObject = { + socket : undefined, + wsEventQueue : new xtxsync.HashMap(), + wsURL : url + }; + xtxsync.wsObject = wsObject; + xtxsync.wsObject.wsEventQueue.put("onusbkeychange", util.evalFunction(xtxsync.custom.defaultUsbkeyChange)); + + try { + wsObject.socket = new WebSocket(url); + } catch (e) { + util.consolelog(e); + return null; + } + + wsObject.socket.onopen = function(evt) { + xtxsync.util.consolelog("open websocket[" + url + "] ok..."); + xtxsync.util.consolelog("SOF_GetVersion:(" + xtxsync.SOF_GetVersion() + ")"); + } + wsObject.socket.onclose = function(evt) { + util.consolelog("websocket[" + url + "] closed, reopen it..."); + xtxsync.wsObject = undefined; + xtxsync.XTXAppWebSocket = xtxsync.util.loadWebSocketCtl(wsUrl, wssUrl); + }; + wsObject.socket.onmessage = function(evt) { + var eventCmd = false; + if (xtxsync.util.isEmpty(evt.data)) { + util.consolelog("onmessage evt.data is NULL or empty!!!"); + return; + } + try { + var res = JSON.parse(evt.data); + var cmdId = undefined; + if (res['call_cmd_id']) { + cmdId = res['call_cmd_id']; + } else { + util.consolelog("return JSON not include call_cmd_id!!!"); + return; + } + + var retVal = ""; + if (res['retVal']) { + retVal = res['retVal']; + } else if (res['retValue']) { + retVal = res['retValue']; + } + + var execFunc = xtxsync.wsObject.wsEventQueue.get(cmdId.toLowerCase()); + if (execFunc && typeof execFunc == 'function') { // event + execFunc(retVal); + } + } catch (e) { + return; + } + }; + wsObject.socket.onerror = function(evt) { + xtxsync.util.consolelog(evt.data); + }; + + return wsObject; + } + + util.attachWebSocketEvent = function(wsObject, eventName, eventFunc) { + if (wsObject == null) { + return; + } + wsObject.wsEventQueue.put(eventName.toLowerCase(), util.evalFunction(eventFunc)); + } + + util.createHttpRequest = function() { + if (window.XMLHttpRequest) { + return new XMLHttpRequest(); + } else { + return new ActiveXObject("Microsoft.XMLHTTP"); + } + } + + util.ajaxSyncall = function(clsid, methodName, outPramType, argsArray) { + var defaultErrRet; + if (outPramType == 'bool') { + defaultErrRet = false; + } else if (outPramType == 'number') { + defaultErrRet = -1; + } else { + defaultErrRet = ""; + } + try { + var xhr = xtxsync.util.createHttpRequest(); + var strUrl = "http://127.0.0.1:21051/synctl"; + if (util.checkLocationIsHttps()) { + strUrl = "https://127.0.0.1:21061/synctl"; + } + xhr.open("POST", strUrl, false); + xhr.setRequestHeader("Content-type","application/json"); + var sendArray = { + url:window.location.href, + clsid:clsid, + func:methodName, + param:argsArray + }; + var token = xtxsync.custom.getToken(); + if (token != "") { + sendArray.token = token; + } + + xhr.send(JSON.stringify(sendArray)); + if (xhr.status != 200) { + if (methodName == 'SOF_Login' || methodName == 'SOF_LoginEx') { + xtxsync.custom.setToken(""); + } + return defaultErrRet; + } + + var res = JSON.parse(xhr.responseText); + if (res.token) { + xtxsync.custom.setToken(res.token); + } + + var ret = defaultErrRet; + if (res.hasOwnProperty('retValue')) { + ret = res.retValue; + } else if (res.hasOwnProperty('retVal')) { + if (outPramType == "bool"){ + if (typeof(res.retVal) == 'string') { + ret = res.retVal == "true" ? true : false; + } else { + ret = res.retVal; + } + } else if (outPramType == "number"){ + if (typeof(res.retVal) == 'string') { + ret = Number(res.retVal); + } else { + ret = res.retVal; + } + } else{ + ret = res.retVal; + } + } + if (ret == undefined) { + ret = defaultErrRet; + } + if (((methodName == 'SOF_Login' || methodName == 'SOF_LoginEx') && !ret) || (methodName == 'SOF_Logout' && ret)) { + xtxsync.custom.setToken(""); + } + return ret; + } catch (e) { + return defaultErrRet; + } + } +} + +return initUtilObject(xtxsync); +})(); + +// initialize index page and other custom action +(function() { + +function initCustomActions(xtxsync) { + var custom = xtxsync.custom = xtxsync.custom || {}; + + custom.softCertListID = ""; + custom.hardCertListID = ""; + custom.allCertListID = ""; + custom.loginCertID = ""; + custom.logoutFunc = null; + custom.UsbkeyChangeFunc = null; + custom.loginToken = ""; + + custom.errorReportFunc = function(msg) { + alert(msg); + } + + custom.setAutoLogoutParameter = function(strCertID, logoutFunc) { + var custom = xtxsync.custom; + custom.loginCertID = strCertID; + custom.logoutFunc = logoutFunc; + } + + custom.clearDropList = function(dropListId) { + if (dropListId == "") { + return; + } + + var obj = document.getElementById(dropListId); + if (obj == undefined) { + obj = eval(dropListId); + } + if (obj == undefined) { + return; + } + + var i, n = obj.length; + for (i = 0; i < n; i++) { + obj.remove(0); + } + } + + custom.pushOneDropListBox = function(userListArray, strListID) + { + var obj = document.getElementById(strListID); + if (obj == undefined) { + obj = eval(strListID); + } + if (obj == undefined) { + return; + } + + for (var i = 0; i < userListArray.length; i++) { + var certObj = userListArray[i]; + var objItem = new Option(certObj.certName, certObj.certID); + obj.options.add(objItem); + } + return; + } + + custom.pushUserListToAllDroplist = function(strUserList) { + var custom = xtxsync.custom; + + custom.clearDropList(custom.softCertListID); + custom.clearDropList(custom.hardCertListID); + custom.clearDropList(custom.allCertListID); + + var allListArray = []; + while (true) { + var i = strUserList.indexOf("&&&"); + if (i <= 0 ) { + break; + } + var strOneUser = strUserList.substring(0, i); + var strName = strOneUser.substring(0, strOneUser.indexOf("||")); + var strCertID = strOneUser.substring(strOneUser.indexOf("||") + 2, strOneUser.length); + allListArray.push({certName:strName, certID:strCertID}); + + if (custom.hardCertListID != "") { + var devType = xtxsync.GetDeviceInfo(strCertID, 7); + if (devType == "HARD") { + custom.pushOneDropListBox([{certName:strName, certID:strCertID}], custom.hardCertListID); + } + } + + if (custom.softCertListID != "") { + var devType = xtxsync.GetDeviceInfo(strCertID, 7); + if (devType == "SOFT") { + custom.pushOneDropListBox([{certName:strName, certID:strCertID}], custom.softCertListID); + } + } + var len = strUserList.length; + strUserList = strUserList.substring(i + 3, len); + } + + if (custom.allCertListID != "") { + custom.pushOneDropListBox(allListArray, custom.allCertListID); + } + } + + custom.setUserCertList = function(certListId, certType) { + var custom = xtxsync.custom; + + if (certType == CERT_TYPE_ALL || certType == undefined) { + custom.allCertListID = certListId; + } + + if (certType == CERT_TYPE_HARD) { + custom.hardCertListID = certListId; + } + + if (certType == CERT_TYPE_SOFT) { + custom.softCertListID = certListId; + } + custom.pushUserListToAllDroplist(xtxsync.SOF_GetUserList()); + } + + custom.setOnUsbKeyChangeCallBack = function(callback) { + xtxsync.custom.UsbkeyChangeFunc = callback; + } + + custom.setErrorReportFunc = function(errFunc) { + xtxsync.custom.errorReportFunc = errFunc; + } + + custom.autoLogoutCallBack = function(strUserList) { + var custom = xtxsync.custom; + if (strUserList.indexOf(custom.loginCertID) <= 0) { + custom.logoutFunc(); + } + } + + custom.defaultUsbkeyChange = function() { + var custom = xtxsync.custom; + custom.pushUserListToAllDroplist(xtxsync.SOF_GetUserList()); + + if (typeof custom.UsbkeyChangeFunc == 'function') { + custom.UsbkeyChangeFunc(); + } + + if (custom.loginCertID != "" && typeof custom.logoutFunc == 'function') { + custom.autoLogoutCallBack(xtxsync.SOF_GetUserList()); + } + } + + custom.getToken = function() { + return custom.loginToken; + } + + custom.setToken = function(token) { + custom.loginToken = token; + } +} + +return initCustomActions(xtxsync); +})(); + +// initialize xtxappcom object +(function() { + +function initXTXAppCOM(xtxsync) { + var util = xtxsync.util; + var custom = xtxsync.custom; + + xtxsync.XTXAppCOM = util.loadIECtl(xtxsync.xtx_clsid, "XTXAppObj", "SOF_GetVersion()"); + if (xtxsync.XTXAppCOM == null) { + custom.errorReportFunc("加载XTXAppCOM控件失败,请确认已正确安装BJCA证书应用环境!"); + return false; + } + var XTXAppCOM = xtxsync.XTXAppCOM; + + util.attachIEEvent("XTXAppObj", "onUsbkeyChange", xtxsync.custom.defaultUsbkeyChange); + + // get key pic interface + var GetPicObj = util.loadIECtl(xtxsync.getpic_clsid, "GetPicObj", "Hash('0')"); + if (GetPicObj == null) { + //custom.errorReportFunc("加载GetKeyPic控件失败,请确认已正确安装GetKeyPic控件!"); + } else { + XTXAppCOM.GetPic = function(strCertID) { + return GetPicObj.GetPic(strCertID); + } + XTXAppCOM.Hash = function(inData) { + return GetPicObj.Hash(inData); + } + XTXAppCOM.ConvertPicFormat = function(inData, type) { + return GetPicObj.ConvertPicFormat(inData, type); + } + XTXAppCOM.ConvertGif2Jpg = function(inData) { + return GetPicObj.ConvertGif2Jpg(inData); + } + XTXAppCOM.GetPic1 = function(strCertID) { + return GetPicObj.GetPic1(strCertID); + } + XTXAppCOM.ConvertPicSize = function(strPicture, w, h) { + return GetPicObj.ConvertPicSize(strPicture, w, h); + } + } + + // xtxversion interface + var XTXVersionOBJ = util.loadIECtl(xtxsync.xtx_version_clsid, "XTXVersionOBJ", "GetEnvVersion()"); + if (XTXVersionOBJ == null) { + //custom.errorReportFunc("加载XTXVersion控件失败,请确认已正确安装证书应用环境!"); + } else { + XTXAppCOM.GetEnvVersion = function() { + return XTXVersionOBJ.GetEnvVersion(); + } + } + + return true; +} + +function initXTXAppWebSocket(xtxsync) { + xtxsync.XTXAppWebSocket = xtxsync.util.loadWebSocketCtl("127.0.0.1:21051/xtxapp/", "127.0.0.1:21061/xtxapp/"); + if (xtxsync.XTXAppWebSocket == null) { + custom.errorReportFunc("连接XTXAppCOM服务失败,请确认已正确安装BJCA证书应用环境!"); + return false; + } + + return true; +} + +function initXTXAppObject(xtxsync) { + var util = xtxsync.util; + xtxsync.xtx_clsid = "3F367B74-92D9-4C5E-AB93-234F8A91D5E6"; + xtxsync.getpic_clsid = "3BC3C868-95B5-47ED-8686-E0E3E94EF366"; + xtxsync.xtx_version_clsid = "574887FB-22A5-488B-A49C-2CF25F56BE68"; + var getImplmentFunction; + + if (util.checkBrowserISIE()) { // IE + if (!initXTXAppCOM(xtxsync)) { + return false; + } + getImplmentFunction = function(methodInfo) { + if (methodInfo.inParams == '') { // 0 input param + window[methodInfo.funcName] = new Function('return xtxsync.XTXAppCOM.' + methodInfo.funcName + '();'); + } else { + window[methodInfo.funcName] = new Function(methodInfo.inParams, + 'return xtxsync.XTXAppCOM.' + methodInfo.funcName + '(' + methodInfo.inParams + ');'); + } + } + } else { // other brower + if (!initXTXAppWebSocket(xtxsync)) { + return false; + } + getImplmentFunction = function(methodInfo) { + if (methodInfo.inParams == '') { // 0 input param + window[methodInfo.funcName] = new Function( + "return xtxsync.util.ajaxSyncall('" + + methodInfo.clsid + "', '" + methodInfo.funcName + "', '" + methodInfo.outParamType + "');"); + } else { + window[methodInfo.funcName] = new Function(methodInfo.inParams, + "return xtxsync.util.ajaxSyncall('" + methodInfo.clsid + "', '" + + methodInfo.funcName + "','" + methodInfo.outParamType + "', [" + methodInfo.inParams + "]);"); + } + } + } + + var export_functions = [ + {funcName:'SOF_SetSignMethod', inParams:'SignMethod', outParamType:'number', clsid:xtxsync.xtx_clsid, aliasName:'SetSignMethod'}, + {funcName:'SOF_GetSignMethod', inParams:'', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SetEncryptMethod', inParams:'EncryptMethod', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetEncryptMethod', inParams:'', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetUserList', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GetUserList'}, + {funcName:'SOF_ExportUserCert', inParams:'CertID', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GetSignCert'}, + {funcName:'SOF_Login', inParams:'CertID, PassWd', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'VerifyUserPIN'}, + {funcName:'SOF_GetPinRetryCount', inParams:'CertID', outParamType:'number', clsid:xtxsync.xtx_clsid, aliasName:'GetUserPINRetryCount'}, + {funcName:'SOF_ChangePassWd', inParams:'CertID, oldPass, newPass', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'ChangeUserPassword'}, + {funcName:'SOF_GetCertInfo', inParams:'Cert, type', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GetCertBasicinfo'}, + {funcName:'SOF_GetCertInfoByOid', inParams:'Cert, Oid', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GetExtCertInfoByOID'}, + {funcName:'SOF_SignData', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'SignedData'}, + {funcName:'SOF_VerifySignedData', inParams:'Cert, InData, SignValue', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'VerifySignedData'}, + {funcName:'SOF_SignFile', inParams:'CertID, InFile', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'SOF_SignFile'}, + {funcName:'SOF_VerifySignedFile', inParams:'Cert, InFile, SignValue', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'VerifySignFile'}, + {funcName:'SOF_EncryptData', inParams:'Cert, InData', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'EncodeP7Enveloped'}, + {funcName:'SOF_DecryptData', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'DecodeP7Enveloped'}, + {funcName:'SOF_EncryptFile', inParams:'Cert, InFile, OutFile', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_DecryptFile', inParams:'CertID, InFile, OutFile', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignMessage', inParams:'dwFlag, CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_VerifySignedMessage', inParams:'MessageData, InData', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'VerifyDatabyP7'}, + {funcName:'SOF_GetInfoFromSignedMessage', inParams:'SignedMessage, type', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignDataXML', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_VerifySignedDataXML', inParams:'InData', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetXMLSignatureInfo', inParams:'XMLSignedData, type', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GenRandom', inParams:'RandomLen', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GenerateRandom'}, + {funcName:'SOF_PubKeyEncrypt', inParams:'Cert, InData', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'PubKeyEncrypt'}, + {funcName:'SOF_PriKeyDecrypt', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'PriKeyDecrypt'}, + {funcName:'SOF_SecertSegment', inParams:'Secert, m, n, k', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SecertRecovery', inParams:'Seg', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetLastError', inParams:'', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'GetDeviceCount', inParams:'', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'GetAllDeviceSN', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'GetDeviceSNByIndex', inParams:'iIndex', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'GetDeviceInfo', inParams:'sDeviceSN, iType', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'ChangeAdminPass', inParams:'sDeviceSN, sOldPass, sNewPass', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'UnlockUserPass', inParams:'sDeviceSN, sAdminPass, sNewUserPass', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'GenerateKeyPair', inParams:'sDeviceSN, sContainerName, iKeyType, bSign', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'ExportPubKey', inParams:'sDeviceSN, sContainerName, bSign', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'ImportSignCert', inParams:'sDeviceSN, sContainerName, sCert', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'ImportEncCert', inParams:'sDeviceSN, sContainerName, sCert, sPriKeyCipher', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'ReadFile', inParams:'sDeviceSN, sFileName', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'readFile'}, + {funcName:'WriteFile', inParams:'sDeviceSN, sFileName, sContent, bPrivate', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'writeFile'}, + {funcName:'IsContainerExist', inParams:'sDeviceSN, sContainerName', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'DeleteContainer', inParams:'sDeviceSN, sContainerName', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'ExportPKCS10', inParams:'sDeviceSN, sContainerName, sDN, bSign', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'InitDevice', inParams:'sDeviceSN, sAdminPass', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'AddSignInfo', inParams:'sUserPass', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetVersion', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_ExportExChangeUserCert', inParams:'CertID', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GetExchCert'}, + {funcName:'SOF_ValidateCert', inParams:'Cert', outParamType:'number', clsid:xtxsync.xtx_clsid, aliasName:'ValidateCert'}, + {funcName:'GetENVSN', inParams:'sDeviceSN', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SetENVSN', inParams:'sDeviceSN, sEnvsn', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'IsDeviceExist', inParams:'sDeviceSN', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'GetContainerCount', inParams:'sDeviceSN', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SymEncryptData', inParams:'sKey, indata', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'EncryptData'}, + {funcName:'SOF_SymDecryptData', inParams:'sKey, indata', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'DecryptData'}, + {funcName:'SOF_SymEncryptFile', inParams:'sKey, inFile, outFile', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'EncryptFile'}, + {funcName:'SOF_SymDecryptFile', inParams:'sKey, inFile, outFile', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'DecryptFile'}, + {funcName:'SOF_GetLastErrMsg', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_Base64Encode', inParams:'sIndata', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_Base64Decode', inParams:'sIndata', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_HashData', inParams:'hashAlg, sInData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_HashFile', inParams:'hashAlg, inFile', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'UnlockUserPassEx', inParams:'sDeviceSN, sAdminPin, sNewUserPass', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'DeleteOldContainer', inParams:'sDeviceSN', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'WriteFileEx', inParams:'sDeviceSN, sFileName, sContent', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'ReadFileEx', inParams:'sDeviceSN, sFileName', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'WriteFileBase64', inParams:'sDeviceSN, sFileName, sContent', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'DeleteFile', inParams:'sDeviceSN, sFileName', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_EncryptDataEx', inParams:'Cert, InData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'Base64EncodeFile', inParams:'sInFile', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetRetryCount', inParams:'CertID', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetAllContainerName', inParams:'sDeviceSN', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'CreateSoftDevice', inParams:'sDeviceSN, sLabel', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'DeleteSoftDevice', inParams:'sDeviceSN, sPasswd', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'EnableSoftDevice', inParams:'enable, sDeviceSN', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SoftDeviceBackup', inParams:'sDeviceSN, sPasswd', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SoftDeviceRestore', inParams:'sDeviceSN, sPasswd, sInFilePath', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_Logout', inParams:'CertID', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'Logout'}, + {funcName:'SetUserConfig', inParams:'type, strConfig', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignByteData', inParams:'CertID, byteLen', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_VerifySignedByteData', inParams:'Cert, byteLen, SignValue', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'OTP_GetChallengeCode', inParams:'sCertID', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'ImportEncCertEx', inParams:'sDeviceSN, sContainerName, sCert, sPriKeyCipher, ulSymAlg', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetCertEntity', inParams:'sCert', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'GetCertEntity'}, + {funcName:'SOF_HMAC', inParams:'hashid, key, indata', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignDataByPriKey', inParams:'sPriKey, sCert, sInData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'ImportKeyCertToSoftDevice', inParams:'sDeviceSN, sContainerName, sPriKey, sCert, bSign', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'InitDeviceEx', inParams:'sDeviceSN, sAdminPass, sUserPin, sKeyLabel, adminPinMaxRetry, userPinMaxRetry', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SelectFile', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignHashData', inParams:'CertID, b64ashData, hashAlg', outParamType:'string', clsid:xtxsync.xtx_clsid, aliasName:'SignHashData'}, + {funcName:'SOF_VerifySignedHashData', inParams:'Cert, b64ashData, SignValue, hashAlg', outParamType:'bool', clsid:xtxsync.xtx_clsid, aliasName:'VerifySignedHashData'}, + {funcName:'CheckSoftDeviceEnv', inParams:'', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'ImportPfxToDevice', inParams:'sDeviceSN, sContainerName, bSign, strPfx, strPfxPass', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_HashDataEx', inParams:'hashAlg, sInData, sCert, sID', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_HashFileEx', inParams:'hashAlg, inFile, sCert, sID', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'GetDeviceCountEx', inParams:'type', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'GetAllDeviceSNEx', inParams:'type', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_UpdateCert', inParams:'CertID, type', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'OpenSpecifiedFolder', inParams:'backupFilePath', outParamType:'', clsid:xtxsync.xtx_clsid}, + {funcName:'OTP_GetChallengeCodeEx', inParams:'sCertID, szAccount, money', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'Base64DecodeFile', inParams:'sInData, sFilePath', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'EnumFilesInDevice', inParams:'sDeviceSN', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'OTP_Halt', inParams:'sCertID', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_TSGenREQ', inParams:'b64Hash, hashAlg, bReqCert, policyID, b64Nonce, b64Extension', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_TSCompareNonce', inParams:'b64TSReq, b64TSAResp', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_TSGenPDFSignature', inParams:'b64TSAResp, b64OriPDFSignature', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_TSVerifyPDFSignature', inParams:'b64TSPDFSignature', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_TSGetPDFSignatureInfo', inParams:'b64TSPDFSignature, iType', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'OTP_GetState', inParams:'sCertID, bCert', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'OTP_GetSyncCode', inParams:'sCertID, ChallengeCode', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_IsLogin', inParams:'CertID', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_LoginEx', inParams:'CertID, PassWd, updateFlag', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'EnumSupportDeviceList', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'ExportPfxFromDevice', inParams:'sDeviceSN, sContainerName, bSign, strPfxPass', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignHashMessage', inParams:'CertID, InHashData, hashAlg', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'ExportPfxToFile', inParams:'sDeviceSN, sContainerName, bSign, strPfxPass', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignAPK', inParams:'CertID, strOriSignature', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'YZT_GenerateKeyPair', inParams:'sDeviceSN, sContainerName, iKeyTypeRSA, iKeyTypeSM2', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'YZT_ExportPubKey', inParams:'sDeviceSN, sContainerName, bSign', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'YZT_ImportSignCert', inParams:'sDeviceSN, sContainerName, sRSACert, sSM2Cert', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'YZT_ImportEncCert', inParams:'sDeviceSN, sContainerName, sRSACert, sRSAPriKeyCipher, ulRSASymAlg, sSM2Cert, sSM2PriKeyCipher, ulSM2SymAlg', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_ListenUKey', inParams:'Parm', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_EnableLoginWindow', inParams:'Parm', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignEnvelope', inParams:'CertID, Cert, InData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_UnSignEnvelope', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'BIO_MAKExportPKCS10', inParams:'sDeviceSN, iKeyType, sDN', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'BIO_MAKImportSignEncCert', inParams:'sDeviceSN, sSignCert, sEncCert, sPriKeyCipher', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'BIO_IssueDAKCert', inParams:'sDeviceSN, iKeyType, sDN', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'BIO_InfoCollect', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'BIO_GetBioInfo', inParams:'sDeviceSN', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetLastLoginCertID', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_ReadESealData', inParams:'CertID, ulKeyIndex, ulKeyAlgId, ulFlags', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_ReadKFXESealData', inParams:'CertID, ulKeyIndex, ulKeyAlgId, ulFlags', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SymDecryptFileToData', inParams:'sKey, inFile', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignMessageBase64', inParams:'dwFlag, CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_VerifySignedMessageBase64', inParams:'MessageData, InData', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_VerifySignedHashMessage', inParams:'MessageData, InHashData', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignDataBase64', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_VerifySignedDataBase64', inParams:'Cert, InData, SignValue', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_HashDataExBase64', inParams:'hashAlg, sInData, sCert, sID', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetProductVersion', inParams:'', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_UpdateCertEx', inParams:'CertID, PassWd', outParamType:'number', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_GetLastSignDataCertID', inParams:'CertID', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'BIO_SetUserConfig', inParams:'CertID, type, strConfig', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'BIO_InvokeCommand', inParams:'CertID, bstrCommand', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_ImportSymmKey', inParams:'CertID, ulKeyIndex, InData, ulFlags', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_WriteESealData', inParams:'CertID, InData, ulFlags', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_EPS_Encrypt', inParams:'CertID, ulKeyIndex, ulKeyAlgId, IVData, DivCount, DivComponent, InData, ulFlags', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_EPS_Decrypt', inParams:'CertID, ulKeyIndex, ulKeyAlgId, IVData, DivCount, DivComponent, InData, ulFlags', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_EPS_Mac', inParams:'CertID, ulKeyIndex, ulKeyAlgId, IVData, DivCount, DivComponent, InData, ulFlags', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_PriKeyDecryptEx', inParams:'CertID, InData', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_EPS_ReadESealData', inParams:'CertID, ulKeyIndex, ulKeyAlgId, ulFlags', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_EPS_WriteESealData', inParams:'CertID, InData, ulFlags', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'EnumESeal', inParams:'sDeviceSN', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'GetPicture', inParams:'bstrConName', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignEnvelopeFile', inParams:'CertID, Cert, InFile, OutFile', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_UnSignEnvelopeFile', inParams:'CertID, InFile, OutFile', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOFX_EncryptFile', inParams:'CertID, Cert, InFile, OutFile, ulFlags', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOFX_DecryptFile', inParams:'CertID, InFile, OutFile, ulFlags', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'GetPic', inParams:'bstrConName', outParamType:'string', clsid:xtxsync.getpic_clsid}, + {funcName:'Hash', inParams:'inData', outParamType:'string', clsid:xtxsync.getpic_clsid}, + {funcName:'ConvertPicFormat', inParams:'inData, type', outParamType:'string', clsid:xtxsync.getpic_clsid}, + {funcName:'ConvertGif2Jpg', inParams:'inData', outParamType:'string', clsid:xtxsync.getpic_clsid}, + {funcName:'GetPic1', inParams:'bstrConName', outParamType:'string', clsid:xtxsync.getpic_clsid}, + {funcName:'ConvertPicSize', inParams:'bstrPic, w, h', outParamType:'string', clsid:xtxsync.getpic_clsid}, + {funcName:'GetEnvVersion', inParams:'', outParamType:'string', clsid:xtxsync.xtx_version_clsid}, + {funcName:'InitDeviceWithParam', inParams:'sDeviceSN, sAppName, sAdminPass, sUserPin, sKeyLabel, adminPinMaxRetry, userPinMaxRetry, createFileRights', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SignDataEx', inParams:'CertID, InData,signFlag', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_VerifySignedDataEx', inParams:'Cert, InData, SignValue,signFlag', outParamType:'bool', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SymEncryptDataEx', inParams:'sKey,sIV,indata', outParamType:'string', clsid:xtxsync.xtx_clsid}, + {funcName:'SOF_SymDecryptDataEx', inParams:'sKey,sIV,indata', outParamType:'string', clsid:xtxsync.xtx_clsid} + ]; + + for (var i = 0; i < export_functions.length; i++) { + getImplmentFunction(export_functions[i]); + xtxsync[export_functions[i].funcName] = window[export_functions[i].funcName]; + if (export_functions[i].aliasName) { + window[export_functions[i].aliasName] = window[export_functions[i].funcName]; + xtxsync[export_functions[i].aliasName] = window[export_functions[i].funcName]; + } + + } + + return true; +} + +return initXTXAppObject(xtxsync); +})(); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////// EXPORT VAR AND FUNCTIONS /////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////// +// const var +var CERT_TYPE_HARD = 1; +var CERT_TYPE_SOFT = 2; +var CERT_TYPE_ALL = 3; + +// set auto logout parameters +function SetAutoLogoutParameter(strCertID, logoutFunc) { + xtxsync.custom.setAutoLogoutParameter(strCertID, logoutFunc); +} + +// set user cert list id +function SetUserCertList(strListID, certType) { + xtxsync.custom.setUserCertList(strListID, certType); +} + +// set custom usbkeychange callback +function SetOnUsbKeyChangeCallBack(callback) { + xtxsync.custom.setOnUsbKeyChangeCallBack(callback); +} + +// set custom alert function +function SetAlertFunction(custom_alert) { + xtxsync.custom.setErrorReportFunc(custom_alert); +} + +// get custom userlogin token +function GetLoginToken() { + return xtxsync.custom.getToken(); +} + +function SetLoginToken(tokenData) { + return xtxsync.custom.setToken(tokenData); +} + +function GetUserListByType(strType) { // strType is 'HARD' or 'SOFT' + var strUserList = xtxsync.SOF_GetUserList(); + var strReturn = ""; + while (true) { + var i = strUserList.indexOf("&&&"); + if (i <= 0 ) { + break; + } + var strOneUser = strUserList.substring(0, i); + var strName = strOneUser.substring(0, strOneUser.indexOf("||")); + var strCertID = strOneUser.substring(strOneUser.indexOf("||") + 2, strOneUser.length); + var devType = xtxsync.GetDeviceInfo(strCertID, 7); + if (devType == strType) { + strReturn += (strName + "||" + strCertID + "&&&"); + } + var len = strUserList.length; + strUserList = strUserList.substring(i + 3, len); + }; + + return strReturn; +} + +//get usbKey user list +function GetUserList_USBKey(cb, ctx) { + return GetUserListByType("HARD", cb, ctx); +} + +//get soft user list +function GetUserList_Soft() { + return GetUserListByType("SOFT", cb, ctx); +} + +//sign data with pkcs7 format +function SignByP7(strCertID, strInData, bDetach) { + return xtxsync.SOF_SignMessage(bDetach ? 1 : 0, strCertID, strInData); +} + +//get symmitric key length +//because xtx and secxv2 secx default symmitric alg is no equal +function GetSymKeyLength() { + return 24; +} + +//get device type return SOFT or HARD +function GetDeviceType(strCertID) { + return xtxsync.GetDeviceInfo(strCertID, 7); +} + +// calculate file's hash +function HashFile(strFilePath) { + return xtxsync.SOF_HashFile(2/*sha1*/, strFilePath); +} + +function ParseDateString(strDate) { + var strYear = strDate.substring(0, 4); + var strMonth = strDate.substring(4, 6); + var strDay = strDate.substring(6, 8); + var strHour = strDate.substring(8, 10); + var strMin = strDate.substring(10, 12); + var strSecond = strDate.substring(12, 14); + var RtnDate = new Date(); + RtnDate.setFullYear(Number(strYear), Number(strMonth) - 1, Number(strDay)); + RtnDate.setHours(Number(strHour)); + RtnDate.setMinutes(Number(strMin)); + RtnDate.setSeconds(Number(strSecond)); + return RtnDate; +} + +//Form login +function xtxLogin(formName, strCertID, strPin,strServerCert, strServerRan, strServerSignedData) { + var objForm = eval(formName); + if (objForm == null) { + return false; + } + if (strCertID == null || strCertID == "") { + xtxsync.custom.errorReportFunc("请输入证书密码!"); + return false; + } + if (strPin == null || strPin == "") { + xtxsync.custom.errorReportFunc("请输入证书密码!"); + return false; + } + + //Add a hidden item ... + if (objForm.UserSignedData == null) { + objForm.insertAdjacentHTML("BeforeEnd", ""); + } + if (objForm.UserCert == null) { + objForm.insertAdjacentHTML("BeforeEnd", ""); + } + if (objForm.CertID == null) { + objForm.insertAdjacentHTML("BeforeEnd", ""); + } + if (objForm.ContainerName == null) { + objForm.insertAdjacentHTML("BeforeEnd", ""); + } + if (objForm.LoginToken == null) { + objForm.insertAdjacentHTML("BeforeEnd", ""); + } + + var bRet = xtxsync.SOF_Login(strCertID, strPin); + if (!bRet) { + var retryCount = xtxsync.SOF_GetPinRetryCount(strCertID); + if (retryCount > 0) { + xtxsync.custom.errorReportFunc("校验证书密码失败!您还有" + retryCount + "次机会重试!"); + } else if (retryCount == 0) { + xtxsync.custom.errorReportFunc("您的证书密码已被锁死,请联系BJCA进行解锁!"); + } else { + xtxsync.custom.errorReportFunc("登录失败!"); + } + return false; + } + + var strClientCert = xtxsync.SOF_ExportUserCert(strCertID); + if (strClientCert == "") { + xtxsync.custom.errorReportFunc("导出用户证书失败!"); + return false; + } + + var strNotBefore = xtxsync.SOF_GetCertInfo(strClientCert, 11); + var strNotAfter = xtxsync.SOF_GetCertInfo(strClientCert, 12); + var notBeforeDate = ParseDateString(strNotBefore); + var days = parseInt((notBeforeDate.getTime() - new Date().getTime()) / (1000*60*60*24)); + if (days > 0) { + xtxsync.custom.errorReportFunc("您的证书尚未生效!距离生效日期还剩" + days + "天!"); + return false; + } + + var notAfterDate = ParseDateString(strNotAfter); + var milliseconds = notAfterDate.getTime() - new Date().getTime(); + if (milliseconds < 0) { + xtxsync.custom.errorReportFunc("您的证书已过期,请尽快到北京数字证书认证中心办理证书更新手续!"); + return false; + } + + days = parseInt(milliseconds / (1000*60*60*24)); + if (days > 0 && days <= 60) { + xtxsync.custom.errorReportFunc("您的证书还有" + days + "天过期\n请您尽快到北京数字证书认证中心办理证书更新手续!"); + } else if (days == 0) { // 证书有效期天数小于1天 + var hours = parseInt(milliseconds / (1000*60*60)); + if (hours > 0) { + xtxsync.custom.errorReportFunc("您的证书还有" + hours + "小时过期\n请您尽快到北京数字证书认证中心办理证书更新手续!"); + } + // 证书有效期小于1小时 + var minutes = parseInt(milliseconds / (1000*60)); + if (minutes > 1) { + xtxsync.custom.errorReportFunc("您的证书还有" + minutes + "分钟过期\n请您尽快到北京数字证书认证中心办理证书更新手续!"); + } else { + xtxsync.custom.errorReportFunc("您的证书已过期,请尽快到北京数字证书认证中心办理证书更新手续!"); + return false; + } + } + + bRet = xtxsync.SOF_VerifySignedData(strServerCert, strServerRan, strServerSignedData); + if (!bRet) { + xtxsync.custom.errorReportFunc("验证服务器端信息失败!"); + return false; + } + + var clientSignData = xtxsync.SOF_SignData(strCertID, strServerRan); + if (clientSignData == "") { + xtxsync.custom.errorReportFunc("客户端签名失败!"); + return false; + } + + objForm.CertID.value = strCertID; + objForm.ContainerName.value = strCertID; + objForm.UserCert.value = strClientCert; + objForm.UserSignedData.value = clientSignData; + objForm.LoginToken.value = xtxsync.custom.getToken(); + return true; +} diff --git a/YiJi-admin/src/App.vue b/YiJi-admin/src/App.vue new file mode 100644 index 0000000..c33cf4d --- /dev/null +++ b/YiJi-admin/src/App.vue @@ -0,0 +1,90 @@ + + + + + \ No newline at end of file diff --git a/YiJi-admin/src/api/api.js b/YiJi-admin/src/api/api.js new file mode 100644 index 0000000..354cc89 --- /dev/null +++ b/YiJi-admin/src/api/api.js @@ -0,0 +1,276 @@ +import axios from '@/tools/axios.js' +//登录 +export const Login = (data) => { + return axios({ url: import.meta.env.VITE_APP_API + 'admin/login', data: data }) +} +//admin后台获取当前用户菜单 +export const GetAdminBaseMenuList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/getBaseMenuList', data: data }) +} +//Token刷新 +export const TokenRefresh = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'tokenRefresh', data: data }) +} +//获取admin后台用户list +export const getAdminUserList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/getUserList', data: data }) +} +//admin后台获取所有菜单列表 +export const GetAdminMenuList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/getMenuList', data: data }) +} +//admin后台获取一级菜单 +export const GetFatherMenuList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetFatherMenuList', data: data }) +} +//admin后台添加菜单 +export const AddMenu = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/AddMenu', data: data }) +} +//admin后台编辑菜单 +export const EditMenu = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/EditMenu', data: data }) +} +//admin后台组列表 +export const getGroupList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/getGroupList', data: data }) +} +//admin后台修改组菜单 +export const GroupChangeMenu = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GroupChangeMenu', data: data }) +} +//admin后台添加组 +export const SaveGroup = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SaveGroup', data: data }) +} +//admin后台保存用户信息 +export const SaveSystemUserInfo = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SaveSystemUserInfo', data: data }) +} +//admin后台获取用户详细信息 +export const GetSystemUserDetail = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetSystemUserDetail', data: data }) +} +//admin后台修改密码 +export const adminChangePwd = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/adminChangePwd', data: data }) +} +//admin后台获取登录用户基本信息 +export const GetBaseAdminUserInfo = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetBaseUserInfo', data: data }) +} +//admin后台管理员查询分组使用的菜单 +export const AdminGetGroupMenuList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetGroupMenuList', data: data }) +} + +//admin后台创建体检日历 +export const CreateCalendar = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/CreateCalendar', data: data }) +} +//admin后台获取日历列表 +export const CalendarGetList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/CalendarGetList', data: data }) +} +//admin后台删除日历列表 +export const CalendarDel = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/CalendarListDel', data: data }) +} +//admin后台更新日历 +export const CalendarChangeInfo = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/CalendarChangeInfo', data: data }) +} +//admin后台更新日历 +export const CheckMenuAuth = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/CheckMenuAuth', data: data }) +} +//上传图片 +// export const UpFile = (data={}) => { +// return axios({url:import.meta.env.VITE_APP_API+'v1/UpFile',data:data}) +// } +export const UpFileUrl = () => { + return import.meta.env.VITE_APP_API + 'v1/UpFile' +} + +//admin后台修改自身用户信息 +export const ChangInfo = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/ChangInfo', data: data }) +} +//admin后台获取站点配置信息 +export const GetConfigInfo = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetConfigInfo', data: data }) +} +//admin后台保存站点配置信息 +export const SaveConfigInfo = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SaveConfigInfo', data: data }) +} + + +//admin后台获取检查项目类别列表 +export const GetCheckItemClassList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetCheckItemClassList', data: data }) +} +//admin后台获取检查项目列表 +export const GetCheckItemList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetCheckItemList', data: data }) +} + +//admin后台获取设备列表 +export const GetDeviceList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetDeviceList', data: data }) +} + +//admin后台保存设备 +export const SaveDeviceList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SaveDeviceList', data: data }) +} +//admin后台删除设备 +export const DelDevice = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/DelDevice', data: data }) +} + +//admin后台获取可用设备列表 +export const GetEnableDeviceList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetEnableDeviceList', data: data }) +} +//admin后台项目绑定设备 +export const ItemBindDevice = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/ItemBindDevice', data: data }) +} +//admin后台获取预约类型 +export const GetYuYueTypes = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetYuYueTypes', data: data }) +} +//admin后台保存检查项目信息 +export const SaveItemInfo = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SaveItemInfo', data: data }) +} +//admin获取科室列表 +export const GetDepartmentList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetDepartmentList', data: data }) +} +//admin保存科室信息 +export const SaveDepartment = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SaveDepartment', data: data }) +} + +//admin获取可用的科室列表 +export const GetEnableDepartmentList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetEnableDepartmentList', data: data }) +} + +//admin保存科室资源信息 +export const SaveDepartmentResource = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SaveDepartmentResource', data: data }) +} +//admin获取科室资源列表 +export const DepartmentResourceGetList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/DepartmentResourceGetList', data: data }) +} +//admin获取可用科室资源 +export const DepartmentResourceGetEnableList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/DepartmentResourceGetEnableList', data: data }) +} +//获取资源已经绑定的设备 +export const ResourceGetBindDeviceList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/ResourceGetBindDeviceList', data: data }) +} + +//admin删除科室信息 +export const DelDepartmentInfo = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/DelDepartment', data: data }) +} + +//admin删除科室资源 +export const DepartmentResourceDel = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/DepartmentResourceDel', data: data }) +} +//admin绑定科室资源与设备 +export const DepartmentResourceBindDevice = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/DepartmentResourceBindDevice', data: data }) +} +//admin保存时间段信息 +export const TimePeriodSave = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/TimePeriodSave', data: data }) +} +//admin获取时间段list +export const TimePeriodGetList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/TimePeriodGetList', data: data }) +} +//admin获取可用时间段 +export const TimePeriodGetEnableList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/TimePeriodGetEnableList', data: data }) +} +//admin获取时间段详情 +export const TimePeriodGetDetail = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/TimePeriodGetDetail', data: data }) +} +//admin删除时间段 +export const TimePeriodDel = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/TimePeriodDel', data: data }) +} +//admin获取资源计划模板列表 +export const PlanModelGetList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/PlanModelGetList', data: data }) +} +//admin保存资源计划模板 +export const PlanModelSave = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/PlanModelSave', data: data }) +} +//admin保存资源计划模板 +export const GetAppointmentRatio = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetAppointmentRatio', data: data }) +} +//admin资源计划详情 +export const GetPlanModelDetailInfo = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetPlanModelDetailInfo', data: data }) +} +//admin资源计划详情 +export const PlanModelDel = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/PlanModelDel', data: data }) +} +//admin保存预约类型(渠道)比例 +export const SaveAppointmentRatio = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SaveAppointmentRatio', data: data }) +} +//admin生成计划明细 +export const CreatePlanList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/CreatePlanList', data: data }) +} +//admin获取计划明细列表 +export const PlanListGetList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/PlanListGetList', data: data }) +} +//admin获取计划详情 +export const PlanListGetDetail = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/PlanListGetDetail', data: data }) +} +//admin获取计划详情 +export const PlanDetailChangeInfo = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/PlanDetailChangeInfo', data: data }) +} +//admin删除计划明细 +export const PlanDetailPlanListDel = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/PlanListDel', data: data }) +} +//admin获取主表列表 +export const GetMainList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetMainList', data: data }) +} +//取消预约 +export const CancelYuYue = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/CancelYuYue', data: data }) +} + +//设置互斥 +export const SetHuChi = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SetHuChi', data: data }) +} +//取消互斥 +export const DelHuChi = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/DelHuChi', data: data }) +} +//获取互斥项 +export const GetHuChiList = (data = {}) => { + return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/GetHuChiList', data: data }) +} \ No newline at end of file diff --git a/YiJi-admin/src/assets/backg_l.jpg b/YiJi-admin/src/assets/backg_l.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a86cc85bbdb7c82921fa51f76bda3f2cf7bb3f91 GIT binary patch literal 159532 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 z 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 g^pTF#c^yk?tm#g`iu{OWEAA@>k#c|2XKoF#rGn literal 0 HcmV?d00001 diff --git a/YiJi-admin/src/assets/base.css b/YiJi-admin/src/assets/base.css new file mode 100644 index 0000000..f748cd4 --- /dev/null +++ b/YiJi-admin/src/assets/base.css @@ -0,0 +1,92 @@ +/* color palette from */ +:root { + --vt-c-white: #ffffff; + --vt-c-white-soft: #f8f8f8; + --vt-c-white-mute: #f2f2f2; + + --vt-c-black: #181818; + --vt-c-black-soft: #222222; + --vt-c-black-mute: #282828; + + --vt-c-indigo: #2c3e50; + + --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); + --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); + --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); + --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); + + --vt-c-text-light-1: var(--vt-c-indigo); + --vt-c-text-light-2: rgba(60, 60, 60, 0.66); + --vt-c-text-dark-1: var(--vt-c-white); + --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); + --vt-c-border-light1: #eee; + --vt-c-border-dark1: #656565; +} + +/* semantic color variables for this project */ +:root { + /* --color-background: var(--vt-c-white); */ + --color-background-soft: var(--vt-c-white-soft); + --color-background-mute: var(--vt-c-white-mute); + + --color-border: var(--vt-c-divider-light-2); + --color-border-hover: var(--vt-c-divider-light-1); + + --color-heading: var(--vt-c-text-light-1); + --color-text: var(--vt-c-text-light-1); + + --section-gap: 160px; + + --color-border1:var(--vt-c-border-light1); +} + +@media (prefers-color-scheme:dark) { + :root { + --color-background: var(--vt-c-black); + --color-background-soft: var(--vt-c-black-soft); + --color-background-mute: var(--vt-c-black-mute); + + --color-border: var(--vt-c-divider-dark-2); + --color-border-hover: var(--vt-c-divider-dark-1); + + --color-heading: var(--vt-c-text-dark-1); + --color-text: var(--vt-c-text-dark-2); + + --color-border1:var(--vt-c-border-dark1); + } +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + font-weight: normal; +} + +body { + min-height: 100vh; + color: var(--color-text); + background: var(--color-background); + transition: + color 0.5s, + background-color 0.5s; + line-height: 1.6; + font-family: + Inter, + -apple-system, + BlinkMacSystemFont, + 'Segoe UI', + Roboto, + Oxygen, + Ubuntu, + Cantarell, + 'Fira Sans', + 'Droid Sans', + 'Helvetica Neue', + sans-serif; + font-size: 15px; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/YiJi-admin/src/assets/loginBackg.png b/YiJi-admin/src/assets/loginBackg.png new file mode 100644 index 0000000000000000000000000000000000000000..32d6f84eb62c3d9154a86e639c47ff4c4c4161cc GIT binary patch literal 126290 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

MqGNm)?u+oOr@!ULUi?F2;Z{_>MHR13 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

    $aZhklhwrZKm|PaHGo-0D2kF-*>AaHa?C7|~ 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 v! diff --git a/YiJi-admin/src/assets/main.css b/YiJi-admin/src/assets/main.css new file mode 100644 index 0000000..a208cea --- /dev/null +++ b/YiJi-admin/src/assets/main.css @@ -0,0 +1,35 @@ +@import './base.css'; + +#app { + /* max-width: 1280px; */ + margin: 0 auto; + /* padding: 2rem; */ + + font-weight: normal; +} + +a, +.green { + text-decoration: none; + color: hsla(160, 100%, 37%, 1); + transition: 0.4s; +} + +@media (hover: hover) { + a:hover { + background-color: hsla(160, 100%, 37%, 0.2); + } +} +/* +@media (min-width: 1024px) { + body { + display: flex; + place-items: center; + } + + #app { + display: grid; + grid-template-columns: 1fr 1fr; + padding: 0 2rem; + } +} */ diff --git a/YiJi-admin/src/assets/user.jpg b/YiJi-admin/src/assets/user.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a994e90685776bb4558e0fb6792539c1c134cad3 GIT binary patch literal 36407 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 +defineProps({ + msg: { + type: String, + required: true + } +}) + + + + + diff --git a/YiJi-admin/src/components/IconList.vue b/YiJi-admin/src/components/IconList.vue new file mode 100644 index 0000000..291d417 --- /dev/null +++ b/YiJi-admin/src/components/IconList.vue @@ -0,0 +1,66 @@ + + + + + \ No newline at end of file diff --git a/YiJi-admin/src/components/TheWelcome.vue b/YiJi-admin/src/components/TheWelcome.vue new file mode 100644 index 0000000..dab9536 --- /dev/null +++ b/YiJi-admin/src/components/TheWelcome.vue @@ -0,0 +1,88 @@ + + + diff --git a/YiJi-admin/src/components/WelcomeItem.vue b/YiJi-admin/src/components/WelcomeItem.vue new file mode 100644 index 0000000..ac366d0 --- /dev/null +++ b/YiJi-admin/src/components/WelcomeItem.vue @@ -0,0 +1,86 @@ + + + diff --git a/YiJi-admin/src/components/Yewu/DepartmentResourcesSave.vue b/YiJi-admin/src/components/Yewu/DepartmentResourcesSave.vue new file mode 100644 index 0000000..b99800e --- /dev/null +++ b/YiJi-admin/src/components/Yewu/DepartmentResourcesSave.vue @@ -0,0 +1,128 @@ + + + + + \ No newline at end of file diff --git a/YiJi-admin/src/components/icons/IconCommunity.vue b/YiJi-admin/src/components/icons/IconCommunity.vue new file mode 100644 index 0000000..2dc8b05 --- /dev/null +++ b/YiJi-admin/src/components/icons/IconCommunity.vue @@ -0,0 +1,7 @@ + diff --git a/YiJi-admin/src/components/icons/IconDocumentation.vue b/YiJi-admin/src/components/icons/IconDocumentation.vue new file mode 100644 index 0000000..6d4791c --- /dev/null +++ b/YiJi-admin/src/components/icons/IconDocumentation.vue @@ -0,0 +1,7 @@ + diff --git a/YiJi-admin/src/components/icons/IconEcosystem.vue b/YiJi-admin/src/components/icons/IconEcosystem.vue new file mode 100644 index 0000000..c3a4f07 --- /dev/null +++ b/YiJi-admin/src/components/icons/IconEcosystem.vue @@ -0,0 +1,7 @@ + diff --git a/YiJi-admin/src/components/icons/IconSupport.vue b/YiJi-admin/src/components/icons/IconSupport.vue new file mode 100644 index 0000000..7452834 --- /dev/null +++ b/YiJi-admin/src/components/icons/IconSupport.vue @@ -0,0 +1,7 @@ + diff --git a/YiJi-admin/src/components/icons/IconTooling.vue b/YiJi-admin/src/components/icons/IconTooling.vue new file mode 100644 index 0000000..660598d --- /dev/null +++ b/YiJi-admin/src/components/icons/IconTooling.vue @@ -0,0 +1,19 @@ + + diff --git a/YiJi-admin/src/main.js b/YiJi-admin/src/main.js new file mode 100644 index 0000000..e98a880 --- /dev/null +++ b/YiJi-admin/src/main.js @@ -0,0 +1,23 @@ +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' +import 'element-plus/theme-chalk/dark/css-vars.css' +import './assets/main.css' +import './style/dark/css-vars.css' +import * as ElementPlusIconsVue from '@element-plus/icons-vue' +import App from './App.vue' +import router from './router' +import zhCn from 'element-plus/dist/locale/zh-cn.mjs' + + +const app = createApp(App) +for (const [key, component] of Object.entries(ElementPlusIconsVue)) { + app.component(key, component) +} +app.use(ElementPlus, { + locale: zhCn, +}) +app.use(createPinia()) +app.use(router) +app.mount('#app') diff --git a/YiJi-admin/src/router/index.js b/YiJi-admin/src/router/index.js new file mode 100644 index 0000000..1039013 --- /dev/null +++ b/YiJi-admin/src/router/index.js @@ -0,0 +1,187 @@ +import { + createRouter, + createWebHashHistory +} from 'vue-router' + + + +import Login from '../views/Login.vue' +import Index from '../views/Index.vue' +import MenuList from '../views/SystemMngr/Menu/List.vue' +import AdminGroupList from '../views/SystemMngr/Group/List.vue' +import AdminUserList from '../views/SystemMngr/User/List.vue' +import AdminChangPwd from '../views/SystemMngr/User/ChangPwd.vue' +import HealthCalendar from '../views/AppointmentMngr/HealthCalendar.vue' +import Dashboard from '../views/MedicalCenter/Dashboard.vue' + + +const router = createRouter({ + history: createWebHashHistory(import.meta.env.BASE_URL), + routes: [{ + path: '/', + name: 'Login1', + component: Login, + meta: { + requiresAuth: false + } + }, + { + path: '/login', + name: 'Login', + component: Login, + meta: { + requiresAuth: false + } + }, { + path: '/index', + name: 'Index', + component: Index, + children: [{ + path: '/dashboard', + name: 'Dashboard', + component: Dashboard, + meta: { + title: '数据面板' + } + }, { + path: '/menuList', + name: 'menuList', + component: MenuList, + meta: { + title: '菜单管理' + } + }, { + path: '/groupMngr', + name: 'AdminGroupList', + component: AdminGroupList, + meta: { + title: '组管理' + } + }, { + path: '/adminUserList', + name: 'AdminUserList', + component: AdminUserList, + meta: { + title: '系统用户管理' + } + }, { + path: '/adminChangPwd', + name: 'AdminChangPwd', + component: AdminChangPwd, + meta: { + title: '用户中心' + } + },{ + path: '/systemMngr/systemConfig', + name: 'SystemMngrSystemConfig', + component: () => import('../views/SystemMngr/SystemConfig.vue'), + meta: { + title: '系统参数设置' + } + }, { + path: '/healthCalendar', + name: 'HealthCalendar', + component: HealthCalendar, + meta: { + title: '体检日历' + } + }, { + path: '/yewu/mainList', + name: 'YewuManiList', + component: () => import('../views/YeWu/MainList.vue'), + meta: { + title: '主工作列表' + } + }, { + path: '/yewu/CheckItemConfig', + name: 'YewuCheckItemConfig', + component: () => import('../views/YeWu/CheckItemConfig.vue'), + meta: { + title: '检查项目设置' + } + },{ + path: '/yewu/devicesConfig', + name: 'YewuDevicesConfig', + component: () => import('../views/YeWu/DevicesConfig.vue'), + meta: { + title: '服务组设置' + } + },{ + path: '/yewu/departmentConfig', + name: 'YewuDepartmentConfig', + component: () => import('../views/YeWu/DepartmentConfig.vue'), + meta: { + title: '科室管理' + } + },{ + path: '/yewu/departmentResources', + name: 'YewuDepartmentResources', + component: () => import('../views/YeWu/DepartmentResources.vue'), + meta: { + title: '资源管理' + } + },{ + path: '/appointmentmngr/timeperiodmngr', + name: 'AppointmentMngrTimePeriodMngr', + component: () => import('../views/AppointmentMngr/TimePeriodMngr.vue'), + meta: { + title: '时间段管理' + } + },{ + path: '/appointmentmngr/planmodel', + name: 'AppointmentMngrPlanModel', + component: () => import('../views/AppointmentMngr/PlanModel.vue'), + meta: { + title: '预约资源计划' + } + },{ + path: '/appointmentmngr/planlist', + name: 'AppointmentMngrPlanList', + component: () => import('../views/AppointmentMngr/PlanList.vue'), + meta: { + title: '预约资源计划' + } + },{ + path: '/appointmentmngr/ratio', + name: 'AppointmentmngrRatio', + component: () => import('../views/AppointmentMngr/RatioMngr.vue'), + meta: { + title: '各渠道比例设置' + } + }] + }, + + ] +}) + + +import { + CheckMenuAuth +} from "@/api/api.js"; +import { + ElMessage +} from 'element-plus' + + +router.beforeEach((to, from, next) => { + console.log(to.meta.requiresAuth) + const url = to.path + if (to.meta.requiresAuth == false) { + next() + } else { + const NewUrl = url.substring(1) + CheckMenuAuth({ + url: NewUrl + }).then(res => { + if (res.status) { + next(); + } else { + ElMessage.error(res.msg) + next('/'); + } + }) + } +}) + + +export default router \ No newline at end of file diff --git a/YiJi-admin/src/stores/counter.js b/YiJi-admin/src/stores/counter.js new file mode 100644 index 0000000..b6757ba --- /dev/null +++ b/YiJi-admin/src/stores/counter.js @@ -0,0 +1,12 @@ +import { ref, computed } from 'vue' +import { defineStore } from 'pinia' + +export const useCounterStore = defineStore('counter', () => { + const count = ref(0) + const doubleCount = computed(() => count.value * 2) + function increment() { + count.value++ + } + + return { count, doubleCount, increment } +}) diff --git a/YiJi-admin/src/stores/index.js b/YiJi-admin/src/stores/index.js new file mode 100644 index 0000000..eac9e1a --- /dev/null +++ b/YiJi-admin/src/stores/index.js @@ -0,0 +1,14 @@ +import { ref } from 'vue' +import { defineStore } from 'pinia' + +export const usePinia = defineStore('usePinia', () => { +//主题 + const theme=ref('light') + const themeChange=(v)=>{ + theme.value=v + } + + + + return { theme,themeChange} +}) diff --git a/YiJi-admin/src/style/dark/css-vars.css b/YiJi-admin/src/style/dark/css-vars.css new file mode 100644 index 0000000..1958f18 --- /dev/null +++ b/YiJi-admin/src/style/dark/css-vars.css @@ -0,0 +1,15 @@ +html { + /* 自定义深色背景颜色 */ + + --color-background:#f5f7f9; + --color-background2:#fff; + --color-table-th-background:#f4f4f4; +} +html.dark { + /* 自定义深色背景颜色 */ + --color-border1: #2b2b2b; + --color-text:#cfd3dc; + --color-background:#181818; + --color-background2:#1d1d1d; + --color-table-th-background:#363636; +} \ No newline at end of file diff --git a/YiJi-admin/src/tools/Tools.js b/YiJi-admin/src/tools/Tools.js new file mode 100644 index 0000000..c55dc5e --- /dev/null +++ b/YiJi-admin/src/tools/Tools.js @@ -0,0 +1,3 @@ +export function ToUrl(url){ + window.location.href=url +} \ No newline at end of file diff --git a/YiJi-admin/src/tools/axios.js b/YiJi-admin/src/tools/axios.js new file mode 100644 index 0000000..0483366 --- /dev/null +++ b/YiJi-admin/src/tools/axios.js @@ -0,0 +1,117 @@ +import axios from 'axios' + + + + +//请求拦截器 +axios.interceptors.request.use( + config => { + config.headers.Authorization = 'Bearer ' + sessionStorage.getItem("token") + config.method = 'POST' + return config + }, + err => { + return Promise.reject(error) + } +) +//响应拦截器 +axios.interceptors.response.use( + async response => { + const res = response.data + console.log(response) + if (res.code !== 200) { + if (res.code == 10001) { //token验证出错 + window.location.href = "./#/login" + } + if (res.code == 10002) { //token验证超时 + //console.log(response.config); + var ss = '' + await TokenRefresh().then(async data => { + // // 使用最外层请求的返回值 + // //console.log(data) + if (data == false) { + window.location.href = "./#/login" + } + if (data == true) { + // console.log("刷新成功"); + ss = await axios(response.config) + // console.log("再次支持上此操作"); + + } + }).catch(error => { + console.log(error); + }); + //await TT(); + return ss + //console.log('我是后面的'); + + } + if (res.code == 10003) { //无访问此接口权限 + ElMessageBox.confirm( + '无权限', + '通知', { + confirmButtonText: 'OK', + cancelButtonText: 'Cancel', + type: 'warning', + showCancelButton: false, + showClose: false, + } + ) + .then(() => { + // window.location.href = "/#/login" + }) + .catch(() => { + + }) + return false + } + return Promise.reject(res.msg || 'Error').catch(err => { + console.log(err) + }) + + } else { //成功返回数据 + + return res + + + } + }, + error => { + return Promise.reject(error) + } +) +const instance = axios.create({ + // 其他配置项 + // ... + // 禁用请求拦截器 + interceptors: false +}); + +function TokenRefresh() { + + console.log("执行:TokenRefresh") + return new Promise((resolve, reject) => { + instance({ + method: 'post', + url: import.meta.env.VITE_APP_API + 'tokenRefresh', + headers: { + Authorization: 'Bearer ' + sessionStorage.getItem("refreshToken") + }, + data: {} + }).then(function(res) { + // console.log('获取到新token'); + if (res.data.status) { + sessionStorage.setItem('token', res.data.token); + sessionStorage.setItem('refreshToken', res.data.refresh_token); + + resolve(true); + } else { + + resolve(false); + } + }); + }) + +} + +export default axios \ No newline at end of file diff --git a/YiJi-admin/src/views/AboutView.vue b/YiJi-admin/src/views/AboutView.vue new file mode 100644 index 0000000..756ad2a --- /dev/null +++ b/YiJi-admin/src/views/AboutView.vue @@ -0,0 +1,15 @@ + + + diff --git a/YiJi-admin/src/views/AppointmentMngr/HealthCalendar.vue b/YiJi-admin/src/views/AppointmentMngr/HealthCalendar.vue new file mode 100644 index 0000000..448599f --- /dev/null +++ b/YiJi-admin/src/views/AppointmentMngr/HealthCalendar.vue @@ -0,0 +1,404 @@ + + + + + \ No newline at end of file diff --git a/YiJi-admin/src/views/AppointmentMngr/PlanList.vue b/YiJi-admin/src/views/AppointmentMngr/PlanList.vue new file mode 100644 index 0000000..c6f709b --- /dev/null +++ b/YiJi-admin/src/views/AppointmentMngr/PlanList.vue @@ -0,0 +1,452 @@ + + + \ No newline at end of file diff --git a/YiJi-admin/src/views/AppointmentMngr/PlanModel.vue b/YiJi-admin/src/views/AppointmentMngr/PlanModel.vue new file mode 100644 index 0000000..89d8efe --- /dev/null +++ b/YiJi-admin/src/views/AppointmentMngr/PlanModel.vue @@ -0,0 +1,620 @@ + + + + + \ No newline at end of file diff --git a/YiJi-admin/src/views/AppointmentMngr/RatioMngr.vue b/YiJi-admin/src/views/AppointmentMngr/RatioMngr.vue new file mode 100644 index 0000000..d0e15f7 --- /dev/null +++ b/YiJi-admin/src/views/AppointmentMngr/RatioMngr.vue @@ -0,0 +1,80 @@ + + + \ No newline at end of file diff --git a/YiJi-admin/src/views/AppointmentMngr/TimePeriodMngr.vue b/YiJi-admin/src/views/AppointmentMngr/TimePeriodMngr.vue new file mode 100644 index 0000000..6012f63 --- /dev/null +++ b/YiJi-admin/src/views/AppointmentMngr/TimePeriodMngr.vue @@ -0,0 +1,204 @@ + + + + + \ No newline at end of file diff --git a/YiJi-admin/src/views/HomeView.vue b/YiJi-admin/src/views/HomeView.vue new file mode 100644 index 0000000..6bb706f --- /dev/null +++ b/YiJi-admin/src/views/HomeView.vue @@ -0,0 +1,9 @@ + + + diff --git a/YiJi-admin/src/views/Index.vue b/YiJi-admin/src/views/Index.vue new file mode 100644 index 0000000..5c2bedf --- /dev/null +++ b/YiJi-admin/src/views/Index.vue @@ -0,0 +1,330 @@ + + + + + + \ No newline at end of file diff --git a/YiJi-admin/src/views/Login.vue b/YiJi-admin/src/views/Login.vue new file mode 100644 index 0000000..1173c1c --- /dev/null +++ b/YiJi-admin/src/views/Login.vue @@ -0,0 +1,146 @@ + + + + + \ No newline at end of file diff --git a/YiJi-admin/src/views/MedicalCenter/Dashboard.vue b/YiJi-admin/src/views/MedicalCenter/Dashboard.vue new file mode 100644 index 0000000..74f6295 --- /dev/null +++ b/YiJi-admin/src/views/MedicalCenter/Dashboard.vue @@ -0,0 +1,174 @@ + + + + + \ No newline at end of file diff --git a/YiJi-admin/src/views/SystemMngr/Group/List.vue b/YiJi-admin/src/views/SystemMngr/Group/List.vue new file mode 100644 index 0000000..e6d446a --- /dev/null +++ b/YiJi-admin/src/views/SystemMngr/Group/List.vue @@ -0,0 +1,159 @@ + + + + + \ No newline at end of file diff --git a/YiJi-admin/src/views/SystemMngr/Menu/List.vue b/YiJi-admin/src/views/SystemMngr/Menu/List.vue new file mode 100644 index 0000000..9fb75a3 --- /dev/null +++ b/YiJi-admin/src/views/SystemMngr/Menu/List.vue @@ -0,0 +1,163 @@ + + + + + \ No newline at end of file diff --git a/YiJi-admin/src/views/SystemMngr/SystemConfig.vue b/YiJi-admin/src/views/SystemMngr/SystemConfig.vue new file mode 100644 index 0000000..3a861b1 --- /dev/null +++ b/YiJi-admin/src/views/SystemMngr/SystemConfig.vue @@ -0,0 +1,129 @@ + + + + + + \ No newline at end of file diff --git a/YiJi-admin/src/views/SystemMngr/User/ChangPwd.vue b/YiJi-admin/src/views/SystemMngr/User/ChangPwd.vue new file mode 100644 index 0000000..f9c7d09 --- /dev/null +++ b/YiJi-admin/src/views/SystemMngr/User/ChangPwd.vue @@ -0,0 +1,198 @@ + + + + + + + \ No newline at end of file diff --git a/YiJi-admin/src/views/SystemMngr/User/List.vue b/YiJi-admin/src/views/SystemMngr/User/List.vue new file mode 100644 index 0000000..85eef22 --- /dev/null +++ b/YiJi-admin/src/views/SystemMngr/User/List.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/YiJi-admin/src/views/YeWu/CheckItemConfig.vue b/YiJi-admin/src/views/YeWu/CheckItemConfig.vue new file mode 100644 index 0000000..8b3fba6 --- /dev/null +++ b/YiJi-admin/src/views/YeWu/CheckItemConfig.vue @@ -0,0 +1,457 @@ + + + + + \ No newline at end of file diff --git a/YiJi-admin/src/views/YeWu/DepartmentConfig.vue b/YiJi-admin/src/views/YeWu/DepartmentConfig.vue new file mode 100644 index 0000000..8ac7ff8 --- /dev/null +++ b/YiJi-admin/src/views/YeWu/DepartmentConfig.vue @@ -0,0 +1,325 @@ + + + + + \ No newline at end of file diff --git a/YiJi-admin/src/views/YeWu/DepartmentResources.vue b/YiJi-admin/src/views/YeWu/DepartmentResources.vue new file mode 100644 index 0000000..7d7a45d --- /dev/null +++ b/YiJi-admin/src/views/YeWu/DepartmentResources.vue @@ -0,0 +1,268 @@ + + + + + \ No newline at end of file diff --git a/YiJi-admin/src/views/YeWu/DevicesConfig.vue b/YiJi-admin/src/views/YeWu/DevicesConfig.vue new file mode 100644 index 0000000..8e32777 --- /dev/null +++ b/YiJi-admin/src/views/YeWu/DevicesConfig.vue @@ -0,0 +1,168 @@ + + + + + \ No newline at end of file diff --git a/YiJi-admin/src/views/YeWu/MainList.vue b/YiJi-admin/src/views/YeWu/MainList.vue new file mode 100644 index 0000000..e7e09a8 --- /dev/null +++ b/YiJi-admin/src/views/YeWu/MainList.vue @@ -0,0 +1,308 @@ + + + + + \ No newline at end of file diff --git a/YiJi-admin/vite.config.js b/YiJi-admin/vite.config.js new file mode 100644 index 0000000..9b87467 --- /dev/null +++ b/YiJi-admin/vite.config.js @@ -0,0 +1,33 @@ +import { + fileURLToPath, + URL +} from 'node:url' + +import { + defineConfig +} from 'vite' +import vue from '@vitejs/plugin-vue' + +// https://vitejs.dev/config/ +export default defineConfig({ + base: "./", + plugins: [ + vue(), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + }, + server: { + host: "0.0.0.0", + port: 5174, + proxy: { + '/api': { + target: 'http://yijiyuyue/api', // 实际的API服务器地址 + changeOrigin: true, + rewrite: (path) => path.replace(/^\/api/, '') // 如果API地址有前缀,可以进行转写 + } + } + } +}) \ No newline at end of file