最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue web-print-pdf實(shí)現(xiàn)在線預(yù)覽打印PDF的技術(shù)深度解析

 更新時(shí)間:2025年09月28日 10:19:07   作者:web打印社區(qū)  
在現(xiàn)代Web應(yīng)用開發(fā)中,在線預(yù)覽打印PDF是一個(gè)重要的技術(shù)需求,本文將深入探討如何通過Vue技術(shù)棧結(jié)合web-print-pdf npm包,實(shí)現(xiàn)真正的在線預(yù)覽打印功能,需要的可以了解下

引言

在現(xiàn)代Web應(yīng)用開發(fā)中,在線預(yù)覽打印PDF是一個(gè)重要的技術(shù)需求。傳統(tǒng)的Web打印方案往往需要用戶下載文件后再進(jìn)行打印,用戶體驗(yàn)不佳。本文將深入探討如何通過Vue技術(shù)棧結(jié)合web-print-pdf npm包,實(shí)現(xiàn)真正的在線預(yù)覽打印功能,讓用戶能夠?qū)崟r(shí)預(yù)覽PDF效果并直接打印。

適用場(chǎng)景:企業(yè)報(bào)表系統(tǒng)、電商訂單打印、教育文檔打印、財(cái)務(wù)報(bào)表、發(fā)票打印、合同打印、技術(shù)文檔打印等。

系統(tǒng)預(yù)覽

圖:Vue實(shí)現(xiàn)在線預(yù)覽打印PDF系統(tǒng)界面 - 左側(cè)為PDF預(yù)覽區(qū)域,右側(cè)為打印配置面板

技術(shù)架構(gòu)概覽

我們的項(xiàng)目采用了Vue 3 + Electron的架構(gòu),通過web-print-pdf npm包實(shí)現(xiàn)PDF預(yù)覽和打印功能。整個(gè)系統(tǒng)分為三個(gè)層次:

Vue前端界面 → web-print-pdf npm包 → Electron打印專家

核心優(yōu)勢(shì)

  • 實(shí)時(shí)預(yù)覽:支持PDF在線預(yù)覽,所見即所得
  • 直接打印:預(yù)覽后可直接打印,無需下載
  • 響應(yīng)式設(shè)計(jì):支持多種設(shè)備和紙張格式
  • 高性能渲染:基于PDF-lib的高效PDF處理
  • 豐富配置:支持縮放、旋轉(zhuǎn)、頁(yè)面范圍等高級(jí)選項(xiàng)

Vue組件架構(gòu)設(shè)計(jì)

預(yù)覽組件結(jié)構(gòu)

我們的預(yù)覽組件采用了左右分欄的設(shè)計(jì)模式:

<template>
  <div class="preview">
    <div class="content">
      <!-- 左側(cè):PDF預(yù)覽區(qū)域 -->
      <div class="left">
        <PDFPreview 
          :pdfUrl="pdfComputedUrl"
          :loading="renderComputedProgress.renderPdfLoading"
          :progress="renderComputedProgress"
        />
      </div>
      
      <!-- 右側(cè):打印配置面板 -->
      <div class="right">
        <PrintConfigPanel 
          :form="state.form"
          @config-change="handleConfigChange"
        />
      </div>
    </div>
  </div>
</template>

PDF預(yù)覽核心實(shí)現(xiàn)

1. PDF渲染流程

PDF預(yù)覽的核心是動(dòng)態(tài)渲染,根據(jù)用戶配置實(shí)時(shí)生成預(yù)覽PDF:

