diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js
index f472551..fadf850 100644
--- a/frontend/src/router/index.js
+++ b/frontend/src/router/index.js
@@ -117,6 +117,12 @@ const routes = [
component: () => import('../views/print/USBLabelBatch.vue'),
meta: { plugin: 'usb' }
},
+ {
+ path: '/print/printedparts-labels',
+ name: 'print-printedparts-labels',
+ component: () => import('../views/print/PrintedPartsLabels.vue'),
+ meta: { plugin: 'printedparts' }
+ },
{
path: '/',
component: AppLayout,
diff --git a/frontend/src/views/print/PrintedPartsLabels.vue b/frontend/src/views/print/PrintedPartsLabels.vue
new file mode 100644
index 0000000..c2dd1c6
--- /dev/null
+++ b/frontend/src/views/print/PrintedPartsLabels.vue
@@ -0,0 +1,207 @@
+
+
+
+
+
Print 3D Parts Bin Labels (1in x 0.5in)
+
+ Each label is one page on 1in x 0.5in roll stock: CODE128 barcode of
+ the item code, scannable at the parts kiosk.
+
+
+
Loading parts...
+
No parts found
+
+
+
+
+
+
+
+
+ Selected: {{ selectedItems.length }} labels
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ label.itemcode }}
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/views/printedparts/PrintedItemDetail.vue b/frontend/src/views/printedparts/PrintedItemDetail.vue
index d14a158..1bd805e 100644
--- a/frontend/src/views/printedparts/PrintedItemDetail.vue
+++ b/frontend/src/views/printedparts/PrintedItemDetail.vue
@@ -27,6 +27,8 @@
Edit
+ Bin Label
diff --git a/frontend/src/views/printedparts/PrintedItemsList.vue b/frontend/src/views/printedparts/PrintedItemsList.vue
index c444dc8..e17f700 100644
--- a/frontend/src/views/printedparts/PrintedItemsList.vue
+++ b/frontend/src/views/printedparts/PrintedItemsList.vue
@@ -2,7 +2,12 @@
@@ -131,6 +136,7 @@ function debouncedSearch() {
text-overflow: ellipsis;
white-space: nowrap;
}
+.header-actions { display: flex; gap: 0.5rem; }
.lowstock-filter {
display: inline-flex;
align-items: center;