tdegin -- upload (自己看)

60 阅读1分钟

最近 一个上传组件假上传,转化html在上传

  <t-dialog v-model:visible="dVisible" :cancelBtn="null" @confirm="dVisible = false" width="600">
    <div class="upload-area">
      <t-upload v-model="files" :requestMethod="handleUpload" placeholder="支持批量上传文件,文件格式不限,最多只能上传 10 份文件"
        :showUploadProgress="false" theme="file-flow" multiple :abridge-name="ABRIDGE_NAME" :auto-upload="true"
        :max="10" :show-thumbnail="false" :allow-upload-duplicate-file="false" :is-batch-upload="false"
        :upload-all-files-in-one-request="true" @success="handleUploadSuccess"></t-upload>

    </div>
  </t-dialog>
  
  
  <script lang="ts">
  //假上传
  function handleUpload(fileList: UploadFile | UploadFile[]): Promise<any> {
  // 模拟异步操作,比如网络请求
  return new Promise((resolve) => {
    setTimeout(() => {
      // 创建一个模拟的成功响应
      const response = {
        status: 'success',
        response: {
          files: [{ url: 'https://xxx.png', name: fileList[0].name, files: fileList[0].raw }]
        }
      };
      resolve(response);
    }, 1000); // 模拟延迟
  });
}
  
  // 处理上传成功
const handleUploadSuccess = async (responses) => {

  if (files.value.length === 0) return
  try {
    //
    const file = responses.currentFiles[0]
    const exists = await checkFileExists(file.name)
    if (exists) {
      MessagePlugin.error('文件已存在于服务器')
      return
    }
    // 转换文档为HTML
    //读取文件转为html格式的文档
    const html = await convertFileToHtml(file.raw)
    console.log('html:', html)
    // 处理文档
    processDocument(html)
    hasFile.value = true
  } catch (error) {
    MessagePlugin.error('文档处理失败')
    console.error(error)
  }
}


// 处理文档HTML
const processDocument = (html: string) => {
  processedHtml.value = '';
  const tempDiv = document.createElement('span');
  tempDiv.innerHTML = html;
  // 处理标题和段落
  const paragraphs = [];
  Array.from(tempDiv.children).forEach(element => {
    if (element.tagName === 'H1' || element.tagName === 'H2') {
      // 如果是标题,直接添加到新的数组中
      paragraphs.push(element.outerHTML);
    } else {
      const sentencesArray = extractAndProcessTextNodes(element);

      if (sentencesArray && sentencesArray.length > 0) {
        // 将句子数组转换为HTML结构
        sentencesArray.forEach(sentence => {
          const sentenceSpan = document.createElement('span');
          sentenceSpan.className = 'sentence';
          sentenceSpan.textContent = sentence;
          paragraphs.push(sentenceSpan.outerHTML);

        });
      }

    }
  });
  // 设置处理后的HTML
  processedHtml.value = paragraphs.join('\n');
  // htmlData.value = processedHtml.value;
  // console.log(' processedHtml.value:', processedHtml.value)

  sendHtml(paragraphs);
  // 下一轮DOM更新后高亮已有标注
  nextTick(() => {

  });

};

const sendHtml = async (paragraphs) => {
  console.log('processedHtml.value:', processedHtml.value)
  const query = {
    projectBizCode: projectBizCode.value,
    taskBizCode: taskBizCode.value,
    fileName: files.value[0].name,
    sentences: paragraphs,
  }
  console.log('query:', query)
  try {
    const res = await sendHtmlFile(query)
  } catch (error) {
    console.error('Error sending HTML file:', error);

  }

}
  </script>