README.md

7.25 KB
06/05/2025 02:57
MD
# Tree Categories Manager

ระบบจัดการหมวดหมู่แบบต้นไม้หลายระดับชั้นด้วย JavaScript แบบ Pure ไม่ต้องใช้ไลบรารีเพิ่มเติม รองรับการลากวาง (Drag & Drop) เพื่อจัดการโครงสร้างได้อย่างง่ายดาย

## คุณสมบัติ

- **โครงสร้างแบบยืดหยุ่น:** สามารถกำหนดจำนวนระดับชั้นและชื่อของแต่ละระดับได้ตามต้องการ
- **ปรับแต่งง่าย:** เลือกโหมดระดับชั้นได้ทั้งแบบจำกัดจำนวนหรือไม่จำกัด
- **Drag & Drop:** รองรับการลากวางเพื่อจัดการโครงสร้างได้อย่างสะดวก
  - วางก่อนรายการ (Before)
  - วางหลังรายการ (After)
  - วางเป็นรายการย่อย (Inside)
- **UI ที่ใช้งานง่าย:**
  - ยุบ/ขยายโครงสร้างได้ทั้งแบบรายการเดียวหรือทั้งหมด
  - แสดงผลด้วยสีและไอคอนที่แตกต่างกันตามระดับชั้น
  - รองรับการแก้ไขชื่อรายการโดยตรง
- **จัดการข้อมูล:** สามารถบันทึกและโหลดโครงสร้างในรูปแบบ JSON

## การใช้งาน

### การตั้งค่าพื้นฐาน

1. **โหมดระดับชั้น:** เลือกระหว่างแบบจำกัดหรือไม่จำกัดระดับชั้น
2. **จำนวนระดับชั้น:** กำหนดจำนวนระดับชั้นที่ต้องการ (เฉพาะโหมดจำกัด)
3. **ชื่อระดับชั้น:** กำหนดชื่อของแต่ละระดับชั้น เช่น Stage, Area, Zone
4. **สร้างโครงสร้างเริ่มต้น:** กดปุ่ม "อัพเดตการตั้งค่า" เพื่อนำไปใช้

### การจัดการโครงสร้าง

- **เพิ่มรายการหลัก:** คลิกปุ่ม "เพิ่มรายการระดับบนสุด"
- **เพิ่มรายการย่อย:** คลิกปุ่ม "+" ที่แต่ละรายการ
- **ลบรายการ:** คลิกปุ่ม "×" ที่แต่ละรายการ
- **แก้ไขชื่อ:** คลิกที่ชื่อรายการแล้วแก้ไขได้ทันที

### การใช้งาน Drag & Drop

1. **ลากรายการ:** คลิกค้างที่รายการที่ต้องการย้าย
2. **วางในตำแหน่งที่ต้องการ:**
   - วางด้านบนของรายการอื่น (แสดงเส้นด้านบน) = วางก่อนรายการนั้น
   - วางตรงกลางของรายการอื่น (ไฮไลท์ทั้งรายการ) = วางเป็นรายการย่อย
   - วางด้านล่างของรายการอื่น (แสดงเส้นด้านล่าง) = วางหลังรายการนั้น

### การนำข้อมูลไปใช้

- **ดูโครงสร้าง JSON:** โครงสร้างทั้งหมดจะแสดงในส่วน "ผลลัพธ์ (JSON)"
- **คัดลอก JSON:** คลิกปุ่ม "คัดลอก JSON" เพื่อคัดลอกไปใช้งานต่อ
- **บันทึกเป็นไฟล์:** คลิกปุ่ม "บันทึก JSON" เพื่อดาวน์โหลดเป็นไฟล์
- **โหลดจากไฟล์:** คลิกปุ่ม "โหลดจากไฟล์" เพื่อนำเข้าข้อมูลจากไฟล์ JSON

## การติดตั้ง

1. คัดลอกโค้ดทั้งหมดไปไว้ในโปรเจคของคุณ
2. เรียกใช้ไฟล์ HTML หลักผ่านเว็บเซิร์ฟเวอร์

```html
<!-- ตัวอย่างการใช้งานพื้นฐาน -->
<div id="tree"></div>
<div id="json-output"></div>

<script>
  const treeManager = new TreeManager({
    containerId: 'tree',
    limitedDepth: true,
    maxDepth: 3,
    levelNames: {
      1: 'Stage',
      2: 'Area',
      3: 'Zone'
    },
    outputId: 'json-output'
  });

  // สร้างโครงสร้างเริ่มต้น
  treeManager.generateInitialStructure();
</script>
```

## การปรับแต่ง

ระบบรองรับการปรับแต่งในหลายด้าน:

- **สี**: แก้ไขตัวแปร CSS ในไฟล์ styles.css
- **ไอคอน**: สามารถเปลี่ยนไอคอนในฟังก์ชัน `_getIconForLevel` ในไฟล์ tree.js
- **รูปแบบ UI**: ปรับแต่ง CSS ได้ตามต้องการ

## การใช้งานขั้นสูง

### เหตุการณ์ (Event) สำคัญ

```javascript
// callback เมื่อมีการเปลี่ยนแปลงข้อมูล
treeManager.updateConfig({
  onChange: function(data) {
    console.log('ข้อมูลถูกเปลี่ยนแปลง:', data);
    // ดำเนินการอื่นๆ เช่น บันทึกลงฐานข้อมูล
  }
});
```

### การจัดเก็บข้อมูลลงฐานข้อมูล

สามารถนำข้อมูล JSON ที่ได้ไปจัดเก็บลงฐานข้อมูลผ่าน AJAX:

```javascript
// ตัวอย่างการส่งข้อมูลไปยัง API
document.getElementById('save-to-db').addEventListener('click', function() {
  const data = treeManager.getTreeData();

  fetch('/api/save-categories', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(data),
  })
  .then(response => response.json())
  .then(result => console.log('บันทึกสำเร็จ:', result))
  .catch(error => console.error('เกิดข้อผิดพลาด:', error));
});
```

## ใบอนุญาต

เผยแพร่ภายใต้ใบอนุญาต MIT

## ผู้พัฒนา

พัฒนาโดย [Goragod Wiriya](https://github.com/goragodwiriya)