瀏覽代碼

完成目录功能

yangg 9 月之前
父節點
當前提交
743105624c

+ 1 - 1
.env.development

@@ -2,5 +2,5 @@
 ENV = 'development'
 port = 8080
 # base api
-VUE_APP_BASE_API = 'http://120.46.190.49:8084'
+VUE_APP_BASE_API = 'http://192.168.1.178:8084'
 #192.168.1.178

File diff suppressed because it is too large
+ 0 - 0
dist/index.html


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-0313b4f9.1ccb7b4f.css


+ 1 - 0
dist/static/css/chunk-2043d8d9.1fa507b0.css

@@ -0,0 +1 @@
+.ledge_box .data-search[data-v-26c5e21c]{padding:20px 10px 0 10px}.ledge_box .data-list[data-v-26c5e21c]{padding:10px;min-height:200px;position:relative}.ledge_box .data-list .time[data-v-26c5e21c]{font-size:13px;color:#999}.ledge_box .data-list .bottom[data-v-26c5e21c]{margin-top:13px;line-height:12px}.ledge_box .data-list .button[data-v-26c5e21c]{padding:0;float:right}.ledge_box .data-list .image[data-v-26c5e21c]{width:100%;display:block}.ledge_box .data-list .clearfix[data-v-26c5e21c]:after,.ledge_box .data-list .clearfix[data-v-26c5e21c]:before{display:table;content:""}.ledge_box .data-list .clearfix[data-v-26c5e21c]:after{clear:both}.ledge_box .data-list .card_box[data-v-26c5e21c]{padding:20px}.ledge_box .data-list .card_box .header[data-v-26c5e21c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ledge_box .data-list .card-col[data-v-26c5e21c]{margin-bottom:30px}.ledge_box .data-list .card-col .card_box[data-v-26c5e21c]{height:235px}.ledge_box .data-list .card-col .card_box .box_content[data-v-26c5e21c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;height:100%}.ledge_box .data-list .card-col .card_box .box_content .content[data-v-26c5e21c]{font-size:24px;line-height:32px;font-weight:600;cursor:pointer;color:rgba(0,0,0,.8784313725490196);word-break:break-all}.ledge_box .data-list .card-col .card_box .box_content .footer[data-v-26c5e21c]{font-size:12px;font-weight:600;color:rgba(0,0,0,.6509803921568628);vertical-align:middle}

File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-67838852.fe4b92c7.css


+ 0 - 1
dist/static/css/chunk-e6bc7406.f494c1ad.css

@@ -1 +0,0 @@
-.ledge_box .data-search[data-v-6061f1dc]{padding:20px 10px 0 10px}.ledge_box .data-list[data-v-6061f1dc]{padding:10px;min-height:200px;position:relative}.ledge_box .data-list .time[data-v-6061f1dc]{font-size:13px;color:#999}.ledge_box .data-list .bottom[data-v-6061f1dc]{margin-top:13px;line-height:12px}.ledge_box .data-list .button[data-v-6061f1dc]{padding:0;float:right}.ledge_box .data-list .image[data-v-6061f1dc]{width:100%;display:block}.ledge_box .data-list .clearfix[data-v-6061f1dc]:after,.ledge_box .data-list .clearfix[data-v-6061f1dc]:before{display:table;content:""}.ledge_box .data-list .clearfix[data-v-6061f1dc]:after{clear:both}.ledge_box .data-list .card_box[data-v-6061f1dc]{padding:20px}.ledge_box .data-list .card_box .header[data-v-6061f1dc]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ledge_box .data-list .card-col[data-v-6061f1dc]{margin-bottom:30px}.ledge_box .data-list .card-col .card_box[data-v-6061f1dc]{height:235px}.ledge_box .data-list .card-col .card_box .box_content[data-v-6061f1dc]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;height:100%}.ledge_box .data-list .card-col .card_box .box_content .content[data-v-6061f1dc]{font-size:24px;line-height:32px;font-weight:600;cursor:pointer;color:rgba(0,0,0,.8784313725490196);word-break:break-all}.ledge_box .data-list .card-col .card_box .box_content .footer[data-v-6061f1dc]{font-size:12px;font-weight:600;color:rgba(0,0,0,.6509803921568628);vertical-align:middle}

File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.8906b707.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-0313b4f9.04f4967e.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-2043d8d9.20cc7c28.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-67838852.97210f14.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-b4ab3520.2d7a6e65.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-e6bc7406.2190a503.js


+ 9 - 0
src/api/knowledge.js

@@ -169,3 +169,12 @@ export function deleteType(data) {
   })
 }
 
+/* 批量移动目录 */
+
+export function batchMove(data) {
+  return request({
+    url: '/kbm/batchMove',
+    method: 'post',
+    data
+  })
+}

+ 3 - 1
src/views/knowledgeMenu/category/components/dataSearch.vue

@@ -93,6 +93,7 @@
             :data="{
               bucket_id: queryForm.bucket_id,
               user_id: queryForm.user_id,
+              doc_type_id:0
             }"
             multiple
             :on-change="handleFileChange"
