CYBER US SHOPFLOOR

Machine & Operator Tracking Board

🛠 Danh mục
{{ currentUser.name ? currentUser.name.charAt(0).toUpperCase() : 'U' }}

Vui lòng đăng nhập

Bạn cần đăng nhập vào hệ thống chính để xác thực danh tính trước khi xem Bảng Điều Khiển Xưởng.

Quay lại cổng Đăng Nhập
👁 Chế độ chỉ xem. Chỉ Admin hoặc user có quyền WIP mới được lên kế hoạch, load/release WO, gán thợ và sửa danh mục máy/thợ.

Chờ Lên Máy (Pool)

{{ unassignedJobs.length }}
{{ job.job_number }} Qty: {{ job.total_qty }}
PN: {{ job.part_number }}
{{ job.op_step }} · {{ job.planned_operator_name }}
Không có WO nào đang chờ.

{{ boardGridMode === 'machines' ? 'Lưới Trạng Thái Máy Móc' : 'Lưới Trạng Thái Thợ' }}

Idle Booked Using Down
👁 Chế độ xem
{{ operatorBoardPresentCount }} có mặt · {{ operatorBoardAbsentCount }} vắng · {{ machinesWithActiveJobCount }} máy Using Ca sáng 🌙 Ca tối
Chưa có máy nào được đăng ký.

{{ machine.machine_code }}

{{ machine.machine_name || machine.machine_type }}

{{ getLiveState(machine.machine_code).status }}
⚠ Down {{ getLiveState(machine.machine_code).down_note }}
{{ getLiveState(machine.machine_code).bookedJob.job_number }} Book
{{ getLiveState(machine.machine_code).bookedJob.part_number }} · {{ getLiveState(machine.machine_code).bookedJob.op_step }}
🔒 Priority WO
{{ getLiveState(machine.machine_code).bookedJob.job_number }}
PN: {{ getLiveState(machine.machine_code).bookedJob.part_number }}
{{ getLiveState(machine.machine_code).bookedJob.op_step }}
{{ getLiveState(machine.machine_code).job.job_number }} {{ getLiveState(machine.machine_code).job.wip_status || 'Setup' }}
{{ getLiveState(machine.machine_code).job.part_number }} · {{ getLiveState(machine.machine_code).job.op_step || '—' }}
{{ getLiveState(machine.machine_code).job.completed_qty }}/{{ getLiveState(machine.machine_code).job.total_qty }}
{{ getLiveState(machine.machine_code).job.wip_status || 'Setup' }} {{ getLiveState(machine.machine_code).job.op_step || '—' }}
{{ getLiveState(machine.machine_code).job.job_number }}
PN: {{ getLiveState(machine.machine_code).job.part_number }}
Tiến độ {{ getLiveState(machine.machine_code).job.completed_qty }} / {{ getLiveState(machine.machine_code).job.total_qty }}
Sẵn sàng nhận việc
📋 Kế hoạch chờ ({{ getVisibleQueuedJobs(machine.machine_code).length }})
{{ qJob.job_number }}
{{ qJob.part_number }} · {{ qJob.op_step }}
{{ getOperatorInitial(getLiveState(machine.machine_code).operator_name) }}
Operator {{ getLiveState(machine.machine_code).operator_name || 'Chưa gán thợ' }} {{ operatorPickerFor === machine.machine_code.toUpperCase() ? '▲ Đóng danh sách' : '▼ Chọn thợ vận hành' }}
Gán thợ — {{ machine.machine_code }}
Chưa có thợ active.
Chưa có thợ nào được đăng ký.
{{ getOperatorInitial(row.operator.full_name) }}
{{ row.operator.full_name }}
WO chưa khớp thợ
{{ row.operator.work_shift === 'Night' ? 'Ca tối' : 'Ca sáng' }} · {{ row.operator.is_absent ? 'Vắng mặt' : 'Có mặt' }}
{{ getOperatorSkills(row.operator).slice(0, 2).join(' · ') }} {{ row.machines.length }} máy
Không có máy đang chạy WO
{{ machine.machine_code }}
Using
{{ getLiveState(machine.machine_code).job.job_number }}
{{ getLiveState(machine.machine_code).job.part_number }}
{{ getLiveState(machine.machine_code).job.wip_status || 'Setup' }} {{ getLiveState(machine.machine_code).job.op_step || '—' }}
Tiến độ {{ getLiveState(machine.machine_code).job.completed_qty }}/{{ getLiveState(machine.machine_code).job.total_qty }}
Master Data Shopfloor — Đăng ký máy CNC và thợ máy (kèm ảnh đại diện). Mã máy khớp wip_details.machine_id · Tên thợ khớp wip_details.operator_name. Ảnh lưu tại Storage bucket thumbnails/shopfloor/. ✓ Đang đồng bộ Supabase — {{ machines.length }} máy, {{ operators.length }} thợ ⚠ Offline/local — cần đăng nhập + bảng DB để đồng bộ

