cauto 2 years ago
parent
commit
3dc139618d
7 changed files with 220 additions and 113 deletions
  1. 15 2
      src/apis/node.ts
  2. 1 0
      src/model/node.ts
  3. 37 31
      src/model/nodeconfig.ts
  4. 8 4
      src/request/index.ts
  5. 1 0
      src/view/index/index.vue
  6. 86 9
      src/view/node/index.vue
  7. 72 67
      src/view/node/nodeconfig.vue

+ 15 - 2
src/apis/node.ts

@@ -3,13 +3,16 @@ import httprequest from "/@/request/index";
 import {INodeList, NodeAddParam, NodeinfoParam, NodeItme, NodeItmeData, TaskNode} from "/@/model/node"
 import {LoginRet} from "/@/model/login";
 import {PingConfig} from "/@/model/pingconfig";
-import NodeConfigData = namespace.NodeConfigData;
+import {NodeConfigData, NodeData} from "/@/model/nodeconfig";
+
+
+
 
 
 // 用户登录
 export const nodeReqUse = (params: NodeinfoParam) => {
     // 返回的数据格式可以和服务端约定
-    return httprequest.get<INodeList>('api/v1/node/all', params);
+    return httprequest.get<NodeData>('api/v1/node/all', params);
 }
 
 // 添加节点
