国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[譯] Laravel-Excel 3.0 文檔

canopus4u / 1012人閱讀

摘要:事件將通過添加關(guān)注來激活。自動注冊事件監(jiān)聽器通過使用,你可以自動注冊事件監(jiān)聽器,而不需要使用。你可以自由使用這個宏,或者創(chuàng)造你自己的語法以上例子可作對于方法可查看文檔測試測試下載測試存儲導(dǎo)出測試隊(duì)列導(dǎo)出

Basics

最簡單的導(dǎo)出方法是創(chuàng)建一個自定義的導(dǎo)出類, 這里我們使用發(fā)票導(dǎo)出作為示例.

App/Exports 下創(chuàng)建一個 InvoicesExport

namespace AppExports;

use MaatwebsiteExcelConcernsFromCollection;

class InvoicesExport implements FromCollection
{
    public function collection()
    {
        return Invoice::all();
    }
}

在控制器中你可以使用如下方式來下載

public function export() 
{
    return Excel::download(new InvoicesExport, "invoices.xlsx");
}

或者存儲在 s3 磁盤中

public function storeExcel() 
{
    return Excel::store(new InvoicesExport, "invoices.xlsx", "s3");
}
依賴注入

如果你的導(dǎo)出需要依賴, 你可以注入導(dǎo)出類

namespace AppExports;

use MaatwebsiteExcelConcernsFromCollection;

class InvoicesExport implements FromCollection
{
    public function __construct(InvoicesRepository $invoices)
    {
        $this->invoices = $invoices;
    }

    public function collection()
    {
        return $this->invoices->all();
    }
}
public function export(Excel $excel, InvoicesExport $export) 
{
    return $excel->download($export, "invoices.xlsx");
}
嚴(yán)格的 null 對比

如果你希望 0 在 excel 單元格中就是顯示 0, 而不是顯示 null(空單元格), 你可以使用 WithStrictNullComparison

namespace AppExports;

use MaatwebsiteExcelConcernsFromCollection;
use MaatwebsiteExcelConcernsWithStrictNullComparison;

class InvoicesExport implements FromCollection, WithStrictNullComparison
{
    public function __construct(InvoicesRepository $invoices)
    {
        $this->invoices = $invoices;
    }

    public function collection()
    {
        return $this->invoices->all();
    }
}
Collection 全局定義/宏

這個包提供了 laravel collection 的一些額外的方法(宏) 來簡單的下載或者是存儲到 excel

把 collection 作為 Excel 下載
(new Collection([[1, 2, 3], [1, 2, 3]]))->downloadExcel(
    $filePath,
    $writerType = null,
    $headings = false
)
在磁盤上存儲 collection
(new Collection([[1, 2, 3], [1, 2, 3]]))->storeExcel(
    $filePath,
    $disk = null,
    $writerType = null,
    $headings = false
)
在磁盤上存儲導(dǎo)出

導(dǎo)出可以存儲到任何 Laravel 支持的 文件系統(tǒng)?中

public function storeExcel() 
{
    // Store on default disk
    Excel::store(new InvoicesExport(2018), "invoices.xlsx");

    // Store on a different disk (e.g. s3)
    Excel::store(new InvoicesExport(2018), "invoices.xlsx", "s3");

    // Store on a different disk with a defined writer type. 
    Excel::store(new InvoicesExport(2018), "invoices.xlsx", "s3", Excel::XLSX);
}
Exportables / 可導(dǎo)出的

在之前的例子中, 我們使用 Excel::download 這個 facade 來開始一個導(dǎo)出.

Laravel-Excel 同樣支持 ?MaatwebsiteExcelConcernsExportable?trait, 來讓一個類可以直接導(dǎo)出, 當(dāng)然, 這個類里邊需要有 collection 方法.

namespace AppExports;

use MaatwebsiteExcelConcernsFromCollection;
use MaatwebsiteExcelConcernsExportable;

class InvoicesExport implements FromCollection
{
    use Exportable;

    public function collection()
    {
        return Invoice::all();
    }
}

我們可以不通過 facade 直接進(jìn)行類的下載

return (new InvoicesExport)->download("invoices.xlsx");

或者是存儲到磁盤上.

