liudong
2024-07-27 8a04328fbba2139f399cb85ea9581adbe8d7e8c6
知识库页面接口调用开发
5个文件已修改
247 ■■■■ 已修改文件
src/api/interceptor.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/kbList.ts 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/index.ts 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dmx/knowledgeLib/addKnow.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dmx/knowledgeLib/index.vue 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/interceptor.ts
@@ -37,6 +37,7 @@
      }
      config.headers.Authorization = `${authorization}`;
    }
    config.headers.Authorization = 'Ijg3NmFjZjJlNGIzMzExZWY4NzI0MDI0MmFjMTIwMDA2Ig.ZqNvxw.Kgp8PcT4n2cxpzxFrYHttO4i2Eo';
    return config;
  },
  (error) => {
src/api/kbList.ts
@@ -22,28 +22,87 @@
  list: PolicyRecord[];
  total: number;
}
// 知识库列表接口
export function queryKbList(params) {
  return axios.get('/api/v1/kb/list', {
    params
  });
}
// 知识库详情接口
export function queryKbdetail(params) {
  return axios.get('/api/v1/kb/detail', {
    params
  });
}
// 信息接口
export function queryKbtenantInfo(params) {
  return axios.get('/api/v1/user/tenant_info', {
    params
  });
}
// 文档列表接口
export function queryKbDocumentList(params) {
  return axios.get('/api/v1/document/list', {
    params
  });
}
}
// 知识库创建接口
export function kbcreate(params) {
  return axios.post('/api/v1/kb/create', params);
}
// 知识库删除接口
export function deleteKnow(params) {
  return axios.post('/api/v1/kb/rm', params);
}
//知识库更新接口
export function querykbupdate(params) {
  return axios.post('/api/v1/kb/update', params);
}
// 文档上传接口
export function kbdocumentupload(params) {
  return axios.post('/api/v1/document/upload', params);
}
// 文档启动/取消解析接口
export function kbdocumentrun(params) {
  return axios.post('/api/v1/document/run', params);
}
// 文档删除接口
export function kbdocumentrm(params) {
  return axios.post('/api/v1/document/rm', params);
}
// 文件解析方法接口
export function kbdocumentrename(params) {
  return axios.post('/api/v1/document/rename', params);
}
// 文档重命名接口
export function kbdocumentchangeparser(params) {
  return axios.post('/api/v1/document/change_parser', params);
}
src/utils/index.ts
@@ -22,4 +22,49 @@
  'i'
);
/**
 * @description 格式化时间
 * @param time
 * @param cFormat
 * @returns {string|null}
 */
