diff --git a/app/modules/project/templates/project/project.html b/app/modules/project/templates/project/project.html
index bcbf42a..07b8169 100644
--- a/app/modules/project/templates/project/project.html
+++ b/app/modules/project/templates/project/project.html
@@ -1,7 +1,9 @@
{% extends "erp_base.html" %}
{% block head_extra %}
-
+
+
+
{% endblock %}
@@ -49,8 +51,8 @@
{% for m in members %}
-
- {{ (m.user_name or m.user_email)[0] | upper }}
- {{ m.user_name or m.user_email }}
+ account_circle
+ {{ m.user_email.split('@')[0] }}
{% if m.role == 'manager' %}관리{% endif %}
{% if is_admin %}
@@ -154,8 +156,8 @@
@@ -200,5 +202,5 @@
-
+
{% endblock %}
diff --git a/app/static/project.css b/app/static/project.css
index 459f738..27effad 100644
--- a/app/static/project.css
+++ b/app/static/project.css
@@ -67,8 +67,11 @@
.pj-sub-dot { width: 8px; height: 8px; border-radius: 50%; }
.pj-member-name { font-size: 13px; flex: 1; }
-.pj-avatar { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; border-radius: 50%; background: #d6e0f5; color: #2b4a85; font-size: 11px; font-weight: 700; flex: 0 0 auto; }
-.pj-avatar-sm { width: 20px; height: 20px; font-size: 10px; }
+/* 구글 머티리얼 심볼 아이콘(담당자) */
+.material-symbols-outlined { font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24; line-height: 1; vertical-align: middle; }
+.pj-gicon { font-size: 24px; color: #5f6368; flex: 0 0 auto; }
+.pj-gicon-sm { font-size: 20px; }
+.pj-assignee { display: inline-flex; align-items: center; gap: 3px; font-size: 12px; color: #5f6368; }
/* ── 툴바 + 탭 ── */
.pj-toolbar { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; }
diff --git a/app/static/project.js b/app/static/project.js
index 201fae1..a43d037 100644
--- a/app/static/project.js
+++ b/app/static/project.js
@@ -204,7 +204,10 @@
(t.priority && t.priority !== "normal"
? '' + (priorityLabels[t.priority] || t.priority) + ""
: "") +
- (t.assignee_email ? '' + escapeHtml((t.assignee_name || t.assignee_email)[0].toUpperCase()) + "" : "") +
+ (t.assignee_email
+ ? 'account_circle' +
+ escapeHtml(idOf(t.assignee_email)) + ""
+ : "") +
(t.due_date ? '' + t.due_date + "" : "") +
"";
card.addEventListener("click", function () { if (canManage) openTaskModal(t); });
@@ -244,7 +247,7 @@
if (t.completed_at) tr.className = "is-done";
tr.innerHTML =
"
| " + escapeHtml(t.title) + " | " +
- "" + escapeHtml(t.assignee_name || t.assignee_email || "-") + " | " +
+ "" + (t.assignee_email ? escapeHtml(idOf(t.assignee_email)) : "-") + " | " +
"" + escapeHtml(t.stage_name || "-") + " | " +
"" + (priorityLabels[t.priority] || t.priority || "-") + " | " +
"" + (t.start_date || "-") + " | " +
@@ -367,6 +370,10 @@
wireCalendar();
}
+ function idOf(email) {
+ return String(email == null ? "" : email).split("@")[0];
+ }
+
function escapeHtml(s) {
return String(s == null ? "" : s)
.replace(/&/g, "&").replace(//g, ">")