@@ -237,7 +238,7 @@ export default {
     },
     //搜索
     onSubmit() {
-      console.log(11);
+     
       this.$emit("bindSetQuery", this.$props.queryForm);
     },
     /* 创建模版 */
@@ -279,6 +280,7 @@ export default {
     },
     handleAvatarSuccess(response, res, file) {
       if (response.status == 200) {
+        
         this.$emit("bindSetQuery", this.$props.queryForm);
         this.$message.success("添加成功!");
         this.uploadVisible = false;

+ 148 - 22
src/views/knowledgeMenu/category/knowledgeSet.vue

@@ -18,8 +18,13 @@
             <i class="el-icon-folder"></i>
             {{ node.label }}
           </span>
-          <span class="file-count">{{ data.document_count }} files</span>
-          <span class="folder-actions" v-if="data.id !== 0">
+          <span v-if="data.id !== '001'" :class="getFileCountClass(data.id)"
+            >{{ data.document_count }} files</span
+          >
+          <span
+            class="folder-actions"
+            v-if="data.id !== 0 && data.id !== '001'"
+          >
             <el-tooltip
               class="item"
               effect="dark"
@@ -61,6 +66,7 @@
           >
           <el-button
             type="primary"
+            @click="batchModifyFolder"
             :disabled="!selectedRows.length"
             >批量修改目录</el-button
           >
@@ -70,7 +76,7 @@
           :data="dataList"
           style="width: 100%"
           header-row-class-name="headerBg"
-          empty-text="没有模板信息"
+          empty-text="暂无数据"
           @selection-change="handleSelectionChange"
           @sort-change="handleSortChange"
         >
@@ -229,7 +235,7 @@
             :page-count="pageTotal"
             :page-sizes="[10, 20, 50, 100]"
             background
-            layout="sizes, prev, pager, next"
+            layout="total,sizes, prev, pager, next"
             @current-change="ChangePage"
             @size-change="handleSizeChange"
           >
@@ -312,6 +318,41 @@
             <el-button type="primary" @click="submitNewFolder">确 定</el-button>
           </span>
         </el-dialog>
+        <!-- 批量修改目录 -->
+        <el-dialog
+          title="批量修改目录"
+          :visible.sync="batchModifyFolderDialogVisible"
+          width="30%"
+        >
+          <el-form
+            :model="batchModifyFolderForm"
+            :rules="batchModifyFolderRules"
+            ref="batchModifyFolderFormRef"
+          >
+            <el-form-item label="选择目录" prop="folderId">
+              <el-select
+                v-model="batchModifyFolderForm.folderId"
+                placeholder="请选择目录"
+              >
+                <el-option
+                  v-for="folder in folders.filter((f) => f.id !== 0)"
+                  :key="folder.id"
+                  :label="folder.name"
+                  :value="folder.id"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-form>
+          <span slot="footer" class="dialog-footer">
+            <el-button @click="batchModifyFolderDialogVisible = false"
+              >取 消</el-button
+            >
+            <el-button type="primary" @click="submitBatchModifyFolder"
+              >确 定</el-button
+            >
+          </span>
+        </el-dialog>
       </div>
     </div>
   </div>
@@ -333,6 +374,7 @@ import {
   selectTypeList,
   deleteType,
   Info,
+  batchMove,
 } from "@/api/knowledge";
 export default {
   components: {
@@ -349,14 +391,14 @@ export default {
         page: 1,
         pageSize: 10,
         bucket_id: "",
-        folder: 0,
+        doc_type_id: 0,
       },
       typeForm: {
         page: 1,
-        pageSize: 10,
+        pageSize: 9999,
         kb_id: "",
       },
-      folders: [{ id: 0, name: "All", document_count: 0 }],
+      folders: [{ id: "001", name: "全部", document_count: 0 }],
       defaultProps: {
         children: "children",
         label: "name",
@@ -401,6 +443,16 @@ export default {
           { required: true, message: "请输入文件夹名称", trigger: "blur" },
         ],
       },
+      /* 批量修改目录 */
+      batchModifyFolderDialogVisible: false,
+      batchModifyFolderForm: {
+        folderId: null,
+      },
+      batchModifyFolderRules: {
+        folderId: [
+          { required: true, message: "请选择目标目录", trigger: "change" },
+        ],
+      },
     };
   },
   mounted() {
@@ -416,6 +468,51 @@ export default {
     Object.values(this.analysisStatusCheckers).forEach(clearTimeout);
   },
   methods: {
+    /* 判断类名 */
+    getFileCountClass(id) {
+      const isSpecialFolder = id === 0 || id === "001";
+      console.log(
+        `ID: ${id}, Class: ${isSpecialFolder ? "file-counts" : "file-count"}`
+      );
+      return isSpecialFolder ? "file-counts" : "file-count";
+    },
+    /* 批量修改目录 */
+    batchModifyFolder() {
+      if (this.selectedRows.length === 0) {
+        this.$message.warning("请选择要修改目录的文件");
+        return;
+      }
+      this.batchModifyFolderDialogVisible = true;
+    },
+
+    submitBatchModifyFolder() {
+      this.$refs.batchModifyFolderFormRef.validate((valid) => {
+        if (valid) {
+          const selectedIds = this.selectedRows.map((row) => row.id);
+          console.log(selectedIds);
+          batchMove({
+            ids: JSON.stringify(selectedIds),
+            doc_type_id: this.batchModifyFolderForm.folderId,
+          })
+            .then((res) => {
+              if (res.status === 200) {
+                this.$message.success("批量修改目录成功");
+                this.batchModifyFolderDialogVisible = false;
+                this.search(); // Refresh the document list
+                this.typeList(); // Refresh the folder list
+                this.clearSelection();
+              } else {
+                this.$message.error("批量修改目录失败");
+              }
+            })
+            .catch((error) => {
+              console.error("批量修改目录时出错:", error);
+              this.$message.error("批量修改目录时出错");
+            });
+        }
+      });
+    },
+
     editFolder(folder) {
       this.$prompt("请输入新的文件夹名称", "编辑文件夹", {
         confirmButtonText: "确定",
@@ -484,19 +581,25 @@ export default {
           if (res.status === 200) {
             const folderList = res.data.dataList.map((folder) => ({
               ...folder,
-              document_count: folder.file_count || 0,
+              id: folder.id === 0 ? "001" : folder.id.toString(),
+              document_count: folder.document_count || 0,
             }));
 
             this.folders = [
               {
-                id: 0,
-                name: "All",
+                id: "001",
+                name: "全部",
                 document_count: folderList.reduce(
                   (sum, folder) => sum + folder.document_count,
                   0
                 ),
               },
-              ...folderList.filter((folder) => folder.id !== 0),
+              ...folderList.filter((folder) => folder.id !== "001"),
+              {
+                id: 0, // 给"其他"文件夹一个不同的 id
+                name: "其他",
+                document_count: 0, // 这个值会在 search 方法中更新
+              },
             ];
             this.$nextTick(() => {
               this.initializeTree();
@@ -546,8 +649,12 @@ export default {
     },
 
     initializeTree() {
-      this.$refs.folderTree.setCurrentKey("0");
-      this.handleNodeClick(this.folders[0]); // Trigger initial search for "All"
+      this.$nextTick(() => {
+        if (this.$refs.folderTree) {
+          this.$refs.folderTree.setCurrentKey("001");
+          this.handleNodeClick(this.folders[0]);
+        }
+      });
     },
     checkAuth(path) {
       if (this.roleInfo.is_admin === 1) {
@@ -559,10 +666,11 @@ export default {
     },
 
     setQuery(e) {
-      this.queryForm = e;
+      this.queryForm = { ...this.queryForm, ...e };
+      this.search();
     },
     handleNodeClick(data) {
-      this.queryForm.folder = data.id;
+      this.queryForm.doc_type_id = data.id === "001" ? "" : data.id;
       this.queryForm.page = 1; // Reset to first page when changing folder
       this.search();
     },
@@ -892,13 +1000,24 @@ export default {
           _this.queryForm.pageSize = res.data.pagination.total_size;
           _this.loading = false;
 
-          // Update file count for the selected folder
-          if (_this.queryForm.folder === "0") {
-            // If "All" is selected, update its document_count
-            _this.folders[0].document_count = _this.recordCount;
-          } else {
+          // Count documents with doc_type_id === 0 or null
+          const unclassifiedCount = res.data.documents.filter(
+            (doc) => !doc.doc_type_id || doc.doc_type_id === 0
+          ).length;
+
+          // Update "其他" folder count
+          const otherFolder = _this.folders.find((f) => f.id === 0);
+          if (otherFolder) {
+            otherFolder.document_count = unclassifiedCount;
+          }
+
+          // Update the selected folder count if it's not "全部" or "其他"
+          if (
+            _this.queryForm.doc_type_id &&
+            _this.queryForm.doc_type_id !== 0
+          ) {
             const selectedFolder = _this.folders.find(
-              (f) => f.id === _this.queryForm.folder
+              (f) => f.id === _this.queryForm.doc_type_id
             );
             if (selectedFolder) {
               selectedFolder.document_count = _this.recordCount;
@@ -916,6 +1035,7 @@ export default {
           _this.loading = false;
         });
     },
+
     //修改分页
     ChangePage(e) {
       let _this = this;
@@ -952,7 +1072,13 @@ export default {
     .file-count {
       color: #909399;
       font-size: 12px;
-
+      padding: 2px 6px;
+      border-radius: 10px;
+      transition: opacity 0.3s;
+    }
+    .file-counts {
+      color: #909399;
+      font-size: 12px;
       padding: 2px 6px;
       border-radius: 10px;
       transition: opacity 0.3s;

+ 1 - 1
src/views/knowledgeMenu/knowledgeList.vue

@@ -51,7 +51,7 @@
                     />
                   </div>
                   <el-popover placement="bottom" trigger="hover">
-                    <el-button icon="el-icon-delete" @click="delect(item)"
+                    <el-button type="danger" icon="el-icon-delete" @click="delect(item)"
                       >删除</el-button
                     >
                     <div class="header_right" slot="reference">

Some files were not shown because too many files changed in this diff