From 9e1224315ff031c5cfccda6ccb0d7841729d8612 Mon Sep 17 00:00:00 2001 From: 이민희 <mhlee@maprex.co.kr> Date: 월, 15 11월 2021 17:21:52 +0900 Subject: [PATCH] Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa --- src/main/webapp/scripts/app/issueType/issueTypeList.controller.js | 2 src/main/webapp/views/issueType/issueTypeAdd.html | 21 src/main/webapp/views/issue/issueAdd.html | 383 ++++++++++++++++++++--- src/main/webapp/scripts/app/issue/issueManager.controller.js | 16 + src/main/webapp/scripts/app/common/common.controller.js | 59 +++ src/main/webapp/scripts/app/issue/issueCompanyFieldDetail.controller.js | 85 +++++ src/main/resources/system_dev.properties | 2 src/main/java/kr/wisestone/owl/domain/IssueType.java | 13 src/main/webapp/views/issue/issueModifyUser.html | 2 src/main/java/kr/wisestone/owl/vo/IssueTypeVo.java | 11 src/main/webapp/scripts/app/issueType/issueTypeAdd.controller.js | 24 + src/main/resources/migration/V1_11__Alter_Table.sql | 3 src/main/webapp/views/issue/issueCompanyFieldDetail.html | 37 ++ src/main/webapp/views/issue/issueModify.html | 2 src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java | 27 + src/main/webapp/views/common/sidebar.html | 37 - src/main/webapp/views/issue/issueListTimeline.html | 2 src/main/webapp/views/issueType/issueTypeModify.html | 29 + src/main/resources/mybatis/query-template/issueType-template.xml | 3 src/main/webapp/scripts/app/issueType/issueTypeModify.controller.js | 28 + src/main/webapp/views/issue/issueListNormal.html | 2 src/main/webapp/views/issue/issueList.html | 9 src/main/java/kr/wisestone/owl/web/form/IssueTypeForm.java | 9 src/main/webapp/assets/styles/main.css | 32 + src/main/webapp/scripts/components/utils/autoComplete.controller.js | 40 ++ src/main/webapp/scripts/config.js | 8 src/main/java/kr/wisestone/owl/web/condition/IssueTypeCondition.java | 9 src/main/webapp/scripts/app/issue/issueList.controller.js | 17 src/main/webapp/i18n/ko/global.json | 13 src/main/webapp/views/issue/issueDetail.html | 2 src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js | 7 31 files changed, 820 insertions(+), 114 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/domain/IssueType.java b/src/main/java/kr/wisestone/owl/domain/IssueType.java index ac7f750..7c64998 100644 --- a/src/main/java/kr/wisestone/owl/domain/IssueType.java +++ b/src/main/java/kr/wisestone/owl/domain/IssueType.java @@ -27,8 +27,13 @@ @JoinColumn(name = "workflow_id") private Workflow workflow; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "project_id") + private Project project; + @OneToMany(mappedBy = "issueType", cascade = { CascadeType.ALL }, orphanRemoval = true) private Set<IssueTypeCustomField> issueTypeCustomFields = new HashSet<>(); + public IssueType(){} @@ -95,4 +100,12 @@ public void setIssueTypeCustomFields(Set<IssueTypeCustomField> issueTypeCustomFields) { this.issueTypeCustomFields = issueTypeCustomFields; } + + public Project getProject() { + return project; + } + + public void setProject(Project project) { + this.project = project; + } } diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java index c32c1ee..2b81ab9 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java @@ -43,6 +43,9 @@ private WorkflowService workflowService; @Autowired + private ProjectService projectService; + + @Autowired private WorkspaceService workspaceService; @Autowired @@ -108,6 +111,8 @@ issueType.setWorkspace(workspace); Workflow workflow = this.workflowService.getWorkflow(issueTypeForm.getWorkflowId()); issueType.setWorkflow(workflow); + Project project = this.projectService.getProject(issueTypeForm.getProjectId()); + issueType.setProject(project); return this.issueTypeRepository.saveAndFlush(issueType); } @@ -166,6 +171,8 @@ this.setUseIssueTypeByWorkflow(issueTypeVos); } + this.setUseIssueTypeByProject(issueTypeVos); + resJsonData.put(Constants.REQ_KEY_PAGE_VO, new ResPage(pageable.getPageNumber(), pageable.getPageSize(), totalPage, totalCount)); @@ -179,6 +186,18 @@ for (IssueTypeVo issueTypeVo : issueTypeVos) { IssueType issueType = this.getIssueType(issueTypeVo.getId()); issueTypeVo.setWorkflowVo(ConvertUtil.copyProperties(issueType.getWorkflow(), WorkflowVo.class)); + } + } + + // �씠�뒋 �쑀�삎�뿉 �뿰寃곕맂 �봽濡쒖젥�듃 �젙蹂대�� �뀑�똿�븳�떎. + private void setUseIssueTypeByProject(List<IssueTypeVo> issueTypeVos) { + for (IssueTypeVo issueTypeVo : issueTypeVos) { + IssueType issueType = this.getIssueType(issueTypeVo.getId()); + + Project project = issueType.getProject(); + if (project != null) { + issueTypeVo.setProjectVo(ConvertUtil.copyProperties(issueType.getProject(), ProjectVo.class)); + } } } @@ -196,6 +215,11 @@ case "01": // �썙�겕�뵆濡쒖슦 �젙蹂대�� 媛��졇�삩�떎. issueTypeVo.setWorkflowVo(ConvertUtil.copyProperties(issueType.getWorkflow(), WorkflowVo.class)); break; + } + + Project project = issueType.getProject(); + if (project != null) { + issueTypeVo.setProjectVo(ConvertUtil.copyProperties(issueType.getProject(), ProjectVo.class)); } } @@ -222,6 +246,9 @@ ConvertUtil.copyProperties(issueTypeForm, issueType, "id", "issueTypeType"); issueType.setWorkflow(workflow); + Project project = this.projectService.getProject(issueTypeForm.getProjectId()); + issueType.setProject(project); + this.issueTypeRepository.saveAndFlush(issueType); return issueType; diff --git a/src/main/java/kr/wisestone/owl/vo/IssueTypeVo.java b/src/main/java/kr/wisestone/owl/vo/IssueTypeVo.java index 58e173f..d0581b6 100644 --- a/src/main/java/kr/wisestone/owl/vo/IssueTypeVo.java +++ b/src/main/java/kr/wisestone/owl/vo/IssueTypeVo.java @@ -1,5 +1,7 @@ package kr.wisestone.owl.vo; +import kr.wisestone.owl.domain.Project; + /** * Created by wisestone on 2018-05-29. */ @@ -9,6 +11,7 @@ private String description; private String color; private WorkflowVo workflowVo; + private ProjectVo projectVo; private Boolean modifyPermissionCheck = Boolean.TRUE; // �씠�뒋 �쑀�삎�� 紐⑤뱺 �궗�엺�뱾�씠 �닔�젙, �궘�젣�븷 �닔 �엳�뼱�꽌 湲곕낯 媛믪씠 True public IssueTypeVo(){} @@ -60,4 +63,12 @@ public void setModifyPermissionCheck(Boolean modifyPermissionCheck) { this.modifyPermissionCheck = modifyPermissionCheck; } + + public ProjectVo getProjectVo() { + return projectVo; + } + + public void setProjectVo(ProjectVo projectVo) { + this.projectVo = projectVo; + } } diff --git a/src/main/java/kr/wisestone/owl/web/condition/IssueTypeCondition.java b/src/main/java/kr/wisestone/owl/web/condition/IssueTypeCondition.java index 7de6096..d5e9b9d 100644 --- a/src/main/java/kr/wisestone/owl/web/condition/IssueTypeCondition.java +++ b/src/main/java/kr/wisestone/owl/web/condition/IssueTypeCondition.java @@ -13,6 +13,7 @@ private Integer page; private Integer pageSize; private Long workspaceId; + private Long projectId; private String deep; // �긽�꽭 議고쉶�뿉�꽌 媛��졇�삱 �뜲�씠�꽣�쓽 醫낅쪟瑜� 寃곗젙�븳�떎. public IssueTypeCondition(){} @@ -69,4 +70,12 @@ public void setDeep(String deep) { this.deep = deep; } + + public Long getProjectId() { + return projectId; + } + + public void setProjectId(Long projectId) { + this.projectId = projectId; + } } diff --git a/src/main/java/kr/wisestone/owl/web/form/IssueTypeForm.java b/src/main/java/kr/wisestone/owl/web/form/IssueTypeForm.java index 5d30cc0..f180c0f 100644 --- a/src/main/java/kr/wisestone/owl/web/form/IssueTypeForm.java +++ b/src/main/java/kr/wisestone/owl/web/form/IssueTypeForm.java @@ -16,6 +16,7 @@ private String description; private String color; private Long workflowId; + private Long projectId; private List<Long> removeIds = Lists.newArrayList(); public IssueTypeForm(){} @@ -81,4 +82,12 @@ public void addRemoveIds(Long removeId) { this.removeIds.add(removeId); } + + public Long getProjectId() { + return projectId; + } + + public void setProjectId(Long projectId) { + this.projectId = projectId; + } } diff --git a/src/main/resources/migration/V1_11__Alter_Table.sql b/src/main/resources/migration/V1_11__Alter_Table.sql index e8b5010..dd41b81 100644 --- a/src/main/resources/migration/V1_11__Alter_Table.sql +++ b/src/main/resources/migration/V1_11__Alter_Table.sql @@ -124,3 +124,6 @@ INDEX `issueTypeIdIndex` (`issue_type_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +-- �씠�뒋 ���엯 �봽濡쒖젥�듃 +ALTER TABLE `issue_type` ADD COLUMN `project_id` BIGINT(11) NULL; + diff --git a/src/main/resources/mybatis/query-template/issueType-template.xml b/src/main/resources/mybatis/query-template/issueType-template.xml index 8beb810..cdc7a7e 100644 --- a/src/main/resources/mybatis/query-template/issueType-template.xml +++ b/src/main/resources/mybatis/query-template/issueType-template.xml @@ -16,6 +16,9 @@ <if test="name != '' and name != null"> AND it.name like CONCAT('%',#{name},'%') </if> + <if test="projectId != '' and projectId != null"> + AND it.project_id like CONCAT('%',#{projectId},'%') + </if> AND ws.id = #{workspaceId} <if test="page != null and !page.equals('')"> limit #{pageSize} offset #{page}; diff --git a/src/main/resources/system_dev.properties b/src/main/resources/system_dev.properties index 6cc07e1..35ad9ac 100644 --- a/src/main/resources/system_dev.properties +++ b/src/main/resources/system_dev.properties @@ -39,7 +39,7 @@ mail.password= # email \uC124\uC815 -email.host=mail.g2works.kr +email.host=mail.g2works.kra email.port=587 email.userName=wyu@maprex.co.kr email.password=1234 diff --git a/src/main/webapp/assets/styles/main.css b/src/main/webapp/assets/styles/main.css index 7a8dce6..198571c 100644 --- a/src/main/webapp/assets/styles/main.css +++ b/src/main/webapp/assets/styles/main.css @@ -3132,6 +3132,29 @@ border-color: #292b2c; } +.btn-indigo { + color: #fff; + background-color: #1973EB; + border-color: #1973EB; +} + +.btn-indigo:hover { + color: #fff; + background-color: #0f0165; + border-color: #0f0165; +} + +.btn-indigo:focus, .btn-secondary.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(41, 43, 44, 0.5); + box-shadow: 0 0 0 0.2rem rgba(41, 43, 44, 0.5); +} + +.btn-indigo.disabled, .btn-secondary:disabled { + color: #fff; + background-color: #292b2c; + border-color: #292b2c; +} + .btn-success { color: #fff; background-color: #5eb314; @@ -28580,7 +28603,6 @@ .tab .tablabel::after { display: inline-block; color: #4d8bf5; - background-color:; width: 30px; font-size: 0.80rem; line-height: 40px; @@ -30173,4 +30195,12 @@ width: 100% } +.fontcolor_green { + color: #6C9266; + font-size: 15px; +} +.fontcolor_neon_green { + color: #282c34; + font-size: 15px; +} /* 媛꾪듃李⑦듃 end */ diff --git a/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js b/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js index cd59e36..960fd55 100644 --- a/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js +++ b/src/main/webapp/custom_components/js-table/tableColumnGenerator.directive.js @@ -81,6 +81,13 @@ } break; + // �봽濡쒖젥�듃 �씠由�(�봽濡쒖젥�듃 由ъ뒪�듃�뿉�꽌 �궗�슜) + case "PROJECT_BASIC_NAME" : + if (scope.data.projectVo != null) { + makeTag += "<span class='titlenameSelect'>" + myToken + scope.data.projectVo.name.replace(/</gi, '<') + "</span>"; + } + break; + // �봽濡쒖젥�듃 紐⑸줉�뿉�꽌 �궗�슜�옄 �젙�쓽 �븘�뱶 �꽕�젙 �몴�떆 case "CUSTOM_FIELD_CONFIG" : // 愿�由ъ옄留� �닔�젙�븷 �닔 �엳�떎. diff --git a/src/main/webapp/i18n/ko/global.json b/src/main/webapp/i18n/ko/global.json index 05bd9b9..7f4d968 100644 --- a/src/main/webapp/i18n/ko/global.json +++ b/src/main/webapp/i18n/ko/global.json @@ -291,7 +291,9 @@ "relationIssueType6" : "�떎�쓬 �씠�뒋瑜� �슦�꽑 吏꾪뻾", "updateIssueUser" : "�씠�뒋 �떞�떦�옄 蹂�寃�", "normalList" : "�씠�뒋 紐⑸줉", - "timeLine" : "���엫 �씪�씤" + "timeLine" : "���엫 �씪�씤", + "useProjects" : "�궗�슜 �봽濡쒖젥�듃", + "companyInfo" : "�뾽泥�/ISP/�샇�뒪�똿" }, "project": { "createProject": "�봽濡쒖젥�듃 留뚮뱾湲�", @@ -765,7 +767,10 @@ "departmentName": "遺��꽌紐�", "departmentEx": "遺��꽌�꽕紐�", "departmentCount": "遺��꽌�씤�썝", - "departmentUser": "遺��꽌 ���썝" + "departmentUser": "遺��꽌 ���썝", + "detectingInfo": "�깘吏��젙蹂�", + "detectingData": "�깘吏��씪�떆", + "import": "媛��졇�삤湲�" }, "tasks": { "agileBoardTitle": "移몃컲 蹂대뱶" @@ -796,12 +801,14 @@ "successToApiTokenAdd" : "API �넗�겙 �깮�꽦 �꽦怨�" }, "companyField" : { + "info": "�뾽泥� �젙蹂�", "add" : "�뾽泥� �깮�꽦", "name" : "�뾽泥� �씠由�", "company" : "�뾽泥� 遺꾨쪟", "profitYN" : "�쁺由�/鍮꾩쁺由�", "industry" : "�궛�뾽 遺꾨쪟", "domain" : "�룄硫붿씤", + "ipAdress" : "ip二쇱냼", "manager" : "�떞�떦�옄", "tel" : "�쟾�솕踰덊샇", "code" : "肄붾뱶", @@ -817,6 +824,7 @@ "invalidTelFormat": "�쟾�솕踰덊샇 �삎�떇�씠 留욎� �븡�뒿�땲�떎. xxx-xxx-xxxx �삎�떇�쑝濡� �엯�젰�븯�꽭�슂." }, "ispField" : { + "info": "ISP �젙蹂�", "add" : "ISP �깮�꽦", "name" : "ISP �씠由�", "manager" : "�떞�떦�옄", @@ -834,6 +842,7 @@ "invalidCodeFormat": "肄붾뱶紐낆뿉�뒗 �듅�닔 臾몄옄瑜� �엯�젰 �븷 �닔 �뾾�뒿�땲�떎." }, "hostingField" : { + "info": "�샇�뒪�똿 �젙蹂�", "add" : "�샇�뒪�똿 �깮�꽦", "name" : "�샇�뒪�똿 �씠由�", "manager" : "�떞�떦�옄", diff --git a/src/main/webapp/scripts/app/common/common.controller.js b/src/main/webapp/scripts/app/common/common.controller.js index 9f28f65..ca13508 100644 --- a/src/main/webapp/scripts/app/common/common.controller.js +++ b/src/main/webapp/scripts/app/common/common.controller.js @@ -6,8 +6,8 @@ function (app, angular) { app.controller('commonController', ['$scope', '$rootScope', '$log', 'Auth', '$state', 'User', '$resourceProvider', '$uibModal', 'SweetAlert', 'Workspace', '$translate', '$q', - '$interval', 'IssueSearch', '$filter', 'Notice', 'Project', - function ($scope, $rootScope, $log, Auth, $state, User, $resourceProvider, $uibModal, SweetAlert, Workspace, $translate, $q, $interval, IssueSearch, $filter, Notice, Project) { + '$interval', 'IssueSearch', '$filter', 'Notice', 'Project', 'IssueType', + function ($scope, $rootScope, $log, Auth, $state, User, $resourceProvider, $uibModal, SweetAlert, Workspace, $translate, $q, $interval, IssueSearch, $filter, Notice, Project, IssueType) { $scope.fn = { logout: logout, // 濡쒓렇�븘�썐 @@ -20,7 +20,9 @@ makeIssueSearch: makeIssueSearch, // �씠�뒋 踰덊샇瑜� ���옣�븳 �썑 �씠�뒋 紐⑸줉�쑝濡� �씠�룞�븳�떎. disconnectSocket: disconnectSocket, // �쎒 �냼耳� �뿰寃� �빐�젣 sendMessage: sendMessage, - moveMenu : moveMenu + moveMenu : moveMenu, + findIssueList : findIssueList, // �궗�씠�뱶諛� �씠�뒋 紐⑸줉 媛��졇�삤湲� + changeIssueListMenu : changeIssueListMenu }; $scope.vm = { @@ -40,6 +42,22 @@ findAllWorkproject(); }); + function changeIssueListMenu(issueTypeId) { + $rootScope.issueTypeMenu = null; + for (var issueType of $rootScope.workIssueTypes) { + if (issueType.id === issueTypeId) { + $rootScope.issueTypeMenu = issueType; + break; + } + } + + if ($rootScope.issueTypeMenu != null) { + moveMenu("issues.list"); + } + + $rootScope.$broadcast("changeIssueListMenu", $rootScope.issueTypeMenu); + } + function moveMenu(stateName) { if ($state.current.name == stateName) { $state.reload(); @@ -50,7 +68,6 @@ // 硫붿꽭吏� 諛쒖넚 function sendMessage() { - var content = { description : $scope.vm.message, userIds : [1] @@ -128,6 +145,9 @@ if ($rootScope.user.lastProjectId === project.id) { $rootScope.workProject = project; } + + var id = $rootScope.workProject.id === -1 ? null : $rootScope.workProject.id; + $scope.fn.findIssueList(id); } $rootScope.projects = datas; } @@ -180,6 +200,37 @@ }); } + + // �쁽�옱 �봽濡쒖젥�듃 蹂�寃쎌떆 + $scope.$on("changeLastProject", function (event, args) { + findIssueList(args.id); + }); + + // �씠�뒋 �쑀�삎 紐⑸줉 媛��졇�삤湲� + function findIssueList(projectId) { + // �씠�뒋 ���엯 紐⑸줉 寃��깋 議곌굔�쓣 留뚮뱺�떎. + var conditions = { + projectId : projectId > -1 ? projectId : null, + deep : "01" // �씠�뒋 �쑀�삎�뿉 �뿰寃곕맂 �썙�겕�뵆濡쒖슦 �젙蹂대�� 李얜뒗�떎. + } + + IssueType.find($resourceProvider.getContent(conditions, + $resourceProvider.getPageContent(0, 100))).then(function (result) { + + if (result.data.message.status === "success") { + $rootScope.workIssueTypes = result.data.data; + if ($rootScope.workIssueTypes != null) { + changeIssueListMenu($rootScope.workIssueTypes[0].id); + } + } + else { + SweetAlert.error($filter("translate")("managementType.failedToIssueTypeList"), result.data.message.message); // "�씠�뒋 �쑀�삎 紐⑸줉 議고쉶 �떎�뙣" + } + }); + } + + + // �봽濡쒖젥�듃 蹂�寃� function changeLastProject(projectId) { $rootScope.changeLastProject(projectId); diff --git a/src/main/webapp/scripts/app/issue/issueCompanyFieldDetail.controller.js b/src/main/webapp/scripts/app/issue/issueCompanyFieldDetail.controller.js new file mode 100644 index 0000000..bca5967 --- /dev/null +++ b/src/main/webapp/scripts/app/issue/issueCompanyFieldDetail.controller.js @@ -0,0 +1,85 @@ +/** + * Created by wisestone on 2018-02-19. + */ +'use strict'; + +define([ + 'app' + ], + function (app) { + app.controller('companyFieldAddController', ['$scope', '$rootScope', '$log', '$resourceProvider', 'SweetAlert', '$uibModal', '$uibModalInstance', '$state', 'CompanyField', '$filter', + function ($scope, $rootScope, $log, $resourceProvider, SweetAlert, $uibModal, $uibModalInstance, $state, CompanyField, $filter) { + + $scope.fn = { + cancel : cancel, // �뙘�뾽 李� �떕湲� + formSubmit : formSubmit, // �뤌 �쟾�넚 + formCheck : formCheck, // �뤌 泥댄겕 + }; + + $scope.vm = { + form : { + name : "", //�뾽泥대챸 + //companyType : "", //�뾽泥대텇瑜� + //profitYN : "", //�쁺由�/鍮꾩쁺由� + //industry : "", //�궛�뾽遺꾨쪟 + //domain : "", //�룄硫붿씤 + manager : "", //�떞�떦�옄 + tel : "", //�쟾�솕踰덊샇 + email : "", //�씠硫붿씪 + memo : "" //鍮꾧퀬 + } + }; + + // �뤌 泥댄겕 + function formCheck(formInvalid) { + if (formInvalid) { + return true; + } + return false; + } + + // �뤌 �쟾�넚 + function formSubmit(condition) { + $rootScope.spinner = true; + + var content = { + name : $rootScope.preventXss($scope.vm.form.name), // �뾽泥대챸 + //companyType : $scope.vm.form.companyType, //�뾽泥대텇瑜� + //profitYN : $scope.vm.form.profitYN, //�쁺由�/鍮꾩쁺由� + //industry : $scope.vm.form.industry, //�궛�뾽遺꾨쪟 + //domain : $scope.vm.form.domain, //�룄硫붿씤 + manager : $scope.vm.form.manager, //�떞�떦�옄 + tel : $scope.vm.form.tel, //�쟾�솕踰덊샇 + email : $scope.vm.form.email, //�씠硫붿씪 + memo : $scope.vm.form.memo //鍮꾧퀬 + }; + + CompanyField.add($resourceProvider.getContent(content, + $resourceProvider.getPageContent(0, 10))).then(function (result) { + + if (result.data.message.status === "success") { + $scope.fn.cancel(); + // 紐⑸줉 �솕硫� 媛깆떊 + $rootScope.$broadcast("getPageList", {}); + } + else { + SweetAlert.error($filter("translate")("companyField.failedCompanyFieldRegistration"), result.data.message.message); + } + + $rootScope.spinner = false; + }); + + } + + // �뙘�뾽 李� �떕湲� + function cancel() { + $rootScope.$broadcast("closeLayer"); // �뙘�뾽�씠 �뿴由ш퀬 �굹�꽌 js-multi, js-single �벑�뿉�꽌 body �씠踰ㅽ듃媛� �궇�븘媛��뒗 �쁽�긽 �닔�젙 + $uibModalInstance.dismiss('cancel'); + $(document).unbind("keydown"); // �떒異뺥궎 �씠踰ㅽ듃 �젣嫄� + } + + } + + ]); + } +); \ No newline at end of file diff --git a/src/main/webapp/scripts/app/issue/issueList.controller.js b/src/main/webapp/scripts/app/issue/issueList.controller.js index 09e5b4e..9b7b944 100644 --- a/src/main/webapp/scripts/app/issue/issueList.controller.js +++ b/src/main/webapp/scripts/app/issue/issueList.controller.js @@ -120,6 +120,7 @@ // �꽌踰꾩뿉 ���옣�븳 �씠�뒋 寃��깋 議곌굔�쓣 媛��졇�삩�떎. function getVmSearchObject() { + IssueSearch.detail($resourceProvider.getContent({}, $resourceProvider.getPageContent(0, 0))).then(function (result) { if (result.data.message.status === "success") { @@ -239,9 +240,9 @@ .setDAlign("text-center") .setDName("issueTypeName")); break; - case "ASSIGNEE" : // �떞�떦�옄 + case "ASSIGNEETEAM" : // �떞�떦遺��꽌 $scope.vm.tableConfigs.push($tableProvider.config() - .setHName("common.assignee") + .setHName("common.assigneeTeam") .setDType("renderer") .setHWidth("bold " + issueTableConfig.width) .setDAlign("text-center") @@ -447,6 +448,14 @@ currentPage = selectedPage; } + // 硫붾돱�뿉�꽌 �꽑�깮�맂 �씠�뒋 �쑀�삎�쓣 湲곕낯�쑝濡� 異붽� + if ($rootScope.issueTypeMenu != null) { + // $scope.vm.pageTitle = $rootScope.issueTypeMenu.name; + $scope.vm.search.issueTypeIds.push({ + fieldKey : $rootScope.issueTypeMenu.id, + fieldValue : $rootScope.issueTypeMenu.name + }); + } // 寃��깋 議곌굔�쓣 ���옣�븳�떎. //$scope.fn.makeVmSearchObject(); @@ -857,8 +866,8 @@ position : 3, display : true }, { - name : $filter("translate")("common.assignee"), // �떞�떦�옄 - key : "ASSIGNEE", + name : $filter("translate")("common.assigneeTeam"), // �떞�떦遺��꽌 + key : "ASSIGNEETEAM", width : "width-140-p", position : 4, display : true diff --git a/src/main/webapp/scripts/app/issue/issueManager.controller.js b/src/main/webapp/scripts/app/issue/issueManager.controller.js index c72a718..9c45f37 100644 --- a/src/main/webapp/scripts/app/issue/issueManager.controller.js +++ b/src/main/webapp/scripts/app/issue/issueManager.controller.js @@ -12,9 +12,11 @@ $scope.fn = { changeTab : changeTab, // �꺆 蹂�寃� + start : start }; $scope.vm = { + pageTitle : "�씠�뒋愿�由�", tab : "ISSUE_LIST" // �뾽臾� 怨듦컙 �젙蹂닿� 湲곕낯 �꺆 }; @@ -28,6 +30,20 @@ $rootScope.$broadcast("changeListTab"); } } + + $scope.fn.start(); + + $scope.$on("changeIssueListMenu", function (event, args) { + if (args != null) { + $scope.vm.pageTitle = args.name; + } + }); + + function start() { + if ($rootScope.issueTypeMenu != null) { + $scope.vm.pageTitle = $rootScope.issueTypeMenu.name; + } + } } ]); } diff --git a/src/main/webapp/scripts/app/issueType/issueTypeAdd.controller.js b/src/main/webapp/scripts/app/issueType/issueTypeAdd.controller.js index 589a9ae..500bad8 100644 --- a/src/main/webapp/scripts/app/issueType/issueTypeAdd.controller.js +++ b/src/main/webapp/scripts/app/issueType/issueTypeAdd.controller.js @@ -13,6 +13,7 @@ $scope.fn = { getWorkflowListCallBack : getWorkflowListCallBack, // �썙�겕�뵆濡쒖슦 auto complete callback function + getProjectListCallBack : getProjectListCallBack, // �봽濡쒖젥�듃 auto complete callback function cancel : cancel, // �뙘�뾽 李� �떕湲� formSubmit : formSubmit, // �뤌 �쟾�넚 formCheck : formCheck // �뤌 泥댄겕 @@ -22,12 +23,18 @@ form : { name : "", // �씠�뒋 ���엯 紐� workflows : [], // �썙�겕�뵆濡쒖슦 + projects : [], // �봽濡쒖젥�듃 description : "", // �꽕紐� color : "#febd35" // �깋�긽 }, + projectName : "", workflowName : "", autoCompletePage : { workflow : { + page : 0, + totalPage : 0 + }, + project : { page : 0, totalPage : 0 } @@ -104,6 +111,10 @@ return true; } + if ($scope.vm.form.projects.length < 1) { + return true; + } + return false; } @@ -119,6 +130,15 @@ } return workflowId; + })(), + projectId : (function () { + var projectId = ""; + + if ($scope.vm.form.projects.length > 0) { + projectId = $scope.vm.form.projects[0].id; + } + + return projectId; })(), name : $rootScope.preventXss($scope.vm.form.name), description : $rootScope.preventXss($scope.vm.form.description), @@ -147,6 +167,10 @@ $scope.vm.autoCompletePage.workflow.totalPage = result.data.page.totalPage; } + function getProjectListCallBack(result) { + $scope.vm.autoCompletePage.project.totalPage = result.data.page.totalPage; + } + function cancel() { $rootScope.$broadcast("closeLayer"); // �뙘�뾽�씠 �뿴由ш퀬 �굹�꽌 js-multi, js-single �벑�뿉�꽌 body �씠踰ㅽ듃媛� �궇�븘媛��뒗 �쁽�긽 �닔�젙 $uibModalInstance.dismiss('cancel'); diff --git a/src/main/webapp/scripts/app/issueType/issueTypeList.controller.js b/src/main/webapp/scripts/app/issueType/issueTypeList.controller.js index f298258..e455f9a 100644 --- a/src/main/webapp/scripts/app/issueType/issueTypeList.controller.js +++ b/src/main/webapp/scripts/app/issueType/issueTypeList.controller.js @@ -68,7 +68,7 @@ .setDType("renderer") .setDName("name") .setDAlign("text-center") - .setDRenderer("USE_PROJECT_LIST")); + .setDRenderer("PROJECT_BASIC_NAME")); $scope.vm.tableConfigs.push($tableProvider.config() .setHName("common.color") .setHWidth("width-140-p bold") diff --git a/src/main/webapp/scripts/app/issueType/issueTypeModify.controller.js b/src/main/webapp/scripts/app/issueType/issueTypeModify.controller.js index 24284c5..5a2d0e7 100644 --- a/src/main/webapp/scripts/app/issueType/issueTypeModify.controller.js +++ b/src/main/webapp/scripts/app/issueType/issueTypeModify.controller.js @@ -13,6 +13,7 @@ $scope.fn = { getWorkflowListCallBack : getWorkflowListCallBack, // �썙�겕�뵆濡쒖슦 auto complete callback function + getProjectListCallBack : getProjectListCallBack, // �봽濡쒖젥�듃 auto complete callback function cancel : cancel, // �뙘�뾽 李� �떕湲� formSubmit : formSubmit, // �뤌 �쟾�넚 formCheck : formCheck, // �뤌 泥댄겕 @@ -28,12 +29,18 @@ id : parameter.id, name : "", workflows : [], // �썙�겕�뵆濡쒖슦 + projects : [], // �봽濡쒖젥�듃 description : "", // �꽕紐� color : "" // �깋�긽 }, workflowName : "", + projectName : "", autoCompletePage : { workflow : { + page : 0, + totalPage : 0 + }, + project : { page : 0, totalPage : 0 } @@ -100,6 +107,10 @@ return true; } + if ($scope.vm.form.projects.length < 1) { + return true; + } + return false; } @@ -116,6 +127,15 @@ } return workflowId; + })(), + projectId : (function () { + var projectId = ""; + + if ($scope.vm.form.projects.length > 0) { + projectId = $scope.vm.form.projects[0].id; + } + + return projectId; })(), name : $rootScope.preventXss($scope.vm.form.name), description : $rootScope.preventXss($scope.vm.form.description), @@ -144,6 +164,10 @@ $scope.vm.autoCompletePage.workflow.totalPage = result.data.page.totalPage; } + function getProjectListCallBack(result) { + $scope.vm.autoCompletePage.project.totalPage = result.data.page.totalPage; + } + function cancel() { $rootScope.$broadcast("closeLayer"); // �뙘�뾽�씠 �뿴由ш퀬 �굹�꽌 js-multi, js-single �벑�뿉�꽌 body �씠踰ㅽ듃媛� �궇�븘媛��뒗 �쁽�긽 �닔�젙 $uibModalInstance.dismiss('cancel'); @@ -163,6 +187,10 @@ $scope.vm.form.description = result.data.data.description; $scope.vm.form.workflows.push(result.data.data.workflowVo); $scope.vm.workflowName = result.data.data.workflowVo.name; + if (result.data.data.projectVo != null) { + $scope.vm.form.projects.push(result.data.data.projectVo); + $scope.vm.projectName = result.data.data.projectVo.name; + } $scope.vm.form.color = result.data.data.color; } } diff --git a/src/main/webapp/scripts/components/utils/autoComplete.controller.js b/src/main/webapp/scripts/components/utils/autoComplete.controller.js index bc694ec..97563fc 100644 --- a/src/main/webapp/scripts/components/utils/autoComplete.controller.js +++ b/src/main/webapp/scripts/components/utils/autoComplete.controller.js @@ -17,6 +17,7 @@ var User = $injector.get("User"); var Project = $injector.get("Project"); var Workflow = $injector.get("Workflow"); + var CompanyField = $injector.get("CompanyField"); var Issue = $injector.get("Issue"); var UserWorkspace = $injector.get("UserWorkspace"); var $log = $injector.get("$log"); @@ -28,6 +29,7 @@ $scope.fn.getIssueList = getIssueList; // �씪媛� 紐⑸줉 �젙蹂대�� 議고쉶�븳�떎. $scope.fn.getWorkflowList = getWorkflowList; // �썙�겕�뵆濡쒖슦 紐⑸줉 �젙蹂대�� 議고쉶�븳�떎. $scope.fn.getUserDepartmentList = getUserDepartmentList; // 遺��꽌 紐⑸줉 �젙蹂대�� 議고쉶�븳�떎. + $scope.fn.getCompanyFieldList = getCompanyFieldList; // 遺��꽌 紐⑸줉 �젙蹂대�� 議고쉶�븳�떎. function getUserList(query, excludeList, page, callBack) { var conditions = { @@ -94,6 +96,8 @@ var deferred = $q.defer(); + + Project.findWork($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") { @@ -111,6 +115,42 @@ return deferred.promise; } + function getCompanyFieldList(query, excludeList, page, callBack, statuses, roleTypes) { + var conditions = { + companyName : query, + excludeIds : (function () { + var excludeIds = []; + + angular.forEach(excludeList, function (exclude) { + excludeIds.push(exclude.id); + }); + + return excludeIds; + })() + }; + + var deferred = $q.defer(); + + + + 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.failedToProjectListLookUp"), result.data.message.message, "error"); // "�봽濡쒖젥�듃 紐⑸줉 議고쉶 �떎�뙣" + } + }); + + return deferred.promise; + } + + function getUserDepartmentList(query, excludeList, page, callBack) { var conditions = { departmentName : query, diff --git a/src/main/webapp/scripts/config.js b/src/main/webapp/scripts/config.js index 39cf630..15ad4c8 100644 --- a/src/main/webapp/scripts/config.js +++ b/src/main/webapp/scripts/config.js @@ -52,6 +52,10 @@ $rootScope.projects = []; // �쁽�옱 �궗�슜以묒씤 �봽濡쒖젥�듃 $rootScope.workProject = null; + // �쁽�옱 �봽濡쒖젥�듃�뿉 �궗�슜以묒씤 �씠�뒋 紐⑸줉(�쑀�삎) + $rootScope.workIssueTypes = []; + // �쁽�옱 �꽑�깮以묒씤 �씠�뒋 紐⑸줉 + $rootScope.issueTypeMenu = null; // �씠�뒋 紐⑸줉->�긽�꽭�솕硫댁뿉�꽌 留덉�留됱쑝濡� �젒洹쇳븳 �씠�뒋 �븘�씠�뵒 - �씪�슦�듃 �깉�븣留덈떎 珥덇린�솕 $rootScope.currentDetailIssueId = null; // 臾몄쓽�븯湲� @@ -310,6 +314,8 @@ $rootScope.projects.forEach(function (el) { if (el.id == projectId) { $rootScope.workProject = el; + + $rootScope.$broadcast("changeLastProject", { id : el.id }); } }); $state.go($state.current, {}, {reload: reload}); @@ -318,6 +324,8 @@ } }; + + // �봽濡쒖젥�듃 愿�由� 沅뚰븳�씠 �엳�뒗吏� �솗�씤�븳�떎 $rootScope.checkMngPermissionProject = function () { if (!$rootScope.isDefined($rootScope.user)) { diff --git a/src/main/webapp/views/common/sidebar.html b/src/main/webapp/views/common/sidebar.html index 037179e..74e00e0 100644 --- a/src/main/webapp/views/common/sidebar.html +++ b/src/main/webapp/views/common/sidebar.html @@ -83,6 +83,7 @@ <span translate="common.dashboard">���떆蹂대뱶</span> </a> </li> + <!-- <li class=""> <a ui-sref="tasks.agileBoard" tabindex="-1"> <div class="icon-w"> @@ -250,40 +251,16 @@ <li class="sub-header"> <span>ISSUE LIST</span> </li> - <!-- UI臾몄꽌 �젣�옉�슜 �엫�떆 肄붾뱶 �떆�옉--> - <li class=""> - <a ui-sref="dashboards.dashboard" tabindex="-1"> - <div class="icon-w"> + + <li ng-repeat="issueType in $root.workIssueTypes"> + <a class="cursor" tabindex="-1" ng-click="fn.changeIssueListMenu(issueType.id)"> + <div class="icon-w "> <div class="os-icon os-icon-layout"></div> </div> - <span>�븙�꽦 �룄硫붿씤</span> + <span>{{issueType.name}}</span> </a> </li> - <li class=""> - <a ui-sref="dashboards.dashboard" tabindex="-1"> - <div class="icon-w"> - <div class="os-icon os-icon-layout"></div> - </div> - <span>寃쎌쑀吏� ���쓳</span> - </a> - </li> - <li class=""> - <a ui-sref="dashboards.dashboard" tabindex="-1"> - <div class="icon-w"> - <div class="os-icon os-icon-layout"></div> - </div> - <span>�쑀�룷吏� ���쓳</span> - </a> - </li> - <li class=""> - <a ui-sref="dashboards.dashboard" tabindex="-1"> - <div class="icon-w"> - <div class="os-icon os-icon-layout"></div> - </div> - <span>遺꾩꽍寃곌낵 ���쓳</span> - </a> - </li> - <!-- UI臾몄꽌 �젣�옉�슜 �엫�떆 肄붾뱶 �걹--> + <!-- <li class=""> <a ui-sref="tasks.agileBoard" tabindex="-1"> diff --git a/src/main/webapp/views/issue/issueAdd.html b/src/main/webapp/views/issue/issueAdd.html index 0eccfe0..578e9c1 100644 --- a/src/main/webapp/views/issue/issueAdd.html +++ b/src/main/webapp/views/issue/issueAdd.html @@ -136,7 +136,7 @@ <div class="row"> <div class="col-lg-4"> <div class="form-group mb10"> - <label class="issue-label"> <span translate="common.assignee">�떞�떦�옄</span> </label> + <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" @@ -148,7 +148,6 @@ extra-settings="{ displayProp : 'byName' , idProp : 'id', imageable : true, imagePathProp : 'profile', type : 'user', maxlength : 100, autoResize : true, stopRemoveBodyEvent : true }"></js-input-autocomplete> - <small translate="issue.setUpUsersParticipatingInProject">�봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 �궗�슜�옄瑜� �꽕�젙�빀�땲�떎.</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> @@ -158,10 +157,10 @@ </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> + <label for="issueAddForm5" class="issue-label"> <span translate="common.period">湲곌컙</span></label> <input id="issueAddForm5" tabindex="-1" type="text" @@ -179,7 +178,8 @@ </div> </div> </div> - + </div> + <div class="col-lg-4"> <div class="form-group mgb5"> <label class="issue-label"><span translate="common.attachFiles">�뙆�씪 泥⑤�</span></label> <div class="filebox input-group"> @@ -196,9 +196,6 @@ multiple ng-file-select="fn.onFileSelect($files)"> </div> - <small translate="issue.attachOnlyFiles">hwp, jpg, png, txt, pptx, ppt, pdf, xlsx, xls, docx, - zip, gif, jpeg, doc, tif, bmp, wmv, avi, mp4, mkv, mov �뙆�씪留� 泥⑤��븷 �닔 �엳�뒿�땲�떎. - </small> <div class="select2-selection__choicediv"> <div class="select2-selection__choice2" ng-repeat="file in vm.form.files"> @@ -230,59 +227,335 @@ </div> </div> </div> + </div> - <div class="col-lg-8 bdl1"> - <div class="row"> - <div class="col-md-12"> - <div class="form-group mgb5" ng-show="vm.form.issueCustomFields.length < 1"> - <label class="issue-label" translate="issue.notIssueTypeCustomFields">�씠�뒋 ���엯�뿉 �뿰寃곕맂 �궗�슜�옄 �젙�쓽 - �븘�뱶媛� �뾾�뒿�땲�떎.</label> + <div class="row"> + <div class="col-lg-4 fontcolor_green"> + <label class="issue-label"><span class="fontcolor_green" translate="common.detectingInfo">�깘吏��젙蹂�</span></label> + </div> + </div> + + <div class="row"> + <div class="col-lg-4"> + <div class="form-group mb10"> + <label for="detectingDateAddForm" class="issue-label"> <span translate="common.detectingData">�깘吏��씪�떆</span> </label> + <input id="detectingDateAddForm" + tabindex="-1" + type="text" + readonly + class="form-control cursor" + placeholder="{{'issue.clickToSelectDate' | translate}}" + ng-model="vm.form.startCompleteDateRange" + modal-form-auto-scroll + date-format="YYYY-MM-DD" + parent-el="'#createdWidget2'" + date-range-picker> + <div class="row"> + <div class="col-xs-12"> + <div id="createdWidget2" class="bootstrap-datepicker"></div> </div> </div> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mb10"> + <label for="domainAddForm" class="issue-label"><span translate="companyField.domain">�룄硫붿씤</span></label> + <input id="domainAddForm" + name="domain" + type="text" + class="form-control" + kr-input + input-regex="[^a-zA-Z0-9 媛�-�옡�꽦-�뀕�뀖-�뀭\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" + autocomplete="off" + ng-model="vm.form.domain" + ng-maxlength="200" + maxlength="200"> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mgb5"> + <label for="ipAdressAddForm" class="issue-label"><span translate="companyField.ipAdress">ip二쇱냼</span></label> + <input id="ipAdressAddForm" + name="ipAdress" + type="text" + class="form-control" + kr-input + input-regex="[^a-zA-Z0-9 媛�-�옡�꽦-�뀕�뀖-�뀭\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" + autocomplete="off" + ng-model="vm.form.ipAdress" + ng-maxlength="200" + maxlength="200"> + </div> + </div> + </div> + <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="col-md-6" ng-repeat="issueCustomField in vm.form.issueCustomFields"> - <div class="form-group mgb5"> - <label class="issue-label">{{issueCustomField.customFieldVo.name}}</label> - - <div ng-switch on="issueCustomField.customFieldVo.customFieldType"> - <!-- 湲곕낯 �엯�젰 --> - <div ng-switch-when="INPUT"> - <input type="text" class="form-control input-sm" - ng-model="issueCustomField.useValues" - maxlength="100" - autocomplete="off" - kr-input - ng-required="issueCustomField.fieldOption == '01'"> - </div> - - <!-- �떒�씪 ���젆�듃 --> - <div ng-switch-when="SINGLE_SELECT"> - <select class="form-control input-sm issue-select-label" - ng-required="issueCustomField.fieldOption == '01'" - ng-model="issueCustomField.useValues"> - <option value="" value="" translate="common.choose">�꽑�깮�븯�꽭�슂.</option> - <option ng-repeat="customFieldValueVo in issueCustomField.customFieldVo.customFieldValueVos" - value="{{customFieldValueVo.value}}" - ng-selected="$root.selectOption(issueCustomField.useValues, customFieldValueVo.value)"> - {{customFieldValueVo.value}} - </option> - </select> - </div> - - <!-- 硫��떚 ���젆�듃 --> - <div ng-switch-when="MULTI_SELECT"> - <ng-dropdown-multiselect class="multiSelect cursor" - data-input-name="" - modal-form-auto-scroll - selected-model="issueCustomField.useValues" - extra-settings="{ 'idProp' : 'value', 'externalIdProp' : 'value', 'displayProp' : 'value', 'stringTypeOption' : 'true', stopRemoveBodyEvent : true }" - options="issueCustomField.customFieldVo.customFieldValueVos"></ng-dropdown-multiselect> - </div> - </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> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mb10"> + <label for="companyFieldManagerAddForm" class="issue-label"><span translate="companyField.manager">�떞�떦�옄</span></label> + <input id="companyFieldManagerAddForm" + name="companyManager" + 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.companyManager" + ng-maxlength="100" + maxlength="100" + required> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mgb5"> + <label for="companyFieldTelAddForm" class="issue-label"><span translate="companyField.tel">�쟾�솕踰덊샇</span></label> + <input id="companyFieldTelAddForm" + name="companyTel" + type="text" + class="form-control" + kr-input + ng-pattern="/^\d{2,3}-\d{3,4}-\d{4}$/" + autocomplete="off" + ng-model="vm.form.companyTel" + maxlength="20"> + <div ng-show="issueAddForm.companyTel.$error.pattern" class="help-block form-text text-danger" + translate="companyField.invalidTelFormat">�쟾�솕踰덊샇 �삎�떇�씠 留욎� �븡�뒿�땲�떎. xxx-xxx-xxxx �삎�떇�쑝濡� �엯�젰�븯�꽭�슂. </div> </div> </div> + <div class="col-lg-4"> + <div class="form-group mgb5"> + <label for="companyFieldEmailAddForm" class="issue-label"><span translate="companyField.email">�씠硫붿씪</span></label> + <input id="companyFieldEmailAddForm" + name="companyEmail" + type="email" + class="form-control" + autocomplete="off" + maxLength="50" + ng-model="vm.form.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" + translate="users.invalidEmailFormat">�씠硫붿씪 �삎�떇�씠 留욎� �븡�뒿�땲�떎. + </div> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mgb5"> + <label for="companyFieldDescAddForm" class="issue-label"><span translate="companyField.desc">鍮꾧퀬</span></label> + <input id="companyFieldDescAddForm" + name="companyDesc" + type="text" + class="form-control" + kr-input + autocomplete="off" + ng-model="vm.form.companyDesc" + ng-maxlength="200" + maxlength="200"> + </div> + </div> + </div> + <div class="row"> + <div class="col-lg-4 fontcolor_green"> + <label class="issue-label"><span class="fontcolor_green" translate="ispField.info">ISP �젙蹂�</span></label> + </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> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mb10"> + <label for="ispFieldManagerAddForm" class="issue-label"><span translate="ispField.manager">�떞�떦�옄</span></label> + <input id="ispFieldManagerAddForm" + name="ispManager" + type="text" + class="form-control" + kr-input + input-regex="[^a-zA-Z0-9 媛�-�옡�꽦-�뀕�뀖-�뀭\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" + autocomplete="off" + ng-model="vm.form.ispManager" + ng-maxlength="100" + maxlength="100"> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mgb5"> + <label for="ispFieldTelAddForm" class="issue-label"><span translate="ispField.tel">�쟾�솕踰덊샇</span></label> + <input id="ispFieldTelAddForm" + name="ispTel" + type="text" + class="form-control" + kr-input + ng-pattern="/^\d{2,3}-\d{3,4}-\d{4}$/" + autocomplete="off" + ng-model="vm.form.ispTel" + maxlength="20"> + <div ng-show="issueAddForm.ispTel.$error.pattern" class="help-block form-text text-danger" + translate="companyField.invalidTelFormat">�쟾�솕踰덊샇 �삎�떇�씠 留욎� �븡�뒿�땲�떎. xxx-xxx-xxxx �삎�떇�쑝濡� �엯�젰�븯�꽭�슂. + </div> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mgb5"> + <label for="ispFieldEmailAddForm" class="issue-label"><span translate="ispField.email">�씠硫붿씪</span></label> + <input id="ispFieldEmailAddForm" + name="ispEmail" + type="email" + class="form-control" + autocomplete="off" + maxLength="50" + ng-model="vm.form.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" + translate="users.invalidEmailFormat">�씠硫붿씪 �삎�떇�씠 留욎� �븡�뒿�땲�떎. + </div> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mgb5"> + <label for="ispFieldDescAddForm" class="issue-label"><span translate="ispField.desc">鍮꾧퀬</span></label> + <input id="ispFieldDescAddForm" + name="ispDesc" + type="text" + class="form-control" + kr-input + autocomplete="off" + ng-model="vm.form.ispDesc" + ng-maxlength="200" + maxlength="200"> + </div> + </div> + </div> + <div class="row"> + <div class="col-lg-4 fontcolor_green"> + <label class="issue-label"><span class="fontcolor_green" translate="hostingField.info">�샇�뒪�똿 �젙蹂�</span></label> + </div> + </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> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mb10"> + <label for="hostingFieldManagerAdd" class="issue-label"><span translate="hostingField.manager">�떞�떦�옄</span></label> + <input id="hostingFieldManagerAdd" + name="hostingManager" + type="text" + class="form-control" + kr-input + input-regex="[^a-zA-Z0-9 媛�-�옡�꽦-�뀕�뀖-�뀭\u318D\u119E\u11A2\u2022\u2025a\u00B7\uFE55]" + autocomplete="off" + ng-model="vm.form.hostingManager" + ng-maxlength="100" + maxlength="100"> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mgb5"> + <label for="hostingFieldTelAdd" class="issue-label"><span translate="hostingField.tel">�쟾�솕踰덊샇</span></label> + <input id="hostingFieldTelAdd" + name="hostingTel" + type="text" + class="form-control" + kr-input + ng-pattern="/^\d{2,3}-\d{3,4}-\d{4}$/" + autocomplete="off" + ng-model="vm.form.hostingTel" + maxlength="20"> + <div ng-show="issueAddForm.hostingTel.$error.pattern" class="help-block form-text text-danger" + translate="companyField.invalidTelFormat">�쟾�솕踰덊샇 �삎�떇�씠 留욎� �븡�뒿�땲�떎. xxx-xxx-xxxx �삎�떇�쑝濡� �엯�젰�븯�꽭�슂. + </div> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mgb5"> + <label for="hostingFieldEmailAdd" class="issue-label"><span translate="hostingField.email">�씠硫붿씪</span></label> + <input id="hostingFieldEmailAdd" + name="hostingEmail" + type="email" + class="form-control" + autocomplete="off" + maxLength="50" + ng-model="vm.form.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" + translate="users.invalidEmailFormat">�씠硫붿씪 �삎�떇�씠 留욎� �븡�뒿�땲�떎. + </div> + </div> + </div> + <div class="col-lg-4"> + <div class="form-group mgb5"> + <label for="hostingFieldDescAdd" class="issue-label"><span translate="hostingField.desc">鍮꾧퀬</span></label> + <input id="hostingFieldDescAdd" + name="hostingDesc" + type="text" + class="form-control" + kr-input + autocomplete="off" + ng-model="vm.form.hostingDesc" + ng-maxlength="200" + maxlength="200"> + </div> + </div> </div> </form> </div> diff --git a/src/main/webapp/views/issue/issueCompanyFieldDetail.html b/src/main/webapp/views/issue/issueCompanyFieldDetail.html new file mode 100644 index 0000000..8e78ee0 --- /dev/null +++ b/src/main/webapp/views/issue/issueCompanyFieldDetail.html @@ -0,0 +1,37 @@ +<div class="formModal"> + <div class="modal-header faded smaller"> + <div class="modal-title"> + <strong>�뾽泥� �젙蹂�</strong> + </div> + <button aria-label="Close" class="close" type="button" ng-click="fn.cancel()"> + <span aria-hidden="true"> ×</span> + </button> + </div> + + <div class="modal-body"> + <form role="form" name="companyFieldImportForm"> + <div class="form-group"> + <label><span translate="companyField.name">�뾽泥� �씠由�</span> + <code class="highlighter-rouge">*</code></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" + extra-settings="{ displayProp : 'name' , idProp : 'id', imageable : false, imagePathProp : '', + type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single> + </div> + <div class="modal-footer buttons-on-right"> + <button type="button" class="btn btn-md btn-grey" ng-click="fn.cancel()"><span translate="common.cancel">痍⑥냼</span></button> + <button type="button" class="btn btn-md btn-primary bold" + js-short-cut + js-short-cut-action="(fn.formCheck(companyFieldModifyForm.$invalid) || $root.spinner) ? null : fn.formSubmit()" + ng-disabled="fn.formCheck(companyFieldImportForm.$invalid)" + ng-click="fn.formSubmit()"><span translate="common.save">���옣</span> + </button> + </div> + </form> + </div> +</div> diff --git a/src/main/webapp/views/issue/issueDetail.html b/src/main/webapp/views/issue/issueDetail.html index 7913e9c..89d3763 100644 --- a/src/main/webapp/views/issue/issueDetail.html +++ b/src/main/webapp/views/issue/issueDetail.html @@ -207,7 +207,7 @@ <div class="row"> <div class="col-xxl-12"> <div class="form-group"> - <label class="issue-detail-label"><span translate="common.assignee">�떞�떦�옄</span> </label> + <label class="issue-detail-label"><span translate="common.assigneeTeam">�떞�떦遺��꽌</span> </label> <div class=""> <div class="select3-selection__choicediv"> <span class="select3-selection__choice" ng-repeat="user in vm.viewer.userVos"> diff --git a/src/main/webapp/views/issue/issueList.html b/src/main/webapp/views/issue/issueList.html index 50d4a57..fc91e2f 100644 --- a/src/main/webapp/views/issue/issueList.html +++ b/src/main/webapp/views/issue/issueList.html @@ -1,5 +1,5 @@ -<h6 class="element-header" translate="issue.managementIssue"> - �씠�뒋 愿�由� +<h6 class="element-header"> + {{vm.pageTitle}} </h6> <div class="os-tabs-w"> @@ -8,9 +8,11 @@ <li class="nav-item"> <a class="nav-link cursor" ng-class="{ 'active' : vm.tab == 'ISSUE_LIST' }" ng-click="fn.changeTab('ISSUE_LIST')" translate="issue.normalList">�씪媛� 紐⑸줉</a> </li> + <!-- <li class="nav-item"> <a class="nav-link cursor" ng-class="{ 'active' : vm.tab == 'ISSUE_TIMELINE' }" ng-click="fn.changeTab('ISSUE_TIMELINE')" translate="issue.timeLine">���엫 �씪�씤</a> </li> + --> </ul> </div> </div> @@ -20,10 +22,11 @@ <div ng-show="vm.tab == 'ISSUE_LIST'"> <div ng-include include-replace src="'views/issue/issueListNormal.html'"></div> </div> - +<!-- <div ng-show="vm.tab == 'ISSUE_TIMELINE'"> <div ng-include include-replace src="'views/issue/issueListTimeline.html'"></div> </div> +--> </div> diff --git a/src/main/webapp/views/issue/issueListNormal.html b/src/main/webapp/views/issue/issueListNormal.html index 8ebb4a0..b52df46 100644 --- a/src/main/webapp/views/issue/issueListNormal.html +++ b/src/main/webapp/views/issue/issueListNormal.html @@ -185,7 +185,7 @@ <div class="col-lg-3"> <div class="form-group"> - <label> <span translate="common.assignee">�떞�떦�옄</span></label> + <label> <span translate="common.assigneeTeam">�떞�떦遺��꽌</span></label> <js-autocomplete-multi data-input-name="users" selected-model="vm.users" search="vm.userName" diff --git a/src/main/webapp/views/issue/issueListTimeline.html b/src/main/webapp/views/issue/issueListTimeline.html index 65f51d0..86e4a75 100644 --- a/src/main/webapp/views/issue/issueListTimeline.html +++ b/src/main/webapp/views/issue/issueListTimeline.html @@ -184,7 +184,7 @@ <div class="col-lg-3"> <div class="form-group"> - <label> <span translate="common.assignee">�떞�떦�옄</span></label> + <label> <span translate="common.assigneeTeam">�떞�떦遺��꽌</span></label> <js-autocomplete-multi data-input-name="users" selected-model="vm.users" search="vm.userName" diff --git a/src/main/webapp/views/issue/issueModify.html b/src/main/webapp/views/issue/issueModify.html index 01bd3db..863a4f5 100644 --- a/src/main/webapp/views/issue/issueModify.html +++ b/src/main/webapp/views/issue/issueModify.html @@ -138,7 +138,7 @@ <div class="row"> <div class="col-lg-4"> <div class="form-group mgb5"> - <label class="issue-label"> <span translate="common.assignee">�떞�떦�옄</span> </label> + <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" diff --git a/src/main/webapp/views/issue/issueModifyUser.html b/src/main/webapp/views/issue/issueModifyUser.html index 80fab2f..f56e075 100644 --- a/src/main/webapp/views/issue/issueModifyUser.html +++ b/src/main/webapp/views/issue/issueModifyUser.html @@ -12,7 +12,7 @@ <form role="form" name="issueUserModifyForm"> <div class="form-group"> <div class="form-group mgb5"> - <label class="issue-label"> <span translate="common.assignee">�떞�떦�옄</span> </label> + <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" diff --git a/src/main/webapp/views/issueType/issueTypeAdd.html b/src/main/webapp/views/issueType/issueTypeAdd.html index d44c9b6..a9e6d52 100644 --- a/src/main/webapp/views/issueType/issueTypeAdd.html +++ b/src/main/webapp/views/issueType/issueTypeAdd.html @@ -43,17 +43,22 @@ </div> <div class="form-group"> - <label><span translate="issue.useProjects">�궗�슜 �봽濡쒖젥�듃</span></label> - <js-autocomplete-single data-input-name="workflow" - selected-model="vm.form.workflows" - search="vm.workflowName" - source="fn.getWorkflowList(vm.workflowName, vm.form.workflows, vm.autoCompletePage.workflow.page, fn.getWorkflowListCallBack)" - page="vm.autoCompletePage.workflow.page" - total-page="vm.autoCompletePage.workflow.totalPage" + <label class="issue-label"> <span translate="issue.useProjects">�궗�슜 �봽濡쒖젥�듃</span> <code + class="highlighter-rouge">*</code></label> + <js-autocomplete-single data-input-name="project" + selected-model="vm.form.projects" + search="vm.projectName" + source="fn.getProjectList(vm.projectName, vm.form.projects, vm.autoCompletePage.project.page, fn.getProjectListCallBack)" + page="vm.autoCompletePage.project.page" + total-page="vm.autoCompletePage.project.totalPage" input-disabled="false" - extra-settings="{ displayProp : 'name' , idProp : 'id', imageable : false, imagePathProp : '', type : '', maxlength : 200, autoResize : false }"></js-autocomplete-single> + required + translation-texts="{ empty : 'common.emptyProject' }" + extra-settings="{ displayProp : 'name' , idProp : 'id', imageable : false, imagePathProp : '', + type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single> </div> + <div class="form-group"> <label><span translate="issue.companyInfo">�뾽泥�/ISP/�샇�뒪�똿 �젙蹂�</span></label> diff --git a/src/main/webapp/views/issueType/issueTypeModify.html b/src/main/webapp/views/issueType/issueTypeModify.html index cfeb4e4..a43fb0a 100644 --- a/src/main/webapp/views/issueType/issueTypeModify.html +++ b/src/main/webapp/views/issueType/issueTypeModify.html @@ -45,6 +45,35 @@ </div> </div> + + <div class="form-group"> + <label class="issue-label"> <span translate="issue.useProjects">�궗�슜 �봽濡쒖젥�듃</span> <code + class="highlighter-rouge">*</code></label> + <js-autocomplete-single data-input-name="project" + selected-model="vm.form.projects" + search="vm.projectName" + source="fn.getProjectList(vm.projectName, vm.form.projects, vm.autoCompletePage.project.page, fn.getProjectListCallBack)" + page="vm.autoCompletePage.project.page" + total-page="vm.autoCompletePage.project.totalPage" + input-disabled="false" + required + translation-texts="{ empty : 'common.emptyProject' }" + extra-settings="{ displayProp : 'name' , idProp : 'id', imageable : false, imagePathProp : '', + type : '', maxlength : 200, autoResize : false, stopRemoveBodyEvent : true }"></js-autocomplete-single> + </div> + + + <div class="form-group"> + <label><span + translate="issue.companyInfo">�뾽泥�/ISP/�샇�뒪�똿 �젙蹂�</span></label> + <ng-dropdown-multiselect class="multiSelect cursor" + data-input-name="issueStatusTypes" + selected-model="vm.search.issueStatusTypes" + extra-settings="{ stringTypeOption : true }" + options="vm.options.emailTemplates"></ng-dropdown-multiselect> + </div> + + <div class="form-group"> <label for="issueTypeModifyForm2"><span translate="common.color">�깋�긽</span> <code class="highlighter-rouge">*</code></label> <div class="input-group"> -- Gitblit v1.8.0