فهرست منبع

新增日志管理功能

jingyuanchao 1 سال پیش
والد
کامیت
b05f80516d
3فایلهای تغییر یافته به همراه583 افزوده شده و 0 حذف شده
  1. 28 0
      src/api/system/logManagement.js
  2. 128 0
      src/views/system/logManagement/dialog.info.vue
  3. 427 0
      src/views/system/logManagement/index.vue

+ 28 - 0
src/api/system/logManagement.js

@@ -0,0 +1,28 @@
+import request from '@/utils/request'
+
+// 查询看门猫列表
+export function listData(query) {
+  return request({
+    url: '/system/server/list',
+    method: 'get',
+    params: query
+  })
+}
+
+
+// 查询看门猫详细
+export function detail(id) {
+  return request({
+    url: '/system/server/' + id,
+    method: 'get'
+  })
+}
+
+// 新增服务器信息
+export function edit(data) {
+  return request({
+    url: '/system/server',
+    method: 'post',
+    data: data
+  })
+}

+ 128 - 0
src/views/system/logManagement/dialog.info.vue

@@ -0,0 +1,128 @@
+<template>
+  <div class="edu-training-edit">
+    <DialogCom title="演练范本详情" :visible.sync="isShow" width="1000px" append-to-body>
+      <div class="page-body">
+        <el-descriptions
+          class="contentArea"
+          :column="1"
+          size="medium"
+          border
+          :contentStyle="content_style"
+          :label-style="labelStyle"
+        >
+          <el-descriptions-item labelClassName="gx_info_label" label="演练类型">
+            {{
+              getLabel(dict.type.core_drill_type, formData.drillType, "未知")
+            }}
+          </el-descriptions-item>
+          <el-descriptions-item labelClassName="gx_info_label" label="演练场景">
+            {{ formData.drillProjects }}
+          </el-descriptions-item>
+          <el-descriptions-item
+            labelClassName="gx_info_label"
+            span="2"
+            label="预设案由"
+          >
+            <p class="text-content text_nbsp"> {{ formData.defaultCause }}</p>
+          </el-descriptions-item>
+        </el-descriptions>
+      </div>
+
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="onHide">关闭</el-button>
+      </div>
+    </DialogCom>
+  </div>
+</template>
+
+<script>
+import { mapState, mapMutations } from "vuex";
+import { getDrillDictionary } from "@/api/core/drill/drillDictionary";
+import { getLabel } from "@/views/commonOption";
+export default {
+  components: { },
+  dicts: ["drill_task_status", "core_drill_type"],
+  data() {
+    const params = this.$route.params;
+    return {
+      id: params ? params.id : null,
+      isShow: false,
+      formData: this.reset(),
+      drillTypeOptions: [],
+      formFileListDefualtValue: [],
+      labelStyle: {
+        color: "#000",
+        "text-align": "center",
+        height: "40px",
+        "min-width": "150px",
+        "word-break": "keep-all",
+      },
+      content_style: {
+        "text-align": "left",
+        "min-width": "300px",
+        "word-break": "break-all",
+      },
+      iconClasses: ["icon-rate-face-1", "icon-rate-face-2", "icon-rate-face-3"], // 等同于 { 2: 'icon-rate-face-1', 4: { value: 'icon-rate-face-2', excluded: true }, 5: 'icon-rate-face-3' }
+    };
+  },
+  props: {},
+  watch: {},
+  computed: {
+    ...mapState(["loginUser"]),
+  },
+  methods: {
+    ...mapMutations([]),
+    getLabel,
+    reset(other = {}) {
+      return {
+        id: null,
+        drillType: null,
+        defaultCause: null,
+        drillProjects: null,
+        ...other,
+      };
+    },
+    async refresh(id, other) {
+      if (!id) {
+        this.reset(other);
+      } else {
+        getDrillDictionary(id).then((response) => {
+          this.formData = response.data;
+          this.loading = false;
+      });
+        // getDrillTask(id).then((response) => {
+        //   this.formData = response.data;
+        //   this.formFileListDefualtValue = response.data.fileList;
+        //   this.formData.signImageList = this.getSingImageList();
+        //   this.loading = false;
+        // });
+      }
+    },
+    async show(id, other = {}) {
+      this.id = id;
+      await this.refresh(id, other);
+      this.isShow = true;
+    },
+    // 事件
+    onHide() {
+      this.isShow = false;
+    },
+    initDrillTypeOptions() {
+      initList().then((response) => {
+        this.drillTypeOptions = response;
+      });
+    },
+    // 事件
+    //apimark//
+  },
+  mounted() {},
+};
+</script>
+
+<style lang="scss" scoped>
+.text-content{
+  margin: 0;
+  max-height: 500px;
+  overflow: auto;
+}
+</style>

+ 427 - 0
src/views/system/logManagement/index.vue

