This commit is contained in:
1 parent
721511fd1b
commit
2fbfe24283
5 files changed
+46
-33
No files matched your search
+42
-30
@@ -7,12 +7,12 @@
|
||||
const COMMENTS_KEY = 'baron.qa.comments.egbim';
|
||||
const CATEGORY_CODES = { '오류문의': 'ERROR_QNA', '개선문의': 'IMPROVEMENT_QNA', '일반문의': 'GENERAL_QNA' };
|
||||
const STATUS_LABELS = {
|
||||
INIT: '접수',
|
||||
ON_REVIEW: '문의검토',
|
||||
DETAILED_REVIEW: '정밀검토',
|
||||
IN_PROGRESS: '처리중',
|
||||
RESOLVED: '답변완료',
|
||||
PENDING: '보류'
|
||||
INIT: "접수",
|
||||
ON_REVIEW: "접수",
|
||||
DETAILED_REVIEW: "진행중",
|
||||
IN_PROGRESS: "진행중",
|
||||
RESOLVED: "완료",
|
||||
PENDING: "보류"
|
||||
};
|
||||
let authReady;
|
||||
|
||||
@@ -62,20 +62,22 @@
|
||||
}
|
||||
const createdAt = value(["createdAt", "created_at", "date"]) || new Date().toISOString();
|
||||
const secret = value(["is_secret", "isSecret", "secret"]);
|
||||
const requesterEmail = value(["requester_email", "requesterEmail", "email"]);
|
||||
return {
|
||||
id: value(["id", "feedbackId", "feedback_id"]),
|
||||
feedbackId: value(["id", "feedbackId", "feedback_id"]),
|
||||
requesterId: value(["requester_id", "requesterId", "requester_uuid"]) || firstValue(requester, ["id", "uuid", "userId"]),
|
||||
requesterTenantId: value(["requester_tenant_id", "requesterTenantId", "tenant_id", "tenantId"]),
|
||||
requesterEmail: requesterEmail,
|
||||
category: normalizeCategory(value(["Category", "category"])),
|
||||
company: value(["requester_company", "company", "organization", "tenant_name", "tenantName", "requester_affiliation"]),
|
||||
company: getCompanyNameFromEmail(requesterEmail) || value(["requester_company", "company", "organization", "tenant_name", "tenantName", "requester_affiliation"]),
|
||||
department: value(["requester_department", "department", "team"]) || "-",
|
||||
author: value(["requester_name", "author_name", "authorName", "name", "author"]) || "작성자",
|
||||
title: value(["title", "subject"]) || "제목 없음",
|
||||
content: value(["contents", "content", "body"]) || "",
|
||||
date: String(createdAt).slice(0, 10),
|
||||
createdAt: createdAt,
|
||||
status: normalizeStatus(value(["feedback_status", "feedbackStatus", "status_code", "status"])),
|
||||
status: normalizeStatus(value(["feedback_status", "feedbackStatus", "status_code", "status"]), item),
|
||||
secret: secret === true || String(secret).toLowerCase() === "true" || String(secret) === "1",
|
||||
attachments: value(["attachments", "images"]) || [],
|
||||
raw: item
|
||||
@@ -115,19 +117,21 @@
|
||||
return Boolean(post.author && [user.name, user.loginId, user.email].filter(Boolean).indexOf(post.author) > -1);
|
||||
}
|
||||
|
||||
function normalizeStatus(value) {
|
||||
if (value && typeof value === 'object') value = value.code || value.key || value.value || value.name || '';
|
||||
const raw = String(value || '').trim();
|
||||
if (!raw) return '';
|
||||
function normalizeStatus(value, context) {
|
||||
if (value && typeof value === "object") value = value.code || value.key || value.value || value.name || "";
|
||||
const raw = String(value || "").trim();
|
||||
if (!raw) return "";
|
||||
const upper = raw.toUpperCase();
|
||||
return STATUS_LABELS[upper] || ({
|
||||
NEW: '접수', RECEIVED: '접수', 접수: '접수', 문의접수: '접수',
|
||||
REVIEW: '문의검토', 문의검토: '문의검토',
|
||||
DEEP: '정밀검토', 정밀검토: '정밀검토',
|
||||
PATCH: '처리중', 처리중: '처리중',
|
||||
DONE: '답변완료', COMPLETED: '답변완료', 답변완료: '답변완료',
|
||||
HOLD: '보류', 보류: '보류'
|
||||
const label = STATUS_LABELS[upper] || ({
|
||||
NEW: "접수", RECEIVED: "접수", 접수: "접수", 문의접수: "접수", 문의검토: "접수", REVIEW: "접수",
|
||||
DEEP: "진행중", 정밀검토: "진행중", PATCH: "진행중", 처리중: "진행중", 진행중: "진행중",
|
||||
DONE: "완료", COMPLETED: "완료", 답변완료: "완료", 완료: "완료",
|
||||
HOLD: "보류", ON_HOLD: "보류", 보류: "보류"
|
||||
}[upper] || raw);
|
||||
const issues = context && Array.isArray(context.issues) ? context.issues : [];
|
||||
const issueLinkStatus = context && (context.issue_link_status || context.issueLinkStatus || context.issue_status || context.issueStatus);
|
||||
const hasLinkedIssue = issues.length > 0 || ["LINKED", "ISSUE_LINKED", "CONNECTED", "이슈접수"].indexOf(String(issueLinkStatus || "").toUpperCase()) > -1;
|
||||
return label === "진행중" && hasLinkedIssue ? "진행중(이슈접수)" : label;
|
||||
}
|
||||
|
||||
function extractFeedbackStatus(payload) {
|
||||
@@ -137,11 +141,11 @@
|
||||
const candidate = candidates[index];
|
||||
if (!candidate || typeof candidate !== 'object') continue;
|
||||
const value = candidate.feedback_status || candidate.feedbackStatus || candidate.status_code || candidate.status;
|
||||
if (value != null && value !== '') return normalizeStatus(value);
|
||||
if (value != null && value !== '') return normalizeStatus(value, root);
|
||||
}
|
||||
const fields = root && (Array.isArray(root.fields) ? root.fields : (root.data && Array.isArray(root.data.fields) ? root.data.fields : []));
|
||||
const statusField = fields.find(function (field) { return field && (field.key === 'feedback_status' || field.fieldKey === 'feedback_status' || field.name === 'feedback_status'); });
|
||||
return statusField ? normalizeStatus(statusField.value || statusField.val || statusField.data) : '';
|
||||
return statusField ? normalizeStatus(statusField.value || statusField.val || statusField.data, root) : '';
|
||||
}
|
||||
|
||||
async function refreshRemoteStatus(post) {
|
||||
@@ -206,12 +210,24 @@
|
||||
'samaneng.com': '삼안',
|
||||
'hanmaceng.co.kr': '한맥기술',
|
||||
'brsw.kr': '바론그룹',
|
||||
'baroncs.co.kr': '바론컨설턴트',
|
||||
'jangheon.co.kr': '장헌산업',
|
||||
'jangheon.com': '(주)장헌',
|
||||
'hallasanup.com': '한라산업개발'
|
||||
})[domain] || '';
|
||||
}
|
||||
|
||||
function getPostCompanyLabel(post, user) {
|
||||
post = post || {};
|
||||
const raw = post.raw || {};
|
||||
const emailCompany = getCompanyNameFromEmail(post.requesterEmail || raw.requester_email || raw.requesterEmail);
|
||||
if (emailCompany) return emailCompany;
|
||||
if (post.company && post.company !== "외부 사용자") return post.company;
|
||||
const company = user && (user.company || user.tenantName);
|
||||
if (company && post.requesterTenantId && user.tenantId && String(post.requesterTenantId) === String(user.tenantId)) return company;
|
||||
return post.company || "외부 사용자";
|
||||
}
|
||||
|
||||
function collectSsoClaims() {
|
||||
const storedClaims = parseJson(
|
||||
sessionStorage.getItem('ssoClaims') || sessionStorage.getItem('baronClaims') || sessionStorage.getItem('claims'),
|
||||
@@ -402,11 +418,7 @@
|
||||
let posts = getPosts();
|
||||
let remoteLoaded = false;
|
||||
|
||||
function getPostCompany(post, user) {
|
||||
const company = user && (user.company || user.tenantName);
|
||||
if (company && post.requesterTenantId && user.tenantId && String(post.requesterTenantId) === String(user.tenantId)) return company;
|
||||
return post.company || "외부 사용자";
|
||||
}
|
||||
function getPostCompany(post, user) { return getPostCompanyLabel(post, user); }
|
||||
|
||||
function render() {
|
||||
const query = (qs("#query").value || "").trim().toLowerCase();
|
||||
@@ -434,7 +446,7 @@
|
||||
tableBody.innerHTML = rows.map(function (post, index) {
|
||||
const isNotice = post.category === "공지사항";
|
||||
const number = isNotice ? "공지" : filtered.length - ((page - 1) * pageSize + index);
|
||||
const status = normalizeStatus(post.status);
|
||||
const status = normalizeStatus(post.status, post.raw);
|
||||
const statusClass = status === "답변완료" ? "done" : (status === "문의검토" || status === "정밀검토" ? "review" : "");
|
||||
const company = getPostCompany(post, user);
|
||||
return "<tr class=\"" + (isNotice ? "notice-row" : "") + "\" data-id=\"" + escapeHtml(post.id) + "\">" +
|
||||
@@ -533,11 +545,11 @@
|
||||
}
|
||||
qs('[data-detail-category]').textContent = post.category;
|
||||
qs('[data-detail-title]').textContent = post.title;
|
||||
qs('[data-detail-status]').textContent = normalizeStatus(post.status) || '공지';
|
||||
qs('[data-detail-status]').textContent = normalizeStatus(post.status, post.raw) || '공지';
|
||||
qs('[data-detail-date]').textContent = post.date;
|
||||
qs('[data-detail-author]').textContent = post.author;
|
||||
const detailUser = getAuthUser();
|
||||
qs('[data-detail-company]').textContent = detailUser && (detailUser.company || detailUser.tenantName) && post.requesterTenantId && String(detailUser.tenantId) === String(post.requesterTenantId) ? (detailUser.company || detailUser.tenantName) : (post.company || '외부 사용자');
|
||||
qs('[data-detail-company]').textContent = getPostCompanyLabel(post, detailUser);
|
||||
qs('[data-detail-department]').textContent = post.department;
|
||||
qs('[data-detail-content]').textContent = post.content;
|
||||
qs('[data-detail-secret]').hidden = !post.secret;
|
||||
@@ -728,7 +740,7 @@
|
||||
}).join('');
|
||||
});
|
||||
refreshRemoteStatus(post).then(function (changed) {
|
||||
if (changed) qs('[data-detail-status]').textContent = normalizeStatus(post.status) || '공지';
|
||||
if (changed) qs('[data-detail-status]').textContent = normalizeStatus(post.status, post.raw) || '공지';
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user