Compare commits
6
Commits
75b49be476
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1a9316ed6f | ||
|
|
f3b1d901a8 | ||
|
|
df7e8827be | ||
|
|
2e477ca023 | ||
|
|
5292b99af6 | ||
|
|
3d83e95613 |
Vendored
+2
-2
@@ -8,7 +8,7 @@
|
||||
"type": "coreclr",
|
||||
"request": "launch",
|
||||
"preLaunchTask": "build",
|
||||
"program": "${workspaceFolder}/FamilyTreeAPI/bin/Debug/net10.0/FamilyTreeAPI",
|
||||
"program": "${workspaceFolder}/FamilyTreeAPI/bin/Debug/net10.0/FamilyTreeAPI.dll",
|
||||
"args": [],
|
||||
"cwd": "${workspaceFolder}",
|
||||
"stopAtEntry": false,
|
||||
@@ -34,7 +34,7 @@
|
||||
"type": "coreclr",
|
||||
"request": "launch",
|
||||
"preLaunchTask": "publish",
|
||||
"program": "${workspaceFolder}\\FamilyTreeAPI\\bin\\Release\\net10.0\\FamilyTreeAPI.dll",
|
||||
"program": "${workspaceFolder}/FamilyTreeAPI/bin/Release/net10.0/linux-x64/FamilyTreeAPI.dll",
|
||||
"serverReadyAction": {
|
||||
"action": "openExternally",
|
||||
"pattern": "listening on:\\s+(https?://\\S+)",
|
||||
|
||||
@@ -3,6 +3,7 @@ using FamilyTreeAPI.Repository;
|
||||
|
||||
namespace FamilyTreeAPI.Controllers;
|
||||
|
||||
using DocumentFormat.OpenXml.Drawing.Charts;
|
||||
using FamilyTreeAPI.Interface;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Primitives;
|
||||
@@ -110,14 +111,44 @@ public class FileUploadController : ControllerBase
|
||||
return Ok(ret);
|
||||
}
|
||||
|
||||
[HttpPost("[action]")]
|
||||
public async Task<IActionResult> DownloadPersonPhotoById(DeleteCriteria<int> criteria)
|
||||
{
|
||||
|
||||
var result = await _personPhoto.DownloadPersonPhotoById(criteria.Id);
|
||||
if (result.StatusCode > 0)
|
||||
return File(result.Data.Content, result.Data.ContentType, result.Data.FileName);
|
||||
else
|
||||
return NotFound("not found image");
|
||||
}
|
||||
[HttpPost("[action]")]
|
||||
public async Task<IActionResult> DownloadPersonPhoto(DownloadFileCriteria criteria)
|
||||
{
|
||||
|
||||
var result = await _personPhoto.DownloadPersonPhoto(criteria.Id, criteria.FileName);
|
||||
|
||||
var result = await _personPhoto.DownloadPersonPhotoPerson(criteria.Id,criteria.PhotoType ,criteria.FileName);
|
||||
if (result.StatusCode > 0)
|
||||
return File(result.Data.Content, result.Data.ContentType, result.Data.FileName);
|
||||
else
|
||||
return NotFound("not found image");
|
||||
}
|
||||
[HttpPost("[action]")]
|
||||
public async Task<IActionResult> DownloadPersonPhoto64(DownloadFileCriteria criteria)
|
||||
{
|
||||
|
||||
var result = await _personPhoto.DownloadPersonPhotoPerson(criteria.Id,criteria.PhotoType ,criteria.FileName);
|
||||
if (result.StatusCode > 0)
|
||||
{
|
||||
byte[] file64 = result.Data.Content;
|
||||
string rval = Convert.ToBase64String(file64);
|
||||
ResultModel<string> retval = new() {
|
||||
Data = rval,
|
||||
StatusCode = 1,
|
||||
Message = ""
|
||||
};
|
||||
return Ok(retval);
|
||||
}
|
||||
else
|
||||
return NotFound("not found image");
|
||||
}
|
||||
[HttpPost("[action]")]
|
||||
public async Task<ActionResult> DeletePersonPhoto(DeleteFileCriteria criteria)
|
||||
@@ -127,8 +158,18 @@ public class FileUploadController : ControllerBase
|
||||
if ( criteria.Id > 0)
|
||||
{
|
||||
|
||||
ret = await _personPhoto.DeletePersonPhoto(criteria.Id);
|
||||
ret = await _personPhoto.DeletePersonPhoto(criteria.Id, criteria.PhotoType);
|
||||
}
|
||||
return Ok(ret);
|
||||
}
|
||||
[HttpPost("[action]")]
|
||||
public async Task<ActionResult> DeletePersonPhotoById(DeleteCriteria<int> criteria)
|
||||
{
|
||||
|
||||
ResultModel<int> ret = new();
|
||||
|
||||
ret = await _personPhoto.DeletePersonPhotoById(criteria.Id);
|
||||
|
||||
return Ok(ret);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ namespace FamilyTreeAPI.Controllers
|
||||
{
|
||||
_repo = repo;
|
||||
}
|
||||
|
||||
[HttpPost("[action]")]
|
||||
public async Task<IActionResult> UploadImage(IFormFile file)
|
||||
{
|
||||
|
||||
@@ -15,16 +15,19 @@ public class DownloadFileCriteria
|
||||
{
|
||||
public string FileName { get; set; }
|
||||
public int Id { get; set; }
|
||||
|
||||
public int PhotoType {get; set;}
|
||||
}
|
||||
public class UploadCriteria
|
||||
{
|
||||
public string FileName { get; set; }
|
||||
public int PersonId { get; set; }
|
||||
public int? PhotoType {get; set;}
|
||||
public int PhotoType {get; set;}
|
||||
public IFormFile File { get; set; }
|
||||
}
|
||||
public class DeleteFileCriteria
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Filename { get; set; }
|
||||
public int PhotoType {get; set;}
|
||||
}
|
||||
@@ -2,6 +2,12 @@
|
||||
{
|
||||
public class Helpers
|
||||
{
|
||||
public static string GetFileExtension(string fileName)
|
||||
{
|
||||
string result = System.IO.Path.GetExtension(fileName);
|
||||
|
||||
return result;
|
||||
}
|
||||
public static string GetFileContent(string extension)
|
||||
{
|
||||
string contentType = "";
|
||||
|
||||
@@ -5,8 +5,9 @@ namespace FamilyTreeAPI.Interface;
|
||||
public interface IPersonPhoto
|
||||
{
|
||||
Task<ResultModel<int>> SaveAsync(UploadCriteria criteria);
|
||||
Task<ResultModel<FileContent>> DownloadPersonPhoto(int id, string? filename);
|
||||
|
||||
Task<ResultModel<int>> DeletePersonPhoto(int id);
|
||||
Task<ResultModel<FileContent>> DownloadPersonPhotoPerson(int personId, int photoType, string filename);
|
||||
Task<ResultModel<FileContent>> DownloadPersonPhotoById(int id);
|
||||
Task<ResultModel<int>> DeletePersonPhoto(int id, int photoType);
|
||||
Task<ResultModel<int>> DeletePersonPhotoById(int id);
|
||||
Task<ResultModel<List<PersonPhotoDto>>> LoadPersonPhoto(int personId);
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ using FamilyTreeAPI.Entities;
|
||||
using FamilyTreeAPI.Helper;
|
||||
using FamilyTreeAPI.Interface;
|
||||
using FamilyTreeAPI.Models;
|
||||
using HotChocolate.CostAnalysis.Types;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace FamilyTreeAPI.Repository
|
||||
@@ -31,12 +32,12 @@ namespace FamilyTreeAPI.Repository
|
||||
dto.PhotoType = model.PhotoType;
|
||||
return dto;
|
||||
}
|
||||
private PersonPhoto FillModel(PersonPhoto model, int personId, string filename)
|
||||
private PersonPhoto FillModel(PersonPhoto model, int personId, int photoType, string filename)
|
||||
{
|
||||
|
||||
model.PersonId = personId;
|
||||
model.Photo = filename;
|
||||
model.PhotoType = System.IO.Path.GetExtension(filename);
|
||||
model.PhotoType = photoType.ToString(); //System.IO.Path.GetExtension(filename);
|
||||
|
||||
return model;
|
||||
}
|
||||
@@ -46,8 +47,8 @@ namespace FamilyTreeAPI.Repository
|
||||
int statuscode = 0;
|
||||
string error = "";//Other
|
||||
string photoType = "2"; //
|
||||
if (criteria.PhotoType.HasValue)
|
||||
photoType = criteria.PhotoType.Value.ToString();
|
||||
if (criteria.PhotoType > 0)
|
||||
photoType = criteria.PhotoType.ToString();
|
||||
HttpContext? httpContext = _httpContext.HttpContext;
|
||||
string loginName = "";
|
||||
if (httpContext != null)
|
||||
@@ -64,8 +65,8 @@ namespace FamilyTreeAPI.Repository
|
||||
PersonPhoto model;
|
||||
|
||||
model = new();
|
||||
model.PhotoType = photoType;
|
||||
model = FillModel(model,criteria.PersonId, formfile.FileName);
|
||||
|
||||
model = FillModel(model,criteria.PersonId, criteria.PhotoType,formfile.FileName);
|
||||
|
||||
using (var stream = new MemoryStream())
|
||||
{
|
||||
@@ -92,15 +93,50 @@ namespace FamilyTreeAPI.Repository
|
||||
Message = error
|
||||
};
|
||||
}
|
||||
|
||||
public async Task<ResultModel<FileContent>> DownloadPersonPhoto(int id, string? filename)
|
||||
public async Task<ResultModel<FileContent>> DownloadPersonPhotoById(int Id)
|
||||
{
|
||||
|
||||
int statusCode = -1;
|
||||
string error = "";
|
||||
string extension = "";
|
||||
PersonPhoto? model = null;
|
||||
FileContent fileContent = new();
|
||||
if (id < 1)
|
||||
try {
|
||||
|
||||
model = await _context.PersonPhotos.FindAsync(Id);
|
||||
|
||||
|
||||
if (model != null)
|
||||
{
|
||||
extension = Helpers.GetFileExtension(model.Photo);
|
||||
fileContent.ContentType = Helpers.GetFileContent(extension);
|
||||
fileContent.Content = (byte[])model.ImagePhoto;
|
||||
fileContent.FileName = model.Photo;
|
||||
statusCode = 1;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
error = e.ToString();
|
||||
statusCode = -1;
|
||||
}
|
||||
return new ResultModel<FileContent>()
|
||||
{
|
||||
Data = fileContent,
|
||||
StatusCode = statusCode,
|
||||
Message = error
|
||||
};
|
||||
}
|
||||
|
||||
public async Task<ResultModel<FileContent>> DownloadPersonPhotoPerson(int personId, int photoType, string filename)
|
||||
{
|
||||
|
||||
int statusCode = -1;
|
||||
string error = "";
|
||||
string extension = "";
|
||||
PersonPhoto? model = null;
|
||||
FileContent fileContent = new();
|
||||
if (personId < 1)
|
||||
{
|
||||
var rlist = await _context.PersonPhotos.Where(x => x.Photo == filename).ToListAsync();
|
||||
if (rlist != null)
|
||||
@@ -111,19 +147,26 @@ namespace FamilyTreeAPI.Repository
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
model = await _context.PersonPhotos.FindAsync(id);
|
||||
var rlist = await _context.PersonPhotos.Where (x => x.PersonId == personId && photoType.ToString() == x.PhotoType).ToListAsync();
|
||||
for ( int i = 0; i < rlist.Count; i++)
|
||||
{
|
||||
model = rlist[i];
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (model != null)
|
||||
{
|
||||
fileContent.ContentType = Helpers.GetFileContent(model.PhotoType);
|
||||
extension = Helpers.GetFileExtension(model.Photo);
|
||||
fileContent.ContentType = Helpers.GetFileContent(extension);
|
||||
fileContent.Content = (byte[])model.ImagePhoto;
|
||||
fileContent.FileName = model.Photo;
|
||||
statusCode = 1;
|
||||
}
|
||||
|
||||
return new ResultModel<FileContent>()
|
||||
{
|
||||
Data = fileContent,
|
||||
@@ -132,21 +175,70 @@ namespace FamilyTreeAPI.Repository
|
||||
};
|
||||
}
|
||||
|
||||
public async Task<ResultModel<int>> DeletePersonPhoto(int id)
|
||||
public async Task<ResultModel<int>> DeletePersonPhoto(int personId, int photoType)
|
||||
{
|
||||
int result = default(int);
|
||||
int statuscode = 0;
|
||||
string error = "";
|
||||
PersonPhoto? model;
|
||||
try
|
||||
{
|
||||
PersonPhoto? model = await _context.PersonPhotos.FindAsync(id);
|
||||
if (model != null)
|
||||
if (photoType < 1)
|
||||
{
|
||||
List<PersonPhoto> list = await _context.PersonPhotos.Where ( x => x.PersonId == personId).ToListAsync();
|
||||
for (int i = 0; i< list.Count; i++)
|
||||
{
|
||||
model = list[i];
|
||||
_context.PersonPhotos.Remove(model);
|
||||
await _context.SaveChangesAsync();
|
||||
statuscode = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
List<PersonPhoto> list = await _context.PersonPhotos.Where ( x => x.PersonId == personId && x.PhotoType == photoType.ToString()).ToListAsync();
|
||||
for (int i = 0; i< list.Count; i++)
|
||||
{
|
||||
model = list[i];
|
||||
_context.PersonPhotos.Remove(model);
|
||||
await _context.SaveChangesAsync();
|
||||
statuscode = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
error = ex.ToString();
|
||||
statuscode = -1;
|
||||
}
|
||||
//var dto = await Task.Run(() => result);
|
||||
return new ResultModel<int>()
|
||||
{
|
||||
Data = result,
|
||||
StatusCode = statuscode,
|
||||
Message = error
|
||||
};
|
||||
}
|
||||
|
||||
public async Task<ResultModel<int>> DeletePersonPhotoById(int id)
|
||||
{
|
||||
int result = default(int);
|
||||
int statuscode = 0;
|
||||
string error = "";
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
PersonPhoto? model = await _context.PersonPhotos.FindAsync(id);
|
||||
if (model != null)
|
||||
{
|
||||
|
||||
_context.PersonPhotos.Remove(model);
|
||||
await _context.SaveChangesAsync();
|
||||
statuscode = 1;
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
error = ex.ToString();
|
||||
|
||||
@@ -283,7 +283,7 @@ public partial class PersonRepository : IPerson
|
||||
node.Key = item.Id.ToString();
|
||||
node.Type = type;
|
||||
if (item.Image != null)
|
||||
node.Data.Image = await LoadPersonImage(item.Id,item.Image);
|
||||
node.Data.Image = await LoadPersonImage(item.Id, (int) enumPhotoType.Profile, item.Image);
|
||||
|
||||
node.Icon = "T";
|
||||
node.StyleClass = getStyleClass(node.Icon);
|
||||
@@ -392,7 +392,7 @@ public partial class PersonRepository : IPerson
|
||||
citem.Data = new();
|
||||
citem.Label = pName;
|
||||
if (image != null)
|
||||
citem.Data.Image = await LoadPersonImage(personId,image);
|
||||
citem.Data.Image = await LoadPersonImage(personId, (int) enumPhotoType.Profile, image);
|
||||
|
||||
citem.Icon = "P";
|
||||
|
||||
@@ -413,7 +413,7 @@ public partial class PersonRepository : IPerson
|
||||
child.Type = type;
|
||||
image = dto.Image;
|
||||
if (image != null)
|
||||
child.Data.Image = await LoadPersonImage(dto.Id,image);
|
||||
child.Data.Image = await LoadPersonImage(dto.Id,(int) enumPhotoType.Profile, image);
|
||||
child.Icon = "C";
|
||||
child.StyleClass = getStyleClass(child.Icon);
|
||||
child.Label = dto.FirstName;
|
||||
@@ -750,18 +750,21 @@ public partial class PersonRepository : IPerson
|
||||
return result;
|
||||
}
|
||||
|
||||
private async Task<string> LoadPersonImage(int personId,string filename)
|
||||
private async Task<string> LoadPersonImage(int personId, int photoType, string filename)
|
||||
{
|
||||
string result = "";
|
||||
|
||||
// DownloadFileCriteria criteria = new() { FileName = filename };
|
||||
|
||||
var resultModel = await _personPhoto.DownloadPersonPhoto(personId, filename);
|
||||
//if (resultModel.Data.Content)
|
||||
var resultModel = await _personPhoto.DownloadPersonPhotoPerson(personId, photoType , filename);
|
||||
if (resultModel.StatusCode > 0)
|
||||
{
|
||||
|
||||
string base64String = Convert.ToBase64String(resultModel.Data.Content);
|
||||
|
||||
if (!string.IsNullOrEmpty(base64String))
|
||||
result = "data:image/png;base64," + base64String;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
"AppSettings": {
|
||||
"Secret": "Super Secret SIGN AND VERIFY JWT TOKENS, BEARER TOKEN USE WHEN CALLING THIS API.",
|
||||
"iSQLConnectionString_i": "host=localhost;port=5432;database=FamilyTreeDB_prod;username=postgres;password=Positive~1;",
|
||||
"iSQLConnectionString_i": "host=localhost;port=5432;database=familytreedb;username=postgres;password=Positive~1;",
|
||||
"SQLConnectionString": "host=127.0.0.1;port=5432;database=familytreedb;username=postgres;password=Positive~1;",
|
||||
|
||||
"ImageFolder": "/temp/Family",
|
||||
|
||||
Generated
+2486
-3001
File diff suppressed because it is too large
Load Diff
+18
-18
@@ -23,35 +23,35 @@
|
||||
"private": true,
|
||||
"packageManager": "npm@11.6.4",
|
||||
"dependencies": {
|
||||
"@angular/common": "^21.0.0",
|
||||
"@angular/compiler": "^21.0.0",
|
||||
"@angular/core": "^21.0.0",
|
||||
"@angular/forms": "^21.0.0",
|
||||
"@angular/platform-browser": "^21.0.0",
|
||||
"@angular/router": "^21.0.0",
|
||||
"@ngrx/effects": "^21.0.1",
|
||||
"@ngrx/store": "^21.0.1",
|
||||
"@ngrx/store-devtools": "^21.0.1",
|
||||
"@primeuix/themes": "^2.0.2",
|
||||
"@angular/common": "^22.0.0",
|
||||
"@angular/compiler": "^22.0.0",
|
||||
"@angular/core": "^22.0.0",
|
||||
"@angular/forms": "^22.0.0",
|
||||
"@angular/platform-browser": "^22.0.0",
|
||||
"@angular/router": "^22.0.0",
|
||||
"@ngrx/effects": "^22.0.0",
|
||||
"@ngrx/store": "^22.0.0",
|
||||
"@ngrx/store-devtools": "^22.0.0",
|
||||
"@openng/optimus-ui": "^2.0.2",
|
||||
"@tailwindcss/postcss": "^4.1.17",
|
||||
"file-saver": "^2.0.5",
|
||||
"moment": "^2.30.1",
|
||||
"postcss": "^8.5.6",
|
||||
"primeicons": "^7.0.0",
|
||||
"primeng": "^21.0.1",
|
||||
"rxjs": "~7.8.0",
|
||||
"tailwindcss": "^4.1.17",
|
||||
"tailwindcss-primeui": "^0.6.1",
|
||||
"tslib": "^2.3.0",
|
||||
"xlsx": "^0.18.5"
|
||||
"xlsx": "^0.18.5",
|
||||
"@openng/icons": "^1.0.0",
|
||||
"@openng/optimus-ui-themes": "^2.0.2",
|
||||
"@openng/optimus-ui-tailwindcss": "^2.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular/build": "^21.2.7",
|
||||
"@angular/cli": "^21.2.7",
|
||||
"@angular/compiler-cli": "^21.0.0",
|
||||
"@angular/build": "^22.0.0",
|
||||
"@angular/cli": "^22.0.0",
|
||||
"@angular/compiler-cli": "^22.0.0",
|
||||
"@types/file-saver": "^2.0.7",
|
||||
"jsdom": "^27.1.0",
|
||||
"typescript": "~5.9.2",
|
||||
"typescript": "~6.0.0",
|
||||
"vitest": "^4.0.8"
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ApplicationConfig, provideBrowserGlobalErrorListeners ,
|
||||
provideAppInitializer} from '@angular/core';
|
||||
import { provideRouter, withComponentInputBinding } from '@angular/router';
|
||||
import { providePrimeNG } from 'primeng/config';
|
||||
import { provideOptimus } from '@openng/optimus-ui/config';
|
||||
import { provideHttpClient, withInterceptors } from '@angular/common/http';
|
||||
import { ConfirmationService, MessageService } from 'primeng/api';
|
||||
import { ConfirmationService, MessageService } from '@openng/optimus-ui/api';
|
||||
import { routes } from './app.routes';
|
||||
import MyPreset from './mythem';
|
||||
import { JwtInterceptor, ErrorInterceptor, initializeApp } from './shares';
|
||||
@@ -29,13 +29,13 @@ export const appConfig: ApplicationConfig = {
|
||||
provideAppInitializer(initializeApp()),
|
||||
provideHttpClient(withInterceptors([JwtInterceptor, ErrorInterceptor])),
|
||||
provideRouter(routes, withComponentInputBinding()),
|
||||
providePrimeNG({
|
||||
provideOptimus({
|
||||
theme: {
|
||||
preset: MyPreset,
|
||||
options: {
|
||||
cssLayer: {
|
||||
name: 'primeng',
|
||||
order: 'theme, base, primeng'
|
||||
name: 'optimus',
|
||||
order: 'theme, base, optimus'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -2,8 +2,8 @@
|
||||
import { Component, signal } from '@angular/core';
|
||||
import { RouterOutlet } from '@angular/router';
|
||||
import { ToolbarComponent } from './toolbar/toolbar.component';
|
||||
import { ToastModule } from 'primeng/toast';
|
||||
import { ConfirmDialogModule } from 'primeng/confirmdialog';
|
||||
import { ToastModule } from '@openng/optimus-ui/toast';
|
||||
import { ConfirmDialogModule } from '@openng/optimus-ui/confirmdialog';
|
||||
@Component({
|
||||
selector: 'app-root',
|
||||
imports: [RouterOutlet,ToastModule,ToolbarComponent,ConfirmDialogModule],
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
import { ChangeDetectorRef, Component, inject, Inject, OnDestroy, OnInit, signal } from '@angular/core';
|
||||
import { DynamicDialogModule, DynamicDialogRef ,DynamicDialogConfig} from 'primeng/dynamicdialog';
|
||||
import { DynamicDialogModule, DynamicDialogRef ,DynamicDialogConfig} from '@openng/optimus-ui/dynamicdialog';
|
||||
|
||||
import { LookupEdit } from '../models';
|
||||
import { UntypedFormBuilder, Validators, ReactiveFormsModule } from '@angular/forms';
|
||||
import { Subject, Subscription } from 'rxjs';
|
||||
import { ConfirmationService, MessageService } from 'primeng/api';
|
||||
import { ConfirmationService, MessageService } from '@openng/optimus-ui/api';
|
||||
import { LookupService } from '../shares';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { CheckboxModule } from 'primeng/checkbox';
|
||||
import { InputTextModule } from 'primeng/inputtext';
|
||||
import { ButtonModule } from 'primeng/button';
|
||||
import { CheckboxModule } from '@openng/optimus-ui/checkbox';
|
||||
import { InputTextModule } from '@openng/optimus-ui/inputtext';
|
||||
import { ButtonModule } from '@openng/optimus-ui/button';
|
||||
@Component({
|
||||
selector: 'add-photo',
|
||||
imports: [CommonModule, ReactiveFormsModule,
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
<th>Id</th>
|
||||
<th pSortableColumn="description">Description<p-sortIcon field="description"></p-sortIcon>
|
||||
</th>
|
||||
|
||||
<th>Photo Type</th>
|
||||
<th>Action</th>
|
||||
|
||||
</tr>
|
||||
@@ -25,6 +25,7 @@
|
||||
<tr>
|
||||
<td>{{item.id}}</td>
|
||||
<td >{{item.photo}}</td>
|
||||
<td>{{item.photoType}}</td>
|
||||
<td>
|
||||
|
||||
<button pButton type="button" icon="pi pi-times"
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
import { Component, OnInit, OnDestroy, inject, ChangeDetectorRef, signal, output } from '@angular/core';
|
||||
import { catchError, EMPTY, finalize, Subscription } from 'rxjs';
|
||||
import { CommonUtilities, HttpUtility, LookupService } from '../shares';
|
||||
import { DialogService ,DynamicDialogConfig,DynamicDialogModule, DynamicDialogRef} from 'primeng/dynamicdialog';
|
||||
import { ConfirmationService, MessageService } from 'primeng/api';
|
||||
import { DialogService ,DynamicDialogConfig,DynamicDialogModule, DynamicDialogRef} from '@openng/optimus-ui/dynamicdialog';
|
||||
import { ConfirmationService, MessageService } from '@openng/optimus-ui/api';
|
||||
import { AddPhoto } from './add.photo';
|
||||
import { PersonPhotoDto } from '../models';
|
||||
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { TableModule } from 'primeng/table';
|
||||
import { ButtonModule } from 'primeng/button';
|
||||
import { TooltipModule } from 'primeng/tooltip';
|
||||
import { TableModule } from '@openng/optimus-ui/table';
|
||||
import { ButtonModule } from '@openng/optimus-ui/button';
|
||||
import { TooltipModule } from '@openng/optimus-ui/tooltip';
|
||||
import { AuthenticationService } from '../user-services';
|
||||
import { HttpResponse } from '@angular/common/http';
|
||||
import { PersonService } from '../person';
|
||||
@@ -69,11 +69,11 @@ export class PhotoList implements OnInit, OnDestroy {
|
||||
downloadAttachment(id: number): void {
|
||||
//GetReportFile
|
||||
|
||||
let typeofCall = "personId_" + id.toString();
|
||||
let typeofCall = "personPhotoId_" + id.toString();
|
||||
|
||||
let criteria:any ={id, fileName:''};
|
||||
let criteria: any = { id };
|
||||
this.downloadFile.set(false);
|
||||
this.http.getFileResponse("api/FileUpload/downloadPersonPhoto", criteria).pipe(
|
||||
this.http.getFileResponse("api/FileUpload/DownloadPersonPhotoById", criteria).pipe(
|
||||
catchError(err => {
|
||||
console.error(err.message);
|
||||
return EMPTY;
|
||||
@@ -128,7 +128,7 @@ doRemove(id: number): void {
|
||||
}
|
||||
else
|
||||
{
|
||||
const deletepersonPhoto$ = this.personService.deletePersonPhotoFile(id);
|
||||
const deletepersonPhoto$ = this.personService.deletePersonPhotoFileById(id);
|
||||
this.subscription.add(deletepersonPhoto$.subscribe(
|
||||
{
|
||||
next: x => {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { Component, inject, OnInit } from '@angular/core';
|
||||
import { ButtonModule } from 'primeng/button';
|
||||
import { FileUploadEvent, FileUploadModule } from 'primeng/fileupload';
|
||||
import { MessageService } from 'primeng/api';
|
||||
import { FileUpload } from 'primeng/fileupload';
|
||||
import { ToastModule } from 'primeng/toast';
|
||||
import { ButtonModule } from '@openng/optimus-ui/button';
|
||||
import { FileUploadEvent, FileUploadModule } from '@openng/optimus-ui/fileupload';
|
||||
import { MessageService } from '@openng/optimus-ui/api';
|
||||
import { FileUpload } from '@openng/optimus-ui/fileupload';
|
||||
import { ToastModule } from '@openng/optimus-ui/toast';
|
||||
import { AppSettingService } from '../shares';
|
||||
/*
|
||||
interface UploadEvent {
|
||||
|
||||
@@ -5,13 +5,13 @@ import { first } from 'rxjs/operators';
|
||||
|
||||
import { AuthenticationService } from '../user-services';
|
||||
|
||||
import { ConfirmationService } from 'primeng/api';
|
||||
import { ConfirmationService } from '@openng/optimus-ui/api';
|
||||
import { Subject, Subscription } from 'rxjs';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { CardModule } from 'primeng/card';
|
||||
import { CardModule } from '@openng/optimus-ui/card';
|
||||
import { ReactiveFormsModule, FormsModule } from '@angular/forms';
|
||||
import { ButtonModule } from 'primeng/button';
|
||||
import { InputTextModule } from 'primeng/inputtext';
|
||||
import { ButtonModule } from '@openng/optimus-ui/button';
|
||||
import { InputTextModule } from '@openng/optimus-ui/inputtext';
|
||||
|
||||
import { AppSettingService, Utils } from '../shares';
|
||||
@Component({
|
||||
|
||||
@@ -15,7 +15,10 @@ export enum mState {
|
||||
Modified = 1,
|
||||
New =2,
|
||||
};
|
||||
|
||||
export enum enumPhoto {
|
||||
Profile = 1,
|
||||
Other = 2
|
||||
}
|
||||
export enum userRole {
|
||||
Normal = 1,
|
||||
Admin = 2,
|
||||
|
||||
+28
-37
@@ -1,51 +1,41 @@
|
||||
|
||||
|
||||
//mypreset.ts
|
||||
import { definePreset } from '@primeuix/themes';
|
||||
import Aura from '@primeuix/themes/aura';
|
||||
import { primitive } from '@primeuix/themes/aura/base';
|
||||
import { definePreset } from '@openng/optimus-ui-themes';
|
||||
import Aura from '@openng/optimus-ui-themes/aura';
|
||||
|
||||
const MyPreset = definePreset(Aura, {
|
||||
semantic: {
|
||||
colorScheme: {
|
||||
primitive: {
|
||||
cyan: {
|
||||
50: '{cyan.50}',
|
||||
100: '{cyan.100}',
|
||||
200: '{cyan.200}',
|
||||
300: '{cyan.300}',
|
||||
400: '{cyan.400}',
|
||||
500: '{cyan.500}',
|
||||
}
|
||||
|
||||
},
|
||||
primary: {
|
||||
50: '{zinc.50}',
|
||||
100: '{zinc.100}',
|
||||
200: '{zinc.200}',
|
||||
300: '{zinc.300}',
|
||||
400: '{zinc.400}',
|
||||
500: '{zinc.500}',
|
||||
600: '{zinc.600}',
|
||||
700: '{zinc.700}',
|
||||
800: '{zinc.800}',
|
||||
900: '{zinc.900}',
|
||||
950: '{zinc.950}'
|
||||
50: '{blue.50}',
|
||||
100: '{blue.100}',
|
||||
200: '{blue.200}',
|
||||
300: '{blue.300}',
|
||||
400: '{blue.400}',
|
||||
500: '{blue.500}',
|
||||
600: '{blue.600}',
|
||||
700: '{blue.700}',
|
||||
800: '{blue.800}',
|
||||
900: '{blue.900}',
|
||||
950: '{blue.950}'
|
||||
},
|
||||
colorScheme: {
|
||||
|
||||
|
||||
light: {
|
||||
surface: {
|
||||
0: '#ffffff',
|
||||
50: '{zinc.50}',
|
||||
100: '{zinc.100}',
|
||||
200: '{zinc.200}',
|
||||
300: '{zinc.300}',
|
||||
400: '{zinc.400}',
|
||||
500: '{zinc.500}',
|
||||
600: '{zinc.600}',
|
||||
700: '{zinc.700}',
|
||||
800: '{zinc.800}',
|
||||
900: '{zinc.900}',
|
||||
950: '{zinc.950}'
|
||||
50: '{blue.50}',
|
||||
100: '{blue.100}',
|
||||
200: '{blue.200}',
|
||||
300: '{blue.300}',
|
||||
400: '{blue.400}',
|
||||
500: '{blue.500}',
|
||||
600: '{blue.600}',
|
||||
700: '{blue.700}',
|
||||
800: '{blue.800}',
|
||||
900: '{blue.900}',
|
||||
950: '{blue.950}'
|
||||
}
|
||||
},
|
||||
dark: {
|
||||
@@ -65,6 +55,7 @@ const MyPreset = definePreset(Aura, {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
import { Component, OnInit, OnDestroy, inject, ChangeDetectorRef, signal} from '@angular/core';
|
||||
|
||||
import { StaffView ,StaffSearch, Person, RelationShip } from '../models';
|
||||
import { OrganizationChartModule } from 'primeng/organizationchart';
|
||||
import { OrganizationChartModule } from '@openng/optimus-ui/organizationchart';
|
||||
|
||||
import { take } from 'rxjs/operators';
|
||||
import { Subscription } from 'rxjs';
|
||||
import { PersonService } from './person.service';
|
||||
import { TableModule } from 'primeng/table';
|
||||
import { TableModule } from '@openng/optimus-ui/table';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { ButtonModule } from 'primeng/button';
|
||||
import { TreeNode } from 'primeng/api';
|
||||
import { InputTextModule } from 'primeng/inputtext';
|
||||
import { DialogService, DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';
|
||||
import { ButtonModule } from '@openng/optimus-ui/button';
|
||||
import { TreeNode } from '@openng/optimus-ui/api';
|
||||
import { InputTextModule } from '@openng/optimus-ui/inputtext';
|
||||
import { DialogService, DynamicDialogConfig, DynamicDialogRef } from '@openng/optimus-ui/dynamicdialog';
|
||||
import { PersonEdit } from './person.edit';
|
||||
import { MessageService } from 'primeng/api';
|
||||
import { TreeModule, TreeNodeDoubleClickEvent, TreeNodeSelectEvent } from 'primeng/tree';
|
||||
import { MessageService } from '@openng/optimus-ui/api';
|
||||
import { TreeModule, TreeNodeDoubleClickEvent, TreeNodeSelectEvent } from '@openng/optimus-ui/tree';
|
||||
import { Utils } from '../shares';
|
||||
import { PopoverModule } from 'primeng/popover';
|
||||
import { PopoverModule } from '@openng/optimus-ui/popover';
|
||||
|
||||
@Component({
|
||||
selector: 'family-orga',
|
||||
@@ -64,7 +64,7 @@ export class FamilyOrga implements OnInit, OnDestroy{
|
||||
{
|
||||
expanded: true,
|
||||
type: 'person',
|
||||
styleClass: 'bg-indigo-500 text-white',
|
||||
styleClass: 'bg-blue-500 text-white',
|
||||
data: {
|
||||
image: 'https://primefaces.org/cdn/primeng/images/demo/avatar/amyelsner.png',
|
||||
name: 'Amy Elsner',
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
import { Component, OnInit, OnDestroy, inject, ChangeDetectorRef, signal} from '@angular/core';
|
||||
|
||||
import { StaffView ,StaffSearch, Person } from '../models';
|
||||
import { OrganizationChartModule } from 'primeng/organizationchart';
|
||||
import { OrganizationChartModule } from '@openng/optimus-ui/organizationchart';
|
||||
|
||||
import { take } from 'rxjs/operators';
|
||||
import { Subscription } from 'rxjs';
|
||||
import { Router } from '@angular/router';
|
||||
import { PersonService } from './person.service';
|
||||
import { AuthenticationService } from '../user-services';
|
||||
import { TableModule } from 'primeng/table';
|
||||
import { TableModule } from '@openng/optimus-ui/table';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { ButtonModule } from 'primeng/button';
|
||||
import { TreeNode } from 'primeng/api';
|
||||
import { InputTextModule } from 'primeng/inputtext';
|
||||
import { DialogService } from 'primeng/dynamicdialog';
|
||||
import { ButtonModule } from '@openng/optimus-ui/button';
|
||||
import { TreeNode } from '@openng/optimus-ui/api';
|
||||
import { InputTextModule } from '@openng/optimus-ui/inputtext';
|
||||
import { DialogService } from '@openng/optimus-ui/dynamicdialog';
|
||||
import { PersonEdit } from './person.edit';
|
||||
import { MessageService } from 'primeng/api';
|
||||
import { CheckboxModule } from 'primeng/checkbox';
|
||||
import { TreeModule, TreeNodeDoubleClickEvent, TreeNodeSelectEvent } from 'primeng/tree';
|
||||
import { MessageService } from '@openng/optimus-ui/api';
|
||||
import { CheckboxModule } from '@openng/optimus-ui/checkbox';
|
||||
import { TreeModule, TreeNodeDoubleClickEvent, TreeNodeSelectEvent } from '@openng/optimus-ui/tree';
|
||||
import { Utils } from '../shares';
|
||||
|
||||
@Component({
|
||||
|
||||
@@ -8,17 +8,17 @@ import { Subscription } from 'rxjs';
|
||||
import { Router } from '@angular/router';
|
||||
import { PersonService } from './person.service';
|
||||
import { AuthenticationService } from '../user-services';
|
||||
import { Table, TableModule } from 'primeng/table';
|
||||
import { Table, TableModule } from '@openng/optimus-ui/table';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { ButtonModule } from 'primeng/button';
|
||||
import { InputTextModule } from 'primeng/inputtext';
|
||||
import { DialogService } from 'primeng/dynamicdialog';
|
||||
import { ButtonModule } from '@openng/optimus-ui/button';
|
||||
import { InputTextModule } from '@openng/optimus-ui/inputtext';
|
||||
import { DialogService } from '@openng/optimus-ui/dynamicdialog';
|
||||
import { PersonEdit } from './person.edit';
|
||||
import { ConfirmationService, MenuItem, MessageService } from 'primeng/api';
|
||||
import { IconFieldModule } from 'primeng/iconfield';
|
||||
import { InputIconModule } from 'primeng/inputicon';
|
||||
import { Menu, MenuModule } from 'primeng/menu';
|
||||
import { ConfirmationService, MenuItem, MessageService } from '@openng/optimus-ui/api';
|
||||
import { IconFieldModule } from '@openng/optimus-ui/iconfield';
|
||||
import { InputIconModule } from '@openng/optimus-ui/inputicon';
|
||||
import { Menu, MenuModule } from '@openng/optimus-ui/menu';
|
||||
import { FamilyOrga } from './family.orga';
|
||||
|
||||
import { saveAs } from 'file-saver';
|
||||
|
||||
@@ -1,27 +1,28 @@
|
||||
import { ChangeDetectorRef, Component, inject, OnDestroy, OnInit, signal, ViewChild } from '@angular/core';
|
||||
import { Router, ActivatedRoute } from '@angular/router';
|
||||
import {DialogService, DynamicDialogRef} from 'primeng/dynamicdialog';
|
||||
import {DynamicDialogConfig} from 'primeng/dynamicdialog';
|
||||
import {DialogService, DynamicDialogRef} from '@openng/optimus-ui/dynamicdialog';
|
||||
import {DynamicDialogConfig} from '@openng/optimus-ui/dynamicdialog';
|
||||
import { FormControl, ReactiveFormsModule, UntypedFormBuilder, Validators } from '@angular/forms';
|
||||
import { Subject, Subscription} from 'rxjs';
|
||||
import { ConfirmationService, MessageService } from 'primeng/api';
|
||||
import { DatePickerModule } from 'primeng/datepicker';
|
||||
import { Code, RelationShipView, Person, mState, RelationShip, PersonPhotoDto} from '../models';
|
||||
import { ConfirmationService, MessageService } from '@openng/optimus-ui/api';
|
||||
import { DatePickerModule } from '@openng/optimus-ui/datepicker';
|
||||
import { Code, RelationShipView, Person, mState, RelationShip, PersonPhotoDto, enumPhoto } from '../models';
|
||||
import { AppSettingService, LookupService, Utils } from '../shares';
|
||||
import { PersonService } from './person.service';
|
||||
import { ButtonModule } from 'primeng/button';
|
||||
import { SelectModule } from 'primeng/select';
|
||||
import { CheckboxModule } from 'primeng/checkbox';
|
||||
import { InputTextModule } from 'primeng/inputtext';
|
||||
import { ButtonModule } from '@openng/optimus-ui/button';
|
||||
import { SelectModule } from '@openng/optimus-ui/select';
|
||||
import { CheckboxModule } from '@openng/optimus-ui/checkbox';
|
||||
import { InputTextModule } from '@openng/optimus-ui/inputtext';
|
||||
import moment from 'moment';
|
||||
import { HttpEvent } from '@angular/common/http';
|
||||
import { TableModule } from 'primeng/table';
|
||||
import { TableModule } from '@openng/optimus-ui/table';
|
||||
import { Pickperson } from '../pickperson/pickperson';
|
||||
import { ImageDisplayComponent } from '../pickperson/image.display';
|
||||
import { TooltipModule } from 'primeng/tooltip';
|
||||
import { AutoFocusModule } from 'primeng/autofocus';
|
||||
import { TooltipModule } from '@openng/optimus-ui/tooltip';
|
||||
import { AutoFocusModule } from '@openng/optimus-ui/autofocus';
|
||||
import { DomSanitizer } from '@angular/platform-browser';
|
||||
import { PhotoList } from '../attachphoto/photolist';
|
||||
import { InputNumberDesignTokens } from '@openng/optimus-ui-themes/types/inputnumber';
|
||||
|
||||
export interface FileUploadEvent {
|
||||
originalEvent: HttpEvent<any>;
|
||||
@@ -190,9 +191,9 @@ doDeleteFile(): void {
|
||||
this.profileFile = null;
|
||||
}
|
||||
doDeleteImage(fileName:string) : void {
|
||||
const familyId = this.adminuserForm.value.id;
|
||||
const data = { fileName, familyId };
|
||||
const delete$ = this.personService.deleteUploadFile(data);
|
||||
const personId = this.adminuserForm.value.id;
|
||||
const photoType = enumPhoto.Profile;
|
||||
const delete$ = this.personService.deletePersonPhotoFile(personId, photoType);
|
||||
this.subscription.add(delete$.subscribe(
|
||||
{
|
||||
next: x => {
|
||||
@@ -307,6 +308,8 @@ doViewImage(imageName:string): void {
|
||||
const ref = this.dialogService.open(ImageDisplayComponent, {
|
||||
data: {
|
||||
imageName,
|
||||
personId: this._id,
|
||||
photyType: enumPhoto.Profile
|
||||
},
|
||||
header: 'View Image',
|
||||
draggable: true,
|
||||
@@ -358,7 +361,7 @@ assignValue(item:Person): void {
|
||||
}
|
||||
if (item.image && item.image.length > 0)
|
||||
{
|
||||
this.loadImage(item.image);
|
||||
this.loadImage(item.image, item.id, enumPhoto.Profile);
|
||||
}
|
||||
// disable use false//true for not disable.
|
||||
this.subChanged$.next(true);
|
||||
@@ -367,8 +370,10 @@ assignValue(item:Person): void {
|
||||
// convenience getter for easy access in form fields
|
||||
get f() { return this.adminuserForm.controls;}
|
||||
|
||||
loadImage(fileName: string| null): void {
|
||||
const download = this.personService.downloadFile(fileName!);
|
||||
loadImage(fileName: string | null,
|
||||
personId: number, photoType: number): void {
|
||||
if (fileName) {
|
||||
const download = this.personService.downloadPersonPhoto64(fileName, personId, photoType);
|
||||
this.subscription.add(download.subscribe({
|
||||
next: x => {
|
||||
if (x.statusCode == 1)
|
||||
@@ -385,6 +390,8 @@ assignValue(item:Person): void {
|
||||
error: e => console.error("error in download image", e)
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
displayIamge64(baseImage: string): void
|
||||
{
|
||||
const changeUrl = (this.sanitizer.bypassSecurityTrustResourceUrl(baseImage) as any).changingThisBreaksApplicationSecurity;
|
||||
|
||||
@@ -4,7 +4,7 @@ import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
|
||||
import { Observable } from 'rxjs';
|
||||
import { Staff,StaffSearch, StaffView, ResultModel,ConfigureUrl,ResetPassword, Person, PersonContainer, RelationShip } from '../models';
|
||||
import { AppSettingService } from '../shares';
|
||||
import { TreeNode } from 'primeng/api';
|
||||
import { TreeNode } from '@openng/optimus-ui/api';
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class PersonService {
|
||||
@@ -77,33 +77,60 @@ export class PersonService {
|
||||
const baseUrl = this.appSetting.appSetting.baseUrl + "/" + ConfigureUrl.personUrl + "/UploadImage";
|
||||
return this.http.post<ResultModel<string>>(baseUrl, data);
|
||||
}
|
||||
downloadFile(imageName: string): Observable<ResultModel<string>> {
|
||||
downloadFile_dontusethis(imageName: string, personId: number,
|
||||
photoType: number): Observable<ResultModel<string>> {
|
||||
const baseUrl = this.appSetting.appSetting.baseUrl + "/" + ConfigureUrl.FileUploadUrl + "/DownloadFile";
|
||||
const data = {
|
||||
fileName: imageName
|
||||
fileName: imageName,
|
||||
id: personId,
|
||||
photoType
|
||||
};
|
||||
return this.http.post<ResultModel<string>>(baseUrl, data);
|
||||
}
|
||||
deleteUploadFile(data: any): Observable<ResultModel<number>> {
|
||||
deleteUploadFile_dotnotuse(data: any): Observable<ResultModel<number>> {
|
||||
//data ={filename};
|
||||
const baseUrl = this.appSetting.appSetting.baseUrl + "/" + ConfigureUrl.personUrl + "/DeleteUploadFile";
|
||||
return this.http.post<ResultModel<number>>(baseUrl, data);
|
||||
}
|
||||
deletePersonPhotoFile(id: number): Observable<ResultModel<number>> {
|
||||
const data ={id, fileName:''};
|
||||
deletePersonPhotoFile(personId: number, photoType: number): Observable<ResultModel<number>> {
|
||||
const data = {
|
||||
id: personId,
|
||||
fileName: '',
|
||||
photoType
|
||||
};
|
||||
const baseUrl = this.appSetting.appSetting.baseUrl + "/" + ConfigureUrl.FileUploadUrl + "/DeletePersonPhoto";
|
||||
return this.http.post<ResultModel<number>>(baseUrl, data);
|
||||
}
|
||||
deletePersonPhotoFileById(id: number): Observable<ResultModel<number>> {
|
||||
const data = {
|
||||
id
|
||||
};
|
||||
const baseUrl = this.appSetting.appSetting.baseUrl + "/" + ConfigureUrl.FileUploadUrl + "/DeletePersonPhotoById";
|
||||
return this.http.post<ResultModel<number>>(baseUrl, data);
|
||||
}
|
||||
savePersonPhotoList(data:FormData): Observable<ResultModel<number>> {
|
||||
const baseUrl = this.appSetting.appSetting.baseUrl + "/" + ConfigureUrl.FileUploadUrl + "/SavePersonPhoto";
|
||||
return this.http.post<ResultModel<number>>(baseUrl, data);
|
||||
}
|
||||
downloadPersonPhoto(id: number): Observable<ResultModel<string>> {
|
||||
const baseUrl = this.appSetting.appSetting.baseUrl + "/" + ConfigureUrl.FileUploadUrl + "/DownloadPersonPhoto";
|
||||
|
||||
downloadPersonPhoto64(imageName: string, personId: number,
|
||||
photoType: number): Observable<ResultModel<string>> {
|
||||
const baseUrl = this.appSetting.appSetting.baseUrl + "/" + ConfigureUrl.FileUploadUrl + "/DownloadPersonPhoto64";
|
||||
const data = {
|
||||
id,
|
||||
fileName: ''
|
||||
id: personId,
|
||||
photoType,
|
||||
fileName: imageName
|
||||
};
|
||||
return this.http.post<ResultModel<string>>(baseUrl, data);
|
||||
}
|
||||
downloadPersonPhoto(imageName: string, personId: number,
|
||||
photoType: number): Observable<any> {
|
||||
const baseUrl = this.appSetting.appSetting.baseUrl + "/" + ConfigureUrl.FileUploadUrl + "/DownloadPersonPhoto";
|
||||
const data = {
|
||||
id: personId,
|
||||
photoType,
|
||||
fileName: imageName
|
||||
};
|
||||
return this.http.post<any>(baseUrl, data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,8 +5,8 @@ import { PersonService } from '../person';
|
||||
import { Subscription } from 'rxjs';
|
||||
import { ActivatedRoute } from '@angular/router';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { ButtonModule } from 'primeng/button';
|
||||
import { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';
|
||||
import { ButtonModule } from '@openng/optimus-ui/button';
|
||||
import { DynamicDialogConfig, DynamicDialogRef } from '@openng/optimus-ui/dynamicdialog';
|
||||
|
||||
@Component({
|
||||
selector: 'app-image-display',
|
||||
@@ -28,11 +28,13 @@ export class ImageDisplayComponent implements OnInit, OnDestroy {
|
||||
ngOnInit(): void {
|
||||
|
||||
const imageName = this.config.data.imageName;
|
||||
this.loadImage(imageName);
|
||||
const personId = this.config.data.personId;
|
||||
const photoType = this.config.data.photyType;
|
||||
this.loadImage(imageName, personId, photoType);
|
||||
|
||||
}
|
||||
loadImage(fileName: string| null): void {
|
||||
const download = this.personService.downloadFile(fileName!);
|
||||
loadImage(fileName: string | null, personId: number, photoType: number): void {
|
||||
const download = this.personService.downloadPersonPhoto64(fileName!, personId, photoType);
|
||||
this.subscription.add(download.subscribe({
|
||||
next: x => {
|
||||
if (x.statusCode == 1)
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { Component, OnDestroy, OnInit, signal, ViewChild } from '@angular/core';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { Table, TableModule } from 'primeng/table';
|
||||
import { Table, TableModule } from '@openng/optimus-ui/table';
|
||||
import { Person } from '../models';
|
||||
import { IconFieldModule } from 'primeng/iconfield';
|
||||
import { InputIconModule } from 'primeng/inputicon';
|
||||
import { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';
|
||||
import { ButtonModule } from 'primeng/button';
|
||||
import { InputTextModule } from 'primeng/inputtext';
|
||||
import { IconFieldModule } from '@openng/optimus-ui/iconfield';
|
||||
import { InputIconModule } from '@openng/optimus-ui/inputicon';
|
||||
import { DynamicDialogConfig, DynamicDialogRef } from '@openng/optimus-ui/dynamicdialog';
|
||||
import { ButtonModule } from '@openng/optimus-ui/button';
|
||||
import { InputTextModule } from '@openng/optimus-ui/inputtext';
|
||||
|
||||
@Component({
|
||||
selector: 'app-pickperson',
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import moment from "moment";
|
||||
import { Person, User, userRole } from "../models"
|
||||
import { TreeNode } from "primeng/api";
|
||||
import { TreeNode } from "@openng/optimus-ui/api";
|
||||
|
||||
type MyProName = "fatherId" | "motherId";
|
||||
|
||||
|
||||
@@ -9,11 +9,11 @@ import { Subscription } from 'rxjs';
|
||||
import { Router } from '@angular/router';
|
||||
import { StaffService } from './staff.service';
|
||||
import { AuthenticationService } from '../user-services';
|
||||
import { TableModule } from 'primeng/table';
|
||||
import { TableModule } from '@openng/optimus-ui/table';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { ButtonModule } from 'primeng/button';
|
||||
import { InputTextModule } from 'primeng/inputtext';
|
||||
import { ButtonModule } from '@openng/optimus-ui/button';
|
||||
import { InputTextModule } from '@openng/optimus-ui/inputtext';
|
||||
import { selectStaffLoaded,selectStaff } from '../state/staff.selectors';
|
||||
|
||||
@Component({
|
||||
|
||||
@@ -2,15 +2,15 @@ import { Component, inject, input, numberAttribute, OnDestroy, OnInit } from '@a
|
||||
import { Router, ActivatedRoute } from '@angular/router';
|
||||
import { ReactiveFormsModule, UntypedFormBuilder, Validators } from '@angular/forms';
|
||||
import { Subject, Subscription} from 'rxjs';
|
||||
import { MessageService } from 'primeng/api';
|
||||
import { MessageService } from '@openng/optimus-ui/api';
|
||||
|
||||
import {Staff, Code, userRole} from '../models';
|
||||
import { LookupService, Utils } from '../shares';
|
||||
import { StaffService } from './staff.service';
|
||||
import { ButtonModule } from 'primeng/button';
|
||||
import { SelectModule } from 'primeng/select';
|
||||
import { CheckboxModule } from 'primeng/checkbox';
|
||||
import { InputTextModule } from 'primeng/inputtext';
|
||||
import { ButtonModule } from '@openng/optimus-ui/button';
|
||||
import { SelectModule } from '@openng/optimus-ui/select';
|
||||
import { CheckboxModule } from '@openng/optimus-ui/checkbox';
|
||||
import { InputTextModule } from '@openng/optimus-ui/inputtext';
|
||||
|
||||
@Component({
|
||||
templateUrl: 'staff.edit.component.html',
|
||||
|
||||
@@ -2,13 +2,13 @@ import { Component, inject, OnDestroy, OnInit, ViewChild } from '@angular/core';
|
||||
import { Router, ActivatedRoute } from '@angular/router';
|
||||
import { FormsModule, ReactiveFormsModule, UntypedFormBuilder, Validators } from '@angular/forms';
|
||||
import { Subject, Subscription} from 'rxjs';
|
||||
import { MessageService } from 'primeng/api';
|
||||
import { MessageService } from '@openng/optimus-ui/api';
|
||||
|
||||
import {Staff, Code, userRole, ResetPassword} from '../models';
|
||||
import { LookupService, Utils } from '../shares';
|
||||
import { StaffService } from './staff.service';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { ButtonModule } from 'primeng/button';
|
||||
import { ButtonModule } from '@openng/optimus-ui/button';
|
||||
|
||||
@Component({
|
||||
templateUrl: 'staff.pass.component.html',
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import { Component, OnInit, OnDestroy, effect, computed, Signal, } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { MenuItem } from 'primeng/api';
|
||||
import { MenuModule } from 'primeng/menu';
|
||||
import { ButtonModule} from 'primeng/button';
|
||||
import { ButtonGroupModule } from 'primeng/buttongroup';
|
||||
import { MenuItem } from '@openng/optimus-ui/api';
|
||||
import { MenuModule } from '@openng/optimus-ui/menu';
|
||||
import { ButtonModule} from '@openng/optimus-ui/button';
|
||||
import { ButtonGroupModule } from '@openng/optimus-ui/buttongroup';
|
||||
import { Subscription } from 'rxjs';
|
||||
import { AuthenticationService } from '../user-services';
|
||||
import { Utils } from '../shares';
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
/* You can add global styles to this file, and also import other style files */
|
||||
@import "tailwindcss";
|
||||
@plugin "tailwindcss-primeui";
|
||||
@import "primeicons/primeicons.css";
|
||||
@plugin "@openng/optimus-ui-tailwindcss";
|
||||
@import "@openng/icons/openng-icons.css";
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"skipLibCheck": true,
|
||||
"isolatedModules": true,
|
||||
"experimentalDecorators": true,
|
||||
"importHelpers": true,
|
||||
"target": "ES2022",
|
||||
"module": "preserve"
|
||||
|
||||
Reference in New Issue
Block a user