Excel 导入
<p>> 这里举例一种 Excel 导入的写法, 或许不是最佳实现, 仅作参考~</p>
<p>> 数据量不大的情况下, 使用 <a href="https://aisuda.bce.baidu.com/amis/zh-CN/components/form/input-excel">InputExcel</a> 也是个不错的主意~</p>
<p><br></p>
<h3>1. 在 <code>CRUD</code> 的工具栏添加两个按钮</h3>
<pre><code class="language-php">public function list(): Page
{
$crud = $this-&gt;baseCRUD()
-&gt;headerToolbar([
$this-&gt;createButton(true),
// 导入按钮
Components::make()-&gt;importAction(admin_url('xxx_records/import')),
// 模板下载按钮
Components::make()-&gt;downloadImportTemplate('template/XXX导入模板.xlsx'),
...$this-&gt;baseHeaderToolBar(),
])
// ....
}</code></pre>
<p><em>注意: 此处的 <code>Components</code> 是自己封装的, 里面可以放一些常用的非基础组件, 并非框架自带~</em></p>
<p><br></p>
<h4>导入按钮实现</h4>
<p>这里实现了一个弹窗表单, 上传文件并提交~</p>
<pre><code class="language-php">// 这里我封装到了一个单独的 class 中
// 你也可以直接放到对应的 Controller , 或者是直接塞到 headerToolbar 里面, 随你高兴~
public function importAction($api)
{
return amis()-&gt;DialogAction()-&gt;label('导入')-&gt;icon('fa fa-upload')-&gt;dialog(
amis()-&gt;Dialog()-&gt;title('导入')-&gt;body(
amis()-&gt;Form()-&gt;mode('normal')-&gt;api($api)-&gt;body([
amis()-&gt;FileControl()-&gt;name('file')-&gt;required(true)-&gt;drag(true),
]),
)
);
}</code></pre>
<p><br></p>
<h4>模板下载按钮实现</h4>
<p>这里传入了文件地址, 通过跳转链接的方式, 让浏览者自动下载文件~</p>
<p><em>注: 这里我的模板文件路径为: <code>/public/template/XXX导入模板.xlsx</code></em></p>
<pre><code class="language-php">public function downloadImportTemplate($path)
{
return amis()
-&gt;UrlAction()
-&gt;blank(true)
-&gt;label('下载模板')
-&gt;icon('fa fa-download')
-&gt;url(url($path));
}</code></pre>
<p><br></p>
<h3>2.实现导入接口</h3>
<pre><code class="language-php">// file: app/Admin/routes.php
// 添加一个路由
$router-&gt;post('xxx_records/import', [\App\Admin\Controllers\XXXRecordController::class, 'import']);</code></pre>
<pre><code class="language-php">// 控制器中实现导入数据
public function import(Request $request)
{
$file = storage_path('app/public/' . $request-&gt;input('file'));
$data = fastexcel()-&gt;import($file);
XXXRecord::insert($data-&gt;toArray());
return $this-&gt;response()-&gt;successMessage('导入成功');
}</code></pre>
<p><em>注: 此处使用 <a href="https://github.com/rap2hpoutre/fast-excel">fast-excel</a> 实现了最基础的数据导入, 其他逻辑自行添加~</em></p>