@@ -76,4 +79,14 @@ export const pingConfigEditReqUse = (params : any) => {
 //获取全部nodeconfig配置
 export const nodeConfigGetALLReqUse = (params : any) => {
     return httprequest.get<NodeConfigData>("api/v1/node/config/all",params)
+}
+
+//编辑nodeconfig配置
+export const nodeConfigEditALLReqUse = (params : any) => {
+    return httprequest.post<any>("api/v1/node/config/edit",params)
+}
+
+//删除
+export const nodeConfigDeleteALLReqUse = (params : any) => {
+    return httprequest.post<any>("api/v1/node/config/del",params)
 }

+ 1 - 0
src/model/node.ts

@@ -29,6 +29,7 @@ export interface INode {
   nodeMs : number;
   urlCount : number;
   urlRet : number;
+  isNotice : number;
 }
 
 

+ 37 - 31
src/model/nodeconfig.ts

@@ -1,41 +1,47 @@
-declare module namespace {
-
-    export interface Node {
-        Id: number;
-        Name: string;
-        Host: string;
-    }
-
-    export interface NodeConfig {
-        Id: number;
-        Serverid: number;
-        Sshcommand: string;
-        Sshpassword: string;
-        Sshusername: string;
-    }
-
-    export interface NodeConfigItem {
-        Node: Node;
-        NodeConfig: NodeConfig[];
-    }
+import {INode} from "/@/model/node";
+export interface Node {
+    Id: number;
+    Name: string;
+    Host: string;
+}
 
-    export interface NodeConfigData {
-        NodeConfigItem: NodeConfigItem[];
-    }
+export interface NodeConfig {
+    Id: number;
+    Serverid: number;
+    Sshcommand: string;
+    Sshpassword: string;
+    Sshusername: string;
+}
 
+export interface NodeConfigItem {
+    Node: INode;
+    NodeConfig: NodeConfig[];
+}
 
+export interface NodeConfigData {
+    NodeConfigItem: NodeConfigItem[];
+}
 
-    export interface NodeConfigInfo {
-        Id: number;
-        Name: string;
-        Host: string;
-        Sshcommand: string;
-        Sshpassword: string;
-        Sshusername: string;
-    }
+export interface NodeData {
+    nodeList: NodeConfigItem[];
+}
 
+export interface NodeConfigInfo {
+    Id: number;
+    Serverid:number;
+    Name: string;
+    Host: string;
+    Sshcommand: string;
+    Sshpassword: string;
+    Sshusername: string;
+}
 
 
+export interface NodeInfo extends INode{
 
+    Serverid:number;
+    Sshcommand: string;
+    Sshpassword: string;
+    Sshusername: string;
 }
 

+ 8 - 4
src/request/index.ts

@@ -1,6 +1,7 @@
 import axios, {AxiosInstance, AxiosError, AxiosRequestConfig, AxiosResponse} from 'axios'
 import { message } from 'ant-design-vue';
 import {log} from "util";
+import router from "/@/router";
 // 数据返回的接口
 // 定义请求响应参数,不含data
 interface Result {
@@ -85,6 +86,11 @@ class RequestHttp {
 				}
 				// 全局错误信息拦截(防止下载文件得时候返回数据流,没有code,直接报错)
 				if (data.code && data.code !== RequestEnums.SUCCESS) {
+					if (data.code == -1){
+						return router.replace({
+							path: '/login'
+						});
+					}
 					message.error(data.message,2).then(r => console.log(r.message)); // 此处也可以使用组件提示报错信息
 					return Promise.reject(data)
 				}
@@ -98,16 +104,14 @@ class RequestHttp {
 				if (!window.navigator.onLine) {
 					message.error('网络连接失败',2).then(r => console.log(r.message));
 					// 可以跳转到错误页面,也可以不做操作
-					// return router.replace({
-					//   path: '/404'
-					// });
+
 				}
 			}
 		)
 	}
 	handleCode(code: number):void {
 		switch(code) {
-			case 401:
+			case 404:
 				message.error('登录失败,请重新登录',2).then(r => console.log(r.message));
 				break;
 			default:

+ 1 - 0
src/view/index/index.vue

@@ -39,6 +39,7 @@ import {
 } from 'vue';
 import {nodeStatusReqUse} from "/@/apis/node";
 import {NodeItme, NodeItmeData, NodeStatus} from "/@/model/node";
+import router from "/@/router";
 export default defineComponent({
     setup() {
 

+ 86 - 9
src/view/node/index.vue

@@ -6,8 +6,11 @@
   </a-space>
 
   <!-- 添加点击对话框 -->
-  <a-modal v-model:visible="Visible" title="Title" @ok="handleOk">
-
+  <a-modal v-model:visible="Visible" title="Title" >
+    <template #footer>
+      <a-button key="back"  ></a-button>
+      <a-button key="submit" type="primary" ></a-button>
+    </template>
     <a-form
         ref="formRef"
         :model="formState"
@@ -37,8 +40,7 @@
       <a-form-item ref="urlstatus" name="urlstatus">
         <label>urlstatus:</label>
         <a-input v-model:value="formState.urlstatus" placeholder="输入状态"/>
-      </a-form-item
-      >
+      </a-form-item>
       <a-form-item>
         <label>ping类型:</label>
         <a-select v-model:value="formState.pingType" placeholder="选择ping类型">
@@ -46,6 +48,26 @@
           <a-select-option :value=1>tcpping</a-select-option>
         </a-select>
       </a-form-item>
+      <a-form-item  ref="isNotice" name="isNotice">
+        <label>电报通知:</label>
+        <a-input v-model:value="formState.isNotice" placeholder="电报通知"/>
+      </a-form-item>
+
+        <a-form-item     ref="sshcommand" name="sshcommand">
+          <label>ssh命令:</label>
+          <a-input   v-model:value="formState.sshcommand" placeholder="ssh命令"/>
+        </a-form-item>
+        <a-form-item  ref="sshpassword" name="sshpassword">
+          <label>ssh密码:</label>
+          <a-input v-model:value="formState.sshpassword" placeholder="ssh密码"/>
+        </a-form-item>
+        <a-form-item  ref="sshusername" name="sshusername">
+          <label>ssh用户:</label>
+          <a-input  v-model:value="formState.sshusername" placeholder="sshusername"/>
+        </a-form-item>
+
+
+
 
 <!--      <template #footer>-->
 <!--        <a-button key="back" @click="cancel">关闭</a-button>-->
@@ -54,7 +76,7 @@
 <!--      </template>-->
       <a-form-item :wrapper-col="{ span: 14, offset: 4 }">
 
-        <a-button v-if="formState.isedit === false" type="primary" @click="onSubmit(true)">编辑</a-button>
+        <a-button v-if="formState.isedit === true" type="primary" @click="onSubmit(true)">编辑</a-button>
         <a-button v-else type="primary" @click="onSubmit(false)">Create</a-button>
 
         <a-button style="margin-left: 10px" @click="resetForm">Reset</a-button>
@@ -113,6 +135,7 @@ import { ColumnProps } from "ant-design-vue/lib/table";
 import {it} from "node:test";
 import {message} from "ant-design-vue";
 import router from "/@/router";
+import {NodeData, NodeInfo} from "/@/model/nodeconfig";
 type Key = ColumnProps['key'];
 export default defineComponent({
   name:"node",
@@ -200,6 +223,11 @@ export default defineComponent({
         key: 'urlRet',
         dataIndex: 'urlRet',
       },
+      {
+        title: '通知电报',
+        key: 'isNotice',
+        dataIndex: 'isNotice',
+      },
       {
         title: '删除',
         key: 'delete',
@@ -215,7 +243,7 @@ export default defineComponent({
     ];
     let ids = ""
     const state = reactive({
-      datalist : [] as INode[],
+      datalist : [] as NodeInfo[],
       selectedTableRow: [] as INode[],
       loading : false,
       Visible : false,
@@ -235,9 +263,42 @@ export default defineComponent({
     };
 
     const getNodeList = async () => {
+      state.datalist = []
       const node_list = await nodeReqUse(null)
-      state.datalist = node_list.data.nodeList
+      if (node_list.code == -1){
+         await router.push("/login")
+      }
+
+      for (let dataKey in node_list.data.nodeList) {
+        let data = <NodeInfo>{}
+        data.Serverid = node_list.data.nodeList[dataKey].Node.id
+        data.id = node_list.data.nodeList[dataKey].Node.id
+        data.name = node_list.data.nodeList[dataKey].Node.name
+        data.host = node_list.data.nodeList[dataKey].Node.host
+        data.port = node_list.data.nodeList[dataKey].Node.port
+        data.url = node_list.data.nodeList[dataKey].Node.url
+        data.updateAt = node_list.data.nodeList[dataKey].Node.updateAt
+        data.createAt = node_list.data.nodeList[dataKey].Node.createAt
+        data.pingType = node_list.data.nodeList[dataKey].Node.pingType
+        data.urlStatus = node_list.data.nodeList[dataKey].Node.urlStatus
+        data.nodeMs = node_list.data.nodeList[dataKey].Node.nodeMs
+        data.urlRet = node_list.data.nodeList[dataKey].Node.urlRet
+        data.isNotice = node_list.data.nodeList[dataKey].Node.isNotice
+        if (node_list.data.nodeList[dataKey].NodeConfig != null)
+        {
+          for (let nodeConfig of node_list.data.nodeList[dataKey].NodeConfig) {
+            // data.Id = nodeConfig.Id;
+            data.Sshpassword = nodeConfig.Sshpassword;
+            data.Sshcommand = nodeConfig.Sshcommand;
+            data.Sshusername = nodeConfig.Sshusername;
+          }
+          state.datalist.push(data)
+        }
+      }
+      console.log(state.datalist);
     }
+      // state.datalist = node_list.data.nodeList
+    // }
 
     const addNodeList = async (data) => {
 
@@ -306,6 +367,10 @@ export default defineComponent({
         urlstatus: 0,
         urlcount:0,
         urlret: "",
+        sshcommand:"",
+        sshpassword:"",
+        sshusername:"",
+        isNotice:0
     })
 
 
@@ -332,6 +397,10 @@ export default defineComponent({
         "url"  : toRaw(formState).url,
         "pingType": toRaw(formState).pingType,
         "urlstatus": toRaw(formState).urlstatus,
+        "isNotice": toRaw(formState).isNotice,
+        "sshcommand": toRaw(formState).sshcommand,
+        "sshpassword": toRaw(formState).sshpassword,
+        "sshusername": toRaw(formState).sshusername,
       }
       if (isedit){
         editNode(reqdata)
@@ -348,7 +417,11 @@ export default defineComponent({
       formState.url = record.url
       formState.pingType = record.pingType
       formState.urlstatus = record.urlstatus
-      formState.isedit = false
+      formState.sshusername = record.Sshusername
+      formState.sshcommand = record.Sshcommand
+      formState.sshpassword = record.Sshpassword
+      formState.isNotice = record.isNotice
+      formState.isedit = true
       state.Visible = true
 
     }
@@ -360,7 +433,11 @@ export default defineComponent({
       formState.url = ""
       formState.pingType = undefined
       formState.urlstatus = 0
-      formState.isedit = true
+      formState.isedit = false
+      formState.sshpassword = ""
+      formState.sshcommand = ""
+      formState.sshusername = ""
+      formState.isNotice = 0
       state.Visible = true;
     }
     const handleOk= () =>{

+ 72 - 67
src/view/node/nodeconfig.vue

@@ -1,13 +1,16 @@
 <template>
   <a-space>
-    <a-button type="primary" class="role_btn role_add" @click="showAddNode">添加节点</a-button>
+<!--    <a-button type="primary" class="role_btn role_add" @click="showAddNode">添加节点</a-button>-->
 <!--    <a-button type="primary" class="role_btn role_add" @click="onDeleteALlNode">删除节点</a-button>-->
 <!--    <a-button type="primary" class="role_btn role_add" @click="onEditNode">编辑节点</a-button>-->
   </a-space>
 
   <!-- 添加点击对话框 -->
   <a-modal v-model:visible="Visible" title="Title" @ok="handleOk">
-
+    <template #footer>
+      <a-button key="back"  ></a-button>
+      <a-button key="submit" type="primary" ></a-button>
+    </template>
     <a-form
         ref="formRef"
         :model="formState"
@@ -16,37 +19,29 @@
         :wrapper-col="wrapperCol"
     >
       <a-form-item ref="name" name="name">
-        <label>name:</label>
-        <a-input v-model:value="formState.name" />
+        <label>服务器名称:</label>
+        <a-input v-model:value="formState.Name" />
       </a-form-item>
 
       <a-form-item ref="host" name="host">
         <label>host:</label>
-        <a-input v-model:value="formState.host" />
+        <a-input v-model:value="formState.Host" />
       </a-form-item>
 
-      <a-form-item ref="port" name="port">
-        <label>port:</label>
-        <a-input v-model:value="formState.port" placeholder="输入服务器端口" />
+      <a-form-item ref="Sshusername" name="Sshusername">
+        <label>SSH用户:</label>
+        <a-input v-model:value="formState.Sshusername" placeholder="SSH用户"/>
       </a-form-item>
-
-      <a-form-item ref="url" name="url">
-        <label>url:</label>
-        <a-input v-model:value="formState.url" placeholder="输入切换地址url"/>
+      <a-form-item ref="Sshpassword" name="Sshpassword">
+        <label>SSH密码:</label>
+        <a-input v-model:value="formState.Sshpassword" placeholder="SSH密码"/>
       </a-form-item>
-      <a-form-item ref="urlstatus" name="urlstatus">
-        <label>urlstatus:</label>
-        <a-input v-model:value="formState.urlstatus" placeholder="输入状态"/>
-      </a-form-item
-      >
-      <a-form-item>
-        <label>ping类型:</label>
-        <a-select v-model:value="formState.pingType" placeholder="选择ping类型">
-          <a-select-option :value=0>icmp</a-select-option>
-          <a-select-option :value=1>tcpping</a-select-option>
-        </a-select>
+      <a-form-item ref="Sshcommand" name="Sshcommand">
+        <label>ssh命令:</label>
+        <a-input v-model:value="formState.Sshcommand" placeholder="ssh命令"/>
       </a-form-item>
 
+
 <!--      <template #footer>-->
 <!--        <a-button key="back" @click="cancel">关闭</a-button>-->
 <!--        <a-button key="back" @click="resetForm">Reset</a-button>-->
@@ -54,7 +49,7 @@
 <!--      </template>-->
       <a-form-item :wrapper-col="{ span: 14, offset: 4 }">
 
-        <a-button v-if="formState.isedit === false" type="primary" @click="onSubmit(true)">编辑</a-button>
+        <a-button v-if="formState.isedit === true" type="primary" @click="onSubmit(true)">编辑</a-button>
         <a-button v-else type="primary" @click="onSubmit(false)">Create</a-button>
 
         <a-button style="margin-left: 10px" @click="resetForm">Reset</a-button>
@@ -108,7 +103,14 @@ import {
   unref
 } from "vue";
 import {INode, NodeAddParam, NodeStatus} from "/@/model/node";
-import {delNodeReqUse, editNodeReqUse, nodeAddReqUse, nodeConfigGetALLReqUse, nodeReqUse} from "/@/apis/node";
+import {
+  delNodeReqUse,
+  editNodeReqUse,
+  nodeAddReqUse, nodeConfigDeleteALLReqUse,
+  nodeConfigEditALLReqUse,
+  nodeConfigGetALLReqUse,
+  nodeReqUse
+} from "/@/apis/node";
 import { ColumnProps } from "ant-design-vue/lib/table";
 import {it} from "node:test";
 import {message} from "ant-design-vue";
@@ -142,8 +144,14 @@ export default defineComponent({
       {
         title: 'Id',
         name: 'Id',
-        dataIndex: 'id',
-        key: 'id',
+        dataIndex: 'Id',
+        key: 'Id',
+      },
+      {
+        title: '服务器ID',
+        name: 'Serverid',
+        dataIndex: 'Serverid',
+        key: 'Serverid',
       },
       {
         title: '服务器名称',
@@ -206,15 +214,19 @@ export default defineComponent({
     };
 
     const getNodeList = async () => {
-      let data = <NodeConfigInfo>{}
+      state.datalist = []
+
+
       const node_list = await nodeConfigGetALLReqUse(null)
       for (let dataKey in node_list.data.NodeConfigItem) {
-        data.Id = node_list.data.NodeConfigItem[dataKey].Node.Id
-        data.Name = node_list.data.NodeConfigItem[dataKey].Node.Name
-        data.Host = node_list.data.NodeConfigItem[dataKey].Node.Host
+        let data = <NodeConfigInfo>{}
+        data.Serverid = node_list.data.NodeConfigItem[dataKey].Node.id
+        data.Name = node_list.data.NodeConfigItem[dataKey].Node.name
+        data.Host = node_list.data.NodeConfigItem[dataKey].Node.host
         if (node_list.data.NodeConfigItem[dataKey].NodeConfig != null)
         {
           for (let nodeConfig of node_list.data.NodeConfigItem[dataKey].NodeConfig) {
+            data.Id = nodeConfig.Id;
             data.Sshpassword = nodeConfig.Sshpassword;
             data.Sshcommand = nodeConfig.Sshcommand;
             data.Sshusername = nodeConfig.Sshusername;
@@ -246,7 +258,7 @@ export default defineComponent({
     }
 
     const editNode = async (data) => {
-      let ret =  await  editNodeReqUse(data)
+      let ret =  await  nodeConfigEditALLReqUse(data)
       if (ret.code == 0)
       {
         console.log(state.Visible);
@@ -264,7 +276,7 @@ export default defineComponent({
 
     const delNodeById = async (data) => {
 
-      let ret = await delNodeReqUse(data)
+      let ret = await nodeConfigDeleteALLReqUse(data)
       if (ret.code == 0)
       {
         console.log(state.Visible);
@@ -283,17 +295,15 @@ export default defineComponent({
        getNodeList()
     })
 
-    const formState = reactive({
-        id: 0,
-        name: "",
-        host: "",
-        port: 22,
-        url:  "",
-        pingType: undefined,
-        isedit : false,
-        urlstatus: 0,
-        urlcount:0,
-        urlret: "",
+    const formState  = reactive({
+         Id: 0,
+         Serverid: 0,
+         Sshpassword : "",
+         Sshcommand: "",
+         Sshusername:"",
+         Name:"",
+         Host:"",
+         isedit: false
     })
 
 
@@ -313,13 +323,12 @@ export default defineComponent({
 
     const onSubmit = (isedit) =>{
       const reqdata = {
-        "id"   : toRaw(formState).id,
-        "name" : toRaw(formState).name,
-        "host" : toRaw(formState).host,
-        "port" : toRaw(formState).port,
-        "url"  : toRaw(formState).url,
-        "pingType": toRaw(formState).pingType,
-        "urlstatus": toRaw(formState).urlstatus,
+        "id"   : toRaw(formState).Serverid,
+        "name" : toRaw(formState).Name,
+        "host" : toRaw(formState).Host,
+        "sshcom" : toRaw(formState).Sshcommand,
+        "sshuser"  : toRaw(formState).Sshusername,
+        "sshpass"  : toRaw(formState).Sshpassword,
       }
       if (isedit){
         editNode(reqdata)
@@ -329,26 +338,22 @@ export default defineComponent({
     }
 
     const onEditNode = (record) => {
-      formState.id = record.id
-      formState.name = record.name
-      formState.host = record.host
-      formState.port = record.port
-      formState.url = record.url
-      formState.pingType = record.pingType
-      formState.urlstatus = record.urlstatus
-      formState.isedit = false
+      console.log(record);
+      formState.Id = record.Id
+      formState.Serverid = record.Serverid
+      formState.Name = record.Name
+      formState.Host = record.Host
+      formState.Sshcommand = record.Sshcommand
+      formState.Sshusername = record.Sshusername
+      formState.Sshpassword = record.Sshpassword
+      formState.isedit = true
+      console.log(formState);
       state.Visible = true
 
+
     }
 
     const  showAddNode = () => {
-      formState.name = ""
-      formState.host = ""
-      formState.port = 22
-      formState.url = ""
-      formState.pingType = undefined
-      formState.urlstatus = 0
-      formState.isedit = true
       state.Visible = true;
     }
     const handleOk= () =>{
@@ -374,7 +379,7 @@ export default defineComponent({
     const onDeleteNode = ( record )=>{
       console.log(record.id);
       delNodeById({
-        "id" : record.id
+        "serverid" : record.Serverid
       })
     }