瀏覽代碼

知识库

yueyazhui 9 月之前
父節點
當前提交
4d225cea6a

+ 68 - 0
src/api/governmentCloud/knowledgeBase/knowledgeBase.js

@@ -0,0 +1,68 @@
+import request from '@/utils/request'
+
+// 获取知识库
+export function getKnowledgeBase() {
+  return request({
+    url: '/api/web/knowledgeBase',
+    method: 'GET'
+  })
+}
+
+// 添加知识库
+export function createKnowledgeBase(data) {
+  return request({
+    url: `/api/web/knowledgeBase`,
+    method: 'POST',
+    data
+  })
+}
+
+// 修改知识库
+export function updateKnowledgeBase(data) {
+  return request({
+    url: `/api/web/knowledgeBase/${data.id}`,
+    method: 'PUT',
+    data
+  })
+}
+
+// 获取知识库信息
+export function getKnowledgeBaseInfo(id) {
+  return request({
+    url: `/api/web/knowledgeBase/${id}`,
+    method: 'GET'
+  })
+}
+
+// 删除知识库
+export function delKnowledgeBase(id) {
+  return request({
+    url: `/api/web/knowledgeBase/${id}`,
+    method: 'DELETE'
+  })
+}
+
+// 获取知识列表
+export function getKnowledgeList(data) {
+  return request({
+    url: `/api/web/knowledge`,
+    method: 'POST',
+    data
+  })
+}
+
+// 获取知识信息
+export function getKnowledgeInfo(id) {
+  return request({
+    url: `/api/web/knowledge/${id}/Info`,
+    method: 'GET'
+  })
+}
+
+// 删除知识信息
+export function delKnowledge(id) {
+  return request({
+    url: `/api/web/knowledge/${id}`,
+    method: 'DELETE'
+  })
+}

+ 130 - 0
src/views/governmentCloud/knowledgeBase/Form.vue

@@ -0,0 +1,130 @@
+<template>
+  <el-dialog :title="!dataForm.id ? '新建' : '编辑'" :close-on-click-modal="false"
+    :close-on-press-escape="false" :visible.sync="visible" lock-scroll width="600px"
+    class="JNPF-dialog JNPF-dialog_center" append-to-body>
+    <el-form ref="dataForm" :model="dataForm" :rules="dataRule" v-loading="formLoading"
+      label-width="80px">
+      <el-form-item label="项目上级" prop="parentId">
+        <JnpfTreeSelect v-model="dataForm.parentId" :options="treeData" placeholder="选择项目上级"
+          :disabled="parentDisabled" />
+      </el-form-item>
+      <el-form-item label="字典名称" prop="fullName">
+        <el-input v-model="dataForm.fullName" placeholder="输入名称" />
+      </el-form-item>
+      <el-form-item label="字典编码" prop="enCode">
+        <el-input v-model="dataForm.enCode" placeholder="输入编码" />
+      </el-form-item>
+      <el-form-item label="排序" prop="sortCode">
+        <el-input-number :min="0" :max="999999" v-model="dataForm.sortCode"
+          controls-position="right" />
+      </el-form-item>
+      <el-form-item label="状态" prop="enabledMark">
+        <el-switch v-model="dataForm.enabledMark" :active-value="1" :inactive-value="0" />
+      </el-form-item>
+      <el-form-item label="说明" prop="description">
+        <el-input v-model="dataForm.description" type="textarea" :rows="3" />
+      </el-form-item>
+    </el-form>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="visible = false">{{$t('common.cancelButton')}}</el-button>
+      <el-button type="primary" :loading="btnLoading" @click="dataFormSubmit()">
+        {{$t('common.confirmButton')}}</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+import {
+  getDictionaryDataTypeSelector,
+  getDictionaryDataInfo,
+  updateDictionaryData,
+  createDictionaryData
+} from '@/api/systemData/dictionary'
+
+export default {
+  data() {
+    return {
+      visible: false,
+      formLoading: false,
+      btnLoading: false,
+      parentDisabled: false,
+      dataForm: {
+        id: '',
+        dictionaryTypeId: '',
+        parentId: '0',
+        fullName: '',
+        enCode: '',
+        enabledMark: 1,
+        sortCode: 0,
+        description: ''
+      },
+      treeData: [],
+      dataRule: {
+        parentId: [
+          { required: true, message: '请选择', trigger: 'input' }
+        ],
+        fullName: [
+          { required: true, message: '请输入名称', trigger: 'blur' },
+          { max: 50, message: '字典名称最多为50个字符!', trigger: 'blur' }
+        ],
+        enCode: [
+          { required: true, message: '请输入编码', trigger: 'blur' },
+          { max: 50, message: '字典编码最多为50个字符!', trigger: 'blur' }
+        ]
+      }
+    }
+  },
+  methods: {
+    init(id, typeId, isTree) {
+      this.visible = true
+      this.dataForm.id = id || ''
+      this.dataForm.dictionaryTypeId = typeId
+      this.formLoading = true
+      this.$nextTick(() => {
+        this.$refs['dataForm'].resetFields()
+        if (isTree === 1) {
+          this.parentDisabled = false
+        } else {
+          this.parentDisabled = true
+        }
+        getDictionaryDataTypeSelector(this.dataForm.dictionaryTypeId, isTree, id || 0).then(res => {
+          this.treeData = res.data.list
+          if (this.dataForm.id) {
+            getDictionaryDataInfo(this.dataForm.id).then(res => {
+              this.dataForm = res.data
+              this.formLoading = false
+            })
+          } else {
+            this.dataForm.parentId = res.data.list[0].id
+            this.formLoading = false
+          }
+        })
+      })
+    },
+    dataFormSubmit() {
+      this.$refs['dataForm'].validate((valid) => {
+        if (valid) {
+          this.btnLoading = true
+          this.dataForm.parentId = this.dataForm.dictionaryTypeId === this.dataForm.parentId ? '0' : this.dataForm.parentId
+          const formMethod = this.dataForm.id ? updateDictionaryData : createDictionaryData
+          formMethod(this.dataForm).then(res => {
+            this.$message({
+              message: res.msg,
+              type: 'success',
+              duration: 1500,
+              onClose: () => {
+                this.$store.commit('base/SET_DICTIONARY_LIST', [])
+                this.visible = false
+                this.btnLoading = false
+                this.$emit('refreshDataList')
+              }
+            })
+          }).catch(() => {
+            this.btnLoading = false
+          })
+        }
+      })
+    }
+  }
+}
+</script>

