ソースを参照

views/devops/sys 中添加 SysUpdate.vue 页面, 用于部署 devops 应用

reghao 2 ヶ月 前
コミット
c053c0b545
2 ファイル変更296 行追加0 行削除
  1. 9 0
      src/router/background_devops.js
  2. 287 0
      src/views/devops/sys/SysUpdate.vue

+ 9 - 0
src/router/background_devops.js

@@ -30,6 +30,7 @@ const AppConfig = () => import('views/devops/app/AppConfig')
 const BuildDeploy = () => import('views/devops/app/BuildDeploy')
 const AppStat = () => import('views/devops/app/AppStat')
 // sys
+const SysUpdate = () => import('views/devops/sys/SysUpdate')
 const SiteConfig = () => import('views/devops/sys/SiteConfig')
 const Webhook = () => import('views/devops/sys/Webhook')
 
@@ -251,6 +252,14 @@ export default {
       component: { render: (e) => e('router-view') },
       meta: { needAuth: true, roles: ['devops_admin'] },
       children: [
+        {
+          path: '/bg/sys/update',
+          name: 'SysUpdate',
+          title: '系统更新',
+          icon: 'el-icon-user-solid',
+          component: SysUpdate,
+          meta: { needAuth: true, roles: ['devops_admin'] }
+        },
         {
           path: '/bg/sys/site',
           name: 'SiteConfig',

+ 287 - 0
src/views/devops/sys/SysUpdate.vue

@@ -0,0 +1,287 @@
+<template>
+  <el-container>
+    <el-header height="220">
+      <h3>系统更新</h3>
+    </el-header>
+    <el-main>
+      <el-row>
+        <el-col :md="12" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
+          <el-card class="box-card">
+            <div slot="header" class="clearfix">
+              <span>devops-mgr</span>
+              <el-button style="float: right; padding: 3px 0" type="text" @click="handleAdd">添加</el-button>
+            </div>
+            <div class="text item">
+              <el-table
+                :data="mgrList"
+                border
+                height="480"
+                style="width: 100%"
+              >
+                <el-table-column
+                  prop="machineIpv4"
+                  label="机器地址"
+                />
+                <el-table-column
+                  prop="bootTime"
+                  label="应用目录"
+                />
+                <el-table-column
+                  prop="status"
+                  label="当前状态"
+                >
+                  <template slot-scope="scope">
+                    <el-tag v-if="scope.row.status === 'Online'" :type="'success'" disable-transitions>
+                      <span>在线</span>
+                    </el-tag>
+                    <el-tag v-else-if="scope.row.status === 'Offline'" :type="'danger'" disable-transitions>
+                      <span>离线</span>
+                    </el-tag>
+                    <el-tag v-else :type="'warning'" disable-transitions>
+                      <span>弃用</span>
+                    </el-tag>
+                  </template>
+                </el-table-column>
+                <el-table-column
+                  prop="agentVersion"
+                  label="Agent 版本"
+                />
+              </el-table>
+            </div>
+          </el-card>
+        </el-col>
+        <el-col :md="12" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
+          <el-card class="box-card">
+            <div slot="header" class="clearfix">
+              <span>devops-agent</span>
+              <el-button style="float: right; padding: 3px 0" type="text" @click="getData">刷新</el-button>
+            </div>
+            <div class="text item">
+              <el-table
+                :data="agentList"
+                border
+                height="480"
+                style="width: 100%"
+              >
+                <el-table-column
+                  prop="machineIpv4"
+                  label="机器地址"
+                />
+                <el-table-column
+                  prop="bootTime"
+                  label="启动时间"
+                />
+                <el-table-column
+                  prop="status"
+                  label="当前状态"
+                >
+                  <template slot-scope="scope">
+                    <el-tag v-if="scope.row.status === 'Online'" :type="'success'" disable-transitions>
+                      <span>在线</span>
+                    </el-tag>
+                    <el-tag v-else-if="scope.row.status === 'Offline'" :type="'danger'" disable-transitions>
+                      <span>离线</span>
+                    </el-tag>
+                    <el-tag v-else :type="'warning'" disable-transitions>
+                      <span>弃用</span>
+                    </el-tag>
+                  </template>
+                </el-table-column>
+                <el-table-column
+                  prop="agentVersion"
+                  label="Agent 版本"
+                />
+                <el-table-column
+                  prop="env"
+                  label="所属环境"
+                />
+              </el-table>
+            </div>
+          </el-card>
+        </el-col>
+      </el-row>
+    </el-main>
+
+    <el-dialog
+      append-to-body
+      :visible.sync="showMgrDialog"
+      width="50%"
+      center
+    >
+      <div>
+        <el-button style="float: right; padding: 3px 0" type="text" @click="handleAdd">添加</el-button>
+        <el-table
+          :data="mgrList"
+          border
+          height="480"
+          style="width: 100%"
+        >
+          <el-table-column
+            prop="machineIpv4"
+            label="机器地址"
+          />
+          <el-table-column
+            prop="bootTime"
+            label="启动时间"
+          />
+          <el-table-column
+            prop="status"
+            label="当前状态"
+          >
+            <template slot-scope="scope">
+              <el-tag v-if="scope.row.status === 'Online'" :type="'success'" disable-transitions>
+                <span>在线</span>
+              </el-tag>
+              <el-tag v-else-if="scope.row.status === 'Offline'" :type="'danger'" disable-transitions>
+                <span>离线</span>
+              </el-tag>
+              <el-tag v-else :type="'warning'" disable-transitions>
+                <span>弃用</span>
+              </el-tag>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="agentVersion"
+            label="Agent 版本"
+          />
+          <el-table-column
+            prop="env"
+            label="所属环境"
+          />
+        </el-table>
+      </div>
+    </el-dialog>
+    <el-dialog
+      append-to-body
+      :visible.sync="showAddDialog"
+      width="50%"
+      center
+    >
+      <div>
+        <el-form :model="addForm" label-width="80px">
+          <el-form-item label="主机地址">
+            <el-input v-model="addForm.host" style="width: 70%; padding-right: 2px" />
+          </el-form-item>
+          <el-form-item label="SSH 端口">
+            <el-input v-model="addForm.port" style="width: 70%; padding-right: 2px" />
+          </el-form-item>
+          <el-form-item label="认证方式" style="width: 70%; padding-right: 2px">
+            <el-select v-model="addForm.authType" placeholder="选择认证方式">
+              <el-option label="密码认证" value="password" />
+              <el-option label="私钥认证" value="privateKey" />
+            </el-select>
+          </el-form-item>
+          <div v-if="addForm.authType === 'password'">
+            <el-form-item label="用户名" style="width: 70%; padding-right: 2px">
+              <el-input v-model="addForm.username" style="width: 70%; padding-right: 2px" />
+            </el-form-item>
+            <el-form-item label="密码" style="width: 70%; padding-right: 2px">
+              <el-input v-model="addForm.password" style="width: 70%; padding-right: 2px" />
+            </el-form-item>
+          </div>
+          <div v-else>
+            <el-form-item label="私钥" style="width: 70%; padding-right: 2px">
+              <el-input
+                v-model="addForm.rsaPrikey"
+                type="textarea"
+                maxlength="10000"
+                :rows="10"
+                style="padding: 5px"
+              />
+            </el-form-item>
+          </div>
+          <el-form-item label="应用目录">
+            <el-input v-model="addForm.appDir" style="width: 70%; padding-right: 2px" />
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="onAdd">确定</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+    </el-dialog>
+    <!-- 视频预览对话框 -->
+    <el-dialog
+      title="预览视频"
+      append-to-body
+      :visible.sync="showPreviewDialog"
+      width="70%"
+      center
+    >
+      <template />
+    </el-dialog>
+  </el-container>
+</template>
+
+<script>
+export default {
+  name: 'SysUpdate',
+  data() {
+    return {
+      queryInfo: {
+        scope: null,
+        pn: 1
+      },
+      // 屏幕宽度, 为了控制分页条的大小
+      screenWidth: document.body.clientWidth,
+      currentPage: 1,
+      pageSize: 10,
+      totalSize: 0,
+      dataList: [],
+      nextId: 0,
+      // **********************************************************************
+      mgrList: [],
+      agentList: [],
+      // **********************************************************************
+      showAddDialog: false,
+      addForm: {
+        host: '',
+        port: 22,
+        authType: 'password',
+        username: '',
+        password: '',
+        rsaPrikey: '',
+        appDir: ''
+      },
+      // **********************************************************************
+      showPreviewDialog: false,
+      form: {
+        videoId: null,
+        scope: 1
+      },
+      videoResources: [],
+      publishVideoDiaglog: false
+    }
+  },
+  created() {
+    document.title = '系统更新'
+  },
+  methods: {
+    getData() {
+      this.dataList = []
+    },
+    onRefresh() {
+      this.getData()
+    },
+    handleAdd() {
+      this.showAddDialog = true
+    },
+    onAdd() {
+      this.showAddDialog = false
+    },
+    handlePreview(index, row) {
+    },
+    handleEdit(index, row) {
+      const path = '/post/video/edit/' + row.videoId
+      this.$router.push(path)
+    },
+    onSelectChange() {
+      this.$message.info(this.queryInfo)
+    },
+    handleClose() {
+    }
+  }
+}
+</script>
+
+<style>
+</style>