return (new InvoicesExport)->store("invoices.xlsx", "s3");
Responsable / 可響應(yīng)的

之前的例子可以做的簡單一點(diǎn), 例如我們添加 Laravel 的 Responsable 到導(dǎo)出類中

namespace AppExports;

use IlluminateContractsSupportResponsable;
use MaatwebsiteExcelConcernsFromCollection;
use MaatwebsiteExcelConcernsExportable;

class InvoicesExport implements FromCollection, Responsable
{
    use Exportable;

    /**
    * It"s required to define the fileName within
    * the export class when making use of Responsable.
    */
    private $fileName = "invoices.xlsx";

    public function collection()
    {
        return Invoice::all();
    }
}

你可以更簡單的返回導(dǎo)出類,但是不需要調(diào)用 ->download() 方法.

return new InvoicesExport();
From Query / 從查詢輸出

在之前的例子中, 我們在導(dǎo)出類中進(jìn)行查詢, 當(dāng)然這個解決方案可以用在小的導(dǎo)出類中. 對于更大一點(diǎn)數(shù)據(jù)的導(dǎo)出類可能造成比較大的性能開銷.

通過使用 FromQuery 關(guān)系, 我們可以通過預(yù)查詢一個導(dǎo)出, 這個場景實(shí)現(xiàn)的原理是查詢可以分塊執(zhí)行.

InvoicesExport 類中,添加 FromQuery 關(guān)系, 并且添加一個查詢, 并且確保不要使用 ->get() 來獲取到數(shù)據(jù)!.

namespace AppExports;

use MaatwebsiteExcelConcernsFromQuery;
use MaatwebsiteExcelConcernsExportable;

class InvoicesExport implements FromQuery
{
    use Exportable;

    public function query()
    {
        return Invoice::query();
    }
}

我們可以通過同樣的方式來下載

return (new InvoicesExport)->download("invoices.xlsx");
自定義查詢

這種方式可以通過自定義的參數(shù)來進(jìn)行查詢. 簡單的作為依賴項(xiàng)傳入導(dǎo)出類即可.

作為構(gòu)造器參數(shù)
namespace AppExports;

use MaatwebsiteExcelConcernsFromQuery;
use MaatwebsiteExcelConcernsExportable;

class InvoicesExport implements FromQuery
{
    use Exportable;

    public function __construct(int $year)
    {
        $this->year = $year;
    }

    public function query()
    {
        return Invoice::query()->whereYear("created_at", $this->year);
    }
}

$year 參數(shù)可以傳遞給導(dǎo)出類.

return (new InvoicesExport(2018))->download("invoices.xlsx");
作為設(shè)置項(xiàng)
namespace AppExports;

use MaatwebsiteExcelConcernsFromQuery;
use MaatwebsiteExcelConcernsExportable;

class InvoicesExport implements FromQuery
{
    use Exportable;

    public function forYear(int $year)
    {
        $this->year = $year;

        return $this;
    }

    public function query()
    {
        return Invoice::query()->whereYear("created_at", $this->year);
    }
}

我們可以通過 forYear 方法來調(diào)整年份.

return (new InvoicesExport)->forYear(2018)->download("invoices.xlsx");
通過視圖

我們可以通過 blade 視圖來創(chuàng)建導(dǎo)出. 通過使用 FromView 關(guān)系.

namespace AppExports;

use IlluminateContractsViewView;
use MaatwebsiteExcelConcernsFromView;

class InvoicesExport implements FromView
{
    public function view(): View
    {
        return view("exports.invoices", [
            "invoices" => Invoice::all()
        ]);
    }
}

這種方式會導(dǎo)出一個 Html 表格到 Excel 單元表, 例如 users.blade.php:


    @foreach($users as $user)
        
    @endforeach
    
Name Email
{{ $user->name }} {{ $user->email }}
隊(duì)列

如果你處理更大數(shù)據(jù)量的數(shù)據(jù), 很明智的方法就是使用隊(duì)列來運(yùn)行.

例如下邊的導(dǎo)出類:

namespace AppExports;

use MaatwebsiteExcelConcernsExportable;
use MaatwebsiteExcelConcernsFromQuery;

class InvoicesExport implements FromQuery
{
    use Exportable;

