feat(project): 업무추가·알림벨을 상단바로 이동, 보드 단계추가 제거
- erp_base 토픈바에 {% block topbar_actions %} 추가
- 프로젝트 페이지: 알림벨 + '업무 추가' 를 탭 줄 → 상단 메뉴 오른쪽(사용자
칩 옆)으로 이동. 탭 줄은 뷰 탭만 남김
- 보드 뷰의 '+ 단계 추가' 트레일링 컬럼 제거(단계 추가 기능 삭제)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
{% extends "erp_base.html" %}
|
||||
|
||||
{% block head_extra %}
|
||||
<link rel="stylesheet" href="/static/project.css?v=20260625i" />
|
||||
<link rel="stylesheet" href="/static/project.css?v=20260625j" />
|
||||
<link rel="stylesheet" href="/static/vendor/material-symbols/material-symbols.css" />
|
||||
{% endblock %}
|
||||
|
||||
@@ -45,5 +45,5 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<script src="/static/project.js?v=20260625i" defer></script>
|
||||
<script src="/static/project.js?v=20260625j" defer></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{% extends "erp_base.html" %}
|
||||
|
||||
{% block head_extra %}
|
||||
<link rel="stylesheet" href="/static/project.css?v=20260625i" />
|
||||
<link rel="stylesheet" href="/static/project.css?v=20260625j" />
|
||||
<link rel="stylesheet" href="/static/vendor/material-symbols/material-symbols.css" />
|
||||
{% endblock %}
|
||||
|
||||
@@ -101,5 +101,5 @@
|
||||
<script>
|
||||
window.PJ_COLORS = {{ ["#4573d2","#37a3a3","#62a420","#e8a33d","#e8384f","#aa62e3","#f06a6a","#5a6772"] | tojson }};
|
||||
</script>
|
||||
<script src="/static/project.js?v=20260625i" defer></script>
|
||||
<script src="/static/project.js?v=20260625j" defer></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{% extends "erp_base.html" %}
|
||||
|
||||
{% block head_extra %}
|
||||
<link rel="stylesheet" href="/static/project.css?v=20260625i" />
|
||||
<link rel="stylesheet" href="/static/project.css?v=20260625j" />
|
||||
<!-- 구글 머티리얼 심볼(담당자 아이콘 등) — self-host -->
|
||||
<link rel="stylesheet" href="/static/vendor/material-symbols/material-symbols.css" />
|
||||
<!-- 타임라인 vis-timeline — self-host -->
|
||||
@@ -44,6 +44,16 @@
|
||||
</ul>
|
||||
{% endmacro %}
|
||||
|
||||
{% block topbar_actions %}
|
||||
<a class="pj-bell" href="/project/inbox" title="알림센터">
|
||||
<span class="material-symbols-outlined">notifications</span>
|
||||
<span class="pj-bell-badge" id="pj-bell-badge" hidden>0</span>
|
||||
</a>
|
||||
{% if can_manage %}
|
||||
<button type="button" class="pj-btn pj-btn-primary" id="pj-new-task">+ 업무 추가</button>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="pj-wrap pj-project-view"
|
||||
data-project-id="{{ project.id }}"
|
||||
@@ -101,15 +111,6 @@
|
||||
<button type="button" class="pj-tab" data-view="board">보드</button>
|
||||
<button type="button" class="pj-tab" data-view="list">리스트</button>
|
||||
</div>
|
||||
<div class="pj-toolbar-right">
|
||||
<a class="pj-bell" href="/project/inbox" title="알림센터">
|
||||
<span class="material-symbols-outlined">notifications</span>
|
||||
<span class="pj-bell-badge" id="pj-bell-badge" hidden>0</span>
|
||||
</a>
|
||||
{% if can_manage %}
|
||||
<button type="button" class="pj-btn pj-btn-primary" id="pj-new-task">+ 업무 추가</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 달력 (휴가 모듈과 동일한 월간 그리드) -->
|
||||
@@ -283,5 +284,5 @@
|
||||
</script>
|
||||
|
||||
<script src="/static/vendor/vis-timeline/vis-timeline-graph2d.min.js"></script>
|
||||
<script src="/static/project.js?v=20260625i" defer></script>
|
||||
<script src="/static/project.js?v=20260625j" defer></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -287,13 +287,6 @@
|
||||
}
|
||||
board.appendChild(col);
|
||||
});
|
||||
if (canManage) {
|
||||
const add = document.createElement("div");
|
||||
add.className = "pj-col pj-col-add";
|
||||
add.innerHTML = '<button type="button" class="pj-add-stage" id="pj-add-stage">+ 단계 추가</button>';
|
||||
add.querySelector("#pj-add-stage").addEventListener("click", addStage);
|
||||
board.appendChild(add);
|
||||
}
|
||||
}
|
||||
|
||||
async function reloadStages() {
|
||||
@@ -332,12 +325,6 @@
|
||||
});
|
||||
}
|
||||
|
||||
async function addStage() {
|
||||
const name = prompt("새 단계 이름");
|
||||
if (!name || !name.trim()) return;
|
||||
try { await api("POST", "/project/api/projects/" + projectId + "/stages", { name: name.trim() }); await reloadStages(); renderBoard(); }
|
||||
catch (e) { alert("추가 실패: " + e.message); }
|
||||
}
|
||||
|
||||
function taskCard(t) {
|
||||
const card = document.createElement("div");
|
||||
|
||||
@@ -115,6 +115,7 @@
|
||||
</div>
|
||||
|
||||
<div class="erp-topbar-right">
|
||||
{% block topbar_actions %}{% endblock %}
|
||||
<div class="erp-user-chip">
|
||||
{% if user.picture %}
|
||||
<img class="erp-user-avatar" src="{{ user.picture }}" alt="{{ user.name }}" />
|
||||
|
||||
Reference in New Issue
Block a user