+ 125 - 0
src/views/governmentCloud/knowledgeBase/components/Form.vue

@@ -0,0 +1,125 @@
+<template>
+  <el-dialog :title="!dataForm.id ? '新建' : '编辑'" :close-on-click-modal="false"
+    :visible.sync="visible" :append-to-body="true" class="JNPF-dialog JNPF-dialog_center"
+    lock-scroll width="600px">
+    <el-form ref="dataForm" :model="dataForm" :rules="dataRule" v-loading="formLoading"
+      label-width="60px">
+      <el-form-item label="上级" prop="parentId">
+        <JnpfTreeSelect v-model="dataForm.parentId" :options="treeData" :props="{
+            value: 'id',
+            label: 'name',
+            children: 'children',
+            disabled: function (data) {
+              return data.disabled;
+            },
+          }" placeholder="选择项目上级" />
+      </el-form-item>
+      <el-form-item label="名称" prop="name">
+        <el-input v-model="dataForm.name" placeholder="输入名称" />
+      </el-form-item>
+    </el-form>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="visible = false">{{ $t("common.cancelButton") }}</el-button>
+      <el-button type="primary" :loading="btnLoading" @click="dataFormSubmit()">
+        {{ $t("common.confirmButton") }}</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+import {
+  getKnowledgeBase,
+  getKnowledgeBaseInfo,
+  createKnowledgeBase,
+  updateKnowledgeBase,
+} from "@/api/governmentCloud/knowledgeBase/knowledgeBase";
+
+export default {
+  data() {
+    return {
+      visible: false,
+      treeDisabled: false,
+      dataForm: {
+        id: "",
+        parentId: "",
+        name: "",
+      },
+      formLoading: false,
+      btnLoading: false,
+      treeData: [],
+      dataRule: {
+        name: [
+          { required: true, message: "请输入名称", trigger: "blur" },
+          { max: 10, message: "名称最多为10个字符!", trigger: "blur" },
+        ],
+      },
+    };
+  },
+  methods: {
+    init(id) {
+      this.visible = true;
+      this.dataForm.id = id || "";
+      this.formLoading = true;
+      this.$nextTick(() => {
+        this.$refs["dataForm"].resetFields();
+        getKnowledgeBase(id || 0).then((res) => {
+          if (this.dataForm.id !== "") {
+            let list = res.data;
+            this.recursion(list, this.dataForm.id);
+            this.treeData = list;
+          } else {
+            this.treeData = res.data || [];
+          }
+        });
+        if (this.dataForm.id) {
+          this.treeDisabled = true;
+          getKnowledgeBaseInfo(this.dataForm.id).then((res) => {
+            this.dataForm = res.data;
+          });
+        } else {
+          this.treeDisabled = false;
+        }
+        this.formLoading = false;
+      });
+    },
+    recursion(list, id) {
+      for (let i = 0; i < list.length; i++) {
+        if (list[i].id === id) {
+          list.splice(i, 1);
+          break;
+        }
+        if (list[i].children.length) {
+          this.recursion(list[i].children, id);
+        }
+      }
+    },
+    dataFormSubmit() {
+      this.$refs["dataForm"].validate((valid) => {
+        if (valid) {
+          this.btnLoading = true;
+          const formMethod = this.dataForm.id ? updateKnowledgeBase : createKnowledgeBase;
+          if (this.dataForm.parentId == "") {
+            this.dataForm.parentId = "0";
+          }
+          formMethod(this.dataForm)
+            .then((res) => {
+              this.$message({
+                message: res.msg,
+                type: "success",
+                duration: 1500,
+                onClose: () => {
+                  this.visible = false
+                  this.btnLoading = false
+                  this.$emit('refreshDataList')
+                }
+              });
+            })
+            .catch(() => {
+              this.btnLoading = false;
+            });
+        }
+      });
+    },
+  },
+};
+</script>

