diff options
| author | shizhendong <[email protected]> | 2019-10-23 10:18:03 +0800 |
|---|---|---|
| committer | shizhendong <[email protected]> | 2019-10-23 10:18:03 +0800 |
| commit | d2375f6f919371822af054eafa72592e8e44bfba (patch) | |
| tree | b944da15de0e6c74fd754ebf49ce2479c5914392 | |
| parent | 0768b178b7386c07a32292a4a7954147fbcef298 (diff) | |
1.后台增加查询节点组包含节点个数接口
2.节点组页面显示包含节点数
3.节点表单布局修改
9 files changed, 170 insertions, 125 deletions
diff --git a/nezha-admin/src/main/java/com/nis/modules/node/controller/NodeGroupInfoController.java b/nezha-admin/src/main/java/com/nis/modules/node/controller/NodeGroupInfoController.java index 71fe2514..63086f24 100644 --- a/nezha-admin/src/main/java/com/nis/modules/node/controller/NodeGroupInfoController.java +++ b/nezha-admin/src/main/java/com/nis/modules/node/controller/NodeGroupInfoController.java @@ -76,7 +76,8 @@ class NodeGroupInfoController { @PutMapping("/update") public R update(@RequestBody NodeGroupInfoEntity nodegroupInfo) { ValidateUtils.is(nodegroupInfo).notNull(RCode.NOT_NULL_ERROR) - .and(nodegroupInfo.getName()).notNull(RCode.NODEGROUP_NAME_ISNULL); + .and(nodegroupInfo.getName()).notNull(RCode.NODEGROUP_NAME_ISNULL) + .and(nodegroupInfo.getId()).notNull(RCode.NODEGROUP_ID_ISNULL); nodegroupInfoService.updateNodeGroupInfo(nodegroupInfo); return R.ok(); } @@ -87,7 +88,7 @@ class NodeGroupInfoController { public R groupNameCheck(Long id, String name, Long pid, Long systemId) { ValidateUtils.is(name).notNull(RCode.NODEGROUP_NAME_ISNULL).and(pid).notNull(RCode.NODEGROUP_PID_ISNULL); - if (nodegroupInfoService.groupNameCheck(id, name, pid,systemId)) { + if (nodegroupInfoService.groupNameCheck(id, name, pid, systemId)) { return R.ok(); } return R.error(RCode.NODEGROUP_NAME_DUPLICATE);//节点组名称重复错误 @@ -127,4 +128,17 @@ class NodeGroupInfoController { PageUtils page = nodegroupInfoService.assList(params); return R.ok(page); } + + + /** + * 获取当前节点组包含的节点个数 + * + * @return + */ + @GetMapping("/getNodeCount") + public R getNodeCount(Long id) { + ValidateUtils.is(id).notNull(RCode.NODEGROUP_ID_ISNULL); + Integer nodeCount = nodegroupInfoService.getNodeCount(id); + return R.ok(nodeCount); + } } diff --git a/nezha-admin/src/main/java/com/nis/modules/node/dao/NodeGroupInfoDao.java b/nezha-admin/src/main/java/com/nis/modules/node/dao/NodeGroupInfoDao.java index 3544b403..d2c0a1a5 100644 --- a/nezha-admin/src/main/java/com/nis/modules/node/dao/NodeGroupInfoDao.java +++ b/nezha-admin/src/main/java/com/nis/modules/node/dao/NodeGroupInfoDao.java @@ -25,4 +25,7 @@ public interface NodeGroupInfoDao extends BaseMapper<NodeGroupInfoEntity> { // 节点组详情查询 NodeGroupInfoEntity detail(Long id); + + // 获取当前节点组包含的节点个数 + Integer getNodeCount(Long id); } diff --git a/nezha-admin/src/main/java/com/nis/modules/node/service/NodeGroupInfoService.java b/nezha-admin/src/main/java/com/nis/modules/node/service/NodeGroupInfoService.java index 74200863..aac293ab 100644 --- a/nezha-admin/src/main/java/com/nis/modules/node/service/NodeGroupInfoService.java +++ b/nezha-admin/src/main/java/com/nis/modules/node/service/NodeGroupInfoService.java @@ -35,5 +35,8 @@ public interface NodeGroupInfoService extends IService<NodeGroupInfoEntity> { PageUtils assList(Map<String, Object> params); boolean isCurrentSystem(Long [] ids); + + // 根据当前节点组ID获取包含的节点个数 + Integer getNodeCount(Long id); } diff --git a/nezha-admin/src/main/java/com/nis/modules/node/service/impl/NodeGroupInfoServiceImpl.java b/nezha-admin/src/main/java/com/nis/modules/node/service/impl/NodeGroupInfoServiceImpl.java index cc4cd11a..5d4a34a8 100644 --- a/nezha-admin/src/main/java/com/nis/modules/node/service/impl/NodeGroupInfoServiceImpl.java +++ b/nezha-admin/src/main/java/com/nis/modules/node/service/impl/NodeGroupInfoServiceImpl.java @@ -418,4 +418,17 @@ public class NodeGroupInfoServiceImpl extends ServiceImpl<NodeGroupInfoDao, Node return list == null || list.size() < 1; } + + /** + * 根据节点组ID 获取包含的节点个数 + * @param id + * @return + */ + @Override + public Integer getNodeCount(Long id) { + // 判断是否为叶子节点组 暂未 + // 获取当前节点组包含的节点个数 + Integer nodeCount = nodegroupInfoDao.getNodeCount(id); + return nodeCount; + } }
\ No newline at end of file diff --git a/nezha-admin/src/main/resources/mapper/node/NodeGroupInfoDao.xml b/nezha-admin/src/main/resources/mapper/node/NodeGroupInfoDao.xml index b2223633..b1025719 100644 --- a/nezha-admin/src/main/resources/mapper/node/NodeGroupInfoDao.xml +++ b/nezha-admin/src/main/resources/mapper/node/NodeGroupInfoDao.xml @@ -49,4 +49,9 @@ SELECT ni.*,(SELECT NAME FROM nodegroup_info WHERE id = ni.pid) AS pname FROM nodegroup_info ni WHERE ni.id = #{id} AND ni.del_flag = 0 </select> + + <!-- 查询当前节点组下包含的节点数 --> + <select id="getNodeCount" resultType="integer"> + SELECT COUNT(1) FROM node_group_rel ngr WHERE ngr.group_id = #{id} AND ngr.del_flag = 0 + </select> </mapper>
\ No newline at end of file diff --git a/nezha-admin/src/main/resources/templates/js/modules/node/nodeGroup.js b/nezha-admin/src/main/resources/templates/js/modules/node/nodeGroup.js index 6ea1fd4b..3cfeeca3 100644 --- a/nezha-admin/src/main/resources/templates/js/modules/node/nodeGroup.js +++ b/nezha-admin/src/main/resources/templates/js/modules/node/nodeGroup.js @@ -16,7 +16,8 @@ let groupTree = Vue.component('groupTree', { view: { addHoverDom: this.addHoverDom, removeHoverDom: this.removeHoverDom, - showIcon: false + showIcon: false, + nameIsHTML: true // 名称支持Html标签转换 }, edit: { enable: true, @@ -29,6 +30,9 @@ let groupTree = Vue.component('groupTree', { idKey: "id", pIdKey: "pid", rootPId: 0 + }, + key:{ + title:"nodeTitle" // 因为name 拼接了带有html的字段 所以默认的title 会展示html标签 } }, check: { @@ -46,6 +50,24 @@ let groupTree = Vue.component('groupTree', { methods: { // 初始化ztree init() { + // 获取当前的集合 + this.znodes.forEach(item => { + this.$set(item,"nodeTitle",item.name); + if(item.allowAss == 1){ // 证明是叶子节点 + var count = ""; + $.ajax({ + type: "GET", + url: baseURL + "nodegroup/getNodeCount?id="+item.id, + async: false, + dataType: "json", + success: function (r) { + count = r.data; + } + }); + this.$set(item,"name",item.name + " <font color='gray'>("+ count +")</font>"); + } + }); + // 生成树结构 var tree = $.fn.zTree.init($("#treeDemo" + this.node.id), this.setting, this.znodes); tree.expandAll(true); }, @@ -121,12 +143,12 @@ let groupTree = Vue.component('groupTree', { }, watch: { // 监听树节点的变化更新树 - znodes: function (val) { + /* znodes: function (val) { this.init(); - }, + },*/ }, mounted() { - this.init(); + this.init(); } }); @@ -262,7 +284,7 @@ var vue = new Vue({ } else { url = "nodegroup/update"; } - vue.$set(vm.nodeGroup, "pid", vue.nodeGroup.parentGroup.id); + vue.$set(vue.nodeGroup, "pid", vue.nodeGroup.parentGroup.id); vue.$set(vue.nodeGroup, "systemId", vue.system == null ? null : vue.system.id); if (vue.nodeGroup.id) { vue.nodeGroup.pid = vue.nodeGroup.pids = vue.nodeGroup.systemId = null; diff --git a/nezha-admin/src/main/resources/templates/modules/node/nodeGroup.html b/nezha-admin/src/main/resources/templates/modules/node/nodeGroup.html index c2686fa0..6b3cd81e 100644 --- a/nezha-admin/src/main/resources/templates/modules/node/nodeGroup.html +++ b/nezha-admin/src/main/resources/templates/modules/node/nodeGroup.html @@ -98,64 +98,12 @@ <div class="form-group"> <a class="" href="#" style="font-size: 16px;"><@spring.message 'node.list'/></a> <!-- 当前节点组 --> - <a v-if="nodeGroup != null" class="" href="#" style="font-size: 16px;"> {{nodeGroup.name}}</a> + <a v-if="nodeGroup != null" class="" href="#" style="font-size: 16px;"> {{nodeGroup.nodeTitle}}</a> <!-- 分配节点 --> <a v-if="nodeGroup != null && nodeGroup.allowAss == 1" class="btn btn-primary" @click="" style="float: right"> <i class="fa"></i> <@spring.message 'nodegroup.assignNode'/></a> </div> - <!--<div v-show="showList"> - <div class="grid-btn"> - - <!– 搜索条件 –> - <div class="form-group col-sm-2"> - <input type="text" class="form-control" - v-model="q.ip" @keyup.enter="query" - placeholder="<@spring.message 'node.ipAddress'/>"> - </div> - - <div class="form-group col-sm-2"> - <multiselect :options="nodeTypes" label="value" :show-labels="false" - v-model="q.type" - placeholder="<@spring.message 'node.type'/>"></multiselect> - </div> - - <!– 功能按钮 –> - <a class="btn btn-default" @click="advancedSearch"> - <i class="fa" - :class="{'fa-angle-double-down': !isAdvancedSearch, 'fa-angle-double-up': isAdvancedSearch}"></i></a> - <a class="btn btn-default" @click="query" title="<@spring.message 'common.search'/>"> - <i class="fa fa-search"></i></a> - <a class="btn btn-default" @click="reset" title="<@spring.message 'common.reset'/>"> - <i class="fa fa-refresh"></i></a> - - <!– 搜索条件 –> - <div class="grid-btn grid-btn_advanced" v-show="isAdvancedSearch"> - <div class="form-group col-sm-2"> - <input type="text" class="form-control" - v-model="q.name" @keyup.enter="query" - placeholder="<@spring.message 'common.name'/>"> - </div> - - <div class="form-group col-sm-2"> - <multiselect :options="queryTags" label="value" :show-labels="false" - v-model="q.tag" - placeholder="<@spring.message 'node.tag'/>"></multiselect> - </div> - - <div class="form-group col-sm-2"> - <multiselect :options="nodeStates" label="value" :show-labels="false" - v-model="q.state" - placeholder="<@spring.message 'common.onLineState'/>"></multiselect> - </div> - </div> - </div> - - <!– 列表数据 / 分页 –> - <table id="jqGrid"></table> - <div id="jqGridPager"></div> - - </div>--> <!-- 列表 查询 --> <div v-show="showList"> <div class="tools"> diff --git a/nezha-admin/src/main/resources/templates/modules/node/nodeInfo.html b/nezha-admin/src/main/resources/templates/modules/node/nodeInfo.html index 14ad02b2..a423c277 100644 --- a/nezha-admin/src/main/resources/templates/modules/node/nodeInfo.html +++ b/nezha-admin/src/main/resources/templates/modules/node/nodeInfo.html @@ -152,87 +152,97 @@ </div> </div> - <!-- U位大小 --> + <!-- 在线状态 --> <div class="form-group"> - <div class="col-sm-2 control-label"><@spring.message 'node.uSize'/>(U)</div> + <div class="col-sm-2 control-label"><@spring.message 'common.onLineState'/></div> <div class="col-sm-9"> - <input type="text" class="form-control" - :class="{'form-control--error': $v.nodeInfo.uSize.$dirty && !$v.nodeInfo.uSize.minValue || !$v.nodeInfo.uSize.integer}" - v-model.trim="$v.nodeInfo.uSize.$model" - placeholder="<@spring.message 'node.uSize'/>(U)"/> - <span class="required-symbol" - v-if="$v.nodeInfo.uSize.$dirty && !$v.nodeInfo.uSize.sizeRequired">*</span> - <div class="form-control_error-msg" - v-if="$v.nodeInfo.uSize.$dirty && !$v.nodeInfo.uSize.minValue || !$v.nodeInfo.uSize.integer"> - <@spring.message 'validate.common.positiveInteger'/> - </div> - <div class="form-control_error-msg" - v-if="$v.nodeInfo.uSize.$dirty && !$v.nodeInfo.uSize.sizeRequired"> + <multiselect :options="nodeStates" label="value" :disabled="disabledFlag" :show-labels="false" + :class="{'form-control--error': $v.nodeInfo.state.$dirty && !$v.nodeInfo.state.required}" + v-model="$v.nodeInfo.state.$model" + placeholder="<@spring.message 'common.pleaseSelect'/>"></multiselect> + <span class="required-symbol">*</span> + <div class="form-control_error-msg" v-if="$v.nodeInfo.state.$dirty && !$v.nodeInfo.state.required"> <@spring.message 'validate.common.required'/> </div> </div> </div> - <!-- 机房名称 --> + <!-- 位置信息 --> <div class="form-group"> - <div class="col-sm-2 control-label"><@spring.message 'node.room.name'/></div> + <div class="col-sm-2 control-label"><@spring.message 'node.position.information'/>:</div> <div class="col-sm-9"> - <multiselect :options="rooms" label="roomName" :disabled="disabledFlag" :show-labels="false" - @close="getCabinets($event),$v.nodeInfo.cabinetId.$touch(),$v.nodeInfo.uSize.$touch()" - v-model="nodeInfo.nodeRoom" @open="checkUsize()" - placeholder="<@spring.message 'common.pleaseSelect'/>"></multiselect> - </div> - </div> - <!-- 机柜名称 --> - <div class="form-group"> - <div class="col-sm-2 control-label"><@spring.message 'node.cabinet.name'/></div> - <div class="col-sm-9"> - <multiselect :options="cabinets" label="name" :disabled="disabledFlag" :show-labels="false" - @close="getStarts($event),$v.nodeInfo.cabinetStart.$touch(),$v.nodeInfo.uSize.$touch()" - v-model="nodeInfo.cabinetId" @open="checkNodeRoom()" - placeholder="<@spring.message 'common.pleaseSelect'/>"></multiselect> - <span class="required-symbol" - v-if="$v.nodeInfo.cabinetId.$dirty && !$v.nodeInfo.cabinetId.cabRequired">*</span> - <div class="form-control_error-msg" - v-if="$v.nodeInfo.cabinetId.$dirty && !$v.nodeInfo.cabinetId.cabRequired"> - <@spring.message 'validate.common.required'/> - </div> - </div> - </div> + <div class="add-box2"> - <!-- 机柜起始位置 --> - <div class="form-group"> - <div class="col-sm-2 control-label"><@spring.message 'node.cabinetStart'/></div> - <div class="col-sm-9"> - <multiselect :options="starts" :show-labels="false" :disabled="disabledFlag" - v-model="nodeInfo.cabinetStart" @open="checkCabStart()" - @blur="$v.nodeInfo.uSize.$touch()" - placeholder="<@spring.message 'common.pleaseSelect'/>"></multiselect> - <span class="required-symbol" - v-if="$v.nodeInfo.cabinetId.$dirty && !$v.nodeInfo.cabinetId.cabRequired || !$v.nodeInfo.cabinetStart.startRequired">*</span> - <div class="form-control_error-msg" - v-if="$v.nodeInfo.cabinetId.$dirty && !$v.nodeInfo.cabinetId.cabRequired || !$v.nodeInfo.cabinetStart.startRequired"> - <@spring.message 'validate.common.required'/> - </div> - </div> - </div> + <div class="form-group"> + <div class="col-sm-3 control-label"><@spring.message 'node.uSize'/>(U)</div> + <div class="col-sm-8"> + <input type="text" class="form-control" + :class="{'form-control--error': $v.nodeInfo.uSize.$dirty && !$v.nodeInfo.uSize.minValue || !$v.nodeInfo.uSize.integer}" + v-model.trim="$v.nodeInfo.uSize.$model" + placeholder="<@spring.message 'node.uSize'/>(U)"/> + <span class="" + v-if="$v.nodeInfo.uSize.$dirty && !$v.nodeInfo.uSize.sizeRequired">*</span> + <div class="form-control_error-msg" + v-if="$v.nodeInfo.uSize.$dirty && !$v.nodeInfo.uSize.minValue || !$v.nodeInfo.uSize.integer"> + <@spring.message 'validate.common.positiveInteger'/> + </div> + <div class="form-control_error-msg" + v-if="$v.nodeInfo.uSize.$dirty && !$v.nodeInfo.uSize.sizeRequired"> + <@spring.message 'validate.common.required'/> + </div> + </div> + </div> + + <div class="form-group"> + <div class="col-sm-3 control-label"><@spring.message 'node.room.name'/></div> + <div class="col-sm-8"> + <multiselect :options="rooms" label="roomName" :disabled="disabledFlag" + :show-labels="false" + @close="getCabinets($event),$v.nodeInfo.cabinetId.$touch(),$v.nodeInfo.uSize.$touch()" + v-model="nodeInfo.nodeRoom" @open="checkUsize()" + placeholder="<@spring.message 'common.pleaseSelect'/>"></multiselect> + </div> + </div> + + <div class="form-group"> + <div class="col-sm-3 control-label"><@spring.message 'node.cabinet.name'/></div> + <div class="col-sm-8"> + <multiselect :options="cabinets" label="name" :disabled="disabledFlag" + :show-labels="false" + @close="getStarts($event),$v.nodeInfo.cabinetStart.$touch(),$v.nodeInfo.uSize.$touch()" + v-model="nodeInfo.cabinetId" @open="checkNodeRoom()" + placeholder="<@spring.message 'common.pleaseSelect'/>"></multiselect> + <span class="add-box2-required-symbol" + v-if="nodeInfo.nodeRoom != null">*</span> + <div class="form-control_error-msg" + v-if="$v.nodeInfo.cabinetId.$dirty && !$v.nodeInfo.cabinetId.cabRequired"> + <@spring.message 'validate.common.required'/> + </div> + </div> + </div> + + <div class="form-group"> + <div class="col-sm-3 control-label"><@spring.message 'node.cabinetStart'/></div> + <div class="col-sm-8" style="position:relative;"> + <multiselect :options="starts" :show-labels="false" :disabled="disabledFlag" + v-model="nodeInfo.cabinetStart" @open="checkCabStart()" + @blur="$v.nodeInfo.uSize.$touch()" + placeholder="<@spring.message 'common.pleaseSelect'/>"></multiselect> + <span class="add-box2-required-symbol" + v-if="nodeInfo.nodeRoom != null">*</span> + <div class="form-control_error-msg" + v-if="$v.nodeInfo.cabinetId.$dirty && !$v.nodeInfo.cabinetId.cabRequired || !$v.nodeInfo.cabinetStart.startRequired"> + <@spring.message 'validate.common.required'/> + </div> + </div> + </div> - <!-- 在线状态 --> - <div class="form-group"> - <div class="col-sm-2 control-label"><@spring.message 'common.onLineState'/></div> - <div class="col-sm-9"> - <multiselect :options="nodeStates" label="value" :disabled="disabledFlag" :show-labels="false" - :class="{'form-control--error': $v.nodeInfo.state.$dirty && !$v.nodeInfo.state.required}" - v-model="$v.nodeInfo.state.$model" - placeholder="<@spring.message 'common.pleaseSelect'/>"></multiselect> - <span class="required-symbol">*</span> - <div class="form-control_error-msg" v-if="$v.nodeInfo.state.$dirty && !$v.nodeInfo.state.required"> - <@spring.message 'validate.common.required'/> </div> </div> </div> + <!-- snmp端口 --> <div class="form-group" v-show="nodeInfo.type != null && nodeInfo.type.code == 2"> <div class="col-sm-2 control-label"><@spring.message 'node.snmpPort'/></div> @@ -303,5 +313,31 @@ </div> <!--<script src="${request.contextPath}/statics/js/modules/node/nodeInfo.js"></script>--> <#include "/js/modules/node/nodeInfo.js"> + +<style> + .add-box2 { + font-size: 13px; + border: 1px solid #cccccc; + width: 90%; + border-radius: 4px; + padding: 15px 0 0 0; + } + + .add-box2 .form-group { + margin-bottom: 15px; + } + + + /*添加框中必填提示*的style*/ + .add-box2-required-symbol{ + position: absolute; + display: inline-block; + top: 7px; + left: 205px; + color: #f57f6c; + font-size: 20px; + } + +</style> </body> </html>
\ No newline at end of file diff --git a/nezha-common/src/main/java/com/nis/common/utils/RCode.java b/nezha-common/src/main/java/com/nis/common/utils/RCode.java index 03488a90..a6191870 100644 --- a/nezha-common/src/main/java/com/nis/common/utils/RCode.java +++ b/nezha-common/src/main/java/com/nis/common/utils/RCode.java @@ -74,6 +74,7 @@ public enum RCode { NODEGROUP_PARENTIDS_NOT_MODIFIED(202012, "nodegroup_parentids_not_modified"), // 节点组pidS不许修改 NODEGROUP_PARENT_SYSTEM_NOT_EQUALS(202013, "nodegroup_parent_system_not_equals"), // 父级级节点组系统ID不同 NODEGROUP_NOT_EXISTS_THIS_SYSTEM(202014, "nodegroup_not_exists_this_system"), // 节点组不在这个业务系统中 + NODEGROUP_ID_ISNULL(202015, "nodegroup_id_isnull"), // 节点组id不能为Null NODEROOM_NAME_DUPLICATE(203001, "roomname_duplicate_error"), // 机房名称重复 NODEROOM_ROW_OCCUPIED(203002,"row_occupied_error"), // 机房行号已被占用 |
