Selaa lähdekoodia

添加服务器执行指令

DESKTOP-NE65RNK\Citrus_limon 1 vuosi sitten
vanhempi
commit
e71eb3828a

+ 6 - 0
src/api/index.ts

@@ -180,6 +180,12 @@ export const test_connect_server = (params: any, callback: any) => {
     if (data) callback && callback(data);
   });
 };
+// 服务器管理-执行指令
+export const run_execut_server = (params: any, callback: any) => {
+  return http.request("/userServer/execute", "post", params).then((data) => {
+    if (data) callback && callback(data);
+  });
+};
 // 服务器管理-删除服务器
 export const delete_server = (params: any, callback: any) => {
   return http.request("/userServer/delete", "post", params).then((data) => {

+ 1 - 0
src/utils/request.ts

@@ -78,6 +78,7 @@ class HttpRequest {
       .then((data) => data)
       .catch((err) => {
         console.log(err);
+        return err;
       });
   }
 }

+ 85 - 0
src/views/server/manage/components/Command.vue

@@ -0,0 +1,85 @@
+<template>
+  <lay-layer :title="modelConfig.title" v-model="modelConfig.visible" :area="['500px', '450px']" :btn="operator">
+    <div style="padding: 20px">
+      <lay-form :model="modelParams" ref="modelFormRef" required>
+        <lay-form-item label="执行指令" prop="commandId">
+          <lay-select v-model="modelParams.commandId">
+            <lay-select-option v-for="item in commandList" :value="item.instructId" :label="item.title" />
+          </lay-select>
+        </lay-form-item>
+      </lay-form>
+    </div>
+  </lay-layer>
+</template>
+
+<script lang="ts" setup>
+import { ref, reactive, getCurrentInstance } from "vue";
+import { run_execut_server, get_instruct_list_all } from "@/api";
+
+const { proxy }: any = getCurrentInstance();
+
+interface ModelConfig {
+  title: string;
+  visible: boolean;
+  isUpdate: boolean;
+  loading: boolean;
+}
+interface ModelParams {
+  commandId?: string;
+}
+
+let modelParams = ref<ModelParams>({});
+let modelConfig: ModelConfig = reactive({ title: "", visible: false, isUpdate: false, loading: false });
+
+let handleResult = reactive<{ resolve?: any; reject?: any }>({});
+
+let commandList = ref();
+let userServerId = ref();
+
+const show = (params?: any) => {
+  get_instruct_list();
+  modelConfig.visible = true;
+  modelConfig.title = "执行指令";
+  userServerId.value = params;
+  modelParams.value = {};
+  return new Promise(async (resolve, reject) => {
+    handleResult.resolve = resolve;
+    handleResult.reject = reject;
+  });
+};
+
+const get_instruct_list = () => {
+  const params = {};
+  get_instruct_list_all(params, (data: any) => {
+    if (data.code == 200) {
+      commandList.value = data.data;
+    }
+  });
+};
+
+const operator = reactive([
+  {
+    text: "执行",
+    callback: () => {
+      const params = { serverList: userServerId.value, ...modelParams.value };
+      modelConfig.loading = true;
+      run_execut_server(params, (data: any) => {
+        modelConfig.loading = false;
+        if (data.code == 200) {
+          proxy.$message("执行成功!");
+          modelConfig.visible = false;
+          handleResult.resolve(true);
+        }
+      });
+    },
+  },
+  {
+    text: "取消",
+    callback: () => {
+      modelConfig.visible = false;
+      handleResult.resolve(false);
+    },
+  },
+]);
+defineExpose({ show });
+</script>

+ 1 - 1
src/views/server/manage/components/Pem.vue

@@ -59,7 +59,7 @@ interface TablePage {
 }
 const tablePage: TablePage = reactive({ current: 1, limit: 10, total: 0 });
 const columns = ref([
-  { title: "版本名称", key: "name" },
+  { title: "PEM名称", key: "name" },
   { title: "状态", key: "status", customSlot: "status" },
   { title: "备注", key: "remark" },
   {

+ 31 - 3
src/views/server/manage/index.vue

@@ -5,6 +5,7 @@
     </template>
     <template v-slot:extra>
       <lay-button class="card-button" v-if="apiList?.includes('/serverAuth/getPage')" @click="handlePem()">PEM管理</lay-button>
+      <lay-button class="card-button" v-if="apiList?.includes('/serverAuth/getPage')" @click="handleCommand()">批量执行指令</lay-button>
       <lay-button class="card-button" v-if="apiList?.includes('/userServer/save')" @click="handleBatch()">批量添加服务器</lay-button>
       <lay-button class="card-button" v-if="apiList?.includes('/userServer/save')" @click="handleUpdate(0)">添加服务器</lay-button>
     </template>
@@ -21,13 +22,23 @@
         </lay-form>
       </div>
       <div>
-        <lay-table :page="tablePage" :columns="columns" resize :data-source="dataSource" :loading="pageConfig.loading" @change="handleCurrentChange">
+        <lay-table
+          :page="tablePage"
+          :columns="columns"
+          resize
+          id="userServerId"
+          :data-source="dataSource"
+          v-model:selected-keys="selectedKeys"
+          :loading="pageConfig.loading"
+          @change="handleCurrentChange"
+        >
           <template v-slot:status="{ row }">
             {{ row.status ? "启用" : "禁用" }}
           </template>
           <template v-slot:operator="{ row }">
             <lay-space>
               <TableButton v-if="apiList?.includes('/userServer/testConnect')" text="测试连接" @click="handleTest(row)" />
+              <TableButton v-if="apiList?.includes('/userServer/delete')" text="指令" @click="handleCommand(row)" />
               <TableButton v-if="apiList?.includes('/userServer/update')" text="编辑" @click="handleUpdate(1, row)" />
               <TableButton v-if="apiList?.includes('/userServer/save')" text="复制" @click="handleUpdate(2, row)" />
               <TableButton v-if="apiList?.includes('/userServer/delete')" type="danger" text="删除" @click="handleDelete(row)" />
@@ -40,6 +51,7 @@
   <Update ref="updateRef" />
   <Batch ref="batchRef" />
   <Pem ref="pemRef" />
+  <Command ref="commandRef" />
 </template>
 
 <script lang="ts" setup name="ServerManage">
@@ -47,6 +59,7 @@ import { ref, reactive, getCurrentInstance } from "vue";
 import Pem from "./components/Pem.vue";
 import Update from "./components/Update.vue";
 import Batch from "./components/Batch.vue";
+import Command from "./components/Command.vue";
 import TableButton from "@/components/TableButton.vue";
 import { get_server_list, delete_server, test_connect_server } from "@/api";
 
@@ -54,6 +67,7 @@ const { proxy }: any = getCurrentInstance();
 const updateRef = ref();
 const batchRef = ref();
 const pemRef = ref();
+const commandRef = ref();
 
 const apiList = ref(window.sessionStorage.getItem("_4L_API_LIST"));
 
@@ -79,12 +93,13 @@ interface TablePage {
 }
 const tablePage: TablePage = reactive({ current: 1, limit: 10, total: 0 });
 const columns = ref([
+  { title: "选项", width: "44px", type: "checkbox" },
   { title: "名称", key: "name" },
-  { title: "IP", key: "ipAddrComplex" },
+  { title: "IP", width: "120px", key: "ipAddrComplex" },
   { title: "端口号", width: "80px", key: "portComplex" },
   { title: "状态", width: "80px", key: "status", customSlot: "status" },
   { title: "备注", key: "remark", ellipsisTooltip: true },
-  { title: "更新时间", key: "updateTime" },
+  { title: "更新时间", width: "160px", key: "updateTime" },
   {
     title: "操作",
     customSlot: "operator",
@@ -93,6 +108,7 @@ const columns = ref([
   },
 ]);
 let dataSource = ref([]);
+let selectedKeys = ref([]);
 
 // 请求交易所列表
 const getPageInfo = (isSearch?: boolean) => {
@@ -123,10 +139,22 @@ const handleUpdate = async (type: number, value?: any) => {
   if (result) getPageInfo();
 };
 
+const handleCommand = async (value?: any) => {
+  let userServerId;
+  if (value) {
+    userServerId = [value.userServerId];
+  } else {
+    userServerId = selectedKeys.value
+  }
+  await commandRef.value.show(userServerId);
+};
+
 // 测试连接
 const handleTest = async (value: any) => {
   let params = { ...value };
+  pageConfig.loading = true;
   test_connect_server(params, (data: any) => {
+    pageConfig.loading = false;
     if (data.code == 200) {
       proxy.$message(`连接成功!`);
     }