const _renderPdfDoc = async () => {
  // 1. 重置狀態(tài)
  state.pdfUrl = null;
  state.renderProgress = { startTime: Date.now() };
  
  // 2. 獲取紙張配置
  const paper = state.papers?.find(one => one.value === state.form.paperFormat);
  
  if (paper && paper.width && paper.height) {
    try {
      // 3. 加載源PDF
      if (!sourcePdf.value) {
        sourcePdf.value = await fetch(paramsPdfUrl.value.pdfUrl)
          .then(res => res?.arrayBuffer());
      }
      
      // 4. 創(chuàng)建新PDF文檔
      const newPdfDoc = await PDFDocument.create();
      const pdfDoc = await PDFDocument.load(sourcePdf.value, {
        parseSpeed: Infinity,
      });
      
      // 5. 逐頁(yè)處理
      const pageCount = pdfDoc.getPageCount();
      for (let j = 0; j < pageCount; j++) {
        // 更新進(jìn)度
        state.renderProgress = {
          ...state.renderProgress,
          page: j + 1,
          totalPages: pageCount,
          updateTime: Date.now(),
        };
        
        // 添加頁(yè)面并應(yīng)用配置
        const page = newPdfDoc.addPage([newPaperWidth, newPaperHeight]);
        const [embeddedPage] = await newPdfDoc.embedPdf(sourcePdf.value, [j]);
        
        // 應(yīng)用縮放和旋轉(zhuǎn)配置
        applyPageTransform(page, embeddedPage, paper, state.form);
      }
      
      // 6. 生成預(yù)覽URL
      const pdfBytes = await newPdfDoc.save();
      const blob = new Blob([pdfBytes], { type: "application/pdf" });
      state.pdfUrl = URL.createObjectURL(blob);
      
    } catch (err) {
      console.error(err);
      state.pdfUrl = paramsPdfUrl.value.pdfUrl; // 降級(jí)到原始PDF
    }
  }
};

2. 頁(yè)面變換算法

頁(yè)面變換算法是整個(gè)PDF預(yù)覽系統(tǒng)的核心,也是Chrome瀏覽器打印預(yù)覽頁(yè)面的實(shí)現(xiàn)原理! 這個(gè)算法決定了PDF頁(yè)面如何根據(jù)紙張大小、縮放模式、方向等配置進(jìn)行精確的變換和定位。

算法核心思想

頁(yè)面變換算法的核心思想是:將源PDF頁(yè)面按照用戶配置精確地映射到目標(biāo)紙張上,包括縮放、旋轉(zhuǎn)、居中定位等操作。這與Chrome瀏覽器的打印預(yù)覽功能完全一致。

三種縮放模式詳解

const applyPageTransform = (page, embeddedPage, paper, config) => {
  const { width, height } = embeddedPage.size();
  const [oldPageWidth, oldPageHeight] = [width, height];
  
  // 計(jì)算縮放比例
  const scale_x = paper.width / oldPageWidth;
  const scale_y = paper.height / oldPageHeight;
  let zoom = Math.min(scale_x, scale_y);
  
  // 橫向模式處理
  if (config.landscape) {
    const scale_x = paper.width / oldPageHeight;
    const scale_y = paper.height / oldPageWidth;
    zoom = Math.min(scale_x, scale_y);
  }
  
  // ?? 關(guān)鍵:根據(jù)縮放模式調(diào)整(與Chrome打印預(yù)覽邏輯一致)
  if (config.scaleMode === "shrink" && zoom > 1) {
    zoom = 1; // shrink模式不放大,保持原始大小
  }
  
  // 計(jì)算居中位置
  const x = paper.width / 2 - (oldPageWidth * zoom) / 2;
  const y = paper.height / 2 - (oldPageHeight * zoom) / 2;
  
  // 應(yīng)用變換
  page.drawPage(embeddedPage, {
    x,
    y,
    xScale: zoom,
    yScale: zoom,
    rotate: config.landscape ? degrees(-90) : undefined,
  });
};

縮放模式對(duì)比表

縮放模式行為描述Chrome打印預(yù)覽對(duì)應(yīng)適用場(chǎng)景
shrink只縮小,不放大fit-to-page保持內(nèi)容完整,避免裁剪
noscale保持原始大小actual-size精確尺寸,適合標(biāo)準(zhǔn)紙張
fit填滿紙張fit-to-paper最大化利用紙張空間

與Chrome打印預(yù)覽的一致性

我們的頁(yè)面變換算法完全遵循了Chrome瀏覽器的打印預(yù)覽標(biāo)準(zhǔn):

  • 縮放邏輯一致:三種縮放模式與Chrome的@page規(guī)則完全對(duì)應(yīng)
  • 居中算法一致:頁(yè)面在紙張上的居中定位算法相同
  • 旋轉(zhuǎn)處理一致:橫向/縱向切換的旋轉(zhuǎn)角度計(jì)算相同
  • 邊界處理一致:頁(yè)面超出紙張邊界時(shí)的處理方式相同

