export default function MESUIMockup() { const workers = [ { id: 'P001', alias: '貞', name: '淑貞', station: 'G22 裁縫站' }, { id: 'P002', alias: '光', name: '光耀', station: 'G25 釘布站' }, { id: 'P003', alias: '龍', name: '志龍', station: 'G24 穿布站' }, { id: 'P004', alias: '泉', name: '玉泉', station: 'G21 曲木站' }, { id: 'P005', alias: '聯', name: '生聯', station: 'G26 釘背站' }, { id: 'P006', alias: '錦', name: '叔錦', station: 'G33 品保站' } ]; const urgentTasks = [ { billNo: 'SO240901', rowNo: 1, prodId: 'A-CHAIR-01', prodName: '辦公椅 60"黑', preInDate: '2026-04-09', process: '裁縫', points: 1.5, alias: '貞', qty: 20, done: 8 }, { billNo: 'SO240902', rowNo: 2, prodId: 'B-CHAIR-09', prodName: '主管椅座墊', preInDate: '2026-04-09', process: '釘布', points: 1.2, alias: '光', qty: 15, done: 0 } ]; const todayTasks = [ { billNo: 'SO240915', rowNo: 1, prodId: 'C-ARM-03', prodName: '扶手組', preInDate: '2026-04-10', process: '鎖配件', points: 0.8, alias: '聯', qty: 30, done: 12 }, { billNo: 'SO240916', rowNo: 3, prodId: 'D-SEAT-11', prodName: '座墊穿布', preInDate: '2026-04-10', process: '穿布', points: 1.1, alias: '龍', qty: 24, done: 5 }, { billNo: 'SO240917', rowNo: 1, prodId: 'E-WOOD-02', prodName: '曲木椅背', preInDate: '2026-04-10', process: '曲木', points: 1.7, alias: '泉', qty: 18, done: 0 } ]; const advanceTasks = [ { billNo: 'SO240930', rowNo: 1, prodId: 'PK-SET-21', prodName: '包裝紙箱組', preInDate: '2026-04-11', process: '包裝', points: 0.5, alias: '錦', qty: 50, done: 0 }, { billNo: 'SO240933', rowNo: 2, prodId: 'QA-CHK-10', prodName: '品保檢驗單', preInDate: '2026-04-12', process: '品保', points: 0.6, alias: '錦', qty: 35, done: 0 } ]; const activeWorks = [ { status: '生產中', billNo: 'SO240916', prodName: '座墊穿布', process: '穿布', start: '09:12', pause: 0, qty: 5 }, { status: '暫停中', billNo: 'SO240915', prodName: '扶手組', process: '鎖配件', start: '08:20', pause: 18, qty: 12 } ]; const completed = [ { time: '10:06', billNo: 'SO240880', prodName: '曲木椅背', qty: 12, points: 20.4 }, { time: '11:40', billNo: 'SO240886', prodName: '主管椅座墊', qty: 8, points: 9.6 }, { time: '13:15', billNo: 'SO240891', prodName: '扶手組', qty: 16, points: 12.8 } ]; const ranking = [ { name: '淑貞', alias: '貞', score: 86.5, completed: 42 }, { name: '光耀', alias: '光', score: 80.2, completed: 39 }, { name: '志龍', alias: '龍', score: 74.8, completed: 33 }, { name: '玉泉', alias: '泉', score: 69.7, completed: 28 } ]; const stationSummary = [ { station: 'G22 裁縫站', wip: 7, completed: 21 }, { station: 'G25 釘布站', wip: 5, completed: 18 }, { station: 'G24 穿布站', wip: 6, completed: 15 }, { station: 'G33 品保站', wip: 3, completed: 12 } ]; const progress = [ { order: 'SO240915', customer: '新竹醫院案', percent: 72 }, { order: 'SO240916', customer: '台中學校案', percent: 46 }, { order: 'SO240917', customer: '高雄辦公案', percent: 28 } ]; const badge = (status) => { if (status === '生產中') return 'bg-emerald-100 text-emerald-700'; if (status === '暫停中') return 'bg-amber-100 text-amber-700'; return 'bg-slate-100 text-slate-700'; }; const sectionTitle = (title, hint) => (

{title}

{hint}

); const taskTable = (rows, tone) => (
共 {rows.length} 筆
{rows.map((t, i) => { const remain = t.qty - t.done; const percent = Math.round((t.done / t.qty) * 100); return ( ); })}
單號 品名 / 工序 交期 指定 進度 點數 操作
{t.billNo}-{t.rowNo}
{t.prodName}
{t.prodId} / {t.process}
{t.preInDate} {t.alias}
{t.done}/{t.qty},剩 {remain}
{t.points}
); return (

新傳 MES 報工系統

ASP.NET Core MVC + Bootstrap 5 + jQuery AJAX 操作模擬

展示登入、人員看板、開工 / 暫停 / 完工、個人戰績與管理儀表板。

今日總待辦
7
進行中
2
今日產值
42.8
管理者檢視
啟用中
{sectionTitle('1. 人員登入區', '支援 G02 人員大按鈕 + 工號 / 簡稱搜尋')}
{workers.map((w) => ( ))}
{sectionTitle('2. 進行中 / 暫停中', '報工金三角的第二步,顯示當前工作狀態')}
{activeWorks.map((a, i) => (
{a.billNo} / {a.prodName}
工序:{a.process} ・ 開工:{a.start}
{a.status}
目前已報:{a.qty}
累計暫停:{a.pause} 分
{a.status === '生產中' ? ( ) : ( )}
))}
{sectionTitle('3. 個人即時戰績', '完工後以 AJAX 即時更新,需防快取')}
今日產值
42.8
今日完工筆數
3
{completed.map((c, i) => ( ))}
時間 單號 / 品名 數量 點數
{c.time}
{c.billNo}
{c.prodName}
{c.qty} {c.points}
{sectionTitle('4. 今日待完工明系列表', '分成逾期趕工、今日應做、可提前施作,主管與作業員都看得懂')}

昨日未完成 / 今日優先趕工

{taskTable(urgentTasks, 'bg-rose-50 text-rose-700')}

今日應做

{taskTable(todayTasks, 'bg-sky-50 text-sky-700')}

有空可提早施作

{taskTable(advanceTasks, 'bg-violet-50 text-violet-700')}
{sectionTitle('5. 管理儀表板:員工排行', '顯示員工點數與完工量,適合主管每日巡檢')}
{ranking.map((r, i) => (
#{i + 1} {r.name}
簡稱:{r.alias}
{r.score}
完工 {r.completed} 件
))}
{sectionTitle('6. 管理儀表板:站別摘要', '看各站在製與今日完工,判斷瓶頸站別')}
{stationSummary.map((s, i) => (
{s.station}
在製 {s.wip} 筆
今日完工 {s.completed}
))}
{sectionTitle('7. 訂單完工進度條', '近期訂單的完工進度,可作為管理端首頁重點區塊')}
{progress.map((p, i) => (
{p.order}
{p.customer}
{p.percent}%
))}
); }