    public function query()
    {
        return Invoice::query();
    }
}

我們只需要調(diào)用一個 ->queue()?方法即可.

return (new InvoicesExport)->queue("invoices.xlsx");

后臺處理這些查詢的方式是通過多任務(wù)/多切割的方式來進(jìn)行. 這些任務(wù)使用正確的順序來執(zhí)行. 并且保證之前的查詢都是正確的.

另一種方式的隊(duì)列實(shí)現(xiàn)

你可以將導(dǎo)出作為一個可以扔到隊(duì)列中的實(shí)現(xiàn)(利用 Laravel), 可以使用 ShouldQueue 約束.

namespace AppExports;

use MaatwebsiteExcelConcernsExportable;
use MaatwebsiteExcelConcernsFromQuery;
use IlluminateContractsQueueShouldQueue;

class InvoicesExport implements FromQuery, ShouldQueue
{
    use Exportable;

    public function query()
    {
        return Invoice::query();
    }
}

在控制器中可以調(diào)用普通的 ->store() 方法. 基于 ShouldQueue, 通過 laravel 的隊(duì)列方式來實(shí)現(xiàn)隊(duì)列處理. [ps:你需要首先自行配置隊(duì)列]

return (new InvoicesExport)->store("invoices.xlsx");
追加任務(wù) / jobs

?queue() 方法返回一個 Laravel 的 ?PendingDispatch 實(shí)例, 這意味著你可以把其他的任務(wù)串聯(lián)起來, 僅僅當(dāng)前一個任務(wù)執(zhí)行成功的時候, 后續(xù)的任務(wù)才能夠被執(zhí)行.

return (new InvoicesExport)->queue("invoices.xlsx")->chain([
    new NotifyUserOfCompletedExport(request()->user()),
]);
namespace AppJobs;

use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;

class InvoiceExportCompletedJob implements ShouldQueue
{
    use Queueable;

    public function handle()
    {
        // Do something.
    }
}
自定義隊(duì)列

當(dāng) PendingDispatch 返回的時候, 我們可以改變我們使用的隊(duì)列.

return (new InvoicesExport)->queue("invoices.xlsx")->allOnQueue("exports");
多單元表

為了能夠讓導(dǎo)出支持多單元表, 需要使用?WithMultipleSheets?關(guān)系來實(shí)現(xiàn). 這個 sheets() 方法需要返回一個單元表數(shù)組.

namespace AppExports;

use MaatwebsiteExcelConcernsExportable;
use MaatwebsiteExcelConcernsWithMultipleSheets;

class InvoicesExport implements WithMultipleSheets
{
    use Exportable;

    protected $year;

    public function __construct(int $year)
    {
        $this->year = $year;
    }

    /**
     * @return array
     */
    public function sheets(): array
    {
        $sheets = [];

        for ($month = 1; $month <= 12; $month++) {
            $sheets[] = new InvoicesPerMonthSheet($this->year, $month);
        }

        return $sheets;
    }
}

這個 InvoicesPerMonthSheet 可以實(shí)現(xiàn)多種關(guān)系. 例如 FromQuery,?FromCollection, ...

namespace AppExports;

use MaatwebsiteExcelConcernsFromQuery;
use MaatwebsiteExcelConcernsWithTitle;

class InvoicesPerMonthSheet implements FromQuery, WithTitle
{
    private $month;
    private $year;

    public function __construct(int $year, int $month)
    {
        $this->month = $month;
        $this->year  = $year;
    }

    /**
     * @return Builder
     */
    public function query()
    {
        return Invoice
            ::query()
            ->whereYear("created_at", $this->year)
            ->whereMonth("created_at", $this->month);
    }

    /**
     * @return string
     */
    public function title(): string
    {
        return "Month " . $this->month;
    }
}

以下可以下載 2018 年的所有的發(fā)票, 它包含 12 單元表來顯示每個月的數(shù)據(jù).

public function download() 
{
    return (new InvoicesExport(2018))->download("invoices.xlsx");
}
數(shù)據(jù)遍歷 遍歷行

通過添加 ?WithMapping, 你可以遍歷添加到單元行中的每一條數(shù)據(jù)然后并返回.
這種方法你可以控制每一列的數(shù)據(jù), 假設(shè)你使用 Eloquent 的 query builder.