技術(shù)優(yōu)勢(shì)

  • 標(biāo)準(zhǔn)化實(shí)現(xiàn):遵循Web打印標(biāo)準(zhǔn),確保兼容性
  • 高性能渲染:基于PDF-lib的底層優(yōu)化,渲染速度快
  • 精確控制:像素級(jí)精確的頁(yè)面變換和定位
  • 實(shí)時(shí)預(yù)覽:配置修改后立即看到變換效果

實(shí)際應(yīng)用示例

// 財(cái)務(wù)報(bào)表:使用shrink模式,確保內(nèi)容完整
const financialReport = {
  scaleMode: 'shrink',
  paperFormat: 'A4',
  landscape: false
};

// 照片打?。菏褂胒it模式,最大化利用紙張
const photoPrint = {
  scaleMode: 'fit',
  paperFormat: '6x4',
  landscape: true
};

// 技術(shù)圖紙:使用noscale模式,保持精確尺寸
const technicalDrawing = {
  scaleMode: 'noscale',
  paperFormat: 'A3',
  landscape: true
};

這個(gè)頁(yè)面變換算法不僅是我們系統(tǒng)的核心技術(shù),更是Web打印領(lǐng)域的標(biāo)準(zhǔn)實(shí)現(xiàn)方案。通過深入理解這個(gè)算法,開發(fā)者可以:

  • 掌握Web打印原理:理解瀏覽器打印預(yù)覽的底層機(jī)制
  • 實(shí)現(xiàn)自定義打印:基于此算法開發(fā)自己的打印預(yù)覽功能
  • 優(yōu)化打印體驗(yàn):根據(jù)不同場(chǎng)景選擇合適的縮放模式
  • 提升技術(shù)能力:掌握PDF文檔處理的核心技術(shù)

3. 實(shí)時(shí)進(jìn)度顯示

通過計(jì)算屬性實(shí)現(xiàn)智能的進(jìn)度顯示邏輯:

const renderComputedProgress = computed(() => {
  const { page = 1, totalPages = 1 } = state.renderProgress;
  const isFinish = page === totalPages;
  const wasteTime = (state.renderProgress.updateTime - state.renderProgress.startTime) / 1000;
  
  // 智能顯示進(jìn)度條:超過2秒才顯示
  const showTopProgress = !isFinish && wasteTime > 2;
  
  return {
    progressText: isEnglish.value
      ? `Loading progress ${page}/${totalPages}`
      : `加載進(jìn)度 ${page}/${totalPages}`,
    percent: ((page / totalPages) * 100).toFixed(0),
    showTopProgress,
    renderPdfLoading: state.renderPdfLoading && !showTopProgress,
  };
});

打印配置面板

1. 紙張格式選擇

支持多種紙張格式的動(dòng)態(tài)配置:

const getPapers = async (printerName) => {
  try {
    state.paperLoading = true;
    const papers = await getPrinterPaper({ printerName });
    state.papers = papers.map(paper => ({
      label: paper.name,
      value: paper.name,
      width: paper.width,
      height: paper.height,
    }));
  } finally {
    state.paperLoading = false;
  }
};

2. 縮放模式配置

提供三種縮放模式滿足不同需求:

const scaleModeOptions = computed(() => [
  {
    label: "將頁(yè)面縮小至可打印區(qū)域 (如果需要) (默認(rèn))",
    value: "shrink",
  },
  {
    label: "使用原始頁(yè)面大小",
    value: "noscale",
  },
  {
    label: "調(diào)整頁(yè)面至可打印區(qū)域",
    value: "fit",
  },
]);

3. 頁(yè)面范圍選擇

支持靈活的頁(yè)面范圍配置:

const pageRangesNormalized = computed(() => {
  let pageRanges = null;
  if (+state.pageRangeType === 1) {
    // 全部頁(yè)面
  } else if (+state.pageRangeType === 2) {
    // 自定義頁(yè)面范圍
    pageRanges = state.pageRangesInputs?.filter(item => item.from && item.to);
  }
  return { pageRanges, pageRangesLength: pageRanges?.length };
});

web-print-pdf集成

