alroyso 9 months ago
parent
commit
5a31af0c03
8 changed files with 89 additions and 21 deletions
  1. 1 1
      src/.env.production
  2. 3 0
      src/model/node.ts
  3. 1 0
      src/model/pingconfig.ts
  4. 2 1
      src/request/index.ts
  5. 8 0
      src/style.css
  6. 13 0
      src/view/config/index.vue
  7. 58 18
      src/view/node/index.vue
  8. 3 1
      vite.config.ts

+ 1 - 1
src/.env.production

@@ -1,3 +1,3 @@
 NODE_ENV = 'production'
 VUE_APP_CURRENTMODE = 'prod'
-VUE_APP_BASEURL = 'http://127.0.0.1:8080'
+VUE_APP_BASEURL = ''

+ 3 - 0
src/model/node.ts

@@ -22,6 +22,7 @@ export interface INode {
   host: string;
   port: number;
   url: string;
+  UrlRecover: string;
   updateAt: string;
   createAt: string;
   pingType: number;
@@ -30,6 +31,8 @@ export interface INode {
   urlCount : number;
   urlRet : number;
   isNotice : number;
+  url1: string;
+  url2: string;
 }
 
 

+ 1 - 0
src/model/pingconfig.ts

@@ -4,6 +4,7 @@ export interface PingConfigItem{
     nodeLoos: number
     pingTime: number
     pingName: string
+    nodeRecover: number
 }
 export interface PingConfig {
     PingConfig: PingConfigItem

+ 2 - 1
src/request/index.ts

@@ -21,7 +21,8 @@ switch (process.env.NODE_ENV) {
 		break
 
 	case 'production':
-		URL = "http://api.163jsd.xyz/"  //生产环境url
+		URL = "https://api.jdjk999888.top/api/" //生产环境url
+		//URL = process.env.VUE_APP_BASEURL
 		break
 }
 

+ 8 - 0
src/style.css

@@ -6,6 +6,14 @@ body,#app {
   padding: 0;
   background: white;
 }
+
+.ant-input {
+  width: 100%;
+  max-width: 100%;
+  min-width: 200px;
+  flex: 1;
+}
+
 /* :root {
   font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
   font-size: 16px;

+ 13 - 0
src/view/config/index.vue

@@ -31,6 +31,11 @@
         <label>pingTime:</label>
         <a-input v-model:value="formState.pingTime" placeholder=""/>
       </a-form-item>
+
+      <a-form-item ref="nodeRecover" name="nodeRecover">
+        <label>nodeRecover:</label>
+        <a-input v-model:value="formState.nodeRecover" placeholder=""/>
+      </a-form-item>
       <a-form-item :wrapper-col="{ span: 14, offset: 4 }">
 
         <a-button  type="primary" @click="onSubmit(true)">编辑</a-button>
@@ -109,6 +114,11 @@ export default defineComponent({
         dataIndex: 'pingTime',
         key: 'pingTime',
       },
+      {
+        title: 'nodeRecover',
+        dataIndex: 'nodeRecover',
+        key: 'nodeRecover',
+      },
       {
         title: '删除',
         key: 'delete',
@@ -129,6 +139,7 @@ export default defineComponent({
       nodeLoos: "",
       nodeDie: "",
       nodeCount: "",
+      nodeRecover: "",
     })
 
 
@@ -160,6 +171,7 @@ export default defineComponent({
       formState.nodeCount = record.nodeCount
       formState.nodeLoos = record.nodeLoos
       formState.pingTime = record.pingTime
+      formState.nodeRecover = record.nodeRecover
       state.Visible = true
     }
 
@@ -170,6 +182,7 @@ export default defineComponent({
         "nodeloos":  toRaw(formState).nodeLoos,
         "pingtime":  toRaw(formState).pingTime,
         "pingname":  toRaw(formState).pingName,
+        "noderecover" : toRaw(formState.nodeRecover),
       };
       pingConfigEditReqUse(data).then(r =>
         state.Visible = false

+ 58 - 18
src/view/node/index.vue

@@ -33,10 +33,17 @@
         <a-input v-model:value="formState.port" placeholder="输入服务器端口" />
       </a-form-item>
 
-      <a-form-item ref="url" name="url">
+      <a-form-item v-if="formState.isedit === true" ref="url" name="url">
         <label>url:</label>
-        <a-input v-model:value="formState.url" placeholder="输入切换地址url"/>
+        <a-input v-model:value="formState.url" placeholder="输入切换地址url" />
       </a-form-item>
+    
+      <a-form-item v-if="formState.isedit === true" ref="UrlRecover" name="UrlRecover">
+        <label>UrlRecover:</label>
+        <a-input v-model:value="formState.UrlRecover" placeholder="输入恢复地址" />
+      </a-form-item>
+
+
       <a-form-item ref="urlstatus" name="urlstatus">
         <label>urlstatus:</label>
         <a-input v-model:value="formState.urlstatus" placeholder="输入状态"/>
@@ -115,7 +122,7 @@
 
   </a-table>
 </template>
-
+ 
 <script lang="ts">
 import {
   computed,
@@ -184,20 +191,25 @@ export default defineComponent({
         key: 'port',
       },
       {
-        title: '切换地址',
-        key: 'url',
-        dataIndex: 'url',
+        title: '下线地址',
+        key: 'url1',
+        dataIndex: 'url1',
       },
       {
-        title: '更新时间',
-        key: 'updateAt',
-        dataIndex:'updateAt',
-      },
-      {
-        title: '创建时间',
-        key: 'createAt',
-        dataIndex: 'createAt',
+        title: '恢复地址',
+        key: 'url2',
+        dataIndex: 'url2',
       },
+      // {
+      //   title: '更新时间',
+      //   key: 'updateAt',
+      //   dataIndex:'updateAt',
+      // },
+      // {
+      //   title: '创建时间',
+      //   key: 'createAt',
+      //   dataIndex: 'createAt',
+      // },
       {
         title: 'PING类型',
         key: 'pingType',
@@ -277,6 +289,7 @@ export default defineComponent({
         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.UrlRecover = node_list.data.nodeList[dataKey].Node.UrlRecover
         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
@@ -285,6 +298,8 @@ export default defineComponent({
         data.urlRet = node_list.data.nodeList[dataKey].Node.urlRet
         data.urlCount = node_list.data.nodeList[dataKey].Node.urlCount
         data.isNotice = node_list.data.nodeList[dataKey].Node.isNotice
+        data.url1 = extractIpFromUrl(node_list.data.nodeList[dataKey].Node.url)
+        data.url2 = extractIpFromUrl(node_list.data.nodeList[dataKey].Node.UrlRecover)
         if (node_list.data.nodeList[dataKey].NodeConfig != null)
         {
           for (let nodeConfig of node_list.data.nodeList[dataKey].NodeConfig) {
@@ -295,7 +310,11 @@ export default defineComponent({
           }
           state.datalist.push(data)
         }
+   
       }
+
+      formState.isedit = false
+      console.log(formState.isedit)
       console.log(state.datalist);
     }
       // state.datalist = node_list.data.nodeList
@@ -320,6 +339,7 @@ export default defineComponent({
     }
 
     const editNode = async (data) => {
+
       let ret =  await  editNodeReqUse(data)
       if (ret.code == 0)
       {
@@ -353,9 +373,17 @@ export default defineComponent({
 
     }
 
-    onMounted(  () =>{
-       getNodeList()
-    })
+    onMounted(async () => {
+      try {
+        state.loading = true;  // Show loading spinner or message
+        await getNodeList();
+      } catch (error) {
+        console.error("Failed to fetch data:", error);
+        // Handle errors, e.g., show an error message
+      } finally {
+        state.loading = false;  // Hide loading spinner or message
+      }
+    });
 
     const formState = reactive({
         id: 0,
@@ -363,6 +391,7 @@ export default defineComponent({
         host: "",
         port: 22,
         url:  "",
+        UrlRecover: "",
         pingType: undefined,
         isedit : false,
         urlstatus: 0,
@@ -396,6 +425,7 @@ export default defineComponent({
         "host" : toRaw(formState).host,
         "port" : toRaw(formState).port,
         "url"  : toRaw(formState).url,
+        "url_recover" : toRaw(formState).UrlRecover,
         "pingType": toRaw(formState).pingType,
         "urlstatus": toRaw(formState).urlstatus,
         "isNotice": toRaw(formState).isNotice,
@@ -416,6 +446,7 @@ export default defineComponent({
       formState.host = record.host
       formState.port = record.port
       formState.url = record.url
+      formState.UrlRecover = record.UrlRecover
       formState.pingType = record.pingType
       formState.urlstatus = record.urlstatus
       formState.sshusername = record.Sshusername
@@ -428,13 +459,14 @@ export default defineComponent({
     }
 
     const  showAddNode = () => {
+      formState.isedit = false
       formState.name = ""
       formState.host = ""
       formState.port = 22
       formState.url = ""
+      formState.UrlRecover = ""
       formState.pingType = undefined
       formState.urlstatus = 0
-      formState.isedit = false
       formState.sshpassword = ""
       formState.sshcommand = ""
       formState.sshusername = ""
@@ -469,6 +501,14 @@ export default defineComponent({
     }
 
 
+    function extractIpFromUrl(url: string): string | null {
+      const ipRegex = /(\b25[0-5]\b|\b2[0-4][0-9]\b|\b[0-1]?[0-9]?[0-9]\b)\.(\b25[0-5]\b|\b2[0-4][0-9]\b|\b[0-1]?[0-9]?[0-9]\b)\.(\b25[0-5]\b|\b2[0-4][0-9]\b|\b[0-1]?[0-9]?[0-9]\b)\.(\b25[0-5]\b|\b2[0-4][0-9]\b|\b[0-1]?[0-9]?[0-9]\b)/;
+      const match = url.match(ipRegex);
+      return match ? match[0] : null;
+    }
+
+
+
     return{
 
       onDeleteALlNode,

+ 3 - 1
vite.config.ts

@@ -6,6 +6,7 @@ function pathResolve(dir: string) {
   return resolve(__dirname, '.', dir);
 }
 
+ 
 // module.exports = {
 //   devServer: {
 //       proxy: {
@@ -26,6 +27,7 @@ export default defineConfig({
 
 
   plugins: [vue()], // 配置需要使用的插件列表
+  
   resolve: {
     alias: {
       "/@/": pathResolve("src")+'/', // 这里是将src目录配置别名为 /@ 方便在项目中导入src目录下的文件
@@ -36,7 +38,7 @@ export default defineConfig({
     port: 3000,
     proxy: {
       '/api': {
-        target: 'http://127.0.0.1:8080',	//实际请求地址
+        target: 'http://127.0.0.1:8080/',	//实际请求地址
         changeOrigin: true,
         ws: true,
         rewrite: (path) => path.replace(/^\/api/, '')