use MaatwebsiteExcelConcernsFromQuery;
use MaatwebsiteExcelConcernsWithMapping;

class InvoicesExport implements FromQuery, WithMapping
{
    /**
    * @var Invoice $invoice
    */
    public function map($invoice): array
    {
        return [
            $invoice->invoice_number,
            Date::dateTimeToExcel($invoice->created_at),
        ];
    }
}
添加表頭

可以通過添加一個 ?WithHeadings?約束來實(shí)現(xiàn). 表頭會添加到所有數(shù)據(jù)的第一行的位置上.

use MaatwebsiteExcelConcernsFromQuery;
use MaatwebsiteExcelConcernsWithHeadings;

class InvoicesExport implements FromQuery, WithHeadings

    public function headings(): array
    {
        return [
            "#",
            "Date",
        ];
    }
}
格式化列

你可以格式化整列, 通過添加 WithColumnFormatting, 如果你想更多范圍的自定義. 推薦使用 AfterSheet 事件來直接和地城的?Worksheet 類進(jìn)行交互.

namespace AppExports;

use PhpOfficePhpSpreadsheetSharedDate;
use PhpOfficePhpSpreadsheetStyleNumberFormat;
use MaatwebsiteExcelConcernsWithColumnFormatting;
use MaatwebsiteExcelConcernsWithMapping;

class InvoicesExport implements WithColumnFormatting, WithMapping
{
    public function map($invoice): array
    {
        return [
            $invoice->invoice_number,
            Date::dateTimeToExcel($invoice->created_at),
            $invoice->total
        ];
    }

    /**
     * @return array
     */
    public function columnFormats(): array
    {
        return [
            "B" => NumberFormat::FORMAT_DATE_DDMMYYYY,
            "C" => NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE,
        ];
    }
}
日期

當(dāng)操作日期的時候. 推薦使用 PhpOfficePhpSpreadsheetSharedDate::dateTimeToExcel() 來正確的解析你的日期數(shù)據(jù).

導(dǎo)出關(guān)系
Interface Explanation
MaatwebsiteExcelConcernsFromCollection Use a Laravel Collection to populate the export.
MaatwebsiteExcelConcernsFromQuery Use an Eloquent query to populate the export.
MaatwebsiteExcelConcernsFromView Use a (Blade) view to to populate the export.
MaatwebsiteExcelConcernsWithTitle Set the Workbook or Worksheet title.
MaatwebsiteExcelConcernsWithHeadings Prepend a heading row.
MaatwebsiteExcelConcernsWithMapping Format the row before it"s written to the file.
MaatwebsiteExcelConcernsWithColumnFormatting Format certain columns.
MaatwebsiteExcelConcernsWithMultipleSheets Enable multi-sheet support. Each sheet can have its own concerns (except this one).
MaatwebsiteExcelConcernsShouldAutoSize Auto-size the columns in the worksheet.
MaatwebsiteExcelConcernsWithStrictNullComparison Uses strict comparisions when testing cells for null value.
MaatwebsiteExcelConcernsWithEvents Register events to hook into the PhpSpreadsheet process.
Traits
Trait Explanation
MaatwebsiteExcelConcernsExportable Add download/store abilities right on the export class itself.
MaatwebsiteExcelConcernsRegistersEventListeners Auto-register the available event listeners.
擴(kuò)展 事件

導(dǎo)出過程有一些事件,你可以利用這些事件與底層類進(jìn)行交互,以向?qū)С鎏砑幼远x行為。

通過使用事件,您可以連接到父包。如果你需要完全控制導(dǎo)出,則不需要使用諸如 "query" 或者 "view" 之類的便利方法。

事件將通過添加 WithEvents 關(guān)注來激活。在 registerEvents 方法中,你必須返回一系列事件。Key 是事件的完全限定名(FQN),Value 是可調(diào)用的事件監(jiān)聽器。這可以是一個閉包、可調(diào)用的數(shù)組 或 invokable 類。

namespace AppExports;

use MaatwebsiteExcelConcernsWithEvents;
use MaatwebsiteExcelEventsBeforeExport;
use MaatwebsiteExcelEventsBeforeWriting;
use MaatwebsiteExcelEventsBeforeSheet;

