diff --git a/backend/requirements.txt b/backend/requirements.txt index c075061..bd582f8 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -8,6 +8,7 @@ pydantic[email]==2.10.3 pydantic-settings==2.7.0 python-jose[cryptography]==3.3.0 passlib[bcrypt]==1.7.4 +bcrypt==4.3.0 python-multipart==0.0.20 celery==5.4.0 redis==5.2.1 diff --git a/backend/seed.py b/backend/seed.py index 7d6aa63..9e36f29 100644 --- a/backend/seed.py +++ b/backend/seed.py @@ -7,6 +7,8 @@ sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker from sqlalchemy import select from app.database import Base +# Import all models so Base.metadata has the complete schema +from app.models import user, school, license, sms, billing, ticket, audit, announcement, email_log, report # noqa from app.models.user import HubUser, UserRole from app.auth.password import hash_password diff --git a/frontend/src/layouts/AppLayout.vue b/frontend/src/layouts/AppLayout.vue index 89bd101..760c1c4 100644 --- a/frontend/src/layouts/AppLayout.vue +++ b/frontend/src/layouts/AppLayout.vue @@ -15,7 +15,7 @@ { }, 300) }) +function onSearchBlur() { + setTimeout(() => { showSearch.value = false }, 200) +} + function navigate(item: any) { showSearch.value = false searchQuery.value = ''