+ 96 - 0
src/views/governmentCloud/knowledgeBase/components/index.vue

@@ -0,0 +1,96 @@
+<template>
+  <el-drawer title="知识库管理" :visible.sync="drawer" :wrapperClosable="false" ref="drawer" size="700px"
+    :before-close="handleDrawerClose" class="JNPF-common-drawer" append-to-body>
+    <div class="JNPF-flex-main">
+      <div class="JNPF-common-head">
+        <topOpts @refresh="getKnowledgeBaseList()" @add="addOrUpdateHandle()">
+        </topOpts>
+        <div class="JNPF-common-head-right">
+          <el-tooltip effect="dark" :content="$t('common.refresh')" placement="top">
+            <el-link icon="icon-ym icon-ym-Refresh
+              JNPF-common-head-icon" :underline="false" @click="reset()" />
+          </el-tooltip>
+        </div>
+      </div>
+      <JNPF-table v-loading="listLoading" :data="tableData" row-key="id" default-expand-all
+        :tree-props="{children: 'children', hasChildren: ''}">
+        <el-table-column prop="name" label="名称" />
+        <el-table-column label="操作" width="130">
+          <template slot-scope="scope" v-if="scope.row.id!='0'&&scope.row.id!='1'">
+            <tableOpts @edit="addOrUpdateHandle(scope.row.id)" @del="handleDel(scope.row.id)">
+            </tableOpts>
+          </template>
+        </el-table-column>
+      </JNPF-table>
+      <TypeForm v-if="typeFormVisible" ref="TypeForm" @refreshDataList="getKnowledgeBaseList" />
+    </div>
+  </el-drawer>
+</template>
+<script>
+import {
+  getKnowledgeBase,
+  delKnowledgeBase
+} from '@/api/governmentCloud/knowledgeBase/knowledgeBase'
+import TypeForm from './Form'
+
+export default {
+  components: {
+    TypeForm
+  },
+  data() {
+    return {
+      drawer: false,
+      listLoading: false,
+      btnLoading: false,
+      typeFormVisible: false,
+      tableData: []
+    }
+  },
+  methods: {
+    init() {
+      this.drawer = true
+      this.$nextTick(() => {
+        this.getKnowledgeBaseList()
+      })
+    },
+    getKnowledgeBaseList() {
+      this.listLoading = true
+      getKnowledgeBase().then(res => {
+        this.tableData = res.data
+        this.listLoading = false
+      }).catch(() => {
+        this.listLoading = false
+      })
+    },
+    addOrUpdateHandle(id) {
+      this.typeFormVisible = true
+      this.$nextTick(() => {
+        this.$refs.TypeForm.init(id)
+      })
+    },
+    handleDel(id) {
+      this.$confirm(this.$t('common.delTip'), this.$t('common.tipTitle'), {
+        type: 'warning'
+      }).then(() => {
+        delKnowledgeBase(id).then(res => {
+          this.$message({
+            type: 'success',
+            message: res.msg,
+            duration: 1500,
+            onClose: () => {
+              this.getKnowledgeBaseList()
+            }
+          })
+        })
+      }).catch(() => { })
+    },
+    reset() {
+      this.getKnowledgeBaseList()
+    },
+    handleDrawerClose(done) {
+      done();
+      this.$emit('refreshDataList')
+    }
+  }
+}
+</script>

