index.vue 2.5 KB
<!--
 * @Description: 文档预览示例页面
 * @Date: 2025-01-30
 * @Usage: 展示 DocumentPreview 组件的各种使用场景
-->
<template>
  <view class="document-demo-page">
    <nut-tabs v-model="activeTab">
      <nut-tab-pane title="PDF 预览" pane-key="pdf">
        <DocumentPreview
          src="https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf"
          fileType="pdf"
          fileName="示例 PDF 文档.pdf"
          @rendered="handleRendered"
          @error="handleError"
        />
      </nut-tab-pane>

      <nut-tab-pane title="Word 预览" pane-key="word">
        <DocumentPreview
          src="https://calibre-ebook.com/downloads/demos/demo.docx"
          fileType="docx"
          fileName="示例 Word 文档.docx"
          @rendered="handleRendered"
          @error="handleError"
        />
      </nut-tab-pane>

      <nut-tab-pane title="Excel 预览" pane-key="excel">
        <DocumentPreview
          src="https://filesamples.com/samples/document/xlsx/sample1.xlsx"
          fileType="xlsx"
          fileName="示例 Excel 文档.xlsx"
          @rendered="handleRendered"
          @error="handleError"
        />
      </nut-tab-pane>

      <nut-tab-pane title="PPT 预览" pane-key="ppt">
        <DocumentPreview
          src="https://filesamples.com/samples/document/ppt/sample1.ppt"
          fileType="ppt"
          fileName="示例 PPT 文档.ppt"
          @rendered="handleRendered"
          @error="handleError"
        />
      </nut-tab-pane>
    </nut-tabs>
  </view>
</template>

<script setup>
import { ref } from 'vue'
import DocumentPreview from '@/components/DocumentPreview/index.vue'

// #ifdef WEAPP
import Taro from '@tarojs/taro'
// #endif

const activeTab = ref('pdf')

const handleRendered = () => {
  console.log('文档渲染完成')
  // #ifdef WEAPP
  Taro.showToast({
    title: '文档加载完成',
    icon: 'success'
  })
  // #endif
}

const handleError = (err) => {
  console.error('文档渲染失败:', err)
  // #ifdef WEAPP
  Taro.showToast({
    title: '文档加载失败',
    icon: 'error'
  })
  // #endif
}
</script>

<style lang="less" scoped>
.document-demo-page {
  min-height: 100vh;
  background: #f5f5f5;
}

.placeholder {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-height: 800rpx;
  padding: 40rpx;
  gap: 20rpx;

  .placeholder-text {
    font-size: 32rpx;
    font-weight: 500;
    color: #333;
  }

  .placeholder-hint {
    font-size: 28rpx;
    color: #999;
  }
}
</style>