1. 打印執(zhí)行

通過web-print-pdf執(zhí)行最終的打印任務(wù):

const handlePrint = async () => {
  const printOptions = {
    ...(props.pdfParams?.printOptions || {}),
    ...JSON.parse(JSON.stringify(state.form)),
  };
  
  state.printLoading = true;
  try {
    await printPreviewFile({
      pdfFilePath: props.pdfParams.pdfFilePath,
      printOptions,
    });
    message.success("打印成功!");
  } catch (err) {
    message.error(err?.message || "打印失敗");
  } finally {
    state.printLoading = false;
  }
};

2. 配置同步

實(shí)時(shí)同步用戶配置到PDF預(yù)覽:

// 監(jiān)聽配置變化,自動(dòng)重新渲染PDF
watch(
  () => JSON.stringify(pageRangesNormalized.value.pageRanges),
  (v1, v2) => {
    if (v1 !== v2) {
      state.form.pageRanges = pageRangesNormalized.value.pageRanges;
      renderPdfDoc(); // 重新渲染PDF
    }
  }
);

// 監(jiān)聽其他配置變化
watch(
  () => [
    state.form.paperFormat,
    state.form.scaleMode,
    state.form.landscape,
    state.form.colorful,
  ],
  () => renderPdfDoc(),
  { deep: true }
);

性能優(yōu)化策略

1. 防抖處理

對(duì)窗口大小變化等高頻事件進(jìn)行防抖處理:

const getPageHeight = debounce(() => {
  const height = +getComputedStyle(
    document.getElementById("_printPreview")
  )?.height?.replace("px", "");
  state.clientHeight = height - 20 + "px";
}, 500);

onMounted(() => {
  getPageHeight();
  window.addEventListener("resize", getPageHeight);
});

2. 渲染中斷機(jī)制

支持用戶快速切換配置時(shí)的渲染中斷:

const _renderPdfDoc = async () => {
  const currentRenderPdfDocTimestamp = state.renderPdfDocTimestamp;
  
  // 檢查是否被中斷
  const checkIsBreak = () => {
    return currentRenderPdfDocTimestamp !== state.renderPdfDocTimestamp;
  };
  
  // 在關(guān)鍵節(jié)點(diǎn)檢查中斷
  if (checkIsBreak()) return;
  
  // ... 渲染邏輯
};

3. 內(nèi)存管理

及時(shí)釋放PDF資源,避免內(nèi)存泄漏:

onUnmounted(() => {
  window.removeEventListener("resize", getPageHeight);
  
  // 釋放PDF URL
  if (state.pdfUrl && state.pdfUrl.startsWith('blob:')) {
    URL.revokeObjectURL(state.pdfUrl);
  }
});

實(shí)際應(yīng)用場(chǎng)景

1. 企業(yè)報(bào)表系統(tǒng)

// 財(cái)務(wù)報(bào)表預(yù)覽打印
const financialReportPreview = {
  paperFormat: 'A4',
  scaleMode: 'fit',
  landscape: false,
  copies: 2,
  duplexMode: 'duplex',
  pageRanges: [{ from: 1, to: 10 }]
};

2. 電商訂單打印

// 訂單詳情預(yù)覽打印
const orderPrintPreview = {
  paperFormat: 'A5',
  scaleMode: 'shrink',
  landscape: false,
  copies: 1,
  colorful: false, // 黑白打印節(jié)省成本
};

3. 教育文檔打印

// 教學(xué)資料預(yù)覽打印
const educationPrintPreview = {
  paperFormat: 'A4',
  scaleMode: 'fit',
  landscape: true, // 橫向打印
  copies: 30,
  duplexMode: 'duplexlong',
};

技術(shù)亮點(diǎn)總結(jié)

核心技術(shù)創(chuàng)新

  • 動(dòng)態(tài)PDF渲染:根據(jù)用戶配置實(shí)時(shí)生成預(yù)覽PDF
  • 智能進(jìn)度顯示:超過2秒才顯示進(jìn)度條,提升用戶體驗(yàn)
  • 配置實(shí)時(shí)同步:用戶修改配置后立即更新預(yù)覽效果
  • 渲染中斷機(jī)制:支持快速切換配置,避免無效渲染
  • 內(nèi)存優(yōu)化管理:及時(shí)釋放資源,避免內(nèi)存泄漏

