| | |
| | | <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>상위 이슈:{{vm.viewer.parentIssueVo.title}}</span> |
| | | <span class="cursor" ng-click="fn.goParentIssue()">상위 이슈:{{vm.viewer.parentIssueVo.title}}</span> |
| | | </span> |
| | | |
| | | <div class=""> |
| | |
| | | <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> |
| | | <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-forward mr-20" ng-click="fn.sendMailAll()" data-toggle="tooltip" data-placement="right" title="다른 사용자에게 이슈 보내기"></i> |
| | | <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)" |
| | | ng-if="vm.viewer.modifyPermissionCheck && vm.viewer.issueStatusVo.issueStatusType != 'CLOSE'" data-toggle="tooltip" data-placement="left" 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> |
| | |
| | | |
| | | <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 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-1"><span translate="common.priority">우선 순위</span></label> |
| | | <label class="issue-detail-label offset-detail-2"><span translate="issue.issueStatus">이슈 상태</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-1" ng-style="{'background-color' : vm.viewer.priorityVo.color, 'border-color' : vm.viewer.priorityVo.color, 'color' : '#FFFFFF' }" translate="{{vm.viewer.priorityVo.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"> |
| | |
| | | <!-- 멀티 셀렉트 --> |
| | | <div ng-switch-when="MULTI_SELECT"> |
| | | <span class="issue-detail-word-break" |
| | | ng-repeat="useValue in issueCustomField.useValues">{{::useValue.value}}, </span> |
| | | ng-repeat="useValue in issueCustomField.useValues">{{::useValue.value}}</span> |
| | | <span ng-if="!$root.isDefined(issueCustomField.useValues)">-</span> |
| | | </div> |
| | | |
| | |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="col-sm-2"> |
| | | <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 ng-if="vm.viewer.issueCompanyVos[0].ipStart != null && vm.viewer.issueCompanyVos[0].ipStart != ''"> |
| | | {{vm.viewer.issueCompanyVos[0].ipStart}} ~ {{vm.viewer.issueCompanyVos[0].ipEnd}} |
| | | </span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <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="col-sm-2"> |
| | | <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> |
| | | </div> |
| | | |
| | | <div class="col-sm-2"> |
| | | <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-md-10"> |
| | | <span class="info_detail_font h3" translate="issue.relationIssue">연관 이슈</span> |
| | | </div> |
| | | <div class="col-md-1"> |
| | | <!--<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="btn-group" style="left: 975px; 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 class="mt-10 issue-detail-word-break width-100"> |
| | | <js-table data="vm.viewer.issueRelationVos" table-configs="vm.relTableConfigs" |
| | | event="relTableEvent" detail-view="true" hide-header="false" use-sort="false"></js-table> |
| | | <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"> |
| | | <div class="row" ng-if="vm.viewer.modifyPermissionCheck"> |
| | | <div class="col-sm-4"> |
| | | <select id="relationIssueType" |
| | | name="relationIssueType" |
| | |
| | | <js-autocomplete-single data-input-name="issue" |
| | | selected-model="vm.form.issues" |
| | | search="vm.issueName" |
| | | source="fn.getIssueList(vm.issueName, vm.issueTypeId, vm.form.issues, vm.autoCompletePage.issue.page, fn.getIssueListCallBack)" |
| | | 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" |
| | |
| | | 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 form-control input-sm" |
| | | <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"> |
| | | <i class="os-icon os-icon-plus" ng-click="fn.AddRelation(vm.viewer.id)"><span></span></i> |
| | | <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="col-md-8"> |
| | | <span class="info_detail_font h3" translate="issue.downIssue">하위 이슈</span> |
| | | </div> |
| | | <div class="col-sm-2"> |
| | | <button type="button" class="btn btn-primary form-control input-sm offset-5" ng-click="fn.modifyDownIssueStatus()" |
| | | translate="common.updateDownIssueAllStatus">하위이슈 상태 전체 변경</button> |
| | | <!--<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="btn-group" style="left: 730px; 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 class="mt-10 issue-detail-word-break width-100"> |
| | | <js-table data="vm.viewer.issueDownVos" table-configs="vm.downTableConfigs" |
| | | event="downTableEvent" detail-view="true" hide-header="false" use-sort="false"></js-table> |
| | | <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"> |
| | | |
| | | <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.form.issuesDown, vm.autoCompletePageDown.issue.page, fn.getDownIssueListCallBack)" |
| | | 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" |
| | |
| | | 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 form-control input-sm" |
| | | <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> |
| | | |
| | |
| | | <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"> |
| | |
| | | translate="common.fullView">전체보기</span></a> |
| | | </li> |
| | | <li class="nav-item cursor"> |
| | | <a class="nav-link" ng-class="{ 'active' : vm.activeTab == 'REPLY' }" |
| | | ng-click="vm.activeTab = 'REPLY'"><span translate="common.comments">댓글</span></a> |
| | | <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="ae-item" ng-repeat="activeHistory in vm.viewer.activeHistory"> |
| | | <!-- 기록인 경우 --> |
| | | <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'" |
| | | <!--<h6 ng-if="activeHistory.issueHistoryType == 'TOTAL'" |
| | | translate="issue.summaryIssueActivity">이슈 활동 내역 요약 <i |
| | | class="os-icon os-icon-arrow-down"></i></h6> |
| | | <div dom-append dom="activeHistory.description"></div> |
| | | 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 class="aei-image" ng-if="!$root.isDefined(activeHistory.issueHistoryType)"> |
| | | <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 alt="image" ng-src="{{::activeHistory.profile}}"> |
| | | <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"> |
| | | <h6 class="aei-title mt-1 ml-3per"> |
| | | {{::activeHistory.registerName}} |
| | | </h6> |
| | | <div class="date-break"> |
| | | <div class="date-break mt-2 ml-3per"> |
| | | <span>{{::activeHistory.registerDate}}</span> |
| | | </div> |
| | | <div class="aei-delete" |
| | | ng-click="fn.removeComment(comment)" |
| | | ng-show="$root.user.id == comment.registerId"> |
| | | 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"> |
| | | <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 class="aei-delete" |
| | | ng-click="fn.removeComment(comment)" |
| | | ng-show="$root.user.id == comment.registerId"> |
| | | ng-show="vm.viewer.modifyPermissionCheck || $root.user.id == comment.registerId"> |
| | | <i class="os-icon os-icon-close"></i> |
| | | </div> |
| | | <div class="chat-messages"> |
| | |
| | | <span class="issue-detail-word-break">{{::comment.description}}</span> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <form name="commentForm" ng-enter="fn.addComment()"> |
| | | <div class="form-group row "> |
| | | <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 ng-if="vm.activeTab == 'RECODE'"> |
| | | <div class="no-cont2" |
| | | ng-if="vm.viewer.issueHistoryVos.length < 1" |
| | | translate="common.noRecord"> |
| | | <div class="no-cont2" ng-if="vm.viewer.activeParentHistory.length < 1" translate="common.noRecord"> |
| | | 기록이 없습니다. |
| | | </div> |
| | | <div> |
| | | {{vm.viewer.issueHistoryVos}} |
| | | </div> |
| | | |
| | | <div class="activity-item" |
| | | ng-repeat="issueHistory in vm.viewer.issueHistoryVos"> |
| | | <h6 ng-if="issueHistory.issueHistoryType == 'TOTAL'" |
| | | <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="activity-content"> |
| | | </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> |