Danh sách Máy CNC

{{ machines.length }} máy · {{ activeMachines.length }} đang hoạt động

Mã máy Loại / Mô tả TT Thao tác
{{ m.machine_code }}
{{ m.machine_name || '—' }}
{{ m.machine_type }}
{{ m.is_active ? 'ON' : 'OFF' }}
Chưa có máy nào.

Danh sách Thợ Máy

{{ operators.length }} thợ · {{ activeOperators.length }} đang hoạt động

Họ tên Kỹ năng TT Thao tác
{{ op.full_name.charAt(0).toUpperCase() }}
{{ op.full_name }}
{{ sk }}
{{ op.is_active ? 'ON' : 'OFF' }}
Chưa có thợ nào.

Chế độ chỉ xem — cần quyền Admin hoặc WIP để thêm / sửa / xóa.

Lên kế hoạch phân máy

{{ planningJob?.job_number }} · Thông báo xưởng (chưa load lên máy)

WO vẫn ở Pool cho đến khi ai đó Load / Đẩy lên máy (cần mật khẩu). Máy đang chạy job khác vẫn có thể nhận kế hoạch — hiển thị trong hàng chờ trên thẻ máy.

{{ planForm.error }}

{{ woActionTitle }}

{{ woActionSubtitle }}

{{ woActionJob?.job_number }}
{{ woActionJob?.part_number }}
Máy: {{ woActionMachine.machine_code }}
{{ woActionError }}

Cập nhật tiến độ

{{ progressJob?.job_number }} · {{ progressMachine?.machine_code }}

/ {{ progressAssignQty }}

{{ progressForm.action === 'fai' ? 'Tách thẻ FAI → Ready for QC (WO chính ở WIP, Wait FAI Pass)' : 'Chuyển lô → Ready for QC (OQC)' }}

{{ progressError }}

Book machine

{{ bookMachine?.machine_code }} · Reserve for one priority WO

No WIP jobs available to book.
{{ bookError }}

Unbook machine

{{ unbookMachine?.machine_code }} · Release priority reservation

Remove the priority WO reservation. Machine will return to Idle if no job is loaded.

{{ unbookError }}

Mark Down

{{ downMachine?.machine_code }}

{{ downError }}

Clear Down

{{ clearDownMachine?.machine_code }} · Machine ready again

{{ getMachineRecord(clearDownMachine.machine_code)?.down_note }}

{{ clearDownError }}

Chọn WO từ Pool

Máy {{ pickWoMachine?.machine_code }} · Load lên máy trống

Pool trống — không có WO chờ.

{{ editingMachineId ? 'Sửa thông tin Máy' : 'Đăng ký Máy mới' }}

Preview

JPG/PNG · Lưu vào Storage thumbnails/shopfloor/machines/

→ Sửa danh mục loại máy
{{ registryError }}

{{ editingOperatorId ? 'Sửa thông tin Thợ' : 'Đăng ký Thợ mới' }}

Preview
👤

JPG/PNG · Lưu vào Storage thumbnails/shopfloor/operators/

→ Sửa danh mục
Chưa có danh mục kỹ năng. Thêm tại đây Xem danh mục

Đã chọn: {{ operatorForm.skills.join(', ') }}

{{ registryError }}