+ 197 - 0
src/views/governmentCloud/knowledgeBase/index.vue

@@ -0,0 +1,197 @@
+<template>
+  <div class="JNPF-common-layout">
+    <div class="JNPF-common-layout-left">
+      <div class="JNPF-common-title">
+        <h2>知识库</h2>
+        <el-dropdown>
+          <el-link icon="icon-ym icon-ym-mpMenu" :underline="false" />
+          <el-dropdown-menu slot="dropdown">
+            <el-dropdown-item @click.native="initData()">刷新数据</el-dropdown-item>
+            <el-dropdown-item @click.native="toggleTreeExpand(true)">展开全部</el-dropdown-item>
+            <el-dropdown-item @click.native="toggleTreeExpand(false)">折叠全部</el-dropdown-item>
+            <el-dropdown-item @click.native="handleTypeManage">知识库管理</el-dropdown-item>
+          </el-dropdown-menu>
+        </el-dropdown>
+      </div>
+      <div class="JNPF-common-tree-search-box">
+        <el-input placeholder="输入关键字" v-model="filterText" suffix-icon="el-icon-search" clearable />
+      </div>
+      <el-scrollbar class="JNPF-common-el-tree-scrollbar" v-loading="treeLoading">
+        <el-tree ref="treeBox" :data="treeData" :props="defaultProps"
+          :default-expand-all="expandsTree" highlight-current :expand-on-click-node="false"
+          node-key="id" @node-click="handleNodeClick" class="JNPF-common-el-tree"
+          :filter-node-method="filterNode" v-if="refreshTree">
+          <span class="custom-tree-node" slot-scope="{ node }">
+            <i class="el-icon-notebook-2" />
+            <span class="text">{{node.label}}</span>
+          </span>
+        </el-tree>
+      </el-scrollbar>
+    </div>
+    <div class="JNPF-common-layout-center">
+      <el-row class="JNPF-common-search-box" :gutter="16">
+        <el-form @submit.native.prevent>
+          <el-col :span="6">
+            <el-form-item label="关键词">
+              <el-input v-model="listQuery.title" placeholder="请输入关键词查询" clearable
+                @keyup.enter.native="search()" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="6">
+            <el-form-item>
+              <el-button type="primary" icon="el-icon-search" @click="search()">
+                {{$t('common.search')}}</el-button>
+              <el-button icon="el-icon-refresh-right" @click="reset()">{{$t('common.reset')}}
+              </el-button>
+            </el-form-item>
+          </el-col>
+        </el-form>
+      </el-row>
+      <div class="JNPF-common-layout-main JNPF-flex-main">
+        <JNPF-table v-loading="listLoading" :data="tableData" row-key="id" v-if="refreshTable">
+          <el-table-column prop="title" label="标题" />
+          <el-table-column label="操作" width="100">
+            <template slot-scope="scope">
+              <tableOpts :hasEdit="false" @del="handleDel(scope.row.id)" />
+            </template>
+          </el-table-column>
+        </JNPF-table>
+        <pagination :total="total" :page.sync="listQuery.current" :limit.sync="listQuery.size"
+          @pagination="getKnowledgeList" />
+      </div>
+    </div>
+    <Form v-if="formVisible" ref="Form" @refreshDataList="getKnowledgeList" />
+    <TypeList v-if="drawer" ref="TypeList" @refreshDataList="initData" />
+  </div>
+</template>
+
+<script>
+import {
+  getKnowledgeBase,
+  getKnowledgeList,
+  delKnowledge
+} from '@/api/governmentCloud/knowledgeBase/knowledgeBase'
+import Form from './Form'
+import TypeList from './components/index'
+
+export default {
+  name: 'systemData-dictionary',
+  components: {
+    Form,
+    TypeList
+  },
+  data() {
+    return {
+      defaultProps: {
+        children: 'children',
+        label: 'name'
+      },
+      listQuery: {
+        current: 1,
+        size: 20,
+        knowledgeBaseId: '',
+        title: ''
+      },
+      total: 0,
+      drawer: false,
+      formVisible: false,
+      treeLoading: false,
+      listLoading: false,
+      treeData: [],
+      tableData: [],
+      expands: true,
+      expandsTree: true,
+      refreshTable: true,
+      refreshTree: true,
+      filterText: '',
+    }
+  },
+  watch: {
+    filterText(val) {
+      this.$refs.treeBox.filter(val)
+    }
+  },
+  created() {
+    this.initData(true)
+  },
+  methods: {
+    search() {
+      this.getKnowledgeList()
+    },
+    reset() {
+      this.listQuery.title = ''
+      this.getKnowledgeList()
+    },
+    initData(isInit) {
+      this.filterText = ''
+      this.treeLoading = true
+      getKnowledgeBase().then(res => {
+        this.treeData = res.data
+        this.getKnowledgeList()
+        this.treeLoading = false
+      }).catch(() => {
+        this.treeLoading = false
+      })
+    },
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.name.indexOf(value) !== -1;
+    },
+    toggleExpand() {
+      this.refreshTable = false;
+      this.expands = !this.expands;
+      this.$nextTick(() => {
+        this.refreshTable = true;
+      });
+    },
+    toggleTreeExpand(expands) {
+      this.filterText = ''
+      this.refreshTree = false
+      this.expandsTree = expands
+      this.$nextTick(() => {
+        this.refreshTree = true
+        this.$nextTick(() => {
+          this.$refs.treeBox.setCurrentKey(this.listQuery.knowledgeBaseId)
+        })
+      })
+    },
+    getKnowledgeList() {
+      this.listLoading = true
+      getKnowledgeList(this.listQuery).then(res => {
+        this.tableData = res.data.records
+        this.total = res.data.total
+        this.listLoading = false
+      }).catch(() => {
+        this.listLoading = false
+      })
+    },
+    // 分类管理
+    handleTypeManage() {
+      this.drawer = true
+      this.$nextTick(() => {
+        this.$refs.TypeList.init()
+      })
+    },
+    handleNodeClick(data) {
+      this.listQuery.knowledgeBaseId = data.id
+      this.reset()
+    },
+    handleDel(id) {
+      this.$confirm(this.$t('common.delTip'), this.$t('common.tipTitle'), {
+        type: 'warning'
+      }).then(() => {
+        delKnowledge(id).then(res => {
+          this.$message({
+            type: 'success',
+            message: res.msg,
+            duration: 1500,
+            onClose: () => {
+              this.getKnowledgeList()
+            }
+          })
+        })
+      }).catch(() => { })
+    }
+  }
+}
+</script>