class InvoicesExport implements WithEvents
{
    /**
     * @return array
     */
    public function registerEvents(): array
    {
        return [
            // Handle by a closure.
            BeforeExport::class => function(BeforeExport $event) {
                $event->writer->getProperties()->setCreator("Patrick");
            },

            // Array callable, refering to a static method.
            BeforeWriting::class => [self::class, "beforeWriting"],

            // Using a class with an __invoke method.
            BeforeSheet::class => new BeforeSheetHandler()
        ];
    }

    public static function beforeWriting(BeforeWriting $event) 
    {
        //
    }
}

請注意,使用 Closure?將不可能與隊(duì)列導(dǎo)出合并,因?yàn)镻HP不能序列化閉包。在這些情況下,最好使用 RegistersEventListeners 特性。

自動注冊事件監(jiān)聽器

通過使用?RegistersEventListeners?trait ,你可以自動注冊事件監(jiān)聽器,而不需要使用 registerEvents 。只有在創(chuàng)建方法時,偵聽器才會被注冊。

namespace AppExports;

use MaatwebsiteExcelConcernsWithEvents;
use MaatwebsiteExcelConcernsRegistersEventListeners;
use MaatwebsiteExcelEventsBeforeExport;
use MaatwebsiteExcelEventsBeforeWriting;
use MaatwebsiteExcelEventsBeforeSheet;
use MaatwebsiteExcelEventsAfterSheet;

class InvoicesExport implements WithEvents
{
    use Exportable, RegistersEventListeners;

    public static function beforeExport(BeforeExport $event)
    {
        //
    }

    public static function beforeWriting(BeforeWriting $event)
    {
        //
    }

    public static function beforeSheet(BeforeSheet $event)
    {
        //
    }

    public static function afterSheet(AfterSheet $event)
    {
        //
    }
}
可用的事件
Event name Payload Explanation
MaatwebsiteExcelEventsBeforeExport $event->writer : Writer Event gets raised at the start of the process.
MaatwebsiteExcelEventsBeforeWriting $event->writer : Writer Event gets raised before the download/store starts.
MaatwebsiteExcelEventsBeforeSheet $event->sheet : Sheet Event gets raised just after the sheet is created.
MaatwebsiteExcelEventsAfterSheet $event->sheet : Sheet Event gets raised at the end of the sheet process.

WriterSheet 都是可以進(jìn)行宏操作的,這意味著它可以很容易地?cái)U(kuò)展以滿足你的需要。Writer 和 Sheet都有一個 ->getDelegate() 方法,它返回底層的PhpSpreadsheet 類。這將允許你為 PhpSpreadsheets 方法添加快捷方法,而這個方法在這個包中是不可用的。

Writer / 寫入
use MaatwebsiteExcelWriter;

Writer::macro("setCreator", function (Writer $writer, string $creator) {
    $writer->getDelegate()->getProperties()->setCreator($creator);
});
Sheet / 單元表
use MaatwebsiteExcelSheet;

Sheet::macro("setOrientation", function (Sheet $sheet, $orientation) {
    $sheet->getDelegate()->getPageSetup()->setOrientation($orientation);
});

你還可以為樣式單元添加一些快捷方法。你可以自由使用這個宏,或者創(chuàng)造你自己的語法!

use MaatwebsiteExcelSheet;

Sheet::macro("styleCells", function (Sheet $sheet, string $cellRange, array style) {
    $sheet->getDelegate()->getStyle($cellRange)->applyFromArray($style);
});

以上例子可作:

namespace AppExports;

use MaatwebsiteExcelConcernsWithEvents;
use MaatwebsiteExcelEventsBeforeExport;
use MaatwebsiteExcelEventsAfterSheet;

class InvoicesExport implements WithEvents
{
    /**
     * @return array
     */
    public function registerEvents(): array
    {
        return [
            BeforeExport::class  => function(BeforeExport $event) {
                $event->writer->setCreator("Patrick");
            },
            AfterSheet::class    => function(AfterSheet $event) {
                $event->sheet->setOrientation(PhpOfficePhpSpreadsheetWorksheetPageSetup::ORIENTATION_LANDSCAPE);

                $event->sheet->styleCells(
                    "B2:G8",
                    [
                        "borders" => [
                            "outline" => [
                                "borderStyle" => PhpOfficePhpSpreadsheetStyleBorder::BORDER_THICK,
                                "color" => ["argb" => "FFFF0000"],
                            ],
                        ]
                    ]
                );
            },
        ];
    }
}