用戶體驗(yàn)優(yōu)化

  • 左右分欄設(shè)計(jì):預(yù)覽和配置分離,操作更直觀
  • 響應(yīng)式布局:支持不同屏幕尺寸和紙張格式
  • 實(shí)時(shí)預(yù)覽:配置修改后立即看到效果
  • 智能降級(jí):渲染失敗時(shí)自動(dòng)降級(jí)到原始PDF
  • 多語(yǔ)言支持:中英文界面,國(guó)際化友好

與web-print-pdf的完美結(jié)合

我們的Vue預(yù)覽組件與web-print-pdf npm包形成了完美的技術(shù)棧組合:

  • Vue組件:負(fù)責(zé)用戶界面和PDF預(yù)覽渲染
  • web-print-pdf:負(fù)責(zé)與Electron打印專家的通信和打印執(zhí)行
  • PDF-lib:負(fù)責(zé)PDF文檔的創(chuàng)建和修改
  • Electron:提供跨平臺(tái)的打印能力

這種架構(gòu)設(shè)計(jì)讓開發(fā)者可以:

  • 專注于Vue組件的業(yè)務(wù)邏輯
  • 享受web-print-pdf帶來的強(qiáng)大打印能力
  • 實(shí)現(xiàn)真正的在線預(yù)覽打印功能

結(jié)語(yǔ)

通過Vue技術(shù)棧結(jié)合web-print-pdf npm包,我們成功實(shí)現(xiàn)了一個(gè)功能完整、性能優(yōu)異的PDF在線預(yù)覽打印系統(tǒng)。這個(gè)系統(tǒng)不僅解決了傳統(tǒng)Web打印的各種痛點(diǎn),還為用戶提供了直觀、高效的打印體驗(yàn)。

web-print-pdf作為核心的打印解決方案,為我們的Vue應(yīng)用提供了強(qiáng)大的后端支持,讓前端開發(fā)者能夠?qū)W⒂谟脩趔w驗(yàn)的優(yōu)化,而不用擔(dān)心復(fù)雜的打印技術(shù)實(shí)現(xiàn)。這正是現(xiàn)代Web開發(fā)所追求的關(guān)注點(diǎn)分離技術(shù)棧協(xié)作的完美體現(xiàn)。

常見問題解答 (FAQ)

Q1: 這個(gè)方案支持哪些瀏覽器?

A: 我們的方案基于Electron,支持所有主流瀏覽器,包括Chrome、Firefox、Safari、Edge等。

Q2: 如何處理大文件PDF的預(yù)覽?

A: 我們實(shí)現(xiàn)了智能的進(jìn)度顯示和渲染中斷機(jī)制,大文件會(huì)分批渲染,用戶可以實(shí)時(shí)看到進(jìn)度。

Q3: 是否支持自定義紙張格式?

A: 完全支持!系統(tǒng)會(huì)動(dòng)態(tài)獲取打印機(jī)支持的紙張格式,用戶可以選擇任意紙張進(jìn)行打印。

Q4: 如何實(shí)現(xiàn)批量打印?

A: 通過web-print-pdf的批量打印功能,可以一次性處理多個(gè)PDF文件,提高工作效率。

Q5: 是否支持網(wǎng)絡(luò)打???

A: 支持!系統(tǒng)可以連接到網(wǎng)絡(luò)打印機(jī),實(shí)現(xiàn)遠(yuǎn)程打印功能。

技術(shù)棧:

  • Vue 3 + Composition API
  • PDF-lib
  • web-print-pdf
  • Electron
  • Ant Design Vue

