-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
52 lines (42 loc) · 155 KB
/
index.html
File metadata and controls
52 lines (42 loc) · 155 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8">
<title>WMS PDA Preview Bookmarklet</title>
</head>
<body>
<h1>WMS PDA Preview 설치 페이지</h1>
<p>
방법: 아래 링크를 <strong>드래그 앤 드롭</strong>으로 브라우저의 북마크(즐겨찾기) 바에
<strong>드래그 앤 드롭</strong>해 주세요.
</p>
<p>
<h1>
<a href="javascript:(function()%7B(function%20()%20%7B%0A%20%20%20%20let%20isMinimized%20%3D%20false%3B%0A%20%20%20%20let%20lastWidth%20%3D%20%22500px%22%3B%0A%20%20%20%20let%20lastHeight%20%3D%20%22900px%22%3B%0A%20%20%20%20let%20isDragging%20%3D%20false%3B%0A%20%20%20%20let%20startX%2C%20startY%2C%20startLeft%2C%20startTop%3B%0A%20%20%20%20let%20history%20%3D%20%5B%5D%3B%0A%20%20%20%20let%20historyIndex%20%3D%20-1%3B%0A%0A%20%20%20%20const%20deviceFrame%20%3D%20document.createElement(%22div%22)%3B%0A%20%20%20%20Object.assign(deviceFrame.style%2C%20%7B%0A%20%20%20%20%20%20%20%20position%3A%20%22fixed%22%2C%0A%20%20%20%20%20%20%20%20top%3A%20%2250px%22%2C%0A%20%20%20%20%20%20%20%20left%3A%20(window.innerWidth%20-%20parseInt(lastWidth)%20-%2050)%20%2B%20%22px%22%2C%0A%20%20%20%20%20%20%20%20width%3A%20lastWidth%2C%0A%20%20%20%20%20%20%20%20minWidth%3A%20%22350px%22%2C%0A%20%20%20%20%20%20%20%20maxWidth%3A%20%22500px%22%2C%0A%20%20%20%20%20%20%20%20height%3A%20lastHeight%2C%0A%20%20%20%20%20%20%20%20border%3A%20%225px%20solid%20black%22%2C%0A%20%20%20%20%20%20%20%20background%3A%20%22white%22%2C%0A%20%20%20%20%20%20%20%20overflow%3A%20%22hidden%22%2C%0A%20%20%20%20%20%20%20%20zIndex%3A%20%229999%22%2C%0A%20%20%20%20%20%20%20%20resize%3A%20%22both%22%2C%0A%20%20%20%20%20%20%20%20display%3A%20%22flex%22%2C%0A%20%20%20%20%20%20%20%20flexDirection%3A%20%22column%22%2C%0A%20%20%20%20%20%20%20%20boxShadow%3A%20%225px%205px%2015px%20rgba(0%2C0%2C0%2C0.3)%22%0A%20%20%20%20%7D)%3B%0A%20%20%20%20document.body.appendChild(deviceFrame)%3B%0A%0A%20%20%20%20const%20header%20%3D%20document.createElement(%22div%22)%3B%0A%20%20%20%20Object.assign(header.style%2C%20%7B%0A%20%20%20%20%20%20%20%20background%3A%20%22%23333%22%2C%0A%20%20%20%20%20%20%20%20color%3A%20%22white%22%2C%0A%20%20%20%20%20%20%20%20padding%3A%20%2210px%22%2C%0A%20%20%20%20%20%20%20%20cursor%3A%20%22grab%22%2C%0A%20%20%20%20%20%20%20%20display%3A%20%22flex%22%2C%0A%20%20%20%20%20%20%20%20alignItems%3A%20%22center%22%0A%20%20%20%20%7D)%3B%0A%0A%20%20%20%20const%20title%20%3D%20document.createElement(%22span%22)%3B%0A%20%20%20%20title.innerText%20%3D%20%22PDA%20Preview%22%3B%0A%20%20%20%20header.appendChild(title)%3B%0A%0A%20%20%20%20const%20buttonContainer%20%3D%20document.createElement(%22div%22)%3B%0A%20%20%20%20Object.assign(buttonContainer.style%2C%20%7B%0A%20%20%20%20%20%20%20%20marginLeft%3A%20%22auto%22%2C%0A%20%20%20%20%20%20%20%20display%3A%20%22flex%22%2C%0A%20%20%20%20%20%20%20%20gap%3A%20%225px%22%0A%20%20%20%20%7D)%3B%0A%0A%20%20%20%20const%20minimizeButton%20%3D%20document.createElement(%22button%22)%3B%0A%20%20%20%20minimizeButton.innerText%20%3D%20%22-%22%3B%0A%20%20%20%20Object.assign(minimizeButton.style%2C%20%7B%0A%20%20%20%20%20%20%20%20background%3A%20%22gray%22%2C%0A%20%20%20%20%20%20%20%20color%3A%20%22white%22%2C%0A%20%20%20%20%20%20%20%20border%3A%20%22none%22%2C%0A%20%20%20%20%20%20%20%20cursor%3A%20%22pointer%22%2C%0A%20%20%20%20%20%20%20%20padding%3A%20%225px%2010px%22%2C%0A%20%20%20%20%20%20%20%20fontWeight%3A%20%22bold%22%0A%20%20%20%20%7D)%3B%0A%20%20%20%20minimizeButton.onclick%20%3D%20()%20%3D%3E%20toggleMinimize()%3B%0A%20%20%20%20buttonContainer.appendChild(minimizeButton)%3B%0A%0A%20%20%20%20const%20closeButton%20%3D%20document.createElement(%22button%22)%3B%0A%20%20%20%20closeButton.innerText%20%3D%20%22X%22%3B%0A%20%20%20%20Object.assign(closeButton.style%2C%20%7B%0A%20%20%20%20%20%20%20%20background%3A%20%22red%22%2C%0A%20%20%20%20%20%20%20%20color%3A%20%22white%22%2C%0A%20%20%20%20%20%20%20%20border%3A%20%22none%22%2C%0A%20%20%20%20%20%20%20%20cursor%3A%20%22pointer%22%2C%0A%20%20%20%20%20%20%20%20padding%3A%20%225px%2010px%22%2C%0A%20%20%20%20%20%20%20%20fontWeight%3A%20%22bold%22%0A%20%20%20%20%7D)%3B%0A%20%20%20%20closeButton.onclick%20%3D%20()%20%3D%3E%20deviceFrame.remove()%3B%0A%20%20%20%20buttonContainer.appendChild(closeButton)%3B%0A%0A%20%20%20%20header.appendChild(buttonContainer)%3B%0A%20%20%20%20deviceFrame.appendChild(header)%3B%0A%0A%20%20%20%20%2F%2F%20%E2%9C%85%20%EB%93%9C%EB%9E%98%EA%B7%B8%20%EC%95%A4%20%EB%93%9C%EB%A1%AD%20%EC%9D%B4%EB%8F%99%20%EA%B8%B0%EB%8A%A5%0A%20%20%20%20header.addEventListener(%22mousedown%22%2C%20(event)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20isDragging%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20startX%20%3D%20event.clientX%3B%0A%20%20%20%20%20%20%20%20startY%20%3D%20event.clientY%3B%0A%20%20%20%20%20%20%20%20startLeft%20%3D%20deviceFrame.offsetLeft%3B%0A%20%20%20%20%20%20%20%20startTop%20%3D%20deviceFrame.offsetTop%3B%0A%0A%20%20%20%20%20%20%20%20document.addEventListener(%22mousemove%22%2C%20dragWindow)%3B%0A%20%20%20%20%20%20%20%20document.addEventListener(%22mouseup%22%2C%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20isDragging%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20document.removeEventListener(%22mousemove%22%2C%20dragWindow)%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D)%3B%0A%0A%20%20%20%20function%20dragWindow(event)%20%7B%0A%20%20%20%20%20%20%20%20if%20(!isDragging)%20return%3B%0A%20%20%20%20%20%20%20%20deviceFrame.style.left%20%3D%20%60%24%7BstartLeft%20%2B%20event.clientX%20-%20startX%7Dpx%60%3B%0A%20%20%20%20%20%20%20%20deviceFrame.style.top%20%3D%20%60%24%7BstartTop%20%2B%20event.clientY%20-%20startY%7Dpx%60%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20const%20iframe%20%3D%20document.createElement(%22iframe%22)%3B%0A%20%20%20%20iframe.src%20%3D%20window.location.href%3B%0A%20%20%20%20Object.assign(iframe.style%2C%20%7B%0A%20%20%20%20%20%20%20%20width%3A%20%22100%25%22%2C%0A%20%20%20%20%20%20%20%20flexGrow%3A%20%221%22%2C%0A%20%20%20%20%20%20%20%20border%3A%20%22none%22%0A%20%20%20%20%7D)%3B%0A%20%20%20%20deviceFrame.appendChild(iframe)%3B%0A%0A%20%20%20%20const%20historyContainer%20%3D%20document.createElement(%22div%22)%3B%0A%20%20%20%20Object.assign(historyContainer.style%2C%20%7B%0A%20%20%20%20%20%20%20%20height%3A%20%22150px%22%2C%0A%20%20%20%20%20%20%20%20background%3A%20%22%23222%22%2C%0A%20%20%20%20%20%20%20%20color%3A%20%22%23fff%22%2C%0A%20%20%20%20%20%20%20%20display%3A%20%22flex%22%2C%0A%20%20%20%20%20%20%20%20flexDirection%3A%20%22column-reverse%22%2C%0A%20%20%20%20%20%20%20%20padding%3A%20%225px%22%2C%0A%20%20%20%20%20%20%20%20overflowY%3A%20%22auto%22%0A%20%20%20%20%7D)%3B%0A%20%20%20%20deviceFrame.appendChild(historyContainer)%3B%0A%0A%20%20%20%20const%20barcodeContainer%20%3D%20document.createElement(%22div%22)%3B%0A%20%20%20%20Object.assign(barcodeContainer.style%2C%20%7B%0A%20%20%20%20%20%20%20%20height%3A%20%2250px%22%2C%0A%20%20%20%20%20%20%20%20background%3A%20%22%23222%22%2C%0A%20%20%20%20%20%20%20%20display%3A%20%22flex%22%2C%0A%20%20%20%20%20%20%20%20padding%3A%20%225px%22%0A%20%20%20%20%7D)%3B%0A%0A%20%20%20%20const%20barcodeInput%20%3D%20document.createElement(%22input%22)%3B%0A%20%20%20%20Object.assign(barcodeInput%2C%20%7B%0A%20%20%20%20%20%20%20%20type%3A%20%22text%22%2C%0A%20%20%20%20%20%20%20%20placeholder%3A%20%22Enter%20barcode...%22%0A%20%20%20%20%7D)%3B%0A%20%20%20%20Object.assign(barcodeInput.style%2C%20%7B%0A%20%20%20%20%20%20%20%20flexGrow%3A%20%221%22%2C%0A%20%20%20%20%20%20%20%20background%3A%20%22%23111%22%2C%0A%20%20%20%20%20%20%20%20color%3A%20%22%23fff%22%2C%0A%20%20%20%20%20%20%20%20border%3A%20%22none%22%2C%0A%20%20%20%20%20%20%20%20outline%3A%20%22none%22%2C%0A%20%20%20%20%20%20%20%20padding%3A%20%225px%22%2C%0A%20%20%20%20%20%20%20%20fontSize%3A%20%2214px%22%2C%0A%20%20%20%20%20%20%20%20fontFamily%3A%20%22monospace%22%0A%20%20%20%20%7D)%3B%0A%20%20%20%20barcodeContainer.appendChild(barcodeInput)%3B%0A%0A%20%20%20%20const%20scanButton%20%3D%20document.createElement(%22button%22)%3B%0A%20%20%20%20scanButton.innerText%20%3D%20%22%E2%96%B6%22%3B%0A%20%20%20%20Object.assign(scanButton.style%2C%20%7B%0A%20%20%20%20%20%20%20%20background%3A%20%22green%22%2C%0A%20%20%20%20%20%20%20%20color%3A%20%22white%22%2C%0A%20%20%20%20%20%20%20%20border%3A%20%22none%22%2C%0A%20%20%20%20%20%20%20%20cursor%3A%20%22pointer%22%2C%0A%20%20%20%20%20%20%20%20padding%3A%20%225px%2015px%22%2C%0A%20%20%20%20%20%20%20%20fontSize%3A%20%2214px%22%2C%0A%20%20%20%20%20%20%20%20fontWeight%3A%20%22bold%22%0A%20%20%20%20%7D)%3B%0A%20%20%20%20scanButton.onclick%20%3D%20executeScanBarcode%3B%0A%20%20%20%20barcodeContainer.appendChild(scanButton)%3B%0A%20%20%20%20deviceFrame.appendChild(barcodeContainer)%3B%0A%0A%20%20%20%20barcodeInput.addEventListener(%22keydown%22%2C%20function%20(event)%20%7B%0A%20%20%20%20%20%20%20%20if%20(event.key%20%3D%3D%3D%20%22Enter%22)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20event.preventDefault()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20executeScanBarcode()%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(event.key%20%3D%3D%3D%20%22ArrowUp%22)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20event.preventDefault()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(historyIndex%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20historyIndex--%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20barcodeInput.value%20%3D%20history%5BhistoryIndex%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(event.key%20%3D%3D%3D%20%22ArrowDown%22)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20event.preventDefault()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(historyIndex%20%3C%20history.length%20-%201)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20historyIndex%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20barcodeInput.value%20%3D%20history%5BhistoryIndex%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20historyIndex%20%3D%20history.length%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20barcodeInput.value%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D)%3B%0A%0A%20%20%20%20function%20addBarcodeToHistory(barcode)%20%7B%0A%20%20%20%20%20%20%20%20history.push(barcode)%3B%0A%20%20%20%20%20%20%20%20if%20(history.length%20%3E%2050)%20history.shift()%3B%0A%20%20%20%20%20%20%20%20historyIndex%20%3D%20history.length%3B%0A%0A%20%20%20%20%20%20%20%20const%20barcodeItem%20%3D%20document.createElement(%22div%22)%3B%0A%20%20%20%20%20%20%20%20barcodeItem.textContent%20%3D%20barcode%3B%0A%20%20%20%20%20%20%20%20Object.assign(barcodeItem.style%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20padding%3A%20%225px%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20borderBottom%3A%20%221px%20solid%20%23444%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20fontSize%3A%20%2214px%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20cursor%3A%20%22pointer%22%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20barcodeItem.onclick%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20barcodeInput.value%20%3D%20barcode%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20historyContainer.prepend(barcodeItem)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20executeScanBarcode()%20%7B%0A%20%20%20%20%20%20%20%20const%20barcode%20%3D%20barcodeInput.value.trim()%3B%0A%20%20%20%20%20%20%20%20if%20(!barcode)%20return%3B%0A%0A%20%20%20%20%20%20%20%20simulateTypingInIframeAnywhere(barcode%2C%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20addBarcodeToHistory(barcode)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20barcodeInput.value%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20simulateTypingInIframeAnywhere(text%2C%20onComplete)%20%7B%0A%20%20%20%20%20%20%20%20const%20iframeWin%20%3D%20iframe.contentWindow%3B%0A%20%20%20%20%20%20%20%20const%20iframeDoc%20%3D%20iframe.contentDocument%3B%0A%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20clickTarget%20%3D%20iframeDoc.body%20%7C%7C%20iframeDoc.documentElement%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20clickEvent%20%3D%20new%20MouseEvent(%22click%22%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bubbles%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cancelable%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20view%3A%20iframeWin%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20clickTarget.dispatchEvent(clickEvent)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20index%20%3D%200%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20typeNextChar%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(index%20%3C%20text.length)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20char%20%3D%20text%5Bindex%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20keyEvent%20%3D%20new%20KeyboardEvent(%22keydown%22%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20key%3A%20char%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20code%3A%20char%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20charCode%3A%20char.charCodeAt(0)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20keyCode%3A%20char.charCodeAt(0)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bubbles%3A%20true%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20iframeDoc.dispatchEvent(keyEvent)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20index%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout(typeNextChar%2C%2010)%3B%20%2F%2F%20%EB%B9%A0%EB%A5%B4%EA%B2%8C%3A%200.01%EC%B4%88%20%EA%B0%84%EA%B2%A9%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20enterEvent%20%3D%20new%20KeyboardEvent(%22keydown%22%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20key%3A%20%22Enter%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20code%3A%20%22Enter%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20keyCode%3A%2013%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20charCode%3A%2013%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bubbles%3A%20true%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20iframeDoc.dispatchEvent(enterEvent)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(typeof%20onComplete%20%3D%3D%3D%20%22function%22)%20onComplete()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20typeNextChar()%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%20(err)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20alert(%22iframe%20%EC%A0%91%EA%B7%BC%20%EC%A4%91%20%EC%98%A4%EB%A5%98%20%EB%B0%9C%EC%83%9D%3A%20%22%20%2B%20err.message)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20toggleMinimize()%20%7B%0A%20%20%20%20%20%20%20%20if%20(isMinimized)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20deviceFrame.style.width%20%3D%20lastWidth%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20deviceFrame.style.height%20%3D%20lastHeight%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20iframe.style.display%20%3D%20%22block%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20barcodeContainer.style.display%20%3D%20%22flex%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20historyContainer.style.display%20%3D%20%22flex%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20minimizeButton.innerText%20%3D%20%22-%22%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20lastWidth%20%3D%20deviceFrame.style.width%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20lastHeight%20%3D%20deviceFrame.style.height%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20deviceFrame.style.width%20%3D%20%22200px%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20deviceFrame.style.height%20%3D%20%2250px%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20iframe.style.display%20%3D%20%22none%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20barcodeContainer.style.display%20%3D%20%22none%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20historyContainer.style.display%20%3D%20%22none%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20minimizeButton.innerText%20%3D%20%22%2B%22%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20isMinimized%20%3D%20!isMinimized%3B%0A%20%20%20%20%7D%0A%7D)()%3B%7D)()%3B">WMS PDA Preview</a>
</h1>
<h1>
<a href="javascript:(function()%7B%2F%2F%20%EC%A3%BC%EB%AC%B8%EB%B2%88%ED%98%B8%20%EB%A7%81%ED%81%AC%EC%97%90%20cs%20%EC%A3%BC%EB%AC%B8%EC%A0%95%EB%B3%B4%20%EB%B2%84%ED%8A%BC%EC%9D%84%20%EC%B6%94%EA%B0%80%ED%95%98%EB%8A%94%20%ED%95%A8%EC%88%98%0Afunction%20addCSButtonToOrderLinks(root)%20%7B%0A%20%20%2F%2F%20%EC%A3%BC%EB%AC%B8%EB%B2%88%ED%98%B8%EA%B0%80%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EB%A7%81%ED%81%AC%20%EC%84%A0%ED%83%9D%20(%EC%98%88%3A%20%2Fforwarding-order%2Fdetail%3Fid%3D...%20%EC%9D%B8%20%3Ca%3E%20%ED%83%9C%EA%B7%B8)%0A%20%20const%20orderLinks%20%3D%20root.querySelectorAll('a%5Bhref%5E%3D%22%2Fforwarding-order%2Fdetail%3Fid%3D%22%5D')%3B%0A%20%20%0A%20%20orderLinks.forEach(link%20%3D%3E%20%7B%0A%20%20%20%20%2F%2F%20%EC%9D%B4%EB%AF%B8%20%EB%B2%84%ED%8A%BC%EC%9D%B4%20%EC%B6%94%EA%B0%80%EB%90%98%EC%96%B4%20%EC%9E%88%EC%9C%BC%EB%A9%B4%20%EA%B1%B4%EB%84%88%EB%9C%81%EB%8B%88%EB%8B%A4.%0A%20%20%20%20if%20(link.parentElement.querySelector('.cs-order-info-btn'))%20return%3B%0A%0A%20%20%20%20%2F%2F%20%EC%A3%BC%EB%AC%B8%EB%B2%88%ED%98%B8%20%EC%B6%94%EC%B6%9C%20(%EB%A7%81%ED%81%AC%20%ED%85%8D%EC%8A%A4%ED%8A%B8%EC%97%90%20%EC%A3%BC%EB%AC%B8%EB%B2%88%ED%98%B8%EA%B0%80%20%EC%9E%88%EB%8B%A4%EA%B3%A0%20%EA%B0%80%EC%A0%95)%0A%20%20%20%20const%20orderNumber%20%3D%20link.textContent.trim()%3B%0A%0A%20%20%20%20%2F%2F%20%22cs%20%EC%A3%BC%EB%AC%B8%EC%A0%95%EB%B3%B4%22%20%EB%B2%84%ED%8A%BC%20%EC%83%9D%EC%84%B1%0A%20%20%20%20const%20button%20%3D%20document.createElement(%22button%22)%3B%0A%20%20%20%20button.className%20%3D%20%22cs-order-info-btn%22%3B%20%2F%2F%20%EC%A4%91%EB%B3%B5%20%EC%B6%94%EA%B0%80%20%EB%B0%A9%EC%A7%80%EB%A5%BC%20%EC%9C%84%ED%95%B4%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%A7%80%EC%A0%95%0A%20%20%20%20button.textContent%20%3D%20%22cs%20%EC%A3%BC%EB%AC%B8%EC%A0%95%EB%B3%B4%22%3B%0A%0A%20%20%20%20%2F%2F%20%EB%B2%84%ED%8A%BC%20%EC%8A%A4%ED%83%80%EC%9D%BC%20%EC%A7%80%EC%A0%95%20(%EC%9E%91%EA%B3%A0%20%EA%B9%94%EB%81%94%ED%95%98%EA%B2%8C)%0A%20%20%20%20button.style.fontSize%20%3D%20%2212px%22%3B%0A%20%20%20%20button.style.padding%20%3D%20%224px%208px%22%3B%0A%20%20%20%20button.style.border%20%3D%20%22none%22%3B%0A%20%20%20%20button.style.borderRadius%20%3D%20%224px%22%3B%0A%20%20%20%20button.style.backgroundColor%20%3D%20%22%23008CBA%22%3B%0A%20%20%20%20button.style.color%20%3D%20%22%23fff%22%3B%0A%20%20%20%20button.style.cursor%20%3D%20%22pointer%22%3B%0A%20%20%20%20button.style.marginTop%20%3D%20%224px%22%3B%0A%0A%20%20%20%20%2F%2F%20%ED%81%B4%EB%A6%AD%20%EC%8B%9C%20%EC%83%88%20%EC%B0%BD%EC%97%90%EC%84%9C%20https%3A%2F%2Fcs.alpha.zigzag.kr%2Forders%2F%7B%EC%A3%BC%EB%AC%B8%EB%B2%88%ED%98%B8%7D%20%EB%A1%9C%20%EC%9D%B4%EB%8F%99%0A%20%20%20%20button.addEventListener(%22click%22%2C%20(event)%20%3D%3E%20%7B%0A%20%20%20%20%20%20event.preventDefault()%3B%0A%20%20%20%20%20%20const%20targetUrl%20%3D%20%60https%3A%2F%2Fcs.alpha.zigzag.kr%2Forders%2F%24%7BorderNumber%7D%60%3B%0A%20%20%20%20%20%20window.open(targetUrl%2C%20'_blank')%3B%0A%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%2F%2F%20%EC%A3%BC%EB%AC%B8%EB%B2%88%ED%98%B8%20%EB%A7%81%ED%81%AC%EC%9D%98%20%EB%B6%80%EB%AA%A8%20%EC%9A%94%EC%86%8C%EC%97%90%20%EB%B2%84%ED%8A%BC%20%EC%B6%94%EA%B0%80%0A%20%20%20%20link.parentElement.appendChild(button)%3B%0A%20%20%7D)%3B%0A%7D%0A%0A%2F%2F%20%EC%B5%9C%EC%B4%88%20%ED%8E%98%EC%9D%B4%EC%A7%80%20%EB%A1%9C%EB%93%9C%20%EC%8B%9C%20%EB%B2%84%ED%8A%BC%20%EC%B6%94%EA%B0%80%0A%20%20addCSButtonToOrderLinks(document)%3B%0A%0A%20%20%2F%2F%20%EC%A3%BC%EB%AC%B8%20%ED%85%8C%EC%9D%B4%EB%B8%94%20%EC%98%81%EC%97%AD(%EB%98%90%EB%8A%94%20%EC%A3%BC%EB%AC%B8%EB%B2%88%ED%98%B8%EA%B0%80%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EC%98%81%EC%97%AD)%EC%9D%84%20%EA%B0%90%EC%8B%9C%ED%95%A0%20MutationObserver%20%EC%84%A4%EC%A0%95%0A%20%20%2F%2F%20%EC%97%AC%EA%B8%B0%EC%84%9C%EB%8A%94%20%EC%98%88%EC%8B%9C%EB%A1%9C%20%ED%85%8C%EC%9D%B4%EB%B8%94%20%EC%9A%94%EC%86%8C%EB%A5%BC%20%EC%84%A0%ED%83%9D%20(%EC%8B%A4%EC%A0%9C%20%EC%83%81%ED%99%A9%EC%97%90%20%EB%A7%9E%EA%B2%8C%20%EC%84%A0%ED%83%9D%EC%9E%90%20%EC%A1%B0%EC%A0%95%20%ED%95%84%EC%9A%94)%0A%20%20const%20tableContainer%20%3D%20document.querySelector('table.pds-table')%3B%0A%20%20if%20(tableContainer)%20%7B%0A%20%20%20%20const%20observer%20%3D%20new%20MutationObserver((mutationsList%2C%20observer)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%2F%2F%20%EB%B3%80%EA%B2%BD%EC%9D%B4%20%EA%B0%90%EC%A7%80%EB%90%A0%20%EB%95%8C%EB%A7%88%EB%8B%A4%20%EC%83%88%EB%A1%9C%EC%9A%B4%20%EC%A3%BC%EB%AC%B8%EB%B2%88%ED%98%B8%20%EB%A7%81%ED%81%AC%EC%97%90%20%EB%B2%84%ED%8A%BC%EC%9D%84%20%EC%B6%94%EA%B0%80%0A%20%20%20%20%20%20addCSButtonToOrderLinks(tableContainer)%3B%0A%20%20%20%20%7D)%3B%0A%20%20%20%20%0A%20%20%20%20%2F%2F%20%EC%9E%90%EC%8B%9D%20%EB%85%B8%EB%93%9C%EC%9D%98%20%EC%B6%94%EA%B0%80%2F%EC%82%AD%EC%A0%9C%20%EB%B0%8F%20%ED%95%98%EC%9C%84%20%EC%9A%94%EC%86%8C%20%EB%B3%80%EA%B2%BD%EC%9D%84%20%EA%B0%90%EC%8B%9C%0A%20%20%20%20observer.observe(tableContainer%2C%20%7B%20childList%3A%20true%2C%20subtree%3A%20true%20%7D)%3B%0A%20%20%7D%7D)()%3B">
주문관리 <-> cs 연동 버튼 추가
</a>
</h1>
<h1>
<a href="javascript:(function()%7B(function()%20%7B%0A%20%20%20%20'use%20strict'%3B%0A%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20%2F%2F%201.%20CONSTANTS%20%26%20CONFIGURATION%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20const%20CONFIG%20%3D%20%7B%0A%20%20%20%20%20%20%20%20GRID_COUNT%3A%2020%2C%0A%20%20%20%20%20%20%20%20MAX_HISTORY_SIZE%3A%2050%2C%0A%20%20%20%20%20%20%20%20WIDGET_ID%3A%20'vms-rebin-fixed-root'%2C%0A%20%20%20%20%20%20%20%20STYLE_ID%3A%20'vms-style-rebin-drag'%2C%0A%20%20%20%20%20%20%20%20API_ENDPOINT%3A%20'%2Fapi%2Fgraphql%2FGetFCAssignOrderAssortingStation'%2C%0A%20%20%20%20%20%20%20%20TOTE_API_ENDPOINT%3A%20'%2Fapi%2Fgraphql%2FGetFcTotePageList'%2C%0A%20%20%20%20%20%20%20%20TEST_MODE%3A%20false%20%2F%2F%20Set%20to%20false%20to%20enforce%20Sorter%20Type%20checks%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20%2F%2F%202.%20STATE%20MANAGEMENT%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20const%20STATE%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20Authentication%0A%20%20%20%20%20%20%20%20isLoggedIn%3A%20false%2C%0A%20%20%20%20%20%20%20%20workstationId%3A%20null%2C%0A%20%20%20%20%20%20%20%20stationId%3A%20null%2C%0A%20%20%20%20%20%20%20%20sorterType%3A%20null%2C%0A%20%20%20%20%20%20%20%20workflowId%3A%20null%2C%0A%20%20%20%20%20%20%20%20workflowName%3A%20null%2C%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20UI%20State%0A%20%20%20%20%20%20%20%20isCollapsed%3A%20false%2C%0A%20%20%20%20%20%20%20%20isSidePanelOpen%3A%20true%2C%0A%20%20%20%20%20%20%20%20selectedGridId%3A%20null%2C%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20Work%20State%0A%20%20%20%20%20%20%20%20sourceTote%3A%20null%2C%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20Data%0A%20%20%20%20%20%20%20%20grids%3A%20%5B%5D%2C%0A%20%20%20%20%20%20%20%20orderPool%3A%20%5B%5D%2C%0A%20%20%20%20%20%20%20%20toteInventory%3A%20%7B%7D%2C%20%2F%2F%20%7B%20'TOTE-ID'%3A%20Set('SKU1'%2C%20'SKU2')%20%7D%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20History%0A%20%20%20%20%20%20%20%20scanHistory%3A%20%5B%5D%2C%0A%20%20%20%20%20%20%20%20historyIndex%3A%20-1%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20%2F%2F%20Helper%20to%20check%20if%20actions%20are%20allowed%20(Respects%20TEST_MODE)%0A%20%20%20%20function%20isActionAllowed()%20%7B%0A%20%20%20%20%20%20%20%20return%20CONFIG.TEST_MODE%20%7C%7C%20STATE.sorterType%20%3D%3D%3D%20'SORTER'%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20%2F%2F%202-1.%20UTILS%20(Cookie%20%26%20JWT)%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20function%20getCookie(name)%20%7B%0A%20%20%20%20%20%20%20%20const%20value%20%3D%20%60%3B%20%24%7Bdocument.cookie%7D%60%3B%0A%20%20%20%20%20%20%20%20const%20parts%20%3D%20value.split(%60%3B%20%24%7Bname%7D%3D%60)%3B%0A%20%20%20%20%20%20%20%20if%20(parts.length%20%3D%3D%3D%202)%20return%20parts.pop().split('%3B').shift()%3B%0A%20%20%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20parseJwt(token)%20%7B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(!token)%20return%20null%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20base64Url%20%3D%20token.split('.')%5B1%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20base64%20%3D%20base64Url.replace(%2F-%2Fg%2C%20'%2B').replace(%2F_%2Fg%2C%20'%2F')%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20jsonPayload%20%3D%20decodeURIComponent(atob(base64).split('').map(function(c)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20'%25'%20%2B%20('00'%20%2B%20c.charCodeAt(0).toString(16)).slice(-2)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D).join(''))%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20JSON.parse(jsonPayload)%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20console.error(%22JWT%20Parsing%20Error%3A%22%2C%20e)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20%2F%2F%203.%20INITIALIZATION%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20function%20init()%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20Test%20JWT%20Access%20(Check%20Cookie%20first%2C%20then%20LocalStorage%20as%20fallback)%0A%20%20%20%20%20%20%20%20let%20token%20%3D%20getCookie('WMS_ACCESS_TOKEN')%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20if%20(!token)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20HttpOnly%20%EB%8C%80%EB%B9%84%3A%20LocalStorage%EC%9D%98%20%ED%9D%94%ED%95%9C%20%ED%82%A4%EA%B0%92%EB%93%A4%20%ED%99%95%EC%9D%B8%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20commonTokenKeys%20%3D%20%5B'WMS_ACCESS_TOKEN'%2C%20'accessToken'%2C%20'token'%2C%20'auth_token'%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20(const%20key%20of%20commonTokenKeys)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20val%20%3D%20localStorage.getItem(key)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(val)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20token%20%3D%20val%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20console.log(%60%E2%84%B9%EF%B8%8F%20%5BVMS%5D%20Token%20found%20in%20LocalStorage%3A%20%24%7Bkey%7D%60)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20const%20decoded%20%3D%20parseJwt(token)%3B%0A%20%20%20%20%20%20%20%20console.log(%22%F0%9F%94%91%20%5BVMS%5D%20WMS_ACCESS_TOKEN%3A%22%2C%20token%20%3F%20%22Found%22%20%3A%20%22Not%20Found%20(HttpOnly%3F)%22)%3B%0A%20%20%20%20%20%20%20%20if%20(decoded)%20console.log(%22%F0%9F%93%84%20%5BVMS%5D%20Decoded%20JWT%20Payload%3A%22%2C%20decoded)%3B%0A%0A%20%20%20%20%20%20%20%20removeExistingWidget()%3B%0A%20%20%20%20%20%20%20%20injectStyles()%3B%0A%20%20%20%20%20%20%20%20initializeGrids()%3B%0A%20%20%20%20%20%20%20%20createRootElement()%3B%0A%20%20%20%20%20%20%20%20renderLogin()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20removeExistingWidget()%20%7B%0A%20%20%20%20%20%20%20%20const%20existing%20%3D%20document.getElementById(CONFIG.WIDGET_ID)%3B%0A%20%20%20%20%20%20%20%20if%20(existing)%20existing.remove()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20initializeGrids()%20%7B%0A%20%20%20%20%20%20%20%20STATE.grids%20%3D%20Array(CONFIG.GRID_COUNT).fill(null).map((_%2C%20i)%20%3D%3E%20createEmptyGrid(i%20%2B%201))%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20createEmptyGrid(index)%20%7B%0A%20%20%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20id%3A%20%60GRID-%24%7BString(index).padStart(2%2C%20'0')%7D%60%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20status%3A%20'EMPTY'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20destTote%3A%20null%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20assignedOrderId%3A%20null%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20scannedItems%3A%20%7B%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20logs%3A%20%5B%5D%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20createRootElement()%20%7B%0A%20%20%20%20%20%20%20%20const%20root%20%3D%20document.createElement('div')%3B%0A%20%20%20%20%20%20%20%20root.id%20%3D%20CONFIG.WIDGET_ID%3B%0A%20%20%20%20%20%20%20%20document.body.appendChild(root)%3B%0A%20%20%20%20%20%20%20%20return%20root%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20getRootElement()%20%7B%0A%20%20%20%20%20%20%20%20return%20document.getElementById(CONFIG.WIDGET_ID)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20%2F%2F%205.%20API%20COMMUNICATION%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20async%20function%20fetchStationData(barcode)%20%7B%0A%20%20%20%20%20%20%20%20const%20query%20%3D%20buildGraphQLQuery()%3B%0A%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20response%20%3D%20await%20fetch(CONFIG.API_ENDPOINT%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20method%3A%20'POST'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20headers%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'Content-Type'%3A%20'application%2Fjson'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'Accept'%3A%20'application%2Fjson'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20body%3A%20JSON.stringify(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20query%3A%20query%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20variables%3A%20%7B%20barcode%3A%20barcode%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20json%20%3D%20await%20response.json()%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(json.errors%20%26%26%20json.errors.length%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alert(json.errors%5B0%5D.message)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(json.data%20%26%26%20json.data.fc_order_assorting_station_state)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mapServerDataToState(json.data.fc_order_assorting_station_state)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Auto-fill%20totes%20if%20needed%20(await%20logic%20is%20optional%20here%2C%20we%20can%20let%20it%20run%20in%20background)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20But%20since%20we%20want%20to%20show%20the%20final%20state%2C%20we%20await%20it.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20await%20autoFillTotes()%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20updateAllUI%20is%20called%20inside%20autoFillTotes%20if%20changes%20happened.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20If%20no%20changes%2C%20we%20should%20call%20it%20here%20to%20ensure%20UI%20is%20rendered%20at%20least%20once.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20updateAllUI()%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20Error(%22Invalid%20Response%20Structure%22)%3B%0A%0A%20%20%20%20%20%20%20%20%7D%20catch%20(error)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20console.error(%22Fetch%20Error%3A%22%2C%20error)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20async%20function%20fetchUnassignedTotes()%20%7B%0A%20%20%20%20%20%20%20%20const%20query%20%3D%20%60%0A%20%20%20%20%20%20%20%20%20%20%20%20query%20GetFcTotePageList(%24search_input%3A%20FCToteSearchInput!%2C%20%24page_input%3A%20FCPageInput!)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fc_tote_page_list(search_input%3A%20%24search_input%2C%20page_input%3A%20%24page_input)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tote_list%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tote_barcode%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%60%3B%0A%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20response%20%3D%20await%20fetch(CONFIG.TOTE_API_ENDPOINT%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20method%3A%20'POST'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20headers%3A%20%7B%20'Content-Type'%3A%20'application%2Fjson'%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20body%3A%20JSON.stringify(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20query%3A%20query%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20variables%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20search_input%3A%20%7B%20domain_type%3A%20%22NONE%22%2C%20assign_type%3A%20%22NOT_ASSIGNED%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20page_input%3A%20%7B%20page%3A%207%2C%20page_size%3A%20STATE.grids.length%20%7C%7C%20CONFIG.GRID_COUNT%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20json%20%3D%20await%20response.json()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20json%3F.data%3F.fc_tote_page_list%3F.tote_list%20%7C%7C%20%5B%5D%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20console.error(%22Tote%20Fetch%20Error%3A%22%2C%20e)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%5B%5D%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20async%20function%20sendDropFeedback(grid%2C%20skuBarcode)%20%7B%0A%20%20%20%20%20%20%20%20if%20(!STATE.stationId)%20return%20false%3B%0A%0A%20%20%20%20%20%20%20%20const%20order%20%3D%20STATE.orderPool.find(o%20%3D%3E%20o.orderId%20%3D%3D%3D%20grid.assignedOrderId)%3B%0A%20%20%20%20%20%20%20%20if%20(!order)%20return%20false%3B%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20Find%20skuId%20from%20barcode%0A%20%20%20%20%20%20%20%20let%20skuId%20%3D%20skuBarcode%3B%0A%20%20%20%20%20%20%20%20%2F%2F%20Check%20skuInfo%20for%20mapping%0A%20%20%20%20%20%20%20%20if%20(order.skuInfo%20%26%26%20order.skuInfo%5BskuBarcode%5D)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20skuId%20%3D%20order.skuInfo%5BskuBarcode%5D.id%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20const%20gridNo%20%3D%20grid.id.replace('GRID-'%2C%20'').replace(%2F%5E0%2B%2F%2C%20'')%3B%20%2F%2F%20GRID-02%20-%3E%202%0A%0A%20%20%20%20%20%20%20%20const%20payload%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22pickingContainerNo%22%20%3A%20STATE.sourceTote%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22skuNo%22%20%3A%20skuId%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22containerNo%22%20%3A%20grid.destTote%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22waveNo%22%20%3A%20STATE.workflowId%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22orderNo%22%20%3A%20grid.assignedOrderId%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22gridNo%22%20%3A%20gridNo%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22stationId%22%20%3A%20String(STATE.stationId)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22centerId%22%20%3A%20%225%22%0A%20%20%20%20%20%20%20%20%7D%3B%0A%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20res%20%3D%20await%20fetch('%2Fapi%2Fsorter%2Fv3.0%2Fproduct-drop-feedback'%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20method%3A%20'POST'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20headers%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'Content-Type'%3A%20'application%2Fjson'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'x-wms-api-key'%3A%20'f1dc5be4-78c0-4a95-922e-c1dc5567211f'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'x-wms-sorter-station-id'%3A%20String(STATE.stationId)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'x-wms-sorter-center-id'%3A%20'5'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20body%3A%20JSON.stringify(payload)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20json%20%3D%20await%20res.json()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(json.status%20%26%26%20json.status%20!%3D%3D%20'OK')%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20showToast(json.message%20%7C%7C%20%22%EC%98%A4%EB%A5%98%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%22%2C%20'error')%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20console.log(%22%E2%9C%85%20Drop%20Feedback%20Sent%3A%22%2C%20payload)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20console.error(%22%E2%9D%8C%20Drop%20Feedback%20Failed%3A%22%2C%20e)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20async%20function%20sendOrderFeedback(grid)%20%7B%0A%20%20%20%20%20%20%20%20if%20(!STATE.stationId)%20return%20false%3B%0A%0A%20%20%20%20%20%20%20%20const%20order%20%3D%20STATE.orderPool.find(o%20%3D%3E%20o.orderId%20%3D%3D%3D%20grid.assignedOrderId)%3B%0A%20%20%20%20%20%20%20%20if%20(!order)%20return%20false%3B%0A%0A%20%20%20%20%20%20%20%20const%20gridNo%20%3D%20grid.id.replace('GRID-'%2C%20'').replace(%2F%5E0%2B%2F%2C%20'')%3B%0A%0A%20%20%20%20%20%20%20%20const%20details%20%3D%20Object.keys(grid.scannedItems).map(skuBarcode%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20skuId%20%3D%20skuBarcode%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(order.skuInfo%20%26%26%20order.skuInfo%5BskuBarcode%5D)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20skuId%20%3D%20order.skuInfo%5BskuBarcode%5D.id%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20skuNo%3A%20skuId%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sortedQuantity%3A%20grid.scannedItems%5BskuBarcode%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20const%20payload%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22containerNo%22%3A%20grid.destTote%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22gridNo%22%3A%20gridNo%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22orderNo%22%3A%20grid.assignedOrderId%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22status%22%3A%20%22FINISHED%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22waveNo%22%3A%20STATE.workflowId%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22stationId%22%3A%20String(STATE.stationId)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22centerId%22%3A%20%225%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22details%22%3A%20details%0A%20%20%20%20%20%20%20%20%7D%3B%0A%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20res%20%3D%20await%20fetch('%2Fapi%2Fsorter%2Fv3.0%2Fcustomer-order-feedback'%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20method%3A%20'POST'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20headers%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'Content-Type'%3A%20'application%2Fjson'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'x-wms-api-key'%3A%20'f1dc5be4-78c0-4a95-922e-c1dc5567211f'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'x-wms-sorter-station-id'%3A%20String(STATE.stationId)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'x-wms-sorter-center-id'%3A%20'5'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20body%3A%20JSON.stringify(payload)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20json%20%3D%20await%20res.json()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(json.status%20%26%26%20json.status%20!%3D%3D%20'OK')%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20showToast(json.message%20%7C%7C%20%22%EC%98%A4%EB%A5%98%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%22%2C%20'error')%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20console.log(%22%E2%9C%85%20Order%20Feedback%20(FINISHED)%20Sent%3A%22%2C%20payload)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20console.error(%22%E2%9D%8C%20Order%20Feedback%20Failed%3A%22%2C%20e)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20async%20function%20sendWaveFeedback()%20%7B%0A%20%20%20%20%20%20%20%20if%20(!STATE.stationId%20%7C%7C%20!STATE.workflowId)%20return%20false%3B%0A%0A%20%20%20%20%20%20%20%20const%20payload%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22waveNo%22%3A%20String(STATE.workflowId)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22status%22%3A%20%22FINISHED%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22stationId%22%3A%20String(STATE.stationId)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22centerId%22%3A%20%225%22%0A%20%20%20%20%20%20%20%20%7D%3B%0A%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20res%20%3D%20await%20fetch('%2Fapi%2Fsorter%2Fv3.0%2Fwave-order-feedback'%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20method%3A%20'POST'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20headers%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'Content-Type'%3A%20'application%2Fjson'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'x-wms-api-key'%3A%20'f1dc5be4-78c0-4a95-922e-c1dc5567211f'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'x-wms-sorter-station-id'%3A%20String(STATE.stationId)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'x-wms-sorter-center-id'%3A%20'5'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20body%3A%20JSON.stringify(payload)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20json%20%3D%20await%20res.json()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(json.status%20%26%26%20json.status%20!%3D%3D%20'OK')%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20showToast(json.message%20%7C%7C%20%22%EC%98%A4%EB%A5%98%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%22%2C%20'error')%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20console.log(%22%E2%9C%85%20Wave%20Feedback%20(FINISHED)%20Sent%3A%22%2C%20payload)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20console.error(%22%E2%9D%8C%20Wave%20Feedback%20Failed%3A%22%2C%20e)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20buildGraphQLQuery()%20%7B%0A%20%20%20%20%20%20%20%20return%20%60%0A%20%20%20%20%20%20%20%20%20%20%20%20query%20Fc_order_assorting_station_state(%24barcode%3A%20String!)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fc_order_assorting_station_state(barcode%3A%20%24barcode)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20station_id%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20total_cell_count%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sorter_type%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20grids%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20grid%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20orders%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20order_id%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20oms_order_id%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20order_workflow_id%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20workflow_name%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20assorted_tote%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20order_item_list%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20order_item_id%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sku_id%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20barcode%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20total_qty%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20total_worked_qty%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20picking_tote_list%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20picking_tote%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20qty%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20worked_qty%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20mapServerDataToState(serverData)%20%7B%0A%20%20%20%20%20%20%20%20const%20gridCount%20%3D%20serverData.total_cell_count%20%7C%7C%20CONFIG.GRID_COUNT%3B%0A%20%20%20%20%20%20%20%20STATE.sorterType%20%3D%20serverData.sorter_type%3B%0A%20%20%20%20%20%20%20%20STATE.stationId%20%3D%20serverData.station_id%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20Reset%20workflow%20info%0A%20%20%20%20%20%20%20%20STATE.workflowId%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20STATE.workflowName%20%3D%20null%3B%0A%0A%20%20%20%20%20%20%20%20const%20newGrids%20%3D%20Array(gridCount).fill(null).map((_%2C%20i)%20%3D%3E%20createEmptyGrid(i%20%2B%201))%3B%0A%20%20%20%20%20%20%20%20const%20newOrderPool%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20%20%20const%20newToteInventory%20%3D%20%7B%7D%3B%0A%0A%20%20%20%20%20%20%20%20if%20(serverData.grids)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20serverData.grids.forEach(serverGrid%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20processServerGrid(serverGrid%2C%20newGrids%2C%20newOrderPool%2C%20newToteInventory)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Extract%20workflow%20info%20from%20the%20first%20order%20found%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20(const%20serverGrid%20of%20serverData.grids)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(serverGrid.orders%20%26%26%20serverGrid.orders.length%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20firstOrder%20%3D%20serverGrid.orders%5B0%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20STATE.workflowId%20%3D%20firstOrder.order_workflow_id%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20STATE.workflowName%20%3D%20firstOrder.workflow_name%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20STATE.grids%20%3D%20newGrids%3B%0A%20%20%20%20%20%20%20%20STATE.orderPool%20%3D%20newOrderPool%3B%0A%20%20%20%20%20%20%20%20STATE.toteInventory%20%3D%20newToteInventory%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20processServerGrid(serverGrid%2C%20newGrids%2C%20newOrderPool%2C%20newToteInventory)%20%7B%0A%20%20%20%20%20%20%20%20const%20gridIdx%20%3D%20serverGrid.grid%20-%201%3B%0A%20%20%20%20%20%20%20%20if%20(gridIdx%20%3C%200%20%7C%7C%20gridIdx%20%3E%3D%20newGrids.length)%20return%3B%0A%0A%20%20%20%20%20%20%20%20const%20targetGrid%20%3D%20newGrids%5BgridIdx%5D%3B%0A%0A%20%20%20%20%20%20%20%20if%20(serverGrid.orders%20%26%26%20serverGrid.orders.length%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20order%20%3D%20serverGrid.orders%5B0%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20orderData%20%3D%20processServerOrder(order%2C%20targetGrid%2C%20newToteInventory)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20newOrderPool.push(orderData)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20processServerOrder(order%2C%20targetGrid%2C%20newToteInventory)%20%7B%0A%20%20%20%20%20%20%20%20targetGrid.status%20%3D%20'ACTIVE'%3B%0A%20%20%20%20%20%20%20%20targetGrid.assignedOrderId%20%3D%20order.order_id%3B%0A%0A%20%20%20%20%20%20%20%20if%20(order.assorted_tote)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20targetGrid.destTote%20%3D%20order.assorted_tote%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20targetGrid.isVirtualTote%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20targetGrid.destTote%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20targetGrid.isVirtualTote%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20const%20requiredItems%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20const%20skuInfo%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20const%20pickingToteList%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20%20%20let%20isOrderComplete%20%3D%20true%3B%0A%0A%20%20%20%20%20%20%20%20order.order_item_list.forEach(item%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20sku%20%3D%20item.barcode%20%7C%7C%20item.sku_id%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20requiredItems%5Bsku%5D%20%3D%20item.total_qty%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20skuInfo%5Bsku%5D%20%3D%20%7B%20id%3A%20item.sku_id%2C%20barcode%3A%20item.barcode%20%7D%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20targetGrid.scannedItems%5Bsku%5D%20%3D%20item.total_worked_qty%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(item.total_worked_qty%20%3C%20item.total_qty)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20isOrderComplete%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(item.picking_tote_list)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20processPickingToteList(item.picking_tote_list%2C%20sku%2C%20pickingToteList%2C%20newToteInventory)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20if%20(isOrderComplete)%20targetGrid.status%20%3D%20'COMPLETE'%3B%0A%0A%20%20%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20orderId%3A%20order.order_id%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20omsOrderId%3A%20order.oms_order_id%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20requiredItems%3A%20requiredItems%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20skuInfo%3A%20skuInfo%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20pickingToteList%3A%20pickingToteList%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20allocatedSlot%3A%20targetGrid.id%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20isComplete%3A%20isOrderComplete%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20processPickingToteList(pickingToteList%2C%20sku%2C%20outputList%2C%20toteInventory)%20%7B%0A%20%20%20%20%20%20%20%20pickingToteList.forEach(pt%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20outputList.push(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sku%3A%20sku%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tote%3A%20pt.picking_tote%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20qty%3A%20pt.qty%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20workedQty%3A%20pt.worked_qty%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(!toteInventory%5Bpt.picking_tote%5D)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20toteInventory%5Bpt.picking_tote%5D%20%3D%20new%20Set()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20toteInventory%5Bpt.picking_tote%5D.add(sku)%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20%2F%2F%206.%20UI%20RENDERING%20-%20LOGIN%20SCREEN%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20function%20renderLogin()%20%7B%0A%20%20%20%20%20%20%20%20const%20root%20%3D%20getRootElement()%3B%0A%20%20%20%20%20%20%20%20root.innerHTML%20%3D%20%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-header%22%20id%3D%22vms-header-bar%22%20style%3D%22background%3A%20%232c3e50%3B%20border-bottom%3A%20none%3B%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22font-weight%3Abold%3B%20color%3A%20%23ecf0f1%3B%22%3E%F0%9F%8F%97%EF%B8%8F%20%EB%B6%84%EB%A5%98%20%EC%9E%91%EC%97%85%EB%8C%80%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22vms-login-close-btn%22%20class%3D%22vms-ctrl-btn%22%20title%3D%22%EB%8B%AB%EA%B8%B0%22%3E%E2%9C%95%3C%2Fbutton%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-login-layer%22%20style%3D%22position%3A%20relative%3B%20inset%3A%20auto%3B%20flex%3A%201%3B%20width%3A%20100%25%3B%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22font-size%3A50px%3B%20margin-bottom%3A20px%3B%22%3E%F0%9F%8F%97%EF%B8%8F%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-login-card%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ch3%3E%EB%B6%84%EB%A5%98%20%EC%9E%91%EC%97%85%EB%8C%80%20%EB%B0%94%EC%BD%94%EB%93%9C%3C%2Fh3%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cinput%20id%3D%22vms-ws-id%22%20style%3D%22width%3A100%25%3B%20padding%3A10px%3B%20margin-bottom%3A10px%3B%20box-sizing%3Aborder-box%3B%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20placeholder%3D%22WS-01%22%20value%3D%22ASST00076%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22vms-login-btn%22%20style%3D%22width%3A100%25%3B%20padding%3A10px%3B%20background%3A%233498db%3B%20color%3Awhite%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20border%3Anone%3B%20border-radius%3A4px%3B%20cursor%3Apointer%3B%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CONNECT%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fbutton%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%60%3B%0A%0A%20%20%20%20%20%20%20%20attachLoginHandlers()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20attachLoginHandlers()%20%7B%0A%20%20%20%20%20%20%20%20enableDragAndDrop()%3B%0A%0A%20%20%20%20%20%20%20%20const%20closeBtn%20%3D%20document.getElementById('vms-login-close-btn')%3B%0A%20%20%20%20%20%20%20%20if%20(closeBtn)%20closeBtn.onclick%20%3D%20handleClose%3B%0A%0A%20%20%20%20%20%20%20%20const%20input%20%3D%20document.getElementById('vms-ws-id')%3B%0A%20%20%20%20%20%20%20%20const%20btn%20%3D%20document.getElementById('vms-login-btn')%3B%0A%0A%20%20%20%20%20%20%20%20btn.onclick%20%3D%20handleLogin%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20Enable%20login%20via%20Enter%20key%0A%20%20%20%20%20%20%20%20input.addEventListener('keydown'%2C%20(e)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(e.key%20%3D%3D%3D%20'Enter')%20handleLogin()%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20async%20function%20handleLogin()%20%7B%0A%20%20%20%20%20%20%20%20const%20barcode%20%3D%20document.getElementById('vms-ws-id').value.trim()%3B%0A%20%20%20%20%20%20%20%20if%20(!barcode)%20return%20alert(%22%EB%B0%94%EC%BD%94%EB%93%9C%EB%A5%BC%20%EC%9E%85%EB%A0%A5%ED%95%98%EC%84%B8%EC%9A%94.%22)%3B%0A%0A%20%20%20%20%20%20%20%20const%20btn%20%3D%20document.getElementById('vms-login-btn')%3B%0A%20%20%20%20%20%20%20%20const%20originalText%20%3D%20btn.innerText%3B%0A%20%20%20%20%20%20%20%20btn.innerText%20%3D%20%22Loading...%22%3B%0A%20%20%20%20%20%20%20%20btn.disabled%20%3D%20true%3B%0A%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20success%20%3D%20await%20fetchStationData(barcode)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(success)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20STATE.workstationId%20%3D%20barcode%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20STATE.isLoggedIn%20%3D%20true%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20renderDashboard()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20console.error(e)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20alert(%22%EC%8B%9C%EC%8A%A4%ED%85%9C%20%EC%98%A4%EB%A5%98%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%22)%3B%0A%20%20%20%20%20%20%20%20%7D%20finally%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20btn.innerText%20%3D%20originalText%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20btn.disabled%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20%2F%2F%207.%20UI%20RENDERING%20-%20MAIN%20DASHBOARD%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20function%20renderDashboard()%20%7B%0A%20%20%20%20%20%20%20%20const%20root%20%3D%20getRootElement()%3B%0A%20%20%20%20%20%20%20%20root.innerHTML%20%3D%20buildDashboardHTML()%3B%0A%0A%20%20%20%20%20%20%20%20attachDashboardHandlers()%3B%0A%20%20%20%20%20%20%20%20updateAllUI()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20buildDashboardHTML()%20%7B%0A%20%20%20%20%20%20%20%20return%20%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-header%22%20id%3D%22vms-header-bar%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22display%3Aflex%3B%20align-items%3Acenter%3B%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22font-weight%3Abold%3B%20font-size%3A16px%3B%22%3E%F0%9F%8F%97%EF%B8%8F%20%EB%B6%84%EB%A5%98%20%EC%9E%91%EC%97%85%EB%8C%80%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20id%3D%22vms-status-sub%22%20style%3D%22font-size%3A12px%3B%20margin-left%3A15px%3B%20opacity%3A0.8%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3Argba(255%2C255%2C255%2C0.1)%3B%20padding%3A2px%208px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20border-radius%3A10px%3B%22%3E%24%7BSTATE.workstationId%7D%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20id%3D%22vms-workflow-badge%22%20style%3D%22font-size%3A11px%3B%20margin-left%3A8px%3B%20opacity%3A0.9%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%236c5ce7%3B%20color%3Awhite%3B%20padding%3A2px%208px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20border-radius%3A4px%3B%20font-weight%3Abold%3B%20display%3Anone%3B%22%3E%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24%7B!isActionAllowed()%20%3F%20%60%3Cspan%20style%3D%22background%3A%23e74c3c%3B%20color%3Awhite%3B%20font-size%3A10px%3B%20padding%3A2px%206px%3B%20border-radius%3A4px%3B%20margin-left%3A10px%3B%20font-weight%3Abold%3B%22%3EVIEW%20ONLY%20(%24%7BSTATE.sorterType%7D)%3C%2Fspan%3E%60%20%3A%20''%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22vms-logout-btn%22%20class%3D%22vms-ctrl-btn%22%20title%3D%22%EC%9E%91%EC%97%85%EB%8C%80%20%EB%B3%80%EA%B2%BD%22%3E%E3%80%90%E2%8F%BB%E3%80%91%3C%2Fbutton%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22vms-refresh-btn%22%20class%3D%22vms-ctrl-btn%22%20title%3D%22%EC%83%88%EB%A1%9C%EA%B3%A0%EC%B9%A8%22%3E%F0%9F%94%84%3C%2Fbutton%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22vms-min-btn%22%20class%3D%22vms-ctrl-btn%22%20title%3D%22%EC%A0%91%EA%B8%B0%2F%ED%8E%BC%EC%B9%98%EA%B8%B0%22%3E%EF%BC%8D%3C%2Fbutton%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22vms-close-btn%22%20class%3D%22vms-ctrl-btn%22%20title%3D%22%EB%8B%AB%EA%B8%B0%22%3E%E2%9C%95%3C%2Fbutton%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-body%22%20style%3D%22flex-direction%3A%20column%3B%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22flex%3A1%3B%20display%3Aflex%3B%20overflow%3Ahidden%3B%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-sidebar%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-sidebar-head%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%3EGrid%20%ED%98%84%ED%99%A9%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20id%3D%22vms-grid-stats%22%3E%EB%8C%80%EA%B8%B0%20%EC%A4%91...%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20id%3D%22vms-grid-list%22%20class%3D%22vms-grid-list%22%3E%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20id%3D%22vms-detail-panel%22%20class%3D%22vms-detail%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24%7BbuildEmptyStateHTML('%EC%8B%9C%EC%8A%A4%ED%85%9C%20%EC%A4%80%EB%B9%84%20%EC%99%84%EB%A3%8C'%2C%20'%ED%94%BC%ED%82%B9%20Tote%EB%A5%BC%20%EC%8A%A4%EC%BA%94%ED%95%98%EC%97%AC%20%EC%9E%91%EC%97%85%EC%9D%84%20%EC%8B%9C%EC%9E%91%ED%95%98%EC%84%B8%EC%9A%94.')%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20id%3D%22vms-history-box%22%20class%3D%22vms-history-log%22%3E%3C%2Fdiv%3E%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%5C%22vms-footer%5C%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-inp-grp%22%20style%3D%22flex%3A0%200%20250px%3B%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Clabel%20class%3D%22vms-lbl%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%201.%20%ED%94%BC%ED%82%B9%20Tote%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22vms-clear-tote%22%20class%3D%22vms-clear-btn%22%3E%EC%B4%88%EA%B8%B0%ED%99%94%3C%2Fbutton%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Flabel%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cinput%20id%3D%22vms-src-inp%22%20class%3D%22vms-inp%22%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20placeholder%3D%22%24%7BisActionAllowed()%20%3F%20'Tote%20%EC%8A%A4%EC%BA%94...'%20%3A%20%60%EC%9E%85%EB%A0%A5%20%EB%B6%88%EA%B0%80%20(%24%7BSTATE.sorterType%7D)%60%7D%22%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24%7BisActionAllowed()%20%3F%20'autofocus'%20%3A%20'disabled'%7D%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-inp-grp%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Clabel%20class%3D%22vms-lbl%22%3E2.%20SKU%20%EB%B0%94%EC%BD%94%EB%93%9C%20%EC%9E%85%EB%A0%A5%3C%2Flabel%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cinput%20id%3D%22vms-sku-inp%22%20class%3D%22vms-inp%22%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20placeholder%3D%22%24%7BisActionAllowed()%20%3F%20'%EB%8C%80%EA%B8%B0%20%EC%A4%91...'%20%3A%20'SORTER%20%ED%83%80%EC%9E%85%EB%A7%8C%20%EA%B0%80%EB%8A%A5'%7D%22%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20disabled%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20id%3D%22vms-side-panel%22%20class%3D%22vms-side-panel%20%24%7BSTATE.isSidePanelOpen%20%3F%20'open'%20%3A%20''%7D%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-header%22%20style%3D%22background%3A%20%23dfe6e9%3B%20color%3A%20%232d3436%3B%20border-radius%3A%2012px%2012px%200%200%3B%20cursor%3A%20default%3B%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22font-weight%3Abold%3B%22%3E%F0%9F%9B%92%20%ED%94%BC%ED%82%B9%20%ED%86%A0%ED%8A%B8%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22vms-side-close-btn%22%20class%3D%22vms-ctrl-btn%22%20style%3D%22color%3A%232d3436%3B%22%3E%E2%9C%95%3C%2Fbutton%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20id%3D%22vms-tote-list%22%20class%3D%22vms-tote-list%22%3E%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20id%3D%22vms-side-toggle%22%20class%3D%22vms-side-toggle%22%3E%F0%9F%9B%92%20%ED%94%BC%ED%82%B9%20%ED%86%A0%ED%8A%B8%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20buildEmptyStateHTML(title%2C%20message)%20%7B%0A%20%20%20%20%20%20%20%20const%20warning%20%3D%20!isActionAllowed()%0A%20%20%20%20%20%20%20%20%20%20%20%20%3F%20%60%3Cp%20style%3D%22color%3A%23e74c3c%3B%20font-size%3A12px%3B%20margin-top%3A10px%3B%20font-weight%3Abold%3B%22%3E%E2%9A%A0%EF%B8%8F%20%ED%98%84%EC%9E%AC%20%24%7BSTATE.sorterType%7D%20%ED%83%80%EC%9E%85%EC%9E%85%EB%8B%88%EB%8B%A4.%20SORTER%20%ED%83%80%EC%9E%85%EC%9D%B4%20%EC%95%84%EB%8B%88%EB%AF%80%EB%A1%9C%20%ED%98%84%ED%99%A9%20%EC%A1%B0%ED%9A%8C%EB%A7%8C%20%EA%B0%80%EB%8A%A5%ED%95%A9%EB%8B%88%EB%8B%A4.%3C%2Fp%3E%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%3A%20''%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20return%20%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%5C%22vms-empty-state%5C%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ch3%3E%24%7Btitle%7D%3C%2Fh3%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cp%3E%24%7Bmessage%7D%3C%2Fp%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24%7Bwarning%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20attachDashboardHandlers()%20%7B%0A%20%20%20%20%20%20%20%20enableDragAndDrop()%3B%0A%0A%20%20%20%20%20%20%20%20document.getElementById('vms-close-btn').onclick%20%3D%20handleClose%3B%0A%20%20%20%20%20%20%20%20document.getElementById('vms-refresh-btn').onclick%20%3D%20handleRefresh%3B%0A%20%20%20%20%20%20%20%20document.getElementById('vms-logout-btn').onclick%20%3D%20handleLogout%3B%0A%20%20%20%20%20%20%20%20document.getElementById('vms-min-btn').onclick%20%3D%20handleToggleCollapse%3B%0A%0A%20%20%20%20%20%20%20%20document.getElementById('vms-side-toggle').onclick%20%3D%20handleToggleSidePanel%3B%0A%20%20%20%20%20%20%20%20document.getElementById('vms-side-close-btn').onclick%20%3D%20handleToggleSidePanel%3B%0A%0A%20%20%20%20%20%20%20%20attachInputHandlers()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20%2F%2F%208.%20UI%20EVENT%20HANDLERS%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20async%20function%20handleFillEmptyTotes()%20%7B%0A%20%20%20%20%20%20%20%20const%20btn%20%3D%20document.getElementById('vms-fill-totes-btn')%3B%0A%20%20%20%20%20%20%20%20if%20(btn)%20btn.disabled%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20count%20%3D%20await%20autoFillTotes()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(count%20%3E%200)%20alert(%60%24%7Bcount%7D%EA%B0%9C%EC%9D%98%20%EA%B7%B8%EB%A6%AC%EB%93%9C%EC%97%90%20%ED%86%A0%ED%8A%B8%EA%B0%80%20%ED%95%A0%EB%8B%B9%EB%90%98%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%60)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20else%20alert(%22%ED%95%A0%EB%8B%B9%ED%95%A0%20%ED%86%A0%ED%8A%B8%EA%B0%80%20%EC%97%86%EA%B1%B0%EB%82%98%20%EB%AA%A8%EB%93%A0%20%EA%B7%B8%EB%A6%AC%EB%93%9C%EA%B0%80%20%EC%9D%B4%EB%AF%B8%20%EC%B1%84%EC%9B%8C%EC%A0%B8%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%22)%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20console.error(e)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20alert(%22%ED%86%A0%ED%8A%B8%20%EC%B1%84%EC%9A%B0%EA%B8%B0%20%EC%A4%91%20%EC%98%A4%EB%A5%98%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%22)%3B%0A%20%20%20%20%20%20%20%20%7D%20finally%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(btn)%20btn.disabled%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20async%20function%20autoFillTotes()%20%7B%0A%20%20%20%20%20%20%20%20if%20(!isActionAllowed())%20return%200%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20Find%20grids%20that%20need%20totes%0A%20%20%20%20%20%20%20%20const%20emptyGrids%20%3D%20STATE.grids.filter(g%20%3D%3E%20!g.destTote%20%7C%7C%20g.destTote%20%3D%3D%3D%20'-'%20%7C%7C%20g.destTote%20%3D%3D%3D%20'undefined')%3B%0A%20%20%20%20%20%20%20%20if%20(emptyGrids.length%20%3D%3D%3D%200)%20return%200%3B%0A%0A%20%20%20%20%20%20%20%20const%20totes%20%3D%20await%20fetchUnassignedTotes()%3B%0A%20%20%20%20%20%20%20%20if%20(totes.length%20%3D%3D%3D%200)%20return%200%3B%0A%0A%20%20%20%20%20%20%20%20let%20filledCount%20%3D%200%3B%0A%20%20%20%20%20%20%20%20let%20toteIdx%20%3D%200%3B%0A%0A%20%20%20%20%20%20%20%20emptyGrids.forEach(grid%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(totes%5BtoteIdx%5D)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20grid.destTote%20%3D%20totes%5BtoteIdx%5D.tote_barcode%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20grid.isVirtualTote%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20filledCount%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20toteIdx%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20if%20(filledCount%20%3E%200)%20updateAllUI()%3B%0A%20%20%20%20%20%20%20%20return%20filledCount%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20async%20function%20handleRefresh()%20%7B%0A%20%20%20%20%20%20%20%20const%20btn%20%3D%20document.getElementById('vms-refresh-btn')%3B%0A%20%20%20%20%20%20%20%20if%20(btn.disabled)%20return%3B%0A%0A%20%20%20%20%20%20%20%20const%20originalText%20%3D%20btn.innerText%3B%0A%20%20%20%20%20%20%20%20btn.innerText%20%3D%20'%E2%8C%9B'%3B%0A%20%20%20%20%20%20%20%20btn.disabled%20%3D%20true%3B%0A%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20await%20fetchStationData(STATE.workstationId)%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20console.error(e)%3B%0A%20%20%20%20%20%20%20%20%7D%20finally%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20setTimeout(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20btn.innerText%20%3D%20originalText%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20btn.disabled%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20300)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20handleClose()%20%7B%0A%20%20%20%20%20%20%20%20getRootElement().remove()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20handleLogout()%20%7B%0A%20%20%20%20%20%20%20%20if%20(!confirm(%22%ED%98%84%EC%9E%AC%20%EC%9E%91%EC%97%85%EC%9D%84%20%EC%A2%85%EB%A3%8C%ED%95%98%EA%B3%A0%20%EC%9E%91%EC%97%85%EB%8C%80%EB%A5%BC%20%EB%B3%80%EA%B2%BD%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F%22))%20return%3B%0A%0A%20%20%20%20%20%20%20%20resetState()%3B%0A%20%20%20%20%20%20%20%20renderLogin()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20resetState()%20%7B%0A%20%20%20%20%20%20%20%20STATE.isLoggedIn%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20STATE.workstationId%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20STATE.sourceTote%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20STATE.selectedGridId%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20STATE.orderPool%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20%20%20STATE.isSidePanelOpen%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20initializeGrids()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20handleToggleCollapse()%20%7B%0A%20%20%20%20%20%20%20%20const%20root%20%3D%20getRootElement()%3B%0A%20%20%20%20%20%20%20%20const%20minBtn%20%3D%20document.getElementById('vms-min-btn')%3B%0A%0A%20%20%20%20%20%20%20%20STATE.isCollapsed%20%3D%20!STATE.isCollapsed%3B%0A%0A%20%20%20%20%20%20%20%20if%20(STATE.isCollapsed)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20root.classList.add('collapsed')%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20minBtn.innerHTML%20%3D%20'%EF%BC%8B'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20document.getElementById('vms-status-sub').innerText%20%3D%20'%EC%B6%95%EC%86%8C%20%EB%AA%A8%EB%93%9C'%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20root.classList.remove('collapsed')%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20minBtn.innerHTML%20%3D%20'%EF%BC%8D'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20document.getElementById('vms-status-sub').innerText%20%3D%20STATE.workstationId%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20handleToggleSidePanel()%20%7B%0A%20%20%20%20%20%20%20%20const%20panel%20%3D%20document.getElementById('vms-side-panel')%3B%0A%20%20%20%20%20%20%20%20STATE.isSidePanelOpen%20%3D%20!STATE.isSidePanelOpen%3B%0A%0A%20%20%20%20%20%20%20%20if%20(STATE.isSidePanelOpen)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20panel.classList.add('open')%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20renderSidePanel()%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20panel.classList.remove('open')%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20%2F%2F%209.%20INPUT%20HANDLING%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20function%20attachInputHandlers()%20%7B%0A%20%20%20%20%20%20%20%20const%20srcInp%20%3D%20document.getElementById('vms-src-inp')%3B%0A%20%20%20%20%20%20%20%20const%20skuInp%20%3D%20document.getElementById('vms-sku-inp')%3B%0A%20%20%20%20%20%20%20%20const%20clearBtn%20%3D%20document.getElementById('vms-clear-tote')%3B%0A%0A%20%20%20%20%20%20%20%20srcInp.addEventListener('keydown'%2C%20(e)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20handleArrowKeyNavigation(e%2C%20srcInp)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(e.key%20%3D%3D%3D%20'Enter')%20handleToteScan(srcInp%2C%20skuInp%2C%20clearBtn)%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20skuInp.addEventListener('keydown'%2C%20(e)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20handleArrowKeyNavigation(e%2C%20skuInp)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(e.key%20%3D%3D%3D%20'Enter')%20handleSkuScan(skuInp)%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20clearBtn.onclick%20%3D%20()%20%3D%3E%20handleClearTote(srcInp%2C%20skuInp%2C%20clearBtn)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20handleArrowKeyNavigation(e%2C%20input)%20%7B%0A%20%20%20%20%20%20%20%20if%20(e.key%20%3D%3D%3D%20%22ArrowUp%22)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20e.preventDefault()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(STATE.historyIndex%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20STATE.historyIndex--%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20input.value%20%3D%20STATE.scanHistory%5BSTATE.historyIndex%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(e.key%20%3D%3D%3D%20%22ArrowDown%22)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20e.preventDefault()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(STATE.historyIndex%20%3C%20STATE.scanHistory.length%20-%201)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20STATE.historyIndex%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20input.value%20%3D%20STATE.scanHistory%5BSTATE.historyIndex%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20STATE.historyIndex%20%3D%20STATE.scanHistory.length%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20input.value%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20handleToteScan(srcInp%2C%20skuInp%2C%20clearBtn)%20%7B%0A%20%20%20%20%20%20%20%20const%20val%20%3D%20srcInp.value.trim().toUpperCase()%3B%0A%20%20%20%20%20%20%20%20if%20(!val)%20return%3B%0A%0A%20%20%20%20%20%20%20%20if%20(!isValidTote(val))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20alert(%60%E2%9B%94%EF%B8%8F%20%ED%98%84%EC%9E%AC%20%EC%9E%91%EC%97%85%EB%8C%80%20%EB%AA%A9%EB%A1%9D%EC%97%90%20%EC%97%86%EB%8A%94%20Tote%EC%9E%85%EB%8B%88%EB%8B%A4.%5Cn(%EC%9E%85%EB%A0%A5%EA%B0%92%3A%20%24%7Bval%7D)%60)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20srcInp.value%20%3D%20''%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20addToHistory(val)%3B%0A%20%20%20%20%20%20%20%20activateTote(val%2C%20srcInp%2C%20skuInp%2C%20clearBtn)%3B%0A%20%20%20%20%20%20%20%20showToteActivatedMessage(val)%3B%0A%20%20%20%20%20%20%20%20updateAllUI()%3B%0A%20%20%20%20%20%20%20%20handleRefresh()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20isValidTote(toteId)%20%7B%0A%20%20%20%20%20%20%20%20return%20STATE.toteInventory%20%26%26%20STATE.toteInventory%5BtoteId%5D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20activateTote(toteId%2C%20srcInp%2C%20skuInp%2C%20clearBtn)%20%7B%0A%20%20%20%20%20%20%20%20STATE.sourceTote%20%3D%20toteId%3B%0A%20%20%20%20%20%20%20%20srcInp.disabled%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20clearBtn.style.display%20%3D%20'inline-block'%3B%0A%0A%20%20%20%20%20%20%20%20skuInp.disabled%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20skuInp.placeholder%20%3D%20%22SKU%20%EC%8A%A4%EC%BA%94...%22%3B%0A%20%20%20%20%20%20%20%20skuInp.focus()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20showToteActivatedMessage(toteId)%20%7B%0A%20%20%20%20%20%20%20%20const%20panel%20%3D%20document.getElementById('vms-detail-panel')%3B%0A%20%20%20%20%20%20%20%20if%20(panel)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20panel.innerHTML%20%3D%20%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-empty-state%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ch2%20style%3D%22color%3A%233498db%3B%22%3E%24%7BtoteId%7D%3C%2Fh2%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cp%3E%ED%94%BC%ED%82%B9%20Tote%EA%B0%80%20%ED%99%95%EC%9D%B8%EB%90%98%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%3C%2Fp%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cp%20style%3D%22font-size%3A12px%3B%20color%3A%23999%3B%20margin-top%3A5px%3B%22%3E%EC%83%81%ED%92%88%EC%9D%84%20%EC%8A%A4%EC%BA%94%ED%95%98%EC%97%AC%20%EB%B6%84%EB%A5%98%ED%95%98%EC%84%B8%EC%9A%94.%3C%2Fp%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20handleClearTote(srcInp%2C%20skuInp%2C%20clearBtn)%20%7B%0A%20%20%20%20%20%20%20%20STATE.sourceTote%20%3D%20null%3B%0A%0A%20%20%20%20%20%20%20%20srcInp.disabled%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20srcInp.value%20%3D%20''%3B%0A%20%20%20%20%20%20%20%20srcInp.focus()%3B%0A%20%20%20%20%20%20%20%20clearBtn.style.display%20%3D%20'none'%3B%0A%0A%20%20%20%20%20%20%20%20skuInp.disabled%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20skuInp.value%20%3D%20''%3B%0A%20%20%20%20%20%20%20%20skuInp.placeholder%20%3D%20%22%EB%8C%80%EA%B8%B0%20%EC%A4%91...%22%3B%0A%0A%20%20%20%20%20%20%20%20updateAllUI()%3B%0A%20%20%20%20%20%20%20%20showSystemReadyMessage()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20showSystemReadyMessage()%20%7B%0A%20%20%20%20%20%20%20%20const%20panel%20%3D%20document.getElementById('vms-detail-panel')%3B%0A%20%20%20%20%20%20%20%20if%20(panel)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20panel.innerHTML%20%3D%20buildEmptyStateHTML('%EC%8B%9C%EC%8A%A4%ED%85%9C%20%EC%A4%80%EB%B9%84%20%EC%99%84%EB%A3%8C'%2C%20'%ED%94%BC%ED%82%B9%20Tote%EB%A5%BC%20%EC%8A%A4%EC%BA%94%ED%95%98%EC%97%AC%20%EC%9E%91%EC%97%85%EC%9D%84%20%EC%8B%9C%EC%9E%91%ED%95%98%EC%84%B8%EC%9A%94.')%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20handleSkuScan(skuInp)%20%7B%0A%20%20%20%20%20%20%20%20const%20sku%20%3D%20skuInp.value.trim().toUpperCase()%3B%0A%20%20%20%20%20%20%20%20skuInp.value%20%3D%20''%3B%0A%20%20%20%20%20%20%20%20if%20(!sku)%20return%3B%0A%0A%20%20%20%20%20%20%20%20if%20(!isValidSkuForCurrentTote(sku))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20alert(%60%E2%9B%94%EF%B8%8F%20%ED%98%84%EC%9E%AC%20Tote%20%5B%24%7BSTATE.sourceTote%7D%5D%EC%97%90%20%EC%A1%B4%EC%9E%AC%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EC%83%81%ED%92%88%EC%9E%85%EB%8B%88%EB%8B%A4.%5Cn(%EC%9E%85%EB%A0%A5%EA%B0%92%3A%20%24%7Bsku%7D)%60)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20addToHistory(sku)%3B%0A%20%20%20%20%20%20%20%20processSorting(sku)%3B%0A%20%20%20%20%20%20%20%20handleRefresh()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20isValidSkuForCurrentTote(sku)%20%7B%0A%20%20%20%20%20%20%20%20const%20validSkusInTote%20%3D%20STATE.toteInventory%5BSTATE.sourceTote%5D%3B%0A%20%20%20%20%20%20%20%20return%20validSkusInTote%20%26%26%20validSkusInTote.has(sku)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20%2F%2F%2010.%20HISTORY%20MANAGEMENT%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20function%20addToHistory(code)%20%7B%0A%20%20%20%20%20%20%20%20STATE.scanHistory.push(code)%3B%0A%20%20%20%20%20%20%20%20if%20(STATE.scanHistory.length%20%3E%20CONFIG.MAX_HISTORY_SIZE)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20STATE.scanHistory.shift()%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20STATE.historyIndex%20%3D%20STATE.scanHistory.length%3B%0A%20%20%20%20%20%20%20%20renderHistory()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20renderHistory()%20%7B%0A%20%20%20%20%20%20%20%20const%20box%20%3D%20document.getElementById('vms-history-box')%3B%0A%20%20%20%20%20%20%20%20if%20(!box)%20return%3B%0A%0A%20%20%20%20%20%20%20%20box.innerHTML%20%3D%20STATE.scanHistory%0A%20%20%20%20%20%20%20%20%20%20%20%20.map(h%20%3D%3E%20%60%3Cdiv%20class%3D%22vms-history-item%22%20onclick%3D%22document.getElementById('vms-sku-inp').value%3D'%24%7Bh%7D'%3B%20document.getElementById('vms-sku-inp').focus()%3B%22%3E%24%7Bh%7D%3C%2Fdiv%3E%60)%0A%20%20%20%20%20%20%20%20%20%20%20%20.reverse()%0A%20%20%20%20%20%20%20%20%20%20%20%20.join('')%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20%2F%2F%2011.%20SORTING%20LOGIC%20(Core%20Business%20Logic)%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20async%20function%20processSorting(sku)%20%7B%0A%20%20%20%20%20%20%20%20let%20targetGrid%20%3D%20findExistingGridForSku(sku)%3B%0A%0A%20%20%20%20%20%20%20%20if%20(!targetGrid)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20targetGrid%20%3D%20allocateNewGridForSku(sku)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20(targetGrid)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20updateGridWithScan(targetGrid%2C%20sku)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20selectGrid(targetGrid.id)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20scrollToGrid(targetGrid.id)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Call%20Feedback%20API%20and%20then%20refresh%0A%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20showLoading()%3B%20%2F%2F%20Show%20loading%20indicator%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%201.%20Product%20Drop%20Feedback%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20dropSuccess%20%3D%20await%20sendDropFeedback(targetGrid%2C%20sku)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(!dropSuccess)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20If%20failed%2C%20sync%20with%20server%20to%20rollback%20optimistic%20UI%20updates%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20await%20fetchStationData(STATE.workstationId)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%202.%20Customer%20Order%20Feedback%20(If%20grid%20complete)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(checkIfGridComplete(targetGrid))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20orderSuccess%20%3D%20await%20sendOrderFeedback(targetGrid)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(!orderSuccess)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20If%20order%20feedback%20failed%2C%20we%20still%20might%20want%20to%20refresh%20to%20reflect%20drop%20success%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20But%20usually%20if%20this%20fails%2C%20we%20should%20probably%20stop.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20await%20fetchStationData(STATE.workstationId)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20showToast(%60%E2%9C%85%20Grid%20%5B%24%7BtargetGrid.id%7D%5D%20%EB%B6%84%EB%A5%98%20%EC%99%84%EB%A3%8C!%60%2C%20'grid-complete')%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%203.%20Wave%20Order%20Feedback%20(If%20all%20orders%20in%20wave%20complete)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(checkIfWaveComplete())%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20await%20sendWaveFeedback()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20showToast(%60%F0%9F%8E%89%20%EB%AA%A8%EB%93%A0%20%EB%B6%84%EB%A5%98%20%EC%9E%91%EC%97%85%EC%9D%B4%20%EC%99%84%EB%A3%8C%EB%90%98%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4!%60%2C%20'wave-complete')%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20await%20fetchStationData(STATE.workstationId)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%204.%20Auto-clear%20tote%20if%20all%20items%20in%20tote%20are%20sorted%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(checkIfToteComplete())%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Slight%20delay%20to%20allow%20user%20to%20see%20the%20last%20scan%20result%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20srcInp%20%3D%20document.getElementById('vms-src-inp')%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20skuInp%20%3D%20document.getElementById('vms-sku-inp')%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20clearBtn%20%3D%20document.getElementById('vms-clear-tote')%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20handleClearTote(srcInp%2C%20skuInp%2C%20clearBtn)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20500)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20console.error(%22Sorting%20Process%20Error%3A%22%2C%20e)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alert(%22%EC%B2%98%EB%A6%AC%20%EC%A4%91%20%EC%98%A4%EB%A5%98%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%22)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20finally%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20hideLoading()%3B%20%2F%2F%20Hide%20loading%20indicator%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20alert(%60%ED%95%B4%EB%8B%B9%20SKU%EA%B0%80%20%ED%95%84%EC%9A%94%ED%95%9C%20%EC%A3%BC%EB%AC%B8%EC%9D%B4%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4%3A%20%24%7Bsku%7D%60)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20checkIfGridComplete(grid)%20%7B%0A%20%20%20%20%20%20%20%20const%20order%20%3D%20STATE.orderPool.find(o%20%3D%3E%20o.orderId%20%3D%3D%3D%20grid.assignedOrderId)%3B%0A%20%20%20%20%20%20%20%20if%20(!order)%20return%20false%3B%0A%0A%20%20%20%20%20%20%20%20for%20(const%20sku%20in%20order.requiredItems)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20req%20%3D%20order.requiredItems%5Bsku%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20scn%20%3D%20grid.scannedItems%5Bsku%5D%20%7C%7C%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(scn%20%3C%20req)%20return%20false%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20checkIfWaveComplete()%20%7B%0A%20%20%20%20%20%20%20%20if%20(!STATE.orderPool%20%7C%7C%20STATE.orderPool.length%20%3D%3D%3D%200)%20return%20false%3B%0A%0A%20%20%20%20%20%20%20%20return%20STATE.orderPool.every(order%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(order.isComplete)%20return%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20grid%20%3D%20STATE.grids.find(g%20%3D%3E%20g.assignedOrderId%20%3D%3D%3D%20order.orderId)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(!grid)%20return%20false%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20checkIfGridComplete(grid)%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20checkIfToteComplete()%20%7B%0A%20%20%20%20%20%20%20%20if%20(!STATE.sourceTote)%20return%20false%3B%0A%0A%20%20%20%20%20%20%20%20let%20isToteComplete%20%3D%20true%3B%0A%0A%20%20%20%20%20%20%20%20for%20(const%20order%20of%20STATE.orderPool)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(!order.pickingToteList)%20continue%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20itemsInTote%20%3D%20order.pickingToteList.filter(pt%20%3D%3E%20pt.tote%20%3D%3D%3D%20STATE.sourceTote)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20(const%20item%20of%20itemsInTote)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(item.workedQty%20%3C%20item.qty)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20isToteComplete%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(!isToteComplete)%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20return%20isToteComplete%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20findExistingGridForSku(sku)%20%7B%0A%20%20%20%20%20%20%20%20return%20STATE.grids.find(grid%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(grid.status%20!%3D%3D%20'ACTIVE')%20return%20false%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20order%20%3D%20STATE.orderPool.find(o%20%3D%3E%20o.orderId%20%3D%3D%3D%20grid.assignedOrderId)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20scanned%20%3D%20grid.scannedItems%5Bsku%5D%20%7C%7C%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20required%20%3D%20order.requiredItems%5Bsku%5D%20%7C%7C%200%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20scanned%20%3C%20required%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20allocateNewGridForSku(sku)%20%7B%0A%20%20%20%20%20%20%20%20const%20candidateOrder%20%3D%20STATE.orderPool.find(o%20%3D%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20!o.allocatedSlot%20%26%26%20!o.isComplete%20%26%26%20(o.requiredItems%5Bsku%5D%20%3E%200)%0A%20%20%20%20%20%20%20%20)%3B%0A%0A%20%20%20%20%20%20%20%20if%20(!candidateOrder)%20return%20null%3B%0A%0A%20%20%20%20%20%20%20%20const%20emptyGrid%20%3D%20STATE.grids.find(g%20%3D%3E%20g.status%20%3D%3D%3D%20'EMPTY')%3B%0A%20%20%20%20%20%20%20%20if%20(!emptyGrid)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20alert(%22%EB%AA%A8%EB%93%A0%20Grid%EA%B0%80%20%EC%82%AC%EC%9A%A9%20%EC%A4%91%EC%9E%85%EB%8B%88%EB%8B%A4!%22)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20emptyGrid.status%20%3D%20'ACTIVE'%3B%0A%20%20%20%20%20%20%20%20emptyGrid.assignedOrderId%20%3D%20candidateOrder.orderId%3B%0A%20%20%20%20%20%20%20%20emptyGrid.destTote%20%3D%20''%3B%20%2F%2F%20No%20mock%20tote%20ID%0A%20%20%20%20%20%20%20%20candidateOrder.allocatedSlot%20%3D%20emptyGrid.id%3B%0A%0A%20%20%20%20%20%20%20%20return%20emptyGrid%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20updateGridWithScan(grid%2C%20sku)%20%7B%0A%20%20%20%20%20%20%20%20grid.scannedItems%5Bsku%5D%20%3D%20(grid.scannedItems%5Bsku%5D%20%7C%7C%200)%20%2B%201%3B%0A%20%20%20%20%20%20%20%20grid.logs.unshift(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20time%3A%20new%20Date().toLocaleTimeString('ko-KR')%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20sku%3A%20sku%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20scrollToGrid(gridId)%20%7B%0A%20%20%20%20%20%20%20%20const%20card%20%3D%20%5B...document.querySelectorAll('.vms-card')%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20.find(el%20%3D%3E%20el.innerText.includes(gridId))%3B%0A%20%20%20%20%20%20%20%20if%20(card)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20card.scrollIntoView(%7B%20block%3A%20'center'%2C%20behavior%3A%20'smooth'%20%7D)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20%2F%2F%2012.%20UI%20UPDATE%20FUNCTIONS%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20function%20showLoading()%20%7B%0A%20%20%20%20%20%20%20%20const%20root%20%3D%20getRootElement()%3B%0A%20%20%20%20%20%20%20%20if%20(!root.querySelector('.vms-loading-overlay'))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20overlay%20%3D%20document.createElement('div')%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20overlay.className%20%3D%20'vms-loading-overlay'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20overlay.innerHTML%20%3D%20'%3Cspan%3E%E2%8F%B3%20Processing...%3C%2Fspan%3E'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20root.appendChild(overlay)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20hideLoading()%20%7B%0A%20%20%20%20%20%20%20%20const%20root%20%3D%20getRootElement()%3B%0A%20%20%20%20%20%20%20%20const%20overlay%20%3D%20root.querySelector('.vms-loading-overlay')%3B%0A%20%20%20%20%20%20%20%20if%20(overlay)%20overlay.remove()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20showToast(message%2C%20type%20%3D%20'grid-complete')%20%7B%0A%20%20%20%20%20%20%20%20const%20root%20%3D%20getRootElement()%3B%0A%20%20%20%20%20%20%20%20if%20(!root)%20return%3B%0A%0A%20%20%20%20%20%20%20%20let%20container%20%3D%20root.querySelector('%23vms-toast-container')%3B%0A%20%20%20%20%20%20%20%20if%20(!container)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20container%20%3D%20document.createElement('div')%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20container.id%20%3D%20'vms-toast-container'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20container.className%20%3D%20'vms-toast-container'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20root.appendChild(container)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20const%20toast%20%3D%20document.createElement('div')%3B%0A%20%20%20%20%20%20%20%20toast.className%20%3D%20%60vms-toast%20%24%7Btype%7D%60%3B%0A%20%20%20%20%20%20%20%20toast.innerText%20%3D%20message%3B%0A%0A%20%20%20%20%20%20%20%20container.appendChild(toast)%3B%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20Remove%20after%203%20seconds%0A%20%20%20%20%20%20%20%20setTimeout(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20toast.style.opacity%20%3D%20'0'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20toast.style.transform%20%3D%20'translateX(100%25)'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20toast.style.transition%20%3D%20'all%200.3s%20ease-in'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20setTimeout(()%20%3D%3E%20toast.remove()%2C%20300)%3B%0A%20%20%20%20%20%20%20%20%7D%2C%203000)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20updateAllUI()%20%7B%0A%20%20%20%20%20%20%20%20updateGridList()%3B%0A%20%20%20%20%20%20%20%20updateHeaderStatus()%3B%0A%20%20%20%20%20%20%20%20renderSidePanel()%3B%0A%20%20%20%20%20%20%20%20if%20(STATE.selectedGridId)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20renderGridDetail(STATE.selectedGridId)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20updateGridList()%20%7B%0A%20%20%20%20%20%20%20%20const%20list%20%3D%20document.getElementById('vms-grid-list')%3B%0A%20%20%20%20%20%20%20%20if%20(!list)%20return%3B%0A%0A%20%20%20%20%20%20%20%20list.innerHTML%20%3D%20''%3B%0A%0A%20%20%20%20%20%20%20%20const%20stats%20%3D%20%7B%20active%3A%200%2C%20empty%3A%200%20%7D%3B%0A%20%20%20%20%20%20%20%20STATE.grids.forEach(grid%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20card%20%3D%20createGridCard(grid%2C%20stats)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20list.appendChild(card)%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20updateGridStats(stats)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20createGridCard(grid%2C%20stats)%20%7B%0A%20%20%20%20%20%20%20%20const%20card%20%3D%20document.createElement('div')%3B%0A%20%20%20%20%20%20%20%20card.onclick%20%3D%20()%20%3D%3E%20selectGrid(grid.id)%3B%0A%0A%20%20%20%20%20%20%20%20if%20(grid.status%20%3D%3D%3D%20'EMPTY')%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20stats.empty%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20card.className%20%3D%20%60vms-card%20empty%20%24%7BSTATE.selectedGridId%20%3D%3D%3D%20grid.id%20%3F%20'selected'%20%3A%20''%7D%60%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Show%20tote%20info%20if%20assigned%20(even%20if%20empty)%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(grid.destTote%20%26%26%20grid.destTote%20!%3D%3D%20'-')%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20toteHtml%20%3D%20grid.isVirtualTote%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3F%20%60%3Cspan%20class%3D%22vms-card-dest%20editable%22%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20style%3D%22background%3A%23f8f9fa%3B%20color%3A%23495057%3B%20border%3A1px%20dashed%20%23ced4da%3B%20padding%3A4px%208px%3B%20border-radius%3A4px%3B%20font-size%3A12px%3B%20font-weight%3Abold%3B%20display%3Ainline-flex%3B%20align-items%3Acenter%3B%20gap%3A4px%3B%20opacity%3A0.7%3B%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20onclick%3D%22event.stopPropagation()%3B%20window.vmsChangeTote('%24%7Bgrid.id%7D')%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22%ED%81%B4%EB%A6%AD%ED%95%98%EC%97%AC%20%ED%86%A0%ED%8A%B8%20%EB%B3%80%EA%B2%BD%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22font-size%3A14px%3B%22%3E%E2%8F%B3%3C%2Fspan%3E%20%24%7Bgrid.destTote%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fspan%3E%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20%60%3Cspan%20class%3D%22vms-card-dest%22%3E%24%7Bgrid.destTote%7D%3C%2Fspan%3E%60%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20card.innerHTML%20%3D%20%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-card-header%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20class%3D%22vms-card-id%22%20style%3D%22font-weight%3Anormal%3B%22%3E%24%7Bgrid.id%7D%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22text-align%3Aright%3B%22%3E%24%7BtoteHtml%7D%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22display%3Aflex%3B%20justify-content%3Acenter%3B%20align-items%3Acenter%3B%20height%3A40px%3B%20color%3A%23bdc3c7%3B%20font-size%3A12px%3B%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%EC%A3%BC%EB%AC%B8%20%EB%8C%80%EA%B8%B0%20%EC%A4%91%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Original%20empty%20state%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20card.innerHTML%20%3D%20%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20class%3D%22vms-card-id%22%20style%3D%22font-weight%3Anormal%3B%22%3E%24%7Bgrid.id%7D%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20class%3D%22vms-empty-tag%22%3E%EC%82%AC%EC%9A%A9%20%EA%B0%80%EB%8A%A5%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20stats.active%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20card.className%20%3D%20%60vms-card%20active%20%24%7Bgrid.status%20%3D%3D%3D%20'COMPLETE'%20%3F%20'completed'%20%3A%20''%7D%20%24%7BSTATE.selectedGridId%20%3D%3D%3D%20grid.id%20%3F%20'selected'%20%3A%20''%7D%60%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20card.innerHTML%20%3D%20buildActiveGridCardHTML(grid)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20return%20card%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20buildActiveGridCardHTML(grid)%20%7B%0A%20%20%20%20%20%20%20%20const%20order%20%3D%20STATE.orderPool.find(o%20%3D%3E%20o.orderId%20%3D%3D%3D%20grid.assignedOrderId)%3B%0A%20%20%20%20%20%20%20%20const%20totalQty%20%3D%20Object.values(order.requiredItems).reduce((a%2C%20b)%20%3D%3E%20a%20%2B%20b%2C%200)%3B%0A%20%20%20%20%20%20%20%20const%20currentQty%20%3D%20Object.values(grid.scannedItems).reduce((a%2C%20b)%20%3D%3E%20a%20%2B%20b%2C%200)%3B%0A%20%20%20%20%20%20%20%20const%20percent%20%3D%20Math.min(100%2C%20(currentQty%20%2F%20totalQty)%20*%20100)%3B%0A%20%20%20%20%20%20%20%20const%20isFull%20%3D%20currentQty%20%3E%3D%20totalQty%3B%0A%0A%20%20%20%20%20%20%20%20const%20toteDisplay%20%3D%20grid.destTote%20%7C%7C%20'%3Cspan%20style%3D%22color%3A%23eee%22%3ENo%20Tote%3C%2Fspan%3E'%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20Editable%20handling%20for%20virtual%20totes%0A%20%20%20%20%20%20%20%20let%20toteHtml%20%3D%20''%3B%0A%20%20%20%20%20%20%20%20if%20(grid.isVirtualTote)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20toteHtml%20%3D%20%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20class%3D%22vms-card-dest%20editable%22%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20style%3D%22background%3A%23f8f9fa%3B%20color%3A%23495057%3B%20border%3A1px%20dashed%20%23ced4da%3B%20padding%3A4px%208px%3B%20border-radius%3A4px%3B%20font-size%3A12px%3B%20font-weight%3Abold%3B%20display%3Ainline-flex%3B%20align-items%3Acenter%3B%20gap%3A4px%3B%20opacity%3A0.7%3B%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20onclick%3D%22event.stopPropagation()%3B%20window.vmsChangeTote('%24%7Bgrid.id%7D')%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22%ED%81%B4%EB%A6%AD%ED%95%98%EC%97%AC%20%ED%86%A0%ED%8A%B8%20%EB%B3%80%EA%B2%BD%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22font-size%3A14px%3B%22%3E%E2%8F%B3%3C%2Fspan%3E%20%24%7BtoteDisplay%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20toteHtml%20%3D%20%60%3Cspan%20class%3D%22vms-card-dest%22%20style%3D%22color%3A%23d63031%3B%20font-weight%3Abold%3B%20font-size%3A14px%3B%22%3E%24%7BtoteDisplay%7D%3C%2Fspan%3E%60%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20return%20%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-card-header%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20class%3D%22vms-card-id%22%3E%24%7Bgrid.id%7D%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22text-align%3Aright%3B%22%3E%24%7BtoteHtml%7D%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22font-size%3A11px%3B%20color%3A%23636e72%3B%20margin-bottom%3A5px%3B%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%EB%AC%BC%EB%A5%98%EC%A0%91%EC%88%98%EB%B2%88%ED%98%B8%3A%20%24%7Border.omsOrderId%7D%3Cbr%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22font-size%3A10px%3B%20color%3A%23b2bec3%3B%22%3E(ORDER_ID%3A%20%24%7Border.orderId%7D)%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-progress-bar%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-progress-fill%22%20style%3D%22width%3A%24%7Bpercent%7D%25%3B%20background%3A%24%7BisFull%20%3F%20'%232ecc71'%20%3A%20'%233498db'%7D%22%3E%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-progress-text%22%3E%24%7BcurrentQty%7D%20%2F%20%24%7BtotalQty%7D%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20updateGridStats(stats)%20%7B%0A%20%20%20%20%20%20%20%20const%20statsEl%20%3D%20document.getElementById('vms-grid-stats')%3B%0A%20%20%20%20%20%20%20%20if%20(statsEl)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20statsEl.innerText%20%3D%20%60%24%7Bstats.active%7D%EA%B0%9C%20%ED%99%9C%EC%84%B1%20%2F%20%24%7Bstats.empty%7D%EA%B0%9C%20%EB%8C%80%EA%B8%B0%60%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20updateHeaderStatus()%20%7B%0A%20%20%20%20%20%20%20%20const%20statusSub%20%3D%20document.getElementById('vms-status-sub')%3B%0A%20%20%20%20%20%20%20%20const%20workflowBadge%20%3D%20document.getElementById('vms-workflow-badge')%3B%0A%0A%20%20%20%20%20%20%20%20if%20(statusSub%20%26%26%20!STATE.isCollapsed)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20toteIndicator%20%3D%20STATE.sourceTote%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3F%20%60%20%E2%96%B6%20%3Cspan%20style%3D%22color%3A%23ffeaa7%3B%22%3E%24%7BSTATE.sourceTote%7D%3C%2Fspan%3E%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20''%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20statusSub.innerHTML%20%3D%20%60%24%7BSTATE.workstationId%7D%24%7BtoteIndicator%7D%60%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20(workflowBadge%20%26%26%20!STATE.isCollapsed)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(STATE.workflowName)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20workflowBadge.innerText%20%3D%20%60%EC%B0%A8%EC%88%98%3A%20%24%7BSTATE.workflowName%7D%20(orderWorkflowId%3A%20%24%7BSTATE.workflowId%7D)%60%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20workflowBadge.style.display%20%3D%20'inline-block'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20workflowBadge.style.display%20%3D%20'none'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20selectGrid(id)%20%7B%0A%20%20%20%20%20%20%20%20STATE.selectedGridId%20%3D%20id%3B%0A%20%20%20%20%20%20%20%20updateGridList()%3B%0A%20%20%20%20%20%20%20%20renderGridDetail(id)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20%2F%2F%2013.%20GRID%20DETAIL%20RENDERING%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20function%20renderGridDetail(gridId)%20%7B%0A%20%20%20%20%20%20%20%20const%20panel%20%3D%20document.getElementById('vms-detail-panel')%3B%0A%20%20%20%20%20%20%20%20if%20(!panel)%20return%3B%0A%0A%20%20%20%20%20%20%20%20const%20grid%20%3D%20STATE.grids.find(g%20%3D%3E%20g.id%20%3D%3D%3D%20gridId)%3B%0A%0A%20%20%20%20%20%20%20%20if%20(grid.status%20%3D%3D%3D%20'EMPTY')%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20panel.innerHTML%20%3D%20buildEmptyGridDetailHTML(grid)%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20panel.innerHTML%20%3D%20buildActiveGridDetailHTML(grid)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20buildEmptyGridDetailHTML(grid)%20%7B%0A%20%20%20%20%20%20%20%20return%20%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-empty-state%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ch2%20style%3D%22color%3A%23bdc3c7%3B%20font-size%3A40px%3B%20margin-bottom%3A20px%3B%22%3E%24%7Bgrid.id%7D%3C%2Fh2%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ch3%20style%3D%22color%3A%237f8c8d%3B%22%3E%EC%82%AC%EC%9A%A9%20%EA%B0%80%EB%8A%A5%ED%95%9C%20Grid%3C%2Fh3%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cp%3E%EC%83%88%20%EC%83%81%ED%92%88%EC%9D%84%20%EC%8A%A4%EC%BA%94%ED%95%98%EB%A9%B4%20%EC%9D%B4%20Grid%EA%B0%80%20%EC%82%AC%EC%9A%A9%EB%90%A9%EB%8B%88%EB%8B%A4.%3C%2Fp%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20buildActiveGridDetailHTML(grid)%20%7B%0A%20%20%20%20%20%20%20%20const%20order%20%3D%20STATE.orderPool.find(o%20%3D%3E%20o.orderId%20%3D%3D%3D%20grid.assignedOrderId)%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20const%20toteColor%20%3D%20grid.isVirtualTote%20%3F%20'%2395a5a6'%20%3A%20'%23d63031'%3B%0A%20%20%20%20%20%20%20%20const%20toteLabel%20%3D%20grid.isVirtualTote%20%3F%20'(%EA%B0%80%ED%95%A0%EB%8B%B9)'%20%3A%20''%3B%0A%20%20%20%20%20%20%20%20const%20toteDisplay%20%3D%20grid.destTote%20%7C%7C%20'-'%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20Add%20change%20button%20only%20for%20virtual%20totes%0A%20%20%20%20%20%20%20%20const%20changeBtn%20%3D%20grid.isVirtualTote%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%3F%20%60%3Cbutton%20onclick%3D%22window.vmsChangeTote('%24%7Bgrid.id%7D')%22%20style%3D%22cursor%3Apointer%3B%20border%3A1px%20solid%20%23bdc3c7%3B%20background%3A%23fff%3B%20border-radius%3A4px%3B%20font-size%3A11px%3B%20color%3A%23636e72%3B%20padding%3A2px%206px%3B%20margin-left%3A5px%3B%22%3E%E2%9C%8F%EF%B8%8F%EB%B3%80%EA%B2%BD%3C%2Fbutton%3E%60%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%3A%20''%3B%0A%0A%20%20%20%20%20%20%20%20return%20%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-detail-top%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22font-size%3A28px%3B%20font-weight%3Abold%3B%20color%3A%232c3e50%3B%22%3E%24%7Bgrid.id%7D%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22background%3A%236c5ce7%3B%20color%3A%23fff%3B%20padding%3A4px%208px%3B%20border-radius%3A4px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20margin-left%3A10px%3B%20font-size%3A12px%3B%22%3E%EB%AC%BC%EB%A5%98%EC%A0%91%EC%88%98%EB%B2%88%ED%98%B8%3A%20%24%7Border.omsOrderId%7D%20(ORDER_ID%3A%20%24%7Border.orderId%7D)%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22margin-top%3A10px%3B%20font-size%3A14px%3B%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%EB%B6%84%EB%A5%98%20Tote%3A%20%3Cb%20style%3D%22color%3A%24%7BtoteColor%7D%3B%20font-size%3A18px%3B%22%3E%24%7BtoteDisplay%7D%3C%2Fb%3E%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22font-size%3A12px%3B%20color%3A%237f8c8d%3B%22%3E%24%7BtoteLabel%7D%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24%7BchangeBtn%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-sku-grid%22%20style%3D%22display%3Aflex%3B%20flex-direction%3Acolumn%3B%20gap%3A20px%3B%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24%7BbuildSkuTable(order%2C%20grid)%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24%7BbuildPickingToteTable(order)%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20buildSkuTable(order%2C%20grid)%20%7B%0A%20%20%20%20%20%20%20%20const%20allSkus%20%3D%20new%20Set(%5B...Object.keys(order.requiredItems)%2C%20...Object.keys(grid.scannedItems)%5D)%3B%0A%20%20%20%20%20%20%20%20let%20rows%20%3D%20''%3B%0A%0A%20%20%20%20%20%20%20%20allSkus.forEach(sku%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20req%20%3D%20order.requiredItems%5Bsku%5D%20%7C%7C%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20scn%20%3D%20grid.scannedItems%5Bsku%5D%20%7C%7C%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20isDone%20%3D%20scn%20%3E%3D%20req%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20info%20%3D%20order.skuInfo%5Bsku%5D%20%7C%7C%20%7B%20id%3A%20sku%2C%20barcode%3A%20'-'%20%7D%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20rows%20%2B%3D%20%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%20class%3D%22%24%7BisDone%20%3F%20'done'%20%3A%20''%7D%22%20style%3D%22border-bottom%3A%201px%20solid%20%23f9f9f9%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%24%7BisDone%20%3F%20'color%3A%232ecc71%3B%20font-weight%3Abold%3B'%20%3A%20''%7D%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%20style%3D%22padding%3A8px%200%3B%22%3E%24%7Binfo.id%7D%3C%2Ftd%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%20style%3D%22color%3A%237f8c8d%3B%20font-size%3A11px%3B%22%3E%24%7Binfo.barcode%7D%3C%2Ftd%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%20style%3D%22text-align%3Aright%3B%22%3E%24%7Bscn%7D%20%2F%20%24%7Breq%7D%3C%2Ftd%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Ftr%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20return%20%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-box%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ch4%20style%3D%22margin%3A0%200%2010px%200%3B%20color%3A%23999%3B%22%3E%EC%A3%BC%EB%AC%B8%20SKU%20(BOM)%3C%2Fh4%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctable%20style%3D%22width%3A100%25%3B%20font-size%3A12px%3B%20border-collapse%3Acollapse%3B%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cthead%20style%3D%22text-align%3Aleft%3B%20color%3A%23bdc3c7%3B%20border-bottom%3A1px%20solid%20%23eee%3B%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cth%20style%3D%22padding-bottom%3A5px%3B%20font-weight%3Anormal%3B%22%3ESKU%20ID%3C%2Fth%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cth%20style%3D%22padding-bottom%3A5px%3B%20font-weight%3Anormal%3B%22%3E%EB%B0%94%EC%BD%94%EB%93%9C%3C%2Fth%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cth%20style%3D%22padding-bottom%3A5px%3B%20font-weight%3Anormal%3B%20text-align%3Aright%3B%22%3E%EC%88%98%EB%9F%89%3C%2Fth%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Ftr%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fthead%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctbody%3E%24%7Brows%7D%3C%2Ftbody%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Ftable%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20buildPickingToteTable(order)%20%7B%0A%20%20%20%20%20%20%20%20let%20toteRows%20%3D%20''%3B%0A%0A%20%20%20%20%20%20%20%20if%20(order.pickingToteList)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20order.pickingToteList.forEach(pt%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20isDone%20%3D%20pt.workedQty%20%3E%3D%20pt.qty%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20isCurrentSource%20%3D%20STATE.sourceTote%20%3D%3D%3D%20pt.tote%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20info%20%3D%20order.skuInfo%5Bpt.sku%5D%20%7C%7C%20%7B%20id%3A%20pt.sku%2C%20barcode%3A%20'-'%20%7D%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20toteRows%20%2B%3D%20%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%20class%3D%22%24%7BisDone%20%3F%20'done'%20%3A%20''%7D%22%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20style%3D%22border-bottom%3A%201px%20solid%20%23f9f9f9%3B%20%24%7BisCurrentSource%20%3F%20'background%3Argba(253%2C%20203%2C%20110%2C%200.1)%3B'%20%3A%20''%7D%20%24%7BisDone%20%3F%20'color%3A%232ecc71%3B%20font-weight%3Abold%3B'%20%3A%20''%7D%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%20style%3D%22padding%3A8px%200%3B%20font-weight%3A%24%7BisCurrentSource%20%3F%20'bold'%20%3A%20'normal'%7D%3B%22%3E%24%7Bpt.tote%7D%3C%2Ftd%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%20style%3D%22color%3A%237f8c8d%3B%20font-size%3A11px%3B%22%3E%24%7Binfo.id%7D%3C%2Ftd%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%20style%3D%22color%3A%237f8c8d%3B%20font-size%3A11px%3B%22%3E%24%7Binfo.barcode%7D%3C%2Ftd%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%20style%3D%22text-align%3Aright%3B%22%3E%24%7Bpt.workedQty%7D%20%2F%20%24%7Bpt.qty%7D%3C%2Ftd%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Ftr%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20return%20%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-box%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ch4%20style%3D%22margin%3A0%200%2010px%200%3B%20color%3A%23999%3B%22%3E%EB%8C%80%EC%83%81%20%ED%94%BC%ED%82%B9%20Tote%3C%2Fh4%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctable%20style%3D%22width%3A100%25%3B%20font-size%3A12px%3B%20border-collapse%3Acollapse%3B%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cthead%20style%3D%22text-align%3Aleft%3B%20color%3A%23bdc3c7%3B%20border-bottom%3A1px%20solid%20%23eee%3B%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cth%20style%3D%22padding-bottom%3A5px%3B%20font-weight%3Anormal%3B%22%3ETote%3C%2Fth%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cth%20style%3D%22padding-bottom%3A5px%3B%20font-weight%3Anormal%3B%22%3ESKU%20ID%3C%2Fth%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cth%20style%3D%22padding-bottom%3A5px%3B%20font-weight%3Anormal%3B%22%3E%EB%B0%94%EC%BD%94%EB%93%9C%3C%2Fth%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cth%20style%3D%22padding-bottom%3A5px%3B%20font-weight%3Anormal%3B%20text-align%3Aright%3B%22%3E%EC%88%98%EB%9F%89%3C%2Fth%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Ftr%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fthead%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctbody%3E%24%7BtoteRows%20%7C%7C%20'%3Ctr%3E%3Ctd%20colspan%3D%224%22%20style%3D%22text-align%3Acenter%3B%20color%3A%23ccc%3B%20padding%3A10px%3B%22%3E%EC%A0%95%EB%B3%B4%20%EC%97%86%EC%9D%8C%3C%2Ftd%3E%3C%2Ftr%3E'%7D%3C%2Ftbody%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Ftable%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%7D%0A%0A%0A%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20%2F%2F%2014.%20TOTE%20LIST%20RENDERING%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20function%20renderSidePanel()%20%7B%0A%20%20%20%20%20%20%20%20if%20(!STATE.isSidePanelOpen)%20return%3B%0A%0A%20%20%20%20%20%20%20%20const%20list%20%3D%20document.getElementById('vms-tote-list')%3B%0A%20%20%20%20%20%20%20%20if%20(!list)%20return%3B%0A%0A%20%20%20%20%20%20%20%20list.innerHTML%20%3D%20''%3B%0A%0A%20%20%20%20%20%20%20%20if%20(!STATE.toteInventory%20%7C%7C%20Object.keys(STATE.toteInventory).length%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20list.innerHTML%20%3D%20'%3Cdiv%20style%3D%22text-align%3Acenter%3B%20padding%3A20px%3B%20color%3A%23bdc3c7%3B%22%3E%ED%95%A0%EB%8B%B9%EB%90%9C%20Tote%EA%B0%80%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4.%3C%2Fdiv%3E'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20Object.keys(STATE.toteInventory).sort().forEach(toteId%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20card%20%3D%20createToteCard(toteId%2C%20STATE.toteInventory%5BtoteId%5D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20list.appendChild(card)%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20createToteCard(toteId%2C%20skuSet)%20%7B%0A%20%20%20%20%20%20%20%20const%20card%20%3D%20document.createElement('div')%3B%0A%20%20%20%20%20%20%20%20card.className%20%3D%20'vms-tote-card'%3B%0A%0A%20%20%20%20%20%20%20%20const%20skuRows%20%3D%20Array.from(skuSet).map(sku%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Find%20SKU%20Info%20%26%20Quantity%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20info%20%3D%20%7B%20id%3A%20sku%2C%20barcode%3A%20sku%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20totalQty%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20totalWorkedQty%20%3D%200%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20for(const%20order%20of%20STATE.orderPool)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Check%20if%20this%20SKU%20is%20in%20this%20tote%20for%20this%20order%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(order.skuInfo%5Bsku%5D)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20info%20%3D%20order.skuInfo%5Bsku%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Calculate%20quantity%20in%20this%20tote%20for%20this%20SKU%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20pickingItems%20%3D%20order.pickingToteList.filter(pt%20%3D%3E%20pt.tote%20%3D%3D%3D%20toteId%20%26%26%20pt.sku%20%3D%3D%3D%20sku)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pickingItems.forEach(pt%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20totalQty%20%2B%3D%20pt.qty%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20totalWorkedQty%20%2B%3D%20pt.workedQty%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20isDone%20%3D%20totalWorkedQty%20%3E%3D%20totalQty%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20rowStyle%20%3D%20isDone%20%3F%20'color%3A%232ecc71%3B%20text-decoration%3Aline-through%3B%20opacity%3A0.7%3B'%20%3A%20'color%3A%23636e72%3B'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20qtyStyle%20%3D%20isDone%20%3F%20'color%3A%232ecc71%3B%20font-weight%3Abold%3B'%20%3A%20'color%3A%232d3436%3B%20font-weight%3Abold%3B'%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-sku-row%22%20style%3D%22%24%7BrowStyle%7D%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20class%3D%22vms-sku-code%22%20style%3D%22flex%3A1%3B%20%24%7BisDone%20%3F%20'color%3A%232ecc71%3B'%20%3A%20''%7D%22%20title%3D%22%24%7Binfo.barcode%7D%22%3E%24%7Binfo.barcode%7D%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22flex%3A1%3B%20text-align%3Acenter%3B%22%3E%24%7Binfo.id%7D%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22width%3A50px%3B%20text-align%3Aright%3B%20%24%7BqtyStyle%7D%22%3E%24%7BtotalWorkedQty%7D%20%2F%20%24%7BtotalQty%7D%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%20%20%20%20%7D).join('')%3B%0A%0A%20%20%20%20%20%20%20%20card.innerHTML%20%3D%20%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22vms-tote-header%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%3E%24%7BtoteId%7D%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22background%3A%23dfe6e9%3B%20padding%3A2px%206px%3B%20border-radius%3A10px%3B%20font-size%3A11px%3B%20font-weight%3Anormal%3B%22%3E%24%7BskuSet.size%7D%20SKUs%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22font-size%3A10px%3B%20color%3A%23b2bec3%3B%20display%3Aflex%3B%20padding%3A4px%200%3B%20border-bottom%3A1px%20solid%20%23eee%3B%20margin-bottom%3A5px%3B%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22flex%3A1%3B%22%3EBarcode%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22flex%3A1%3B%20text-align%3Acenter%3B%22%3ESKU%20ID%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20style%3D%22width%3A50px%3B%20text-align%3Aright%3B%22%3EDone%2FQty%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3E%24%7BskuRows%7D%3C%2Fdiv%3E%0A%20%20%20%20%20%20%20%20%60%3B%0A%0A%20%20%20%20%20%20%20%20return%20card%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F%2F%2015.%20DRAG%20%26%20DROP%20FUNCTIONALITY%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20let%20dragState%20%3D%20%7B%0A%20%20%20%20%20%20%20%20isDragging%3A%20false%2C%0A%20%20%20%20%20%20%20%20offset%3A%20%7B%20x%3A%200%2C%20y%3A%200%20%7D%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20function%20enableDragAndDrop()%20%7B%0A%20%20%20%20%20%20%20%20const%20root%20%3D%20getRootElement()%3B%0A%20%20%20%20%20%20%20%20const%20header%20%3D%20document.getElementById('vms-header-bar')%3B%0A%0A%20%20%20%20%20%20%20%20header.addEventListener('mousedown'%2C%20(e)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Allow%20text%20selection%20on%20specific%20elements%20by%20preventing%20drag%20start%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(%5B'BUTTON'%2C%20'INPUT'%2C%20'SPAN'%2C%20'P'%2C%20'DIV'%5D.includes(e.target.tagName)%20%26%26%20e.target%20!%3D%3D%20header)%20return%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20dragState.isDragging%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20rect%20%3D%20root.getBoundingClientRect()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20dragState.offset.x%20%3D%20e.clientX%20-%20rect.left%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20dragState.offset.y%20%3D%20e.clientY%20-%20rect.top%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20window.addEventListener('mousemove'%2C%20(e)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(!dragState.isDragging)%20return%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20root.style.left%20%3D%20(e.clientX%20-%20dragState.offset.x)%20%2B%20'px'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20root.style.top%20%3D%20(e.clientY%20-%20dragState.offset.y)%20%2B%20'px'%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%20%20window.addEventListener('mouseup'%2C%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20dragState.isDragging%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20%2F%2F%2016.%20STYLES%20INJECTION%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20function%20injectStyles()%20%7B%0A%20%20%20%20%20%20%20%20if%20(document.getElementById(CONFIG.STYLE_ID))%20return%3B%0A%0A%20%20%20%20%20%20%20%20const%20style%20%3D%20document.createElement('style')%3B%0A%20%20%20%20%20%20%20%20style.id%20%3D%20CONFIG.STYLE_ID%3B%0A%20%20%20%20%20%20%20%20style.textContent%20%3D%20getStylesheet()%3B%0A%20%20%20%20%20%20%20%20document.head.appendChild(style)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20getStylesheet()%20%7B%0A%20%20%20%20%20%20%20%20return%20%60%0A%20%20%20%20%20%20%20%20%20%20%20%20%23vms-rebin-fixed-root%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20position%3A%20fixed%3B%20top%3A%20100px%3B%20left%3A%20100px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20width%3A%201100px%3B%20height%3A%20750px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%20%23f4f6f8%3B%20border%3A%201px%20solid%20%23bdc3c7%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%3A%200%2010px%2040px%20rgba(0%2C0%2C0%2C0.4)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20border-radius%3A%2012px%3B%20z-index%3A%2099999%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20display%3A%20flex%3B%20flex-direction%3A%20column%3B%20overflow%3A%20visible%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20font-family%3A%20-apple-system%2C%20BlinkMacSystemFont%2C%20%22Segoe%20UI%22%2C%20Roboto%2C%20sans-serif%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20transition%3A%20height%200.3s%20cubic-bezier(0.4%2C%200%2C%200.2%2C%201)%2C%20width%200.3s%20cubic-bezier(0.4%2C%200%2C%200.2%2C%201)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%23vms-rebin-fixed-root.collapsed%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20height%3A%2055px%20!important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20width%3A%20350px%20!important%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20border%3A%202px%20solid%20%2334495e%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%23vms-rebin-fixed-root.collapsed%20.vms-body%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%23vms-rebin-fixed-root.collapsed%20.vms-footer%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%23vms-rebin-fixed-root.collapsed%20.vms-side-panel%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%23vms-rebin-fixed-root.collapsed%20.vms-side-toggle%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20display%3A%20none%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-header%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20height%3A%2055px%3B%20background%3A%20%232d3436%3B%20color%3A%20%23fff%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20display%3A%20flex%3B%20align-items%3A%20center%3B%20padding%3A%200%2015px%3B%20justify-content%3A%20space-between%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20border-radius%3A%2012px%2012px%200%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-header%3Aactive%20%7B%20cursor%3A%20grabbing%3B%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-ctrl-btn%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%20none%3B%20border%3A%20none%3B%20color%3A%20%23bdc3c7%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20font-size%3A%2018px%3B%20cursor%3A%20pointer%3B%20padding%3A%200%208px%3B%20font-weight%3A%20bold%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-ctrl-btn%3Ahover%20%7B%20color%3A%20%23fff%3B%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F*%20Side%20Panel%20for%20%ED%94%BC%ED%82%B9%20%ED%86%A0%ED%8A%B8%20*%2F%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-side-panel%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20position%3A%20absolute%3B%20top%3A%200%3B%20left%3A%20100%25%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20width%3A%20320px%3B%20height%3A%20100%25%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%20%23fff%3B%20border%3A%201px%20solid%20%23bdc3c7%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%3A%205px%205px%2020px%20rgba(0%2C0%2C0%2C0.1)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20border-radius%3A%2012px%3B%20margin-left%3A%2015px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20display%3A%20flex%3B%20flex-direction%3A%20column%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20transition%3A%20opacity%200.3s%2C%20transform%200.3s%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20opacity%3A%200%3B%20transform%3A%20translateX(-20px)%3B%20pointer-events%3A%20none%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20z-index%3A%2099990%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-side-panel.open%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20opacity%3A%201%3B%20transform%3A%20translateX(0)%3B%20pointer-events%3A%20auto%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F*%20Tote%20List%20Styles%20*%2F%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-tote-list%20%7B%20flex%3A%201%3B%20overflow-y%3A%20auto%3B%20padding%3A%2015px%3B%20background%3A%20%23f4f6f8%3B%20border-radius%3A%200%200%2012px%2012px%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-tote-card%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%20%23fff%3B%20border-radius%3A%208px%3B%20padding%3A%2012px%3B%20margin-bottom%3A%2010px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20border%3A%201px%20solid%20%23dfe6e9%3B%20box-shadow%3A%200%201px%203px%20rgba(0%2C0%2C0%2C0.05)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-tote-header%20%7B%20font-weight%3A%20bold%3B%20font-size%3A%2014px%3B%20color%3A%20%232d3436%3B%20margin-bottom%3A%208px%3B%20display%3Aflex%3B%20justify-content%3Aspace-between%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-sku-row%20%7B%20display%3A%20flex%3B%20justify-content%3A%20space-between%3B%20font-size%3A%2011px%3B%20padding%3A%204px%200%3B%20border-bottom%3A%201px%20dashed%20%23eee%3B%20color%3A%20%23636e72%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-sku-row%3Alast-child%20%7B%20border-bottom%3A%20none%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-sku-code%20%7B%20font-family%3A%20monospace%3B%20color%3A%20%230984e3%3B%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-login-layer%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20position%3A%20absolute%3B%20inset%3A0%3B%20background%3A%232c3e50%3B%20z-index%3A10%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20display%3Aflex%3B%20justify-content%3Acenter%3B%20align-items%3Acenter%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20color%3A%23fff%3B%20flex-direction%3Acolumn%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-login-card%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%23fff%3B%20padding%3A30px%3B%20border-radius%3A8px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20width%3A300px%3B%20color%3A%23333%3B%20text-align%3Acenter%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F*%20Side%20Toggle%20Button%20(IntelliJ%20Style)%20*%2F%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-side-toggle%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20position%3A%20absolute%3B%20top%3A%20100px%3B%20right%3A%20-28px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20width%3A%2028px%3B%20height%3A%20120px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%20%232d3436%3B%20color%3A%20%23bdc3c7%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20border-radius%3A%200%208px%208px%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20display%3A%20flex%3B%20align-items%3A%20center%3B%20justify-content%3A%20center%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cursor%3A%20pointer%3B%20z-index%3A%2099900%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20writing-mode%3A%20vertical-rl%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%20letter-spacing%3A%201px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%3A%202px%202px%205px%20rgba(0%2C0%2C0%2C0.2)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20transition%3A%20background%200.2s%2C%20right%200.3s%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-side-toggle%3Ahover%20%7B%20background%3A%20%23636e72%3B%20color%3A%20%23fff%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F*%20Hide%20toggle%20when%20panel%20is%20open%20*%2F%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-side-panel.open%20~%20.vms-side-toggle%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20display%3A%20none%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-body%20%7B%20flex%3A%201%3B%20display%3A%20flex%3B%20overflow%3A%20hidden%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-sidebar%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20width%3A%20380px%3B%20background%3A%20%23dfe6e9%3B%20border-right%3A%201px%20solid%20%23b2bec3%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20display%3A%20flex%3B%20flex-direction%3A%20column%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-sidebar-head%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20padding%3A%2012px%3B%20background%3A%20%23b2bec3%3B%20font-weight%3A%20bold%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20color%3A%20%232d3436%3B%20font-size%3A%2013px%3B%20display%3Aflex%3B%20justify-content%3Aspace-between%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-grid-list%20%7B%20flex%3A%201%3B%20overflow-y%3A%20auto%3B%20padding%3A%2010px%3B%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-card%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20border-radius%3A%206px%3B%20padding%3A%2012px%3B%20margin-bottom%3A%208px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cursor%3A%20pointer%3B%20transition%3A%20all%200.2s%3B%20position%3A%20relative%3B%20min-height%3A%2050px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-card%3Ahover%20%7B%20transform%3A%20translateY(-2px)%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-card.empty%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%20%23f1f2f6%3B%20border%3A%202px%20dashed%20%23b2bec3%3B%20opacity%3A%200.8%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20color%3A%20%2395a5a6%3B%20display%3A%20flex%3B%20align-items%3A%20center%3B%20justify-content%3A%20space-between%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-card.active%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%20%23fff%3B%20border%3A%202px%20solid%20%23fff%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%3A%200%202px%205px%20rgba(0%2C0%2C0%2C0.05)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-card.active.selected%20%7B%20border-color%3A%20%233498db%3B%20background%3A%20%23f0fbff%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-card.completed%20%7B%20background%3A%20%23e0fff0%3B%20border%3A%202px%20solid%20%232ecc71%3B%20opacity%3A%200.9%3B%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-card-header%20%7B%20display%3A%20flex%3B%20justify-content%3A%20space-between%3B%20margin-bottom%3A%205px%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-card-id%20%7B%20font-weight%3A%20bold%3B%20font-size%3A%2014px%3B%20color%3A%20%23636e72%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-card-dest%20%7B%20font-weight%3A%20bold%3B%20color%3A%20%23d63031%3B%20font-size%3A%2014px%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-card-dest.editable%3Ahover%20%7B%20background%3A%20%23dfe6e9%3B%20color%3A%20%232d3436%3B%20border-color%3A%20%2395a5a6%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-progress-bar%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20height%3A%206px%3B%20background%3A%20%23eee%3B%20border-radius%3A%203px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20overflow%3A%20hidden%3B%20margin-top%3A%208px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-progress-fill%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20height%3A%20100%25%3B%20background%3A%20%233498db%3B%20width%3A%200%25%3B%20transition%3A%20width%200.3s%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-progress-text%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%20color%3A%20%23666%3B%20text-align%3A%20right%3B%20margin-top%3A%202px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-detail%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20flex%3A%201%3B%20padding%3A%2030px%3B%20background%3A%20%23fff%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20display%3A%20flex%3B%20flex-direction%3A%20column%3B%20overflow-y%3A%20auto%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-empty-state%20%7B%20text-align%3Acenter%3B%20color%3A%23ccc%3B%20margin-top%3A150px%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-detail-top%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20border-bottom%3A%202px%20solid%20%23f1f2f6%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20padding-bottom%3A%2020px%3B%20margin-bottom%3A%2020px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-sku-grid%20%7B%20display%3A%20grid%3B%20grid-template-columns%3A%201fr%201fr%3B%20gap%3A%2020px%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-box%20%7B%20border%3A%201px%20solid%20%23eee%3B%20border-radius%3A%208px%3B%20padding%3A%2015px%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-item-row%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20display%3A%20flex%3B%20justify-content%3A%20space-between%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20padding%3A%208px%200%3B%20border-bottom%3A%201px%20dashed%20%23eee%3B%20font-size%3A%2013px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-item-row.done%20%7B%20color%3A%20%232ecc71%3B%20font-weight%3A%20bold%3B%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-footer%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20height%3A%2080px%3B%20background%3A%20%23fff%3B%20border-top%3A%201px%20solid%20%23ddd%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20display%3A%20flex%3B%20align-items%3A%20center%3B%20padding%3A%200%2030px%3B%20gap%3A%2020px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20border-radius%3A%200%200%2012px%2012px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-inp-grp%20%7B%20flex%3A1%3B%20display%3Aflex%3B%20flex-direction%3Acolumn%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-lbl%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20font-size%3A11px%3B%20font-weight%3Abold%3B%20color%3A%23aaa%3B%20margin-bottom%3A5px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20display%3Aflex%3B%20justify-content%3Aspace-between%3B%20align-items%3Acenter%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-inp%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20padding%3A12px%3B%20border%3A2px%20solid%20%23ddd%3B%20border-radius%3A6px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20font-size%3A16px%3B%20outline%3Anone%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-inp%3Afocus%20%7B%20border-color%3A%233498db%3B%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-history-log%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20height%3A%20100px%3B%20background%3A%20%232d3436%3B%20color%3A%20%23dfe6e9%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20overflow-y%3A%20auto%3B%20padding%3A%2010px%3B%20font-family%3A%20monospace%3B%20font-size%3A%2012px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20border-top%3A%201px%20solid%20%23b2bec3%3B%20display%3A%20flex%3B%20flex-direction%3A%20column-reverse%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-history-item%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20padding%3A%202px%200%3B%20border-bottom%3A%201px%20solid%20%23636e72%3B%20cursor%3A%20pointer%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-history-item%3Ahover%20%7B%20color%3A%20%23fff%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-clear-btn%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%20%23e74c3c%3B%20color%3A%20white%3B%20border%3A%20none%3B%20border-radius%3A%204px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20padding%3A%202px%208px%3B%20cursor%3A%20pointer%3B%20font-size%3A%2010px%3B%20display%3A%20none%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-loading-overlay%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20position%3A%20absolute%3B%20inset%3A%200%3B%20background%3A%20rgba(255%2C%20255%2C%20255%2C%200.7)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20display%3A%20flex%3B%20justify-content%3A%20center%3B%20align-items%3A%20center%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20z-index%3A%201000%3B%20font-size%3A%2024px%3B%20color%3A%20%233498db%3B%20font-weight%3A%20bold%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20border-radius%3A%2012px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F*%20Toast%20Notifications%20*%2F%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-toast-container%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20position%3A%20absolute%3B%20top%3A%2065px%3B%20right%3A%2020px%3B%20z-index%3A%20100000%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20display%3A%20flex%3B%20flex-direction%3A%20column%3B%20gap%3A%2010px%3B%20pointer-events%3A%20none%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-toast%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20padding%3A%2012px%2020px%3B%20border-radius%3A%208px%3B%20color%3A%20%23fff%3B%20font-weight%3A%20bold%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%3A%200%204px%2012px%20rgba(0%2C0%2C0%2C0.15)%3B%20font-size%3A%2014px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20animation%3A%20vms-slide-in%200.3s%20ease-out%20forwards%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20opacity%3A%200%3B%20transform%3A%20translateX(100%25)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pointer-events%3A%20auto%3B%20min-width%3A%20200px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%40keyframes%20vms-slide-in%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20to%20%7B%20opacity%3A%201%3B%20transform%3A%20translateX(0)%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-toast.grid-complete%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%20%232ecc71%3B%20border-left%3A%205px%20solid%20%2327ae60%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-toast.wave-complete%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%20%238e44ad%3B%20border-left%3A%205px%20solid%20%23fff%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20font-size%3A%2016px%3B%20padding%3A%2015px%2025px%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20.vms-toast.error%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20background%3A%20%23e74c3c%3B%20border-left%3A%205px%20solid%20%23c0392b%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20%2F%2F%2017.%20ENTRY%20POINT%0A%20%20%20%20%2F%2F%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%20%20%20%20%0A%20%20%20%20%2F%2F%20Expose%20function%20for%20inline%20onclick%20handler%0A%20%20%20%20window.vmsChangeTote%20%3D%20function(gridId)%20%7B%0A%20%20%20%20%20%20%20%20if%20(!isActionAllowed())%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20alert(%22%EC%A1%B0%ED%9A%8C%20%EC%A0%84%EC%9A%A9%20%EB%AA%A8%EB%93%9C%EC%97%90%EC%84%9C%EB%8A%94%20%ED%86%A0%ED%8A%B8%EB%A5%BC%20%EB%B3%80%EA%B2%BD%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4.%22)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20const%20grid%20%3D%20STATE.grids.find(g%20%3D%3E%20g.id%20%3D%3D%3D%20gridId)%3B%0A%20%20%20%20%20%20%20%20if%20(!grid%20%7C%7C%20!grid.isVirtualTote)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20alert(%22%EB%B3%80%EA%B2%BD%ED%95%A0%20%EC%88%98%20%EC%97%86%EB%8A%94%20%ED%86%A0%ED%8A%B8%EC%9E%85%EB%8B%88%EB%8B%A4.%22)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20const%20newTote%20%3D%20prompt(%60%5B%24%7BgridId%7D%5D%20%EB%B3%80%EA%B2%BD%ED%95%A0%20%ED%86%A0%ED%8A%B8%20%EB%B0%94%EC%BD%94%EB%93%9C%EB%A5%BC%20%EC%9E%85%EB%A0%A5%ED%95%98%EC%84%B8%EC%9A%94%3A%60%2C%20grid.destTote)%3B%0A%20%20%20%20%20%20%20%20if%20(newTote%20%26%26%20newTote.trim()%20!%3D%3D%20%22%22)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Check%20for%20duplicates%20in%20other%20grids%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20duplicate%20%3D%20STATE.grids.find(g%20%3D%3E%20g.destTote%20%3D%3D%3D%20newTote.trim()%20%26%26%20g.id%20!%3D%3D%20gridId)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(duplicate)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alert(%60%EC%9D%B4%EB%AF%B8%20%EB%8B%A4%EB%A5%B8%20%EA%B7%B8%EB%A6%AC%EB%93%9C(%24%7Bduplicate.id%7D)%EC%97%90%EC%84%9C%20%EC%82%AC%EC%9A%A9%20%EC%A4%91%EC%9D%B8%20%ED%86%A0%ED%8A%B8%EC%9E%85%EB%8B%88%EB%8B%A4.%60)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20grid.destTote%20%3D%20newTote.trim()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20updateAllUI()%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20init()%3B%0A%0A%7D)()%3B%7D)()%3B">
가상 소터 추가 (==합포장 분류 현황 조회)
</a>
</h1>
</p>
<hr>
<h1><strong>!!!!!"북마크바 표시"가 설정되어 있어야만 드래그 앤 드롭으로 추가 가능합니다!!!!!</strong></h1>f
<p>
- 북마크바 설정법: <strong>shift + command + B</strong>(크롬 선택한 상태에서)
</p>
<hr>
<p>repo:<a href="https://github.com/croquiscom/pda-preview-bookmarklet">https://github.com/croquiscom/pda-preview-bookmarklet</a></p>
<hr>
<hr>
<hr>
<h1>demo 영상</h1>
<video src="demo.mp4" controls style="width:1000px;"></video>
<!-- <video src="demo.mov"></video> -->
</body>
</html>