| | |
| | | <!-- 상세 화면 --> |
| | | <div class="support-ticket-content-w" ng-controller="issueDetailController"> |
| | | <div class="support-ticket-content"> |
| | | <span class="badge" ng-style="{'background-color' : vm.viewer.severityVo.color, 'border-color' : vm.viewer.severityVo.color, 'color' : '#FFFFFF' }"> |
| | | <span ng-if="vm.viewer.parentIssueId != '' || vm.viewer.parentIssueId != 'null' ">상위 일감:{{vm.viewer.parentIssueID}}</span> |
| | | <i class="os-icon-airplay">OWL Trial</i> |
| | | <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> |
| | | <label class="issue-detail-label offset-1"><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=""> |
| | | <span class="h3-div">{{vm.viewer.title}}</span> |
| | | </div> |
| | | <div class="support-ticket-content-header issue-detail-word-break"> |
| | | <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> |
| | | |
| | | <a class="show-ticket-info cursor"> |
| | | <i class="os-icon os-icon-email-forward mr-20" ng-click="fn.sendMail(vm.viewer.id, vm.viewer.projectVo.id)" data-toggle="tooltip" data-placement="right" title="다른 사용자에게 이슈 보내기"></i> |
| | | <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-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> |
| | |
| | | <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="col-md-4"> |
| | | <div class="form-group"> |
| | | <label class="issue-detail-label"><span translate="common.importance">중요도</span></label> |
| | | <label class="issue-detail-label offset-1"><span translate="common.priority">우선 순위</span></label> |
| | | <label class="issue-detail-label offset-1"><span translate="issue.issueStatus">이슈 상태</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> |
| | | <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> |
| | | |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <hr> |
| | | <div class="row"> |
| | | <div class="col-md-4"> |
| | | <div class="form-group"> |
| | | <h6 class="info_font" translate="common.detectingInfo">탐지정보</h6> |
| | | <div class=""> |
| | | <label class="issue-detail-label"><span translate="common.diffuserURL">유포자URL</span> </label> |
| | | <label class="issue-detail-label offset-2"><span translate="common.country">국가</span></label> |
| | | <div class=""> |
| | | <span>200.11.13.123</span> |
| | | <span class="country">US</span> |
| | | </div> |
| | | <!-- <span ng-if="vm.viewer.userVos.length < 1" translate="common.noAssignee">담당자가 없습니다.</span>--> |
| | | </div> |
| | | <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="row"> |
| | | <div class="issue-detail-label"> |
| | | <div ng-show="fn.containsPartner('업체')" class="row"> |
| | | <div class="col-sm-2"> |
| | | <div class="form-group"> |
| | | <h6 class="info_font" translate="companyField.info">업체정보</h6> |
| | | <h6 class="info_detail_font" translate="companyField.info">업체정보</h6> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="row"> |
| | | <div ng-show="fn.containsPartner('업체')" class="row"> |
| | | <div class="col-sm-2"> |
| | | <div class="form-group"> |
| | | <span translate="companyField.companyName">업체명</span>: |
| | |
| | | <div class="form-group"> |
| | | <div class=""> |
| | | <span translate="companyField.email">이메일</span>: |
| | | <span class="email_color">{{vm.viewer.issueCompanyVos[0].email}}</span> |
| | | <span class="email_color cursor" ng-click="fn.sendMailVo(vm.viewer.issueCompanyVos)">{{vm.viewer.issueCompanyVos[0].email}}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="row"> |
| | | </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_font" translate="ispField.info">ISP정보</h6> |
| | | <h6 class="info_detail_font" translate="ispField.info">ISP정보</h6> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="row"> |
| | | <div ng-show="fn.containsPartner('ISP');" class="row"> |
| | | <div class="col-sm-2"> |
| | | <div class="form-group"> |
| | | <span translate="ispField.ispName">ISP명</span>: |
| | |
| | | <div class="form-group"> |
| | | <div class=""> |
| | | <span translate="ispField.email">이메일</span>: |
| | | <span class="email_color">{{vm.viewer.issueIspVos[0].email}}</span> |
| | | <span class="email_color cursor" ng-click="fn.sendMailVo(vm.viewer.issueIspVos)">{{vm.viewer.issueIspVos[0].email}}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="row"> |
| | | </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_font" translate="hostingField.info">호스팅정보</h6> |
| | | <h6 class="info_detail_font" translate="hostingField.info">호스팅정보</h6> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="row"> |
| | | <div ng-show="fn.containsPartner('호스팅');" class="row"> |
| | | |
| | | <div class="col-sm-2"> |
| | | <div class="form-group"> |
| | | <span translate="hostingField.hostingName">호스팅명</span>: |
| | |
| | | <div class="form-group"> |
| | | <div class=""> |
| | | <span translate="hostingField.email">이메일</span>: |
| | | <span class="email_color">{{vm.viewer.issueHostingVos[0].email}}</span> |
| | | <span class="email_color cursor" ng-click="fn.sendMailVo(vm.viewer.issueHostingVos)">{{vm.viewer.issueHostingVos[0].email}}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | |
| | | <div class="row"> |
| | | <div class="col-md-4" 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" class="form-group"> |
| | | <!-- 읽기 모드 --> |
| | | <span class="issue-detail-word-break">{{::issueCustomField.useValues}}</span> |
| | | <span ng-if="!$root.isDefined(issueCustomField.useValues)">-</span> |
| | | </div> |
| | | |
| | | <!-- 단일 셀렉트 --> |
| | | <div ng-switch-when="SINGLE_SELECT" class="form-group"> |
| | | <span class="issue-detail-word-break">{{::issueCustomField.useValues}}</span> |
| | | <span ng-if="!$root.isDefined(issueCustomField.useValues)">-</span> |
| | | </div> |
| | | |
| | | <!-- 멀티 셀렉트 --> |
| | | <div ng-switch-when="MULTI_SELECT" class="form-group"> |
| | | <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 class="row mt-30"> |
| | | <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-12" ng-click="fn.addRelationIssueTableConfig()" type="button"><span translate="issue.settingTableDisplay">테이블 표시 설정</span></button> |
| | | </div> |
| | | </div> |
| | | |
| | | <h6 class="todo-content-subheader mt-20" translate="issue.relationIssue">연관 일감</h6> |
| | | <!-- 테이블 --> |
| | | <!-- 연관 이슈 테이블 --> |
| | | <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-autocomplete-single data-input-name="issue" |
| | | selected-model="vm.form.issues" |
| | | search="vm.issueName" |
| | | source="fn.getIssueList(vm.issueName, vm.form.issues, vm.autoCompletePage.issue.page, fn.getIssueListCallBack)" |
| | | source="fn.getIssueList(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" |
| | |
| | | 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"> |
| | | <div class="col-auto vertical-middle" style="display: flex"> |
| | | <button type="button" class="btn btn-primary form-control input-sm" |
| | | ng-click="fn.addRelationIssue()" |
| | | translate="issue.addRelationIssue">추가</button> |
| | | 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> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | |
| | | <h6 class="todo-content-subheader mt-20" translate="issue.downIssue">하위 일감</h6> |
| | | <!-- 테이블 --> |
| | | <div class="row mt-30"> |
| | | <div class="col-md-10"> |
| | | <span class="info_detail_font h3" translate="issue.downIssue">하위 이슈</span> |
| | | </div> |
| | | <div class="col-md-1"> |
| | | <button class="btn btn-darkgrey offset-12" ng-click="fn.addDownIssueTableConfig()" type="button"><span translate="issue.settingTableDisplay">테이블 표시 설정</span></button> |
| | | </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> |
| | | |
| | | <div class="row"> |
| | | |
| | | <div class="col-sm-6"> |
| | | <js-autocomplete-single data-input-name="issue" |
| | | selected-model="vm.form.issuesDown" |
| | | search="vm.issueNameDown" |
| | | source="fn.getIssueList(vm.issueNameDown, vm.form.issuesDown, vm.autoCompletePageDown.issue.page, fn.getIssueListCallBack)" |
| | | source="fn.getIssueList(vm.issueNameDown, vm.issueTypeId, vm.form.issuesDown, vm.autoCompletePageDown.issue.page, fn.getIssueListCallBack)" |
| | | page="vm.autoCompletePageDown.issue.page" |
| | | total-page="vm.autoCompletePageDown.issue.totalPage" |
| | | input-disabled="false" |
| | |
| | | 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"> |
| | | <div class="col-auto vertical-middle" style="display: flex"> |
| | | <button type="button" class="btn btn-primary form-control input-sm" |
| | | ng-click="fn.addDownIssue()" |
| | | translate="issue.addDownIssue">추가</button> |
| | |
| | | </div> |
| | | </div> |
| | | |
| | | <h6 class="todo-content-subheader mt-20" translate="common.content">내용</h6> |
| | | <h6 class="todo-content-subheader mt-30" translate="common.content">내용</h6> |
| | | <div class="box mt-10 issue-detail-word-break width-100" > |
| | | <div ng-bind-html="$root.$sce.trustAsHtml(vm.viewer.description)"></div> |
| | | <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 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"><span translate="issue.previewImage">이미지 미리 보기</span> |
| | | </h6> |
| | | <div class="pdt10"> |
| | | <issue-detail-image-preview images="vm.images"></issue-detail-image-preview> |
| | | </div> |
| | | </div> |
| | | <div ng-show="vm.images.length < 1" class="detail-not-elements width-100"> |
| | | <span translate="common.noImage">첨부된 이미지가 없습니다.</span> |
| | | </div> |
| | | |
| | | </div> |
| | | |
| | | <!-- 활동 내역 --> |
| | |
| | | translate="common.noRecord"> |
| | | 기록이 없습니다. |
| | | </div> |
| | | <div> |
| | | {{vm.viewer.issueHistoryVos}} |
| | | </div> |
| | | |
| | | <div class="activity-item" |
| | | ng-repeat="issueHistory in vm.viewer.issueHistoryVos"> |