1
0
Jelajahi Sumber

知识库管理

lsw 9 bulan lalu
induk
melakukan
9b465cdef7

+ 13 - 41
admin-ui/src/views/system/dict/data.vue

@@ -2,15 +2,7 @@
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="字典名称" prop="dictType">
-        <el-select v-model="queryParams.dictType"><el-option v-for="item in typeOptions" :key="item.dictId" :label="item.dictName" :value="item.dictType" /></el-select>
-      </el-form-item>
-      <el-form-item label="字典标签" prop="dictLabel">
-        <el-input v-model="queryParams.dictLabel" placeholder="请输入字典标签" clearable @keyup.enter.native="handleQuery" class="se"/>
-      </el-form-item>
-      <el-form-item label="状态" prop="status">
-        <el-select v-model="queryParams.status" placeholder="数据状态" clearable>
-          <el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
-        </el-select>
+        <el-select v-model="queryParams.dictType"><el-option v-for="item in typeOptions" :key="item.dictId" :label="item.dictName" :value="item.dictType"/></el-select>
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
@@ -21,13 +13,11 @@
       <el-col :span="1.5"><el-button type="primary" icon="el-icon-plus" @click="handleAdd" v-hasPermi="['system:dict:add']">新增</el-button></el-col>
       <el-col :span="1.5"><el-button type="success" icon="el-icon-edit" :disabled="single" @click="handleUpdate" v-hasPermi="['system:dict:edit']">修改</el-button></el-col>
       <el-col :span="1.5"><el-button type="danger" icon="el-icon-delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['system:dict:remove']">删除</el-button></el-col>
-      <el-col :span="1.5"><el-button type="warning" plain icon="el-icon-download" @click="handleExport" v-hasPermi="['system:dict:export']">导出</el-button></el-col>
-      <el-col :span="1.5"><el-button type="warning" plain icon="el-icon-close" @click="handleClose">关闭</el-button></el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
     <el-table border :data="dataList" @selection-change="handleSelectionChange" height="calc(100vh - 273px)">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="字典编码" align="center" prop="dictCode" />
+      <el-table-column type="index" label="序号" align="center" width="80" />
       <el-table-column label="字典标签" align="center" prop="dictLabel">
         <template slot-scope="scope">
           <span v-if="scope.row.listClass == '' || scope.row.listClass == 'default'">{{ scope.row.dictLabel }}</span>
@@ -36,18 +26,12 @@
       </el-table-column>
       <el-table-column label="字典键值" align="center" prop="dictValue" />
       <el-table-column label="字典排序" align="center" prop="dictSort" />
-      <el-table-column label="状态" align="center" prop="status">
-        <template slot-scope="scope">
-          <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status" />
-        </template>
-      </el-table-column>
-      <el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
       <el-table-column label="创建时间" align="center" prop="createTime" width="180">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.createTime) }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="操作" align="center" >
+      <el-table-column label="操作" align="center">
         <template slot-scope="scope">
           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:dict:edit']">修改</el-button>
           <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:dict:remove']">删除</el-button>
@@ -64,19 +48,7 @@
         <el-form-item label="字典类型"><el-input v-model="form.dictType" :disabled="true" /></el-form-item>
         <el-form-item label="数据标签" prop="dictLabel"><el-input v-model="form.dictLabel" placeholder="请输入数据标签" /></el-form-item>
         <el-form-item label="数据键值" prop="dictValue"><el-input v-model="form.dictValue" placeholder="请输入数据键值" /></el-form-item>
-        <el-form-item label="样式属性" prop="cssClass"><el-input v-model="form.cssClass" placeholder="请输入样式属性" /></el-form-item>
         <el-form-item label="显示排序" prop="dictSort"><el-input-number v-model="form.dictSort" controls-position="right" :min="0" /></el-form-item>
