{"id":3256,"date":"2025-06-05T06:00:09","date_gmt":"2025-06-04T22:00:09","guid":{"rendered":"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/"},"modified":"2025-06-05T06:00:09","modified_gmt":"2025-06-04T22:00:09","slug":"%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af","status":"publish","type":"post","link":"http:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/","title":{"rendered":"\u9762\u5411\u4e2d\u5c0f\u5b66\u751f\u4ea4\u4e92\u5f0f\u9605\u8bfb\u7cfb\u7edf \u56fe\u4e66\u8d44\u6e90\u7ba1\u7406\u524d\u7aef"},"content":{"rendered":"<div class=\"article_content clearfix\" id=\"article_content\">\n <link href=\"https:\/\/csdnimg.cn\/release\/blogv2\/dist\/mdeditor\/css\/editerView\/kdoc_html_views-1a98987dfd.css\" rel=\"stylesheet\"\/>\n <link href=\"https:\/\/csdnimg.cn\/release\/blogv2\/dist\/mdeditor\/css\/editerView\/ck_htmledit_views-704d5b9767.css\" rel=\"stylesheet\"\/>\n<div class=\"htmledit_views atom-one-dark\" id=\"content_views\">\n<h3>\n   \u9879\u76ee\u8fdb\u5ea6\uff1a<br \/>\n  <\/h3>\n<p>\n   \u5927\u4f53\u5b8c\u6210\u56fe\u4e66\u7ba1\u7406\u754c\u9762\u7684\u8bbe\u8ba1\uff0c\u6279\u91cf\u5bfc\u5165\u65b0\u4e66\uff1a\u652f\u6301PDF\u4e0etxt\u683c\u5f0f\u4e66\u7c4d\u4e0a\u4f20\uff0c\u540e\u53f0\u81ea\u52a8\u89e3\u6790\u4e66\u7c4d\u5143\u6570\u636e\uff08\u4e66\u540d\u3001\u4f5c\u8005\u3001\u7ae0\u8282\u7ed3\u6784\uff09\uff0c\u5e76\u63d0\u53d6\u6b63\u6587\u5185\u5bb9\u751f\u6210\u53ef\u7f16\u8f91\u7684\u6587\u672c\u683c\u5f0f\u3002\u7ba1\u7406\u5458\u53ef\u624b\u52a8\u8865\u5145\u4e66\u7c4d\u7b80\u4ecb\u3001\u6807\u7b7e\uff08\u5982\u201c\u4e03\u5e74\u7ea7\u5fc5\u8bfb\u201d\u201c\u53e4\u5178\u6587\u5b66\u201d\uff09\u53ca\u5c01\u9762\u56fe\u7247\u3002\u7cfb\u7edf\u63d0\u4f9b\u4e66\u7c4d\u72b6\u6001\u7ba1\u7406\uff08\u5982\u4e0a\u67b6\/\u4e0b\u67b6\uff09\u53ca\u5185\u5bb9\u66f4\u65b0\u529f\u80fd\u3002\n  <\/p>\n<p>\n   \u524d\u540e\u7aef\u672a\u8fdb\u884c\u5bf9\u63a5\uff0c\u672a\u6d4b\u8bd5js\n  <\/p>\n<h4>\n   BookUpload.vue<br \/>\n  <\/h4>\n<pre><code class=\"language-html\">&lt;template&gt;\n  &lt;div class=\"upload-container\"&gt;\n    &lt;div class=\"upload-area\" @dragover.prevent @drop.prevent=\"handleDrop\"&gt;\n      &lt;input\n        type=\"file\"\n        multiple\n        accept=\".pdf,.txt\"\n        ref=\"fileInput\"\n        @change=\"handleFileSelect\"\n        class=\"file-input\"\n      \/&gt;\n      &lt;div v-if=\"!uploading\"&gt;\n        &lt;img src=\"@\/assets\/icons\/upload.svg\" alt=\"Upload\" class=\"upload-icon\" \/&gt;\n        &lt;p&gt;\u62d6\u653e\u6587\u4ef6\u5230\u8fd9\u91cc\u6216\u70b9\u51fb\u4e0a\u4f20&lt;\/p&gt;\n        &lt;p class=\"file-types\"&gt;\u652f\u6301 PDF \u548c TXT \u683c\u5f0f&lt;\/p&gt;\n        &lt;button class=\"upload-btn\" @click=\"$refs.fileInput.click()\"&gt;\u9009\u62e9\u6587\u4ef6&lt;\/button&gt;\n      &lt;\/div&gt;\n      &lt;div v-else class=\"upload-progress\"&gt;\n        &lt;div class=\"progress-container\"&gt;\n          &lt;div class=\"progress-bar\" :style=\"{ width: uploadProgress + '%' }\"&gt;&lt;\/div&gt;\n        &lt;\/div&gt;\n        &lt;p&gt;\u4e0a\u4f20\u4e2d... {<!-- -->{ uploadProgress }}%&lt;\/p&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n    \n    &lt;div v-if=\"fileList.length &gt; 0\" class=\"file-list\"&gt;\n      &lt;h3&gt;\u5df2\u9009\u62e9\u7684\u6587\u4ef6:&lt;\/h3&gt;\n      &lt;div class=\"file-item\" v-for=\"(file, index) in fileList\" :key=\"index\"&gt;\n        &lt;span&gt;{<!-- -->{ file.name }}&lt;\/span&gt;\n        &lt;span class=\"file-status\"&gt;{<!-- -->{ file.status }}&lt;\/span&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n\n&lt;script setup&gt;\nimport { ref, reactive } from 'vue';\nimport { useUploadStore } from '@\/stores\/uploadStore';\nimport { uploadBooks } from '@\/services\/api';\n\nconst uploadStore = useUploadStore();\nconst fileInput = ref(null);\nconst fileList = reactive([]);\nconst uploading = ref(false);\nconst uploadProgress = ref(0);\n\nconst handleFileSelect = (event) =&gt; {\n  const files = Array.from(event.target.files);\n  addFilesToQueue(files);\n};\n\nconst handleDrop = (event) =&gt; {\n  const files = Array.from(event.dataTransfer.files);\n  addFilesToQueue(files);\n};\n\nconst addFilesToQueue = (files) =&gt; {\n  files.forEach(file =&gt; {\n    if (file.type === 'application\/pdf' || file.name.endsWith('.txt')) {\n      fileList.push({\n        name: file.name,\n        file: file,\n        status: '\u5f85\u5904\u7406'\n      });\n    }\n  });\n  fileInput.value.value = '';\n};\n\nconst startUpload = async () =&gt; {\n  if (fileList.length === 0) return;\n  \n  uploading.value = true;\n  uploadProgress.value = 0;\n  \n  const formData = new FormData();\n  fileList.forEach(file =&gt; {\n    formData.append('books file',.file);\n  });\n  \n  try {\n    const timer = setInterval(() =&gt; {\n      if (uploadProgress.value &lt; 100) {\n        uploadProgress.value += 1;\n      } else {\n        clearInterval(timer);\n      }\n    }, 100);\n    \n    const response = await uploadBooks(formData);\n    uploadStore.updateBookList(response.data);\n    showSuccessNotification('\u4e0a\u4f20\u6210\u529f');\n  } catch (error) {\n    showErrorNotification('\u4e0a\u4f20\u5931\u8d25: ' + error.message);\n  } finally {\n    uploading.value = false;\n    fileList.splice(0, fileList.length);\n  }\n};\n&lt;\/script&gt;\n\n&lt;style scoped&gt;\n.upload-container {\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n}\n\n.upload-area {\n  border: 2px dashed #ccc;\n  border-radius: 8px;\n  padding: 30px;\n  text-align: center;\n  cursor: pointer;\n  transition: all 0.3s;\n}\n\n.upload-area:hover {\n  border-color: #42b983;\n  background-color: #f9f9f9;\n}\n\n.upload-icon {\n  width: 64px;\n  height: 64px;\n  margin-bottom: 15px;\n}\n\n.file-types {\n  color: #666;\n  margin: 10px 0;\n}\n\n.upload-btn {\n  background-color: #42b983;\n  color: white;\n  border: none;\n  padding: 10px 20px;\n  border-radius: 4px;\n  cursor: pointer;\n  font-size: 16px;\n}\n\n.upload-progress {\n  padding: 20px 0;\n}\n\n.progress-container {\n  width: 100%;\n  height: 10px;\n  background-color: #eee;\n  border-radius: 5px;\n  margin: 15px 0;\n  overflow: hidden;\n}\n\n.progress-bar {\n  height: 100%;\n  background-color: #42b983;\n  transition: width 0.3s;\n}\n\n.file-list {\n  background-color: #f5f5f5;\n  padding: 15px;\n  border-radius: 5px;\n}\n\n.file-item {\n  display: flex;\n  justify-content: space-between;\n  padding: 8px 0;\n  border-bottom: 1px solid #ddd;\n}\n\n.file-status {\n  color: #666;\n}\n\n.file-input {\n  display: none;\n}\n&lt;\/style&gt;<\/code><\/pre>\n<h4>\n   BookDetail.vue<br \/>\n  <\/h4>\n<pre><code class=\"language-html\">&lt;template&gt;\n  &lt;div class=\"book-detail-container\"&gt;\n    &lt;div class=\"book-header\"&gt;\n      &lt;div class=\"book-cover\"&gt;\n        &lt;img :src=\"book.coverUrl || defaultCover\" alt=\"\u4e66\u7c4d\u5c01\u9762\" \/&gt;\n        &lt;CoverUploader @cover-uploaded=\"updateCover\" \/&gt;\n      &lt;\/div&gt;\n      &lt;div class=\"book-info\"&gt;\n        &lt;h2&gt;{<!-- -->{ book.title }}&lt;\/h2&gt;\n        &lt;p class=\"author\"&gt;\u4f5c\u8005: {<!-- -->{ book.author }}&lt;\/p&gt;\n        &lt;p class=\"publish-date\"&gt;\u53d1\u5e03\u65e5\u671f: {<!-- -->{ formatDate(book.publishDate) }}&lt;\/p&gt;\n        \n        &lt;div class=\"status-controls\"&gt;\n          &lt;select v-model=\"book.status\" @change=\"updateBookStatus\"&gt;\n            &lt;option value=\"onShelf\"&gt;\u4e0a\u67b6&lt;\/option&gt;\n            &lt;option value=\"offShelf\"&gt;\u4e0b\u67b6&lt;\/option&gt;\n            &lt;option value=\"pending\"&gt;\u5f85\u5ba1\u6838&lt;\/option&gt;\n          &lt;\/select&gt;\n          &lt;button @click=\"editBook\"&gt;\u7f16\u8f91&lt;\/button&gt;\n        &lt;\/div&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n    \n    &lt;div class=\"book-meta\"&gt;\n      &lt;div class=\"meta-section\"&gt;\n        &lt;h3&gt;\u4e66\u7c4d\u7b80\u4ecb&lt;\/h3&gt;\n        &lt;p v-if=\"!editing\"&gt;{<!-- -->{ book.description || '\u6682\u65e0\u7b80\u4ecb' }}&lt;\/p&gt;\n        &lt;textarea \n          v-else \n          v-model=\"book.description\" \n          placeholder=\"\u6dfb\u52a0\u4e66\u7c4d\u7b80\u4ecb\"\n          class=\"edit-textarea\"\n        &gt;&lt;\/textarea&gt;\n      &lt;\/div&gt;\n      \n      &lt;div class=\"meta-section\"&gt;\n        &lt;h3&gt;\u6807\u7b7e&lt;\/h3&gt;\n        &lt;div v-if=\"!editing\" class=\"tag-list\"&gt;\n          &lt;Tag v-for=\"(tag, index) in book.tags\" :key=\"index\" :tag=\"tag\" \/&gt;\n        &lt;\/div&gt;\n        &lt;div v-else class=\"tag-editor\"&gt;\n          &lt;TagSelector v-model=\"selectedTags\" :existing-tags=\"book.tags\" \/&gt;\n        &lt;\/div&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n    \n    &lt;div class=\"book-content\"&gt;\n      &lt;h3&gt;\u7ae0\u8282\u5217\u8868&lt;\/h3&gt;\n      &lt;ul class=\"chapter-list\"&gt;\n        &lt;li \n          v-for=\"(chapter, index) in book.chapters\" \n          :key=\"index\" \n          @click=\"openChapterEditor(index)\"\n          :class=\"{ active: activeChapter === index }\"\n        &gt;\n          &lt;span&gt;{<!-- -->{ chapter.title }}&lt;\/span&gt;\n          &lt;button class=\"edit-btn\" @click.stop=\"openChapterEditor(index)\"&gt;\u7f16\u8f91&lt;\/button&gt;\n        &lt;\/li&gt;\n      &lt;\/ul&gt;\n      \n      &lt;div v-if=\"activeChapter !== null\" class=\"chapter-editor\"&gt;\n        &lt;textarea \n          v-model=\"book.chapters[activeChapter].content\" \n          class=\"chapter-content\"\n        &gt;&lt;\/textarea&gt;\n        &lt;div class=\"editor-actions\"&gt;\n          &lt;button @click=\"saveChapterChanges\"&gt;\u4fdd\u5b58&lt;\/button&gt;\n          &lt;button @click=\"activeChapter = null\" class=\"cancel-btn\"&gt;\u53d6\u6d88&lt;\/button&gt;\n        &lt;\/div&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n    \n    &lt;div v-if=\"editing\" class=\"save-actions\"&gt;\n      &lt;button @click=\"saveBookChanges\"&gt;\u4fdd\u5b58\u4fee\u6539&lt;\/button&gt;\n      &lt;button @click=\"cancelEditing\" class=\"cancel-btn\"&gt;\u53d6\u6d88&lt;\/button&gt;\n    &lt;\/div&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n\n&lt;script setup&gt;\nimport { ref, watch } from 'vue';\nimport { useBookStore } from '@\/stores\/bookStore';\nimport Tag from '@\/components\/UI\/Tag.vue';\nimport TagSelector from '@\/components\/UI\/TagSelector.vue';\nimport CoverUploader from '@\/components\/UI\/CoverUploader.vue';\n\nconst props = defineProps({\n  bookId: {\n    type: String,\n    required: true\n  }\n});\n\nconst bookStore = useBookStore();\nconst defaultCover = '\/default-book-cover.png';\nconst editing = ref(false);\nconst activeChapter = ref(null);\nconst selectedTags = ref([]);\n\nconst book = ref({\n  title: '',\n  author: '',\n  publishDate: '',\n  coverUrl: '',\n  description: '',\n  tags: [],\n  status: 'onShelf',\n  chapters: []\n});\n\nconst formatDate = (dateString) =&gt; {\n  const date = new Date(dateString);\n  return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\n};\n\nconst editBook = () =&gt; {\n  editing.value = true;\n  selectedTags.value = [...book.value.tags];\n};\n\nconst saveBookChanges = async () =&gt; {\n  try {\n    await bookStore.updateBook(book.value);\n    editing.value = false;\n    showNotification('\u4e66\u7c4d\u4fe1\u606f\u5df2\u66f4\u65b0');\n  } catch (error) {\n    showErrorNotification('\u66f4\u65b0\u5931\u8d25: ' + error.message);\n  }\n};\n\nconst cancelEditing = () =&gt; {\n  editing.value = false;\n  selectedTags.value = [];\n};\n\nconst updateCover = (coverUrl) =&gt; {\n  book.value.coverUrl = coverUrl;\n};\n\nconst updateBookStatus = async () =&gt; {\n  try {\n    await bookStore.updateBookStatus(book.value.id, book.value.status);\n    showNotification('\u4e66\u7c4d\u72b6\u6001\u5df2\u66f4\u65b0');\n  } catch (error) {\n    showErrorNotification('\u66f4\u65b0\u72b6\u6001\u5931\u8d25: ' + error.message);\n  }\n};\n\nconst openChapterEditor = (index) =&gt; {\n  activeChapter.value = index;\n};\n\nconst saveChapterChanges = () =&gt; {\n  activeChapter.value = null;\n  showNotification('\u7ae0\u8282\u5185\u5bb9\u5df2\u4fdd\u5b58');\n};\n\nwatch(() =&gt; props.bookId, async (newId) =&gt; {\n  if (newId) {\n    const fetchedBook = await bookStore.fetchBookById(newId);\n    book.value = fetchedBook;\n  }\n}, { immediate: true });\n&lt;\/script&gt;\n\n&lt;style scoped&gt;\n.book-detail-container {\n  background-color: #fff;\n  border-radius: 8px;\n  padding: 20px;\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n\n.book-header {\n  display: flex;\n  gap: 30px;\n  margin-bottom: 30px;\n}\n\n.book-cover {\n  position: relative;\n  width: 200px;\n  height: 300px;\n}\n\n.book-cover img {\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  border-radius: 5px;\n}\n\n.book-info {\n  flex: 1;\n}\n\n.book-info h2 {\n  margin-top: 0;\n  margin-bottom: 10px;\n  font-size: 24px;\n}\n\n.author {\n  font-size: 18px;\n  color: #555;\n  margin-bottom: 5px;\n}\n\n.publish-date {\n  color: #888;\n  margin-bottom: 15px;\n}\n\n.status-controls {\n  display: flex;\n  gap: 10px;\n  margin-top: 15px;\n}\n\n.status-controls select {\n  padding: 8px 12px;\n  border-radius: 4px;\n  border: 1px solid #ddd;\n}\n\n.status-controls button {\n  padding: 8px 15px;\n  background-color: #42b983;\n  color: white;\n  border: none;\n  border-radius: 4px;\n  cursor: pointer;\n}\n\n.book-meta {\n  display: flex;\n  gap: 30px;\n  margin-bottom: 30px;\n}\n\n.meta-section {\n  flex: 1;\n}\n\n.meta-section h3 {\n  margin-top: 0;\n  margin-bottom: 15px;\n  font-size: 18px;\n  border-bottom: 1px solid #eee;\n  padding-bottom: 8px;\n}\n\n.tag-list {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n}\n\n.chapter-list {\n  list-style-type: none;\n  padding: 0;\n  margin: 0;\n}\n\n.chapter-list li {\n  display: flex;\n  justify-content: space-between;\n  padding: 10px 15px;\n  border-bottom: 1px solid #eee;\n  cursor: pointer;\n}\n\n.chapter-list li.active {\n  background-color: #f0f8ff;\n}\n\n.chapter-list .edit-btn {\n  background-color: #2c3e50;\n  color: white;\n  border: none;\n  padding: 3px 8px;\n  border-radius: 3px;\n  cursor: pointer;\n  font-size: 12px;\n}\n\n.chapter-editor {\n  margin-top: 20px;\n  padding: 15px;\n  background-color: #f9f9f9;\n  border-radius: 5px;\n  border: 1px solid #ddd;\n}\n\n.chapter-content {\n  width: 100%;\n  height: 300px;\n  padding: 10px;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  resize: vertical;\n  margin-bottom: 10px;\n  font-family: inherit;\n}\n\n.editor-actions {\n  display: flex;\n  justify-content: flex-end;\n  gap: 10px;\n}\n\n.editor-actions button {\n  padding: 8px 15px;\n  border-radius: 4px;\n  cursor: pointer;\n}\n\n.editor-actions .cancel-btn {\n  background-color: #ccc;\n  color: #333;\n  border: none;\n}\n\n.save-actions {\n  margin-top: 20px;\n  display: flex;\n  justify-content: flex-end;\n  gap: 10px;\n}\n\n.save-actions button {\n  padding: 10px 20px;\n  border-radius: 4px;\n  cursor: pointer;\n}\n\n.save-actions .cancel-btn {\n  background-color: #ccc;\n  color: #333;\n  border: none;\n}\n\n.edit-textarea {\n  width: 100%;\n  height: 150px;\n  padding: 10px;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  resize: vertical;\n  margin-bottom: 10px;\n  font-family: inherit;\n}\n&lt;\/style&gt;<\/code><\/pre>\n<h4>\n   BookManagement.vue<br \/>\n  <\/h4>\n<pre><code class=\"language-html\">&lt;template&gt;\n  &lt;div class=\"book-management-view\"&gt;\n    &lt;div class=\"page-header\"&gt;\n      &lt;h1&gt;\u56fe\u4e66\u7ba1\u7406\u7cfb\u7edf&lt;\/h1&gt;\n      &lt;div class=\"header-actions\"&gt;\n        &lt;button @click=\"openUploadModal\" class=\"upload-btn\"&gt;\n          &lt;img src=\"@\/assets\/icons\/upload.svg\" alt=\"\u4e0a\u4f20\" class=\"action-icon\" \/&gt;\n          \u6279\u91cf\u4e0a\u4f20\u56fe\u4e66\n        &lt;\/button&gt;\n        &lt;button @click=\"openNewBookModal\" class=\"new-book-btn\"&gt;\n          &lt;img src=\"@\/assets\/icons\/add.svg\" alt=\"\u6dfb\u52a0\" class=\"action-icon\" \/&gt;\n          \u6dfb\u52a0\u5355\u672c\u56fe\u4e66\n        &lt;\/button&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n    \n    &lt;div class=\"filters\"&gt;\n      &lt;div class=\"filter-group\"&gt;\n        &lt;label for=\"status-filter\"&gt;\u72b6\u6001:&lt;\/label&gt;\n        &lt;select id=\"status-filter\" v-model=\"filters.status\" @change=\"applyFilters\"&gt;\n          &lt;option value=\"\"&gt;\u5168\u90e8&lt;\/option&gt;\n          &lt;option value=\"onShelf\"&gt;\u4e0a\u67b6&lt;\/option&gt;\n          &lt;option value=\"offShelf\"&gt;\u4e0b\u67b6&lt;\/option&gt;\n          &lt;option value=\"pending\"&gt;\u5f85\u5ba1\u6838&lt;\/option&gt;\n        &lt;\/select&gt;\n      &lt;\/div&gt;\n      \n      &lt;div class=\"filter-group\"&gt;\n        &lt;label for=\"tag-filter\"&gt;\u6807\u7b7e:&lt;\/label&gt;\n        &lt;TagSelector \n          id=\"tag-filter\" \n          v-model=\"filters.tags\" \n          @change=\"applyFilters\" \n          :multiple=\"true\" \n        \/&gt;\n      &lt;\/div&gt;\n      \n      &lt;div class=\"filter-group search-group\"&gt;\n        &lt;input \n          type=\"text\" \n          v-model=\"filters.search\" \n          placeholder=\"\u641c\u7d22\u4e66\u540d\u3001\u4f5c\u8005\u6216\u5185\u5bb9...\" \n          @input=\"applyFilters\"\n        \/&gt;\n        &lt;button @click=\"applyFilters\" class=\"search-btn\"&gt;\n          &lt;img src=\"@\/assets\/icons\/search.svg\" alt=\"\u641c\u7d22\" class=\"action-icon\" \/&gt;\n        &lt;\/button&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n    \n    &lt;div class=\"books-container\"&gt;\n      &lt;div class=\"books-grid\"&gt;\n        &lt;BookCard \n          v-for=\"book in filteredBooks\" \n          :key=\"book.id\" \n          :book=\"book\" \n          @edit=\"openBookDetail(book.id)\"\n        \/&gt;\n      &lt;\/div&gt;\n      \n      &lt;div v-if=\"filteredBooks.length === 0\" class=\"no-results\"&gt;\n        &lt;img src=\"@\/assets\/icons\/no-books.svg\" alt=\"No Books\" \/&gt;\n        &lt;p&gt;\u6ca1\u6709\u627e\u5230\u7b26\u5408\u7b5b\u9009\u6761\u4ef6\u7684\u56fe\u4e66&lt;\/p&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n    \n    &lt;Pagination \n      :total=\"totalBooks\" \n      :page=\"currentPage\" \n      :limit=\"booksPerPage\" \n      @page-changed=\"changePage\"\n    \/&gt;\n    \n    &lt;UploadModal v-model:visible=\"uploadModalVisible\" \/&gt;\n    &lt;NewBookModal v-model:visible=\"newBookModalVisible\" \/&gt;\n    &lt;BookDetailModal v-model:visible=\"bookDetailModalVisible\" :bookId=\"selectedBookId\" \/&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n\n&lt;script setup&gt;\nimport { ref, computed, onMounted, watch } from 'vue';\nimport { useBookStore, useUploadStore } from '@\/stores';\nimport BookCard from '@\/components\/BookManagement\/BookCard.vue';\nimport UploadModal from '@\/components\/BookManagement\/UploadModal.vue';\nimport NewBookModal from '@\/components\/BookManagement\/NewBookModal.vue';\nimport BookDetailModal from '@\/components\/BookManagement\/BookDetailModal.vue';\nimport Pagination from '@\/components\/UI\/Pagination.vue';\nimport TagSelector from '@\/components\/UI\/TagSelector.vue';\n\nconst bookStore = useBookStore();\nconst uploadStore = useUploadStore();\n\nconst currentPage = ref(1);\nconst booksPerPage = ref(12);\nconst uploadModalVisible = ref(false);\nconst newBookModalVisible = ref(false);\nconst bookDetailModalVisible = ref(false);\nconst selectedBookId = ref(null);\n\nconst filters = reactive({\n  status: '',\n  tags: [],\n  search: ''\n});\n\nconst totalBooks = computed(() =&gt; bookStore.totalBooks);\nconst filteredBooks = computed(() =&gt; {\n  return bookStore.filteredBooks({\n    status: filters.status,\n    tags: filters.tags,\n    search: filters.search,\n    page: currentPage.value,\n    limit: booksPerPage.value\n  });\n});\n\nconst openUploadModal = () =&gt; {\n  uploadModalVisible.value = true;\n};\n\nconst openNewBookModal = () =&gt; {\n  newBookModalVisible.value = true;\n};\n\nconst openBookDetail = (bookId) =&gt; {\n  selectedBookId.value = bookId;\n  bookDetailModalVisible.value = true;\n};\n\nconst applyFilters = () =&gt; {\n  currentPage.value = 1;\n};\n\nconst changePage = (page) =&gt; {\n  currentPage.value = page;\n};\n\nwatch([currentPage, filters], () =&gt; {\n  bookStore.applyFilters({\n    ...filters,\n    page: currentPage.value,\n    limit: booksPerPage.value\n  });\n});\n\nonMounted(async () =&gt; {\n  await bookStore.fetchBooks({\n    page: currentPage.value,\n    limit: booksPerPage.value\n  });\n});\n&lt;\/script&gt;\n\n&lt;style scoped&gt;\n.book-management-view {\n  padding: 20px;\n  max-width: 1400px;\n  margin: 0 auto;\n}\n\n.page-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: 25px;\n}\n\n.page-header h1 {\n  margin: 0;\n  font-size: 28px;\n  color: #333;\n}\n\n.header-actions {\n  display: flex;\n  gap: 15px;\n}\n\n.upload-btn, .new-book-btn {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 10px 15px;\n  border-radius: 4px;\n  cursor: pointer;\n  font-weight: 500;\n  transition: all 0.2s;\n}\n\n.upload-btn {\n  background-color: #42b983;\n  color: white;\n  border: none;\n}\n\n.new-book-btn {\n  background-color: #2c3e50;\n  color: white;\n  border: none;\n}\n\n.upload-btn:hover, .new-book-btn:hover {\n  opacity: 0.9;\n  transform: translateY(-2px);\n}\n\n.filters {\n  display: flex;\n  gap: 20px;\n  margin-bottom: 25px;\n  flex-wrap: wrap;\n}\n\n.filter-group {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.filter-group label {\n  font-size: 14px;\n  color: #555;\n}\n\n.filter-group select {\n  padding: 8px 12px;\n  border-radius: 4px;\n  border: 1px solid #ddd;\n  min-width: 150px;\n}\n\n.search-group {\n  flex: 1;\n  min-width: 300px;\n}\n\n.search-group input {\n  flex: 1;\n  padding: 8px 12px;\n  border-radius: 4px 0 0 4px;\n  border: 1px solid #ddd;\n  border-right: none;\n}\n\n.search-btn {\n  padding: 8px 12px;\n  background-color: #42b983;\n  color: white;\n  border: none;\n  border-radius: 0 4px 4px 0;\n  cursor: pointer;\n}\n\n.books-container {\n  position: relative;\n}\n\n.books-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(202px, 1fr));\n  gap: 25px;\n  margin-bottom: 30px;\n}\n\n.no-results {\n  text-align: center;\n  padding: 50px;\n  color: #999;\n}\n\n.no-results img {\n  width: 150px;\n  height: 150px;\n  margin-bottom: 15px;\n}\n\n.action-icon {\n  width: 18px;\n  height: 18px;\n}\n&lt;\/style&gt;<\/code><\/pre>\n<\/p><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u9879\u76ee\u8fdb\u5ea6\uff1a \u5927\u4f53\u5b8c\u6210\u56fe\u4e66\u7ba1\u7406\u754c\u9762\u7684\u8bbe\u8ba1\uff0c\u6279\u91cf\u5bfc\u5165\u65b0\u4e66\uff1a\u652f\u6301PDF\u4e0etxt\u683c\u5f0f\u4e66\u7c4d\u4e0a\u4f20\uff0c\u540e\u53f0\u81ea\u52a8\u89e3\u6790\u4e66\u7c4d\u5143\u6570\u636e\uff08 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":215,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[],"class_list":["post-3256","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-17"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u9762\u5411\u4e2d\u5c0f\u5b66\u751f\u4ea4\u4e92\u5f0f\u9605\u8bfb\u7cfb\u7edf \u56fe\u4e66\u8d44\u6e90\u7ba1\u7406\u524d\u7aef - \u7269\u5ae9\u8f6f\u4ef6\u8d44\u8baf\u7f51<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/\u9762\u5411\u4e2d\u5c0f\u5b66\u751f\u4ea4\u4e92\u5f0f\u9605\u8bfb\u7cfb\u7edf-\u56fe\u4e66\u8d44\u6e90\u7ba1\u7406\u524d\u7aef\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u9762\u5411\u4e2d\u5c0f\u5b66\u751f\u4ea4\u4e92\u5f0f\u9605\u8bfb\u7cfb\u7edf \u56fe\u4e66\u8d44\u6e90\u7ba1\u7406\u524d\u7aef - \u7269\u5ae9\u8f6f\u4ef6\u8d44\u8baf\u7f51\" \/>\n<meta property=\"og:description\" content=\"\u9879\u76ee\u8fdb\u5ea6\uff1a \u5927\u4f53\u5b8c\u6210\u56fe\u4e66\u7ba1\u7406\u754c\u9762\u7684\u8bbe\u8ba1\uff0c\u6279\u91cf\u5bfc\u5165\u65b0\u4e66\uff1a\u652f\u6301PDF\u4e0etxt\u683c\u5f0f\u4e66\u7c4d\u4e0a\u4f20\uff0c\u540e\u53f0\u81ea\u52a8\u89e3\u6790\u4e66\u7c4d\u5143\u6570\u636e\uff08 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/\u9762\u5411\u4e2d\u5c0f\u5b66\u751f\u4ea4\u4e92\u5f0f\u9605\u8bfb\u7cfb\u7edf-\u56fe\u4e66\u8d44\u6e90\u7ba1\u7406\u524d\u7aef\/\" \/>\n<meta property=\"og:site_name\" content=\"\u7269\u5ae9\u8f6f\u4ef6\u8d44\u8baf\u7f51\" \/>\n<meta property=\"article:published_time\" content=\"2025-06-04T22:00:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.wunen.com\/wp-content\/uploads\/2025\/03\/\u8d44\u8baf.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"260\" \/>\n\t<meta property=\"og:image:height\" content=\"180\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin@wunen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin@wunen\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/\"},\"author\":{\"name\":\"admin@wunen\",\"@id\":\"https:\/\/www.wunen.com\/#\/schema\/person\/d5f7a6cf545656a9c90d507e64452db8\"},\"headline\":\"\u9762\u5411\u4e2d\u5c0f\u5b66\u751f\u4ea4\u4e92\u5f0f\u9605\u8bfb\u7cfb\u7edf \u56fe\u4e66\u8d44\u6e90\u7ba1\u7406\u524d\u7aef\",\"datePublished\":\"2025-06-04T22:00:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/\"},\"wordCount\":9,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.wunen.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/www.wunen.com\/wp-content\/uploads\/2025\/03\/\u8d44\u8baf.jpg\",\"articleSection\":[\"\u56fe\u4e66\u9605\u8bfb\"],\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/\",\"url\":\"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/\",\"name\":\"\u9762\u5411\u4e2d\u5c0f\u5b66\u751f\u4ea4\u4e92\u5f0f\u9605\u8bfb\u7cfb\u7edf \u56fe\u4e66\u8d44\u6e90\u7ba1\u7406\u524d\u7aef - \u7269\u5ae9\u8f6f\u4ef6\u8d44\u8baf\u7f51\",\"isPartOf\":{\"@id\":\"https:\/\/www.wunen.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/www.wunen.com\/wp-content\/uploads\/2025\/03\/\u8d44\u8baf.jpg\",\"datePublished\":\"2025-06-04T22:00:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/#primaryimage\",\"url\":\"http:\/\/www.wunen.com\/wp-content\/uploads\/2025\/03\/\u8d44\u8baf.jpg\",\"contentUrl\":\"http:\/\/www.wunen.com\/wp-content\/uploads\/2025\/03\/\u8d44\u8baf.jpg\",\"width\":260,\"height\":180},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wunen.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u9762\u5411\u4e2d\u5c0f\u5b66\u751f\u4ea4\u4e92\u5f0f\u9605\u8bfb\u7cfb\u7edf \u56fe\u4e66\u8d44\u6e90\u7ba1\u7406\u524d\u7aef\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wunen.com\/#website\",\"url\":\"https:\/\/www.wunen.com\/\",\"name\":\"\u7269\u5ae9\u8f6f\u4ef6\u8d44\u8baf\u7f51\",\"description\":\"\u8f6f\u4ef6\u8d44\u8baf\u6765\u7269\u5ae9\",\"publisher\":{\"@id\":\"https:\/\/www.wunen.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wunen.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.wunen.com\/#organization\",\"name\":\"\u7269\u5ae9\u8f6f\u4ef6\u8d44\u8baf\u7f51\",\"url\":\"https:\/\/www.wunen.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wunen.com\/#\/schema\/logo\/image\/\",\"url\":\"http:\/\/www.wunen.com\/wp-content\/uploads\/2025\/03\/cropped-\u7269\u5ae9-1.png\",\"contentUrl\":\"http:\/\/www.wunen.com\/wp-content\/uploads\/2025\/03\/cropped-\u7269\u5ae9-1.png\",\"width\":1024,\"height\":1024,\"caption\":\"\u7269\u5ae9\u8f6f\u4ef6\u8d44\u8baf\u7f51\"},\"image\":{\"@id\":\"https:\/\/www.wunen.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wunen.com\/#\/schema\/person\/d5f7a6cf545656a9c90d507e64452db8\",\"name\":\"admin@wunen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wunen.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d90ec1e3faf77c4d4e66e40c29b85ff6401161e0502f401dae2f0e25b38ce25e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d90ec1e3faf77c4d4e66e40c29b85ff6401161e0502f401dae2f0e25b38ce25e?s=96&d=mm&r=g\",\"caption\":\"admin@wunen\"},\"sameAs\":[\"http:\/\/www.wunen.com\"],\"url\":\"http:\/\/www.wunen.com\/index.php\/author\/adminwunen\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u9762\u5411\u4e2d\u5c0f\u5b66\u751f\u4ea4\u4e92\u5f0f\u9605\u8bfb\u7cfb\u7edf \u56fe\u4e66\u8d44\u6e90\u7ba1\u7406\u524d\u7aef - \u7269\u5ae9\u8f6f\u4ef6\u8d44\u8baf\u7f51","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/\u9762\u5411\u4e2d\u5c0f\u5b66\u751f\u4ea4\u4e92\u5f0f\u9605\u8bfb\u7cfb\u7edf-\u56fe\u4e66\u8d44\u6e90\u7ba1\u7406\u524d\u7aef\/","og_locale":"zh_CN","og_type":"article","og_title":"\u9762\u5411\u4e2d\u5c0f\u5b66\u751f\u4ea4\u4e92\u5f0f\u9605\u8bfb\u7cfb\u7edf \u56fe\u4e66\u8d44\u6e90\u7ba1\u7406\u524d\u7aef - \u7269\u5ae9\u8f6f\u4ef6\u8d44\u8baf\u7f51","og_description":"\u9879\u76ee\u8fdb\u5ea6\uff1a \u5927\u4f53\u5b8c\u6210\u56fe\u4e66\u7ba1\u7406\u754c\u9762\u7684\u8bbe\u8ba1\uff0c\u6279\u91cf\u5bfc\u5165\u65b0\u4e66\uff1a\u652f\u6301PDF\u4e0etxt\u683c\u5f0f\u4e66\u7c4d\u4e0a\u4f20\uff0c\u540e\u53f0\u81ea\u52a8\u89e3\u6790\u4e66\u7c4d\u5143\u6570\u636e\uff08 [&hellip;]","og_url":"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/\u9762\u5411\u4e2d\u5c0f\u5b66\u751f\u4ea4\u4e92\u5f0f\u9605\u8bfb\u7cfb\u7edf-\u56fe\u4e66\u8d44\u6e90\u7ba1\u7406\u524d\u7aef\/","og_site_name":"\u7269\u5ae9\u8f6f\u4ef6\u8d44\u8baf\u7f51","article_published_time":"2025-06-04T22:00:09+00:00","og_image":[{"width":260,"height":180,"url":"https:\/\/www.wunen.com\/wp-content\/uploads\/2025\/03\/\u8d44\u8baf.jpg","type":"image\/jpeg"}],"author":"admin@wunen","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin@wunen","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"10 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/#article","isPartOf":{"@id":"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/"},"author":{"name":"admin@wunen","@id":"https:\/\/www.wunen.com\/#\/schema\/person\/d5f7a6cf545656a9c90d507e64452db8"},"headline":"\u9762\u5411\u4e2d\u5c0f\u5b66\u751f\u4ea4\u4e92\u5f0f\u9605\u8bfb\u7cfb\u7edf \u56fe\u4e66\u8d44\u6e90\u7ba1\u7406\u524d\u7aef","datePublished":"2025-06-04T22:00:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/"},"wordCount":9,"commentCount":0,"publisher":{"@id":"https:\/\/www.wunen.com\/#organization"},"image":{"@id":"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/#primaryimage"},"thumbnailUrl":"http:\/\/www.wunen.com\/wp-content\/uploads\/2025\/03\/\u8d44\u8baf.jpg","articleSection":["\u56fe\u4e66\u9605\u8bfb"],"inLanguage":"zh-Hans","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/","url":"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/","name":"\u9762\u5411\u4e2d\u5c0f\u5b66\u751f\u4ea4\u4e92\u5f0f\u9605\u8bfb\u7cfb\u7edf \u56fe\u4e66\u8d44\u6e90\u7ba1\u7406\u524d\u7aef - \u7269\u5ae9\u8f6f\u4ef6\u8d44\u8baf\u7f51","isPartOf":{"@id":"https:\/\/www.wunen.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/#primaryimage"},"image":{"@id":"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/#primaryimage"},"thumbnailUrl":"http:\/\/www.wunen.com\/wp-content\/uploads\/2025\/03\/\u8d44\u8baf.jpg","datePublished":"2025-06-04T22:00:09+00:00","breadcrumb":{"@id":"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/"]}]},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/#primaryimage","url":"http:\/\/www.wunen.com\/wp-content\/uploads\/2025\/03\/\u8d44\u8baf.jpg","contentUrl":"http:\/\/www.wunen.com\/wp-content\/uploads\/2025\/03\/\u8d44\u8baf.jpg","width":260,"height":180},{"@type":"BreadcrumbList","@id":"https:\/\/www.wunen.com\/index.php\/2025\/06\/05\/%e9%9d%a2%e5%90%91%e4%b8%ad%e5%b0%8f%e5%ad%a6%e7%94%9f%e4%ba%a4%e4%ba%92%e5%bc%8f%e9%98%85%e8%af%bb%e7%b3%bb%e7%bb%9f-%e5%9b%be%e4%b9%a6%e8%b5%84%e6%ba%90%e7%ae%a1%e7%90%86%e5%89%8d%e7%ab%af\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wunen.com\/"},{"@type":"ListItem","position":2,"name":"\u9762\u5411\u4e2d\u5c0f\u5b66\u751f\u4ea4\u4e92\u5f0f\u9605\u8bfb\u7cfb\u7edf \u56fe\u4e66\u8d44\u6e90\u7ba1\u7406\u524d\u7aef"}]},{"@type":"WebSite","@id":"https:\/\/www.wunen.com\/#website","url":"https:\/\/www.wunen.com\/","name":"\u7269\u5ae9\u8f6f\u4ef6\u8d44\u8baf\u7f51","description":"\u8f6f\u4ef6\u8d44\u8baf\u6765\u7269\u5ae9","publisher":{"@id":"https:\/\/www.wunen.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wunen.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"zh-Hans"},{"@type":"Organization","@id":"https:\/\/www.wunen.com\/#organization","name":"\u7269\u5ae9\u8f6f\u4ef6\u8d44\u8baf\u7f51","url":"https:\/\/www.wunen.com\/","logo":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wunen.com\/#\/schema\/logo\/image\/","url":"http:\/\/www.wunen.com\/wp-content\/uploads\/2025\/03\/cropped-\u7269\u5ae9-1.png","contentUrl":"http:\/\/www.wunen.com\/wp-content\/uploads\/2025\/03\/cropped-\u7269\u5ae9-1.png","width":1024,"height":1024,"caption":"\u7269\u5ae9\u8f6f\u4ef6\u8d44\u8baf\u7f51"},"image":{"@id":"https:\/\/www.wunen.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.wunen.com\/#\/schema\/person\/d5f7a6cf545656a9c90d507e64452db8","name":"admin@wunen","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wunen.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d90ec1e3faf77c4d4e66e40c29b85ff6401161e0502f401dae2f0e25b38ce25e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d90ec1e3faf77c4d4e66e40c29b85ff6401161e0502f401dae2f0e25b38ce25e?s=96&d=mm&r=g","caption":"admin@wunen"},"sameAs":["http:\/\/www.wunen.com"],"url":"http:\/\/www.wunen.com\/index.php\/author\/adminwunen\/"}]}},"_links":{"self":[{"href":"http:\/\/www.wunen.com\/index.php\/wp-json\/wp\/v2\/posts\/3256","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.wunen.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.wunen.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.wunen.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.wunen.com\/index.php\/wp-json\/wp\/v2\/comments?post=3256"}],"version-history":[{"count":0,"href":"http:\/\/www.wunen.com\/index.php\/wp-json\/wp\/v2\/posts\/3256\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.wunen.com\/index.php\/wp-json\/wp\/v2\/media\/215"}],"wp:attachment":[{"href":"http:\/\/www.wunen.com\/index.php\/wp-json\/wp\/v2\/media?parent=3256"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.wunen.com\/index.php\/wp-json\/wp\/v2\/categories?post=3256"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.wunen.com\/index.php\/wp-json\/wp\/v2\/tags?post=3256"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}