export function parseTime(time, cFormat) {
  if (arguments.length === 0) {
    return null
  }
  const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
  let date
  if (typeof time === 'object') {
    date = time
  } else {
    if (typeof time === 'string' && /^[0-9]+$/.test(time)) {
      time = parseInt(time)
    }
    if (typeof time === 'number' && time.toString().length === 10) {
      time = time * 1000
    }
    date = new Date(time)
  }
  const formatObj = {
    y: date.getFullYear(),
    m: date.getMonth() + 1,
    d: date.getDate(),
    h: date.getHours(),
    i: date.getMinutes(),
    s: date.getSeconds(),
    a: date.getDay(),
  }
  return format.replace(/{([ymdhisa])+}/g, (result, key) => {
    let value = formatObj[key]
    if (key === 'a') {
      return ['日', '一', '二', '三', '四', '五', '六'][value]
    }
    if (result.length > 0 && value < 10) {
      value = '0' + value
    }
    return value || 0
  })
}
export default null;
src/views/dmx/knowledgeLib/addKnow.vue
@@ -22,6 +22,8 @@
<script lang="ts" setup>
import { onMounted ,onBeforeMount, reactive, ref } from "vue";
import { kbcreate } from "@/api/kbList";
import { Message } from '@arco-design/web-vue';
const visible = ref(false);
const loading = ref(false);
@@ -43,8 +45,18 @@
}
const handleSubmit = ({values, errors}) => {
  console.log('values:', values, '\nerrors:', errors)
const emit =  defineEmits(['knowledgeData'])
const handleSubmit = async({values, errors}) => {
  if(errors) return;
    let data = await kbcreate({
      name: values.name,
    })
    if(data.code == 0){
      visible.value = false;
      Message.success('创建成功');
      emit("knowledgeData");
    }
}
const handleClick = () => {
src/views/dmx/knowledgeLib/index.vue
@@ -8,7 +8,7 @@
            :placeholder="$t('cardList.searchInput.placeholder')"
            style="width: 130px;"
          />
          <addKnow></addKnow>
          <addKnow @knowledgeData="knowledgeData"></addKnow>
        </div>
        <div class="lf-container-down">
          <div class="tabs">
@@ -20,6 +20,15 @@
              :class="{ 'active': selectedTab === index }"
            >
              {{ tab.name }}
              <a-popover position="bl">
                <icon-more  :style="{position: 'absolute',top:'10px',right:'20px'}"/>
                <template #content>
                  <a-popconfirm content="确定删除吗?" @ok="deleteKnowledge(tab.id)" type="warning">
                    <span style="cursor: pointer;color: #0960bd;font-size: 12px"><icon-delete />删除</span>
                  </a-popconfirm>
                </template>
              </a-popover>
            </div>
          </div>
        </div>
@@ -154,25 +163,28 @@
<!--                    </span>-->
                    {{record.name}}
                  </template>
                  <template #staue="{ record }">
                    <a-switch :model-value="record.staue"/>
                  <template #create_time="{ record }">
                    <span>{{parseTime(record.create_time)}}</span>
                  </template>
                  <template #status="{ record }">
                    <a-switch v-model="record.status"  checked-value="0" unchecked-value="1"/>
                  </template>
                  <template #run="{ record }">
                    <div style="display: flex;align-items: center;">
                      <div style="width: 100px">
                        <a-popover title="Title">
                        <a-popover title="Title" v-if="record.run == '2'">
                          <a-tag :color="'blue'" border>{{$t('dmx.list.complete')}}</a-tag>
                          <template #content>
                            <p>Here is the text content</p>
                          </template>
                        </a-popover>
                        <a-popover title="Title">
                        <a-popover title="Title" v-if="record.run == '1'">
                          <a-tag :color="'gold'" border>{{$t('dmx.list.cancel')}}</a-tag>
                          <template #content>
                            <p>Here is the text content</p>
                          </template>
                        </a-popover>
                        <a-popover title="Title">
                        <a-popover title="Title" v-if="record.run == '0'">
                          <a-tag :color="'green'" border>{{$t('dmx.list.NotStarted')}}</a-tag>
                          <template #content>
                            <p>Here is the text content</p>
@@ -180,17 +192,17 @@
                        </a-popover>
                      </div>
                      <div>
                        <a-button type="text" size="large">
                        <a-button type="text" size="large" v-if="record.run == '2'">
                          <template #icon>
                            <icon-sync />
                          </template>
                        </a-button>
                        <a-button type="text" size="large">
                        <a-button type="text" size="large" v-if="record.run == '1'">
                          <template #icon>
                            <icon-sync style="color: green" />
                          </template>
                        </a-button>
                        <a-button type="text" size="large">
                        <a-button type="text" size="large" v-if="record.run == '0'">
                          <template #icon>
                            <icon-play-circle style="color: green" />
                          </template>
@@ -198,11 +210,11 @@
                      </div>
                    </div>
                  </template>
                  <template #operations="{ record }" >
                  <template #action="{ record }" >
                    <tool/>
                    <edit/>
                    <a-popconfirm :content="t('dmx.list.EnsureDelete')" type="warning" @ok="deleteItem(record)">
                      <a-button v-permission="['admin']" type="text" size="small">
                    <a-popconfirm :content="t('确定删除吗')" type="warning" @ok="deleteItem(record)">
                      <a-button  type="text" size="small">
                        <template #icon>
                          <icon-delete />
                        </template>
@@ -274,7 +286,15 @@
import { computed, ref, reactive, watch, nextTick, onBeforeMount } from "vue";
  import { useI18n } from 'vue-i18n';
  import useLoading from '@/hooks/loading';
import { queryKbList, PolicyRecord, PolicyParams, queryKbDocumentList } from "@/api/kbList";
import {
  queryKbList,
  PolicyRecord,
  PolicyParams,
  queryKbDocumentList,
  deleteKnow,
  queryKbdetail,
  queryKbtenantInfo
} from "@/api/kbList";
  import { Pagination } from '@/types/global';
  import type { SelectOptionData } from '@arco-design/web-vue/es/select/interface';
  import type { TableColumnData } from '@arco-design/web-vue/es/table/interface';
@@ -288,6 +308,8 @@
  import tool from '@/views/dmx/knowledgeLib/tool.vue'
  import addDetails from '@/views/dmx/knowledgeLib/addDetails.vue'
  import { deleteAccount } from "@/api/account";
import { Message } from "@arco-design/web-vue";
import { parseTime } from "@/utils";
  type SizeProps = 'mini' | 'small' | 'medium' | 'large';
  type Column = TableColumnData & { checked?: true };
  const account = ref(null)
@@ -305,7 +327,7 @@
  const { t } = useI18n();
  const renderData = ref([]);
  const formModel = ref(generateFormModel());
  const cloneColumns = ref<Column[]>([]);
  const cloneColumns = ref([]);
  const showColumns = ref<Column[]>([]);
  const size = ref<SizeProps>('medium');
@@ -357,36 +379,36 @@
    },
    {
      title: t('分快数'),
      dataIndex: 'contentType',
      dataIndex: 'chunk_num',
    },
    {
      title: t('dmx.column.UploadTime'),
      dataIndex: 'filterType',
      dataIndex: 'create_time',
      slotName: 'create_time',
      width:200
    },
    {
      title: t('dmx.column.Founder'),
      dataIndex: 'count',
      title: t('解析方法'),
      dataIndex: 'parser_id',
      slotName: 'parser_id',
    },
    {
      title: t('dmx.column.Status'),
      dataIndex: 'createdTime',
    },
    {
      title: t('dmx.column.Enable'),
      dataIndex: 'staue',
      slotName: 'staue',
    },
    {
      title: t('dmx.column.ParseState'),
      title: t('启用'),
      dataIndex: 'status',
      slotName: 'status',
      slotName: 'status',
    },
    {
      title: t('解析状态'),
      dataIndex: 'run',
      slotName: 'run',
    },
    {
      title: t('dmx.column.Operate'),
      dataIndex: 'operations',
      slotName: 'operations',
      dataIndex: 'action',
      slotName: 'action',
      width: 150,
      minWidth: 100,
      minWidth: 150,
    },
  ]);
  const contentTypeOptions = computed<SelectOptionData[]>(() => [
@@ -432,6 +454,16 @@
        renderData.value = data.data.docs||[];
        pagination.current = params.page;
        pagination.total = data.data.total;
        //   查询知识库详情
        const  kbdetail  = await queryKbdetail({
          kb_id:params.kb_id,
        });
        //   详情
        // const  kbtenantInfo  = await queryKbtenantInfo();
      }
    } catch (err) {
      // you can report use errorHandler or other
@@ -441,10 +473,11 @@
  };
  const search = () => {
    fetchData({
      ...basePagination,
      ...formModel.value,
    });
    alert(1)
    // fetchData({
    //   ...basePagination,
    //   ...formModel.value,
    // });
  };
  const handleClick = ()=>{
@@ -482,6 +515,19 @@
    }
  };
  const deleteKnowledge = async (id) => {
    let data = await deleteKnow({
      kb_id:id
    })
    if(data.code == 0){
      Message.success('删除成功');
      knowledgeData()
    }
  }
  const reset = () => {
    formModel.value = generateFormModel();
  };