@ -0,0 +1,16 @@ | |||||
# Editor configuration, see https://editorconfig.org | |||||
root = true | |||||
[*] | |||||
charset = utf-8 | |||||
indent_style = space | |||||
indent_size = 2 | |||||
insert_final_newline = true | |||||
trim_trailing_whitespace = true | |||||
[*.ts] | |||||
quote_type = single | |||||
[*.md] | |||||
max_line_length = off | |||||
trim_trailing_whitespace = false |
@ -0,0 +1,50 @@ | |||||
{ | |||||
"root": true, | |||||
"ignorePatterns": [ | |||||
"projects/**/*" | |||||
], | |||||
"overrides": [ | |||||
{ | |||||
"files": [ | |||||
"*.ts" | |||||
], | |||||
"parserOptions": { | |||||
"project": [ | |||||
"tsconfig.json" | |||||
], | |||||
"createDefaultProgram": true | |||||
}, | |||||
"extends": [ | |||||
"plugin:@angular-eslint/recommended", | |||||
"plugin:@angular-eslint/template/process-inline-templates" | |||||
], | |||||
"rules": { | |||||
"@angular-eslint/directive-selector": [ | |||||
"error", | |||||
{ | |||||
"type": "attribute", | |||||
"prefix": "app", | |||||
"style": "camelCase" | |||||
} | |||||
], | |||||
"@angular-eslint/component-selector": [ | |||||
"error", | |||||
{ | |||||
"type": "element", | |||||
"prefix": "app", | |||||
"style": "kebab-case" | |||||
} | |||||
] | |||||
} | |||||
}, | |||||
{ | |||||
"files": [ | |||||
"*.html" | |||||
], | |||||
"extends": [ | |||||
"plugin:@angular-eslint/template/recommended" | |||||
], | |||||
"rules": {} | |||||
} | |||||
] | |||||
} |
@ -0,0 +1,46 @@ | |||||
# See http://help.github.com/ignore-files/ for more about ignoring files. | |||||
# compiled output | |||||
/dist | |||||
/tmp | |||||
/out-tsc | |||||
# Only exists if Bazel was run | |||||
/bazel-out | |||||
# dependencies | |||||
/node_modules | |||||
# profiling files | |||||
chrome-profiler-events*.json | |||||
# IDEs and editors | |||||
/.idea | |||||
.project | |||||
.classpath | |||||
.c9/ | |||||
*.launch | |||||
.settings/ | |||||
*.sublime-workspace | |||||
# IDE - VSCode | |||||
.vscode/* | |||||
!.vscode/settings.json | |||||
!.vscode/tasks.json | |||||
!.vscode/launch.json | |||||
!.vscode/extensions.json | |||||
.history/* | |||||
# misc | |||||
/.angular/cache | |||||
/.sass-cache | |||||
/connect.lock | |||||
/coverage | |||||
/libpeerconnection.log | |||||
npm-debug.log | |||||
yarn-error.log | |||||
testem.log | |||||
/typings | |||||
# System Files | |||||
.DS_Store | |||||
Thumbs.db |
@ -0,0 +1,5 @@ | |||||
{ | |||||
"singleQuote": true, | |||||
"printWidth": 100, | |||||
"arrowParens": "avoid" | |||||
} |
@ -0,0 +1,27 @@ | |||||
# HospitalManagementSystem | |||||
This is a startup project based on the ABP framework. For more information, visit <a href="https://abp.io/" target="_blank">abp.io</a> | |||||
## Development server | |||||
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. | |||||
## Code scaffolding | |||||
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. | |||||
## Build | |||||
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build. | |||||
## Running unit tests | |||||
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). | |||||
## Running end-to-end tests | |||||
Run `ng e2e` to execute the end-to-end tests via a platform of your choice. | |||||
## Further help | |||||
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. |
@ -0,0 +1,190 @@ | |||||
{ | |||||
"$schema": "./node_modules/@angular/cli/lib/config/schema.json", | |||||
"cli": { | |||||
"analytics": false, | |||||
"schematicCollections": ["@angular-eslint/schematics"] | |||||
}, | |||||
"version": 1, | |||||
"newProjectRoot": "projects", | |||||
"projects": { | |||||
"HospitalManagementSystem": { | |||||
"projectType": "application", | |||||
"schematics": { | |||||
"@schematics/angular:component": { | |||||
"style": "scss" | |||||
} | |||||
}, | |||||
"root": "", | |||||
"sourceRoot": "src", | |||||
"prefix": "app", | |||||
"architect": { | |||||
"build": { | |||||
"builder": "@angular-devkit/build-angular:browser", | |||||
"options": { | |||||
"outputPath": "dist/HospitalManagementSystem", | |||||
"index": "src/index.html", | |||||
"main": "src/main.ts", | |||||
"polyfills": "src/polyfills.ts", | |||||
"tsConfig": "tsconfig.app.json", | |||||
"inlineStyleLanguage": "scss", | |||||
"allowedCommonJsDependencies": ["chart.js", "js-sha256"], | |||||
"assets": ["src/favicon.ico", "src/assets"], | |||||
"styles": [ | |||||
{ | |||||
"input": "node_modules/@volo/ngx-lepton-x.lite/assets/css/bootstrap-dim.css", | |||||
"inject": false, | |||||
"bundleName": "bootstrap-dim" | |||||
}, | |||||
{ | |||||
"input": "node_modules/@volo/ngx-lepton-x.lite/assets/css/ng-bundle.css", | |||||
"inject": false, | |||||
"bundleName": "ng-bundle" | |||||
}, | |||||
{ | |||||
"input": "node_modules/@volo/ngx-lepton-x.lite/assets/css/side-menu/layout-bundle.css", | |||||
"inject": false, | |||||
"bundleName": "layout-bundle" | |||||
}, | |||||
{ | |||||
"input": "node_modules/@abp/ng.theme.lepton-x/assets/css/abp-bundle.css", | |||||
"inject": false, | |||||
"bundleName": "abp-bundle" | |||||
}, | |||||
{ | |||||
"input": "node_modules/@volo/ngx-lepton-x.lite/assets/css/bootstrap-dim.rtl.css", | |||||
"inject": false, | |||||
"bundleName": "bootstrap-dim.rtl" | |||||
}, | |||||
{ | |||||
"input": "node_modules/@volo/ngx-lepton-x.lite/assets/css/font-bundle.rtl.css", | |||||
"inject": false, | |||||
"bundleName": "font-bundle.rtl" | |||||
}, | |||||
{ | |||||
"input": "node_modules/@volo/ngx-lepton-x.lite/assets/css/font-bundle.css", | |||||
"inject": false, | |||||
"bundleName": "font-bundle" | |||||
}, | |||||
{ | |||||
"input": "node_modules/@volo/ngx-lepton-x.lite/assets/css/ng-bundle.rtl.css", | |||||
"inject": false, | |||||
"bundleName": "ng-bundle.rtl" | |||||
}, | |||||
{ | |||||
"input": "node_modules/@volo/ngx-lepton-x.lite/assets/css/side-menu/layout-bundle.rtl.css", | |||||
"inject": false, | |||||
"bundleName": "layout-bundle.rtl" | |||||
}, | |||||
{ | |||||
"input": "node_modules/@abp/ng.theme.lepton-x/assets/css/abp-bundle.rtl.css", | |||||
"inject": false, | |||||
"bundleName": "abp-bundle.rtl" | |||||
}, | |||||
{ | |||||
"input": "node_modules/bootstrap-icons/font/bootstrap-icons.css", | |||||
"inject": true, | |||||
"bundleName": "bootstrap-icons" | |||||
}, | |||||
{ | |||||
"input": "node_modules/@fortawesome/fontawesome-free/css/all.min.css", | |||||
"inject": true, | |||||
"bundleName": "fontawesome-all.min" | |||||
}, | |||||
{ | |||||
"input": "node_modules/@fortawesome/fontawesome-free/css/v4-shims.min.css", | |||||
"inject": true, | |||||
"bundleName": "fontawesome-v4-shims.min" | |||||
}, | |||||
{ | |||||
"input": "node_modules/@swimlane/ngx-datatable/index.css", | |||||
"inject": true, | |||||
"bundleName": "ngx-datatable-index" | |||||
}, | |||||
{ | |||||
"input": "node_modules/@swimlane/ngx-datatable/assets/icons.css", | |||||
"inject": true, | |||||
"bundleName": "ngx-datatable-icons" | |||||
}, | |||||
{ | |||||
"input": "node_modules/@swimlane/ngx-datatable/themes/material.css", | |||||
"inject": true, | |||||
"bundleName": "ngx-datatable-material" | |||||
}, | |||||
"src/styles.scss" | |||||
], | |||||
"scripts": [] | |||||
}, | |||||
"configurations": { | |||||
"production": { | |||||
"budgets": [ | |||||
{ | |||||
"type": "initial", | |||||
"maximumWarning": "2mb", | |||||
"maximumError": "2.5mb" | |||||
}, | |||||
{ | |||||
"type": "anyComponentStyle", | |||||
"maximumWarning": "2kb", | |||||
"maximumError": "4kb" | |||||
} | |||||
], | |||||
"fileReplacements": [ | |||||
{ | |||||
"replace": "src/environments/environment.ts", | |||||
"with": "src/environments/environment.prod.ts" | |||||
} | |||||
], | |||||
"outputHashing": "all" | |||||
}, | |||||
"development": { | |||||
"buildOptimizer": false, | |||||
"optimization": false, | |||||
"vendorChunk": true, | |||||
"extractLicenses": false, | |||||
"sourceMap": true, | |||||
"namedChunks": true | |||||
} | |||||
}, | |||||
"defaultConfiguration": "production" | |||||
}, | |||||
"serve": { | |||||
"builder": "@angular-devkit/build-angular:dev-server", | |||||
"configurations": { | |||||
"production": { | |||||
"buildTarget": "HospitalManagementSystem:build:production" | |||||
}, | |||||
"development": { | |||||
"buildTarget": "HospitalManagementSystem:build:development" | |||||
} | |||||
}, | |||||
"defaultConfiguration": "development" | |||||
}, | |||||
"extract-i18n": { | |||||
"builder": "@angular-devkit/build-angular:extract-i18n", | |||||
"options": { | |||||
"buildTarget": "HospitalManagementSystem:build" | |||||
} | |||||
}, | |||||
"test": { | |||||
"builder": "@angular-devkit/build-angular:karma", | |||||
"options": { | |||||
"main": "src/test.ts", | |||||
"polyfills": "src/polyfills.ts", | |||||
"tsConfig": "tsconfig.spec.json", | |||||
"karmaConfig": "karma.conf.js", | |||||
"inlineStyleLanguage": "scss", | |||||
"assets": ["src/favicon.ico", "src/assets"], | |||||
"styles": ["src/styles.scss"], | |||||
"scripts": [] | |||||
} | |||||
}, | |||||
"lint": { | |||||
"builder": "@angular-eslint/builder:lint", | |||||
"options": { | |||||
"lintFilePatterns": ["src/**/*.ts", "src/**/*.html"] | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,44 @@ | |||||
// Karma configuration file, see link for more information | |||||
// https://karma-runner.github.io/1.0/config/configuration-file.html | |||||
module.exports = function (config) { | |||||
config.set({ | |||||
basePath: '', | |||||
frameworks: ['jasmine', '@angular-devkit/build-angular'], | |||||
plugins: [ | |||||
require('karma-jasmine'), | |||||
require('karma-chrome-launcher'), | |||||
require('karma-jasmine-html-reporter'), | |||||
require('karma-coverage'), | |||||
require('@angular-devkit/build-angular/plugins/karma') | |||||
], | |||||
client: { | |||||
jasmine: { | |||||
// you can add configuration options for Jasmine here | |||||
// the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html | |||||
// for example, you can disable the random execution with `random: false` | |||||
// or set a specific seed with `seed: 4321` | |||||
}, | |||||
clearContext: false // leave Jasmine Spec Runner output visible in browser | |||||
}, | |||||
jasmineHtmlReporter: { | |||||
suppressAll: true // removes the duplicated traces | |||||
}, | |||||
coverageReporter: { | |||||
dir: require('path').join(__dirname, './coverage/HospitalManagementSystem'), | |||||
subdir: '.', | |||||
reporters: [ | |||||
{ type: 'html' }, | |||||
{ type: 'text-summary' } | |||||
] | |||||
}, | |||||
reporters: ['progress', 'kjhtml'], | |||||
port: 9876, | |||||
colors: true, | |||||
logLevel: config.LOG_INFO, | |||||
autoWatch: true, | |||||
browsers: ['Chrome'], | |||||
singleRun: false, | |||||
restartOnFileChange: true | |||||
}); | |||||
}; |
@ -0,0 +1,62 @@ | |||||
{ | |||||
"name": "HospitalManagementSystem", | |||||
"version": "0.0.0", | |||||
"scripts": { | |||||
"ng": "ng", | |||||
"start": "ng serve --open", | |||||
"build": "ng build", | |||||
"build:prod": "ng build --configuration production", | |||||
"watch": "ng build --watch --configuration development", | |||||
"test": "ng test", | |||||
"lint": "ng lint" | |||||
}, | |||||
"private": true, | |||||
"dependencies": { | |||||
"@abp/ng.account": "~9.0.2", | |||||
"@abp/ng.components": "~9.0.2", | |||||
"@abp/ng.core": "~9.0.2", | |||||
"@abp/ng.identity": "~9.0.2", | |||||
"@abp/ng.oauth": "~9.0.2", | |||||
"@abp/ng.setting-management": "~9.0.2", | |||||
"@abp/ng.tenant-management": "~9.0.2", | |||||
"@abp/ng.theme.lepton-x": "~4.0.3", | |||||
"@abp/ng.theme.shared": "~9.0.2", | |||||
"@angular/animations": "~18.1.0", | |||||
"@angular/common": "~18.1.0", | |||||
"@angular/compiler": "~18.1.0", | |||||
"@angular/core": "~18.1.0", | |||||
"@angular/forms": "~18.1.0", | |||||
"@angular/localize": "~18.1.0", | |||||
"@angular/platform-browser": "~18.1.0", | |||||
"@angular/platform-browser-dynamic": "~18.1.0", | |||||
"@angular/router": "~18.1.0", | |||||
"bootstrap-icons": "~1.8.0", | |||||
"rxjs": "~7.8.0", | |||||
"tslib": "^2.0.0", | |||||
"zone.js": "~0.14.0" | |||||
}, | |||||
"devDependencies": { | |||||
"@abp/ng.schematics": "~9.0.2", | |||||
"@angular-devkit/build-angular": "~18.1.0", | |||||
"@angular-eslint/builder": "~18.1.0", | |||||
"@angular-eslint/eslint-plugin": "~18.1.0", | |||||
"@angular-eslint/eslint-plugin-template": "~18.1.0", | |||||
"@angular-eslint/schematics": "~18.1.0", | |||||
"@angular-eslint/template-parser": "~18.1.0", | |||||
"@angular/cli": "~18.1.0", | |||||
"@angular/compiler-cli": "~18.1.0", | |||||
"@angular/language-service": "~18.1.0", | |||||
"@types/jasmine": "~3.6.0", | |||||
"@types/node": "^12.11.1", | |||||
"@typescript-eslint/eslint-plugin": "7.16.0", | |||||
"@typescript-eslint/parser": "7.16.0", | |||||
"eslint": "^8.0.0", | |||||
"jasmine-core": "~4.0.0", | |||||
"karma": "~6.3.0", | |||||
"karma-chrome-launcher": "~3.1.0", | |||||
"karma-coverage": "~2.1.0", | |||||
"karma-jasmine": "~4.0.0", | |||||
"karma-jasmine-html-reporter": "^1.7.0", | |||||
"typescript": "~5.5.0" | |||||
} | |||||
} |
@ -0,0 +1,40 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { RouterModule, Routes } from '@angular/router'; | |||||
const routes: Routes = [ | |||||
{ | |||||
path: '', | |||||
pathMatch: 'full', | |||||
loadChildren: () => import('./home/home.module').then(m => m.HomeModule), | |||||
}, | |||||
{ | |||||
path: 'account', | |||||
loadChildren: () => import('@abp/ng.account').then(m => m.AccountModule.forLazy()), | |||||
}, | |||||
{ | |||||
path: 'identity', | |||||
loadChildren: () => import('@abp/ng.identity').then(m => m.IdentityModule.forLazy()), | |||||
}, | |||||
{ | |||||
path: 'tenant-management', | |||||
loadChildren: () => | |||||
import('@abp/ng.tenant-management').then(m => m.TenantManagementModule.forLazy()), | |||||
}, | |||||
{ | |||||
path: 'setting-management', | |||||
loadChildren: () => | |||||
import('@abp/ng.setting-management').then(m => m.SettingManagementModule.forLazy()), | |||||
}, | |||||
{ path: 'appointment/appointment-calendar', | |||||
loadChildren: () => | |||||
import('./appointment/appointment-calendar/appointment-calendar.module').then(m => m.AppointmentCalendarModule) }, | |||||
{ path: 'appointment/view-appointment', loadChildren: () => import('./appointment/view-appointment/view-appointment.module').then(m => m.ViewAppointmentModule) }, | |||||
{ path: 'appointment/book-appointment', loadChildren: () => import('./appointment/book-appointment/book-appointment.module').then(m => m.BookAppointmentModule) }, | |||||
{ path: 'appointment/edit-appointment', loadChildren: () => import('./appointment/edit-appointment/edit-appointment.module').then(m => m.EditAppointmentModule) }, | |||||
]; | |||||
@NgModule({ | |||||
imports: [RouterModule.forRoot(routes, {})], | |||||
exports: [RouterModule], | |||||
}) | |||||
export class AppRoutingModule {} |
@ -0,0 +1,11 @@ | |||||
import { Component } from '@angular/core'; | |||||
@Component({ | |||||
selector: 'app-root', | |||||
template: ` | |||||
<abp-loader-bar></abp-loader-bar> | |||||
<abp-dynamic-layout></abp-dynamic-layout> | |||||
<abp-internet-status></abp-internet-status> | |||||
`, | |||||
}) | |||||
export class AppComponent {} |
@ -0,0 +1,59 @@ | |||||
import { CoreModule, provideAbpCore, withOptions } from '@abp/ng.core'; | |||||
import { registerLocale } from '@abp/ng.core/locale'; | |||||
import { | |||||
InternetConnectionStatusComponent, | |||||
ThemeSharedModule, | |||||
provideAbpThemeShared, | |||||
} from '@abp/ng.theme.shared'; | |||||
import { provideFeatureManagementConfig } from '@abp/ng.feature-management'; | |||||
import { provideAbpOAuth } from '@abp/ng.oauth'; | |||||
import { provideIdentityConfig } from '@abp/ng.identity/config'; | |||||
import { provideSettingManagementConfig } from '@abp/ng.setting-management/config'; | |||||
import { provideTenantManagementConfig } from '@abp/ng.tenant-management/config'; | |||||
import { provideAccountConfig } from '@abp/ng.account/config'; | |||||
import { NgModule } from '@angular/core'; | |||||
import { BrowserModule } from '@angular/platform-browser'; | |||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; | |||||
import { environment } from '../environments/environment'; | |||||
import { AppRoutingModule } from './app-routing.module'; | |||||
import { AppComponent } from './app.component'; | |||||
import { APP_ROUTE_PROVIDER } from './route.provider'; | |||||
import { ThemeLeptonXModule } from '@abp/ng.theme.lepton-x'; | |||||
import { SideMenuLayoutModule } from '@abp/ng.theme.lepton-x/layouts'; | |||||
import { AccountLayoutModule } from '@abp/ng.theme.lepton-x/account'; | |||||
@NgModule({ | |||||
imports: [ | |||||
BrowserModule, | |||||
BrowserAnimationsModule, | |||||
AppRoutingModule, | |||||
CoreModule, | |||||
ThemeSharedModule, | |||||
InternetConnectionStatusComponent, | |||||
ThemeLeptonXModule.forRoot(), | |||||
SideMenuLayoutModule.forRoot(), | |||||
AccountLayoutModule.forRoot(), | |||||
], | |||||
declarations: [AppComponent], | |||||
providers: [ | |||||
APP_ROUTE_PROVIDER, | |||||
provideAbpCore( | |||||
withOptions({ | |||||
environment, | |||||
registerLocaleFn: registerLocale(), | |||||
}) | |||||
), | |||||
provideAbpOAuth(), | |||||
provideAbpThemeShared(), | |||||
provideSettingManagementConfig(), | |||||
provideAccountConfig(), | |||||
provideIdentityConfig(), | |||||
provideTenantManagementConfig(), | |||||
provideFeatureManagementConfig(), | |||||
], | |||||
bootstrap: [AppComponent], | |||||
}) | |||||
export class AppModule {} |
@ -0,0 +1,11 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { RouterModule, Routes } from '@angular/router'; | |||||
import { AppointmentCalendarComponent } from './appointment-calendar.component'; | |||||
const routes: Routes = [{ path: '', component: AppointmentCalendarComponent }]; | |||||
@NgModule({ | |||||
imports: [RouterModule.forChild(routes)], | |||||
exports: [RouterModule] | |||||
}) | |||||
export class AppointmentCalendarRoutingModule { } |
@ -0,0 +1 @@ | |||||
<p>appointment-calendar works!</p> |
@ -0,0 +1,23 @@ | |||||
import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||||
import { AppointmentCalendarComponent } from './appointment-calendar.component'; | |||||
describe('AppointmentCalendarComponent', () => { | |||||
let component: AppointmentCalendarComponent; | |||||
let fixture: ComponentFixture<AppointmentCalendarComponent>; | |||||
beforeEach(async () => { | |||||
await TestBed.configureTestingModule({ | |||||
declarations: [AppointmentCalendarComponent] | |||||
}) | |||||
.compileComponents(); | |||||
fixture = TestBed.createComponent(AppointmentCalendarComponent); | |||||
component = fixture.componentInstance; | |||||
fixture.detectChanges(); | |||||
}); | |||||
it('should create', () => { | |||||
expect(component).toBeTruthy(); | |||||
}); | |||||
}); |
@ -0,0 +1,10 @@ | |||||
import { Component } from '@angular/core'; | |||||
@Component({ | |||||
selector: 'app-appointment-calendar', | |||||
templateUrl: './appointment-calendar.component.html', | |||||
styleUrl: './appointment-calendar.component.scss' | |||||
}) | |||||
export class AppointmentCalendarComponent { | |||||
} |
@ -0,0 +1,17 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
import { AppointmentCalendarRoutingModule } from './appointment-calendar-routing.module'; | |||||
import { AppointmentCalendarComponent } from './appointment-calendar.component'; | |||||
@NgModule({ | |||||
declarations: [ | |||||
AppointmentCalendarComponent | |||||
], | |||||
imports: [ | |||||
CommonModule, | |||||
AppointmentCalendarRoutingModule | |||||
] | |||||
}) | |||||
export class AppointmentCalendarModule { } |
@ -0,0 +1,11 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { RouterModule, Routes } from '@angular/router'; | |||||
import { BookAppointmentComponent } from './book-appointment.component'; | |||||
const routes: Routes = [{ path: '', component: BookAppointmentComponent }]; | |||||
@NgModule({ | |||||
imports: [RouterModule.forChild(routes)], | |||||
exports: [RouterModule] | |||||
}) | |||||
export class BookAppointmentRoutingModule { } |
@ -0,0 +1 @@ | |||||
<p>book-appointment works!</p> |
@ -0,0 +1,23 @@ | |||||
import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||||
import { BookAppointmentComponent } from './book-appointment.component'; | |||||
describe('BookAppointmentComponent', () => { | |||||
let component: BookAppointmentComponent; | |||||
let fixture: ComponentFixture<BookAppointmentComponent>; | |||||
beforeEach(async () => { | |||||
await TestBed.configureTestingModule({ | |||||
declarations: [BookAppointmentComponent] | |||||
}) | |||||
.compileComponents(); | |||||
fixture = TestBed.createComponent(BookAppointmentComponent); | |||||
component = fixture.componentInstance; | |||||
fixture.detectChanges(); | |||||
}); | |||||
it('should create', () => { | |||||
expect(component).toBeTruthy(); | |||||
}); | |||||
}); |
@ -0,0 +1,10 @@ | |||||
import { Component } from '@angular/core'; | |||||
@Component({ | |||||
selector: 'app-book-appointment', | |||||
templateUrl: './book-appointment.component.html', | |||||
styleUrl: './book-appointment.component.scss' | |||||
}) | |||||
export class BookAppointmentComponent { | |||||
} |
@ -0,0 +1,17 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
import { BookAppointmentRoutingModule } from './book-appointment-routing.module'; | |||||
import { BookAppointmentComponent } from './book-appointment.component'; | |||||
@NgModule({ | |||||
declarations: [ | |||||
BookAppointmentComponent | |||||
], | |||||
imports: [ | |||||
CommonModule, | |||||
BookAppointmentRoutingModule | |||||
] | |||||
}) | |||||
export class BookAppointmentModule { } |
@ -0,0 +1,11 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { RouterModule, Routes } from '@angular/router'; | |||||
import { EditAppointmentComponent } from './edit-appointment.component'; | |||||
const routes: Routes = [{ path: '', component: EditAppointmentComponent }]; | |||||
@NgModule({ | |||||
imports: [RouterModule.forChild(routes)], | |||||
exports: [RouterModule] | |||||
}) | |||||
export class EditAppointmentRoutingModule { } |
@ -0,0 +1 @@ | |||||
<p>edit-appointment works!</p> |
@ -0,0 +1,23 @@ | |||||
import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||||
import { EditAppointmentComponent } from './edit-appointment.component'; | |||||
describe('EditAppointmentComponent', () => { | |||||
let component: EditAppointmentComponent; | |||||
let fixture: ComponentFixture<EditAppointmentComponent>; | |||||
beforeEach(async () => { | |||||
await TestBed.configureTestingModule({ | |||||
declarations: [EditAppointmentComponent] | |||||
}) | |||||
.compileComponents(); | |||||
fixture = TestBed.createComponent(EditAppointmentComponent); | |||||
component = fixture.componentInstance; | |||||
fixture.detectChanges(); | |||||
}); | |||||
it('should create', () => { | |||||
expect(component).toBeTruthy(); | |||||
}); | |||||
}); |
@ -0,0 +1,10 @@ | |||||
import { Component } from '@angular/core'; | |||||
@Component({ | |||||
selector: 'app-edit-appointment', | |||||
templateUrl: './edit-appointment.component.html', | |||||
styleUrl: './edit-appointment.component.scss' | |||||
}) | |||||
export class EditAppointmentComponent { | |||||
} |
@ -0,0 +1,17 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
import { EditAppointmentRoutingModule } from './edit-appointment-routing.module'; | |||||
import { EditAppointmentComponent } from './edit-appointment.component'; | |||||
@NgModule({ | |||||
declarations: [ | |||||
EditAppointmentComponent | |||||
], | |||||
imports: [ | |||||
CommonModule, | |||||
EditAppointmentRoutingModule | |||||
] | |||||
}) | |||||
export class EditAppointmentModule { } |
@ -0,0 +1,11 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { RouterModule, Routes } from '@angular/router'; | |||||
import { ViewAppointmentComponent } from './view-appointment.component'; | |||||
const routes: Routes = [{ path: '', component: ViewAppointmentComponent }]; | |||||
@NgModule({ | |||||
imports: [RouterModule.forChild(routes)], | |||||
exports: [RouterModule] | |||||
}) | |||||
export class ViewAppointmentRoutingModule { } |
@ -0,0 +1 @@ | |||||
<p>view-appointment works!</p> |
@ -0,0 +1,23 @@ | |||||
import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||||
import { ViewAppointmentComponent } from './view-appointment.component'; | |||||
describe('ViewAppointmentComponent', () => { | |||||
let component: ViewAppointmentComponent; | |||||
let fixture: ComponentFixture<ViewAppointmentComponent>; | |||||
beforeEach(async () => { | |||||
await TestBed.configureTestingModule({ | |||||
declarations: [ViewAppointmentComponent] | |||||
}) | |||||
.compileComponents(); | |||||
fixture = TestBed.createComponent(ViewAppointmentComponent); | |||||
component = fixture.componentInstance; | |||||
fixture.detectChanges(); | |||||
}); | |||||
it('should create', () => { | |||||
expect(component).toBeTruthy(); | |||||
}); | |||||
}); |
@ -0,0 +1,10 @@ | |||||
import { Component } from '@angular/core'; | |||||
@Component({ | |||||
selector: 'app-view-appointment', | |||||
templateUrl: './view-appointment.component.html', | |||||
styleUrl: './view-appointment.component.scss' | |||||
}) | |||||
export class ViewAppointmentComponent { | |||||
} |
@ -0,0 +1,17 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
import { ViewAppointmentRoutingModule } from './view-appointment-routing.module'; | |||||
import { ViewAppointmentComponent } from './view-appointment.component'; | |||||
@NgModule({ | |||||
declarations: [ | |||||
ViewAppointmentComponent | |||||
], | |||||
imports: [ | |||||
CommonModule, | |||||
ViewAppointmentRoutingModule | |||||
] | |||||
}) | |||||
export class ViewAppointmentModule { } |
@ -0,0 +1,11 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { Routes, RouterModule } from '@angular/router'; | |||||
import { HomeComponent } from './home.component'; | |||||
const routes: Routes = [{ path: '', component: HomeComponent }]; | |||||
@NgModule({ | |||||
imports: [RouterModule.forChild(routes)], | |||||
exports: [RouterModule], | |||||
}) | |||||
export class HomeRoutingModule {} |
@ -0,0 +1,309 @@ | |||||
<div class="row mb-3"> | |||||
<div class="col-xl-6 col-12 d-flex"> | |||||
<div class="card h-lg-100 w-100 overflow-hidden"> | |||||
<div class="card-body"> | |||||
<div class="starting-content"> | |||||
@if(!hasLoggedIn){ | |||||
<h3>Welcome</h3> | |||||
<p class="lead text-muted mb-2"> | |||||
{{ '::LongWelcomeMessage' | abpLocalization }} | |||||
</p> | |||||
<a (click)="login()" class="px-4 btn btn-primary mb-4" role="button" | |||||
><i class="fa fa-sign-in"></i> {{ 'AbpAccount::Login' | abpLocalization }}</a | |||||
> | |||||
} | |||||
<h3>Getting Started</h3> | |||||
<ng-container | |||||
*ngTemplateOutlet=" | |||||
startingContentTemplate; | |||||
context: { | |||||
$implicit: { | |||||
description: | |||||
'Learn how to create and run a new web application using the application startup template.', | |||||
href: 'https://abp.io/docs/latest/get-started', | |||||
label: 'Getting Started' | |||||
} | |||||
} | |||||
" | |||||
></ng-container> | |||||
<h4>Web Application Development Tutorial</h4> | |||||
<ng-container | |||||
*ngTemplateOutlet=" | |||||
startingContentTemplate; | |||||
context: { | |||||
$implicit: { | |||||
description: | |||||
'Learn how to build an ABP based web application named Acme.BookStore.', | |||||
href: 'https://abp.io/docs/latest/tutorials/book-store/part-01?UI=NG&DB=EF', | |||||
label: 'Explore Tutorial' | |||||
} | |||||
} | |||||
" | |||||
></ng-container> | |||||
<h4>Customize Lepton Theme</h4> | |||||
<p class="text-muted mb-2">Learn how to customize LeptonX Theme as you wish.</p> | |||||
<a | |||||
href="https://abp.io/docs/latest/framework/ui/angular/theming" | |||||
class="btn btn-primary soft mb-5 mb-xl-0" | |||||
target="_blank" | |||||
>Customize Lepton</a | |||||
> | |||||
</div> | |||||
<img class="card-bg-image" src="assets/images/getting-started/bg-01.png" /> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="col-xl-3 col-md-6 d-flex"> | |||||
<div class="row"> | |||||
<ng-container | |||||
*ngTemplateOutlet=" | |||||
visitLinkTemplate; | |||||
context: { | |||||
$implicit: { | |||||
label: 'Visit Support', | |||||
description: | |||||
'You can check for similar problems and solutions, or open a new topic to discuss your specific issue.', | |||||
href: 'https://abp.io/support/questions', | |||||
card: 'card overflow-hidden', | |||||
imgClass: '', | |||||
imgSrc: 'assets/images/getting-started/img-support.png', | |||||
logo: 'abp-support abp-logo mb-2' | |||||
} | |||||
} | |||||
" | |||||
></ng-container> | |||||
<ng-container | |||||
*ngTemplateOutlet=" | |||||
visitLinkTemplate; | |||||
context: { | |||||
$implicit: { | |||||
label: 'Visit Blog', | |||||
description: | |||||
'You can find content on .NET development, cross-platform, ASP.NET application templates, ABP-related news, and more.', | |||||
href: 'https://abp.io/blog', | |||||
card: 'card h-md-100 overflow-hidden', | |||||
imgClass: 'margin-bottom: -24px', | |||||
imgSrc: 'assets/images/getting-started/img-blog.png', | |||||
logo: 'abp-blog abp-logo mb-2' | |||||
} | |||||
} | |||||
" | |||||
></ng-container> | |||||
</div> | |||||
</div> | |||||
<div class="col-xl-3 col-md-6 d-flex"> | |||||
<div class="card h-100 overflow-hidden"> | |||||
<div class="card-body"> | |||||
<div class="abp-community abp-logo mb-2"></div> | |||||
<p class="lead text-muted"> | |||||
A unique community platform for | |||||
<span class="fw-bold">ABP Lovers!</span> | |||||
</p> | |||||
<p class="text-muted mb-2"> | |||||
Explore all ABP users' experiences with the ABP Framework, discover articles and videos on | |||||
how to use ABP, and join raffles for a chance to win surprise gifts! | |||||
</p> | |||||
<a class="btn btn-brand soft mb-3" href="https://abp.io/community/" target="_blank" | |||||
>Join ABP Community</a | |||||
> | |||||
</div> | |||||
<img class="mt-3" src="assets/images/getting-started/img-community.png" /> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="row"> | |||||
<ng-container | |||||
*ngTemplateOutlet=" | |||||
tableTemplate; | |||||
context: { | |||||
$implicit: { | |||||
title: 'More from ABP.IO', | |||||
items: [ | |||||
{ | |||||
iconType: 'icon', | |||||
style: true, | |||||
icon: 'bi bi-check fs-4', | |||||
iconClass: 'rounded-circle me-2 flex-center bg-brand soft', | |||||
title: 'Latest Release Logs', | |||||
link: 'https://github.com/abpframework/abp/releases', | |||||
}, | |||||
{ | |||||
iconType: 'icon', | |||||
style: true, | |||||
icon: 'bi bi-check fs-4', | |||||
iconClass: 'rounded-circle me-2 flex-center bg-brand soft', | |||||
title: 'Video Courses', | |||||
link: 'https://abp.io/video-courses/essentials', | |||||
}, | |||||
{ | |||||
iconType: 'icon', | |||||
style: true, | |||||
icon: 'bi bi-check fs-4', | |||||
iconClass: 'rounded-circle me-2 flex-center bg-brand soft', | |||||
title: 'Samples', | |||||
link: 'https://abp.io/docs/latest/Samples/Index', | |||||
}, | |||||
{ | |||||
iconType: 'icon', | |||||
style: true, | |||||
icon: 'bi bi-check fs-4', | |||||
iconClass: 'rounded-circle me-2 flex-center bg-brand soft', | |||||
title: 'Books', | |||||
link: 'https://abp.io/books', | |||||
}, | |||||
{ | |||||
iconType: 'icon', | |||||
style: true, | |||||
icon: 'bi bi-check fs-4', | |||||
iconClass: 'rounded-circle me-2 flex-center bg-brand soft', | |||||
title: 'FAQ', | |||||
link: 'https://abp.io/faq', | |||||
}, | |||||
] | |||||
} | |||||
} | |||||
" | |||||
></ng-container> | |||||
<div class="col-xl-6 col-lg-8 d-flex"> | |||||
<div class="card"> | |||||
<div class="card-body d-flex"> | |||||
<div class="row align-items-center"> | |||||
<div class="col-md-8"> | |||||
<p class="text-muted mb-0">THE OFFICIAL GUIDE</p> | |||||
<h3>Mastering ABP Framework</h3> | |||||
<p class="text-muted"> | |||||
Written by the creator of the ABP Framework, this book will help you gain a complete | |||||
understanding of the framework and modern web application development techniques. | |||||
</p> | |||||
<div class="d-md-flex mb-2 mb-md-0"> | |||||
<a | |||||
href="https://www.amazon.com/gp/product/B097Z2DM8Q" | |||||
target="_blank" | |||||
class="btn btn-primary soft me-md-2 mb-2 mb-md-0" | |||||
> | |||||
Buy on Amazon US | |||||
</a> | |||||
<a | |||||
href="https://www.packtpub.com/product/mastering-abp-framework/9781801079242" | |||||
target="_blank" | |||||
class="btn btn-primary soft mb-2 mb-md-0" | |||||
> | |||||
Buy on PACKT | |||||
</a> | |||||
</div> | |||||
</div> | |||||
<div class="col"> | |||||
<img src="assets/images/getting-started/book.png" /> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<ng-container | |||||
*ngTemplateOutlet=" | |||||
tableTemplate; | |||||
context: { | |||||
$implicit: { | |||||
title: 'Follow us on Social Media', | |||||
items: [ | |||||
{ | |||||
title: 'X.com', | |||||
icon: 'logo-x me-2', | |||||
link: 'https://twitter.com/abpframework' | |||||
}, | |||||
{ | |||||
iconType: 'image', | |||||
icon: 'assets/images/getting-started/discord.svg', | |||||
title: 'Discord', | |||||
link: 'https://abp.io/community/discord' | |||||
}, | |||||
{ | |||||
iconType: 'image', | |||||
icon: 'assets/images/getting-started/stack-overflow.svg', | |||||
title: 'Stack Overflow', | |||||
link: 'https://stackoverflow.com/questions/tagged/abp' | |||||
}, | |||||
{ | |||||
iconType: 'image', | |||||
icon: 'assets/images/getting-started/youtube.svg', | |||||
title: 'YouTube', | |||||
link: 'https://www.youtube.com/@Volosoft' | |||||
}, | |||||
{ | |||||
iconType: 'image', | |||||
icon: 'assets/images/getting-started/instagram.svg', | |||||
title: 'Instagram', | |||||
link: 'https://www.instagram.com/abpframework/' | |||||
} | |||||
] | |||||
} | |||||
} | |||||
" | |||||
></ng-container> | |||||
</div> | |||||
<ng-template #startingContentTemplate let-context> | |||||
<p class="lead text-muted mb-2" [innerHTML]="context.description"></p> | |||||
<a [href]="context.href" class="btn btn-brand mb-4" target="_blank">{{ context.label }}</a> | |||||
</ng-template> | |||||
<ng-template #visitLinkTemplate let-context> | |||||
<div class="col-12 d-flex"> | |||||
<div [class]="context.card"> | |||||
<div class="card-body pb-0"> | |||||
<div [class]="context.logo"></div> | |||||
<p class="text-muted mb-2" [innerHTML]="context.description"></p> | |||||
<a [href]="context.href" class="btn btn-brand soft" target="_blank">{{ context.label }}</a> | |||||
<img [class]="context.imgClass" [src]="context.imgSrc" /> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</ng-template> | |||||
<ng-template #tableTemplate let-context> | |||||
<div class="col-xl-3 col-lg-4"> | |||||
<div class="card"> | |||||
<div class="card-header"> | |||||
<div class="card-title text-body">{{ context.title }}</div> | |||||
</div> | |||||
<div class="card-body pt-0"> | |||||
<div class="table-responsive"> | |||||
<table class="table mb-0"> | |||||
<tbody> | |||||
@for(item of context.items; track $index; let last = $last){ | |||||
<tr> | |||||
<td class="ps-0 d-flex" [class.border-bottom-0]="last"> | |||||
@if(item.icon){ | |||||
<div | |||||
[ngClass]="item.iconClass" | |||||
[style]="item.style ? 'width: 20px; height: 20px' : ''" | |||||
> | |||||
@if(item.iconType === 'image'){ | |||||
<img [src]="item.icon" class="me-2" /> | |||||
}@else if(item.iconType === 'icon'){ | |||||
<i [class]="item.icon"></i> | |||||
}@else{ | |||||
<div [class]="item.icon"></div> | |||||
} | |||||
</div> | |||||
} | |||||
<div>{{ item.title }}</div> | |||||
</td> | |||||
<td class="text-end pe-0 opacity-25" [class.border-bottom-0]="last"> | |||||
<a [href]="item.link" target="_blank"> | |||||
<i class="bi bi-box-arrow-up-right text-dark"></i> | |||||
</a> | |||||
</td> | |||||
</tr> | |||||
} | |||||
</tbody> | |||||
</table> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</ng-template> |
@ -0,0 +1,25 @@ | |||||
/* Styles for the home component */ | |||||
.card-bg-image { | |||||
position: absolute; | |||||
width: 630px; | |||||
height: auto; | |||||
bottom: 0; | |||||
right: 0; | |||||
z-index: 1; | |||||
} | |||||
.starting-content { | |||||
position: relative; | |||||
z-index: 2; | |||||
} | |||||
@media (min-width: 1199px) { | |||||
.h-lg-100 { | |||||
height: 100% !important; | |||||
} | |||||
} | |||||
@media (min-width: 768px) { | |||||
.h-md-100 { | |||||
height: 100% !important; | |||||
} | |||||
} |
@ -0,0 +1,99 @@ | |||||
import { CoreTestingModule } from "@abp/ng.core/testing"; | |||||
import { ThemeSharedTestingModule } from "@abp/ng.theme.shared/testing"; | |||||
import { ComponentFixture, TestBed, waitForAsync } from "@angular/core/testing"; | |||||
import { NgxValidateCoreModule } from "@ngx-validate/core"; | |||||
import { HomeComponent } from "./home.component"; | |||||
import { OAuthService } from 'angular-oauth2-oidc'; | |||||
import { AuthService } from '@abp/ng.core'; | |||||
describe("HomeComponent", () => { | |||||
let fixture: ComponentFixture<HomeComponent>; | |||||
const mockOAuthService = jasmine.createSpyObj('OAuthService', ['hasValidAccessToken']) | |||||
const mockAuthService = jasmine.createSpyObj('AuthService', ['navigateToLogin']) | |||||
beforeEach( | |||||
waitForAsync(() => { | |||||
TestBed.configureTestingModule({ | |||||
declarations: [HomeComponent], | |||||
imports: [ | |||||
CoreTestingModule.withConfig(), | |||||
ThemeSharedTestingModule.withConfig(), | |||||
NgxValidateCoreModule, | |||||
], | |||||
providers: [ | |||||
/* mock providers here */ | |||||
{ | |||||
provide: OAuthService, | |||||
useValue: mockOAuthService | |||||
}, | |||||
{ | |||||
provide: AuthService, | |||||
useValue: mockAuthService | |||||
} | |||||
], | |||||
}).compileComponents(); | |||||
}) | |||||
); | |||||
beforeEach(() => { | |||||
fixture = TestBed.createComponent(HomeComponent); | |||||
fixture.detectChanges(); | |||||
}); | |||||
it("should be initiated", () => { | |||||
expect(fixture.componentInstance).toBeTruthy(); | |||||
}); | |||||
describe('when login state is true', () => { | |||||
beforeAll(() => { | |||||
mockOAuthService.hasValidAccessToken.and.returnValue(true) | |||||
}); | |||||
it("hasLoggedIn should be true", () => { | |||||
expect(fixture.componentInstance.hasLoggedIn).toBeTrue(); | |||||
expect(mockOAuthService.hasValidAccessToken).toHaveBeenCalled() | |||||
}) | |||||
it("button should not be exists", () => { | |||||
const element = fixture.nativeElement | |||||
const button = element.querySelector('[role="button"]') | |||||
expect(button).toBeNull() | |||||
}) | |||||
}) | |||||
describe('when login state is false', () => { | |||||
beforeAll(() => { | |||||
mockOAuthService.hasValidAccessToken.and.returnValue(false) | |||||
}); | |||||
it("hasLoggedIn should be false", () => { | |||||
expect(fixture.componentInstance.hasLoggedIn).toBeFalse(); | |||||
expect(mockOAuthService.hasValidAccessToken).toHaveBeenCalled() | |||||
}) | |||||
it("button should be exists", () => { | |||||
const element = fixture.nativeElement | |||||
const button = element.querySelector('[role="button"]') | |||||
expect(button).toBeDefined() | |||||
}) | |||||
describe('when button clicked', () => { | |||||
beforeEach(() => { | |||||
const element = fixture.nativeElement | |||||
const button = element.querySelector('[role="button"]') | |||||
button.click() | |||||
}); | |||||
it("navigateToLogin have been called", () => { | |||||
expect(mockAuthService.navigateToLogin).toHaveBeenCalled() | |||||
}) | |||||
}) | |||||
}) | |||||
}); |
@ -0,0 +1,19 @@ | |||||
import { AuthService } from '@abp/ng.core'; | |||||
import { Component } from '@angular/core'; | |||||
@Component({ | |||||
selector: 'app-home', | |||||
templateUrl: './home.component.html', | |||||
styleUrls: ['./home.component.scss'], | |||||
}) | |||||
export class HomeComponent { | |||||
get hasLoggedIn(): boolean { | |||||
return this.authService.isAuthenticated; | |||||
} | |||||
constructor(private authService: AuthService) {} | |||||
login() { | |||||
this.authService.navigateToLogin(); | |||||
} | |||||
} |
@ -0,0 +1,10 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { SharedModule } from '../shared/shared.module'; | |||||
import { HomeRoutingModule } from './home-routing.module'; | |||||
import { HomeComponent } from './home.component'; | |||||
@NgModule({ | |||||
declarations: [HomeComponent], | |||||
imports: [SharedModule, HomeRoutingModule], | |||||
}) | |||||
export class HomeModule {} |
@ -0,0 +1,55 @@ | |||||
import { RoutesService, eLayoutType } from '@abp/ng.core'; | |||||
import { APP_INITIALIZER } from '@angular/core'; | |||||
export const APP_ROUTE_PROVIDER = [ | |||||
{ provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true }, | |||||
]; | |||||
function configureRoutes(routesService: RoutesService) { | |||||
return () => { | |||||
routesService.add([ | |||||
{ | |||||
path: '/', | |||||
name: '::Menu:Home', | |||||
iconClass: 'fas fa-home', | |||||
order: 1, | |||||
layout: eLayoutType.application, | |||||
}, | |||||
{ | |||||
path: '/appointment', | |||||
name: 'Appointments', | |||||
order: 101, | |||||
iconClass: 'fas fa-notes-medical', | |||||
layout: eLayoutType.application, | |||||
}, | |||||
{ | |||||
path: '/appointment/appointment-calendar', | |||||
name: ' Appointment Calendar', | |||||
parentName: 'Appointments', | |||||
iconClass: 'fas fa-clock', | |||||
order: 102, | |||||
}, | |||||
{ | |||||
path: '/appointment/view-appointment', | |||||
name: 'View Appointment', | |||||
parentName: 'Appointments', | |||||
iconClass: 'fas fa-clock', | |||||
order: 103, | |||||
}, | |||||
{ | |||||
path: '/appointment/book-appointment', | |||||
name: 'Book Appointment', | |||||
parentName: 'Appointments', | |||||
iconClass: 'fas fa-clock', | |||||
order: 104, | |||||
}, | |||||
{ | |||||
path: '/appointment/edit-appointment', | |||||
name: 'Edit Appointment', | |||||
parentName: 'Appointments', | |||||
iconClass: 'fas fa-clock', | |||||
order: 105, | |||||
} | |||||
]); | |||||
}; | |||||
} |
@ -0,0 +1,23 @@ | |||||
import { CoreModule } from '@abp/ng.core'; | |||||
import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; | |||||
import { NgModule } from '@angular/core'; | |||||
import { ThemeSharedModule } from '@abp/ng.theme.shared'; | |||||
import { NgxValidateCoreModule } from '@ngx-validate/core'; | |||||
@NgModule({ | |||||
declarations: [], | |||||
imports: [ | |||||
CoreModule, | |||||
ThemeSharedModule, | |||||
NgbDropdownModule, | |||||
NgxValidateCoreModule | |||||
], | |||||
exports: [ | |||||
CoreModule, | |||||
ThemeSharedModule, | |||||
NgbDropdownModule, | |||||
NgxValidateCoreModule | |||||
], | |||||
providers: [] | |||||
}) | |||||
export class SharedModule {} |
@ -0,0 +1,11 @@ | |||||
<svg width="142" height="31" viewBox="0 0 142 31" fill="none" xmlns="http://www.w3.org/2000/svg"> | |||||
<path d="M43.9096 7.22516C42.6023 7.21365 41.3121 7.52296 40.1522 8.12599C38.9922 8.72901 37.9978 9.60735 37.2562 10.684C36.5146 11.7607 36.0484 13.0028 35.8985 14.3016C35.7485 15.6003 35.9194 16.916 36.3961 18.1333C36.8729 19.3506 37.6409 20.4325 38.6329 21.284C39.625 22.1355 40.8107 22.7307 42.0863 23.0174C43.3618 23.3041 44.6882 23.2735 45.9492 22.9284C47.2101 22.5834 48.3672 21.9342 49.319 21.038V22.4858H51.8252V15.5979C51.8316 15.4498 51.8355 15.3004 51.8342 15.1498C51.8093 13.0557 50.9664 11.0545 49.4856 9.57371C48.0049 8.09291 46.0036 7.25002 43.9096 7.22516ZM43.9441 20.7252C42.8461 20.7459 41.7669 20.4378 40.8453 19.8406C39.9237 19.2434 39.2016 18.3843 38.7718 17.3736C38.3421 16.363 38.2243 15.2469 38.4336 14.1689C38.6429 13.0908 39.1696 12.0998 39.9463 11.3234C40.7229 10.5469 41.714 10.0203 42.7921 9.81131C43.8703 9.60229 44.9863 9.72036 45.9968 10.1503C47.0074 10.5803 47.8663 11.3026 48.4633 12.2244C49.0603 13.1462 49.3681 14.2254 49.3471 15.3234C49.3471 15.3783 49.3471 15.4319 49.3395 15.4855H49.3203V15.7549C49.1843 17.0967 48.5626 18.3424 47.5722 19.2578C46.5818 20.1732 45.2911 20.695 43.9428 20.7252H43.9441Z" fill="#292D33"/> | |||||
<path d="M61.3695 7.22511C59.2994 7.20411 57.3025 7.98989 55.8018 9.41596V2.44507H53.2969V15.4855H53.3109C53.3633 17.0512 53.8746 18.5671 54.7813 19.8447C55.688 21.1223 56.9501 22.1053 58.4108 22.6715C59.8715 23.2377 61.4665 23.3623 62.9973 23.0296C64.5282 22.6969 65.9276 21.9217 67.0216 20.8003C68.1156 19.679 68.856 18.2608 69.1507 16.7222C69.4455 15.1835 69.2815 13.5921 68.6794 12.1459C68.0772 10.6996 67.0633 9.46212 65.7637 8.58727C64.4641 7.71242 62.9361 7.23874 61.3695 7.22511ZM61.4002 20.7251C59.9688 20.7524 58.583 20.2212 57.5367 19.244C56.4904 18.2668 55.8658 16.9205 55.7954 15.4906V14.9301C55.8518 13.8594 56.2196 12.8284 56.8536 11.9636C57.4876 11.0989 58.3603 10.4382 59.3645 10.0624C60.3687 9.68662 61.4608 9.61223 62.5068 9.84833C63.5527 10.0844 64.5069 10.6208 65.2523 11.3915C65.9978 12.1622 66.5019 13.1338 66.703 14.187C66.9041 15.2403 66.7933 16.3293 66.3842 17.3204C65.9752 18.3116 65.2856 19.1617 64.4003 19.7665C63.5149 20.3714 62.4722 20.7045 61.4002 20.7251Z" fill="#292D33"/> | |||||
<path d="M78.8304 7.22513C77.769 7.21577 76.7164 7.41791 75.734 7.81977C74.7516 8.22163 73.859 8.81516 73.1085 9.5657C72.358 10.3162 71.7644 11.2088 71.3626 12.1912C70.9607 13.1736 70.7586 14.2262 70.7679 15.2876C70.7679 15.354 70.7679 15.4153 70.7679 15.4855H70.7539V28.5272H73.2588V21.0073C74.2037 21.9028 75.3531 22.5538 76.607 22.9038C77.8608 23.2537 79.1812 23.292 80.4533 23.0152C81.7253 22.7384 82.9105 22.155 83.9056 21.3158C84.9008 20.4765 85.6757 19.4068 86.1632 18.1997C86.6506 16.9926 86.8357 15.6846 86.7023 14.3897C86.569 13.0947 86.1212 11.852 85.398 10.7695C84.6748 9.68709 83.6981 8.79777 82.5528 8.17892C81.4075 7.56008 80.1283 7.23046 78.8266 7.21875L78.8304 7.22513ZM78.8661 20.7252C77.4379 20.7523 76.055 20.2233 75.0095 19.25C73.9639 18.2766 73.3376 16.935 73.2626 15.5085V15.4855C73.2626 15.3578 73.2537 15.2391 73.2626 15.114C73.2844 14.034 73.6232 12.9843 74.2369 12.0954C74.8506 11.2066 75.7121 10.5178 76.7143 10.1147C77.7164 9.71171 78.815 9.61227 79.8732 9.82878C80.9315 10.0453 81.9027 10.5682 82.666 11.3324C83.4294 12.0966 83.9512 13.0685 84.1665 14.1269C84.3818 15.1854 84.2811 16.2839 83.8769 17.2856C83.4728 18.2873 82.783 19.148 81.8934 19.7607C81.0039 20.3734 79.9538 20.7111 78.8738 20.7316L78.8661 20.7252Z" fill="#292D33"/> | |||||
<path d="M14.8878 17.9316C16.2513 17.9316 17.3566 16.8263 17.3566 15.4628C17.3566 14.0992 16.2513 12.9939 14.8878 12.9939C13.5243 12.9939 12.4189 14.0992 12.4189 15.4628C12.4189 16.8263 13.5243 17.9316 14.8878 17.9316Z" fill="#B84297"/> | |||||
<path d="M14.8864 0.724128C12.6317 0.722011 10.4061 1.23386 8.37891 2.22079V5.41698C10.1851 4.26396 12.2651 3.61132 14.4063 3.5258C16.5475 3.44027 18.673 3.92493 20.5654 4.93021C22.4578 5.9355 24.0493 7.42533 25.177 9.24736C26.3048 11.0694 26.9284 13.1582 26.984 15.3003V24.2905C28.5803 22.0657 29.5321 19.4439 29.7347 16.7132C29.9373 13.9826 29.3829 11.2489 28.1324 8.81299C26.882 6.37703 24.9839 4.33311 22.6469 2.90601C20.31 1.47892 17.6247 0.72395 14.8864 0.724128Z" fill="#292D33"/> | |||||
<path d="M14.8836 27.7225C11.7736 27.7224 8.78301 26.5249 6.53233 24.3785C4.28164 22.2321 2.94366 19.3015 2.796 16.1948H2.78196V6.93359C0.605622 9.97529 -0.347009 13.7244 0.113303 17.4361C0.573615 21.1478 2.41319 24.5506 5.26659 26.9685C8.12 29.3863 11.7785 30.6424 15.5152 30.4871C19.252 30.3318 22.7936 28.7765 25.4366 26.1302V21.5462C24.3844 23.4201 22.8523 24.9799 20.9976 26.0654C19.1429 27.1509 17.0326 27.7229 14.8836 27.7225Z" fill="#292D33"/> | |||||
<path d="M14.8928 19.4525C13.9934 19.4534 13.1197 19.1512 12.4118 18.5945V21.4504C13.7024 21.983 15.1294 22.0854 16.4823 21.7423C17.8353 21.3992 19.0425 20.6289 19.926 19.5449C20.8095 18.4609 21.3223 17.1207 21.389 15.722C21.4557 14.3233 21.0726 12.9401 20.2962 11.7765C19.5199 10.6128 18.3914 9.73041 17.0773 9.25933C15.7631 8.78825 14.3329 8.75347 12.9975 9.16013C11.6622 9.56679 10.4924 10.3933 9.66084 11.5179C8.82924 12.6424 8.37983 14.0053 8.37891 15.4057V23.8029C9.13569 24.4008 9.97042 24.892 10.8599 25.2629V15.4018C10.8599 14.6014 11.0964 13.819 11.5396 13.1535C11.9827 12.488 12.6125 11.9693 13.3495 11.663C14.0864 11.3567 14.8973 11.2766 15.6796 11.4327C16.4619 11.5889 17.1804 11.9743 17.7445 12.5403C18.3085 13.1062 18.6926 13.8273 18.8482 14.6123C19.0038 15.3973 18.9239 16.211 18.6187 16.9505C18.3134 17.69 17.7965 18.322 17.1333 18.7667C16.4701 19.2114 15.6904 19.4487 14.8928 19.4487V19.4525Z" fill="#292D33"/> | |||||
<path d="M6.82417 22.2621V15.4741C6.82496 13.7743 7.36418 12.1184 8.3646 10.7434C9.36503 9.36849 10.7754 8.34504 12.3936 7.81966C14.0119 7.29429 15.755 7.29393 17.3735 7.81864C18.992 8.34335 20.4027 9.36622 21.4037 10.7408C22.4047 12.1153 22.9446 13.771 22.9461 15.4708C22.9476 17.1706 22.4106 18.8272 21.412 20.2035C20.4134 21.5798 19.0045 22.6051 17.3869 23.1327C15.7694 23.6602 14.0262 23.6629 12.407 23.1403V25.7153C14.2328 26.1569 16.1436 26.1034 17.9417 25.5602C19.7399 25.017 21.3602 24.0039 22.6351 22.6257C23.91 21.2474 24.7933 19.554 25.1936 17.7205C25.5938 15.887 25.4966 13.9799 24.912 12.1965C24.3273 10.4132 23.2764 8.81812 21.8679 7.57636C20.4594 6.3346 18.7445 5.49117 16.9004 5.13328C15.0563 4.77539 13.15 4.91603 11.3785 5.54065C9.60706 6.16527 8.03476 7.2512 6.82417 8.68618V5.24441V3.11816C5.92616 3.6958 5.09279 4.36803 4.33838 5.12331V15.7902C4.40878 18.1666 5.28528 20.4486 6.82417 22.2621Z" fill="#292D33"/> | |||||
<path d="M98.059 22.5V7.09588H102.919C104.336 7.09588 105.457 7.47917 106.282 8.24576C107.106 9.01235 107.518 9.94528 107.518 11.0445C107.518 12.5488 106.933 13.6408 105.761 14.3206C107.612 14.9426 108.538 16.172 108.538 18.0089C108.538 19.3252 108.054 20.4027 107.085 21.2416C106.13 22.0805 104.857 22.5 103.266 22.5H98.059ZM99.7079 21.003H103.44C104.568 21.003 105.428 20.7426 106.021 20.2219C106.614 19.7012 106.911 19.007 106.911 18.1391C106.911 17.2713 106.614 16.577 106.021 16.0563C105.443 15.5211 104.59 15.2536 103.461 15.2536H99.7079V21.003ZM99.7079 13.8216H103.027C103.924 13.8216 104.626 13.583 105.132 13.1057C105.638 12.6139 105.891 11.9847 105.891 11.2181C105.891 10.4949 105.631 9.88019 105.11 9.37395C104.604 8.85325 103.91 8.5929 103.027 8.5929H99.7079V13.8216ZM111.401 22.5V6.22804H112.919V22.5H111.401ZM125.464 21.0898C124.393 22.1746 123.041 22.717 121.406 22.717C119.772 22.717 118.42 22.1746 117.349 21.0898C116.279 19.9905 115.744 18.6526 115.744 17.076C115.744 15.4994 116.279 14.1688 117.349 13.084C118.42 11.9847 119.772 11.4351 121.406 11.4351C123.041 11.4351 124.393 11.9847 125.464 13.084C126.534 14.1688 127.069 15.4994 127.069 17.076C127.069 18.6526 126.534 19.9905 125.464 21.0898ZM118.434 20.0917C119.201 20.9017 120.191 21.3067 121.406 21.3067C122.621 21.3067 123.605 20.9017 124.357 20.0917C125.124 19.2673 125.507 18.2621 125.507 17.076C125.507 15.89 125.124 14.892 124.357 14.082C123.605 13.2575 122.621 12.8453 121.406 12.8453C120.191 12.8453 119.201 13.2575 118.434 14.082C117.682 14.892 117.306 15.89 117.306 17.076C117.306 18.2621 117.682 19.2673 118.434 20.0917ZM131.655 19.9182C132.392 20.6992 133.347 21.0898 134.518 21.0898C135.69 21.0898 136.637 20.6992 137.361 19.9182C138.098 19.1371 138.467 18.1536 138.467 16.9675C138.467 15.7815 138.098 14.7979 137.361 14.0169C136.637 13.2358 135.69 12.8453 134.518 12.8453C133.347 12.8453 132.392 13.2358 131.655 14.0169C130.931 14.7979 130.57 15.7815 130.57 16.9675C130.57 18.1536 130.931 19.1371 131.655 19.9182ZM134.497 27.2514C133.325 27.2514 132.291 27.0272 131.394 26.5788C130.497 26.1305 129.825 25.5664 129.376 24.8866L130.57 23.8668C131.51 25.1831 132.819 25.8412 134.497 25.8412C135.538 25.8412 136.435 25.5085 137.187 24.8432C137.954 24.1778 138.337 23.1798 138.337 21.8491V20.4606C137.932 21.0681 137.375 21.5598 136.666 21.9359C135.958 22.312 135.191 22.5 134.367 22.5C132.833 22.5 131.553 21.9721 130.526 20.9162C129.514 19.8459 129.008 18.5296 129.008 16.9675C129.008 15.4054 129.514 14.0964 130.526 13.0406C131.553 11.9702 132.833 11.4351 134.367 11.4351C135.191 11.4351 135.958 11.6231 136.666 11.9992C137.375 12.3752 137.932 12.867 138.337 13.4745V11.652H139.856V21.9359C139.856 23.6427 139.357 24.9516 138.359 25.8629C137.361 26.7886 136.073 27.2514 134.497 27.2514Z" fill="#292D33"/> | |||||
</svg> |
@ -0,0 +1,11 @@ | |||||
<svg width="177" height="30" viewBox="0 0 177 30" fill="none" xmlns="http://www.w3.org/2000/svg"> | |||||
<path d="M43.4745 6.95514C42.1801 6.94374 40.9026 7.24999 39.7541 7.84706C38.6056 8.44412 37.6211 9.31377 36.8868 10.3798C36.1525 11.4458 35.6909 12.6757 35.5425 13.9616C35.394 15.2475 35.5632 16.5501 36.0352 17.7554C36.5072 18.9607 37.2677 20.0319 38.2499 20.8749C39.2322 21.718 40.4062 22.3073 41.6691 22.5912C42.932 22.8751 44.2453 22.8448 45.4938 22.5032C46.7424 22.1615 47.888 21.5188 48.8304 20.6314V22.0649H51.3119V15.2451C51.3182 15.0984 51.322 14.9505 51.3207 14.8014C51.2961 12.7281 50.4615 10.7466 48.9954 9.28046C47.5292 7.81431 45.5478 6.97975 43.4745 6.95514ZM43.5086 20.3217C42.4214 20.3422 41.353 20.0372 40.4404 19.4459C39.5279 18.8545 38.813 18.0039 38.3875 17.0033C37.962 16.0026 37.8453 14.8976 38.0525 13.8302C38.2597 12.7627 38.7813 11.7816 39.5503 11.0128C40.3193 10.244 41.3005 9.72268 42.368 9.51572C43.4355 9.30877 44.5405 9.42566 45.541 9.85139C46.5416 10.2771 47.392 10.9923 47.9831 11.9049C48.5742 12.8176 48.879 13.8861 48.8582 14.9733C48.8582 15.0277 48.8582 15.0808 48.8507 15.1338H48.8317V15.4006C48.697 16.729 48.0814 17.9625 47.1008 18.8688C46.1203 19.7751 44.8423 20.2918 43.5073 20.3217H43.5086Z" fill="#292D33"/> | |||||
<path d="M60.7624 6.95494C58.7128 6.93416 56.7356 7.71217 55.2497 9.12413V2.22217H52.7695V15.1336H52.7834C52.8353 16.6839 53.3415 18.1848 54.2393 19.4498C55.137 20.7147 56.3867 21.688 57.8329 22.2486C59.2792 22.8093 60.8584 22.9325 62.3741 22.6032C63.8899 22.2738 65.2755 21.5063 66.3587 20.396C67.4419 19.2857 68.1749 17.8815 68.4667 16.3581C68.7585 14.8346 68.5962 13.259 68 11.827C67.4038 10.3951 66.3999 9.16984 65.1132 8.30364C63.8264 7.43744 62.3135 6.96845 60.7624 6.95494ZM60.7928 20.3215C59.3755 20.3485 58.0034 19.8225 56.9675 18.855C55.9315 17.8875 55.3131 16.5545 55.2434 15.1387V14.5838C55.2992 13.5236 55.6633 12.5028 56.2911 11.6466C56.9188 10.7905 57.7829 10.1362 58.7772 9.76417C59.7715 9.39212 60.8528 9.31846 61.8884 9.55223C62.924 9.786 63.8688 10.317 64.6068 11.0801C65.3449 11.8433 65.8441 12.8052 66.0432 13.848C66.2423 14.8909 66.1326 15.9691 65.7276 16.9504C65.3225 17.9318 64.6398 18.7735 63.7632 19.3724C62.8866 19.9712 61.8542 20.3011 60.7928 20.3215Z" fill="#292D33"/> | |||||
<path d="M78.0518 6.95505C77.001 6.94578 75.9587 7.14592 74.986 7.54381C74.0133 7.9417 73.1296 8.52935 72.3865 9.27248C71.6434 10.0156 71.0557 10.8993 70.6578 11.872C70.2599 12.8447 70.0598 13.8869 70.0691 14.9378C70.0691 15.0036 70.0691 15.0642 70.0691 15.1338H70.0552V28.0465H72.5353V20.601C73.4709 21.4876 74.6089 22.1322 75.8504 22.4787C77.0919 22.8251 78.3992 22.863 79.6587 22.589C80.9182 22.315 82.0916 21.7373 83.0769 20.9064C84.0622 20.0754 84.8296 19.0163 85.3122 17.8211C85.7948 16.6259 85.978 15.3309 85.846 14.0488C85.714 12.7666 85.2706 11.5361 84.5546 10.4644C83.8385 9.39267 82.8714 8.51213 81.7374 7.89941C80.6035 7.28668 79.3369 6.96032 78.0481 6.94873L78.0518 6.95505ZM78.0872 20.3216C76.6731 20.3485 75.3039 19.8247 74.2687 18.861C73.2335 17.8973 72.6133 16.5689 72.5391 15.1565V15.1338C72.5391 15.0073 72.5303 14.8898 72.5391 14.7659C72.5606 13.6966 72.8961 12.6573 73.5037 11.7772C74.1114 10.8971 74.9644 10.2151 75.9567 9.81608C76.9489 9.41705 78.0366 9.31859 79.0844 9.53295C80.1322 9.74732 81.0938 10.265 81.8496 11.0217C82.6054 11.7784 83.122 12.7406 83.3352 13.7886C83.5484 14.8366 83.4487 15.9242 83.0485 16.916C82.6484 17.9078 81.9654 18.7601 81.0846 19.3667C80.2038 19.9734 79.1641 20.3076 78.0948 20.3279L78.0872 20.3216Z" fill="#292D33"/> | |||||
<path d="M14.7408 17.5556C16.0909 17.5556 17.1853 16.4612 17.1853 15.1112C17.1853 13.7612 16.0909 12.6667 14.7408 12.6667C13.3908 12.6667 12.2964 13.7612 12.2964 15.1112C12.2964 16.4612 13.3908 17.5556 14.7408 17.5556Z" fill="#B84297"/> | |||||
<path d="M14.7396 0.518561C12.5071 0.516465 10.3036 1.02326 8.29639 2.00042V5.16501C10.0847 4.0234 12.1442 3.37721 14.2642 3.29253C16.3842 3.20785 18.4887 3.68772 20.3624 4.68306C22.2361 5.6784 23.8119 7.1535 24.9285 8.95752C26.0451 10.7615 26.6625 12.8297 26.7176 14.9506V23.8519C28.2981 21.6491 29.2405 19.0532 29.4412 16.3496C29.6418 13.6459 29.0928 10.9393 27.8547 8.52744C26.6166 6.11557 24.7372 4.09186 22.4234 2.67887C20.1095 1.26589 17.4508 0.518385 14.7396 0.518561Z" fill="#292D33"/> | |||||
<path d="M14.7366 27.2501C11.6573 27.25 8.69621 26.0644 6.46777 23.9392C4.23933 21.814 2.91457 18.9124 2.76837 15.8364H2.75447V6.66675C0.599637 9.67837 -0.34358 13.3904 0.112183 17.0654C0.567946 20.7404 2.38934 24.1096 5.21455 26.5035C8.03976 28.8975 11.6621 30.1411 15.3619 29.9874C19.0617 29.8336 22.5683 28.2937 25.1852 25.6736V21.1349C24.1434 22.9902 22.6264 24.5347 20.7901 25.6094C18.9537 26.6842 16.8643 27.2505 14.7366 27.2501Z" fill="#292D33"/> | |||||
<path d="M14.7459 19.0619C13.8554 19.0627 12.9903 18.7635 12.2894 18.2123V21.0399C13.5672 21.5673 14.9802 21.6687 16.3197 21.329C17.6593 20.9893 18.8546 20.2266 19.7294 19.1533C20.6041 18.0801 21.1119 16.7531 21.1779 15.3682C21.2439 13.9833 20.8646 12.6138 20.0959 11.4617C19.3273 10.3096 18.2099 9.43585 16.9088 8.96943C15.6076 8.50301 14.1915 8.46858 12.8694 8.87121C11.5472 9.27385 10.389 10.0922 9.56565 11.2056C8.74227 12.319 8.29731 13.6685 8.29639 15.055V23.3692C9.04569 23.9612 9.87217 24.4476 10.7529 24.8148V15.0512C10.7529 14.2587 10.987 13.484 11.4258 12.8251C11.8646 12.1662 12.4882 11.6526 13.2178 11.3493C13.9475 11.0461 14.7503 10.9667 15.5249 11.1213C16.2995 11.2759 17.0109 11.6575 17.5694 12.2179C18.1278 12.7783 18.5081 13.4922 18.6622 14.2695C18.8163 15.0468 18.7372 15.8524 18.435 16.5846C18.1327 17.3167 17.6209 17.9425 16.9643 18.3828C16.3076 18.8231 15.5356 19.0581 14.7459 19.0581V19.0619Z" fill="#292D33"/> | |||||
<path d="M6.75762 21.8435V15.1227C6.75839 13.4397 7.29228 11.8002 8.28282 10.4388C9.27336 9.07744 10.6698 8.06411 12.272 7.54393C13.8743 7.02375 15.6002 7.02339 17.2027 7.54292C18.8052 8.06244 20.202 9.07519 21.1931 10.4361C22.1842 11.7971 22.7188 13.4364 22.7202 15.1194C22.7217 16.8024 22.19 18.4427 21.2013 19.8053C20.2126 21.168 18.8175 22.1832 17.216 22.7055C15.6144 23.2278 13.8884 23.2305 12.2853 22.7131V25.2626C14.093 25.6999 15.9849 25.6469 17.7653 25.109C19.5457 24.5712 21.15 23.5682 22.4123 22.2035C23.6746 20.8389 24.5491 19.1622 24.9455 17.3468C25.3418 15.5315 25.2455 13.6433 24.6666 11.8775C24.0878 10.1118 23.0472 8.53252 21.6527 7.30303C20.2581 6.07355 18.5601 5.23846 16.7343 4.88411C14.9084 4.52976 13.0209 4.669 11.267 5.28745C9.513 5.90589 7.95624 6.98109 6.75762 8.40188V4.99414V2.88892C5.86848 3.46084 5.04335 4.12643 4.29639 4.87424V15.4357C4.3661 17.7886 5.23393 20.048 6.75762 21.8435Z" fill="#292D33"/> | |||||
<path d="M100.385 22.2667C99.1113 22.2667 97.9779 22 96.9853 21.4667C95.9927 20.9185 95.3113 20.237 94.9409 19.4222L96.3409 18.4222C97.2742 19.9185 98.6298 20.6667 100.408 20.6667C101.326 20.6667 102.082 20.4296 102.674 19.9556C103.282 19.4815 103.585 18.8519 103.585 18.0667C103.585 16.7481 102.822 15.7926 101.296 15.2L98.9631 14.3111C97.7335 13.8519 96.8446 13.2889 96.2964 12.6222C95.7483 11.9556 95.4742 11.0815 95.4742 10C95.4742 8.78518 95.9261 7.80741 96.8298 7.06666C97.7483 6.32592 98.9038 5.95555 100.296 5.95555C101.259 5.95555 102.126 6.15555 102.896 6.55555C103.682 6.95555 104.304 7.47407 104.763 8.11111L103.452 9.17778C102.548 8.09629 101.474 7.55555 100.23 7.55555C99.3557 7.55555 98.6224 7.78518 98.0298 8.24444C97.452 8.68889 97.1631 9.26667 97.1631 9.97778C97.1631 10.6741 97.3409 11.2222 97.6964 11.6222C98.0668 12.0074 98.6742 12.363 99.5187 12.6889L101.608 13.4889C102.837 13.963 103.756 14.5556 104.363 15.2667C104.971 15.9778 105.274 16.8963 105.274 18.0222C105.274 19.3259 104.822 20.363 103.919 21.1333C103.015 21.8889 101.837 22.2667 100.385 22.2667ZM112.07 22.2222C110.87 22.2222 109.893 21.8222 109.137 21.0222C108.382 20.2222 108.004 19.163 108.004 17.8444V10.8889H109.559V17.6222C109.559 18.5852 109.811 19.3556 110.315 19.9333C110.819 20.4963 111.47 20.7778 112.27 20.7778C113.233 20.7778 114.026 20.3852 114.648 19.6C115.285 18.8 115.604 17.7407 115.604 16.4222V10.8889H117.159V22H115.604V20.1333C114.848 21.5259 113.67 22.2222 112.07 22.2222ZM122.541 26.6444H120.985V10.8889H122.541V12.7556C122.941 12.1333 123.511 11.6296 124.252 11.2444C125.008 10.8593 125.808 10.6667 126.652 10.6667C128.208 10.6667 129.519 11.2296 130.585 12.3556C131.652 13.4815 132.185 14.8444 132.185 16.4444C132.185 18.0444 131.652 19.4074 130.585 20.5333C129.519 21.6593 128.208 22.2222 126.652 22.2222C125.808 22.2222 125.008 22.0296 124.252 21.6444C123.511 21.2593 122.941 20.7556 122.541 20.1333V26.6444ZM123.541 19.5333C124.311 20.363 125.296 20.7778 126.496 20.7778C127.696 20.7778 128.674 20.363 129.43 19.5333C130.2 18.6889 130.585 17.6593 130.585 16.4444C130.585 15.2296 130.2 14.2074 129.43 13.3778C128.674 12.5333 127.696 12.1111 126.496 12.1111C125.296 12.1111 124.311 12.5333 123.541 13.3778C122.785 14.2074 122.408 15.2296 122.408 16.4444C122.408 17.6593 122.785 18.6889 123.541 19.5333ZM136.647 26.6444H135.091V10.8889H136.647V12.7556C137.047 12.1333 137.617 11.6296 138.358 11.2444C139.113 10.8593 139.913 10.6667 140.758 10.6667C142.313 10.6667 143.625 11.2296 144.691 12.3556C145.758 13.4815 146.291 14.8444 146.291 16.4444C146.291 18.0444 145.758 19.4074 144.691 20.5333C143.625 21.6593 142.313 22.2222 140.758 22.2222C139.913 22.2222 139.113 22.0296 138.358 21.6444C137.617 21.2593 137.047 20.7556 136.647 20.1333V26.6444ZM137.647 19.5333C138.417 20.363 139.402 20.7778 140.602 20.7778C141.802 20.7778 142.78 20.363 143.536 19.5333C144.306 18.6889 144.691 17.6593 144.691 16.4444C144.691 15.2296 144.306 14.2074 143.536 13.3778C142.78 12.5333 141.802 12.1111 140.602 12.1111C139.402 12.1111 138.417 12.5333 137.647 13.3778C136.891 14.2074 136.513 15.2296 136.513 16.4444C136.513 17.6593 136.891 18.6889 137.647 19.5333ZM158.219 20.5556C157.123 21.6667 155.738 22.2222 154.064 22.2222C152.39 22.2222 151.005 21.6667 149.908 20.5556C148.812 19.4296 148.264 18.0593 148.264 16.4444C148.264 14.8296 148.812 13.4667 149.908 12.3556C151.005 11.2296 152.39 10.6667 154.064 10.6667C155.738 10.6667 157.123 11.2296 158.219 12.3556C159.316 13.4667 159.864 14.8296 159.864 16.4444C159.864 18.0593 159.316 19.4296 158.219 20.5556ZM151.019 19.5333C151.805 20.363 152.819 20.7778 154.064 20.7778C155.308 20.7778 156.316 20.363 157.086 19.5333C157.871 18.6889 158.264 17.6593 158.264 16.4444C158.264 15.2296 157.871 14.2074 157.086 13.3778C156.316 12.5333 155.308 12.1111 154.064 12.1111C152.819 12.1111 151.805 12.5333 151.019 13.3778C150.249 14.2074 149.864 15.2296 149.864 16.4444C149.864 17.6593 150.249 18.6889 151.019 19.5333ZM162.761 22V10.8889H164.316V13.1778C164.553 12.437 164.975 11.8519 165.583 11.4222C166.19 10.9926 166.842 10.7778 167.538 10.7778C167.849 10.7778 168.116 10.8074 168.338 10.8667V12.4889C168.072 12.3852 167.761 12.3333 167.405 12.3333C166.62 12.3333 165.909 12.6889 165.272 13.4C164.635 14.1111 164.316 15.1185 164.316 16.4222V22H162.761ZM174.681 22.1111C173.748 22.1111 172.985 21.8444 172.392 21.3111C171.814 20.763 171.525 19.963 171.525 18.9111V12.3556H169.148V10.8889H171.525V7.8H173.081V10.8889H176.325V12.3556H173.081V18.7778C173.081 19.4593 173.229 19.9481 173.525 20.2444C173.837 20.5259 174.303 20.6667 174.925 20.6667C175.488 20.6667 175.955 20.5852 176.325 20.4222V21.8222C175.837 22.0148 175.288 22.1111 174.681 22.1111Z" fill="#292D33"/> | |||||
</svg> |
@ -0,0 +1,7 @@ | |||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> | |||||
<g id="Frame 1416"> | |||||
<g id="Group"> | |||||
<path id="Vector" d="M16.9419 3.29661C15.6473 2.69088 14.263 2.25066 12.8157 2C12.638 2.32134 12.4304 2.75355 12.2872 3.09738C10.7487 2.86601 9.22445 2.86601 7.7143 3.09738C7.57116 2.75355 7.3588 2.32134 7.17947 2C5.73067 2.25066 4.3448 2.6925 3.05016 3.29982C0.438869 7.24582 -0.269009 11.0938 0.0849305 14.8872C1.81688 16.1805 3.49534 16.9662 5.14548 17.4804C5.55291 16.9196 5.91628 16.3235 6.22931 15.6953C5.63313 15.4688 5.06211 15.1892 4.52256 14.8647C4.6657 14.7586 4.80571 14.6478 4.94098 14.5337C8.23183 16.0729 11.8074 16.0729 15.0589 14.5337C15.1958 14.6478 15.3358 14.7586 15.4774 14.8647C14.9362 15.1908 14.3637 15.4704 13.7675 15.697C14.0805 16.3235 14.4423 16.9212 14.8513 17.4819C16.503 16.9678 18.183 16.1822 19.915 14.8872C20.3303 10.4897 19.2056 6.67705 16.9419 3.29661ZM6.67765 12.5543C5.68977 12.5543 4.87963 11.632 4.87963 10.509C4.87963 9.38591 5.67247 8.46208 6.67765 8.46208C7.68285 8.46208 8.49297 9.38429 8.47567 10.509C8.47723 11.632 7.68285 12.5543 6.67765 12.5543ZM13.3223 12.5543C12.3344 12.5543 11.5243 11.632 11.5243 10.509C11.5243 9.38591 12.3171 8.46208 13.3223 8.46208C14.3275 8.46208 15.1376 9.38429 15.1203 10.509C15.1203 11.632 14.3275 12.5543 13.3223 12.5543Z" fill="#5865F2"/> | |||||
</g> | |||||
</g> | |||||
</svg> |
@ -0,0 +1,23 @@ | |||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> | |||||
<g clip-path="url(#clip0_425_4536)"> | |||||
<path d="M10.014 -0.00549316C5.8391 -0.00549316 4.6181 -0.00118628 4.38076 0.0185023C3.524 0.0897197 2.99087 0.224617 2.41005 0.513794C1.96244 0.73606 1.60943 0.993704 1.26104 1.35487C0.626541 2.01351 0.241998 2.82382 0.102793 3.78702C0.0351137 4.25463 0.0154251 4.35 0.0114258 6.73847C0.00988765 7.53463 0.0114258 8.58243 0.0114258 9.98786C0.0114258 14.1594 0.0160403 15.3792 0.0360366 15.616C0.105254 16.4497 0.235999 16.9742 0.51287 17.548C1.042 18.6462 2.05258 19.4707 3.24313 19.7783C3.65536 19.8845 4.11066 19.9429 4.69516 19.9706C4.94281 19.9814 7.46695 19.9891 9.99263 19.9891C12.5183 19.9891 15.044 19.986 15.2855 19.9737C15.9623 19.9418 16.3553 19.8891 16.7898 19.7768C17.988 19.4676 18.9802 18.6555 19.5201 17.5418C19.7916 16.9819 19.9292 16.4374 19.9915 15.6473C20.0051 15.475 20.0107 12.7283 20.0107 9.98524C20.0107 7.24176 20.0046 4.50012 19.9911 4.32785C19.928 3.52492 19.7903 2.98502 19.5101 2.41436C19.2801 1.94722 19.0248 1.59836 18.6541 1.24166C17.9925 0.609776 17.1834 0.225233 16.2193 0.0861819C15.7522 0.0186561 15.6591 -0.0013401 13.2688 -0.00549316H10.014Z" fill="url(#paint0_radial_425_4536)"/> | |||||
<path d="M10.014 -0.00549316C5.8391 -0.00549316 4.6181 -0.00118628 4.38076 0.0185023C3.524 0.0897197 2.99087 0.224617 2.41005 0.513794C1.96244 0.73606 1.60943 0.993704 1.26104 1.35487C0.626541 2.01351 0.241998 2.82382 0.102793 3.78702C0.0351137 4.25463 0.0154251 4.35 0.0114258 6.73847C0.00988765 7.53463 0.0114258 8.58243 0.0114258 9.98786C0.0114258 14.1594 0.0160403 15.3792 0.0360366 15.616C0.105254 16.4497 0.235999 16.9742 0.51287 17.548C1.042 18.6462 2.05258 19.4707 3.24313 19.7783C3.65536 19.8845 4.11066 19.9429 4.69516 19.9706C4.94281 19.9814 7.46695 19.9891 9.99263 19.9891C12.5183 19.9891 15.044 19.986 15.2855 19.9737C15.9623 19.9418 16.3553 19.8891 16.7898 19.7768C17.988 19.4676 18.9802 18.6555 19.5201 17.5418C19.7916 16.9819 19.9292 16.4374 19.9915 15.6473C20.0051 15.475 20.0107 12.7283 20.0107 9.98524C20.0107 7.24176 20.0046 4.50012 19.9911 4.32785C19.928 3.52492 19.7903 2.98502 19.5101 2.41436C19.2801 1.94722 19.0248 1.59836 18.6541 1.24166C17.9925 0.609776 17.1834 0.225233 16.2193 0.0861819C15.7522 0.0186561 15.6591 -0.0013401 13.2688 -0.00549316H10.014Z" fill="url(#paint1_radial_425_4536)"/> | |||||
<path d="M10.0093 2.60938C8.00417 2.60938 7.75252 2.61814 6.96498 2.65398C6.17897 2.68998 5.64246 2.81441 5.17301 2.99699C4.68741 3.18557 4.27549 3.43783 3.8651 3.84837C3.45441 4.25876 3.20215 4.67068 3.01295 5.15613C2.82991 5.62573 2.70532 6.1624 2.66994 6.9481C2.63472 7.73564 2.62549 7.98744 2.62549 9.9926C2.62549 11.9978 2.63441 12.2486 2.6701 13.0362C2.70624 13.8222 2.83068 14.3587 3.01311 14.8282C3.20184 15.3138 3.4541 15.7257 3.86464 16.1361C4.27487 16.5468 4.68679 16.7996 5.17209 16.9882C5.64184 17.1708 6.17851 17.2952 6.96436 17.3312C7.75191 17.3671 8.0034 17.3758 10.0084 17.3758C12.0137 17.3758 12.2646 17.3671 13.0521 17.3312C13.8381 17.2952 14.3753 17.1708 14.845 16.9882C15.3305 16.7996 15.7418 16.5468 16.152 16.1361C16.5627 15.7257 16.815 15.3138 17.0042 14.8283C17.1857 14.3587 17.3103 13.822 17.3472 13.0363C17.3826 12.2488 17.3918 11.9978 17.3918 9.9926C17.3918 7.98744 17.3826 7.7358 17.3472 6.94825C17.3103 6.16225 17.1857 5.62573 17.0042 5.15628C16.815 4.67068 16.5627 4.25876 16.152 3.84837C15.7413 3.43768 15.3306 3.18542 14.8446 2.99699C14.3739 2.81441 13.8371 2.68998 13.0511 2.65398C12.2635 2.61814 12.0128 2.60938 10.007 2.60938H10.0093ZM9.34699 3.93989C9.54357 3.93959 9.76291 3.93989 10.0093 3.93989C11.9807 3.93989 12.2143 3.94697 12.9928 3.98235C13.7126 4.01526 14.1033 4.13555 14.3636 4.23661C14.7081 4.37043 14.9538 4.5304 15.212 4.78881C15.4705 5.04722 15.6304 5.29333 15.7646 5.63788C15.8656 5.89783 15.9861 6.28853 16.0188 7.00839C16.0542 7.78671 16.0619 8.02051 16.0619 9.99091C16.0619 11.9613 16.0542 12.1951 16.0188 12.9734C15.9859 13.6933 15.8656 14.084 15.7646 14.3439C15.6307 14.6885 15.4705 14.9338 15.212 15.1921C14.9536 15.4505 14.7083 15.6105 14.3636 15.7443C14.1036 15.8458 13.7126 15.9658 12.9928 15.9987C12.2145 16.0341 11.9807 16.0418 10.0093 16.0418C8.03785 16.0418 7.80421 16.0341 7.02589 15.9987C6.30603 15.9655 5.91533 15.8452 5.65492 15.7441C5.31037 15.6103 5.06426 15.4503 4.80585 15.1919C4.54743 14.9335 4.38746 14.688 4.25334 14.3433C4.15228 14.0834 4.03184 13.6927 3.99908 12.9728C3.9637 12.1945 3.95662 11.9607 3.95662 9.98906C3.95662 8.01744 3.9637 7.78486 3.99908 7.00655C4.03199 6.28668 4.15228 5.89599 4.25334 5.63573C4.38716 5.29118 4.54743 5.04507 4.80585 4.78666C5.06426 4.52824 5.31037 4.36828 5.65492 4.23415C5.91518 4.13263 6.30603 4.01265 7.02589 3.97958C7.70699 3.94882 7.97094 3.93959 9.34699 3.93805V3.93989ZM13.9504 5.16582C13.4613 5.16582 13.0644 5.5622 13.0644 6.0515C13.0644 6.54064 13.4613 6.93748 13.9504 6.93748C14.4396 6.93748 14.8364 6.54064 14.8364 6.0515C14.8364 5.56236 14.4396 5.16551 13.9504 5.16551V5.16582ZM10.0093 6.20101C7.91542 6.20101 6.21774 7.89869 6.21774 9.9926C6.21774 12.0865 7.91542 13.7834 10.0093 13.7834C12.1032 13.7834 13.8003 12.0865 13.8003 9.9926C13.8003 7.89869 12.1032 6.20101 10.0093 6.20101ZM10.0093 7.53153C11.3685 7.53153 12.4704 8.63332 12.4704 9.9926C12.4704 11.3517 11.3685 12.4537 10.0093 12.4537C8.65005 12.4537 7.54825 11.3517 7.54825 9.9926C7.54825 8.63332 8.65005 7.53153 10.0093 7.53153Z" fill="white"/> | |||||
</g> | |||||
<defs> | |||||
<radialGradient id="paint0_radial_425_4536" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(5.32327 21.5291) rotate(-90) scale(19.8161 18.4355)"> | |||||
<stop stop-color="#FFDD55"/> | |||||
<stop offset="0.1" stop-color="#FFDD55"/> | |||||
<stop offset="0.5" stop-color="#FF543E"/> | |||||
<stop offset="1" stop-color="#C837AB"/> | |||||
</radialGradient> | |||||
<radialGradient id="paint1_radial_425_4536" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(-3.33936 1.43488) rotate(78.6776) scale(8.85796 36.5221)"> | |||||
<stop stop-color="#3771C8"/> | |||||
<stop offset="0.128" stop-color="#3771C8"/> | |||||
<stop offset="1" stop-color="#6600FF" stop-opacity="0"/> | |||||
</radialGradient> | |||||
<clipPath id="clip0_425_4536"> | |||||
<rect width="20" height="20" fill="white"/> | |||||
</clipPath> | |||||
</defs> | |||||
</svg> |
@ -0,0 +1,4 @@ | |||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> | |||||
<path d="M14.418 16.5774V12.291H15.8406V18H3V12.291H4.42263V16.5774H14.418Z" fill="#BCBBBB"/> | |||||
<path d="M5.99302 11.8845L12.9769 13.3441L13.2725 11.94L6.28863 10.4804L5.99302 11.8845ZM6.91681 8.55889L13.3833 11.5704L13.9745 10.2771L7.50803 7.24711L6.91681 8.55889ZM8.70896 5.38106L14.1963 9.94457L15.1016 8.8545L9.61427 4.29099L8.70896 5.38106ZM12.2563 2L11.1108 2.84988L15.3602 8.57737L16.5057 7.72748L12.2563 2ZM5.84521 15.1363H12.9769V13.7136H5.84521V15.1363Z" fill="#F48023"/> | |||||
</svg> |
@ -0,0 +1,3 @@ | |||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> | |||||
<path d="M11.5158 8.77569L17.4682 2H16.0582L10.8875 7.88203L6.76083 2H2L8.24173 10.8955L2 18H3.41003L8.86681 11.787L13.2258 18H17.9867M3.91893 3.04127H6.08513L16.0571 17.0099H13.8904" fill="black"/> | |||||
</svg> |
@ -0,0 +1,11 @@ | |||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> | |||||
<g clip-path="url(#clip0_425_4528)"> | |||||
<path d="M19.5818 5.18637C19.3513 4.32532 18.6746 3.64867 17.8136 3.41818C16.2545 3 9.99996 3 9.99996 3C9.99996 3 3.74547 3 2.18636 3.41818C1.32532 3.64867 0.648666 4.32532 0.418176 5.18637C1.25176e-07 6.74547 0 10.0003 0 10.0003C0 10.0003 1.25176e-07 13.2552 0.418176 14.8143C0.648666 15.6753 1.32532 16.352 2.18636 16.5825C3.74547 17.0007 9.99996 17.0007 9.99996 17.0007C9.99996 17.0007 16.2545 17.0007 17.8136 16.5825C18.6746 16.352 19.3513 15.6753 19.5818 14.8143C20 13.2552 20 10.0003 20 10.0003C20 10.0003 19.9983 6.74547 19.5818 5.18637Z" fill="#FF0000"/> | |||||
<path d="M7.99854 13.0003L13.1945 10.0007L7.99854 7.00098V13.0003Z" fill="white"/> | |||||
</g> | |||||
<defs> | |||||
<clipPath id="clip0_425_4528"> | |||||
<rect width="20" height="20" fill="white"/> | |||||
</clipPath> | |||||
</defs> | |||||
</svg> |
@ -0,0 +1,26 @@ | |||||
import { Environment } from '@abp/ng.core'; | |||||
const baseUrl = 'http://localhost:4200'; | |||||
export const environment = { | |||||
production: true, | |||||
application: { | |||||
baseUrl, | |||||
name: 'HospitalManagementSystem', | |||||
logoUrl: '', | |||||
}, | |||||
oAuthConfig: { | |||||
issuer: 'https://localhost:44360/', | |||||
redirectUri: baseUrl, | |||||
clientId: 'HospitalManagementSystem_App', | |||||
responseType: 'code', | |||||
scope: 'offline_access HospitalManagementSystem', | |||||
requireHttps: true | |||||
}, | |||||
apis: { | |||||
default: { | |||||
url: 'https://localhost:44360', | |||||
rootNamespace: 'HospitalManagementSystem', | |||||
}, | |||||
}, | |||||
} as Environment; |
@ -0,0 +1,26 @@ | |||||
import { Environment } from '@abp/ng.core'; | |||||
const baseUrl = 'http://localhost:4200'; | |||||
export const environment = { | |||||
production: false, | |||||
application: { | |||||
baseUrl, | |||||
name: 'HospitalManagementSystem', | |||||
logoUrl: '', | |||||
}, | |||||
oAuthConfig: { | |||||
issuer: 'https://localhost:44360/', | |||||
redirectUri: baseUrl, | |||||
clientId: 'HospitalManagementSystem_App', | |||||
responseType: 'code', | |||||
scope: 'offline_access HospitalManagementSystem', | |||||
requireHttps: true, | |||||
}, | |||||
apis: { | |||||
default: { | |||||
url: 'https://localhost:44360', | |||||
rootNamespace: 'HospitalManagementSystem', | |||||
}, | |||||
}, | |||||
} as Environment; |
@ -0,0 +1,16 @@ | |||||
<!DOCTYPE html> | |||||
<html lang="en"> | |||||
<head> | |||||
<meta charset="utf-8" /> | |||||
<title>HospitalManagementSystem</title> | |||||
<base href="/" /> | |||||
<meta name="viewport" content="width=device-width, initial-scale=1" /> | |||||
<link rel="icon" type="image/x-icon" href="favicon.ico" /> | |||||
</head> | |||||
<body class="bg-light"> | |||||
<app-root> | |||||
<div class="donut centered"></div> | |||||
</app-root> | |||||
</body> | |||||
</html> |
@ -0,0 +1,13 @@ | |||||
import { enableProdMode } from '@angular/core'; | |||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; | |||||
import { AppModule } from './app/app.module'; | |||||
import { environment } from './environments/environment'; | |||||
if (environment.production) { | |||||
enableProdMode(); | |||||
} | |||||
platformBrowserDynamic() | |||||
.bootstrapModule(AppModule) | |||||
.catch(err => console.error(err)); |
@ -0,0 +1,54 @@ | |||||
/** | |||||
* This file includes polyfills needed by Angular and is loaded before the app. | |||||
* You can add your own extra polyfills to this file. | |||||
* | |||||
* This file is divided into 2 sections: | |||||
* 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. | |||||
* 2. Application imports. Files imported after ZoneJS that should be loaded before your main | |||||
* file. | |||||
* | |||||
* The current setup is for so-called "evergreen" browsers; the last versions of browsers that | |||||
* automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), | |||||
* Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. | |||||
* | |||||
* Learn more in https://angular.io/guide/browser-support | |||||
*/ | |||||
/*************************************************************************************************** | |||||
* BROWSER POLYFILLS | |||||
*/ | |||||
/** | |||||
* By default, zone.js will patch all possible macroTask and DomEvents | |||||
* user can disable parts of macroTask/DomEvents patch by setting following flags | |||||
* because those flags need to be set before `zone.js` being loaded, and webpack | |||||
* will put import in the top of bundle, so user need to create a separate file | |||||
* in this directory (for example: zone-flags.ts), and put the following flags | |||||
* into that file, and then add the following code before importing zone.js. | |||||
* import './zone-flags'; | |||||
* | |||||
* The flags allowed in zone-flags.ts are listed here. | |||||
* | |||||
* The following flags will work for all browsers. | |||||
* | |||||
* (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame | |||||
* (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick | |||||
* (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames | |||||
* | |||||
* in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js | |||||
* with the following flag, it will bypass `zone.js` patch for IE/Edge | |||||
* | |||||
* (window as any).__Zone_enable_cross_context_check = true; | |||||
* | |||||
*/ | |||||
/*************************************************************************************************** | |||||
* Zone JS is required by default for Angular itself. | |||||
*/ | |||||
import 'zone.js'; // Included with Angular CLI. | |||||
/*************************************************************************************************** | |||||
* APPLICATION IMPORTS | |||||
*/ | |||||
/****************************************************************** | |||||
* Load `$localize` - used if i18n tags appear in Angular templates. | |||||
*/ | |||||
import '@angular/localize/init'; |
@ -0,0 +1,58 @@ | |||||
/* You can add global styles to this file, and also import other style files */ | |||||
@keyframes donut-spin { | |||||
0% { | |||||
transform: rotate(0deg); | |||||
} | |||||
100% { | |||||
transform: rotate(360deg); | |||||
} | |||||
} | |||||
:root { | |||||
--lpx-logo: url('/assets/images/logo/logo-light.png'); | |||||
--lpx-logo-icon: url('/assets/images/logo/logo-light-thumbnail.png'); | |||||
} | |||||
.donut { | |||||
display: inline-block; | |||||
border: 4px solid rgba(0, 0, 0, 0.1); | |||||
border-left-color: #7983ff; | |||||
border-radius: 50%; | |||||
width: 30px; | |||||
height: 30px; | |||||
animation: donut-spin 1.2s linear infinite; | |||||
&.centered { | |||||
position: fixed; | |||||
top: 50%; | |||||
left: 50%; | |||||
transform: translate(-50%, -50%); | |||||
} | |||||
} | |||||
.abp-logo { | |||||
background-repeat: no-repeat; | |||||
} | |||||
.abp-support { | |||||
width: 178px; | |||||
height: 30px; | |||||
background-image: url('/assets/images/getting-started/abp-support.svg'); | |||||
} | |||||
.abp-community { | |||||
width: 215px; | |||||
height: 30px; | |||||
background-image: url('/assets/images/getting-started/abp-community.svg'); | |||||
} | |||||
.abp-blog { | |||||
width: 142px; | |||||
height: 30px; | |||||
background-image: url('/assets/images/getting-started/abp-blog.svg'); | |||||
} | |||||
.logo-x { | |||||
width: 20px; | |||||
height: 20px; | |||||
background-image: url('/assets/images/getting-started/x.svg'); | |||||
} |
@ -0,0 +1,13 @@ | |||||
// This file is required by karma.conf.js and loads recursively all the .spec and framework files | |||||
import 'zone.js/testing'; | |||||
import { getTestBed } from '@angular/core/testing'; | |||||
import { | |||||
BrowserDynamicTestingModule, | |||||
platformBrowserDynamicTesting, | |||||
} from '@angular/platform-browser-dynamic/testing'; | |||||
// First, initialize the Angular testing environment. | |||||
getTestBed().initTestEnvironment( | |||||
BrowserDynamicTestingModule, | |||||
platformBrowserDynamicTesting() | |||||
); |
@ -0,0 +1,2 @@ | |||||
yarn | |||||
yarn start |
@ -0,0 +1,15 @@ | |||||
/* To learn more about this file see: https://angular.io/config/tsconfig. */ | |||||
{ | |||||
"extends": "./tsconfig.json", | |||||
"compilerOptions": { | |||||
"outDir": "./out-tsc/app", | |||||
"types": [] | |||||
}, | |||||
"files": [ | |||||
"src/main.ts", | |||||
"src/polyfills.ts" | |||||
], | |||||
"include": [ | |||||
"src/**/*.d.ts" | |||||
] | |||||
} |
@ -0,0 +1,32 @@ | |||||
/* To learn more about this file see: https://angular.io/config/tsconfig. */ | |||||
{ | |||||
"compileOnSave": false, | |||||
"compilerOptions": { | |||||
"baseUrl": "./", | |||||
"outDir": "./dist/out-tsc", | |||||
"sourceMap": true, | |||||
"declaration": false, | |||||
"downlevelIteration": true, | |||||
"experimentalDecorators": true, | |||||
"moduleResolution": "node", | |||||
"importHelpers": true, | |||||
"target": "ES2022", | |||||
"module": "es2020", | |||||
"lib": [ | |||||
"es2018", | |||||
"dom" | |||||
], | |||||
"paths": { | |||||
"@proxy": [ | |||||
"src/app/proxy/index.ts" | |||||
], | |||||
"@proxy/*": [ | |||||
"src/app/proxy/*" | |||||
] | |||||
}, | |||||
"useDefineForClassFields": false | |||||
}, | |||||
"angularCompilerOptions": { | |||||
"enableI18nLegacyMessageIdFormat": false | |||||
} | |||||
} |
@ -0,0 +1,18 @@ | |||||
/* To learn more about this file see: https://angular.io/config/tsconfig. */ | |||||
{ | |||||
"extends": "./tsconfig.json", | |||||
"compilerOptions": { | |||||
"outDir": "./out-tsc/spec", | |||||
"types": [ | |||||
"jasmine" | |||||
] | |||||
}, | |||||
"files": [ | |||||
"src/test.ts", | |||||
"src/polyfills.ts" | |||||
], | |||||
"include": [ | |||||
"src/**/*.spec.ts", | |||||
"src/**/*.d.ts" | |||||
] | |||||
} |
@ -0,0 +1 @@ | |||||
**/wwwroot/libs/** linguist-vendored |
@ -0,0 +1,265 @@ | |||||
## Ignore Visual Studio temporary files, build results, and | |||||
## files generated by popular Visual Studio add-ons. | |||||
# User-specific files | |||||
*.suo | |||||
*.user | |||||
*.userosscache | |||||
*.sln.docstates | |||||
# User-specific files (MonoDevelop/Xamarin Studio) | |||||
*.userprefs | |||||
# Build results | |||||
[Dd]ebug/ | |||||
[Dd]ebugPublic/ | |||||
[Rr]elease/ | |||||
[Rr]eleases/ | |||||
x64/ | |||||
x86/ | |||||
bld/ | |||||
[Bb]in/ | |||||
[Oo]bj/ | |||||
[Ll]og/ | |||||
# Visual Studio 2015 cache/options directory | |||||
.vs/ | |||||
# Uncomment if you have tasks that create the project's static files in wwwroot | |||||
#wwwroot/ | |||||
# MSTest test Results | |||||
[Tt]est[Rr]esult*/ | |||||
[Bb]uild[Ll]og.* | |||||
# NUNIT | |||||
*.VisualState.xml | |||||
TestResult.xml | |||||
# Build Results of an ATL Project | |||||
[Dd]ebugPS/ | |||||
[Rr]eleasePS/ | |||||
dlldata.c | |||||
# DNX | |||||
project.lock.json | |||||
artifacts/ | |||||
*_i.c | |||||
*_p.c | |||||
*_i.h | |||||
*.ilk | |||||
*.meta | |||||
*.obj | |||||
*.pch | |||||
*.pdb | |||||
*.pgc | |||||
*.pgd | |||||
*.rsp | |||||
*.sbr | |||||
*.tlb | |||||
*.tli | |||||
*.tlh | |||||
*.tmp | |||||
*.tmp_proj | |||||
*.log | |||||
*.vspscc | |||||
*.vssscc | |||||
.builds | |||||
*.pidb | |||||
*.svclog | |||||
*.scc | |||||
# Chutzpah Test files | |||||
_Chutzpah* | |||||
# Visual C++ cache files | |||||
ipch/ | |||||
*.aps | |||||
*.ncb | |||||
*.opendb | |||||
*.opensdf | |||||
*.sdf | |||||
*.cachefile | |||||
*.VC.db | |||||
*.VC.VC.opendb | |||||
# Visual Studio profiler | |||||
*.psess | |||||
*.vsp | |||||
*.vspx | |||||
*.sap | |||||
# TFS 2012 Local Workspace | |||||
$tf/ | |||||
# Guidance Automation Toolkit | |||||
*.gpState | |||||
# ReSharper is a .NET coding add-in | |||||
_ReSharper*/ | |||||
*.[Rr]e[Ss]harper | |||||
*.DotSettings.user | |||||
# JustCode is a .NET coding add-in | |||||
.JustCode | |||||
# TeamCity is a build add-in | |||||
_TeamCity* | |||||
# DotCover is a Code Coverage Tool | |||||
*.dotCover | |||||
# NCrunch | |||||
_NCrunch_* | |||||
.*crunch*.local.xml | |||||
nCrunchTemp_* | |||||
# MightyMoose | |||||
*.mm.* | |||||
AutoTest.Net/ | |||||
# Web workbench (sass) | |||||
.sass-cache/ | |||||
# Installshield output folder | |||||
[Ee]xpress/ | |||||
# DocProject is a documentation generator add-in | |||||
DocProject/buildhelp/ | |||||
DocProject/Help/*.HxT | |||||
DocProject/Help/*.HxC | |||||
DocProject/Help/*.hhc | |||||
DocProject/Help/*.hhk | |||||
DocProject/Help/*.hhp | |||||
DocProject/Help/Html2 | |||||
DocProject/Help/html | |||||
# Click-Once directory | |||||
publish/ | |||||
# Publish Web Output | |||||
*.[Pp]ublish.xml | |||||
*.azurePubxml | |||||
# TODO: Comment the next line if you want to checkin your web deploy settings | |||||
# but database connection strings (with potential passwords) will be unencrypted | |||||
*.pubxml | |||||
*.publishproj | |||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to | |||||
# checkin your Azure Web App publish settings, but sensitive information contained | |||||
# in these scripts will be unencrypted | |||||
PublishScripts/ | |||||
# NuGet Packages | |||||
*.nupkg | |||||
# The packages folder can be ignored because of Package Restore | |||||
**/packages/* | |||||
# except build/, which is used as an MSBuild target. | |||||
!**/packages/build/ | |||||
# Uncomment if necessary however generally it will be regenerated when needed | |||||
#!**/packages/repositories.config | |||||
# NuGet v3's project.json files produces more ignoreable files | |||||
*.nuget.props | |||||
*.nuget.targets | |||||
# Microsoft Azure Build Output | |||||
csx/ | |||||
*.build.csdef | |||||
# Microsoft Azure Emulator | |||||
ecf/ | |||||
rcf/ | |||||
# Windows Store app package directories and files | |||||
AppPackages/ | |||||
BundleArtifacts/ | |||||
Package.StoreAssociation.xml | |||||
_pkginfo.txt | |||||
# Visual Studio cache files | |||||
# files ending in .cache can be ignored | |||||
*.[Cc]ache | |||||
# but keep track of directories ending in .cache | |||||
!*.[Cc]ache/ | |||||
# Others | |||||
ClientBin/ | |||||
~$* | |||||
*~ | |||||
*.dbmdl | |||||
*.dbproj.schemaview | |||||
*.pfx | |||||
*.publishsettings | |||||
node_modules/ | |||||
orleans.codegen.cs | |||||
# Since there are multiple workflows, uncomment next line to ignore bower_components | |||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) | |||||
#bower_components/ | |||||
# RIA/Silverlight projects | |||||
Generated_Code/ | |||||
# Backup & report files from converting an old project file | |||||
# to a newer Visual Studio version. Backup files are not needed, | |||||
# because we have git ;-) | |||||
_UpgradeReport_Files/ | |||||
Backup*/ | |||||
UpgradeLog*.XML | |||||
UpgradeLog*.htm | |||||
# SQL Server files | |||||
*.mdf | |||||
*.ldf | |||||
# Business Intelligence projects | |||||
*.rdl.data | |||||
*.bim.layout | |||||
*.bim_*.settings | |||||
# Microsoft Fakes | |||||
FakesAssemblies/ | |||||
# GhostDoc plugin setting file | |||||
*.GhostDoc.xml | |||||
# Node.js Tools for Visual Studio | |||||
.ntvs_analysis.dat | |||||
# Visual Studio 6 build log | |||||
*.plg | |||||
# Visual Studio 6 workspace options file | |||||
*.opt | |||||
# Visual Studio LightSwitch build output | |||||
**/*.HTMLClient/GeneratedArtifacts | |||||
**/*.DesktopClient/GeneratedArtifacts | |||||
**/*.DesktopClient/ModelManifest.xml | |||||
**/*.Server/GeneratedArtifacts | |||||
**/*.Server/ModelManifest.xml | |||||
_Pvt_Extensions | |||||
# Paket dependency manager | |||||
.paket/paket.exe | |||||
paket-files/ | |||||
# FAKE - F# Make | |||||
.fake/ | |||||
# JetBrains Rider | |||||
.idea/ | |||||
*.sln.iml | |||||
# HospitalManagementSystem | |||||
src/HospitalManagementSystem.Web/Logs/* | |||||
src/HospitalManagementSystem.Web.Host/Logs/* | |||||
src/HospitalManagementSystem.AuthServer/Logs/* | |||||
src/HospitalManagementSystem.HttpApi.Host/Logs/* | |||||
src/HospitalManagementSystem.HttpApi.Host/Logs/* | |||||
src/HospitalManagementSystem.DbMigrator/Logs/* | |||||
src/HospitalManagementSystem.Blazor.Server/Logs/* | |||||
src/HospitalManagementSystem.Blazor.Server.Tiered/Logs/* | |||||
# Use abp install-libs to restore. | |||||
**/wwwroot/libs/* |
@ -0,0 +1,5 @@ | |||||
{ | |||||
"singleQuote": true, | |||||
"useTabs": false, | |||||
"tabWidth": 4 | |||||
} |
@ -0,0 +1,158 @@ | |||||
| |||||
Microsoft Visual Studio Solution File, Format Version 12.00 | |||||
# Visual Studio Version 16 | |||||
VisualStudioVersion = 16.0.29020.237 | |||||
MinimumVisualStudioVersion = 10.0.40219.1 | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalManagementSystem.Domain", "src\HospitalManagementSystem.Domain\HospitalManagementSystem.Domain.csproj", "{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalManagementSystem.Application", "src\HospitalManagementSystem.Application\HospitalManagementSystem.Application.csproj", "{1A94A50E-06DC-43C1-80B5-B662820EC3EB}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalManagementSystem.EntityFrameworkCore", "src\HospitalManagementSystem.EntityFrameworkCore\HospitalManagementSystem.EntityFrameworkCore.csproj", "{C956DD76-69C8-4A9C-83EA-D17DF83340FD}" | |||||
EndProject | |||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{CA9AC87F-097E-4F15-8393-4BC07735A5B0}" | |||||
EndProject | |||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{04DBDB01-70F4-4E06-B468-8F87850B22BE}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalManagementSystem.Application.Tests", "test\HospitalManagementSystem.Application.Tests\HospitalManagementSystem.Application.Tests.csproj", "{50B2631D-129C-47B3-A587-029CCD6099BC}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalManagementSystem.Domain.Shared", "src\HospitalManagementSystem.Domain.Shared\HospitalManagementSystem.Domain.Shared.csproj", "{42F719ED-8413-4895-B5B4-5AB56079BC66}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalManagementSystem.Application.Contracts", "src\HospitalManagementSystem.Application.Contracts\HospitalManagementSystem.Application.Contracts.csproj", "{520659C8-C734-4298-A3DA-B539DB9DFC0B}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalManagementSystem.HttpApi", "src\HospitalManagementSystem.HttpApi\HospitalManagementSystem.HttpApi.csproj", "{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalManagementSystem.HttpApi.Client", "src\HospitalManagementSystem.HttpApi.Client\HospitalManagementSystem.HttpApi.Client.csproj", "{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalManagementSystem.EntityFrameworkCore.Tests", "test\HospitalManagementSystem.EntityFrameworkCore.Tests\HospitalManagementSystem.EntityFrameworkCore.Tests.csproj", "{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalManagementSystem.TestBase", "test\HospitalManagementSystem.TestBase\HospitalManagementSystem.TestBase.csproj", "{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalManagementSystem.Domain.Tests", "test\HospitalManagementSystem.Domain.Tests\HospitalManagementSystem.Domain.Tests.csproj", "{E512F4D9-9375-480F-A2F6-A46509F9D824}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalManagementSystem.HttpApi.Client.ConsoleTestApp", "test\HospitalManagementSystem.HttpApi.Client.ConsoleTestApp\HospitalManagementSystem.HttpApi.Client.ConsoleTestApp.csproj", "{EF480016-9127-4916-8735-D2466BDBC582}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalManagementSystem.DbMigrator", "src\HospitalManagementSystem.DbMigrator\HospitalManagementSystem.DbMigrator.csproj", "{AA94D832-1CCC-4715-95A9-A483F23A1A5D}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HospitalManagementSystem.HttpApi.Host", "src\HospitalManagementSystem.HttpApi.Host\HospitalManagementSystem.HttpApi.Host.csproj", "{748584B1-BA69-4F6A-81AA-F4BDE6BCE29D}" | |||||
EndProject | |||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HospitalManagementSystem.Blazor.Client", "src\HospitalManagementSystem.Blazor.Client\HospitalManagementSystem.Blazor.Client.csproj", "{188A64AD-A1A7-4F95-85D1-C935594611B7}" | |||||
EndProject | |||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HospitalManagementSystem.Blazor.WebApp", "src\HospitalManagementSystem.Blazor.WebApp\HospitalManagementSystem.Blazor.WebApp.csproj", "{14882ABF-1EEF-430C-8E72-812B3EE810C4}" | |||||
EndProject | |||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HospitalManagementSystem.Blazor.WebApp.Client", "src\HospitalManagementSystem.Blazor.WebApp.Client\HospitalManagementSystem.Blazor.WebApp.Client.csproj", "{648460F4-3ECC-4751-9D87-EE25D0B8B2BF}" | |||||
EndProject | |||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HospitalManagementSystem.Blazor.WebApp.Tiered", "src\HospitalManagementSystem.Blazor.WebApp.Tiered\HospitalManagementSystem.Blazor.WebApp.Tiered.csproj", "{8A3E5E20-F162-4321-8AD5-23DD7B2B0E74}" | |||||
EndProject | |||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HospitalManagementSystem.Blazor.WebApp.Tiered.Client", "src\HospitalManagementSystem.Blazor.WebApp.Tiered.Client\HospitalManagementSystem.Blazor.WebApp.Tiered.Client.csproj", "{834C6A10-7562-427C-8771-B0588C35873D}" | |||||
EndProject | |||||
Global | |||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||||
Debug|Any CPU = Debug|Any CPU | |||||
Release|Any CPU = Release|Any CPU | |||||
EndGlobalSection | |||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution | |||||
{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{C956DD76-69C8-4A9C-83EA-D17DF83340FD}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{50B2631D-129C-47B3-A587-029CCD6099BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{50B2631D-129C-47B3-A587-029CCD6099BC}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{50B2631D-129C-47B3-A587-029CCD6099BC}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{50B2631D-129C-47B3-A587-029CCD6099BC}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{42F719ED-8413-4895-B5B4-5AB56079BC66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{42F719ED-8413-4895-B5B4-5AB56079BC66}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{42F719ED-8413-4895-B5B4-5AB56079BC66}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{42F719ED-8413-4895-B5B4-5AB56079BC66}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{520659C8-C734-4298-A3DA-B539DB9DFC0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{520659C8-C734-4298-A3DA-B539DB9DFC0B}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{520659C8-C734-4298-A3DA-B539DB9DFC0B}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{520659C8-C734-4298-A3DA-B539DB9DFC0B}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{E512F4D9-9375-480F-A2F6-A46509F9D824}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{E512F4D9-9375-480F-A2F6-A46509F9D824}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{E512F4D9-9375-480F-A2F6-A46509F9D824}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{E512F4D9-9375-480F-A2F6-A46509F9D824}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{EF480016-9127-4916-8735-D2466BDBC582}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{EF480016-9127-4916-8735-D2466BDBC582}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{EF480016-9127-4916-8735-D2466BDBC582}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{EF480016-9127-4916-8735-D2466BDBC582}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{AA94D832-1CCC-4715-95A9-A483F23A1A5D}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{748584B1-BA69-4F6A-81AA-F4BDE6BCE29D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{748584B1-BA69-4F6A-81AA-F4BDE6BCE29D}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{748584B1-BA69-4F6A-81AA-F4BDE6BCE29D}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{748584B1-BA69-4F6A-81AA-F4BDE6BCE29D}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{188A64AD-A1A7-4F95-85D1-C935594611B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{188A64AD-A1A7-4F95-85D1-C935594611B7}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{188A64AD-A1A7-4F95-85D1-C935594611B7}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{188A64AD-A1A7-4F95-85D1-C935594611B7}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{14882ABF-1EEF-430C-8E72-812B3EE810C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{14882ABF-1EEF-430C-8E72-812B3EE810C4}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{14882ABF-1EEF-430C-8E72-812B3EE810C4}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{14882ABF-1EEF-430C-8E72-812B3EE810C4}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{648460F4-3ECC-4751-9D87-EE25D0B8B2BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{648460F4-3ECC-4751-9D87-EE25D0B8B2BF}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{648460F4-3ECC-4751-9D87-EE25D0B8B2BF}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{648460F4-3ECC-4751-9D87-EE25D0B8B2BF}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{8A3E5E20-F162-4321-8AD5-23DD7B2B0E74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{8A3E5E20-F162-4321-8AD5-23DD7B2B0E74}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{8A3E5E20-F162-4321-8AD5-23DD7B2B0E74}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{8A3E5E20-F162-4321-8AD5-23DD7B2B0E74}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{834C6A10-7562-427C-8771-B0588C35873D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{834C6A10-7562-427C-8771-B0588C35873D}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{834C6A10-7562-427C-8771-B0588C35873D}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{834C6A10-7562-427C-8771-B0588C35873D}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
EndGlobalSection | |||||
GlobalSection(SolutionProperties) = preSolution | |||||
HideSolutionNode = FALSE | |||||
EndGlobalSection | |||||
GlobalSection(NestedProjects) = preSolution | |||||
{554AD327-6DBA-4F8F-96F8-81CE7A0C863F} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} | |||||
{1A94A50E-06DC-43C1-80B5-B662820EC3EB} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} | |||||
{C956DD76-69C8-4A9C-83EA-D17DF83340FD} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} | |||||
{50B2631D-129C-47B3-A587-029CCD6099BC} = {04DBDB01-70F4-4E06-B468-8F87850B22BE} | |||||
{42F719ED-8413-4895-B5B4-5AB56079BC66} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} | |||||
{520659C8-C734-4298-A3DA-B539DB9DFC0B} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} | |||||
{4164BDF7-F527-4E85-9CE6-E3C2D7426A27} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} | |||||
{3B5A0094-670D-4BB1-BFDD-61B88A8773DC} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} | |||||
{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81} = {04DBDB01-70F4-4E06-B468-8F87850B22BE} | |||||
{91853F21-9CD9-4132-BC29-A7D5D84FFFE7} = {04DBDB01-70F4-4E06-B468-8F87850B22BE} | |||||
{E512F4D9-9375-480F-A2F6-A46509F9D824} = {04DBDB01-70F4-4E06-B468-8F87850B22BE} | |||||
{EF480016-9127-4916-8735-D2466BDBC582} = {04DBDB01-70F4-4E06-B468-8F87850B22BE} | |||||
{AA94D832-1CCC-4715-95A9-A483F23A1A5D} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} | |||||
{748584B1-BA69-4F6A-81AA-F4BDE6BCE29D} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} | |||||
{188A64AD-A1A7-4F95-85D1-C935594611B7} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} | |||||
{14882ABF-1EEF-430C-8E72-812B3EE810C4} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} | |||||
{648460F4-3ECC-4751-9D87-EE25D0B8B2BF} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} | |||||
{8A3E5E20-F162-4321-8AD5-23DD7B2B0E74} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} | |||||
{834C6A10-7562-427C-8771-B0588C35873D} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} | |||||
EndGlobalSection | |||||
GlobalSection(ExtensibilityGlobals) = postSolution | |||||
SolutionGuid = {28315BFD-90E7-4E14-A2EA-F3D23AF4126F} | |||||
EndGlobalSection | |||||
EndGlobal |
@ -0,0 +1,23 @@ | |||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> | |||||
<s:Boolean x:Key="/Default/CodeEditing/Intellisense/CodeCompletion/IntelliSenseCompletingCharacters/CSharpCompletingCharacters/UpgradedFromVSSettings/@EntryValue">True</s:Boolean> | |||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceDoWhileStatementBraces/@EntryIndexedValue">WARNING</s:String> | |||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceFixedStatementBraces/@EntryIndexedValue">WARNING</s:String> | |||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceForeachStatementBraces/@EntryIndexedValue">WARNING</s:String> | |||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceForStatementBraces/@EntryIndexedValue">WARNING</s:String> | |||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceIfStatementBraces/@EntryIndexedValue">WARNING</s:String> | |||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceLockStatementBraces/@EntryIndexedValue">WARNING</s:String> | |||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceUsingStatementBraces/@EntryIndexedValue">WARNING</s:String> | |||||
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceWhileStatementBraces/@EntryIndexedValue">WARNING</s:String> | |||||
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/BRACES_FOR_FOR/@EntryValue">Required</s:String> | |||||
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/BRACES_FOR_FOREACH/@EntryValue">Required</s:String> | |||||
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/BRACES_FOR_IFELSE/@EntryValue">Required</s:String> | |||||
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/BRACES_FOR_WHILE/@EntryValue">Required</s:String> | |||||
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/BRACES_REDUNDANT/@EntryValue">False</s:Boolean> | |||||
<s:Boolean x:Key="/Default/CodeStyle/Generate/=Implementations/@KeyIndexDefined">True</s:Boolean> | |||||
<s:String x:Key="/Default/CodeStyle/Generate/=Implementations/Options/=Async/@EntryIndexedValue">False</s:String> | |||||
<s:String x:Key="/Default/CodeStyle/Generate/=Implementations/Options/=Mutable/@EntryIndexedValue">False</s:String> | |||||
<s:Boolean x:Key="/Default/CodeStyle/Generate/=Overrides/@KeyIndexDefined">True</s:Boolean> | |||||
<s:String x:Key="/Default/CodeStyle/Generate/=Overrides/Options/=Async/@EntryIndexedValue">False</s:String> | |||||
<s:String x:Key="/Default/CodeStyle/Generate/=Overrides/Options/=Mutable/@EntryIndexedValue">False</s:String> | |||||
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SQL/@EntryIndexedValue">SQL</s:String> | |||||
</wpf:ResourceDictionary> |
@ -0,0 +1,5 @@ | |||||
<?xml version="1.0" encoding="utf-8"?> | |||||
<configuration> | |||||
<packageSources> | |||||
</packageSources> | |||||
</configuration> |
@ -0,0 +1,70 @@ | |||||
# HospitalManagementSystem | |||||
## About this solution | |||||
This is a layered startup solution based on [Domain Driven Design (DDD)](https://abp.io/docs/latest/framework/architecture/domain-driven-design) practises. All the fundamental ABP modules are already installed. | |||||
### Pre-requirements | |||||
* [.NET 9.0+ SDK](https://dotnet.microsoft.com/download/dotnet) | |||||
* [Node v20.11+](https://nodejs.org/en) | |||||
### Configurations | |||||
The solution comes with a default configuration that works out of the box. However, you may consider to change the following configuration before running your solution: | |||||
* Check the `ConnectionStrings` in `appsettings.json` files under the `HospitalManagementSystem.HttpApi.Host` and `HospitalManagementSystem.DbMigrator` projects and change it if you need. | |||||
### Before running the application | |||||
#### Generating a Signing Certificate | |||||
In the production environment, you need to use a production signing certificate. ABP Framework sets up signing and encryption certificates in your application and expects an `openiddict.pfx` file in your application. | |||||
This certificate is already generated by ABP CLI, so most of the time you don't need to generate it yourself. However, if you need to generate a certificate, you can use the following command: | |||||
```bash | |||||
dotnet dev-certs https -v -ep openiddict.pfx -p 0d623589-5c61-436b-9034-d5e4ac61e9b7 | |||||
``` | |||||
> `0d623589-5c61-436b-9034-d5e4ac61e9b7` is the password of the certificate, you can change it to any password you want. | |||||
It is recommended to use **two** RSA certificates, distinct from the certificate(s) used for HTTPS: one for encryption, one for signing. | |||||
For more information, please refer to: https://documentation.openiddict.com/configuration/encryption-and-signing-credentials.html#registering-a-certificate-recommended-for-production-ready-scenarios | |||||
> Also, see the [Configuring OpenIddict](https://abp.io/docs/latest/deployment/configuring-openiddict#production-environment) documentation for more information. | |||||
#### Install Client-Side Libraries | |||||
Run the following command in the directory of your final application: | |||||
```bash | |||||
abp install-libs | |||||
``` | |||||
> This command installs all NPM packages for MVC/Razor Pages and Blazor Server UIs and this command is already run by the ABP CLI, so most of the time you don't need to run this command manually. | |||||
#### Create the Database | |||||
Run `HospitalManagementSystem.DbMigrator` to create the initial database. This should be done in the first run. It is also needed if a new database migration is added to the solution later. | |||||
### Solution structure | |||||
This is a layered monolith application that consists of the following applications: | |||||
* `HospitalManagementSystem.DbMigrator`: A console application which applies the migrations and also seeds the initial data. It is useful on development as well as on production environment. | |||||
* `HospitalManagementSystem.HttpApi.Host`: ASP.NET Core API application that is used to expose the APIs to the clients. | |||||
* `angular`: Angular application. | |||||
### Deploying the application | |||||
Deploying an ABP application is not different than deploying any .NET or ASP.NET Core application. However, there are some topics that you should care about when you are deploying your applications. You can check ABP's [Deployment documentation](https://abp.io/docs/latest/deployment) before deploying your application. | |||||
### Additional resources | |||||
You can see the following resources to learn more about your solution and the ABP Framework: | |||||
* [Web Application Development Tutorial](https://abp.io/docs/latest/tutorials/book-store/part-01?UI=Blazor&DB=EF) | |||||
* [Application Startup Template Structure](https://abp.io/docs/latest/solution-templates/layered-web-application) | |||||
* [LeptonX Lite Angular UI](https://abp.io/docs/latest/ui-themes/lepton-x-lite/angular) |
@ -0,0 +1,19 @@ | |||||
<Project> | |||||
<PropertyGroup> | |||||
<LangVersion>latest</LangVersion> | |||||
<Version>1.0.0</Version> | |||||
<NoWarn>$(NoWarn);CS1591</NoWarn> | |||||
<AbpProjectType>app</AbpProjectType> | |||||
</PropertyGroup> | |||||
<Target Name="NoWarnOnRazorViewImportedTypeConflicts" BeforeTargets="RazorCoreCompile"> | |||||
<PropertyGroup> | |||||
<NoWarn>$(NoWarn);0436</NoWarn> | |||||
</PropertyGroup> | |||||
</Target> | |||||
<ItemGroup> | |||||
<Content Remove="$(UserProfile)\.nuget\packages\*\*\contentFiles\any\*\*.abppkg*" /> | |||||
</ItemGroup> | |||||
</Project> |
@ -0,0 +1,25 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | |||||
<Import Project="..\..\common.props" /> | |||||
<PropertyGroup> | |||||
<TargetFramework>net9.0</TargetFramework> | |||||
<Nullable>enable</Nullable> | |||||
<RootNamespace>HospitalManagementSystem</RootNamespace> | |||||
</PropertyGroup> | |||||
<ItemGroup> | |||||
<ProjectReference Include="..\HospitalManagementSystem.Domain.Shared\HospitalManagementSystem.Domain.Shared.csproj" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<PackageReference Include="Volo.Abp.ObjectExtending" Version="9.0.2" /> | |||||
<PackageReference Include="Volo.Abp.Account.Application.Contracts" Version="9.0.2" /> | |||||
<PackageReference Include="Volo.Abp.Identity.Application.Contracts" Version="9.0.2" /> | |||||
<PackageReference Include="Volo.Abp.PermissionManagement.Application.Contracts" Version="9.0.2" /> | |||||
<PackageReference Include="Volo.Abp.TenantManagement.Application.Contracts" Version="9.0.2" /> | |||||
<PackageReference Include="Volo.Abp.FeatureManagement.Application.Contracts" Version="9.0.2" /> | |||||
<PackageReference Include="Volo.Abp.SettingManagement.Application.Contracts" Version="9.0.2" /> | |||||
</ItemGroup> | |||||
</Project> |
@ -0,0 +1,28 @@ | |||||
using Volo.Abp.Account; | |||||
using Volo.Abp.FeatureManagement; | |||||
using Volo.Abp.Identity; | |||||
using Volo.Abp.Modularity; | |||||
using Volo.Abp.ObjectExtending; | |||||
using Volo.Abp.PermissionManagement; | |||||
using Volo.Abp.SettingManagement; | |||||
using Volo.Abp.TenantManagement; | |||||
namespace HospitalManagementSystem; | |||||
[DependsOn( | |||||
typeof(HospitalManagementSystemDomainSharedModule), | |||||
typeof(AbpAccountApplicationContractsModule), | |||||
typeof(AbpFeatureManagementApplicationContractsModule), | |||||
typeof(AbpIdentityApplicationContractsModule), | |||||
typeof(AbpPermissionManagementApplicationContractsModule), | |||||
typeof(AbpSettingManagementApplicationContractsModule), | |||||
typeof(AbpTenantManagementApplicationContractsModule), | |||||
typeof(AbpObjectExtendingModule) | |||||
)] | |||||
public class HospitalManagementSystemApplicationContractsModule : AbpModule | |||||
{ | |||||
public override void PreConfigureServices(ServiceConfigurationContext context) | |||||
{ | |||||
HospitalManagementSystemDtoExtensions.Configure(); | |||||
} | |||||
} |
@ -0,0 +1,28 @@ | |||||
using Volo.Abp.Identity; | |||||
using Volo.Abp.ObjectExtending; | |||||
using Volo.Abp.Threading; | |||||
namespace HospitalManagementSystem; | |||||
public static class HospitalManagementSystemDtoExtensions | |||||
{ | |||||
private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); | |||||
public static void Configure() | |||||
{ | |||||
OneTimeRunner.Run(() => | |||||
{ | |||||
/* You can add extension properties to DTOs | |||||
* defined in the depended modules. | |||||
* | |||||
* Example: | |||||
* | |||||
* ObjectExtensionManager.Instance | |||||
* .AddOrUpdateProperty<IdentityRoleDto, string>("Title"); | |||||
* | |||||
* See the documentation for more: | |||||
* https://docs.abp.io/en/abp/latest/Object-Extensions | |||||
*/ | |||||
}); | |||||
} | |||||
} |
@ -0,0 +1,20 @@ | |||||
using HospitalManagementSystem.Localization; | |||||
using Volo.Abp.Authorization.Permissions; | |||||
using Volo.Abp.Localization; | |||||
namespace HospitalManagementSystem.Permissions; | |||||
public class HospitalManagementSystemPermissionDefinitionProvider : PermissionDefinitionProvider | |||||
{ | |||||
public override void Define(IPermissionDefinitionContext context) | |||||
{ | |||||
var myGroup = context.AddGroup(HospitalManagementSystemPermissions.GroupName); | |||||
//Define your own permissions here. Example: | |||||
//myGroup.AddPermission(HospitalManagementSystemPermissions.MyPermission1, L("Permission:MyPermission1")); | |||||
} | |||||
private static LocalizableString L(string name) | |||||
{ | |||||
return LocalizableString.Create<HospitalManagementSystemResource>(name); | |||||
} | |||||
} |
@ -0,0 +1,9 @@ | |||||
namespace HospitalManagementSystem.Permissions; | |||||
public static class HospitalManagementSystemPermissions | |||||
{ | |||||
public const string GroupName = "HospitalManagementSystem"; | |||||
//Add your own permission names. Example: | |||||
//public const string MyPermission1 = GroupName + ".MyPermission1"; | |||||
} |
@ -0,0 +1,25 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk"> | |||||
<Import Project="..\..\common.props" /> | |||||
<PropertyGroup> | |||||
<TargetFramework>net9.0</TargetFramework> | |||||
<Nullable>enable</Nullable> | |||||
<RootNamespace>HospitalManagementSystem</RootNamespace> | |||||
</PropertyGroup> | |||||
<ItemGroup> | |||||
<ProjectReference Include="..\HospitalManagementSystem.Domain\HospitalManagementSystem.Domain.csproj" /> | |||||
<ProjectReference Include="..\HospitalManagementSystem.Application.Contracts\HospitalManagementSystem.Application.Contracts.csproj" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<PackageReference Include="Volo.Abp.Account.Application" Version="9.0.2" /> | |||||
<PackageReference Include="Volo.Abp.Identity.Application" Version="9.0.2" /> | |||||
<PackageReference Include="Volo.Abp.PermissionManagement.Application" Version="9.0.2" /> | |||||
<PackageReference Include="Volo.Abp.TenantManagement.Application" Version="9.0.2" /> | |||||
<PackageReference Include="Volo.Abp.FeatureManagement.Application" Version="9.0.2" /> | |||||
<PackageReference Include="Volo.Abp.SettingManagement.Application" Version="9.0.2" /> | |||||
</ItemGroup> | |||||
</Project> |
@ -0,0 +1,17 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
using HospitalManagementSystem.Localization; | |||||
using Volo.Abp.Application.Services; | |||||
namespace HospitalManagementSystem; | |||||
/* Inherit your application services from this class. | |||||
*/ | |||||
public abstract class HospitalManagementSystemAppService : ApplicationService | |||||
{ | |||||
protected HospitalManagementSystemAppService() | |||||
{ | |||||
LocalizationResource = typeof(HospitalManagementSystemResource); | |||||
} | |||||
} |
@ -0,0 +1,13 @@ | |||||
using AutoMapper; | |||||
namespace HospitalManagementSystem; | |||||
public class HospitalManagementSystemApplicationAutoMapperProfile : Profile | |||||
{ | |||||
public HospitalManagementSystemApplicationAutoMapperProfile() | |||||
{ | |||||
/* You can configure your AutoMapper mapping configuration here. | |||||
* Alternatively, you can split your mapping configurations | |||||
* into multiple profile classes for a better organization. */ | |||||
} | |||||
} |
@ -0,0 +1,31 @@ | |||||
using Volo.Abp.Account; | |||||
using Volo.Abp.AutoMapper; | |||||
using Volo.Abp.FeatureManagement; | |||||
using Volo.Abp.Identity; | |||||
using Volo.Abp.Modularity; | |||||
using Volo.Abp.PermissionManagement; | |||||
using Volo.Abp.SettingManagement; | |||||
using Volo.Abp.TenantManagement; | |||||
namespace HospitalManagementSystem; | |||||
[DependsOn( | |||||
typeof(HospitalManagementSystemDomainModule), | |||||
typeof(AbpAccountApplicationModule), | |||||
typeof(HospitalManagementSystemApplicationContractsModule), | |||||
typeof(AbpIdentityApplicationModule), | |||||
typeof(AbpPermissionManagementApplicationModule), | |||||
typeof(AbpTenantManagementApplicationModule), | |||||
typeof(AbpFeatureManagementApplicationModule), | |||||
typeof(AbpSettingManagementApplicationModule) | |||||
)] | |||||
public class HospitalManagementSystemApplicationModule : AbpModule | |||||
{ | |||||
public override void ConfigureServices(ServiceConfigurationContext context) | |||||
{ | |||||
Configure<AbpAutoMapperOptions>(options => | |||||
{ | |||||
options.AddMaps<HospitalManagementSystemApplicationModule>(); | |||||
}); | |||||
} | |||||
} |
@ -0,0 +1,2 @@ | |||||
using System.Runtime.CompilerServices; | |||||
[assembly:InternalsVisibleToAttribute("HospitalManagementSystem.Application.Tests")] |
@ -0,0 +1,37 @@ | |||||
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> | |||||
<Import Project="..\..\common.props" /> | |||||
<PropertyGroup> | |||||
<TargetFramework>net9.0</TargetFramework> | |||||
<Nullable>enable</Nullable> | |||||
<BlazorWebAssemblyLoadAllGlobalizationData>true</BlazorWebAssemblyLoadAllGlobalizationData> | |||||
</PropertyGroup> | |||||
<ItemGroup> | |||||
<PackageReference Include="Blazorise.Bootstrap5" Version="1.6.2.0" /> | |||||
<PackageReference Include="Blazorise.Icons.FontAwesome" Version="1.6.2.0" /> | |||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="9.0.0.0" /> | |||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="9.0.0.0" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<PackageReference Include="Volo.Abp.AspNetCore.Components.WebAssembly.LeptonXLiteTheme" Version="3.2.0" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<PackageReference Include="Volo.Abp.Autofac.WebAssembly" Version="9.0.2" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<PackageReference Include="Volo.Abp.Identity.Blazor.WebAssembly" Version="9.0.2" /> | |||||
<PackageReference Include="Volo.Abp.TenantManagement.Blazor.WebAssembly" Version="9.0.2" /> | |||||
<PackageReference Include="Volo.Abp.SettingManagement.Blazor.WebAssembly" Version="9.0.2" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<ProjectReference Include="..\..\src\HospitalManagementSystem.HttpApi.Client\HospitalManagementSystem.HttpApi.Client.csproj" /> | |||||
</ItemGroup> | |||||
</Project> |
@ -0,0 +1,11 @@ | |||||
using AutoMapper; | |||||
namespace HospitalManagementSystem.Blazor.Client; | |||||
public class HospitalManagementSystemBlazorAutoMapperProfile : Profile | |||||
{ | |||||
public HospitalManagementSystemBlazorAutoMapperProfile() | |||||
{ | |||||
//Define your AutoMapper configuration here for the Blazor project. | |||||
} | |||||
} |
@ -0,0 +1,99 @@ | |||||
using System; | |||||
using System.Net.Http; | |||||
using Blazorise.Bootstrap5; | |||||
using Blazorise.Icons.FontAwesome; | |||||
using Microsoft.AspNetCore.Components.Web; | |||||
using Microsoft.AspNetCore.Components.WebAssembly.Hosting; | |||||
using Microsoft.Extensions.Configuration; | |||||
using Microsoft.Extensions.DependencyInjection; | |||||
using HospitalManagementSystem.Blazor.Client.Menus; | |||||
using OpenIddict.Abstractions; | |||||
using Volo.Abp.AspNetCore.Components.Web.Theming.Routing; | |||||
using Volo.Abp.AspNetCore.Components.WebAssembly.LeptonXLiteTheme; | |||||
using Volo.Abp.Autofac.WebAssembly; | |||||
using Volo.Abp.AutoMapper; | |||||
using Volo.Abp.Identity.Blazor.WebAssembly; | |||||
using Volo.Abp.Modularity; | |||||
using Volo.Abp.SettingManagement.Blazor.WebAssembly; | |||||
using Volo.Abp.TenantManagement.Blazor.WebAssembly; | |||||
using Volo.Abp.UI.Navigation; | |||||
namespace HospitalManagementSystem.Blazor.Client; | |||||
[DependsOn( | |||||
typeof(AbpAutofacWebAssemblyModule), | |||||
typeof(HospitalManagementSystemHttpApiClientModule), | |||||
typeof(AbpAspNetCoreComponentsWebAssemblyLeptonXLiteThemeModule), | |||||
typeof(AbpIdentityBlazorWebAssemblyModule), | |||||
typeof(AbpTenantManagementBlazorWebAssemblyModule), | |||||
typeof(AbpSettingManagementBlazorWebAssemblyModule) | |||||
)] | |||||
public class HospitalManagementSystemBlazorClientModule : AbpModule | |||||
{ | |||||
public override void ConfigureServices(ServiceConfigurationContext context) | |||||
{ | |||||
var environment = context.Services.GetSingletonInstance<IWebAssemblyHostEnvironment>(); | |||||
var builder = context.Services.GetSingletonInstance<WebAssemblyHostBuilder>(); | |||||
ConfigureAuthentication(builder); | |||||
ConfigureHttpClient(context, environment); | |||||
ConfigureBlazorise(context); | |||||
ConfigureRouter(context); | |||||
ConfigureMenu(context); | |||||
ConfigureAutoMapper(context); | |||||
} | |||||
private void ConfigureRouter(ServiceConfigurationContext context) | |||||
{ | |||||
Configure<AbpRouterOptions>(options => | |||||
{ | |||||
options.AppAssembly = typeof(HospitalManagementSystemBlazorClientModule).Assembly; | |||||
}); | |||||
} | |||||
private void ConfigureMenu(ServiceConfigurationContext context) | |||||
{ | |||||
Configure<AbpNavigationOptions>(options => | |||||
{ | |||||
options.MenuContributors.Add(new HospitalManagementSystemMenuContributor(context.Services.GetConfiguration())); | |||||
}); | |||||
} | |||||
private void ConfigureBlazorise(ServiceConfigurationContext context) | |||||
{ | |||||
context.Services | |||||
.AddBootstrap5Providers() | |||||
.AddFontAwesomeIcons(); | |||||
} | |||||
private static void ConfigureAuthentication(WebAssemblyHostBuilder builder) | |||||
{ | |||||
builder.Services.AddOidcAuthentication(options => | |||||
{ | |||||
builder.Configuration.Bind("AuthServer", options.ProviderOptions); | |||||
options.UserOptions.NameClaim = OpenIddictConstants.Claims.Name; | |||||
options.UserOptions.RoleClaim = OpenIddictConstants.Claims.Role; | |||||
options.ProviderOptions.DefaultScopes.Add("HospitalManagementSystem"); | |||||
options.ProviderOptions.DefaultScopes.Add("roles"); | |||||
options.ProviderOptions.DefaultScopes.Add("email"); | |||||
options.ProviderOptions.DefaultScopes.Add("phone"); | |||||
}); | |||||
} | |||||
private static void ConfigureHttpClient(ServiceConfigurationContext context, IWebAssemblyHostEnvironment environment) | |||||
{ | |||||
context.Services.AddTransient(sp => new HttpClient | |||||
{ | |||||
BaseAddress = new Uri(environment.BaseAddress) | |||||
}); | |||||
} | |||||
private void ConfigureAutoMapper(ServiceConfigurationContext context) | |||||
{ | |||||
Configure<AbpAutoMapperOptions>(options => | |||||
{ | |||||
options.AddMaps<HospitalManagementSystemBlazorClientModule>(); | |||||
}); | |||||
} | |||||
} |
@ -0,0 +1,19 @@ | |||||
using Microsoft.Extensions.Localization; | |||||
using HospitalManagementSystem.Localization; | |||||
using Volo.Abp.DependencyInjection; | |||||
using Volo.Abp.Ui.Branding; | |||||
namespace HospitalManagementSystem.Blazor.Client; | |||||
[Dependency(ReplaceServices = true)] | |||||
public class HospitalManagementSystemBrandingProvider : DefaultBrandingProvider | |||||
{ | |||||
private IStringLocalizer<HospitalManagementSystemResource> _localizer; | |||||
public HospitalManagementSystemBrandingProvider(IStringLocalizer<HospitalManagementSystemResource> localizer) | |||||
{ | |||||
_localizer = localizer; | |||||
} | |||||
public override string AppName => _localizer["AppName"]; | |||||
} |
@ -0,0 +1,19 @@ | |||||
using Volo.Abp.Bundling; | |||||
namespace HospitalManagementSystem.Blazor.Client; | |||||
/* Add your global styles/scripts here. | |||||
* See https://abp.io/docs/latest/framework/ui/blazor/global-scripts-styles to learn how to use it | |||||
*/ | |||||
public class HospitalManagementSystemBundleContributor : IBundleContributor | |||||
{ | |||||
public void AddScripts(BundleContext context) | |||||
{ | |||||
} | |||||
public void AddStyles(BundleContext context) | |||||
{ | |||||
context.Add("main.css", true); | |||||
} | |||||
} |
@ -0,0 +1,12 @@ | |||||
using HospitalManagementSystem.Localization; | |||||
using Volo.Abp.AspNetCore.Components; | |||||
namespace HospitalManagementSystem.Blazor.Client; | |||||
public abstract class HospitalManagementSystemComponentBase : AbpComponentBase | |||||
{ | |||||
protected HospitalManagementSystemComponentBase() | |||||
{ | |||||
LocalizationResource = typeof(HospitalManagementSystemResource); | |||||
} | |||||
} |
@ -0,0 +1,83 @@ | |||||
using System; | |||||
using System.Threading.Tasks; | |||||
using Microsoft.Extensions.Configuration; | |||||
using HospitalManagementSystem.Localization; | |||||
using HospitalManagementSystem.MultiTenancy; | |||||
using Volo.Abp.Account.Localization; | |||||
using Volo.Abp.Authorization.Permissions; | |||||
using Volo.Abp.Identity.Blazor; | |||||
using Volo.Abp.SettingManagement.Blazor.Menus; | |||||
using Volo.Abp.TenantManagement.Blazor.Navigation; | |||||
using Volo.Abp.UI.Navigation; | |||||
namespace HospitalManagementSystem.Blazor.Client.Menus; | |||||
public class HospitalManagementSystemMenuContributor : IMenuContributor | |||||
{ | |||||
private readonly IConfiguration _configuration; | |||||
public HospitalManagementSystemMenuContributor(IConfiguration configuration) | |||||
{ | |||||
_configuration = configuration; | |||||
} | |||||
public async Task ConfigureMenuAsync(MenuConfigurationContext context) | |||||
{ | |||||
if (context.Menu.Name == StandardMenus.Main) | |||||
{ | |||||
await ConfigureMainMenuAsync(context); | |||||
} | |||||
else if (context.Menu.Name == StandardMenus.User) | |||||
{ | |||||
await ConfigureUserMenuAsync(context); | |||||
} | |||||
} | |||||
private Task ConfigureMainMenuAsync(MenuConfigurationContext context) | |||||
{ | |||||
var l = context.GetLocalizer<HospitalManagementSystemResource>(); | |||||
context.Menu.Items.Insert( | |||||
0, | |||||
new ApplicationMenuItem( | |||||
HospitalManagementSystemMenus.Home, | |||||
l["Menu:Home"], | |||||
"/", | |||||
icon: "fas fa-home" | |||||
) | |||||
); | |||||
var administration = context.Menu.GetAdministration(); | |||||
if (MultiTenancyConsts.IsEnabled) | |||||
{ | |||||
administration.SetSubItemOrder(TenantManagementMenuNames.GroupName, 1); | |||||
} | |||||
else | |||||
{ | |||||
administration.TryRemoveMenuItem(TenantManagementMenuNames.GroupName); | |||||
} | |||||
administration.SetSubItemOrder(IdentityMenuNames.GroupName, 2); | |||||
administration.SetSubItemOrder(SettingManagementMenus.GroupName, 3); | |||||
return Task.CompletedTask; | |||||
} | |||||
private Task ConfigureUserMenuAsync(MenuConfigurationContext context) | |||||
{ | |||||
var accountStringLocalizer = context.GetLocalizer<AccountResource>(); | |||||
var authServerUrl = _configuration["AuthServer:Authority"] ?? ""; | |||||
context.Menu.AddItem(new ApplicationMenuItem( | |||||
"Account.Manage", | |||||
accountStringLocalizer["MyAccount"], | |||||
$"{authServerUrl.EnsureEndsWith('/')}Account/Manage", | |||||
icon: "fa fa-cog", | |||||
order: 1000, | |||||
target: "_blank").RequireAuthenticated()); | |||||
return Task.CompletedTask; | |||||
} | |||||
} |
@ -0,0 +1,10 @@ | |||||
namespace HospitalManagementSystem.Blazor.Client.Menus; | |||||
public class HospitalManagementSystemMenus | |||||
{ | |||||
private const string Prefix = "HospitalManagementSystem"; | |||||
public const string Home = Prefix + ".Home"; | |||||
//Add your menu items here... | |||||
} |
@ -0,0 +1,87 @@ | |||||
@page "/" | |||||
@using Volo.Abp.MultiTenancy | |||||
@inherits HospitalManagementSystemComponentBase | |||||
@inject AuthenticationStateProvider AuthenticationStateProvider | |||||
<div class="row mb-3"> | |||||
<div class="col-xl-6 col-12 d-flex"> | |||||
<div class="card h-lg-100 w-100 overflow-hidden"> | |||||
<div class="card-body"> | |||||
<div class="starting-content"> | |||||
<h3>Getting Started</h3> | |||||
<p class="lead text-muted mb-2">Learn how to create and run | |||||
a new web application using the application startup template.</p> | |||||
<a href="https://docs.abp.io/en/commercial/latest/getting-started" class="btn btn-brand mb-4" target="_blank">Getting Started</a> | |||||
<h4>Web Application Development Tutorial</h4> | |||||
<p class="text-muted mb-2">Learn how to build an ABP based web application named Acme.BookStore.</p> | |||||
<a href="https://docs.abp.io/en/commercial/latest/tutorials/book-store/part-1?UI=MVC&DB=EF" class="btn btn-primary soft mb-4" target="_blank">Explore Tutorial</a> | |||||
<h4>Customize Lepton Theme</h4> | |||||
<p class="text-muted mb-2">Learn how to customize LeptonX Theme as you wish.</p> | |||||
<a href="https://docs.abp.io/en/commercial/latest/themes/lepton/customizing-lepton-theme" class="btn btn-primary soft mb-5 mb-xl-0" target="_blank">Customize Lepton</a> | |||||
</div> | |||||
<img class="card-bg-image" src="/images/getting-started/bg-01.png"> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="col-xl-3 col-md-6 d-flex"> | |||||
<div class="row"> | |||||
<div class="col-12 d-flex"> | |||||
<div class="card overflow-hidden"> | |||||
<div class="card-body pb-0"> | |||||
<div class="abp-support abp-logo mb-2"></div> | |||||
<p class="text-muted mb-2">You can check for similar problems and solutions, or open a new topic to discuss your specific issue.</p> | |||||
<a href="https://support.abp.io/QA/Questions" class="btn btn-brand soft" target="_blank">Visit Support</a> | |||||
<img class="" src="/images/getting-started/img-support.png"> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="col-12 d-flex"> | |||||
<div class="card h-md-100 overflow-hidden"> | |||||
<div class="card-body pb-0"> | |||||
<div class="abp-blog abp-logo mb-2"></div> | |||||
<p class="text-muted mb-2">You can find content on .NET development, cross-platform, ASP.NET application templates, ABP-related news, and more.</p> | |||||
<a href="https://blog.abp.io/abp" class="btn btn-brand soft" target="_blank">Visit Blog</a> | |||||
<img style="margin-bottom: -24px;" src="/images/getting-started/img-blog.png"> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="my-3 text-center"> | |||||
<h3>Let's improve your application!</h3> | |||||
<p>Here are some links to help you get started:</p> | |||||
</div> | |||||
<div class="card mt-4 mb-5"> | |||||
<div class="card-body"> | |||||
<div class="row text-center justify-content-md-center"> | |||||
<div class="col-lg-4"> | |||||
<div class="p-4"> | |||||
<h5 class="mb-3"><i class="fas fa-book text-secondary d-block my-3 fa-2x"></i> Learn the ABP Framework</h5> | |||||
<p>Explore the comprehensive documentation to learn how to build a modern web application.</p> | |||||
<a href="https://abp.io/docs/latest?ref=tmpl" target="_blank" class="btn btn-link px-1">See Documents <i class="fas fa-chevron-right"></i></a> | |||||
</div> | |||||
</div> | |||||
<div class="col-lg-4 border-start"> | |||||
<div class="p-4"> | |||||
<h5 class="mb-3"><i class="fas fa-cubes text-secondary d-block my-3 fa-2x"></i> Samples</h5> | |||||
<p>See the example projects built with the ABP Framework.</p> | |||||
<a href="https://abp.io/docs/latest/samples?ref=tmpl" target="_blank" class="btn btn-link px-1">All samples <i class="fas fa-chevron-right"></i></a> | |||||
</div> | |||||
</div> | |||||
<div class="col-lg-4 border-start"> | |||||
<div class="p-4"> | |||||
<h5 class="mb-3"><i class="fas fa-users text-secondary d-block my-3 fa-2x"></i> ABP Community</h5> | |||||
<p>Get involved with a vibrant community and become a contributor.</p> | |||||
<a href="https://abp.io/community/" target="_blank" class="btn btn-link px-1">Community <i class="fas fa-chevron-right"></i></a> | |||||
<a href="https://abp.io/docs/latest/contribution?ref=tmpl" target="_blank" class="btn btn-link px-1">Contribute <i class="fas fa-chevron-right"></i></a> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> |