@@ -0,0 +1,427 @@
+<template>
+  <div class="app-container">
+    <el-row :gutter="10">
+      <!--机构数据-->
+      <!-- <el-col :span="4" :xs="24">
+        <org-tree v-model="queryParams.orgId" @defaultKey="getDefaultKey" @checkChange="checkChange"
+                  @click="clickTreeNode" wholeTree></org-tree>
+      </el-col> -->
+      <el-col :span="24" :xs="24">
+        <div class="main-right-box">
+          <div class="main-search-box">
+            <el-form
+              :model="queryParams"
+              ref="queryForm"
+              size="small"
+              :inline="true"
+              v-show="showSearch"
+            >
+              <!-- <el-form-item label="编号" prop="id">
+            <el-input v-model="queryParams.id" placeholder="请输入编号" clearable
+                      @keyup.enter.native="handleQuery"/>
+          </el-form-item> -->
+              <el-form-item label="机构名称">
+                <org-tree
+                  v-model="queryParams.orgId"
+                  @defaultKey="getDefaultKey"
+                  @checkChange="checkChange"
+                  @click="clickTreeNode"
+                  wholeTree
+                  ref="orgTree"
+                ></org-tree>
+              </el-form-item>
+              <el-form-item label="服务器名称" prop="serverName">
+                <el-input
+                  v-model="queryParams.serverName"
+                  placeholder="请输入关键字"
+                  clearable
+                  @keyup.enter.native="handleQuery"
+                />
+              </el-form-item>
+
+              <!-- <el-form-item>
+
+          </el-form-item> -->
+            </el-form>
+
+            <el-row :gutter="10">
+              <el-col :span="1.5">
+                <el-button
+                  type="primary"
+                  icon="el-icon-search"
+                  size="mini"
+                  @click="handleQuery"
+                >搜索
+                </el-button
+                >
+              </el-col>
+              <el-col :span="1.5">
+                <el-button
+                  type="primary"
+                  icon="el-icon-refresh"
+                  size="mini"
+                  @click="resetQuery"
+                >重置
+                </el-button
+                >
+              </el-col>
+              <el-col :span="1.5">
+                <el-button
+                  type="primary"
+                  icon="el-icon-plus"
+                  size="mini"
+                  @click="handleAdd"
+                  v-hasPermi="['core:drillDictionary:add']"
+                >新增服务器信息
+                </el-button>
+              </el-col>
+              <!--          <el-col :span="1.5">
+            <el-button
+              type="warning"
+              plain
+              icon="el-icon-download"
+              size="mini"
+              @click="handleExport"
+              v-hasPermi="['core:drillDictionary:export']"
+            >导出
+            </el-button>
+          </el-col>-->
+              <right-toolbar
+                :showSearch.sync="showSearch"
+                @queryTable="getList"
+              ></right-toolbar>
+            </el-row>
+          </div>
+          <el-table
+            border
+            height="646"
+            size="small"
+            v-loading="loading"
+            :data="serverDataList"
+            @selection-change="handleSelectionChange"
+          >
+            <el-table-column type="index" label="序号" align="center" width="100" prop="no">
+              <template slot-scope="scope">
+                {{
+                  (queryParams.pageNum - 1) * queryParams.pageSize +
+                  scope.$index +
+                  1
+                }}
+              </template>
+            </el-table-column>
+            <el-table-column label="服务器名称" align="center" prop="serverName"/>
+            <el-table-column label="服务器Ip" align="center" prop="serverIp"/>
+            <el-table-column label="服务器端口" align="center" prop="serverPort"/>
+            <el-table-column label="备注" align="center" prop="remark"/>
+            <el-table-column label="修改时间" align="center" prop="updateTime"/>
+
+            <el-table-column
+              label="操作"
+              align="center"
+              width="200"
+              class-name="small-padding fixed-width"
+            >
+              <template slot-scope="scope">
+                <!--                <el-button
+                                  size="mini"
+                                  type="text"
+                                  icon="el-icon-view"
+                                  @click="handleDetail(scope.row.id)"
+                                  v-hasPermi="['core:drillDictionary:query']"
+                                  >详情
+                                </el-button>-->
+                <el-button
+                  size="mini"
+                  type="text"
+                  icon="el-icon-edit-outline"
+                  @click="handleUpdate(scope.row)"
+                  v-hasPermi="['core:drillDictionary:edit']"
+                >编辑
+                </el-button>
+                <el-button
+                  size="mini"
+                  type="text"
+                  icon="el-icon-delete"
+                  @click="handleDelete(scope.row)"
+                  v-hasPermi="['core:drillDictionary:remove']"
+                >删除
+                </el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+
+          <pagination
+            v-show="total > 0"
+            :total="total"
+            :page.sync="queryParams.pageNum"
+            :limit.sync="queryParams.pageSize"
+            @pagination="getList"
+          />
+        </div>
+      </el-col>
+    </el-row>
+    <!-- 添加或修改预案演练库对话框 -->
+    <DialogCom
+      :title="title"
+      :visible.sync="open"
+      width="450px"
+      append-to-body
+      :close="cancel"
+    >
+      <el-form ref="form" :model="form" :rules="rules" label-width="130px">
+
+        <el-form-item label="服务器名称" prop="serverName">
+          <el-input v-model="form.serverName" maxlength="50" placeholder="请输入服务器名称"/>
+        </el-form-item>
+
+        <el-form-item label="服务器Ip" prop="serverIp">
+          <el-input v-model="form.serverIp" maxlength="50" placeholder="请输入服务器Ip"/>
+        </el-form-item>
+
+        <el-form-item label="服务器端口" prop="serverPort">
+          <el-input v-model="form.serverPort" maxlength="50" placeholder="请输入服务器端口"/>
+        </el-form-item>
+
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" maxlength="100" placeholder="请输入备注"/>
+        </el-form-item>
+
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </DialogCom>
+    <dialog-info ref="infoDialog" @success="handleQuery()"></dialog-info>
+  </div>
+</template>
+
+<script>
+import {detail, edit, listData,} from "@/api/system/logManagement";
+import OrgTree from "@/components/orgTree/orgQuerySelector.vue";
+import BtnTip from "@/components/btnTip";
+import tableList from "@/mixins/tableList";
+import {queryKnowledgeList} from "@/api/core/edu/knowledge";
+import KTextarea from "@/components/common/textarea.vue";
+import {mapGetters} from "vuex";
+import DialogInfo from "./dialog.info";
+
+export default {
+  name: "DrillDictionary",
+  components: {OrgTree, BtnTip, KTextarea, DialogInfo},
+  dicts: ["core_drill_type", "core_drill_category"],
+  mixins: [tableList],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个停用
+      single: true,
+      // 非多个停用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 表格数据
+      serverDataList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        serverName: null,
+        checkSub: true,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        serverName: [{required: true, message: "请选择服务器名称"}],
+        serverIp: [
+          {required: true, message: '请输入服务器Ip', trigger: 'blur'},
+          {validator: this.validateIp, trigger: 'blur'}
+        ],
+        serverPort: [
+          {required: true, message: '请输入服务器端口', trigger: 'blur'},
+          {validator: this.validatePort, trigger: 'blur'}
+        ],
+      },
+    };
+  },
+  computed: {
+    ...mapGetters(["orgId"]),
+  },
+  created() {
+    // this.getList();
+  },
+  methods: {
+    validateIp(rule, value, callback) {
+      if (!value) {
+        return callback(new Error('请输入服务Ip'));
+      }
+      const ipRegex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
+      if (!ipRegex.test(value)) {
+        callback(new Error('服务Ip格式不正确'));
+      } else {
+        callback();
+      }
+    },
+    validatePort(rule, value, callback) {
+      if (!value) {
+        return callback(new Error('请输入服务端口'));
+      }
+      const port = parseInt(value, 10);
+      if (isNaN(port)) {
+        callback(new Error('服务端口必须是一个数字'));
+      } else if (port < 1 || port > 65535) {
+        callback(new Error('服务端口必须在1到65535之间'));
+      } else {
+        callback();
+      }
+    },
+    /** 查询预案演练库列表 */
+    getList() {
+      this.loading = true;
+      listData(this.queryParams).then((response) => {
+        this.serverDataList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        serverIp: null,
+        serverPort: null,
+        serverName: null,
+      };
+      this.resetForm("form");
+    },
+    getDefaultKey(key) {
+      this.queryParams.orgId = key;
+      this.getList();
+    },
+    //单选框状态改变
+    checkChange(state) {
+      this.queryParams.checkSub = state;
+      this.handleQuery();
+    },
+
+    // 节点单击事件
+    clickTreeNode(data) {
+      this.queryParams.orgId = data.id;
+      this.handleQuery();
+    },
+    initKnowledgeList() {
+      queryKnowledgeList().then((response) => {
+        this.knowledgeList = response;
+      });
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.$refs["orgTree"].setSelectTop();
+      this.queryParams.checkSub = true;
+      this.$refs["orgTree"].setCheckSub(this.queryParams.checkSub)
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map((item) => item.id);
+      this.single = selection.length !== 1;
+      this.multiple = !selection.length;
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "新增服务器信息";
+    },
+    canEdit(row) {
+      return row.orgId == this.$store.getters.orgId;
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids;
+      detail(id).then((response) => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "编辑服务器信息";
+      });
+    },
+    handleDetail(id) {
+      this.$refs["infoDialog"].show(id, {});
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate((valid) => {
+        if (valid) {
+          edit(this.form).then((response) => {
+            if (this.form.id != null) {
+              this.$modal.msgSuccess("修改成功");
+            } else {
+              this.$modal.msgSuccess("新增成功");
+            }
+            this.open = false;
+            this.getList();
+          });
+        }
+      });
+    },
+    canDelete(row) {
+      return row.orgId == this.$store.getters.orgId;
+    },
+
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal
+        .confirm("是否确认删除?")
+        .then(function () {
+          return delDrillDictionary(ids);
+        })
+        .then(() => {
+          this.getList();
+          this.$modal.msgSuccess("删除成功");
+        })
+        .catch(() => {
+        });
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download(
+        "core/drillDictionary/export",
+        {
+          ...this.queryParams,
+        },
+        `drillDictionary_${new Date().getTime()}.xlsx`
+      );
+    },
+  },
+};
+</script>
+<style>
+.ellipsis {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+</style>