+ 4 - 6
src/views/system/sysConfig/index.vue

@@ -365,12 +365,12 @@
               <jnpf-form-tip-item label-width="120px" label="已办中是否查询未办理的或签其他人任务" prop="title"
                 tipLabel="已办中是否查询未办理的或签其他人任务">
                 <el-switch v-model="baseForm.hqFlag" :active-value="1" :inactive-value="0" />
-              </jnpf-form-tip-item>              
+              </jnpf-form-tip-item>
 
               <jnpf-form-tip-item label-width="120px" label="已办是否过滤发起人节点" prop="title"
                 tipLabel="已办是否过滤发起人节点">
                 <el-switch v-model="baseForm.firstFlag" :active-value="1" :inactive-value="0" />
-              </jnpf-form-tip-item>       
+              </jnpf-form-tip-item>
 
               <jnpf-form-tip-item label-width="120px" label="链接时效性" prop="title"
                 tipLabel="审批链接是否有效:审批链接发送时间 + 审批链接时效性">
@@ -388,8 +388,6 @@
                 <span class="lockTime unit">次</span>
               </jnpf-form-tip-item>
 
-
-
               <el-form-item label-width="120px">
                 <el-button type="primary" size="small" :loading="btnLoading" class="saveBtn"
                   @click="submitForm()">保 存</el-button>
@@ -402,7 +400,7 @@
     <el-dialog title="数据同步" :visible.sync="visible"
       class="JNPF-dialog JNPF-dialog_center sync-dialog" lock-scroll width="450px">
       <div class="add-main">
-        <div class="add-item add-item-sys">
+        <!-- <div class="add-item add-item-sys">
           <i class="add-icon icon-ym icon-ym-upload"></i>
           <div class="add-txt">
             <p class="add-title">{{name}}</p>
@@ -413,7 +411,7 @@
               :loading="wechatLoading" :disabled="dingLoading">
               同步</el-button>
           </div>
-        </div>
+        </div> -->
       </div>
       <div class="add-main">
         <div class="add-item add-item-sys">