| | |
| | | "d": "일", |
| | | "emptyUser": "선택할 수 있는 사용자가 없습니다.", |
| | | "emptyProject": "선택할 수 있는 프로젝트가 없습니다.", |
| | | "emptyDepartment": "선택할 수 있는 부서가 없습니다.", |
| | | "emptyCompany": "선택할 수 있는 업체가 없습니다.", |
| | | "emptyIssue": "선택할 수 있는 이슈가 없습니다.", |
| | | "emptyIsp": "선택할 수 있는 ISP가 없습니다.", |
| | | "emptyHosting": "선택할 수 있는 HOSTING가 없습니다.", |
| | | "department" : "부서", |
| | | "level" : "사용자 등급", |
| | | "manageDepartment": "부서 관리", |
| | |
| | | "tel" : "전화번호", |
| | | "code" : "코드", |
| | | "email" : "이메일", |
| | | "desc" : "비고", |
| | | "memo" : "비고", |
| | | "failedToSelectCompanyFieldFullList" : "업체 관리 목록 조회 실패", |
| | | "delete" : "업체 삭제", |
| | | "wantToDeleteSelectCompanyField" : "선택한 업체를 삭제하겠습니까? 삭제된 업체는 복구할 수 없습니다.", |
| | |
| | | "tel" : "전화번호", |
| | | "code" : "코드", |
| | | "email" : "이메일", |
| | | "desc" : "비고", |
| | | "memo" : "비고", |
| | | "failedToSelectIspFieldFullList" : "ISP 관리 목록 조회 실패", |
| | | "delete" : "ISP 삭제", |
| | | "wantToDeleteSelectIspField" : "선택한 ISP를 삭제하겠습니까? 삭제된 ISP는 복구할 수 없습니다.", |
| | |
| | | "tel" : "전화번호", |
| | | "code" : "코드", |
| | | "email" : "이메일", |
| | | "desc" : "비고", |
| | | "memo" : "비고", |
| | | "failedToSelectHostingFieldFullList" : "호스팅 관리 목록 조회 실패", |
| | | "delete" : "호스팅 삭제", |
| | | "wantToDeleteSelectHostingField" : "선택한 호스팅을 삭제하겠습니까? 삭제된 호스팅은 복구할 수 없습니다.", |
| | |
| | | .setDName("email") |
| | | .setDAlign("text-center")); |
| | | $scope.vm.tableConfigs.push($tableProvider.config() |
| | | .setHName("companyField.desc") |
| | | .setHName("companyField.memo") |
| | | .setHWidth("bold") |
| | | .setDName("memo") |
| | | .setDAlign("text-center")); |
| | |
| | | .setDName("email") |
| | | .setDAlign("text-center")); |
| | | $scope.vm.tableConfigs.push($tableProvider.config() |
| | | .setHName("hostingField.desc") |
| | | .setHName("hostingField.memo") |
| | | .setHWidth("bold") |
| | | .setDName("desc") |
| | | .setDAlign("text-center")); |
| | |
| | | .setDName("email") |
| | | .setDAlign("text-center")); |
| | | $scope.vm.tableConfigs.push($tableProvider.config() |
| | | .setHName("ispField.desc") |
| | | .setHName("ispField.memo") |
| | | .setHWidth("bold") |
| | | .setDName("memo") |
| | | .setDAlign("text-center")); |
| | |
| | | $scope.fn = { |
| | | cancel : cancel, // 팝업 창 닫기 |
| | | formSubmit : formSubmit, // 폼 전송 |
| | | // formCheck : formCheck, // 폼 체크 |
| | | formCheck : formCheck, // 폼 체크 |
| | | getUserListCallBack : getUserListCallBack, // 담당자 autocomplete 페이징 |
| | | getProjectListCallBack : getProjectListCallBack, // 프로젝트 autocomplete 페이징 |
| | | getCompanyFieldListCallBack : getCompanyFieldListCallBack, // 프로젝트 autocomplete 페이징 |
| | | getCompanyFieldListCallBack : getCompanyFieldListCallBack, // 업체정보 autocomplete 페이징 |
| | | getIssueDepartmentListCallBack : getIssueDepartmentListCallBack, // 담당자 -> 담당부서 autocomplete 페이징 |
| | | getIspFieldListCallBack : getIspFieldListCallBack, // ISP정보 autocomplete 페이징 |
| | | getHostingFieldListCallBack : getHostingFieldListCallBack, // 호스팅정보 autocomplete 페이징 |
| | | getOptionColor : getOptionColor, // 우선순위, 중요도 색상으로 Select 태그 적용 |
| | | onFileSelect : onFileSelect, // 파일 첨부 |
| | | infiniteAddForm : infiniteAddForm, // 계속 생성 |
| | |
| | | removeUploadFile : removeUploadFile, // 업로드하려는 특정 파일을 삭제 |
| | | removeManager : removeManager, // 담당자 삭제 |
| | | setIssueTypeTemplate : setIssueTypeTemplate, // 이슈 유형 템플릿 적용하기 |
| | | startExecute : startExecute, // 컨트롤 로딩시 처음으로 시작되는 함수 |
| | | companyImport : companyImport |
| | | startExecute : startExecute // 컨트롤 로딩시 처음으로 시작되는 함수 |
| | | }; |
| | | |
| | | $scope.vm = { |
| | |
| | | title : "", // 제목 |
| | | description : "", // 내용 |
| | | projects : [], // 프로젝트 |
| | | companyFields : [], |
| | | companyFields : [], // 업체정보 |
| | | ispFields : [], // ISP 정보 |
| | | hostingFields : [], // 호스팅정보 |
| | | issueTypeId : "", // 이슈 유형 아이디 |
| | | priorityId : "", // 우선순위 아이디 |
| | | severityId : "", // 중요도 아이디 |
| | | users : [], // 담당자 |
| | | departments : [], // 딤당부서 |
| | | files : [], // 업로드 파일 |
| | | attachedFiles : [], // 섬머노트로 파일 업로드를 할 경우 서버에서 pk를 따고 issue id와 연동 작업이 필요하다. |
| | | startCompleteDateRange : "", // 시작일 ~ 종료일 |
| | | detectingDateRange : "", // 탐지일 |
| | | issueCustomFields : [] // 이슈에서 사용되는 사용자 정의 필드 |
| | | }, |
| | | infiniteAdd : false, // 연속 생성 |
| | | projectName : "", // 프로젝트 명 검색 |
| | | companyName : "", // 프로젝트 명 검색 |
| | | userName : "", // 사용자 검색 |
| | | companyManager : "", //담당자 |
| | | companyTel : "", //전화번호 |
| | | companyEmail : "", //이메일 |
| | | companyDesc : "", //비고 |
| | | departmentName : "", // 부서명 검색 |
| | | companyName : "", // 업체명 검색 |
| | | companyManager : "", // 업체 담당자 |
| | | companyTel : "", // 업체 전화번호 |
| | | companyEmail : "", // 업체 이메일 |
| | | companyMemo : "", // 업체 비고 |
| | | ispName : "", // ISP 명 |
| | | ispManager : "", // ISP 담당자 |
| | | ispTel : "", // ISP 전화번호 |
| | | ispEmail : "", // ISP 이메일 |
| | | ispMemo : "", // ISP 비고 |
| | | hostingName : "", // 호스팅명 검색 |
| | | hostingManager : "", // 호스팅 담당자 |
| | | hostingTel : "", // 호스팅 전화번호 |
| | | hostingEmail : "", // 호스팅 이메일 |
| | | hostingMemo : "", // 호스팅 비고 |
| | | autoCompletePage : { |
| | | user : { |
| | | page : 0, |
| | |
| | | totalPage : 0 |
| | | }, |
| | | companyField : { |
| | | page : 0, |
| | | totalPage : 0 |
| | | }, |
| | | department : { |
| | | page : 0, |
| | | totalPage : 0 |
| | | }, |
| | | ispField : { |
| | | page : 0, |
| | | totalPage : 0 |
| | | }, |
| | | hostingField : { |
| | | page : 0, |
| | | totalPage : 0 |
| | | } |
| | |
| | | }; |
| | | |
| | | angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector})); |
| | | |
| | | |
| | | function getStartProjectListCallback(result){ |
| | | // 프로젝트 autocomplete page 업데이트 |
| | |
| | | $scope.fn.getIssueTypeCustomFields(); |
| | | } |
| | | }); |
| | | |
| | | function companyImport() { |
| | | $uibModal.open({ |
| | | templateUrl : 'views/issue/issueCompanyFieldDetail.html', |
| | | size : "mg", |
| | | controller : 'issueCompanyFieldDetailController', |
| | | backdrop : 'static', |
| | | }); |
| | | } |
| | | |
| | | // 섬머노트 이미지 업로드 |
| | | function imageUpload($files) { |
| | |
| | | |
| | | // 담당자 삭제 |
| | | function removeManager(index) { |
| | | $scope.vm.form.users.splice(index, 1); |
| | | $scope.vm.form.departments.splice(index, 1); |
| | | } |
| | | |
| | | // 업로드 파일 삭제 |
| | |
| | | function getProjectListCallBack(result) { |
| | | $scope.vm.autoCompletePage.project.totalPage = result.data.page.totalPage; |
| | | } |
| | | |
| | | // 업체정보 autocomplete page 업데이트 |
| | | function getCompanyFieldListCallBack(result) { |
| | | $scope.vm.autoCompletePage.project.totalPage = result.data.page.totalPage; |
| | | $scope.vm.autoCompletePage.companyField.totalPage = result.data.page.totalPage; |
| | | } |
| | | |
| | | // 폼 체크 |
| | | // function formCheck(formInvalid) { |
| | | // if (formInvalid) { |
| | | // return true; |
| | | // } |
| | | // |
| | | // if ($scope.vm.form.projects.length < 1) { |
| | | // return true; |
| | | // } |
| | | // |
| | | // return false; |
| | | // } |
| | | function getIssueDepartmentListCallBack(result) { |
| | | $scope.vm.autoCompletePage.department.totalPage = result.data.page.totalPage; |
| | | } |
| | | |
| | | function getIspFieldListCallBack(result) { |
| | | $scope.vm.autoCompletePage.ispField.totalPage = result.data.page.totalPage; |
| | | |
| | | } |
| | | function getHostingFieldListCallBack(result) { |
| | | $scope.vm.autoCompletePage.hostingField.totalPage = result.data.page.totalPage; |
| | | |
| | | } |
| | | |
| | | // 폼 체크 |
| | | function formCheck(formInvalid) { |
| | | if (formInvalid) { |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | // 업체정보 결과 값 Event 처리(set) |
| | | $scope.$on("companyFieldEvent", function (event, result) { |
| | | $scope.vm.companyManager = result[0].manager; |
| | | $scope.vm.companyTel = result[0].tel; |
| | | $scope.vm.companyEmail = result[0].email; |
| | | $scope.vm.companyMemo = result[0].memo; |
| | | |
| | | }); |
| | | |
| | | // ISP정보 결과 값 Event 처리(set) |
| | | $scope.$on("ispFieldEvent", function (event, result) { |
| | | $scope.vm.ispManager = result[0].manager; |
| | | $scope.vm.ispTel = result[0].tel; |
| | | $scope.vm.ispEmail = result[0].email; |
| | | $scope.vm.ispMemo = result[0].memo; |
| | | }); |
| | | // 호스팅정보 결과 값 Event 처리(set) |
| | | $scope.$on("hostingFieldEvent", function (event, result) { |
| | | $scope.vm.hostingManager = result[0].manager; |
| | | $scope.vm.hostingTel = result[0].tel; |
| | | $scope.vm.hostingEmail = result[0].email; |
| | | $scope.vm.hostingMemo = result[0].memo; |
| | | }); |
| | | |
| | | |
| | | // 폼 전송 |
| | | function formSubmit() { |
| | |
| | | return attachedFileIds; |
| | | })(), |
| | | startCompleteDateRange : $scope.vm.form.startCompleteDateRange, |
| | | detectingDateRange : $scope.vm.form.detectingDateRange, |
| | | |
| | | issueCustomFields : (function () { // 이슈에서 사용되는 사용자 정의 필드 |
| | | var issueCustomFields = []; |
| | | |
| | |
| | | |
| | | // 최초 실행 |
| | | function startExecute() { |
| | | |
| | | var promises = { |
| | | getIssueTypes : $scope.fn.getIssueTypes(), |
| | | getPriorities : $scope.fn.getPriorities(), |
| | |
| | | width : "width-100-p", |
| | | position : 7, |
| | | display : false |
| | | }, { |
| | | }] |
| | | }; |
| | | |
| | |
| | | var CompanyField = $injector.get("CompanyField"); |
| | | var Issue = $injector.get("Issue"); |
| | | var UserWorkspace = $injector.get("UserWorkspace"); |
| | | var IspField = $injector.get("IspField"); |
| | | var HostingField = $injector.get("HostingField"); |
| | | var $log = $injector.get("$log"); |
| | | var SweetAlert = $injector.get("SweetAlert"); |
| | | |
| | |
| | | $scope.fn.getIssueList = getIssueList; // 일감 목록 정보를 조회한다. |
| | | $scope.fn.getWorkflowList = getWorkflowList; // 워크플로우 목록 정보를 조회한다. |
| | | $scope.fn.getUserDepartmentList = getUserDepartmentList; // 부서 목록 정보를 조회한다. |
| | | $scope.fn.getCompanyFieldList = getCompanyFieldList; // 부서 목록 정보를 조회한다. |
| | | $scope.fn.getCompanyFieldList = getCompanyFieldList; // 업체 목록 정보를 조회한다. |
| | | $scope.fn.getIssueDepartmentList = getIssueDepartmentList; // 담당자 -> 담당부서 목록 정보를 조회한다. |
| | | $scope.fn.getIspFieldList = getIspFieldList; // ISP 목록 정보를 조회한다. |
| | | $scope.fn.getHostingFieldList = getHostingFieldList; // 호스팅 목록 정보를 조회한다. |
| | | |
| | | function getUserList(query, excludeList, page, callBack) { |
| | | var conditions = { |
| | |
| | | return deferred.promise; |
| | | } |
| | | |
| | | function getCompanyFieldList(query, excludeList, page, callBack, statuses, roleTypes) { |
| | | function getIssueList(query, excludeList, page, callBack) { |
| | | var conditions = { |
| | | companyName : query, |
| | | name : query, |
| | | excludeIds : (function () { |
| | | var excludeIds = []; |
| | | |
| | |
| | | |
| | | var deferred = $q.defer(); |
| | | |
| | | |
| | | |
| | | CompanyField.find($resourceProvider.getContent( // 페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다. |
| | | Issue.find($resourceProvider.getContent( // 페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다. |
| | | conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) { |
| | | if (result.data.message.status === "success") { |
| | | |
| | | if ($rootScope.isDefined(callBack)) { |
| | | callBack(result); |
| | | } |
| | |
| | | deferred.resolve(result.data.data); |
| | | } |
| | | else { |
| | | SweetAlert.swal($filter("translate")("common.failedToProjectListLookUp"), result.data.message.message, "error"); // "프로젝트 목록 조회 실패" |
| | | SweetAlert.swal($filter("translate")("common.failedToIssueListLookUp"), result.data.message.message, "error"); // "워크플로우 목록 조회 실패" |
| | | } |
| | | }); |
| | | |
| | | return deferred.promise; |
| | | } |
| | | |
| | | |
| | | function getUserDepartmentList(query, excludeList, page, callBack) { |
| | | var conditions = { |
| | | departmentName : query, |
| | | excludeIds : (function () { //excludeIds : 제외 할 리스트 |
| | | var excludeIds = []; |
| | | angular.forEach(excludeList, function (exclude) { |
| | | excludeIds.push(exclude.id); |
| | | }); |
| | | |
| | | return excludeIds; |
| | | })() |
| | | }; |
| | | var deferred = $q.defer(); |
| | | |
| | | UserWorkspace.departmentFind($resourceProvider.getContent( // 페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다. |
| | | conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) { |
| | | if (result.data.message.status === "success") { |
| | | |
| | | if ($rootScope.isDefined(callBack)) { |
| | | callBack(result); |
| | | } |
| | | deferred.resolve(result.data.data); //사용자가 속해져있는 부서 리스트를 불러옴 |
| | | } |
| | | else { |
| | | SweetAlert.swal($filter("translate")("managementWorkspace.failedToSelectWorkspaceFullDepartmentList"), result.data.message.message, "error"); // "부서 목록 조회 실패" |
| | | } |
| | | }); |
| | | return deferred.promise; |
| | | } |
| | | |
| | |
| | | return deferred.promise; |
| | | } |
| | | |
| | | function getIssueList(query, excludeList, page, callBack) { |
| | | function getUserDepartmentList(query, excludeList, page, callBack) { |
| | | var conditions = { |
| | | name : query, |
| | | departmentName : query, |
| | | excludeIds : (function () { //excludeIds : 제외 할 리스트 |
| | | var excludeIds = []; |
| | | angular.forEach(excludeList, function (exclude) { |
| | | excludeIds.push(exclude.id); |
| | | }); |
| | | |
| | | return excludeIds; |
| | | })() |
| | | }; |
| | | var deferred = $q.defer(); |
| | | |
| | | UserWorkspace.departmentFind($resourceProvider.getContent( // 페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다. |
| | | conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) { |
| | | if (result.data.message.status === "success") { |
| | | |
| | | if ($rootScope.isDefined(callBack)) { |
| | | callBack(result); |
| | | } |
| | | deferred.resolve(result.data.data); //사용자가 속해져있는 부서 리스트를 불러옴 |
| | | } |
| | | else { |
| | | SweetAlert.swal($filter("translate")("managementWorkspace.failedToSelectWorkspaceFullDepartmentList"), result.data.message.message, "error"); // "부서 목록 조회 실패" |
| | | } |
| | | }); |
| | | return deferred.promise; |
| | | } |
| | | |
| | | function getCompanyFieldList(query, excludeList, page, callBack) { |
| | | var conditions = { |
| | | companyName : query, |
| | | excludeIds : (function () { |
| | | var excludeIds = []; |
| | | |
| | |
| | | |
| | | var deferred = $q.defer(); |
| | | |
| | | Issue.find($resourceProvider.getContent( // 페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다. |
| | | |
| | | |
| | | CompanyField.find($resourceProvider.getContent( // 페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다. |
| | | conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) { |
| | | if (result.data.message.status === "success") { |
| | | |
| | | if ($rootScope.isDefined(callBack)) { |
| | | callBack(result); |
| | | } |
| | |
| | | deferred.resolve(result.data.data); |
| | | } |
| | | else { |
| | | SweetAlert.swal($filter("translate")("common.failedToIssueListLookUp"), result.data.message.message, "error"); // "워크플로우 목록 조회 실패" |
| | | SweetAlert.swal($filter("translate")("common.failedToProjectListLookUp"), result.data.message.message, "error"); // "프로젝트 목록 조회 실패" |
| | | } |
| | | }); |
| | | |
| | | return deferred.promise; |
| | | } |
| | | |
| | | function getIssueDepartmentList(query, excludeList, page, callBack) { |
| | | var conditions = { |
| | | departmentName : query, |
| | | userId : $rootScope.user.id, |
| | | excludeIds : (function () { |
| | | var excludeIds = []; |
| | | |
| | | angular.forEach(excludeList, function (exclude) { |
| | | excludeIds.push(exclude.id); |
| | | }); |
| | | |
| | | return excludeIds; |
| | | })() |
| | | }; |
| | | |
| | | var deferred = $q.defer(); |
| | | |
| | | |
| | | |
| | | UserWorkspace.departmentFind($resourceProvider.getContent( // 페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다. |
| | | conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) { |
| | | if (result.data.message.status === "success") { |
| | | if ($rootScope.isDefined(callBack)) { |
| | | callBack(result); |
| | | } |
| | | |
| | | deferred.resolve(result.data.data); |
| | | } |
| | | else { |
| | | SweetAlert.swal($filter("translate")("common.failedToProjectListLookUp"), result.data.message.message, "error"); // "프로젝트 목록 조회 실패" |
| | | } |
| | | }); |
| | | |
| | | return deferred.promise; |
| | | } |
| | | |
| | | function getIspFieldList(query, excludeList, page, callBack) { |
| | | var conditions = { |
| | | ispName : query, |
| | | excludeIds : (function () { |
| | | var excludeIds = []; |
| | | |
| | | angular.forEach(excludeList, function (exclude) { |
| | | excludeIds.push(exclude.id); |
| | | }); |
| | | |
| | | return excludeIds; |
| | | })() |
| | | }; |
| | | |
| | | var deferred = $q.defer(); |
| | | |
| | | |
| | | |
| | | IspField.find($resourceProvider.getContent( // 페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다. |
| | | conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) { |
| | | if (result.data.message.status === "success") { |
| | | if ($rootScope.isDefined(callBack)) { |
| | | callBack(result); |
| | | } |
| | | |
| | | deferred.resolve(result.data.data); |
| | | } |
| | | else { |
| | | SweetAlert.swal($filter("translate")("common.failedToProjectListLookUp"), result.data.message.message, "error"); // "프로젝트 목록 조회 실패" |
| | | } |
| | | }); |
| | | |
| | | return deferred.promise; |
| | | } |
| | | |
| | | function getHostingFieldList(query, excludeList, page, callBack) { |
| | | var conditions = { |
| | | hostingName : query, |
| | | excludeIds : (function () { |
| | | var excludeIds = []; |
| | | |
| | | angular.forEach(excludeList, function (exclude) { |
| | | excludeIds.push(exclude.id); |
| | | }); |
| | | |
| | | return excludeIds; |
| | | })() |
| | | }; |
| | | |
| | | var deferred = $q.defer(); |
| | | |
| | | |
| | | HostingField.find($resourceProvider.getContent( // 페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다. |
| | | conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) { |
| | | if (result.data.message.status === "success") { |
| | | if ($rootScope.isDefined(callBack)) { |
| | | callBack(result); |
| | | } |
| | | |
| | | deferred.resolve(result.data.data); |
| | | } |
| | | else { |
| | | SweetAlert.swal($filter("translate")("common.failedToProjectListLookUp"), result.data.message.message, "error"); // "프로젝트 목록 조회 실패" |
| | | } |
| | | }); |
| | | |
| | |
| | | <div> |
| | | <div class="form-group"> |
| | | <label for="companyFieldAddForm8" class="issue-label"> |
| | | <span translate="companyField.desc">비고</span> |
| | | <span translate="companyField.memo">비고</span> |
| | | </label> |
| | | <input id="companyFieldAddForm8" |
| | | name="memo" |
| | |
| | | <div> |
| | | <div class="form-group"> |
| | | <label for="companyFieldModifyForm8" class="issue-label"> |
| | | <span translate="companyField.desc">비고</span> |
| | | <span translate="companyField.memo">비고</span> |
| | | </label> |
| | | <input id="companyFieldModifyForm8" |
| | | name="memo" |
| | |
| | | <div> |
| | | <div class="form-group"> |
| | | <label for="hostingFieldAddForm8" class="issue-label"> |
| | | <span translate="hostingField.desc">비고</span> |
| | | <span translate="hostingField.memo">비고</span> |
| | | </label> |
| | | <input id="hostingFieldAddForm8" |
| | | name="memo" |
| | |
| | | <div> |
| | | <div class="form-group"> |
| | | <label for="hostingFieldModifyForm8" class="issue-label"> |
| | | <span translate="hostingField.desc">비고</span> |
| | | <span translate="hostingField.memo">비고</span> |
| | | </label> |
| | | <input id="hostingFieldModifyForm8" |
| | | name="memo" |
| | |
| | | <div> |
| | | <div class="form-group"> |
| | | <label for="ispFieldAddForm8" class="issue-label"> |
| | | <span translate="ispField.desc">비고</span> |
| | | <span translate="ispField.memo">비고</span> |
| | | </label> |
| | | <input id="ispFieldAddForm8" |
| | | name="memo" |
| | |
| | | <div> |
| | | <div class="form-group"> |
| | | <label for="hostingFieldModifyForm8" class="issue-label"> |
| | | <span translate="hostingField.desc">비고</span> |
| | | <span translate="hostingField.memo">비고</span> |
| | | </label> |
| | | <input id="hostingFieldModifyForm8" |
| | | name="memo" |
| | |
| | | total-page="vm.autoCompletePage.project.totalPage" |
| | | input-disabled="false" |
| | | translation-texts="{ empty : 'common.emptyProject' }" |
| | | extra-settings="{ displayProp : 'name' , idProp : 'id', imageable : false, imagePathProp : '', |
| | | extra-settings="{ displayProp : '' , idProp : '', imageable : false, imagePathProp : '', |
| | | type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single> |
| | | </div> |
| | | </div> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | |
| | | <div class="form-group mb10"> |
| | | <label class="issue-label"><span translate="common.content">내용</span></label> |
| | | <summernote |
| | | class="summernote" |
| | | lang="ko-KR" |
| | | summer-note-auto-focus |
| | | ng-model="vm.form.description" |
| | | data-editor="vm.summerNote.editor" |
| | | data-editable="vm.summerNote.editable" |
| | | on-image-upload="fn.imageUpload(files)" |
| | | target=".note-editable"></summernote> |
| | | </div> |
| | | |
| | | <hr> |
| | | <div class="row"> |
| | | <div class="col-lg-4"> |
| | | <div class="form-group mb10"> |
| | | <label class="issue-label"> <span translate="common.assigneeTeam">담당부서</span> </label> |
| | | <js-input-autocomplete data-input-name="users" |
| | | selected-model="vm.form.users" |
| | | search="vm.userName" |
| | | page="vm.autoCompletePage.user.page" |
| | | total-page="vm.autoCompletePage.user.totalPage" |
| | | source="fn.getUserList(vm.userName, vm.form.users, vm.autoCompletePage.user.page, fn.getUserListCallBack)" |
| | | input-disabled="vm.form.projects.length == 0" |
| | | translation-texts="{ empty : 'common.emptyUser'}" |
| | | extra-settings="{ displayProp : 'byName' , idProp : 'id', imageable : true, imagePathProp : 'profile', |
| | | type : 'user', maxlength : 100, autoResize : true, stopRemoveBodyEvent : true }"></js-input-autocomplete> |
| | | <js-autocomplete-multi data-input-name="departmentㄴ" |
| | | selected-model="vm.form.departments" |
| | | search="vm.departmentName" |
| | | source="fn.getIssueDepartmentList(vm.departmentName, vm.form.departments)" |
| | | input-disabled="false" |
| | | translation-texts="{ count : 'common.userNum', empty : 'common.emptyDepartment'}" |
| | | extra-settings="{ displayProp : 'byName' , idProp : 'id', imageable : false, maxlength : 100, autoResize : true}"></js-autocomplete-multi> |
| | | |
| | | <div class="select3-selection__choicediv"> |
| | | <span class="select3-selection__choice" ng-repeat="user in vm.form.users"> |
| | | <span class="avatar-w"><img ng-src="{{user.profile}}"></span> |
| | | <span>{{user.name}}({{user.account}})</span> |
| | | <span class="select3-selection__choice__remove" |
| | | ng-click="fn.removeManager($index)">×</span> |
| | | <div class="select3-selection__choicediv mt-10"> |
| | | <span class="select3-selection__choice" ng-repeat="department in vm.form.departments"> |
| | | <span>{{department.byName}}</span> |
| | | <span class="select3-selection__choice__remove" ng-click="fn.removeManager($index)">×</span> |
| | | </span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="col-lg-4"> |
| | | <div class="form-group mb10"> |
| | | <label for="issueAddForm5" class="issue-label"> <span translate="common.period">기간</span></label> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="row"> |
| | | <div class="col-lg-4 fontcolor_green"> |
| | | <label class="issue-label"><span class="fontcolor_green" translate="common.detectingInfo">탐지정보</span></label> |
| | |
| | | readonly |
| | | class="form-control cursor" |
| | | placeholder="{{'issue.clickToSelectDate' | translate}}" |
| | | ng-model="vm.form.startCompleteDateRange" |
| | | ng-model="vm.form.detectingDateRange" |
| | | modal-form-auto-scroll |
| | | date-format="YYYY-MM-DD" |
| | | parent-el="'#createdWidget2'" |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <hr> |
| | | <div class="row"> |
| | | <div class="col-lg-4 fontcolor_green"> |
| | | <label class="issue-label"><span class="fontcolor_green" translate="companyField.info">업체정보</span></label> |
| | | <button class="btn btn-sm col-lg-6 btn-indigo" ng-click="fn.companyImport()"> |
| | | <span translate="common.import">가져오기</span> |
| | | </button> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="row"> |
| | | <div class="col-lg-4"> |
| | | <div class="form-group mb10"> |
| | | <label for="companyFieldNameAddForm" class="issue-label"> <span translate="companyField.name">업체명</span> </label> |
| | | <input id="companyFieldNameAddForm" |
| | | name="companyName" |
| | | type="text" |
| | | class="form-control" |
| | | autofocus |
| | | kr-input |
| | | input-regex="[^a-zA-Z0-9 가-힣ㄱ-ㅎㅏ-ㅣ\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" |
| | | autocomplete="off" |
| | | ng-model="vm.form.companyName" |
| | | ng-maxlength="100" |
| | | maxlength="100" |
| | | required> |
| | | <label class="issue-label"> <span translate="companyField.name">업체이름</span> </label> |
| | | <js-autocomplete-single data-input-name="companyField" |
| | | selected-model="vm.form.companyFields" |
| | | search="vm.companyName" |
| | | source="fn.getCompanyFieldList(vm.companyName, vm.form.companyFields, vm.autoCompletePage.companyField.page, fn.getCompanyFieldListCallBack)" |
| | | page="vm.autoCompletePage.companyField.page" |
| | | total-page="vm.autoCompletePage.companyField.totalPage" |
| | | input-disabled="false" |
| | | translation-texts="{ empty : 'common.emptyCompany' }" |
| | | broad-cast="companyFieldEvent" |
| | | extra-settings="{ displayProp : 'name' , idProp : 'id', imageable : false, imagePathProp : '', |
| | | type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single> |
| | | </div> |
| | | </div> |
| | | <div class="col-lg-4"> |
| | |
| | | kr-input |
| | | input-regex="[^a-zA-Z0-9 가-힣ㄱ-ㅎㅏ-ㅣ\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" |
| | | autocomplete="off" |
| | | ng-model="vm.form.companyManager" |
| | | ng-model="vm.companyManager" |
| | | ng-maxlength="100" |
| | | maxlength="100" |
| | | required> |
| | | > |
| | | </div> |
| | | </div> |
| | | <div class="col-lg-4"> |
| | |
| | | kr-input |
| | | ng-pattern="/^\d{2,3}-\d{3,4}-\d{4}$/" |
| | | autocomplete="off" |
| | | ng-model="vm.form.companyTel" |
| | | ng-model="vm.companyTel" |
| | | maxlength="20"> |
| | | <div ng-show="issueAddForm.companyTel.$error.pattern" class="help-block form-text text-danger" |
| | | translate="companyField.invalidTelFormat">전화번호 형식이 맞지 않습니다. xxx-xxx-xxxx 형식으로 입력하세요. |
| | |
| | | class="form-control" |
| | | autocomplete="off" |
| | | maxLength="50" |
| | | ng-model="vm.form.companyEmail" |
| | | ng-model="vm.companyEmail" |
| | | kr-input |
| | | ng-pattern="/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/"> |
| | | <div ng-show="issueAddForm.companyEmail.$error.pattern" class="help-block form-text text-danger" |
| | |
| | | </div> |
| | | <div class="col-lg-4"> |
| | | <div class="form-group mgb5"> |
| | | <label for="companyFieldDescAddForm" class="issue-label"><span translate="companyField.desc">비고</span></label> |
| | | <label for="companyFieldDescAddForm" class="issue-label"><span translate="companyField.memo">비고</span></label> |
| | | <input id="companyFieldDescAddForm" |
| | | name="companyDesc" |
| | | name="companyMemo" |
| | | type="text" |
| | | class="form-control" |
| | | kr-input |
| | | autocomplete="off" |
| | | ng-model="vm.form.companyDesc" |
| | | ng-maxlength="200" |
| | | ng-model="vm.companyMemo" |
| | | maxlength="200"> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="row"> |
| | | <div class="col-lg-4"> |
| | | <div class="form-group mb10"> |
| | | <label for="ispFieldNameAddForm" class="issue-label"> <span translate="ispField.name">ISP 이름</span> </label> |
| | | <input id="ispFieldNameAddForm" |
| | | name=ispName" |
| | | type="text" |
| | | class="form-control" |
| | | autofocus |
| | | kr-input |
| | | input-regex="[^a-zA-Z0-9 가-힣ㄱ-ㅎㅏ-ㅣ\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" |
| | | autocomplete="off" |
| | | ng-model="vm.form.ispName" |
| | | ng-maxlength="100" |
| | | maxlength="100" |
| | | required> |
| | | <label class="issue-label"> <span translate="ispField.name">ISP 이름</span> </label> |
| | | <js-autocomplete-single data-input-name="ispField" |
| | | selected-model="vm.form.ispFields" |
| | | search="vm.ispName" |
| | | source="fn.getIspFieldList(vm.ispName, vm.form.ispFields, vm.autoCompletePage.ispField.page, fn.getIspFieldListCallBack)" |
| | | page="vm.autoCompletePage.ispField.page" |
| | | total-page="vm.autoCompletePage.ispField.totalPage" |
| | | input-disabled="false" |
| | | translation-texts="{ empty : 'common.emptyIsp' }" |
| | | broad-cast="ispFieldEvent" |
| | | extra-settings="{ displayProp : 'name' , idProp : 'id', imageable : false, imagePathProp : '', |
| | | type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single> |
| | | </div> |
| | | </div> |
| | | <div class="col-lg-4"> |
| | |
| | | kr-input |
| | | input-regex="[^a-zA-Z0-9 가-힣ㄱ-ㅎㅏ-ㅣ\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" |
| | | autocomplete="off" |
| | | ng-model="vm.form.ispManager" |
| | | ng-model="vm.ispManager" |
| | | ng-maxlength="100" |
| | | maxlength="100"> |
| | | </div> |
| | |
| | | kr-input |
| | | ng-pattern="/^\d{2,3}-\d{3,4}-\d{4}$/" |
| | | autocomplete="off" |
| | | ng-model="vm.form.ispTel" |
| | | ng-model="vm.ispTel" |
| | | maxlength="20"> |
| | | <div ng-show="issueAddForm.ispTel.$error.pattern" class="help-block form-text text-danger" |
| | | translate="companyField.invalidTelFormat">전화번호 형식이 맞지 않습니다. xxx-xxx-xxxx 형식으로 입력하세요. |
| | |
| | | class="form-control" |
| | | autocomplete="off" |
| | | maxLength="50" |
| | | ng-model="vm.form.ispEmail" |
| | | ng-model="vm.ispEmail" |
| | | kr-input |
| | | ng-pattern="/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/"> |
| | | <div ng-show="issueAddForm.ispEmail.$error.pattern" class="help-block form-text text-danger" |
| | |
| | | </div> |
| | | <div class="col-lg-4"> |
| | | <div class="form-group mgb5"> |
| | | <label for="ispFieldDescAddForm" class="issue-label"><span translate="ispField.desc">비고</span></label> |
| | | <label for="ispFieldDescAddForm" class="issue-label"><span translate="ispField.memo">비고</span></label> |
| | | <input id="ispFieldDescAddForm" |
| | | name="ispDesc" |
| | | name="ispMemo" |
| | | type="text" |
| | | class="form-control" |
| | | kr-input |
| | | autocomplete="off" |
| | | ng-model="vm.form.ispDesc" |
| | | ng-model="vm.ispMemo" |
| | | ng-maxlength="200" |
| | | maxlength="200"> |
| | | </div> |
| | |
| | | <div class="row"> |
| | | <div class="col-lg-4"> |
| | | <div class="form-group mb10"> |
| | | <label for="hostingFieldNameAdd" class="issue-label"> <span translate="hostingField.name">호스팅 이름</span> </label> |
| | | <input id="hostingFieldNameAdd" |
| | | name="hostingName" |
| | | type="text" |
| | | class="form-control" |
| | | autofocus |
| | | kr-input |
| | | input-regex="[^a-zA-Z0-9 가-힣ㄱ-ㅎㅏ-ㅣ\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" |
| | | autocomplete="off" |
| | | ng-model="vm.form.hostingName" |
| | | ng-maxlength="100" |
| | | maxlength="100" |
| | | required> |
| | | <label class="issue-label"> <span translate="hostingField.name">호스팅 이름</span> </label> |
| | | <js-autocomplete-single data-input-name="hostingField" |
| | | selected-model="vm.form.hostingFields" |
| | | search="vm.hostingName" |
| | | source="fn.getHostingFieldList(vm.hostingName, vm.form.hostingFields, vm.autoCompletePage.hostingField.page, fn.getHostingFieldListCallBack)" |
| | | page="vm.autoCompletePage.hostingField.page" |
| | | total-page="vm.autoCompletePage.hostingField.totalPage" |
| | | input-disabled="false" |
| | | translation-texts="{ empty : 'common.emptyHosting' }" |
| | | broad-cast="hostingFieldEvent" |
| | | extra-settings="{ displayProp : 'name' , idProp : 'id', imageable : false, imagePathProp : '', |
| | | type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single> |
| | | </div> |
| | | </div> |
| | | <div class="col-lg-4"> |
| | |
| | | kr-input |
| | | input-regex="[^a-zA-Z0-9 가-힣ㄱ-ㅎㅏ-ㅣ\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" |
| | | autocomplete="off" |
| | | ng-model="vm.form.hostingManager" |
| | | ng-model="vm.hostingManager" |
| | | ng-maxlength="100" |
| | | maxlength="100"> |
| | | </div> |
| | |
| | | kr-input |
| | | ng-pattern="/^\d{2,3}-\d{3,4}-\d{4}$/" |
| | | autocomplete="off" |
| | | ng-model="vm.form.hostingTel" |
| | | ng-model="vm.hostingTel" |
| | | maxlength="20"> |
| | | <div ng-show="issueAddForm.hostingTel.$error.pattern" class="help-block form-text text-danger" |
| | | translate="companyField.invalidTelFormat">전화번호 형식이 맞지 않습니다. xxx-xxx-xxxx 형식으로 입력하세요. |
| | |
| | | class="form-control" |
| | | autocomplete="off" |
| | | maxLength="50" |
| | | ng-model="vm.form.hostingEmail" |
| | | ng-model="vm.hostingEmail" |
| | | kr-input |
| | | ng-pattern="/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/"> |
| | | <div ng-show="issueAddForm.hostingEmail.$error.pattern" class="help-block form-text text-danger" |
| | |
| | | </div> |
| | | <div class="col-lg-4"> |
| | | <div class="form-group mgb5"> |
| | | <label for="hostingFieldDescAdd" class="issue-label"><span translate="hostingField.desc">비고</span></label> |
| | | <label for="hostingFieldDescAdd" class="issue-label"><span translate="hostingField.memo">비고</span></label> |
| | | <input id="hostingFieldDescAdd" |
| | | name="hostingDesc" |
| | | name="hostingMemo" |
| | | type="text" |
| | | class="form-control" |
| | | kr-input |
| | | autocomplete="off" |
| | | ng-model="vm.form.hostingDesc" |
| | | ng-model="vm.hostingMemo" |
| | | ng-maxlength="200" |
| | | maxlength="200"> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </form> |
| | | <hr> |
| | | <div class="form-group mb10"> |
| | | <label class="issue-label"><span translate="common.content">내용</span></label> |
| | | <summernote |
| | | class="summernote" |
| | | lang="ko-KR" |
| | | summer-note-auto-focus |
| | | ng-model="vm.form.description" |
| | | data-editor="vm.summerNote.editor" |
| | | data-editable="vm.summerNote.editable" |
| | | on-image-upload="fn.imageUpload(files)" |
| | | target=".note-editable"></summernote> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | |
| | | <div class="modal-footer buttons-on-right"> |
| | | <div class="pull-left"> |
| | | <label> |
| | |
| | | <div class="col-lg-4"> |
| | | <div class="form-group mgb5"> |
| | | <label class="issue-label"> <span translate="common.assigneeTeam">담당부서</span> </label> |
| | | <js-input-autocomplete data-input-name="users" |
| | | selected-model="vm.form.users" |
| | | search="vm.userName" |
| | | page="vm.autoCompletePage.user.page" |
| | | total-page="vm.autoCompletePage.user.totalPage" |
| | | source="fn.getUserList(vm.userName, vm.form.users, vm.autoCompletePage.user.page, fn.getUserListCallBack)" |
| | | translation-texts="{ empty : 'common.emptyUser'}" |
| | | input-disabled="vm.form.projects.length == 0" |
| | | <js-input-autocomplete data-input-name="departments" |
| | | selected-model="vm.form.departments" |
| | | search="vm.departmentName" |
| | | page="vm.autoCompletePage.department.page" |
| | | total-page="vm.autoCompletePage.department.totalPage" |
| | | source="fn.getDepartmentList(vm.departmentName, vm.form.departments, vm.autoCompletePage.department.page, fn.getDepartmentListCallBack)" |
| | | input-disabled="vm.form.departments.length == 0" |
| | | translation-texts="{ empty : 'common.emptyDepartment'}" |
| | | extra-settings="{ displayProp : 'byName' , idProp : 'id', imageable : true, imagePathProp : 'profile', |
| | | type : 'user', maxlength : 100, autoResize : true, stopRemoveBodyEvent : true }"></js-input-autocomplete> |
| | | type : 'department', maxlength : 100, autoResize : true, stopRemoveBodyEvent : true }"></js-input-autocomplete> |
| | | |
| | | <small translate="common.setParticipatingInProject">프로젝트에 참여하는 사용자를 설정합니다.</small> |
| | | <div class="select3-selection__choicediv"> |
| | | <span class="select3-selection__choice" ng-repeat="user in vm.form.users"> |
| | | <span class="avatar-w"><img ng-src="{{user.profile}}"></span> |
| | | <span>{{user.name}}({{user.account}})</span> |
| | | <span class="select3-selection__choice" ng-repeat="department in vm.form.departments"> |
| | | <span class="avatar-w"></span> |
| | | <!-- <img ng-src="{{department.profile}}">--> |
| | | <span>{{department.name}}({{department.id}})</span> |
| | | <span class="select3-selection__choice__remove" |
| | | ng-click="fn.removeManager($index)">×</span> |
| | | </span> |
| | |
| | | <div class="form-group"> |
| | | <div class="form-group mgb5"> |
| | | <label class="issue-label"> <span translate="common.assigneeTeam">담당부서</span> </label> |
| | | <js-input-autocomplete data-input-name="users" |
| | | selected-model="vm.form.users" |
| | | search="vm.userName" |
| | | page="vm.autoCompletePage.user.page" |
| | | total-page="vm.autoCompletePage.user.totalPage" |
| | | source="fn.getUserList(vm.userName, vm.form.users, vm.autoCompletePage.user.page, fn.getUserListCallBack)" |
| | | translation-texts="{ empty : 'common.emptyUser'}" |
| | | input-disabled="vm.form.projects.length == 0" |
| | | <js-input-autocomplete data-input-name="departments" |
| | | selected-model="vm.form.departments" |
| | | search="vm.departmentName" |
| | | page="vm.autoCompletePage.department.page" |
| | | total-page="vm.autoCompletePage.department.totalPage" |
| | | source="fn.getDepartmentList(vm.departmentName, vm.form.departments, vm.autoCompletePage.department.page, fn.getDepartmentListCallBack)" |
| | | input-disabled="vm.form.departments.length == 0" |
| | | translation-texts="{ empty : 'common.emptyDepartment'}" |
| | | extra-settings="{ displayProp : 'byName' , idProp : 'id', imageable : true, imagePathProp : 'profile', |
| | | type : 'user', maxlength : 100, autoResize : true, stopRemoveBodyEvent : true }"></js-input-autocomplete> |
| | | type : 'department', maxlength : 100, autoResize : true, stopRemoveBodyEvent : true }"></js-input-autocomplete> |
| | | |
| | | <small translate="common.setParticipatingInProject">프로젝트에 참여하는 사용자를 설정합니다.</small> |
| | | <div class="select3-selection__choicediv"> |
| | | <span class="select3-selection__choice" ng-repeat="user in vm.form.users"> |
| | | <span class="avatar-w"><img ng-src="{{user.profile}}"></span> |
| | | <span>{{user.name}}({{user.account}})</span> |
| | | <span class="select3-selection__choice" ng-repeat="department in vm.form.departments"> |
| | | <span class="avatar-w"></span> |
| | | <!-- <img ng-src="{{department.profile}}">--> |
| | | <span>{{department.name}}({{department.id}})</span> |
| | | <span class="select3-selection__choice__remove" |
| | | ng-click="fn.removeManager($index)">×</span> |
| | | </span> |