convert to gitea

This commit is contained in:
2025-09-15 13:33:34 +09:00
commit 95882ac072
277 changed files with 46023 additions and 0 deletions

View File

@ -0,0 +1,53 @@
{# /data/gyber/apps/web/templates/includes/user/user_controls.html #}
{# 사용자 목록 페이지 상단 컨트롤 영역 #}
<form method="get" action="{% url 'gyber:user_list' %}" class="row gy-2 gx-3 align-items-center mb-4">
{# 검색어 입력 #}
<div class="col-auto">
<label class="visually-hidden" for="query">검색어</label>
<input type="text" class="form-control form-control-sm" id="query" name="query" placeholder="이름, 계정, 부서 검색" value="{{ search_query|default:'' }}">
</div>
{# 부서 필터 드롭다운 #}
<div class="col-auto">
<label class="visually-hidden" for="group">부서</label>
{# ★ onchange 이벤트 제거하고 검색 버튼으로 통일? 또는 유지? 여기서는 유지 #}
<select class="form-select form-select-sm" id="group" name="group" onchange="this.form.submit()">
<option value="">-- 전체 부서 --</option>
{% for group_item in group_list %} {# 변수 이름 충돌 피하기 위해 group_item 사용 #}
<option value="{{ group_item.group_id }}" {% if group_item.group_id == current_group %}selected{% endif %}>
{{ group_item.group_name }}
</option>
{% endfor %}
</select>
</div>
{# 페이지 크기 선택 #}
<div class="col-auto">
<label class="visually-hidden" for="page_size">페이지 크기</label>
<select class="form-select form-select-sm" id="page_size" name="page_size" onchange="this.form.submit()">
{% for size in valid_page_sizes %}
<option value="{{ size }}" {% if size == page_size %}selected{% endif %}>{{ size }}개씩 보기</option>
{% endfor %}
</select>
</div>
{# 검색 버튼 #}
<div class="col-auto">
<button type="submit" class="btn btn-primary btn-sm">
<i class="fas fa-search"></i> 검색
</button>
</div>
{# 검색/필터 초기화 버튼 #}
{% if search_query or current_group %}
<div class="col-auto">
{# 초기화 링크 #}
<a href="{% url 'gyber:user_list' %}" class="btn btn-secondary btn-sm">
<i class="fas fa-times"></i> 초기화
</a>
</div>
{% endif %}
{# 다른 필터/정렬값 유지 위한 hidden inputs (필요시 추가) #}
{% if sort_by != 'name' %}<input type="hidden" name="sort" value="{{ sort_by }}">{% endif %}
{% if sort_dir != 'asc' %}<input type="hidden" name="dir" value="{{ sort_dir }}">{% endif %}
{# page_size 는 select 에서 전달됨 #}
</form>

View File

@ -0,0 +1,72 @@
{# /data/gyber/apps/web/templates/includes/user/user_table.html #}
{# 사용자 목록 테이블 #}
<div class="table-responsive">
<table class="table table-striped table-hover table-sm align-middle">
<thead class="table-light">
<tr>
{# 테이블 헤더 (정렬 링크 포함) #}
<th>
<a href="?{{ query_params_all }}&sort=name&dir={% if sort_by == 'name' and sort_dir == 'asc' %}desc{% else %}asc{% endif %}">
사용자 (표시이름 [계정명])
{% if sort_by == 'name' %}<i class="fas fa-sort-{{ sort_dir|lower }}"></i>{% endif %}
</a>
</th>
<th>
<a href="?{{ query_params_all }}&sort=account&dir={% if sort_by == 'account' and sort_dir == 'asc' %}desc{% else %}asc{% endif %}">
계정명
{% if sort_by == 'account' %}<i class="fas fa-sort-{{ sort_dir|lower }}"></i>{% endif %}
</a>
</th>
<th>
<a href="?{{ query_params_all }}&sort=group&dir={% if sort_by == 'group' and sort_dir == 'asc' %}desc{% else %}asc{% endif %}">
부서
{% if sort_by == 'group' %}<i class="fas fa-sort-{{ sort_dir|lower }}"></i>{% endif %}
</a>
</th>
<th class="text-end">
<a href="?{{ query_params_all }}&sort=assets&dir={% if sort_by == 'assets' and sort_dir == 'asc' %}desc{% else %}asc{% endif %}">
보유 자산 수
{% if sort_by == 'assets' %}<i class="fas fa-sort-{{ sort_dir|lower }}"></i>{% endif %}
</a>
</th>
<th style="width: 15%;">액션</th>
</tr>
</thead>
<tbody>
{% for user_item in user_list %} {# 변수 이름 변경 #}
<tr>
<td>{{ user_item.user_display_name|default:"-" }}</td>
<td>{{ user_item.account_name|default:"-" }}</td>
<td>{{ user_item.group_name|default:"-" }}</td>
<td class="text-end">{{ user_item.assigned_asset_count }}</td>
<td class="text-nowrap"> {# 액션 버튼 줄바꿈 방지 #}
{# 자산 보기 링크 #}
<a href="{% url 'gyber:resource_list' %}?user_id={{ user_item.user_id }}" class="btn btn-sm btn-outline-primary me-1" title="{{ user_item.user_display_name|default:'사용자' }}님의 자산 목록 보기">
<i class="fas fa-list"></i> <span class="d-none d-md-inline">자산</span>
</a>
{# 사용자 수정 버튼 #}
{% if user_is_admin_group_member %}
<a href="{% url 'gyber:user_edit' user_item.user_id %}" class="btn btn-sm btn-outline-secondary me-1" title="사용자 정보 수정">
<i class="fas fa-edit"></i> <span class="d-none d-md-inline">수정</span>
</a>
{# 삭제 버튼 (모달 트리거) #}
<button type="button" class="btn btn-sm btn-outline-danger" data-bs-toggle="modal" data-bs-target="#user-delete-modal-{{ user_item.user_id }}" title="사용자 삭제">
<i class="fas fa-trash-alt"></i> <span class="d-none d-md-inline">삭제</span>
</button>
{% endif %}
</td>
</tr>
{% empty %}
<tr>
<td colspan="5" class="text-center">
{% if search_query or current_group %}
조건에 맞는 사용자가 없습니다.
{% else %}
등록된 사용자가 없습니다.
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>