From f67a4f33d51a12adad605529e2f02519db896181 Mon Sep 17 00:00:00 2001 From: JaguarJack Date: Sat, 24 Apr 2021 20:29:33 +0800 Subject: [PATCH] =?UTF-8?q?add:=E6=96=B0=E5=A2=9E=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- catch/cms/tables/Category.php | 47 ++++++++++++ .../catcher/library/excel/reader/Factory.php | 50 +++++++++++++ extend/catcher/library/excel/reader/Macro.php | 64 ++++++++++++++++ .../catcher/library/excel/reader/Reader.php | 74 +++++++++++++++++++ 4 files changed, 235 insertions(+) create mode 100644 catch/cms/tables/Category.php create mode 100644 extend/catcher/library/excel/reader/Factory.php create mode 100644 extend/catcher/library/excel/reader/Macro.php create mode 100644 extend/catcher/library/excel/reader/Reader.php diff --git a/catch/cms/tables/Category.php b/catch/cms/tables/Category.php new file mode 100644 index 0000000..f3f2604 --- /dev/null +++ b/catch/cms/tables/Category.php @@ -0,0 +1,47 @@ +getTable('category') + ->header([ + HeaderItem::label('分类名称')->prop('name'), + HeaderItem::label('自定义链接')->prop('url'), + HeaderItem::label('栏目类型')->prop('type')->component('type'), + HeaderItem::label('投稿')->prop('is_can_contribute')->withSwitchComponent(), + HeaderItem::label('评论')->prop('is_can_comment')->withSwitchComponent(), + HeaderItem::label('状态')->prop('status')->withSwitchComponent(), + HeaderItem::label('权重')->prop('weight')->withEditNumberComponent(), + HeaderItem::label('创建时间')->prop('created_at'), + HeaderItem::label('操作')->actions([ + Actions::update(), + Actions::delete() + ]) + ]) + ->withActions([ + Actions::create() + ]) + ->withSearch([ + Search::label('分类名称')->name('请输入分类名称'), + Search::label('状态')->name('请选择状态'), + ]) + ->toTreeTable() + ->render(); + } + + public function form() + { + // TODO: Implement form() method. + + } + + +} diff --git a/extend/catcher/library/excel/reader/Factory.php b/extend/catcher/library/excel/reader/Factory.php new file mode 100644 index 0000000..21a1a2f --- /dev/null +++ b/extend/catcher/library/excel/reader/Factory.php @@ -0,0 +1,50 @@ +make(self::readers()[$ext]); + } + + throw new FailedException('Dont Support The File Extension'); + } + + + /** + * readers + * + * @time 2021年04月01日 + * @return string[] + */ + protected static function readers(): array + { + return [ + 'xlsx' => Xlsx::class, + 'xml' => Xml::class, + 'ods' => Ods::class, + 'slk' => Slk::class, + 'csv' => Csv::class, + ]; + } +} \ No newline at end of file diff --git a/extend/catcher/library/excel/reader/Macro.php b/extend/catcher/library/excel/reader/Macro.php new file mode 100644 index 0000000..045ff14 --- /dev/null +++ b/extend/catcher/library/excel/reader/Macro.php @@ -0,0 +1,64 @@ +sheets[$index]); + } + + return $this; + } + + /** + * 设置 memory + * + * @time 2021年04月21日 + * @param int $memory + * @return mixed + */ + public function memory(int $memory) + { + ini_set('memory_limit', $memory . 'M'); + + return $this; + } + + + /** + * 处理 + * + * @time 2021年04月23日 + * @return array + */ + protected function dealWith(): array + { + $headers = $this->headers(); + + $data = []; + + foreach ($this->sheets as &$sheet) { + $d = []; + foreach ($headers as $k => $header) { + $d[$header] = method_exists($this, 'deal' . ucfirst($header)) ? + + $this->{'deal' . ucfirst($header)}($sheet) : $sheet[$k]; + } + + $data[] = $d; + } + + return $data; + } +} diff --git a/extend/catcher/library/excel/reader/Reader.php b/extend/catcher/library/excel/reader/Reader.php new file mode 100644 index 0000000..b321f9c --- /dev/null +++ b/extend/catcher/library/excel/reader/Reader.php @@ -0,0 +1,74 @@ +setPath('excel')->toLocal($file); + + $reader = Factory::make($file); + // 设置只读 + $reader->setReadDataOnly(true); + + /* @var $spreadsheet Spreadsheet */ + $spreadsheet = $reader->load($file); + + if ($this->active) { + $this->sheets = $spreadsheet->getActiveSheet()->toArray(); + } else { + foreach ($spreadsheet->getAllSheets() as $sheet) { + $this->sheets[] = $sheet->toArray(); + } + } + + return $this; + } + + /** + * 必须实现的方法 + * + * @time 2021年04月21日 + * @return mixed + */ + abstract public function headers(); + + + /** + * 数据处理 + * + * @time 2021年04月23日 + * @param callable $callback + * @return mixed + */ + public function then(callable $callback) + { + return $callback($this->dealWith()); + } +} \ No newline at end of file