diff --git a/system1-factory/api/db/migrations/20260313100000_create_purchase_system.sql b/system1-factory/api/db/migrations/20260313100000_create_purchase_system.sql
index 36d2f2a..b5bf40d 100644
--- a/system1-factory/api/db/migrations/20260313100000_create_purchase_system.sql
+++ b/system1-factory/api/db/migrations/20260313100000_create_purchase_system.sql
@@ -21,6 +21,7 @@ CREATE TABLE IF NOT EXISTS vendors (
CREATE TABLE IF NOT EXISTS consumable_items (
item_id INT AUTO_INCREMENT PRIMARY KEY,
item_name VARCHAR(100) NOT NULL,
+ spec VARCHAR(200) DEFAULT NULL,
maker VARCHAR(100),
category ENUM('consumable','safety','repair','equipment') NOT NULL
COMMENT '소모품, 안전용품, 수선비, 설비',
@@ -30,7 +31,7 @@ CREATE TABLE IF NOT EXISTS consumable_items (
is_active TINYINT(1) DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- UNIQUE KEY uq_name_maker (item_name, maker)
+ UNIQUE KEY uq_name_spec_maker (item_name, spec, maker)
);
-- 구매신청 (tkfb에서 CRUD) — item_id NULL 허용 + 직접입력/사진 컬럼 추가
diff --git a/system2-report/web/js/chat-report.js b/system2-report/web/js/chat-report.js
index 0ecbe8b..c7a096a 100644
--- a/system2-report/web/js/chat-report.js
+++ b/system2-report/web/js/chat-report.js
@@ -630,7 +630,7 @@ async function submitReport() {
linkDiv.className = 'summary-actions';
if (isNonconformity) {
linkDiv.innerHTML = `
-
+
`;
} else {
diff --git a/system3-nonconformance/web/static/js/core/auth-manager.js b/system3-nonconformance/web/static/js/core/auth-manager.js
index c233fa8..541c6ff 100644
--- a/system3-nonconformance/web/static/js/core/auth-manager.js
+++ b/system3-nonconformance/web/static/js/core/auth-manager.js
@@ -94,7 +94,7 @@ class AuthManager {
if (hostname.includes('technicalkorea.net')) {
return window.location.protocol + '//tkds.technicalkorea.net/dashboard?redirect=' + encodeURIComponent(window.location.href);
}
- return window.location.protocol + '//' + hostname + ':30780/dashboard?redirect=' + encodeURIComponent(window.location.href);
+ return window.location.protocol + '//' + hostname + ':30000/dashboard?redirect=' + encodeURIComponent(window.location.href);
}
/**
diff --git a/system3-nonconformance/web/static/js/m/m-common.js b/system3-nonconformance/web/static/js/m/m-common.js
index ad0d65e..0b81975 100644
--- a/system3-nonconformance/web/static/js/m/m-common.js
+++ b/system3-nonconformance/web/static/js/m/m-common.js
@@ -52,7 +52,7 @@ function renderBottomNav(activePage) {
{ icon: 'fa-chart-line', label: '현황판', href: '/m/dashboard.html', page: 'dashboard' },
{ icon: 'fa-inbox', label: '수신함', href: '/m/inbox.html', page: 'inbox' },
{ icon: 'fa-tasks', label: '관리함', href: '/m/management.html', page: 'management' },
- { icon: 'fa-bullhorn', label: '신고', href: 'https://tkreport.technicalkorea.net', page: 'report', external: true, highlight: true }
+ { icon: 'fa-bullhorn', label: '신고', href: (location.hostname.includes('technicalkorea.net') ? 'https://tkreport.technicalkorea.net' : location.protocol + '//' + location.hostname + ':30180'), page: 'report', external: true, highlight: true }
];
items.forEach(function (item) {
var a = document.createElement('a');