CzRger 1 month ago
parent
commit
7043353b46

+ 41 - 5
src/views/manage/knowledge/documents/document/index.vue

@@ -18,7 +18,7 @@
             }
           })"/>
           <CzrButton title="迁移" icon="move"/>
-          <CzrButton title="归档" icon="cloud"/>
+          <CzrButton title="归档" icon="cloud" @click="onKnowledge()"/>
           <CzrButton type="del" title="删除" icon="czr_del" @click="onDel()"/>
         </div>
       </template>
@@ -65,7 +65,7 @@
           <template #caozuo-column-value="{ scope }">
             <div class="__czr-table-operations">
               <CzrButton type="table" title="重命名" @click="onRename(scope.row)"/>
-              <CzrButton type="table" title="迁移"/>
+              <CzrButton type="table" title="迁移" @click="onKnowledge(scope.row)"/>
               <CzrButton type="table" title="归档"/>
               <CzrButton type="table-del" @click="onDel(scope.row)"/>
             </div>
@@ -74,6 +74,7 @@
       </template>
     </CzrContent>
     <renameCom v-model:show="state.rename.show" :transfer="state.rename.transfer" @refresh="onSearch"/>
+    <knowledgeSelectCom v-model:show="state.knowledge.show" :transfer="state.knowledge.transfer" @refresh="onSearch"/>
   </div>
 </template>
 
@@ -84,6 +85,7 @@ import {debounce} from "lodash";
 import {useDialogStore, useDictionaryStore} from "@/stores";
 import {ElMessage} from "element-plus";
 import renameCom from './rename.vue'
+import knowledgeSelectCom from './knowledge-select.vue'
 
 const DialogStore = useDialogStore();
 const DictionaryStore = useDictionaryStore();
@@ -125,6 +127,10 @@ const state: any = reactive({
     show: false,
     transfer: {}
   },
+  knowledge: {
+    show: false,
+    transfer: {}
+  },
 })
 const setText = debounce((v) => {
   state.query.form.name = v
@@ -217,7 +223,18 @@ const onDel = (row: any = null) => {
       }
     })
   } else {
-    console.log(state.query.selected)
+    if (state.query.selected.length === 0) {
+      ElMessage.warning('请至少选择一条记录!')
+      return
+    }
+    DialogStore.confirm({
+      title: '删除确认',
+      content: `是否批量删除${state.query.selected.length}个文档?<br/>所选文档中的分段会跟随删除,请谨慎操作。`,
+      onSubmit: () => {
+        ElMessage.success('删除成功!')
+        onSearch()
+      }
+    })
   }
 }
 const onRename = (row) => {
@@ -226,13 +243,32 @@ const onRename = (row) => {
   }
   state.rename.show = true
 }
-const initDictionary = () => {
-  DictionaryStore.initKnowledgeGroups()
+const onKnowledge = (row: any = null) => {
+  if (row) {
+    state.knowledge.transfer = {
+      row: JSON.parse(JSON.stringify(row)),
+      type: 'text',
+    }
+    state.knowledge.show = true
+  } else {
+    if (state.query.selected.length === 0) {
+      ElMessage.warning('请至少选择一条记录!')
+      return
+    }
+    state.knowledge.transfer = {
+      list: [...state.query.selected],
+      type: 'text',
+    }
+    state.knowledge.show = true
+  }
 }
 onMounted(() => {
   initDictionary()
   onReset()
 })
+const initDictionary = () => {
+  DictionaryStore.initKnowledgeGroups()
+}
 </script>
 
 <style lang="scss" scoped>

+ 104 - 0
src/views/manage/knowledge/documents/document/knowledge-select.vue

@@ -0,0 +1,104 @@
+<template>
+  <CzrDialog
+    :show="show"
+    title="选择知识库"
+    @onClose="$emit('update:show', false)"
+    @onSubmit="onSubmit"
+    width="62.5rem"
+    height="auto"
+    max-height="36rem"
+    :loading="state.loading"
+  >
+    <div class="bm-form">
+      <template v-for="item in state.list">
+        <div class="knowledge-item __hover" :class="{active: item.id == state.active.id}" @click="state.active = item">
+          <img src="@/assets/images/answer.png"/>
+          <div v-title>{{item.name}}</div>
+        </div>
+      </template>
+    </div>
+  </CzrDialog>
+</template>
+
+<script setup lang="ts">
+import {computed, getCurrentInstance, nextTick, reactive, ref, watch} from "vue";
+import {ElMessage, ElMessageBox} from "element-plus";
+import {useDialogStore, useDictionaryStore} from "@/stores";
+import {useRouter} from "vue-router";
+
+const router = useRouter()
+const DictionaryStore = useDictionaryStore();
+const DialogStore = useDialogStore();
+const emit = defineEmits(['update:show', 'refresh'])
+const {proxy} = getCurrentInstance()
+const props = defineProps({
+  show: {default: false},
+  transfer: <any>{}
+})
+const state: any = reactive({
+  loading: false,
+  list: [],
+  active: ''
+})
+watch(() => props.show, (n) => {
+  if (n) {
+    initDictionary()
+  }
+})
+const initDictionary = () => {
+  const arr: any = []
+  for (let i = 1; i <= 100; i++) {
+    arr.push({
+      id: i,
+      name: '部门知识库-新_' + i
+    })
+  }
+  state.list = arr
+}
+const onSubmit = () => {
+  if (state.active.id) {
+    DialogStore.confirm({
+      content: `请确认是否将文档迁移至${state.active.name}?`,
+      onSubmit: () => {
+        state.loading = true
+        ElMessage.success(`迁移成功!`)
+        emit('update:show', false)
+        emit('refresh')
+        state.loading = false
+      }
+    })
+  } else {
+    ElMessage.warning(`请选择知识库!`)
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.bm-form {
+  display: grid;
+  grid-template-columns: repeat(2, 1fr);
+  gap: 1rem;
+  .knowledge-item {
+    height: 5.25rem;
+    box-shadow: 0rem 0.25rem 0.63rem 0rem rgba(40,83,247,0.05);
+    border-radius: 0.63rem;
+    border: var(--czr-border);
+    display: flex;
+    align-items: center;
+    padding: 0 1.5rem;
+    font-weight: bold;
+    font-size: 1.25rem;
+    color: #2E3238;
+    gap: 1rem;
+    >img {
+      width: 2.13rem;
+      height: 2.12rem;
+    }
+    &.active {
+      background: #F3F5FE;
+      box-shadow: 0rem 0.25rem 0.63rem 0rem rgba(40,83,247,0.05);
+      border-color:  var(--czr-main-color);
+    }
+  }
+}
+</style>