<!-- 이슈 목록 -->
|
<!--
|
<div class="support-tickets">
|
<div class="support-tickets-header">
|
<div class="tickets-control">
|
<h5 translate="issue.issueList">
|
이슈 목록
|
</h5>
|
</div>
|
|
<div class="tickets-filter">
|
<div class="dataTables_length">
|
<label>
|
<select name="pageRow"
|
class="form-control form-control-sm"
|
ng-change="fn.changePageRowCount()"
|
ng-model="vm.page.selectedPageRowCount">
|
<option value="10">10</option>
|
<option value="50">50</option>
|
<option value="100">100</option>
|
</select> {{vm.page.selectedPage}}-{{vm.responseData.page.totalPage}} /
|
{{vm.responseData.page.totalCount | number}}<span translate="common.few">건</span>
|
</label>
|
</div>
|
|
<div class="form-check stick-right">
|
<form class="form-inline justify-content-sm-end" method="post" action="/issue/downloadExcel"
|
name="issueListForm">
|
<input type="hidden" name="conditions">
|
<div class="btn-group">
|
<button aria-expanded="false" aria-haspopup="true"
|
class="btn btn-secondary dropdown-toggle"
|
data-toggle="dropdown" type="button">
|
<span translate="common.addFunction">추가기능</span>
|
</button>
|
<div aria-labelledby="dropdownMenuButton2" class="dropdown-menu"
|
x-placement="bottom-start"
|
style="position: absolute; transform: translate3d(0px, 30px, 0px); top: 0px; left: 0px; will-change: transform;">
|
<a class="dropdown-item cursor" form-submit="issueListForm"
|
make-search-conditions="fn.makeSearchConditions()"> <span
|
translate="common.downloadExcel">엑셀 다운로드</span></a>
|
<a class="dropdown-item cursor" ng-click="fn.importExcel()"> <span
|
translate="common.importExcel">Excel Import</span></a>
|
<a class="dropdown-item cursor" ng-click="fn.modifyMultiIssueStatus()"> <span
|
translate="common.updateIssueStatus">이슈 상태 변경</span></a>
|
<a class="dropdown-item cursor" ng-click="fn.removes()"> <span
|
translate="common.delete">삭제</span></a>
|
</div>
|
</div>
|
</form>
|
</div>
|
|
</div>
|
</div>
|
-->
|
<!-- 테이블 -->
|
<!--
|
<div class="support-ticket ">
|
<div class="st-body">
|
<div class="table-responsive">
|
<js-table data="vm.responseData.data" table-configs="vm.tableConfigs"
|
event="tableEvent" detail-view="vm.detailView"></js-table>
|
</div>
|
</div>
|
</div>
|
-->
|
<!-- 페이징 -->
|
<!--
|
<div class="controls-below-table text-center">
|
<ul uib-pagination
|
boundary-links-numbes="true"
|
items-per-page="vm.page.selectedPageRowCount"
|
total-items="vm.responseData.page.totalCount"
|
ng-model="vm.page.selectedPage"
|
max-size="10"
|
ng-click="fn.getPageList(vm.page.selectedPage-1)"
|
class="pagination pagination-sm"
|
previous-text="Prev"
|
next-text="Next"
|
first-text=""
|
last-text="">
|
</ul>
|
</div>
|
</div>
|
-->
|
<!-- 상세 화면 -->
|
<div class="support-ticket-content-w" ng-controller="issueDetailController">
|
<div class="support-ticket-content">
|
<span ng-if="vm.viewer.parentIssueVo != null" class="badge" ng-style="{'background-color' : '#353535', 'border-color' : vm.viewer.issueStatusVo.color, 'color' : '#FFFFFF' }">
|
<span class="cursor" ng-click="fn.goParentIssue()">상위 이슈:{{vm.viewer.parentIssueVo.title}}</span>
|
</span>
|
|
<div class="">
|
<span class="h3-div">{{vm.viewer.title}}</span>
|
</div>
|
<div class="support-ticket-content-header issue-detail-word-break" style="height: 5vh">
|
<span class="ticket-header">
|
<div class="tasks-header-w">
|
<span class="tags">
|
<span class="tag">{{vm.viewer.projectVo.projectKey}}-{{vm.viewer.issueNumber}} / {{vm.viewer.projectVo.name}} <span ng-if="vm.viewer.isApi == 'Y'">/</span> <span ng-if="vm.viewer.isApi == 'Y'" class="badge" ng-style="{'background-color' : '#EF8D9A', 'border-color' : '#EF8D9A', 'color' : '#FFFFFF' }">API</span></span>
|
</span>
|
</div>
|
</span>
|
<a class="show-ticket-info cursor">
|
<i class="os-icon os-icon-email-2-at2 mr-20" ng-if="vm.viewer.modifyPermissionCheck" ng-click="fn.sendCommonMail()" data-toggle="tooltip" data-placement="right" title="직접 작성한 메일 보내기"></i>
|
<i class="os-icon os-icon-email-forward mr-20" ng-if="vm.viewer.modifyPermissionCheck" ng-click="fn.sendMailAll()" data-toggle="tooltip" data-placement="right" title="업체 메일 보내기"></i>
|
<i class="os-icon os-icon-airplay mr-20" ng-click="fn.versionView(vm.viewer.id)" data-toggle="tooltip" data-placement="right" title="이슈 변경 이력 상세 보기"></i>
|
<!-- <i class="os-icon os-icon-calendar-time mr-20" ng-if="vm.viewer.modifyPermissionCheck"-->
|
<!-- ng-click="fn.reservation(vm.viewer.id)" data-toggle="tooltip" data-placement="right" title="이슈 발생 예약 하기"></i>-->
|
<i class="os-icon os-icon-edit-1 mr-20" ng-click="fn.modify(vm.viewer.id, vm.viewer.downTotalCount)"
|
ng-if="vm.viewer.modifyPermissionCheck" data-toggle="tooltip" data-placement="left" title="이슈 수정 하기"></i>
|
<!-- 상위 이슈가 있을때 뒤로가기 버튼 생성 -->
|
<span ng-if="vm.issueIds[0] != vm.viewer.id && vm.issueIds.length != 0 && vm.issueIds.length != 1" class="issue-close mr-10" ng-click="fn.issueBack()"><i class="os-icon os-icon-arrow-left7" data-toggle="tooltip" data-placement="left" title="이슈 뒤로 이동"></i></span>
|
<!-- 상위 이슈가 있을때 상세화면 닫기버튼 위치 조정 -->
|
<span class="issue-close" ng-click="fn.listView()"><i class="os-icon os-icon-close" data-toggle="tooltip" data-placement="left" title="상세 화면 닫기"></i></span>
|
</a>
|
</div>
|
<label class="issue-detail-label"><span translate="issue.issueType">이슈 유형</span> </label>
|
<span class="status-pill smaller"
|
ng-style="{'background-color': vm.viewer.issueTypeVo.color }"></span><span>{{vm.viewer.issueTypeVo.name}}</span>
|
<span class="offset-1"> {{vm.viewer.registerDate}}</span>
|
<label class="issue-detail-label offset-1"><span translate="common.register">등록자</span></label>
|
<span class="select3-selection__choice">
|
<span class="avatar-w"><img ng-src="{{vm.viewer.registerVo.profile}}"></span>
|
<span>{{vm.viewer.registerVo.byName}}</span>
|
</span>
|
<div class="ticket-thread">
|
<div class="todo-content">
|
<h6 class="todo-content-subheader" translate="issue.issueInfo">이슈 정보</h6>
|
<div class="row mt-20">
|
<div class="col-md-4">
|
<div class="form-group">
|
<div class="row">
|
<div class="col-xxl-12">
|
<div class="form-group">
|
<label class="issue-detail-label"><span translate="common.assigneeTeam">담당부서</span> </label>
|
<div class="">
|
<div class="select3-selection__choicediv">
|
<span class="select3-selection__choice" ng-repeat="department in vm.viewer.departmentVos">
|
<span>{{::department.byName}}</span>
|
</span>
|
|
<span ng-if="vm.viewer.departmentVos.length < 1" translate="common.noDepartment">담당부서가 없습니다.</span>
|
<i class="fa fa-edit fa-2x issue-status-edit cursor"
|
ng-if="vm.viewer.modifyPermissionCheck"
|
ng-click="fn.modifyIssueDepartment()" data-toggle="tooltip" data-placement="right" title="담당자 변경 하기"></i>
|
</div>
|
</div>
|
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-md-4">
|
<div class="form-group">
|
<div class="col-md-8">
|
<div class="form-group">
|
<label class="issue-detail-label"><span translate="common.period">기간</span></label>
|
<div class="">
|
<span translate="{{vm.viewer.startDate}}"></span> ~ <span
|
translate="{{vm.viewer.completeDate}}"></span>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
<div class="col-md-4">
|
<div class="form-group">
|
<label class="issue-detail-label"><span translate="common.importance">중요도</span></label>
|
<label class="issue-detail-label offset-detail-2"><span translate="common.priority">우선 순위</span></label>
|
<label class="issue-detail-label offset-detail-1"><span translate="issue.issueStatus">이슈 상태</span></label>
|
<div class="">
|
<span class="badge" ng-style="{'background-color' : vm.viewer.severityVo.color, 'border-color' : vm.viewer.severityVo.color, 'color' : '#FFFFFF' }" translate="{{vm.viewer.severityVo.name}}"></span>
|
|
<span class="badge offset-detail-4" ng-style="{'background-color' : vm.viewer.priorityVo.color, 'border-color' : vm.viewer.priorityVo.color, 'color' : '#FFFFFF' }" translate="{{vm.viewer.priorityVo.name}}"></span>
|
|
<!-- 권한을 갖고 있을 때 -->
|
<span ng-if="vm.viewer.modifyPermissionCheck">
|
<span class="editForm badge mr-5 offset-1" ng-style="{'background-color' : vm.viewer.issueStatusVo.color, 'border-color' : vm.viewer.issueStatusVo.color, 'color' : '#FFFFFF' }">{{vm.viewer.issueStatusVo.name}}</span><i class="fa fa-edit fa-2x issue-status-edit cursor" ng-click="fn.modifyIssueStatus()" data-toggle="tooltip" data-placement="right" title="일감 상태 변경 하기"></i>
|
</span>
|
<!-- 권한이 없을 때 -->
|
<span ng-if="!vm.viewer.modifyPermissionCheck">
|
<span class="editForm badge mr-5 offset-1" ng-style="{'background-color' : vm.viewer.issueStatusVo.color, 'border-color' : vm.viewer.issueStatusVo.color, 'color' : '#FFFFFF' }">{{vm.viewer.issueStatusVo.name}}</span>
|
</span>
|
</div>
|
</div>
|
</div>
|
</div>
|
<hr>
|
<div class="row">
|
<div class="col-md-4">
|
<div class="form-group">
|
<h6 class="info_detail_font" translate="common.detectingInfo">탐지정보</h6>
|
<span class="issue-detail-label" style="position: relative; top: 1rem" ng-show="vm.viewer.issueCustomFields == ''">사용자 정의 필드값이 없습니다.</span>
|
</div>
|
</div>
|
</div>
|
<!-- 사용자 정의 필드 -->
|
<div class="row">
|
<div class="col-md-2" ng-repeat="issueCustomField in vm.viewer.issueCustomFields">
|
<label class="issue-detail-label">{{::issueCustomField.customFieldVo.name}}</label>
|
<div ng-switch on="issueCustomField.customFieldVo.customFieldType">
|
<!-- 기본 입력 -->
|
<div ng-switch-when="INPUT">
|
<!-- 읽기 모드 -->
|
<span class="issue-detail-word-break">{{::issueCustomField.useValues}}</span>
|
<span ng-if="!$root.isDefined(issueCustomField.useValues)">-</span>
|
</div>
|
|
<div ng-switch-when="NUMBER">
|
<!-- 읽기 모드 -->
|
<span class="issue-detail-word-break">{{::issueCustomField.useValues}}</span>
|
<span ng-if="!$root.isDefined(issueCustomField.useValues)">-</span>
|
</div>
|
|
<div ng-switch-when="DATETIME">
|
<!-- 읽기 모드 -->
|
<span class="issue-detail-word-break">{{::issueCustomField.useValues}}</span>
|
<span ng-if="!$root.isDefined(issueCustomField.useValues)">-</span>
|
</div>
|
|
<div ng-switch-when="IP_ADDRESS">
|
<!-- 읽기 모드 -->
|
<span class="issue-detail-word-break">{{::issueCustomField.useValues}}</span>
|
<span ng-if="!$root.isDefined(issueCustomField.useValues)">-</span>
|
</div>
|
|
<div ng-switch-when="EMAIL">
|
<!-- 읽기 모드 -->
|
<span class="issue-detail-word-break">{{::issueCustomField.useValues}}</span>
|
<span ng-if="!$root.isDefined(issueCustomField.useValues)">-</span>
|
</div>
|
|
<div ng-switch-when="SITE">
|
<!-- 읽기 모드 -->
|
<span class="issue-detail-word-break">{{::issueCustomField.useValues}}</span>
|
<span ng-if="!$root.isDefined(issueCustomField.useValues)">-</span>
|
</div>
|
|
<div ng-switch-when="TEL">
|
<!-- 읽기 모드 -->
|
<span class="issue-detail-word-break">{{::issueCustomField.useValues}}</span>
|
<span ng-if="!$root.isDefined(issueCustomField.useValues)">-</span>
|
</div>
|
|
|
<!-- 단일 셀렉트 -->
|
<div ng-switch-when="SINGLE_SELECT">
|
<span class="issue-detail-word-break">{{::issueCustomField.useValues}}</span>
|
<span ng-if="!$root.isDefined(issueCustomField.useValues)">-</span>
|
</div>
|
|
<!-- 멀티 셀렉트 -->
|
<div ng-switch-when="MULTI_SELECT">
|
<span class="issue-detail-word-break"
|
ng-repeat="useValue in issueCustomField.useValues">{{::useValue.value}}</span>
|
<span ng-if="!$root.isDefined(issueCustomField.useValues)">-</span>
|
</div>
|
|
</div>
|
|
</div>
|
<!--이미지 미리보기-->
|
<div class="col-md-2">
|
<issue-detail-image-preview images="vm.images"></issue-detail-image-preview>
|
</div>
|
<div ng-show="vm.images.length < 1" class="detail-not-elements width-100">
|
</div>
|
</div>
|
|
|
<!-- <div class="">
|
<label class="issue-detail-label"><span>{{vm.viewer.issueCustomFieldValueVos[0].useValue}}</span> </label>
|
<div class="">
|
<span>{{vm.viewer.issueCustomFieldValueVos[0].customFieldVo.name}}</span>
|
</div>
|
<span ng-if="vm.viewer.userVos.length < 1" translate="common.noAssignee">담당자가 없습니다.</span>
|
</div>-->
|
<hr>
|
<!-- <span class="tag">{{vm.viewer.projectVo.projectKey}}-{{vm.viewer.issueNumber}} / {{vm.viewer.projectVo.name}}</span>-->
|
<div class="issue-detail-label">
|
<div ng-show="fn.containsPartner('업체')" class="row">
|
<div class="col-sm-2">
|
<div class="form-group">
|
<h6 class="info_detail_font" translate="companyField.info">업체정보</h6>
|
</div>
|
</div>
|
</div>
|
|
<div ng-show="fn.containsPartner('업체')" class="row">
|
<div class="col-sm-2">
|
<div class="form-group">
|
<span translate="companyField.companyName">업체명</span>:
|
<span>{{vm.viewer.issueCompanyVos[0].name}}</span>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<div class="">
|
<span translate="companyField.manager">담당자</span>:
|
<span>{{vm.viewer.issueCompanyVos[0].manager}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<div class="">
|
<span translate="companyField.tel">전화번호</span>:
|
<span>{{vm.viewer.issueCompanyVos[0].tel}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2" ng-if="vm.viewer.modifyPermissionCheck">
|
<div class="form-group">
|
<div class="">
|
<span translate="companyField.email">이메일</span>:
|
<span class="email_color cursor" ng-click="fn.sendMailVo(vm.viewer.issueCompanyVos)">{{vm.viewer.issueCompanyVos[0].email}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2" ng-if="!vm.viewer.modifyPermissionCheck">
|
<div class="form-group">
|
<div class="">
|
<span translate="companyField.email">이메일</span>:
|
<span>{{vm.viewer.issueCompanyVos[0].email}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<div class="">
|
<span translate="companyField.url">url</span>:
|
<span>{{vm.viewer.issueCompanyVos[0].url}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<div class="">
|
<span translate="companyField.ipRange">IP 대역대</span>:
|
<span>{{vm.viewer.issueCompanyVos[0].ipStart}} ~ {{vm.viewer.issueCompanyVos[0].ipEnd}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<div class="">
|
<span translate="companyField.memo">비고</span>:
|
<span>{{vm.viewer.issueCompanyVos[0].memo}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<div class="">
|
<span translate="companyField.companyType">기업구분</span>:
|
<span>{{vm.viewer.issueCompanyVos[0].companyTypeName}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<div class="">
|
<span translate="companyField.parentSector">업종(대분류)</span>:
|
<span>{{vm.viewer.issueCompanyVos[0].parentSectorName}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<div class="">
|
<span translate="companyField.childSector">업종(중분류)</span>:
|
<span>{{vm.viewer.issueCompanyVos[0].childSectorName}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<div class="">
|
<span translate="companyField.region">지역</span>:
|
<span>{{vm.viewer.issueCompanyVos[0].regionName}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<div class="">
|
<span translate="companyField.status">상태</span>:
|
<span>{{vm.viewer.issueCompanyVos[0].statusName}}</span>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
<div class="issue-detail-label">
|
<div ng-show="fn.containsPartner('ISP');" class="row">
|
<div class="col-sm-2">
|
<div class="form-group">
|
<h6 class="info_detail_font" translate="ispField.info">ISP정보</h6>
|
</div>
|
</div>
|
</div>
|
|
<div ng-show="fn.containsPartner('ISP');" class="row">
|
<div class="col-sm-2">
|
<div class="form-group">
|
<span translate="ispField.ispName">ISP명</span>:
|
<span>{{vm.viewer.issueIspVos[0].name}}</span>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<span translate="ispField.code">코드</span>:
|
<span>{{vm.viewer.issueIspVos[0].code}}</span>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<div class="">
|
<span translate="ispField.manager">담당자</span>:
|
<span>{{vm.viewer.issueIspVos[0].manager}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<div class="">
|
<span translate="ispField.tel">전화번호</span>:
|
<span>{{vm.viewer.issueIspVos[0].tel}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2" ng-if="vm.viewer.modifyPermissionCheck">
|
<div class="form-group">
|
<div class="">
|
<span translate="ispField.email">이메일</span>:
|
<span class="email_color cursor" ng-click="fn.sendMailVo(vm.viewer.issueIspVos)">{{vm.viewer.issueIspVos[0].email}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2" ng-if="!vm.viewer.modifyPermissionCheck">
|
<div class="form-group">
|
<div class="">
|
<span translate="ispField.email">이메일</span>:
|
<span>{{vm.viewer.issueIspVos[0].email}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<div class="">
|
<span translate="companyField.url">url</span>:
|
<span>{{vm.viewer.issueIspVos[0].url}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<div class="">
|
<span translate="ispField.memo">비고</span>:
|
<span>{{vm.viewer.issueIspVos[0].memo}}</span>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
<div class="issue-detail-label">
|
<div ng-show="fn.containsPartner('호스팅');" class="row">
|
<div class="col-sm-2">
|
<div class="form-group">
|
<h6 class="info_detail_font" translate="hostingField.info">호스팅정보</h6>
|
</div>
|
</div>
|
</div>
|
|
<div ng-show="fn.containsPartner('호스팅');" class="row">
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<span translate="hostingField.hostingName">호스팅명</span>:
|
<span>{{vm.viewer.issueHostingVos[0].name}}</span>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<span translate="hostingField.code">코드</span>:
|
<span>{{vm.viewer.issueHostingVos[0].code}}</span>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<div class="">
|
<span translate="hostingField.manager">담당자</span>:
|
<span>{{vm.viewer.issueHostingVos[0].manager}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<div class="">
|
<span translate="hostingField.tel">전화번호</span>:
|
<span>{{vm.viewer.issueHostingVos[0].tel}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2" ng-if="vm.viewer.modifyPermissionCheck">
|
<div class="form-group">
|
<div class="">
|
<span translate="hostingField.email">이메일</span>:
|
<span class="email_color cursor" ng-click="fn.sendMailVo(vm.viewer.issueHostingVos)">{{vm.viewer.issueHostingVos[0].email}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2" ng-if="!vm.viewer.modifyPermissionCheck">
|
<div class="form-group">
|
<div class="">
|
<span translate="hostingField.email">이메일</span>:
|
<span>{{vm.viewer.issueHostingVos[0].email}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<div class="">
|
<span translate="companyField.url">url</span>:
|
<span>{{vm.viewer.issueHostingVos[0].url}}</span>
|
</div>
|
</div>
|
</div>
|
|
<div class="col-sm-2">
|
<div class="form-group">
|
<div class="">
|
<span translate="hostingField.memo">비고</span>:
|
<span>{{vm.viewer.issueHostingVos[0].memo}}</span>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
|
<div class="row mt-30 align-items-end" style="justify-content: space-between;">
|
<div class="col-md-10">
|
<span class="info_detail_font h3" translate="issue.relationIssue">연관 이슈</span>
|
</div>
|
<!--<div class="col-md-1">
|
<button class="btn btn-darkgrey offset-10" ng-click="fn.addRelationIssueTableConfig()" type="button"><span translate="issue.settingTableDisplay">테이블 표시 설정</span></button>
|
</div>-->
|
<div class="col-md-3 mt-2">
|
<div class="dataTables_length">
|
<label>
|
<select name="relPageRow"
|
tabindex="-1"
|
class="form-control form-control-sm"
|
ng-change="fn.changeDetailPageRowCount()"
|
ng-model="vm.subPage.selectedRelPageRowCount">
|
<option value="10">10</option>
|
<option value="50">50</option>
|
<option value="100">100</option>
|
</select> {{vm.subPage.selectedRelPage}}-{{vm.responseData.relTotalPage}} /
|
{{vm.responseData.relTotalCount | number}}<span translate="common.few">건</span>
|
</label>
|
</div>
|
</div>
|
<div class="col-5" style="display: flex; justify-content: flex-end; align-items: center">
|
<div class="btn-group" style="padding: 5px">
|
<button aria-expanded="false" aria-haspopup="true"
|
tabindex="-1"
|
class="btn btn-secondary dropdown-toggle"
|
data-toggle="dropdown" type="button"><span translate="common.addFunction">추가기능</span>
|
</button>
|
<div aria-labelledby="dropdownMenuButton2" class="dropdown-menu left-menu"
|
x-placement="bottom-start" >
|
<!--<a class="dropdown-item cursor" form-submit="issueListForm" make-search-conditions="fn.makeSearchConditions()"> <span translate="common.allDownloadExcel">엑셀 다운로드</span></a>-->
|
<a class="dropdown-item cursor" ng-click="fn.addRelationIssueTableConfig()"> <span translate="issue.settingTableDisplay">테이블 표시 설정</span></a>
|
<a class="dropdown-item cursor" ng-click="fn.removeRelationIssue()"> <span translate="common.selectDelete">삭제</span></a>
|
</div>
|
</div>
|
</div>
|
</div>
|
|
<!-- 연관 이슈 테이블 -->
|
<div class="mt-10 issue-detail-word-break width-100">
|
<js-rel data="vm.viewer.issueRelationVos" table-configs="vm.relTableConfigs"
|
event="relTableEvent" detail-view="true" hide-header="false" use-sort="true"></js-rel>
|
|
<div class="row" ng-if="vm.viewer.modifyPermissionCheck">
|
<div class="col-sm-4">
|
<select id="relationIssueType"
|
name="relationIssueType"
|
class="form-control input-sm"
|
ng-options="option.name for option in vm.relationIssueTypes track by option.id"
|
ng-model="vm.relationIssueType"
|
required>
|
</select>
|
|
</div>
|
|
<div class="col-sm-6">
|
<js-autocomplete-single data-input-name="issue"
|
selected-model="vm.form.issues"
|
search="vm.issueName"
|
source="fn.getRelIssueList(false, null, vm.issueName, vm.issueTypeId, vm.form.issues, vm.autoCompletePage.issue.page, fn.getIssueListCallBack)"
|
page="vm.autoCompletePage.issue.page"
|
total-page="vm.autoCompletePage.issue.totalPage"
|
input-disabled="false"
|
translation-texts="{ empty : 'common.emptyIssue' }"
|
extra-settings="{ displayProp : 'title' , idProp : 'id', imageable : false, imagePathProp : '',
|
type : '', maxlength : 200, autoResize : true, stopRemoveBodyEvent : true }"></js-autocomplete-single>
|
</div>
|
<div class="col-auto vertical-middle" style="display: flex">
|
<button type="button" class="btn btn-primary"
|
ng-click="fn.addRelationIssue()"
|
translate="issue.addRelationIssue">연관 이슈 추가</button>
|
<button type="button" class="btn btn-sm btn-primary btn-roundRel offset-1"
|
ng-click="fn.addRelationIssueForm(vm.viewer.id, vm.viewer.projectVo, vm.viewer.issueTypeVo.id)">
|
<i class="os-icon os-icon-plus"><span></span></i>
|
</button>
|
</div>
|
</div>
|
<div class="controls-below-table text-center">
|
<ul uib-pagination
|
boundary-links-numbes="true"
|
items-per-page="vm.subPage.selectedRelPageRowCount"
|
total-items="vm.responseData.relTotalCount"
|
ng-model="vm.subPage.selectedRelPage"
|
max-size="10"
|
ng-click="fn.getIssueDetail(vm.subPage.selectedRelPage - 1, vm.subPage.selectedDownPage - 1)"
|
class="pagination pagination-sm"
|
previous-text="<"
|
next-text=">"
|
first-text=""
|
last-text="">
|
</ul>
|
</div>
|
</div>
|
|
<div class="row mt-30 align-items-end" style="justify-content: space-between;">
|
<div class="col-md-8">
|
<span class="info_detail_font h3" translate="issue.downIssue">하위 이슈</span>
|
</div>
|
<!--<div class="col-sm-2">
|
<a><button type="button" class="btn btn-darkgrey offset-7" ng-if="vm.viewer.modifyPermissionCheck"
|
ng-click="fn.modifyDownIssueStatus()">
|
<span ng-if="vm.viewer.modifyPermissionCheck" translate="common.updateDownIssueAllStatus">하위이슈 상태 전체 변경</span>
|
</button></a>
|
</div>
|
<div class="col-sm-1">
|
<button class="btn btn-darkgrey offset-10" ng-click="fn.addDownIssueTableConfig()" type="button"><span translate="issue.settingTableDisplay">테이블 표시 설정</span></button>
|
</div>-->
|
<div class="col-md-5 mt-2">
|
<div class="dataTables_length">
|
<label>
|
<select name="downPageRow"
|
tabindex="-1"
|
class="form-control form-control-sm"
|
ng-change="fn.changeDetailPageRowCount()"
|
ng-model="vm.subPage.selectedDownPageRowCount">
|
<option value="10">10</option>
|
<option value="50">50</option>
|
<option value="100">100</option>
|
</select> {{vm.subPage.selectedDownPage}}-{{vm.responseData.downTotalPage}} /
|
{{vm.responseData.downTotalCount | number}}<span translate="common.few">건</span>
|
</label>
|
</div>
|
</div>
|
<div class="col-5" style="display: flex; justify-content: flex-end; align-items: center">
|
<div style="display: flex; align-items: center; margin-right: 10px;">
|
<span class="issue-detail-label" style="margin-right: 4px;padding-top: 6px;"><span style="color: #0a7cf8">◆</span> 완료 이슈 숨기기</span>
|
<label class='switch'><input type='checkbox' ng-model='vm.hideCompleteIssue' ng-click="fn.getIssueDetail(0,0)">
|
<span class='slider round'></span>
|
</label>
|
</div>
|
<div class="btn-group" style="padding: 5px">
|
<button aria-expanded="false" aria-haspopup="true"
|
tabindex="-1"
|
class="btn btn-secondary dropdown-toggle"
|
data-toggle="dropdown" type="button"><span translate="common.addFunction">추가기능</span>
|
</button>
|
<div aria-labelledby="dropdownMenuButton2" class="dropdown-menu left-menu"
|
x-placement="bottom-start" >
|
<!--<a class="dropdown-item cursor" form-submit="issueListForm" make-search-conditions="fn.makeSearchConditions()"> <span translate="common.allDownloadExcel">엑셀 다운로드</span></a>-->
|
<a class="dropdown-item cursor" ng-if="vm.viewer.modifyPermissionCheck" ng-click="fn.modifyDownIssueStatus()"> <span translate="common.updateDownIssueStatus">하위이슈 상태 변경</span></a>
|
<a class="dropdown-item cursor" ng-click="fn.addDownIssueTableConfig()"> <span translate="issue.settingTableDisplay">테이블 표시 설정</span></a>
|
<a class="dropdown-item cursor" ng-click="fn.removeDownIssue()"> <span translate="common.selectDelete">삭제</span></a>
|
</div>
|
</div>
|
</div>
|
</div>
|
|
<!-- 하위 이슈 테이블 -->
|
<div class="mt-10 issue-detail-word-break width-100">
|
<js-down data="vm.viewer.issueDownVos" table-configs="vm.downTableConfigs"
|
event="downTableEvent" detail-view="true" hide-header="false" use-sort="true"></js-down>
|
|
<div class="row" ng-if="vm.viewer.modifyPermissionCheck">
|
<div class="col-sm-6">
|
<js-autocomplete-single data-input-name="issue"
|
selected-model="vm.form.issuesDown"
|
search="vm.issueNameDown"
|
source="fn.getDownIssueList(vm.issueNameDown, vm.issueTypeId, vm.viewer.parentIssueVo.id, vm.form.issuesDown, vm.autoCompletePageDown.issue.page, fn.getDownIssueListCallBack)"
|
page="vm.autoCompletePageDown.issue.page"
|
total-page="vm.autoCompletePageDown.issue.totalPage"
|
input-disabled="false"
|
translation-texts="{ empty : 'common.emptyIssue' }"
|
extra-settings="{ displayProp : 'title' , idProp : 'id', imageable : false, imagePathProp : '',
|
type : '', maxlength : 200, autoResize : true, stopRemoveBodyEvent : true }"></js-autocomplete-single>
|
</div>
|
<div class="col-auto vertical-middle" style="display: flex">
|
<button type="button" class="btn btn-primary"
|
ng-click="fn.addDownIssue()"
|
translate="issue.addDownIssue">추가</button>
|
<button type="button" class="btn btn-sm btn-primary btn-roundRel offset-1"
|
ng-click="fn.addDownIssueForm(vm.viewer.id, vm.viewer.projectVo, vm.viewer.issueTypeVo.id)">
|
<i class="os-icon os-icon-plus"><span></span></i>
|
</button>
|
</div>
|
</div>
|
<div class="controls-below-table text-center">
|
<ul uib-pagination
|
boundary-links-numbes="true"
|
items-per-page="vm.subPage.selectedDownPageRowCount"
|
total-items="vm.responseData.downTotalCount"
|
ng-model="vm.subPage.selectedDownPage"
|
max-size="10"
|
ng-click="fn.getIssueDetail(vm.subPage.selectedRelPage - 1, vm.subPage.selectedDownPage - 1)"
|
class="pagination pagination-sm"
|
previous-text="<"
|
next-text=">"
|
first-text=""
|
last-text="">
|
</ul>
|
</div>
|
</div>
|
|
<h6 class="todo-content-subheader mt-30" translate="common.content">내용</h6>
|
<div class="box mt-10 issue-detail-word-break width-100" >
|
<div class="issue-detail-tab" ng-bind-html="$root.$sce.trustAsHtml(vm.viewer.description)"></div>
|
<span class="fc-grey" ng-if="!$root.isDefined(vm.viewer.description)" translate="common.noContent">
|
내용이 없습니다.
|
</span>
|
</div>
|
|
<h6 class="todo-content-subheader mt-20" translate="common.attachFiles">파일 첨부</h6>
|
|
<!-- 첨부파일 -->
|
<div class="select2-selection__choicediv">
|
<div class="select2-selection__choice2" ng-repeat="file in vm.viewer.attachedFileVos">
|
<a href="attached/download?id={{file.id}}">
|
<div class="ssg-items ssg-items-blocks">
|
<div class="ssg-item">
|
<div class="item-icon">
|
<!-- 문서 -->
|
<i class="os-icon os-icon-file-text" ng-if="file.fileType == 'DOC'"></i>
|
<!-- 미디어 -->
|
<i class="os-icon os-icon-film" ng-if="file.fileType == 'MEDIA'"></i>
|
<!-- 이미지(업로드 전) -->
|
<i class="os-icon os-icon-documents-07"
|
ng-if="file.fileType == 'IMAGE' && !$root.isDefined(file.path)"></i>
|
<!-- 이미지(업로드 후) -->
|
<span class="attached-media-w"
|
ng-if="file.fileType == 'IMAGE' && $root.isDefined(file.path)">
|
<img ng-src="{{file.path}}">
|
</span>
|
<!-- 기타 -->
|
<i class="os-icon os-icon-ui-51" ng-if="file.fileType == 'ETC'"></i>
|
</div>
|
<div class="item-name">
|
<small>{{::file.name}}</small>
|
</div>
|
<div class="item-amount">
|
({{::file.size/1024/1024 | number:2}} MB)
|
</div>
|
</div>
|
</div>
|
</a>
|
</div>
|
|
<div ng-show="vm.viewer.attachedFileVos.length < 1" class="detail-not-elements">
|
<span translate="common.noAttachedFile">첨부된 파일이 없습니다.</span>
|
</div>
|
</div>
|
<div class="row">
|
<div class="col-sm-12">
|
<h6 class="todo-content-subheader mt-20" translate="common.writeComment">댓글 쓰기</h6>
|
<form name="commentForm" ng-enter="fn.addComment()">
|
<div class="form-group row mt-10">
|
<div class="col-sm-12">
|
<div class="input-group">
|
<input class="form-control"
|
kr-input
|
maxlength="300"
|
placeholder="{{'common.pleaseEnterComments' | translate}}"
|
ng-model="vm.viewer.comment"
|
type="text">
|
<div class="input-group-prepend">
|
<div class="input-group-text2"
|
ng-class="{ 'disable' : !$root.isDefined(vm.viewer.comment) }"
|
ng-click="fn.addComment()">
|
<i class="os-icon os-icon-mail-18"></i>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</form>
|
</div>
|
</div>
|
|
<!-- 활동 내역 -->
|
<div class="row">
|
<div class="col-sm-12">
|
<h6 class="todo-content-subheader mt-20" translate="common.activityLogs">활동 내역</h6>
|
<div class="os-tabs-w">
|
<div class="os-tabs-controls">
|
<ul class="nav nav-tabs smaller">
|
<li class="nav-item cursor">
|
<a class="nav-link" ng-class="{ 'active' : vm.activeTab == 'ALL' }"
|
ng-click="fn.updateActiveHistory()"><span
|
translate="common.fullView">전체보기</span></a>
|
</li>
|
<li class="nav-item cursor">
|
<a class="nav-link" ng-class="{ 'active' : vm.activeTab == 'MAIL_AND_REPLY' }"
|
ng-click="vm.activeTab = 'MAIL_AND_REPLY'"><span translate="common.fullMailsAndComments">전체보기(메일+댓글)</span></a>
|
</li>
|
<li class="nav-item cursor">
|
<a class="nav-link" ng-class="{ 'active' : vm.activeTab == 'RECODE' }"
|
ng-click="vm.activeTab = 'RECODE'"><span translate="common.record">기록</span></a>
|
</li>
|
<li class="nav-item cursor">
|
<a class="nav-link" ng-class="{ 'active' : vm.activeTab == 'MAIL_AND_REPLY_DOWN' }"
|
ng-click="vm.activeTab = 'MAIL_AND_REPLY_DOWN'"><span translate="common.downMailsAndComments">하위이슈(메일+댓글)</span></a>
|
</li>
|
<li class="nav-item cursor">
|
<a class="nav-link" ng-class="{ 'active' : vm.activeTab == 'RECODE_DOWN' }"
|
ng-click="vm.activeTab = 'RECODE_DOWN'"><span translate="common.recordDown">하위이슈 기록</span></a>
|
</li>
|
</ul>
|
</div>
|
|
<div class="tab-content">
|
<!-- 전체 기록 보기 -->
|
<div ng-if="vm.activeTab == 'ALL'">
|
<div class="no-cont2" ng-if="vm.viewer.activeHistory.length < 1" translate="common.noRecord">
|
기록이 없습니다.
|
</div>
|
<div class="ae-item row" ng-repeat="activeHistory in vm.viewer.activeHistory">
|
<!-- 기록인 경우 -->
|
<div class="aei-content"
|
ng-if="$root.isDefined(activeHistory.issueHistoryType)">
|
<!--<h6 ng-if="activeHistory.issueHistoryType == 'TOTAL'"
|
translate="issue.summaryIssueActivity">이슈 활동 내역 요약 <i
|
class="os-icon os-icon-arrow-down"></i></h6>-->
|
<div ng-if="!$root.isDefined(activeHistory.desc)" dom-append dom="activeHistory.description"></div>
|
<div ng-if="$root.isDefined(activeHistory.desc)" dom-append dom="activeHistory.desc"></div>
|
</div>
|
<!-- 댓글인 경우 -->
|
<div ng-if="!$root.isDefined(activeHistory.issueHistoryType)"
|
ng-show="vm.viewer.title !== activeHistory.title">
|
<span class="dot">
|
*하위이슈 : {{::activeHistory.title}}
|
</span>
|
</div>
|
<div class="aei-image" style="position: absolute; top: 30%" ng-if="!$root.isDefined(activeHistory.issueHistoryType)">
|
<div class="user-avatar-w">
|
<img ng-show="vm.viewer.title !== activeHistory.title"
|
style="margin-top: 15px" alt="image" ng-src="{{::activeHistory.profile}}">
|
<img ng-show="vm.viewer.title === activeHistory.title"
|
alt="image" ng-src="{{::activeHistory.profile}}">
|
</div>
|
</div>
|
<div class="aei-content"
|
ng-if="!$root.isDefined(activeHistory.issueHistoryType)">
|
<h6 class="aei-title mt-1 ml-3per">
|
{{::activeHistory.registerName}}
|
</h6>
|
<div class="date-break mt-2 ml-3per">
|
<span>{{::activeHistory.registerDate}}</span>
|
</div>
|
<div class="aei-delete"
|
ng-click="fn.removeComment(activeHistory)"
|
ng-show="vm.viewer.modifyPermissionCheck || $root.user.id === activeHistory.registerId">
|
<i class="os-icon os-icon-close"></i>
|
</div>
|
<div class="chat-messages">
|
<div class="message ml-3per">
|
<div class="message-content">
|
<span class="issue-detail-word-break">{{::activeHistory.description}}</span>
|
</div>
|
<!--<div class="message-content" ng-if="activeHistory.desc === null">
|
<span class="issue-detail-word-break">{{::activeHistory.desc}}</span>
|
</div>-->
|
</div>
|
|
</div>
|
</div>
|
</div>
|
</div>
|
|
<!-- 댓글 보기 -->
|
<div ng-if="vm.activeTab == 'REPLY'">
|
<div class="no-cont2" ng-if="vm.viewer.issueCommentVos.length < 1"
|
translate="common.noComments">
|
댓글이 없습니다.
|
</div>
|
<div class="ae-item" ng-repeat="comment in vm.viewer.issueCommentVos">
|
<div class="aei-image">
|
<div class="user-avatar-w">
|
<img alt="image" ng-src="{{::comment.profile}}">
|
</div>
|
</div>
|
<div class="aei-content">
|
<h6 class="aei-title">
|
{{::comment.registerName}}
|
</h6>
|
<div class="date-break">
|
<span>{{::comment.registerDate}}</span>
|
</div>
|
<div class="aei-delete"
|
ng-click="fn.removeComment(comment)"
|
ng-show="vm.viewer.modifyPermissionCheck || $root.user.id == comment.registerId">
|
<i class="os-icon os-icon-close"></i>
|
</div>
|
<div class="chat-messages">
|
<div class="message">
|
<div class="message-content">
|
<span class="issue-detail-word-break">{{::comment.description}}</span>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
|
<!-- 기록 보기 -->
|
<div ng-if="vm.activeTab == 'RECODE'">
|
<div class="no-cont2" ng-if="vm.viewer.activeParentHistory.length < 1" translate="common.noRecord">
|
기록이 없습니다.
|
</div>
|
|
<div class="ae-item" ng-repeat="issueHistory in vm.viewer.activeParentHistory">
|
<!--<h6 ng-if="issueHistory.issueHistoryType == 'TOTAL'"
|
translate="issue.summaryIssueActivity">이슈 활동 내역 요약
|
<i class="os-icon os-icon-arrow-down"></i>
|
</h6>-->
|
<div class="aei-content" ng-if="$root.isDefined(issueHistory.issueHistoryType)">
|
<div dom-append dom="issueHistory.description"></div>
|
</div>
|
<!-- 댓글인 경우 -->
|
<div class="aei-image" style="position: absolute; top: 30%" ng-if="!$root.isDefined(issueHistory.issueHistoryType)">
|
<div class="user-avatar-w">
|
<img alt="image" ng-src="{{::issueHistory.profile}}">
|
</div>
|
</div>
|
<div class="aei-content"
|
ng-if="!$root.isDefined(issueHistory.issueHistoryType)">
|
<h6 class="aei-title mt-1 ml-3per">
|
{{::issueHistory.registerName}}
|
</h6>
|
<div class="date-break mt-2 ml-3per">
|
<span>{{::issueHistory.registerDate}}</span>
|
</div>
|
<div class="aei-delete"
|
ng-click="fn.removeComment(issueHistory)"
|
ng-show="vm.viewer.modifyPermissionCheck || $root.user.id == issueHistory.registerId">
|
<i class="os-icon os-icon-close"></i>
|
</div>
|
<div class="chat-messages">
|
<div class="message ml-3per">
|
<div class="message-content">
|
<span class="issue-detail-word-break">{{::issueHistory.description}}</span>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
|
<!-- 전체(상위+하위) 메일+댓글 보기 -->
|
<div ng-if="vm.activeTab == 'MAIL_AND_REPLY'">
|
<div class="no-cont2" ng-if="vm.viewer.activeAllMailAndReplyHistory.length < 1" translate="common.noRecord">
|
기록이 없습니다.
|
</div>
|
|
<div class="ae-item row" ng-repeat="issueHistory in vm.viewer.activeAllMailAndReplyHistory">
|
<!-- 메일인 경우 -->
|
<div class="aei-content" ng-if="$root.isDefined(issueHistory.issueHistoryType)">
|
<div ng-if="!$root.isDefined(issueHistory.desc)" dom-append dom="issueHistory.description"></div>
|
<div ng-if="$root.isDefined(issueHistory.desc)" dom-append dom="issueHistory.desc"></div>
|
</div>
|
|
<!-- 댓글인 경우 -->
|
<div ng-if="!$root.isDefined(issueHistory.issueHistoryType)"
|
ng-show="vm.viewer.title !== issueHistory.title">
|
<span class="dot">
|
*하위이슈 : {{::issueHistory.title}}
|
</span>
|
</div>
|
<div class="aei-image" style="position: absolute; top: 30%" ng-if="!$root.isDefined(issueHistory.issueHistoryType)">
|
<div class="user-avatar-w">
|
<img ng-show="vm.viewer.title !== issueHistory.title"
|
style="margin-top: 15px" alt="image" ng-src="{{::issueHistory.profile}}">
|
<img ng-show="vm.viewer.title === issueHistory.title"
|
alt="image" ng-src="{{::issueHistory.profile}}">
|
</div>
|
</div>
|
|
<div class="aei-content"
|
ng-if="!$root.isDefined(issueHistory.issueHistoryType)">
|
<h6 class="aei-title mt-1 ml-3per">
|
{{::issueHistory.registerName}}
|
</h6>
|
<div class="date-break mt-2 ml-3per">
|
<span>{{::issueHistory.registerDate}}</span>
|
</div>
|
<div class="aei-delete"
|
ng-click="fn.removeComment(issueHistory)"
|
ng-show="vm.viewer.modifyPermissionCheck || $root.user.id == issueHistory.registerId">
|
<i class="os-icon os-icon-close"></i>
|
</div>
|
<div class="chat-messages">
|
<div class="message" style="margin-left: 3.3%">
|
<div class="message-content">
|
<span class="issue-detail-word-break">{{::issueHistory.description}}</span>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
|
<!-- 하위이슈 기록 보기 -->
|
<div ng-if="vm.activeTab == 'RECODE_DOWN'">
|
<div class="no-cont2" ng-if="!$root.isDefined(vm.viewer.activeDownAllHistory) || vm.viewer.activeDownAllHistory.length < 1" translate="common.noRecord">
|
기록이 없습니다.
|
</div>
|
<div class="ae-item row" ng-repeat="issueDownHistory in vm.viewer.activeDownAllHistory">
|
<!-- 기록인 경우 -->
|
<div class="aei-content" ng-if="$root.isDefined(issueDownHistory.issueHistoryType)">
|
<div dom-append dom="issueDownHistory.desc"></div>
|
</div>
|
<!-- 댓글인 경우 -->
|
<div class="aei-content pb-3" ng-if="!$root.isDefined(issueDownHistory.issueHistoryType)">
|
<div class="dot">
|
*하위이슈 : {{::issueDownHistory.title}}
|
</div>
|
</div>
|
<div class="aei-image" style="position: absolute; top: 30%" ng-if="!$root.isDefined(issueDownHistory.issueHistoryType)">
|
<div class="user-avatar-w ">
|
<img style="margin-top: 15px" alt="image" ng-src="{{::issueDownHistory.profile}}">
|
</div>
|
</div>
|
<div class="aei-content" ng-if="!$root.isDefined(issueDownHistory.issueHistoryType)">
|
<h6 class="aei-title mt-1 ml-3per">
|
{{::issueDownHistory.registerName}}
|
</h6>
|
<div class="date-break mt-2" style="margin-left: 3.3%">
|
<span>{{::issueDownHistory.registerDate}}</span>
|
</div>
|
<div class="aei-delete"
|
ng-click="fn.removeComment(issueDownHistory)"
|
ng-show="vm.viewer.modifyPermissionCheck || $root.user.id == issueDownHistory.registerId">
|
<i class="os-icon os-icon-close"></i>
|
</div>
|
<div class="chat-messages">
|
<div class="message" style="margin-left: 3.3%">
|
<div class="message-content">
|
<span class="issue-detail-word-break">{{::issueDownHistory.description}}</span>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
|
<!-- 하위이슈 메일+댓글 보기 -->
|
<div ng-if="vm.activeTab == 'MAIL_AND_REPLY_DOWN'">
|
<div class="no-cont2" ng-if="vm.viewer.activeDownMailAndReplyHistory.length < 1" translate="common.noRecord">
|
기록이 없습니다.
|
</div>
|
|
<div class="ae-item row" ng-repeat="issueHistory in vm.viewer.activeDownMailAndReplyHistory">
|
<div class="aei-content" ng-if="$root.isDefined(issueHistory.issueHistoryType)">
|
<div dom-append dom="issueHistory.desc"></div>
|
</div>
|
|
<!-- 댓글인 경우 -->
|
<div class="aei-content pb-3" ng-if="!$root.isDefined(issueHistory.issueHistoryType)">
|
<div class="dot">
|
*하위이슈 : {{::issueHistory.title}}
|
</div>
|
</div>
|
<div class="aei-image" style="position: absolute; top: 30%" ng-if="!$root.isDefined(issueHistory.issueHistoryType)">
|
<div class="user-avatar-w ">
|
<img style="margin-top: 15px" alt="image" ng-src="{{::issueHistory.profile}}">
|
</div>
|
</div>
|
<div class="aei-content" ng-if="!$root.isDefined(issueHistory.issueHistoryType)">
|
<h6 class="aei-title mt-1 ml-3per">
|
{{::issueHistory.registerName}}
|
</h6>
|
<div class="date-break mt-2" style="margin-left: 3.3%">
|
<span>{{::issueHistory.registerDate}}</span>
|
</div>
|
<div class="aei-delete"
|
ng-click="fn.removeComment(issueHistory)"
|
ng-show="vm.viewer.modifyPermissionCheck || $root.user.id == issueHistory.registerId">
|
<i class="os-icon os-icon-close"></i>
|
</div>
|
<div class="chat-messages">
|
<div class="message" style="margin-left: 3.3%">
|
<div class="message-content">
|
<span class="issue-detail-word-break">{{::issueHistory.description}}</span>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
|
<!-- 하위이슈 댓글 보기 -->
|
<div ng-if="vm.activeTab == 'REPLY_DOWN'">
|
<div class="no-cont2" ng-if="$scope.vm.viewer.downComment.length < 1"
|
translate="common.noComments">
|
댓글이 없습니다.
|
</div>
|
<div class="aei-content pb-3" ng-repeat="comment in vm.viewer.downComment">
|
<div class='dot mt-10 mb-10'>
|
*하위이슈: {{::comment.title}}
|
</div>
|
<div class="aei-image" style="position: absolute; top: 30%">
|
<div class="user-avatar-w">
|
<img style="margin-top: 15px" alt="image" ng-src="{{::comment.profile}}">
|
</div>
|
</div>
|
<div class="aei-content">
|
<h6 class="aei-title mt-1 ml-3per">
|
{{::comment.registerName}}
|
</h6>
|
<div class="date-break mt-2" style="margin-left: 3.3%">
|
<span>{{::comment.registerDate}}</span>
|
</div>
|
<div class="aei-delete"
|
ng-click="fn.removeComment(comment)"
|
ng-show="vm.viewer.modifyPermissionCheck || $root.user.id == comment.registerId">
|
<i class="os-icon os-icon-close"></i>
|
</div>
|
<div class="chat-messages">
|
<div class="message" style="margin-left: 3.3%">
|
<div class="message-content">
|
<span class="issue-detail-word-break">{{::comment.description}}</span>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|