Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗แอปบันทึกข้อมูลแบบ บอ.1 สำหรับคำขอปรับปรุงการกำหนดตำแหน่ง สร้างด้วย Flask กับ SQLite และเปิดเป็นหน้าต่างเดสก์ท็อปผ่าน pywebview ได้ หรือ build เป็นไฟล์ .exe ไฟล์เดียวสำหรับ Windows
กรอกข้อมูลแบบ บอ.1 ครบ 5 ส่วน
ส่วนที่ 1 ถึง 3 เพิ่มได้หลายตำแหน่งต่อคำขอ
แนบเอกสารประกอบได้หนึ่งไฟล์ต่อคำขอ รองรับ PDF, Word และ Excel ขนาดไม่เกิน 10 MB
แท็บคำขอทั้งหมด สำหรับแก้ไขและลบคำขอ
แท็บสรุปภาพรวม แสดงกราฟด้วย Chart.js
ส่งออกเป็น CSV, JSON และพิมพ์หรือบันทึกเป็น PDF ทีละคำขอ
หน้าตาตาม DESIGN.md และใช้คำตาม GLOSSARY.md
static/vendor ทั้งหมดcd pos_restructure
python -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements.txt
pyinstaller ใน requirements.txt ใช้เฉพาะตอน build .exe ถ้าแค่รันแอปไม่ต้องติดตั้งก็ได้
มีไฟล์ .bat ให้ดับเบิลคลิก 3 แบบ ทุกไฟล์ใช้ Python ใน .venv ก่อน ถ้าไม่มีจึงใช้ python ของเครื่อง
| ไฟล์ | โหมด | เข้าถึงจาก |
|---|---|---|
run.bat | เดสก์ท็อป เปิดหน้าต่าง pywebview | เครื่องนี้เท่านั้น |
run_browser.bat | เปิดในเว็บเบราว์เซอร์ปกติ | http://127.0.0.1:5050 เครื่องนี้เท่านั้น |
run_server.bat | เซิร์ฟเวอร์ในวง LAN | http://<IP เครื่องนี้>:5050 ทุกเครื่องในเครือข่าย |
ถ้าไม่ได้ติดตั้ง pywebview คำสั่ง python app.py จะรันเป็นเว็บเซิร์ฟเวอร์ที่ http://127.0.0.1:5050 แทน
ข้อควรระวังของโหมด LAN: แอปไม่มีระบบล็อกอิน ทุกคนที่เข้าถึงพอร์ต 5050 ได้จะอ่าน แก้ไข และลบข้อมูลได้ทั้งหมด ใช้เฉพาะในเครือข่ายที่ไว้ใจได้
.venv\Scripts\pyinstaller.exe --noconfirm --onefile --windowed ^
--add-data "templates;templates" ^
--add-data "static;static" ^
--hidden-import webview ^
--name "PosRestructure" app.py
--add-data "static;static" คือไลบรารีหน้าเว็บ ถ้าไม่ใส่บรรทัดนี้ .exe จะไม่มี Bootstrap, Chart.js, Font Awesome และฟอนต์ Noto Sans Thai กับ Sarabun ติดไปด้วย และแท็บสรุปภาพรวมจะใช้งานไม่ได้
ไฟล์ที่ได้อยู่ใน dist\PosRestructure.exe ตอนรัน แอปจะสร้างฐานข้อมูล ไฟล์ log และโฟลเดอร์ uploads ไว้ข้างไฟล์ .exe
pos_restructure/
├── app.py Flask app, API และตัวเปิดหน้าต่าง pywebview
├── templates/index.html หน้าเว็บทั้งหมด (HTML, CSS, JavaScript ในไฟล์เดียว)
├── DESIGN.md ระบบออกแบบของหน้าเว็บ (DESIGN-sap.md, DESIGN-ibm.md คือต้นทาง)
├── GLOSSARY.md ความหมายของคำในโดเมน เช่น คำขอ มติที่ประชุม สถานะคำขอ
├── static/vendor/ Bootstrap, Chart.js, Font Awesome, ฟอนต์ Noto Sans Thai และ Sarabun ในเครื่อง
├── test_api.py เทส regression ของ API และฟังก์ชันในหน้าเว็บ
├── verify_offline.py เปิดหน้าเว็บในเบราว์เซอร์ที่ตัดเน็ต แล้ววัดว่าไลบรารีมาครบ
├── vendor_assets.py ดาวน์โหลดไลบรารีหน้าเว็บมาไว้ใน static/vendor
├── migrate_schema.py ลบคอลัมน์ที่โค้ดไม่ใช้แล้วออกจากฐานข้อมูล
├── cleanup_orphans.py ลบไฟล์ใน uploads/ ที่ไม่มีรายการไหนอ้างถึง
├── run.bat / run_browser.bat / run_server.bat
├── requirements.txt
├── CODE_REVIEW.md ผลรีวิวโค้ดและสถานะการแก้ไขแต่ละข้อ
│
├── pos_restructure.db สร้างอัตโนมัติ (ไม่อยู่ใน git)
├── pos_restructure.log สร้างอัตโนมัติ เก็บ error ที่ไม่คาดคิด (ไม่อยู่ใน git)
└── uploads/ สร้างอัตโนมัติ เก็บไฟล์แนบ (ไม่อยู่ใน git)
ฐานข้อมูล ไฟล์สำรอง log และไฟล์แนบเป็นข้อมูลจริงของหน่วยงาน จึงถูกกันไว้ใน .gitignore ทั้งหมด
ข้อมูลทั้งหมดอยู่ในตาราง positions ตารางเดียวใน pos_restructure.db
sec1_rows, sec2_rows, sec3_rowsp4_ และ p5_file_name และชื่อเดิมใน file_orig_namecreated และ updated เก็บเป็น ISO 8601 ค.ศ. หน้าเว็บแปลงเป็นรูปแบบไทยตอนแสดงผลตอนเริ่มแอป init_db() สร้างตารางและเพิ่มคอลัมน์ที่ขาดให้อัตโนมัติ และแปลง timestamp รูปแบบเก่า DD/MM/YYYY HH:MM เป็น ISO ให้ ไม่ต้องรัน migration เอง
สำรองข้อมูล: ปิดแอปก่อน แล้วคัดลอก pos_restructure.db กับโฟลเดอร์ uploads/ ไปเก็บไว้ด้วยกัน
ทุก endpoint ตอบเป็น JSON ข้อความ error เป็นภาษาไทยในรูป {"ok": false, "error": "..."}
| Method | Path | ใช้ทำอะไร |
|---|---|---|
| GET | /api/positions | ดึงรายการทั้งหมด เรียงจากใหม่ไปเก่า |
| POST | /api/positions | เพิ่มรายการ |
| PUT | /api/positions/<id> | แก้ไขรายการ ตอบ 404 ถ้าไม่มี id นี้ |
| DELETE | /api/positions/<id> | ลบรายการพร้อมไฟล์แนบ |
| DELETE | /api/positions | ลบทุกรายการพร้อมไฟล์แนบทั้งหมด |
| POST | /api/upload | อัปโหลดไฟล์แนบ (multipart field ชื่อ file) |
| GET | /uploads/<ชื่อไฟล์> | เปิดไฟล์แนบ |
| GET | /api/ping | เช็กว่าเซิร์ฟเวอร์ทำงานอยู่ |
คำขอที่เปลี่ยนข้อมูลและส่ง header Origin มาจากเว็บไซต์อื่นจะถูกปฏิเสธด้วย 403 เพื่อกัน CSRF
.venv\Scripts\python.exe test_api.py
เทสใช้ฐานข้อมูลและโฟลเดอร์อัปโหลดชั่วคราว ไม่แตะข้อมูลจริง และจบด้วยสรุปจำนวนเทสที่ผ่าน คืนค่า exit code 1 ถ้ามีเทสไม่ผ่าน
เคสที่ต้องใช้ Node เพื่อรัน JavaScript จากหน้าเว็บจะขึ้น SKIP ถ้าเครื่องไม่มี Node สั่ง --no-skip เพื่อให้เคสที่ข้ามนับเป็นตก ซึ่งเป็นแบบที่ CI ใช้
.venv\Scripts\python.exe test_api.py --no-skip
GitHub Actions รัน test_api.py --no-skip กับ verify_offline.py บน windows-latest ทุก pull request ตั้งค่าอยู่ใน .github/workflows/tests.yml
.venv\Scripts\python.exe verify_offline.py
สคริปต์เปิดแอปบนพอร์ตว่าง แล้วสั่ง Edge หรือ Chrome แบบ headless ให้เปิดหน้านั้นโดยทุกโฮสต์นอกจาก 127.0.0.1 หาที่อยู่ไม่เจอ ซึ่งเป็นสภาพเดียวกับเครื่องที่ไม่มีเน็ต แล้ววัดจากในเบราว์เซอร์ว่า Chart.js, Bootstrap, ไอคอน และฟอนต์ไทยมาครบ ภาพหน้าจอที่ได้อยู่ในโฟลเดอร์ temp สั่งที่อื่นได้ด้วย --shot
ทั้งสองสคริปต์เป็น dry-run โดยค่าเริ่มต้น แสดงแค่สิ่งที่จะทำ ต้องใส่ --apply จึงจะทำจริง
REM ลบไฟล์แนบที่ไม่มีรายการไหนอ้างถึง
.venv\Scripts\python.exe cleanup_orphans.py
.venv\Scripts\python.exe cleanup_orphans.py --apply
REM ลบคอลัมน์ที่โค้ดไม่ใช้แล้ว (สำรองฐานข้อมูลเป็น .bak ให้ก่อนเสมอ)
.venv\Scripts\python.exe migrate_schema.py
.venv\Scripts\python.exe migrate_schema.py --apply
ส่วน vendor_assets.py ดาวน์โหลดไลบรารีหน้าเว็บลง static/vendor ใหม่ทั้งโฟลเดอร์ ต้องต่อเน็ตตอนรัน ใช้เมื่อขึ้นเวอร์ชัน Bootstrap, Chart.js, Font Awesome หรือฟอนต์ Noto Sans Thai และ Sarabun โดยแก้ตาราง ASSETS ในสคริปต์ก่อน แล้วรัน verify_offline.py ซ้ำ
.venv\Scripts\python.exe vendor_assets.py
รายละเอียดทั้งหมดอยู่ใน CODE_REVIEW.md ทั้ง 25 ข้อจากการรีวิวปิดครบแล้ว
ที่ยังเป็นข้อจำกัดของตัวระบบเอง ไม่ใช่ข้อค้างจากการรีวิว คือแอปไม่มีระบบผู้ใช้หรือสิทธิ์การเข้าถึง ไฟล์แนบแต่ละรายการมีได้ไฟล์เดียว และชุดตรวจยังไม่ครอบการวาดกราฟใน Dashboard กับการกรองในตาราง เพราะสองอย่างนี้ต้องขับเบราว์เซอร์จริง ไม่ใช่รันด้วย Node