# ๐ ็ปๅป็ปไปถๅฟซ้ไฝฟ็จๆๅ
## ๐ฆ 5ๅ้ๅฟซ้้ๆ
### 1๏ธโฃ **ๅฏผๅ
ฅ็ปไปถ**
```typescript
import { StageGalleryModalComponent, GalleryConfig } from '@/modules/project/components/stage-gallery-modal';
@Component({
imports: [StageGalleryModalComponent]
})
export class YourComponent {
showGallery = false;
galleryConfig: GalleryConfig | null = null;
}
```
### 2๏ธโฃ **ๅๅคๆฐๆฎ**
```typescript
openGallery() {
this.galleryConfig = {
spaceId: '็ฉบ้ดID',
spaceName: 'ๅฎขๅ
',
stageId: '้ถๆฎตID',
stageName: 'ๆธฒๆ',
files: [
{
id: 'ๆไปถID',
name: 'ๆไปถๅ.jpg',
url: 'ๆไปถURL',
size: 1024000, // ๅฏ้
uploadTime: new Date() // ๅฏ้
}
],
canEdit: true // ๆฏๅฆๆพ็คบๅ ้คๅไธไผ ๆ้ฎ
};
this.showGallery = true;
}
```
### 3๏ธโฃ **ๆทปๅ ๅฐๆจกๆฟ**
```html
```
### 4๏ธโฃ **ๅค็ไบไปถ๏ผๅฏ้๏ผ**
```typescript
onDelete(event: { file: any; event: Event }) {
console.log('ๅ ้ค:', event.file.name);
// ไฝ ็ๅ ้ค้ป่พ
}
onUpload(event: Event) {
const input = event.target as HTMLInputElement;
console.log('ไธไผ :', input.files);
// ไฝ ็ไธไผ ้ป่พ
}
onPreview(file: any) {
console.log('้ข่ง:', file.name);
// ไฝ ็้ข่ง้ป่พ๏ผ้ๅพ็ๆไปถ๏ผ
}
```
---
## โจ ๅฐฑ่ฟไน็ฎๅ๏ผ
็ปๅปไผ่ชๅจๅค็๏ผ
- โ
ๅพ็ๅๆๆกฃ็้ข่ง
- โ
ๅคงๅพๅ
จๅฑๆฅ็
- โ
ๅทฆๅณๅๆขๅพ็
- โ
ๅๅบๅผๅธๅฑ
- โ
็ฒพ็พๅจ็ป
---
## ๐จ ่ง่งๆๆ
### ๆก้ข็ซฏ
```
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ [๐ ] ๆธฒๆ - ๅฎขๅ
[ร] โ โ ๆธๅ็ดซ่ฒๅคด้จ
โ ๐ 6 ไธชๆไปถ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ [ๅพ1] [ๅพ2] [ๅพ3] [ๅพ4] โ โ ่ช้ๅบ็ฝๆ ผ
โ [ๅพ5] [ๅพ6] [PDF] [ๅพ7] โ โ ้ดๅฝฑ + hover
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ [๐ค ไธไผ ๆไปถ] โ โ ๆธๅๆ้ฎ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
### ๆๆบ็ซฏ
```
โโโโโโโโโโโโโโโโโโโโโโ
โ [๐ ] ๆธฒๆ [ร] โ
โ ๐ 6 ไธชๆไปถ โ
โโโโโโโโโโโโโโโโโโโโโโค
โ [ๅพ1] [ๅพ2] โ โ 2ๅๅธๅฑ
โ [ๅพ3] [ๅพ4] โ
โ [ๅพ5] [ๅพ6] โ
โโโโโโโโโโโโโโโโโโโโโโค
โ [๐ค ไธไผ ๆไปถ] โ โ ๅ
จๅฎฝๆ้ฎ
โโโโโโโโโโโโโโโโโโโโโโ
```
---
## ๐ฏ ๆ ธๅฟ็นๆง
### **ๅ่ฝ**
- ๐ผ๏ธ ๅพ็ๅคงๅพ้ข่ง๏ผ็นๅปๆฅ็๏ผ
- โฌ
๏ธโก๏ธ ๅทฆๅณๅๆขๅพ็
- ๐๏ธ ๅ ้คๆไปถ๏ผๅธฆ็กฎ่ฎค๏ผ
- ๐ค ไธไผ ๆไปถ
- ๐ ๆๆกฃ้ข่ง๏ผPDFใDWG็ญ๏ผ
### **่ฎพ่ฎก**
- ๐ ๆธๅ็ดซ่ฒไธป้ข
- โจ ็ป็ๆๆๆๆ
- ๐ฌ ๆต็
ๅจ็ป
- ๐ฑ ๅฎๅ
จๅๅบๅผ
### **ไฝ้ช**
- ๐ ๅคงๆ้ฎๆๆไฝ
- ๐ ไฟกๆฏๆธ
ๆฐๅฎๆด
- ๐ ๆง่ฝไผๅ
- ๐ฏ ่ง่งๅ้ฆ
---
## ๐ฑ ่ช้ๅบ่ฏดๆ
| ๅฑๅนๅฐบๅฏธ | ๅๆฐ | ้ด่ท | ็นๆฎๅค็ |
|----------|------|------|----------|
| **ๆก้ข** (>1024px) | ่ช้ๅบ | 24px | hoverๆพ็คบๅ ้ค |
| **ๅนณๆฟ** (768-1024px) | 3ๅ | 20px | ๅง็ปๆพ็คบๅ ้ค |
| **ๆๆบ** (<768px) | 2ๅ | 12px | ๅ
จๅฎฝๆ้ฎ |
---
## ๐ก ไฝฟ็จๅปบ่ฎฎ
### โ
**ๆจ่ๅๆณ**
```typescript
// 1. ไฝฟ็จ ChangeDetectionStrategy.OnPush
@Component({
changeDetection: ChangeDetectionStrategy.OnPush
})
// 2. ่ฐ็จ markForCheck ๆดๆฐ่งๅพ
this.galleryConfig = newConfig;
this.cdr.markForCheck();
// 3. ๅ
ณ้ญๆถๆธ
็็ถๆ
closeGallery() {
this.showGallery = false;
this.galleryConfig = null;
}
```
### โ **้ฟๅ
ๅๆณ**
```typescript
// 1. ไธ่ฆๅจ config ไธญไฝฟ็จๅคๆๅฏน่ฑก
// โ ้่ฏฏ
files: this.allFiles // ๅผ็จ
// โ
ๆญฃ็กฎ
files: [...this.allFiles] // ๆท่ด
// 2. ไธ่ฆๅฟ่ฎฐๅค็ๅ
ณ้ญไบไปถ
// โ ้่ฏฏ
// โ
ๆญฃ็กฎ
```
---
## ๐ ๆดๅคๆๆกฃ
- ๐ **ๅฎๆดๆๆกฃ**: `NEW_GALLERY_COMPONENT.md`
- ๐จ **่ฎพ่ฎก่ง่**: ๆฅ็ SCSS ไธญ็ๆณจ้
- ๐ **้ฎ้ขๅ้ฆ**: ่็ณปๅผๅๅข้
---
## ๐ ๅผๅงไฝฟ็จๅง๏ผ
ๅช้4ๆญฅ๏ผๅณๅฏๆฅๆ็ฒพ็พ็ๅพ็็ปๅป๏ผ
```typescript
// 1. ๅฏผๅ
ฅ
import { StageGalleryModalComponent, GalleryConfig } from '@/components/stage-gallery-modal';
// 2. ้
็ฝฎ
galleryConfig: GalleryConfig = { /* ... */ };
// 3. ไฝฟ็จ
// 4. ๅฎๆ๏ผ
```
---
**ๅฟซ้ไธๆๆถ้ด**: ~5ๅ้
**้ๆ้พๅบฆ**: โญโญโโโ (็ฎๅ)
**่ง่งๆๆ**: โญโญโญโญโญ (็ฒพ็พ)