對于 PhpSpreadsheet 方法, 可查看文檔:?https://phpspreadsheet.readthedocs.io/

測試 / Testing

The Excel facade can be used to swap the exporter to a fake.

測試下載
/**
* @test
*/
public function user_can_download_invoices_export() 
{
    Excel::fake();

    $this->actingAs($this->givenUser())
         ->get("/invoices/download/xlsx");

    Excel::assertDownloaded("filename.xlsx", function(InvoicesExport $export) {
        // Assert that the correct export is downloaded.
        return $export->collection()->contains("#2018-01");
    });
}
測試存儲導(dǎo)出
/**
* @test
*/
public function user_can_store_invoices_export() 
{
    Excel::fake();

    $this->actingAs($this->givenUser())
         ->get("/invoices/store/xlsx");

    Excel::assertStored("filename.xlsx", "diskName");

    Excel::assertStored("filename.xlsx", "diskName", function(InvoicesExport $export) {
        return true;
    });

    // When passing the callback as 2nd param, the disk will be the default disk.
    Excel::assertStored("filename.xlsx", function(InvoicesExport $export) {
        return true;
    });
}
測試隊(duì)列導(dǎo)出
/**
* @test
*/
public function user_can_queue_invoices_export() 
{
    Excel::fake();

    $this->actingAs($this->givenUser())
         ->get("/invoices/queue/xlsx");

    Excel::assertQueued("filename.xlsx", "diskName");

    Excel::assertQueued("filename.xlsx", "diskName", function(InvoicesExport $export) {
        return true;
    });

    // When passing the callback as 2nd param, the disk will be the default disk.
    Excel::assertQueued("filename.xlsx", function(InvoicesExport $export) {
        return true;
    });
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/30731.html

相關(guān)文章

  • 關(guān)于laravel5的excel包maatwebsite/excel的使用筆記_v1.0_byKL

    摘要:關(guān)于的包的使用筆記關(guān)于安裝官網(wǎng)已經(jīng)很詳細(xì)了不再描述關(guān)于導(dǎo)入導(dǎo)入的話只有幾個小地方需要注意導(dǎo)入的時候會有產(chǎn)生一些的在循環(huán)遍歷導(dǎo)入的數(shù)據(jù)的時候主動忽略關(guān)于中文或者亂碼問題或者在配置文件在安裝這個模塊的文檔有介紹怎么生成這個文件 關(guān)于laravel5的excel包maatwebsite/excel的使用筆記 關(guān)于安裝 官網(wǎng)已經(jīng)很詳細(xì)了,不再描述.http://www.maatwebsite....

    MkkHou 評論0 收藏0
  • Laravel不權(quán)威導(dǎo)航

    摘要:版微信第三方登陸包括微信微博等等,查看支持列表擴(kuò)展好用的圖片處理,也方便使用百度版百度版支付集合,包含支付寶等支付寶在的封裝各國語言包,包含簡體中文生成二維碼工具,親測好用未完大家可以向我推薦,直接在本文下留言即可。 Laravel不權(quán)威導(dǎo)航 Hi 這里是Roy整理的Laravel相關(guān)索引,希望能幫到大家showImg(http://static.segmentfault.com/bu...

    focusj 評論0 收藏0
  • Laravel之Excel導(dǎo)入、導(dǎo)出

    摘要:介紹是經(jīng)常會使用的,里有非常好的組件,能夠?qū)崿F(xiàn)文件的導(dǎo)入和導(dǎo)出。 1.介紹 Excel是經(jīng)常會使用的,Laravel里有非常好的Excel組件,能夠?qū)崿F(xiàn)Excel/CSV文件的導(dǎo)入和導(dǎo)出 。 組件項(xiàng)目地址: composer: https://packagist.org/packages/maatwebsite/excel。 GitHub: https://github.com/M...

    nodejh 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<