annex.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <script setup lang="ts">
  2. import { h, onMounted, ref , computed } from 'vue'
  3. import { NButton,NDataTable,DrawerPlacement,NDrawer,NDrawerContent,
  4. NForm,NFormItem,NInput,NSpin,NSpace,UploadFileInfo,NUpload,NUploadDragger,
  5. NText,NIcon,NP,useMessage,NModal
  6. } from 'naive-ui'
  7. import { getToken } from '@/store/modules/auth/helper'
  8. import { getKnowledgeDetail } from '@/api/knowledge'
  9. import to from "await-to-js";
  10. import { useRouter } from 'vue-router'
  11. const router = useRouter()
  12. onMounted(() => {
  13. kid.value = router.currentRoute.value.query.kid as string
  14. fetchData()
  15. });
  16. const kid = ref<string>('');
  17. const token = getToken()
  18. const message = useMessage()
  19. const headers = {
  20. Authorization: `Bearer ${token}`
  21. }
  22. const spinShow = ref(false);
  23. function handleFinish({event,file}: {
  24. file: UploadFileInfo
  25. event?: ProgressEvent
  26. }) {
  27. message.success('附件上传成功!')
  28. showModal.value = false
  29. // 关闭加载条
  30. spinShow.value = false
  31. }
  32. function handleActionButtonClick(row: any,action1:string): void {
  33. // 跳转到知识片段页面
  34. router.push({ path: '/fragment/t', query: { docId: row.docId } });
  35. }
  36. // 上传之前触发事件
  37. function handleBeforeUpload(){
  38. // 开启加载条
  39. spinShow.value = true
  40. }
  41. const showModal = ref(false)
  42. // 定义一个激活抽屉的函数,接受一个 DrawerPlacement 类型的参数
  43. const activate = (place: DrawerPlacement) => {
  44. showModal.value = true
  45. }
  46. const createColumns = () => {
  47. return [
  48. ...(false
  49. ? [{
  50. title: '附件ID',
  51. key: 'id',
  52. width: 80,
  53. ellipsis: true,
  54. }]
  55. : []),
  56. {
  57. title: '文档编号',
  58. key: 'docId'
  59. },
  60. {
  61. title: '文档名称',
  62. key: 'docName'
  63. },
  64. {
  65. title: '文档类型',
  66. key: 'docType'
  67. },
  68. {
  69. title: '操作',
  70. key: 'actions',
  71. render: (row: any) => {
  72. return [
  73. h(NButton, {
  74. onClick: () => handleActionButtonClick(row, 'action2'),
  75. style: 'margin-left: 8px; color: #FF4500;',
  76. }, { default: () => '删除' }),
  77. h(NButton, {
  78. onClick: () => handleActionButtonClick(row, 'action4'),
  79. style: 'margin-left: 8px; color: #32CD32;',
  80. }, { default: () => '知识片段' })
  81. ];
  82. }
  83. }
  84. ]
  85. }
  86. const tableData = ref([]);
  87. const fetchData = async () => {
  88. try {
  89. // 发起一个请求
  90. const [err, result] = await to(getKnowledgeDetail(kid.value));
  91. console.log("result===", result)
  92. if (err) {
  93. message.error(err.message)
  94. } else {
  95. tableData.value = result;
  96. }
  97. } catch (error) {
  98. console.error('Error fetching data:', error);
  99. }
  100. };
  101. const columns = ref(createColumns());
  102. </script>
  103. <template>
  104. <br>
  105. <div style="display: flex; justify-content: flex-start; margin:10px;">
  106. <n-button @click="activate('right')" type="primary">
  107. 上传附件
  108. </n-button>
  109. </div>
  110. <div class="flex h-full">
  111. <main class="flex-1 overflow-hidden h-full">
  112. <n-data-table :columns="columns" :data="tableData" />
  113. </main>
  114. </div>
  115. <n-modal v-model:show="showModal" title="上传附件" :auto-focus="false" preset="card"
  116. style="width: 90%; max-width: 450px;">
  117. <n-space vertical>
  118. <n-form-item>
  119. <n-spin :show="spinShow">
  120. <!-- @before-upload="beforeUpload" -->
  121. <n-upload
  122. directory-dnd
  123. action="/api/knowledge/attach/upload"
  124. name="file"
  125. :data="{ kid: kid}"
  126. :on-before-upload="handleBeforeUpload"
  127. :headers="headers"
  128. @finish="handleFinish"
  129. :max="1">
  130. <n-upload-dragger>
  131. <div style="margin-bottom: 12px">
  132. <n-icon size="48" :depth="3">
  133. <archive-icon />
  134. </n-icon>
  135. </div>
  136. <n-text style="font-size: 16px">
  137. 请上传一个5MB以内的文件
  138. </n-text>
  139. <n-p depth="3" style="margin: 8px 0 0 0">
  140. 已支持 md、pdf、docx、txt、csv 等文件格式
  141. </n-p>
  142. </n-upload-dragger>
  143. </n-upload>
  144. </n-spin>
  145. </n-form-item>
  146. </n-space>
  147. <br>
  148. </n-modal>
  149. </template>