-        <el-form-item label="回显样式" prop="listClass">
-          <el-select v-model="form.listClass">
-            <el-option v-for="item in listClassOptions" :key="item.value" :label="item.label + '(' + item.value + ')'" :value="item.value"></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="状态" prop="status">
-          <el-radio-group v-model="form.status">
-            <el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="备注" prop="remark"><el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input></el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -168,7 +140,7 @@ export default {
   methods: {
     /** 查询字典类型详细 */
     getType(dictId) {
-      getType(dictId).then(response => {
+      getType(dictId).then((response) => {
         this.queryParams.dictType = response.data.dictType;
         this.defaultDictType = response.data.dictType;
         this.getList();
@@ -176,13 +148,13 @@ export default {
     },
     /** 查询字典类型列表 */
     getTypeList() {
-      getDictOptionselect().then(response => {
+      getDictOptionselect().then((response) => {
         this.typeOptions = response.data;
       });
     },
     /** 查询字典数据列表 */
     getList() {
-      listData(this.queryParams).then(response => {
+      listData(this.queryParams).then((response) => {
         this.dataList = response.rows;
         this.total = response.total;
       });
@@ -231,7 +203,7 @@ export default {
     },
     // 多选框选中数据
     handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.dictCode);
+      this.ids = selection.map((item) => item.dictCode);
       this.single = selection.length != 1;
       this.multiple = !selection.length;
     },
@@ -241,23 +213,23 @@ export default {
       this.open = true;
       this.title = '修改字典数据';
       const dictCode = row.dictCode || this.ids;
-      getData(dictCode).then(response => {
+      getData(dictCode).then((response) => {
         this.form = response.data;
       });
     },
     /** 提交按钮 */
-    submitForm: function() {
-      this.$refs['form'].validate(valid => {
+    submitForm: function () {
+      this.$refs['form'].validate((valid) => {
         if (valid) {
           if (this.form.dictCode != undefined) {
-            updateData(this.form).then(response => {
+            updateData(this.form).then((response) => {
               this.$store.dispatch('dict/removeDict', this.queryParams.dictType);
               this.$modal.msgSuccess('修改成功');
               this.open = false;
               this.getList();
             });
           } else {
-            addData(this.form).then(response => {
+            addData(this.form).then((response) => {
               this.$store.dispatch('dict/removeDict', this.queryParams.dictType);
               this.$modal.msgSuccess('新增成功');
               this.open = false;
@@ -272,7 +244,7 @@ export default {
       const dictCodes = row.dictCode || this.ids;
       this.$modal
         .confirm('是否确认删除字典编码为"' + dictCodes + '"的数据项?')
-        .then(function() {
+        .then(function () {
           return delData(dictCodes);
         })
         .then(() => {

+ 16 - 12
admin-ui/src/views/system/dict/index.vue

@@ -2,7 +2,7 @@
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="字典名称" prop="dictName">
-        <el-input v-model="queryParams.dictName" placeholder="请输入字典名称" clearable @keyup.enter.native="handleQuery" class="se"/>
+        <el-input v-model="queryParams.dictName" placeholder="请输入字典名称" clearable @keyup.enter.native="handleQuery" class="se" />
       </el-form-item>
       <el-form-item label="状态" prop="status">
         <el-select v-model="queryParams.status" placeholder="字典状态" clearable>
@@ -21,13 +21,12 @@
       <el-col :span="1.5"><el-button type="primary" icon="el-icon-plus" @click="handleAdd" v-hasPermi="['system:dict:add']">新增</el-button></el-col>
       <el-col :span="1.5"><el-button type="success" icon="el-icon-edit" :disabled="single" @click="handleUpdate" v-hasPermi="['system:dict:edit']">修改</el-button></el-col>
       <el-col :span="1.5"><el-button type="danger" icon="el-icon-delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['system:dict:remove']">删除</el-button></el-col>
-      <el-col :span="1.5"><el-button type="warning" icon="el-icon-download" @click="handleExport" v-hasPermi="['system:dict:export']">导出</el-button></el-col>
       <el-col :span="1.5"><el-button type="danger" icon="el-icon-refresh" @click="handleRefreshCache" v-hasPermi="['system:dict:remove']">刷新缓存</el-button></el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
     <el-table border :data="typeList" @selection-change="handleSelectionChange" height="calc(100vh - 273px)">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="字典编号" align="center" prop="dictId" />
+      <el-table-column type="index" label="序号" align="center" width="80" />
       <el-table-column label="字典名称" align="center" prop="dictName" :show-overflow-tooltip="true" />
       <el-table-column label="字典类型" align="center" :show-overflow-tooltip="true">
         <template slot-scope="scope">
@@ -47,8 +46,13 @@
           <span>{{ parseTime(scope.row.createTime) }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="操作" align="center" >
+      <el-table-column label="操作" align="center">
         <template slot-scope="scope">
+          <el-button size="mini" type="text" icon="el-icon-view" v-hasPermi="['system:dict:edit']">
+            <router-link :to="'/system/dict-data/index/' + scope.row.dictId" class="link-type">
+              <span>数据管理</span>
+            </router-link>
+          </el-button>
           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:dict:edit']">修改</el-button>
           <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:dict:remove']">删除</el-button>
         </template>
@@ -130,7 +134,7 @@ export default {
   methods: {
     /** 查询字典类型列表 */
     getList() {
-      listType(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+      listType(this.addDateRange(this.queryParams, this.dateRange)).then((response) => {
         this.typeList = response.rows;
         this.total = response.total;
       });
@@ -170,7 +174,7 @@ export default {
     },
     // 多选框选中数据
     handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.dictId);
+      this.ids = selection.map((item) => item.dictId);
       this.single = selection.length != 1;
       this.multiple = !selection.length;
     },
@@ -180,22 +184,22 @@ export default {
       this.open = true;
       this.title = '修改字典类型';
       const dictId = row.dictId || this.ids;
-      getType(dictId).then(response => {
+      getType(dictId).then((response) => {
         this.form = response.data;
       });
     },
     /** 提交按钮 */
-    submitForm: function() {
-      this.$refs['form'].validate(valid => {
+    submitForm: function () {
+      this.$refs['form'].validate((valid) => {
         if (valid) {
           if (this.form.dictId != undefined) {
-            updateType(this.form).then(response => {
+            updateType(this.form).then((response) => {
               this.$modal.msgSuccess('修改成功');
               this.open = false;
               this.getList();
             });
           } else {
-            addType(this.form).then(response => {
+            addType(this.form).then((response) => {
               this.$modal.msgSuccess('新增成功');
               this.open = false;
               this.getList();
@@ -209,7 +213,7 @@ export default {
       const dictIds = row.dictId || this.ids;
       this.$modal
         .confirm('是否确认删除字典编号为"' + dictIds + '"的数据项?')
-        .then(function() {
+        .then(function () {
           return delType(dictIds);
         })
         .then(() => {

+ 26 - 17
admin-ui/src/views/work/links/edit.vue → admin-ui/src/views/work/knowledge/edit.vue

@@ -1,14 +1,22 @@
 <template>
   <div class="cmain">
-    <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-      <el-form-item label="名称" prop="title">
-        <el-input v-model="form.title" placeholder="请输入标题" clearable />
-      </el-form-item>
-      <el-form-item label="链接" prop="url">
-        <el-input v-model="form.url" placeholder="请输入链接网址" clearable />
-      </el-form-item>
-      <el-form-item label="排序" prop="orderNum">
-        <el-input type="number" v-model="form.orderNum" placeholder="请输入排序, 数值越小越靠前显示" clearable />
+    <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+      <el-row>
+        <el-col :span="16">
+          <el-form-item label="标题" prop="title">
+            <el-input v-model="form.title" placeholder="请输入标题" clearable />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="分类" prop="type">
+            <el-select v-model="form.type" placeholder="请选择分类">
+              <el-option v-for="dict in dict.type.knowledge_type" :key="dict.value" :label="dict.label" :value="dict.value" clearable></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-form-item label="内容" prop="content">
+        <editor v-model="form.content"></editor>
       </el-form-item>
       <el-form-item label="状态" prop="state">
         <el-select v-model="form.state" placeholder="请选择">
@@ -26,14 +34,15 @@
 
 <script>
 export default {
+  dicts: ['knowledge_type'],
   data() {
     return {
-      form: { orderNum: 0, state: 0 },
+      form: {},
       rules: {
-        title: [{ required: true, message: '栏目名称不能为空' }],
-        url: [{ required: true, message: '跳转url不能为空' }],
-        orderNum: [{ required: true, message: '请输入排序' }],
-        state: [{ required: true, message: '状态不能为空' }]
+        title: [{ required: true, message: '不能为空', trigger: 'blur' }],
+        type: [{ required: true, message: '不能为空', trigger: 'blur' }],
+        content: [{ required: true, message: '不能为空', trigger: 'blur' }],
+        state: [{ required: true, message: '不能为空', trigger: 'blur' }]
       }
     };
   },
@@ -50,7 +59,7 @@ export default {
   },
   mounted() {
     if (this.param.id) {
-      this.ajax({ url: '/work/links/detail/' + this.param.id }).then((response) => {
+      this.ajax({ url: '/work/knowledge/detail/' + this.param.id }).then((response) => {
         this.form = response.data;
       });
     }
@@ -60,13 +69,13 @@ export default {
       this.$refs['form'].validate((valid) => {
         if (valid) {
           if (this.form.id) {
-            this.ajax({ method: 'post', url: '/work/links/edit', data: this.form }).then((response) => {
+            this.ajax({ method: 'post', url: '/work/knowledge/edit', data: this.form }).then((response) => {
               this.$modal.msgSuccess('修改成功');
               this.$layer.close(this.layerid);
               this.$parent.getList();
             });
           } else {
-            this.ajax({ method: 'post', url: '/work/links/add', data: this.form }).then((response) => {
+            this.ajax({ method: 'post', url: '/work/knowledge/add', data: this.form }).then((response) => {
               this.$modal.msgSuccess('新增成功');
               this.$layer.close(this.layerid);
               this.$parent.getList();

+ 35 - 25
admin-ui/src/views/work/links/index.vue → admin-ui/src/views/work/knowledge/index.vue

@@ -1,42 +1,44 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch" label-width="auto">
-      <el-form-item label="名称" prop="title">
-        <el-input v-model="queryParams.title" placeholder="请输入链接名称" clearable @keyup.enter.native="handleQuery" />
+    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch">
+      <el-form-item label="标题" prop="title">
+        <el-input v-model="queryParams.title" placeholder="请输入标题" @keyup.enter.native="handleQuery" clearable />
       </el-form-item>
-      <el-form-item label="状态" prop="state">
-        <el-select v-model="queryParams.state" placeholder="请选择状态" clearable class="se">
-          <el-option :value="0" label="启用"></el-option>
-          <el-option :value="1" label="停用"></el-option>
+      <el-form-item label="分类" prop="title">
+        <el-select v-model="queryParams.type" placeholder="请选择分类" class="se" clearable>
+          <el-option v-for="dict in dict.type.knowledge_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
         </el-select>
       </el-form-item>
+      <el-form-item label="创建日期">
+        <el-date-picker v-model="dateRange" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
     <el-row :gutter="10" class="mb8">
-      <el-button type="primary" icon="el-icon-plus" :disabled="ids.length > 0" @click="op('add')" v-hasPermi="['work:links:add']">新增</el-button>
-      <el-button type="success" icon="el-icon-edit" :disabled="ids.length != 1" @click="op('edit', ids)" v-hasPermi="['work:links:edit']">修改</el-button>
-      <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del" v-hasPermi="['work:links:remove']">删除{{ ids.length > 0 ? '(' + ids.length + ')' : '' }}</el-button>
+      <el-button type="primary" icon="el-icon-plus" :disabled="ids.length > 0" @click="op('add')" v-hasPermi="['work:knowledge:add']">新增</el-button>
+      <el-button type="success" icon="el-icon-edit" :disabled="ids.length != 1" @click="op('edit', ids)" v-hasPermi="['work:knowledge:edit']">修改</el-button>
+      <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del" v-hasPermi="['work:knowledge:remove']">删除{{ ids.length > 0 ? '(' + ids.length + ')' : '' }}</el-button>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table :data="response.rows" border @selection-change="selects" height="calc(100vh - 270px)">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="链接名称" align="left" prop="title" />
-      <el-table-column label="排序" align="center" prop="orderNum" width="150" />
-      <el-table-column label="状态" align="center" width="120">
+      <el-table-column label="标题" align="left" prop="title" />
+      <el-table-column label="分类" align="center" prop="type" width="140" />
+      <el-table-column label="状态" align="center" prop="state" width="140">
         <template slot-scope="scope">
-          <el-tag type="success" v-if="scope.row.state == 0">正常</el-tag>
+          <el-tag type="success" v-if="scope.row.state == 0">启用</el-tag>
           <el-tag type="danger" v-if="scope.row.state == 1">停用</el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="创建时间" prop="createTime" align="center" width="220" />
+      <el-table-column label="创建时间" align="center" prop="createTime" width="200" />
       <el-table-column label="操作" align="center" width="200">
         <template slot-scope="scope">
-          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit', scope.row)" v-hasPermi="['work:links:edit']">修改</el-button>
-          <el-button size="mini" type="text" icon="el-icon-delete" @click="del(scope.row)" v-hasPermi="['work:links:remove']">删除</el-button>
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit', scope.row)" v-hasPermi="['work:knowledge:edit']">修改</el-button>
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="del(scope.row)" v-hasPermi="['work:knowledge:remove']">删除</el-button>
         </template>
       </el-table-column>
       <template slot="empty">
@@ -50,19 +52,22 @@
 <script>
 import edit from './edit';
 export default {
-  name: 'Links',
+  dicts: ['knowledge_type'],
+  name: 'Knowledge',
   data() {
     return {
       ids: [],
       showSearch: true,
       response: {},
+      dateRange: [],
       queryParams: {
         pageNum: 1,
         pageSize: 10,
+        type: null,
         title: null,
-        state: null,
-        orderByColumn: 'orderNum',
-        isAsc: 'asc'
+        deptId: null,
+        orderByColumn: 'id', //排序字段
+        isAsc: 'desc' //排序方式
       }
     };
   },
@@ -71,7 +76,11 @@ export default {
   },
   methods: {
     getList() {
-      this.ajax({ url: '/work/links/list', data: this.queryParams }).then((response) => {
+      if (this.dateRange) {
+        this.queryParams.dateBegin = this.dateRange[0];
+        this.queryParams.dateEnd = this.dateRange[1];
+      }
+      this.ajax({ url: '/work/knowledge/list', data: this.queryParams }).then((response) => {
         this.response = response;
       });
     },
@@ -81,6 +90,7 @@ export default {
     },
     resetQuery() {
       this.resetForm('queryForm');
+      this.dateRange = [];
       this.handleQuery();
     },
     selects(rows) {
@@ -88,16 +98,16 @@ export default {
     },
     op(tag, row) {
       if (tag == 'add') {
-        this.iframe({ obj: edit, param: {}, title: '新增友链', width: '550px', height: '400px' });
+        this.iframe({ obj: edit, param: {}, title: '新增', width: '55%', height: '75%' });
       }
       if (tag == 'edit') {
         const id = row.id || this.ids[0];
-        this.iframe({ obj: edit, param: { id: id }, title: '编辑友链', width: '550px', height: '400px' });
+        this.iframe({ obj: edit, param: { id: id }, title: '编辑', width: '55%', height: '75%' });
       }
     },
     del(row) {
       this.$confirm('是否确认删除选中数据?', '警告', { type: 'warning' }).then(() => {
-        this.get({ url: '/work/links/remove/' + (row.id || this.ids) }).then((response) => {
+        this.get({ url: '/work/knowledge/remove/' + (row.id || this.ids) }).then((response) => {
           this.$modal.msgSuccess('删除成功');
           this.getList();
         });

+ 135 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/api/config/BaseController.java

@@ -0,0 +1,135 @@
+package com.ruoyi.web.work.api.config;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.ruoyi.common.constant.HttpStatus;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.PageDomain;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.page.TableSupport;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.sql.SqlUtil;
+import org.springframework.web.bind.WebDataBinder;
+import org.springframework.web.bind.annotation.InitBinder;
+
+import java.beans.PropertyEditorSupport;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * web层通用数据处理
+ *
+ * @author ruoyi
+ */
+public class BaseController {
+    /**
+     * 将前台传递过来的日期格式的字符串,自动转化为Date类型
+     */
+    @InitBinder
+    public void initBinder(WebDataBinder binder) {
+        // Date 类型转换
+        binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
+            @Override
+            public void setAsText(String text) {
+                setValue(DateUtils.parseDate(text));
+            }
+        });
+    }
+
+    /**
+     * 设置请求分页数据
+     */
+    protected void startPage() {
+        PageUtils.startPage();
+    }
+
+    /**
+     * 设置请求排序数据
+     */
+    protected void startOrderBy() {
+        PageDomain pageDomain = TableSupport.buildPageRequest();
+        if (StringUtils.isNotEmpty(pageDomain.getOrderBy())) {
+            String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
+            PageHelper.orderBy(orderBy);
+        }
+    }
+
+    /**
+     * 清理分页的线程变量
+     */
+    protected void clearPage() {
+        PageUtils.clearPage();
+    }
+
+    /**
+     * 响应请求分页数据
+     */
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    protected TableDataInfo getDataTable(List<?> list) {
+        TableDataInfo rspData = new TableDataInfo();
+        rspData.setCode(HttpStatus.SUCCESS);
+        rspData.setMsg("查询成功");
+        rspData.setRows(list);
+        rspData.setTotal(new PageInfo(list).getTotal());
+        rspData.setPages(new PageInfo(list).getPages());
+        return rspData;
+    }
+    protected TableDataInfo getDataError(String msg) {
+        TableDataInfo rspData = new TableDataInfo();
+        rspData.setCode(HttpStatus.ERROR);
+        rspData.setMsg(msg);
+        return rspData;
+    }
+
+    /**
+     * 返回成功
+     */
+    public AjaxResult success() {
+        return AjaxResult.success();
+    }
+
+    /**
+     * 返回失败消息
+     */
+    public AjaxResult error() {
+        return AjaxResult.error();
+    }
+
+    /**
+     * 返回成功消息
+     */
+    public AjaxResult success(String message) {
+        return AjaxResult.success(message);
+    }
+
+    /**
+     * 返回失败消息
+     */
+    public AjaxResult error(String message) {
+        return AjaxResult.error(message);
+    }
+
+    /**
+     * 响应返回结果
+     *
+     * @param rows 影响行数
+     * @return 操作结果
+     */
+    protected AjaxResult toAjax(int rows) {
+        return rows > 0 ? AjaxResult.success() : AjaxResult.error();
+    }
+
+    /**
+     * 响应返回结果
+     *
+     * @param result 结果
+     * @return 操作结果
+     */
+    protected AjaxResult toAjax(boolean result) {
+        return result ? success() : error();
+    }
+
+
+}

+ 63 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/KnowledgeController.java

@@ -0,0 +1,63 @@
+package com.ruoyi.web.work.controller;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.web.work.domain.Knowledge;
+import com.ruoyi.web.work.service.IKnowledgeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 知识库管理
+ *
+ * @author lsw
+ * @date 2024-07-10
+ */
+@RestController
+@RequestMapping("/work/knowledge")
+public class KnowledgeController extends BaseController {
+    @Autowired
+    private IKnowledgeService knowledgeService;
+
+    @PreAuthorize("@ss.hasPermi('work:knowledge:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(Knowledge knowledge) {
+        startPage();
+        List<Knowledge> list = knowledgeService.selectList(knowledge);
+        return getDataTable(list);
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:knowledge:query')")
+    @GetMapping(value = "/detail/{id}")
+    public AjaxResult detail(@PathVariable("id") Long id) {
+        return AjaxResult.success(knowledgeService.getById(id));
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:knowledge:add')")
+    @Log(title = "知识库管理", businessType = BusinessType.INSERT)
+    @PostMapping("/add")
+    public AjaxResult add(@RequestBody Knowledge knowledge) {
+        return toAjax(knowledgeService.save(knowledge));
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:knowledge:edit')")
+    @Log(title = "知识库管理", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    public AjaxResult edit(@RequestBody Knowledge knowledge) {
+        return toAjax(knowledgeService.updateById(knowledge));
+    }
+
+    @PreAuthorize("@ss.hasPermi('work:knowledge:remove')")
+    @Log(title = "知识库管理", businessType = BusinessType.DELETE)
+    @GetMapping("/remove/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(knowledgeService.removeByIds(Arrays.asList(ids)));
+    }
+}

+ 57 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/Knowledge.java

@@ -0,0 +1,57 @@
+package com.ruoyi.web.work.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.web.work.domain.base.BaseData;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+/**
+ * @author lsw
+ * @date 2024-07-10
+ */
+@Data
+@TableName(value = "tb_knowledge")
+@Accessors(chain = true)
+public class Knowledge extends BaseData {
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    @ApiModelProperty(value = "关联账号")
+    private Long userId;
+
+    @ApiModelProperty(value = "分类")
+    private String type;
+
+    @ApiModelProperty(value = "标题")
+    private String title;
+
+    @ApiModelProperty(value = "内容")
+    private String content;
+
+    @ApiModelProperty(value = "状态:0=正常,1=停用")
+    private Integer state;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateBy;
+
+    @TableField(fill = FieldFill.UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Long deptId;
+
+}

+ 31 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/base/BaseData.java

@@ -0,0 +1,31 @@
+package com.ruoyi.web.work.domain.base;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @author lsw
+ * @date 2024-04-16
+ */
+@Data
+@Accessors(chain = true)
+public class BaseData {
+    private static final long serialVersionUID = 1L;
+
+    //开始日期
+    @TableField(exist = false)
+    @JsonIgnore
+    private String dateBegin;
+
+    //结束日期
+    @TableField(exist = false)
+    @JsonIgnore
+    private String dateEnd;
+
+    //结算单审核人
+    @TableField(exist = false)
+    @JsonIgnore
+    private boolean auditors;
+}

+ 13 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/mapper/KnowledgeMapper.java

@@ -0,0 +1,13 @@
+package com.ruoyi.web.work.mapper;
+
+import java.util.List;
+import com.ruoyi.web.work.domain.Knowledge;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @author lsw
+ * @date 2024-07-10
+ */
+public interface KnowledgeMapper extends BaseMapper<Knowledge> {
+    List<Knowledge> selectList(Knowledge knowledge);
+}

+ 13 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/IKnowledgeService.java

@@ -0,0 +1,13 @@
+package com.ruoyi.web.work.service;
+
+import java.util.List;
+import com.ruoyi.web.work.domain.Knowledge;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @author lsw
+ * @date 2024-07-10
+ */
+public interface IKnowledgeService extends IService<Knowledge>{
+    List<Knowledge> selectList(Knowledge knowledge);
+}

+ 24 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/KnowledgeServiceImpl.java

@@ -0,0 +1,24 @@
+package com.ruoyi.web.work.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.web.work.mapper.KnowledgeMapper;
+import com.ruoyi.web.work.domain.Knowledge;
+import com.ruoyi.web.work.service.IKnowledgeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @author lsw
+ * @date 2024-07-10
+ */
+@Service
+public class KnowledgeServiceImpl extends ServiceImpl<KnowledgeMapper, Knowledge> implements IKnowledgeService {
+    @Autowired
+    private KnowledgeMapper knowledgeMapper;
+
+    @Override
+    public List<Knowledge> selectList(Knowledge knowledge) {
+        return knowledgeMapper.selectList(knowledge);
+    }
+}

+ 19 - 0
ruoyi-admin/src/main/resources/mapper/work/KnowledgeMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.web.work.mapper.KnowledgeMapper">
+    
+    <select id="selectList" resultType="com.ruoyi.web.work.domain.Knowledge">
+        select * from tb_knowledge
+        <where>  
+            <if test="userId != null "> and user_id = #{userId}</if>
+            <if test="type != null  and type != ''"> and type = #{type}</if>
+            <if test="title != null  and title != ''"> and title like concat('%', #{title}, '%')</if>
+            <if test="content != null  and content != ''"> and content = #{content}</if>
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
+            <if test="dateBegin != null  and dateBegin != ''"> AND create_time BETWEEN #{dateBegin} AND #{dateEnd} + INTERVAL 1 DAY</if>
+        </where>
+    </select>
+
+</mapper>

+ 10 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java

@@ -24,6 +24,16 @@ public class SysDictType extends BaseEntity {
     @Excel(name = "字典主键", cellType = ColumnType.NUMERIC)
     private Long dictId;
 
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    private Integer type;
+
     /**
      * 字典名称
      */

+ 5 - 0
ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml

@@ -9,6 +9,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="dictName"   column="dict_name"   />
 		<result property="dictType"   column="dict_type"   />
 		<result property="status"     column="status"      />
+		<result property="type"       column="type"      />
 		<result property="createBy"   column="create_by"   />
 		<result property="createTime" column="create_time" />
 		<result property="updateBy"   column="update_by"   />
@@ -23,6 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	<select id="selectDictTypeList" parameterType="SysDictType" resultMap="SysDictTypeResult">
 	    <include refid="selectDictTypeVo"/>
 		<where>
+            AND type=1
 		    <if test="dictName != null and dictName != ''">
 				AND dict_name like concat('%', #{dictName}, '%')
 			</if>
@@ -43,6 +45,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	
 	<select id="selectDictTypeAll" resultMap="SysDictTypeResult">
 		<include refid="selectDictTypeVo"/>
+		WHERE type =1
 	</select>
 	
 	<select id="selectDictTypeById" parameterType="Long" resultMap="SysDictTypeResult">
@@ -91,6 +94,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null">status,</if>
  			<if test="remark != null and remark != ''">remark,</if>
  			<if test="createBy != null and createBy != ''">create_by,</if>
+		    <if test="type != null">type,</if>
  			create_time
  		)values(
  			<if test="dictName != null and dictName != ''">#{dictName},</if>
@@ -98,6 +102,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null">#{status},</if>
  			<if test="remark != null and remark != ''">#{remark},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
+		    <if test="type != null">#{type},</if>
  			sysdate()
  		)
 	</insert>