以上就是Vue web-print-pdf實(shí)現(xiàn)在線預(yù)覽打印PDF的技術(shù)深度解析的詳細(xì)內(nèi)容,更多關(guān)于Vue在線預(yù)覽打印PDF的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue實(shí)現(xiàn)自定義組件改變組件背景色(示例代碼)

    Vue實(shí)現(xiàn)自定義組件改變組件背景色(示例代碼)

    要實(shí)現(xiàn) Vue 自定義組件改變組件背景色,你可以通過 props 將背景色作為組件的一個(gè)屬性傳遞給組件,在組件內(nèi)部監(jiān)聽這個(gè)屬性的變化,并將其應(yīng)用到組件的樣式中,下面通過示例代碼介紹Vue如何實(shí)現(xiàn)自定義組件改變組件背景色,感興趣的朋友一起看看吧
    2024-03-03
  • Vue項(xiàng)目中v-bind動(dòng)態(tài)綁定src路徑不成功問題及解決

    Vue項(xiàng)目中v-bind動(dòng)態(tài)綁定src路徑不成功問題及解決

    這篇文章主要介紹了Vue項(xiàng)目中v-bind動(dòng)態(tài)綁定src路徑不成功問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 關(guān)于vue項(xiàng)目中搜索節(jié)流的實(shí)現(xiàn)代碼

    關(guān)于vue項(xiàng)目中搜索節(jié)流的實(shí)現(xiàn)代碼

    這篇文章主要介紹了關(guān)于vue項(xiàng)目中搜索節(jié)流的實(shí)現(xiàn)代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Vue3動(dòng)態(tài)組件component不生效問題解決方法

    Vue3動(dòng)態(tài)組件component不生效問題解決方法

    動(dòng)態(tài)組件component是Vue中非常實(shí)用的一個(gè)功能,它可以根據(jù)條件動(dòng)態(tài)切換不同的組件,在Vue3中使用方法和Vue2基本一致,在vue3使用component動(dòng)態(tài)組件展示組件時(shí),組件就是不展示顯示空白,所以本文記錄了Vue3動(dòng)態(tài)組件component不生效問題解決方法,需要的朋友可以參考下
    2024-08-08
  • vue3中update:modelValue的使用與不生效問題解決

    vue3中update:modelValue的使用與不生效問題解決

    現(xiàn)在vue3的使用越來越普遍了,vue3這方面的學(xué)習(xí)我們要趕上,下面這篇文章主要給大家介紹了關(guān)于vue3中update:modelValue的使用與不生效問題的解決方法,需要的朋友可以參考下
    2022-03-03
  • Vue項(xiàng)目三級(jí)聯(lián)動(dòng)路由跳轉(zhuǎn)與傳參的思路詳解

    Vue項(xiàng)目三級(jí)聯(lián)動(dòng)路由跳轉(zhuǎn)與傳參的思路詳解

    這篇文章主要介紹了Vue項(xiàng)目三級(jí)聯(lián)動(dòng)的路由跳轉(zhuǎn)與傳參的思路詳解,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • vue 實(shí)現(xiàn)tab切換保持?jǐn)?shù)據(jù)狀態(tài)

    vue 實(shí)現(xiàn)tab切換保持?jǐn)?shù)據(jù)狀態(tài)

    這篇文章主要介紹了vue 實(shí)現(xiàn)tab切換保持?jǐn)?shù)據(jù)狀態(tài),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue-dplayer 視頻播放器實(shí)例代碼

    vue-dplayer 視頻播放器實(shí)例代碼

    今天小編就為大家分享一篇vue-dplayer 視頻播放器實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Vue3中正確使用ElementPlus的示例代碼

    Vue3中正確使用ElementPlus的示例代碼

    這篇文章主要介紹了Vue3中正確使用ElementPlus的示例代碼,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • Vue+abp微信掃碼登錄的實(shí)現(xiàn)代碼示例

    Vue+abp微信掃碼登錄的實(shí)現(xiàn)代碼示例

    這篇文章主要介紹了Vue+abp微信掃碼登錄的實(shí)現(xiàn)代碼示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01

最新評(píng)論

曲阳县| 南部县| 兴仁县| 环江| 郸城县| 荥阳市| 温州市| 吉安县| 徐州市| 方山县| 五家渠市| 明溪县| 乐清市| 化隆| 平果县| 全椒县| 南投县| 耒阳市| 普格县| 石台县| 洪洞县| 长宁县| 巴南区| 临海市| 渭源县| 盐池县| 沾益县| 泸西县| 炎陵县| 娱乐| 平邑县| 邹城市| 长岛县| 沾益县| 珲春市| 遂平县| 竹北市| 泰顺县| 永川市| 德令哈市| 鸡东县|