Переглянути джерело

Merge branch 'master' of http://47.108.150.237:10000/allen/kgraph-ui

wcf 2 роки тому
батько
коміт
902451f1ed

+ 44 - 0
src/api/knowledge/class.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询实体类管理列表
+export function listClass(query) {
+  return request({
+    url: '/knowledge/class/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询实体类管理详细
+export function getClass(entClsId) {
+  return request({
+    url: '/knowledge/class/' + entClsId,
+    method: 'get'
+  })
+}
+
+// 新增实体类管理
+export function addClass(data) {
+  return request({
+    url: '/knowledge/class',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改实体类管理
+export function updateClass(data) {
+  return request({
+    url: '/knowledge/class',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除实体类管理
+export function delClass(entClsId) {
+  return request({
+    url: '/knowledge/class/' + entClsId,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/knowledge/classAttribute.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询实体类属性列表
+export function listClassAttribute(query) {
+  return request({
+    url: '/knowledge/classAttribute/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询实体类属性详细
+export function getClassAttribute(attrClsId) {
+  return request({
+    url: '/knowledge/classAttribute/' + attrClsId,
+    method: 'get'
+  })
+}
+
+// 新增实体类属性
+export function addClassAttribute(data) {
+  return request({
+    url: '/knowledge/classAttribute',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改实体类属性
+export function updateClassAttribute(data) {
+  return request({
+    url: '/knowledge/classAttribute',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除实体类属性
+export function delClassAttribute(attrClsId) {
+  return request({
+    url: '/knowledge/classAttribute/' + attrClsId,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/knowledge/classRelation.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询实体类关系管理列表
+export function listClassRelation(query) {
+  return request({
+    url: '/knowledge/classRelation/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询实体类关系管理详细
+export function getClassRelation(relClsId) {
+  return request({
+    url: '/knowledge/classRelation/' + relClsId,
+    method: 'get'
+  })
+}
+
+// 新增实体类关系管理
+export function addClassRelation(data) {
+  return request({
+    url: '/knowledge/classRelation',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改实体类关系管理
+export function updateClassRelation(data) {
+  return request({
+    url: '/knowledge/classRelation',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除实体类关系管理
+export function delClassRelation(relClsId) {
+  return request({
+    url: '/knowledge/classRelation/' + relClsId,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/knowledge/entity.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询实体管理列表
+export function listEntity(query) {
+  return request({
+    url: '/knowledge/entity/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询实体管理详细
+export function getEntity(entId) {
+  return request({
+    url: '/knowledge/entity/' + entId,
+    method: 'get'
+  })
+}
+
+// 新增实体管理
+export function addEntity(data) {
+  return request({
+    url: '/knowledge/entity',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改实体管理
+export function updateEntity(data) {
+  return request({
+    url: '/knowledge/entity',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除实体管理
+export function delEntity(entId) {
+  return request({
+    url: '/knowledge/entity/' + entId,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/knowledge/entityAttribute.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询实体属性管理列表
+export function listEntityAttribute(query) {
+  return request({
+    url: '/knowledge/entityAttribute/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询实体属性管理详细
+export function getEntityAttribute(attrId) {
+  return request({
+    url: '/knowledge/entityAttribute/' + attrId,
+    method: 'get'
+  })
+}
+
+// 新增实体属性管理
+export function addEntityAttribute(data) {
+  return request({
+    url: '/knowledge/entityAttribute',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改实体属性管理
+export function updateEntityAttribute(data) {
+  return request({
+    url: '/knowledge/entityAttribute',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除实体属性管理
+export function delEntityAttribute(attrId) {
+  return request({
+    url: '/knowledge/entityAttribute/' + attrId,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/knowledge/entityRelation.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询实体关系管理列表
+export function listEntityRelation(query) {
+  return request({
+    url: '/knowledge/entityRelation/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询实体关系管理详细
+export function getEntityRelation(relId) {
+  return request({
+    url: '/knowledge/entityRelation/' + relId,
+    method: 'get'
+  })
+}
+
+// 新增实体关系管理
+export function addEntityRelation(data) {
+  return request({
+    url: '/knowledge/entityRelation',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改实体关系管理
+export function updateEntityRelation(data) {
+  return request({
+    url: '/knowledge/entityRelation',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除实体关系管理
+export function delEntityRelation(relId) {
+  return request({
+    url: '/knowledge/entityRelation/' + relId,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/ledger/major.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询专业列表
+export function listMajor(query) {
+  return request({
+    url: '/ledger/major/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询专业详细
+export function getMajor(id) {
+  return request({
+    url: '/ledger/major/' + id,
+    method: 'get'
+  })
+}
+
+// 新增专业
+export function addMajor(data) {
+  return request({
+    url: '/ledger/major',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改专业
+export function updateMajor(data) {
+  return request({
+    url: '/ledger/major',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除专业
+export function delMajor(id) {
+  return request({
+    url: '/ledger/major/' + id,
+    method: 'delete'
+  })
+}

+ 3 - 0
src/assets/styles/ruoyi.scss

@@ -284,5 +284,8 @@
 .el-form-item__label {
 	color: rgb(191, 203, 217);
 }
+.el-dialog__title {
+	color: #bfcbd9;
+}
 
 .el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color: transparent;}

+ 1 - 0
src/components/Hamburger/index.vue

@@ -36,6 +36,7 @@ export default {
   vertical-align: middle;
   width: 20px;
   height: 20px;
+  fill:#fff;
 }
 
 .hamburger.is-active {

+ 345 - 0
src/views/knowledge/class/index.vue

@@ -0,0 +1,345 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="实体类父节点ID" prop="pid">
+        <el-input
+          v-model="queryParams.pid"
+          placeholder="请输入实体类父节点ID"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="实体类名称" prop="entClsName">
+        <el-input
+          v-model="queryParams.entClsName"
+          placeholder="请输入实体类名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="图标id" prop="entClsIconId">
+        <el-input
+          v-model="queryParams.entClsIconId"
+          placeholder="请输入图标id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="实体类背景颜色" prop="backGroundColor">
+        <el-input
+          v-model="queryParams.backGroundColor"
+          placeholder="请输入实体类背景颜色"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否存在子类" prop="childCount">
+        <el-input
+          v-model="queryParams.childCount"
+          placeholder="请输入是否存在子类"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="待审属性节点个数" prop="noneCount">
+        <el-input
+          v-model="queryParams.noneCount"
+          placeholder="请输入待审属性节点个数"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否根节点" prop="isRoot">
+        <el-input
+          v-model="queryParams.isRoot"
+          placeholder="请输入是否根节点"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['knowledge:class:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['knowledge:class:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['knowledge:class:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['knowledge:class:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="classList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="实体类ID" align="center" prop="entClsID" />
+      <el-table-column label="实体类父节点ID" align="center" prop="pid" />
+      <el-table-column label="实体类名称" align="center" prop="entClsName" />
+      <el-table-column label="实体类描述" align="center" prop="entClsMemo" />
+      <el-table-column label="图标id" align="center" prop="entClsIconId" />
+      <el-table-column label="实体类背景颜色" align="center" prop="backGroundColor" />
+      <el-table-column label="实体类类型" align="center" prop="clsType" />
+      <el-table-column label="是否存在子类" align="center" prop="childCount" />
+      <el-table-column label="待审属性节点个数" align="center" prop="noneCount" />
+      <el-table-column label="允许的属性类型" align="center" prop="entClsAllowAttrType" />
+      <el-table-column label="是否根节点" align="center" prop="isRoot" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['knowledge:class:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['knowledge:class: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"
+    />
+
+    <!-- 添加或修改实体类管理对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="实体类父节点ID" prop="pid">
+          <el-input v-model="form.pid" placeholder="请输入实体类父节点ID" />
+        </el-form-item>
+        <el-form-item label="实体类名称" prop="entClsName">
+          <el-input v-model="form.entClsName" placeholder="请输入实体类名称" />
+        </el-form-item>
+        <el-form-item label="实体类描述" prop="entClsMemo">
+          <el-input v-model="form.entClsMemo" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="图标id" prop="entClsIconId">
+          <el-input v-model="form.entClsIconId" placeholder="请输入图标id" />
+        </el-form-item>
+        <el-form-item label="实体类背景颜色" prop="backGroundColor">
+          <el-input v-model="form.backGroundColor" placeholder="请输入实体类背景颜色" />
+        </el-form-item>
+        <el-form-item label="是否存在子类" prop="childCount">
+          <el-input v-model="form.childCount" placeholder="请输入是否存在子类" />
+        </el-form-item>
+        <el-form-item label="待审属性节点个数" prop="noneCount">
+          <el-input v-model="form.noneCount" placeholder="请输入待审属性节点个数" />
+        </el-form-item>
+        <el-form-item label="是否根节点" prop="isRoot">
+          <el-input v-model="form.isRoot" 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>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listClass, getClass, delClass, addClass, updateClass } from "@/api/knowledge/class";
+
+export default {
+  name: "Class",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 实体类管理表格数据
+      classList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        pid: null,
+        entClsName: null,
+        entClsMemo: null,
+        entClsIconId: null,
+        backGroundColor: null,
+        clsType: null,
+        childCount: null,
+        noneCount: null,
+        entClsAllowAttrType: null,
+        isRoot: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询实体类管理列表 */
+    getList() {
+      this.loading = true;
+      listClass(this.queryParams).then(response => {
+        this.classList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        entClsID: null,
+        pid: null,
+        entClsName: null,
+        entClsMemo: null,
+        entClsIconId: null,
+        backGroundColor: null,
+        clsType: null,
+        childCount: null,
+        noneCount: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        entClsAllowAttrType: null,
+        isRoot: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.entClsID)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加实体类管理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const entClsID = row.entClsID || this.ids
+      getClass(entClsID).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改实体类管理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.entClsID != null) {
+            updateClass(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addClass(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const entClsIDs = row.entClsID || this.ids;
+      this.$modal.confirm('是否确认删除实体类管理编号为"' + entClsIDs + '"的数据项?').then(function() {
+        return delClass(entClsIDs);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('knowledge/class/export', {
+        ...this.queryParams
+      }, `class_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 415 - 0
src/views/knowledge/classAttribute/index.vue

@@ -0,0 +1,415 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="属性类名称" prop="attrClsName">
+        <el-input
+          v-model="queryParams.attrClsName"
+          placeholder="请输入属性类名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="属性单位" prop="attrUnit">
+        <el-input
+          v-model="queryParams.attrUnit"
+          placeholder="请输入属性单位"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="实体类id" prop="entClsID">
+        <el-input
+          v-model="queryParams.entClsID"
+          placeholder="请输入实体类id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="属性类描述" prop="attrClsMemo">
+        <el-input
+          v-model="queryParams.attrClsMemo"
+          placeholder="请输入属性类描述"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="domainKey" prop="domainKey">
+        <el-input
+          v-model="queryParams.domainKey"
+          placeholder="请输入domainKey"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="domain" prop="domain">
+        <el-input
+          v-model="queryParams.domain"
+          placeholder="请输入domain"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="isPublic" prop="isPublic">
+        <el-input
+          v-model="queryParams.isPublic"
+          placeholder="请输入isPublic"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="最大值" prop="maxValue">
+        <el-input
+          v-model="queryParams.maxValue"
+          placeholder="请输入最大值"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="最小值" prop="minValue">
+        <el-input
+          v-model="queryParams.minValue"
+          placeholder="请输入最小值"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否可以为空" prop="notNull">
+        <el-input
+          v-model="queryParams.notNull"
+          placeholder="请输入是否可以为空"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="entUseCount" prop="entUseCount">
+        <el-input
+          v-model="queryParams.entUseCount"
+          placeholder="请输入entUseCount"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="isEdit" prop="isEdit">
+        <el-input
+          v-model="queryParams.isEdit"
+          placeholder="请输入isEdit"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['knowledge:classAttribute:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['knowledge:classAttribute:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['knowledge:classAttribute:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['knowledge:classAttribute:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="classAttributeList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="关系id" align="center" prop="attrClsID" />
+      <el-table-column label="属性类名称" align="center" prop="attrClsName" />
+      <el-table-column label="属性单位" align="center" prop="attrUnit" />
+      <el-table-column label="属性类型" align="center" prop="entAndAttrType" />
+      <el-table-column label="属性类型" align="center" prop="attrType" />
+      <el-table-column label="实体类id" align="center" prop="entClsID" />
+      <el-table-column label="属性类描述" align="center" prop="attrClsMemo" />
+      <el-table-column label="值类型 (TEXT) " align="center" prop="valueType" />
+      <el-table-column label="值类型 (TEXT) " align="center" prop="attrValueType" />
+      <el-table-column label="domainKey" align="center" prop="domainKey" />
+      <el-table-column label="domain" align="center" prop="domain" />
+      <el-table-column label="isPublic" align="center" prop="isPublic" />
+      <el-table-column label="最大值" align="center" prop="maxValue" />
+      <el-table-column label="最小值" align="center" prop="minValue" />
+      <el-table-column label="是否可以为空" align="center" prop="notNull" />
+      <el-table-column label="entUseCount" align="center" prop="entUseCount" />
+      <el-table-column label="isEdit" align="center" prop="isEdit" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['knowledge:classAttribute:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['knowledge:classAttribute: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"
+    />
+
+    <!-- 添加或修改实体类属性对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="属性类名称" prop="attrClsName">
+          <el-input v-model="form.attrClsName" placeholder="请输入属性类名称" />
+        </el-form-item>
+        <el-form-item label="属性单位" prop="attrUnit">
+          <el-input v-model="form.attrUnit" placeholder="请输入属性单位" />
+        </el-form-item>
+        <el-form-item label="实体类id" prop="entClsID">
+          <el-input v-model="form.entClsID" placeholder="请输入实体类id" />
+        </el-form-item>
+        <el-form-item label="属性类描述" prop="attrClsMemo">
+          <el-input v-model="form.attrClsMemo" placeholder="请输入属性类描述" />
+        </el-form-item>
+        <el-form-item label="domainKey" prop="domainKey">
+          <el-input v-model="form.domainKey" placeholder="请输入domainKey" />
+        </el-form-item>
+        <el-form-item label="domain" prop="domain">
+          <el-input v-model="form.domain" placeholder="请输入domain" />
+        </el-form-item>
+        <el-form-item label="isPublic" prop="isPublic">
+          <el-input v-model="form.isPublic" placeholder="请输入isPublic" />
+        </el-form-item>
+        <el-form-item label="最大值" prop="maxValue">
+          <el-input v-model="form.maxValue" placeholder="请输入最大值" />
+        </el-form-item>
+        <el-form-item label="最小值" prop="minValue">
+          <el-input v-model="form.minValue" placeholder="请输入最小值" />
+        </el-form-item>
+        <el-form-item label="是否可以为空" prop="notNull">
+          <el-input v-model="form.notNull" placeholder="请输入是否可以为空" />
+        </el-form-item>
+        <el-form-item label="entUseCount" prop="entUseCount">
+          <el-input v-model="form.entUseCount" placeholder="请输入entUseCount" />
+        </el-form-item>
+        <el-form-item label="isEdit" prop="isEdit">
+          <el-input v-model="form.isEdit" placeholder="请输入isEdit" />
+        </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>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listClassAttribute, getClassAttribute, delClassAttribute, addClassAttribute, updateClassAttribute } from "@/api/knowledge/classAttribute";
+
+export default {
+  name: "ClassAttribute",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 实体类属性表格数据
+      classAttributeList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        attrClsName: null,
+        attrUnit: null,
+        entAndAttrType: null,
+        attrType: null,
+        entClsID: null,
+        attrClsMemo: null,
+        valueType: null,
+        attrValueType: null,
+        domainKey: null,
+        domain: null,
+        isPublic: null,
+        maxValue: null,
+        minValue: null,
+        notNull: null,
+        entUseCount: null,
+        isEdit: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询实体类属性列表 */
+    getList() {
+      this.loading = true;
+      listClassAttribute(this.queryParams).then(response => {
+        this.classAttributeList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        attrClsID: null,
+        attrClsName: null,
+        attrUnit: null,
+        entAndAttrType: null,
+        attrType: null,
+        entClsID: null,
+        attrClsMemo: null,
+        valueType: null,
+        attrValueType: null,
+        domainKey: null,
+        domain: null,
+        isPublic: null,
+        maxValue: null,
+        minValue: null,
+        notNull: null,
+        entUseCount: null,
+        isEdit: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.attrClsID)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加实体类属性";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const attrClsID = row.attrClsID || this.ids
+      getClassAttribute(attrClsID).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改实体类属性";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.attrClsID != null) {
+            updateClassAttribute(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addClassAttribute(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const attrClsIDs = row.attrClsID || this.ids;
+      this.$modal.confirm('是否确认删除实体类属性编号为"' + attrClsIDs + '"的数据项?').then(function() {
+        return delClassAttribute(attrClsIDs);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('knowledge/classAttribute/export', {
+        ...this.queryParams
+      }, `classAttribute_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 328 - 0
src/views/knowledge/classRelation/index.vue

@@ -0,0 +1,328 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="关系类名称" prop="relClsName">
+        <el-input
+          v-model="queryParams.relClsName"
+          placeholder="请输入关系类名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="关系类描述" prop="relClsMemo">
+        <el-input
+          v-model="queryParams.relClsMemo"
+          placeholder="请输入关系类描述"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="关系类背景颜色" prop="backGroundColor">
+        <el-input
+          v-model="queryParams.backGroundColor"
+          placeholder="请输入关系类背景颜色"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否模板" prop="isModel">
+        <el-input
+          v-model="queryParams.isModel"
+          placeholder="请输入是否模板"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="起点实体类ID" prop="startID">
+        <el-input
+          v-model="queryParams.startID"
+          placeholder="请输入起点实体类ID"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="终点实体类ID" prop="endID">
+        <el-input
+          v-model="queryParams.endID"
+          placeholder="请输入终点实体类ID"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['knowledge:classRelation:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['knowledge:classRelation:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['knowledge:classRelation:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['knowledge:classRelation:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="classRelationList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="关系id" align="center" prop="relClsID" />
+      <el-table-column label="关系类名称" align="center" prop="relClsName" />
+      <el-table-column label="关系类描述" align="center" prop="relClsMemo" />
+      <el-table-column label="关系类背景颜色" align="center" prop="backGroundColor" />
+      <el-table-column label="关系类类型" align="center" prop="clsType" />
+      <el-table-column label="是否模板" align="center" prop="isModel" />
+      <el-table-column label="起点实体类ID" align="center" prop="startID" />
+      <el-table-column label="终点实体类ID" align="center" prop="endID" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['knowledge:classRelation:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['knowledge:classRelation: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"
+    />
+
+    <!-- 添加或修改实体类关系管理对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="关系类名称" prop="relClsName">
+          <el-input v-model="form.relClsName" placeholder="请输入关系类名称" />
+        </el-form-item>
+        <el-form-item label="关系类描述" prop="relClsMemo">
+          <el-input v-model="form.relClsMemo" placeholder="请输入关系类描述" />
+        </el-form-item>
+        <el-form-item label="关系类背景颜色" prop="backGroundColor">
+          <el-input v-model="form.backGroundColor" placeholder="请输入关系类背景颜色" />
+        </el-form-item>
+        <el-form-item label="是否模板" prop="isModel">
+          <el-input v-model="form.isModel" placeholder="请输入是否模板" />
+        </el-form-item>
+        <el-form-item label="起点实体类ID" prop="startID">
+          <el-input v-model="form.startID" placeholder="请输入起点实体类ID" />
+        </el-form-item>
+        <el-form-item label="终点实体类ID" prop="endID">
+          <el-input v-model="form.endID" placeholder="请输入终点实体类ID" />
+        </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>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listClassRelation, getClassRelation, delClassRelation, addClassRelation, updateClassRelation } from "@/api/knowledge/classRelation";
+
+export default {
+  name: "ClassRelation",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 实体类关系管理表格数据
+      classRelationList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        relClsName: null,
+        relClsMemo: null,
+        backGroundColor: null,
+        clsType: null,
+        isModel: null,
+        startID: null,
+        endID: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        startID: [
+          { required: true, message: "起点实体类ID不能为空", trigger: "blur" }
+        ],
+        endID: [
+          { required: true, message: "终点实体类ID不能为空", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询实体类关系管理列表 */
+    getList() {
+      this.loading = true;
+      listClassRelation(this.queryParams).then(response => {
+        this.classRelationList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        relClsID: null,
+        relClsName: null,
+        relClsMemo: null,
+        backGroundColor: null,
+        clsType: null,
+        isModel: null,
+        startID: null,
+        endID: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.relClsID)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加实体类关系管理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const relClsID = row.relClsID || this.ids
+      getClassRelation(relClsID).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改实体类关系管理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.relClsID != null) {
+            updateClassRelation(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addClassRelation(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const relClsIDs = row.relClsID || this.ids;
+      this.$modal.confirm('是否确认删除实体类关系管理编号为"' + relClsIDs + '"的数据项?').then(function() {
+        return delClassRelation(relClsIDs);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('knowledge/classRelation/export', {
+        ...this.queryParams
+      }, `classRelation_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 305 - 0
src/views/knowledge/entity/index.vue

@@ -0,0 +1,305 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="实体名称" prop="entName">
+        <el-input
+          v-model="queryParams.entName"
+          placeholder="请输入实体名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="实体描述" prop="entMemo">
+        <el-input
+          v-model="queryParams.entMemo"
+          placeholder="请输入实体描述"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="实体类id" prop="entClsID">
+        <el-input
+          v-model="queryParams.entClsID"
+          placeholder="请输入实体类id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否模板" prop="isModel">
+        <el-input
+          v-model="queryParams.isModel"
+          placeholder="请输入是否模板"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="实体iconId" prop="entIconId">
+        <el-input
+          v-model="queryParams.entIconId"
+          placeholder="请输入实体iconId"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['knowledge:entity:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['knowledge:entity:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['knowledge:entity:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['knowledge:entity:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="entityList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="实体id" align="center" prop="entId" />
+      <el-table-column label="实体名称" align="center" prop="entName" />
+      <el-table-column label="实体描述" align="center" prop="entMemo" />
+      <el-table-column label="实体类id" align="center" prop="entClsID" />
+      <el-table-column label="是否模板" align="center" prop="isModel" />
+      <el-table-column label="实体iconId" align="center" prop="entIconId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['knowledge:entity:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['knowledge:entity: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"
+    />
+
+    <!-- 添加或修改实体管理对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="实体名称" prop="entName">
+          <el-input v-model="form.entName" placeholder="请输入实体名称" />
+        </el-form-item>
+        <el-form-item label="实体描述" prop="entMemo">
+          <el-input v-model="form.entMemo" placeholder="请输入实体描述" />
+        </el-form-item>
+        <el-form-item label="实体类id" prop="entClsID">
+          <el-input v-model="form.entClsID" placeholder="请输入实体类id" />
+        </el-form-item>
+        <el-form-item label="是否模板" prop="isModel">
+          <el-input v-model="form.isModel" placeholder="请输入是否模板" />
+        </el-form-item>
+        <el-form-item label="实体iconId" prop="entIconId">
+          <el-input v-model="form.entIconId" placeholder="请输入实体iconId" />
+        </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>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listEntity, getEntity, delEntity, addEntity, updateEntity } from "@/api/knowledge/entity";
+
+export default {
+  name: "Entity",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 实体管理表格数据
+      entityList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        entName: null,
+        entMemo: null,
+        entClsID: null,
+        isModel: null,
+        entIconId: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询实体管理列表 */
+    getList() {
+      this.loading = true;
+      listEntity(this.queryParams).then(response => {
+        this.entityList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        entId: null,
+        entName: null,
+        entMemo: null,
+        entClsID: null,
+        isModel: null,
+        entIconId: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.entId)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加实体管理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const entId = row.entId || this.ids
+      getEntity(entId).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改实体管理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.entId != null) {
+            updateEntity(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addEntity(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const entIds = row.entId || this.ids;
+      this.$modal.confirm('是否确认删除实体管理编号为"' + entIds + '"的数据项?').then(function() {
+        return delEntity(entIds);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('knowledge/entity/export', {
+        ...this.queryParams
+      }, `entity_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 277 - 0
src/views/knowledge/entityAttribute/index.vue

@@ -0,0 +1,277 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="实体属性值" prop="attrValue">
+        <el-input
+          v-model="queryParams.attrValue"
+          placeholder="请输入实体属性值"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="实体id" prop="entId">
+        <el-input
+          v-model="queryParams.entId"
+          placeholder="请输入实体id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="实体类id" prop="attrClsID">
+        <el-input
+          v-model="queryParams.attrClsID"
+          placeholder="请输入实体类id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['knowledge:entityAttribute:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['knowledge:entityAttribute:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['knowledge:entityAttribute:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['knowledge:entityAttribute:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="entityAttributeList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="实体属性id" align="center" prop="attrID" />
+      <el-table-column label="实体属性值" align="center" prop="attrValue" />
+      <el-table-column label="实体id" align="center" prop="entId" />
+      <el-table-column label="实体类id" align="center" prop="attrClsID" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['knowledge:entityAttribute:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['knowledge:entityAttribute: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"
+    />
+
+    <!-- 添加或修改实体属性管理对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="实体属性值" prop="attrValue">
+          <el-input v-model="form.attrValue" placeholder="请输入实体属性值" />
+        </el-form-item>
+        <el-form-item label="实体id" prop="entId">
+          <el-input v-model="form.entId" placeholder="请输入实体id" />
+        </el-form-item>
+        <el-form-item label="实体类id" prop="attrClsID">
+          <el-input v-model="form.attrClsID" placeholder="请输入实体类id" />
+        </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>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listEntityAttribute, getEntityAttribute, delEntityAttribute, addEntityAttribute, updateEntityAttribute } from "@/api/knowledge/entityAttribute";
+
+export default {
+  name: "EntityAttribute",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 实体属性管理表格数据
+      entityAttributeList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        attrValue: null,
+        entId: null,
+        attrClsID: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询实体属性管理列表 */
+    getList() {
+      this.loading = true;
+      listEntityAttribute(this.queryParams).then(response => {
+        this.entityAttributeList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        attrID: null,
+        attrValue: null,
+        entId: null,
+        attrClsID: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.attrID)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加实体属性管理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const attrID = row.attrID || this.ids
+      getEntityAttribute(attrID).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改实体属性管理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.attrID != null) {
+            updateEntityAttribute(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addEntityAttribute(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const attrIDs = row.attrID || this.ids;
+      this.$modal.confirm('是否确认删除实体属性管理编号为"' + attrIDs + '"的数据项?').then(function() {
+        return delEntityAttribute(attrIDs);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('knowledge/entityAttribute/export', {
+        ...this.queryParams
+      }, `entityAttribute_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 291 - 0
src/views/knowledge/entityRelation/index.vue

@@ -0,0 +1,291 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="实体关系值" prop="relClsId">
+        <el-input
+          v-model="queryParams.relClsId"
+          placeholder="请输入实体关系值"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="起点实体id" prop="startEntId">
+        <el-input
+          v-model="queryParams.startEntId"
+          placeholder="请输入起点实体id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="终点实体id" prop="endEntId">
+        <el-input
+          v-model="queryParams.endEntId"
+          placeholder="请输入终点实体id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否模板" prop="isModel">
+        <el-input
+          v-model="queryParams.isModel"
+          placeholder="请输入是否模板"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['knowledge:entityRelation:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['knowledge:entityRelation:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['knowledge:entityRelation:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['knowledge:entityRelation:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="entityRelationList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="实体关系id" align="center" prop="relId" />
+      <el-table-column label="实体关系值" align="center" prop="relClsId" />
+      <el-table-column label="起点实体id" align="center" prop="startEntId" />
+      <el-table-column label="终点实体id" align="center" prop="endEntId" />
+      <el-table-column label="是否模板" align="center" prop="isModel" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['knowledge:entityRelation:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['knowledge:entityRelation: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"
+    />
+
+    <!-- 添加或修改实体关系管理对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="实体关系值" prop="relClsId">
+          <el-input v-model="form.relClsId" placeholder="请输入实体关系值" />
+        </el-form-item>
+        <el-form-item label="起点实体id" prop="startEntId">
+          <el-input v-model="form.startEntId" placeholder="请输入起点实体id" />
+        </el-form-item>
+        <el-form-item label="终点实体id" prop="endEntId">
+          <el-input v-model="form.endEntId" placeholder="请输入终点实体id" />
+        </el-form-item>
+        <el-form-item label="是否模板" prop="isModel">
+          <el-input v-model="form.isModel" 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>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listEntityRelation, getEntityRelation, delEntityRelation, addEntityRelation, updateEntityRelation } from "@/api/knowledge/entityRelation";
+
+export default {
+  name: "EntityRelation",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 实体关系管理表格数据
+      entityRelationList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        relClsId: null,
+        startEntId: null,
+        endEntId: null,
+        isModel: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询实体关系管理列表 */
+    getList() {
+      this.loading = true;
+      listEntityRelation(this.queryParams).then(response => {
+        this.entityRelationList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        relId: null,
+        relClsId: null,
+        startEntId: null,
+        endEntId: null,
+        isModel: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.relId)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加实体关系管理";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const relId = row.relId || this.ids
+      getEntityRelation(relId).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改实体关系管理";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.relId != null) {
+            updateEntityRelation(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addEntityRelation(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const relIds = row.relId || this.ids;
+      this.$modal.confirm('是否确认删除实体关系管理编号为"' + relIds + '"的数据项?').then(function() {
+        return delEntityRelation(relIds);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('knowledge/entityRelation/export', {
+        ...this.queryParams
+      }, `entityRelation_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 87 - 0
src/views/knowledge/extract/index.vue

@@ -0,0 +1,87 @@
+<template>
+  <div>
+    <el-form ref="form" :model="form" label-width="80px" style="margin-left: 20%;">
+      <el-form-item label="关键词">
+        <el-input v-model="form.name" style=" width: 50%;" placeholder="请输入内容"> </el-input>
+        <el-button type="primary" icon="el-icon-search"></el-button>
+      </el-form-item>
+    </el-form>
+    <div>
+      <el-button type="primary" round @click="extract">抽取</el-button>
+      <el-button type="primary" round>导入</el-button>
+      <el-button type="primary" round>规则设置</el-button>
+    </div>
+    <el-row :gutter="24" style="margin-top: 20px;color:#f6ae50">
+        <el-card shadow="always" style="color:#f6ae50">
+          <p>
+          	新华社北京6月8日电综合新华社驻外记者报道:俄罗斯总统新闻秘书<a class="a">佩斯科夫</a>8日说,现在不可能举行俄罗斯总统<a class="a">普京</a>和乌克兰总统<a
+          		class="a">泽连斯基</a>之间的会晤。据乌克兰国家通讯社8日报道,泽连斯基在视频讲话中说,乌克兰前线战局目前没有发生太大变化。
+          </p>
+          <p>
+          	——<a class="a">佩斯科夫</a>8日表示,现在不可能举行<a class="a">普京</a>和<a
+          		class="a">泽连斯基</a>之间的会晤。他说,由于基辅方面已退出谈判进程,因此现在没必要谈论筹备这一会晤的可能性。
+          </p>
+          <p>
+          	——乌通社8日报道,<a class="a">泽连斯基</a>在视频讲话中说,当前战局的焦点仍然是<a class="a">北顿涅茨克</a>、<a class="a">利西昌斯克</a>和<a
+          		class="a">波帕斯纳亚</a>。俄军正在向顿巴斯和赫尔松地区部署更多部队。
+          </p>
+          <p>
+          	——乌通社8日援引卢甘斯克地区军事行政长官<a class="a">谢尔盖·盖代</a>的话报道说,北顿涅茨克市的战斗正在继续,俄军正在发动猛烈进攻。乌军不会投降,但不排除撤退至更有利的位置。
+          </p>
+          <p>
+          	——俄罗斯国防部发言人<a class="a">科纳申科夫</a>8日表示,俄军使用高精度空基导弹打击了哈尔科夫地区的一家坦克和装甲车辆修理厂。此外,俄军还击落了乌军两架米格-29战机和一架米-8直升机。
+          </p>
+          <p>
+          	——俄罗斯外交部发言人<a
+          		class="a">扎哈罗娃</a>8日表示,为了补充不断减员的乌克兰武装部队,基辅方面正在继续招募外国雇佣兵。根据俄国防部此前数据,乌方已累计招募6500多名来自美国、英国、以色列、波兰、加拿大和捷克等国的雇佣兵。截至6月初,乌国内外国雇佣兵数量几乎减少一半。<a
+          		class="a">扎哈罗娃</a>说,美国私人军事公司参与了乌克兰外国雇佣兵招募工作,招募对象包括阿富汗难民和极端组织“伊斯兰国”武装分子。
+          </p>
+          <p>
+          	——佩斯科夫8日还表示,需要解除对俄罗斯的直接或间接制裁,以便俄可以向国际市场供应粮食。他说,就国际粮食市场而言,不是乌克兰危机导致或催化了全球粮食危机,一些国家政府在此之前采取的错误行动才是出现粮食危机的原因。
+          </p>
+          <p>
+          	——<a class="a">佩斯科夫</a>8日表示,现在不可能举行<a class="a">普京</a>和<a
+          		class="a">泽连斯基</a>之间的会晤。他说,由于基辅方面已退出谈判进程,因此现在没必要谈论筹备这一会晤的可能性。
+          </p>
+          <p>
+          	——乌通社8日报道,<a class="a">泽连斯基</a>在视频讲话中说,当前战局的焦点仍然是<a class="a">北顿涅茨克</a>、<a class="a">利西昌斯克</a>和<a
+          		class="a">波帕斯纳亚</a>。俄军正在向顿巴斯和赫尔松地区部署更多部队。
+          </p>
+          <p>
+          	——乌通社8日援引卢甘斯克地区军事行政长官<a class="a">谢尔盖·盖代</a>的话报道说,北顿涅茨克市的战斗正在继续,俄军正在发动猛烈进攻。乌军不会投降,但不排除撤退至更有利的位置。
+          </p>
+          <p>
+          	——俄罗斯国防部发言人<a class="a">科纳申科夫</a>8日表示,俄军使用高精度空基导弹打击了哈尔科夫地区的一家坦克和装甲车辆修理厂。此外,俄军还击落了乌军两架米格-29战机和一架米-8直升机。
+          </p>
+          <p>
+          	——俄罗斯外交部发言人<a
+          		class="a">扎哈罗娃</a>8日表示,为了补充不断减员的乌克兰武装部队,基辅方面正在继续招募外国雇佣兵。根据俄国防部此前数据,乌方已累计招募6500多名来自美国、英国、以色列、波兰、加拿大和捷克等国的雇佣兵。截至6月初,乌国内外国雇佣兵数量几乎减少一半。<a
+          		class="a">扎哈罗娃</a>说,美国私人军事公司参与了乌克兰外国雇佣兵招募工作,招募对象包括阿富汗难民和极端组织“伊斯兰国”武装分子。
+          </p>
+          <p>
+          	——佩斯科夫8日还表示,需要解除对俄罗斯的直接或间接制裁,以便俄可以向国际市场供应粮食。他说,就国际粮食市场而言,不是乌克兰危机导致或催化了全球粮食危机,一些国家政府在此之前采取的错误行动才是出现粮食危机的原因。
+          </p>
+        </el-card>
+    </el-row>
+  </div>
+</template>
+
+<script>
+  export default {
+    data() {
+      return {
+        form: {
+          name: '',
+        },
+      }
+    },
+    methods:{
+      extract(){
+        $('.a').css("color", "#8a8aff")
+      }
+    }
+  }
+</script>
+
+<style>
+</style>

+ 287 - 0
src/views/ledger/major/index.vue

@@ -0,0 +1,287 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="专业名" prop="majorName">
+        <el-input
+          v-model="queryParams.majorName"
+          placeholder="请输入专业名"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="系统名" prop="sysName">
+        <el-input
+          v-model="queryParams.sysName"
+          placeholder="请输入系统名"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="系统id" prop="sysId">
+        <el-input
+          v-model="queryParams.sysId"
+          placeholder="请输入系统id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="描述" prop="description">
+        <el-input
+          v-model="queryParams.description"
+          placeholder="请输入描述"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['ledger:major:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['ledger:major:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['ledger:major:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['ledger:major:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="majorList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="${comment}" align="center" prop="id" />
+      <el-table-column label="专业名" align="center" prop="majorName" />
+      <el-table-column label="系统名" align="center" prop="sysName" />
+      <el-table-column label="系统id" align="center" prop="sysId" />
+      <el-table-column label="描述" align="center" prop="description" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['ledger:major:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['ledger:major: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"
+    />
+
+    <!-- 添加或修改专业对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="专业名" prop="majorName">
+          <el-input v-model="form.majorName" placeholder="请输入专业名" />
+        </el-form-item>
+        <el-form-item label="系统名" prop="sysName">
+          <el-input v-model="form.sysName" placeholder="请输入系统名" />
+        </el-form-item>
+        <el-form-item label="系统id" prop="sysId">
+          <el-input v-model="form.sysId" placeholder="请输入系统id" />
+        </el-form-item>
+        <el-form-item label="描述" prop="description">
+          <el-input v-model="form.description" 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>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listMajor, getMajor, delMajor, addMajor, updateMajor } from "@/api/ledger/major";
+
+export default {
+  name: "Major",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 专业表格数据
+      majorList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        majorName: null,
+        sysName: null,
+        sysId: null,
+        description: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询专业列表 */
+    getList() {
+      this.loading = true;
+      listMajor(this.queryParams).then(response => {
+        this.majorList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        majorName: null,
+        sysName: null,
+        sysId: null,
+        description: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      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 = "添加专业";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getMajor(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改专业";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateMajor(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addMajor(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除专业编号为"' + ids + '"的数据项?').then(function() {
+        return delMajor(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('ledger/major/export', {
+        ...this.queryParams
+      }, `major_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>