PHP頁面構建器,使用php程式碼生成表單表格頁面,快速構建後臺頁面
介紹
郵件 zswemail@qqcom
主頁 zsw.ink 留言
github github.com/iszsw/surface
gitee gitee.com/iszsw/surface
效果
Form 元件
Table元件
安裝
$ composer require iszsw/surface
使用
Form 使用
<?php
use surface\Factory;
// 註冊全域性配置
Factory::configure(['form' => [...]]);
$form = Factory::form();
/**
* 表配置
*/
$form->options(
[
'search' => true,
'submitBtn' => [
'innerText' => '搜尋',
],
'async' => [
'url' => '/', // 提交地址
// ... 其他axios配置
],
'form' => [
'labelWidth' => '100px',
],
]
);
/**
* 列配置
*/
$form->columns(
[
$form->input('username', '使用者名稱'),
$form->switcher('postage', '包郵', 0),
$form->date('section_day', '日期')->props(
[
'type' => "datetimerange",
'format' => "yyyy-MM-dd HH:mm:ss",
'placeholder' => "請選擇活動日期",
]
),
]
);
echo $form->view();
Table 使用
<?php
use surface\Component;
use surface\Factory;
use surface\table\components\Button;
use surface\table\components\Pagination;
// 註冊全域性配置
Factory::configure(['table' => [...]]);
// 獲得Table
$table = Factory::table();
/**
* 表配置
*/
$table->options(
'props', [
'emptyText' => "求求你別看了,沒有啦",
// 'data' => [] // 如果不需要非同步請求資料直接放置值到此變數
]
);
// 兩種元件註冊方式 1、new Xxx(),2、$table->Xxx()
/**
* 表格頂部樣式
*/
$table->header(
(new Component(['el' => 'div']))->children(
[
(new Button('el-icon-check', '提交'))->createSubmit(
['method' => 'post', 'data' => ['username' => 'hello'], 'url' => 'data.php'],
'確認提交選擇的資料',
'id'
),
$table->button('el-icon-plus', '編輯')->createPage('?form=1'),
(new Button('el-icon-search', '搜尋'))->createPage('?search=1')->props('doneRefresh', false),
]
)
);
/**
* 表格列配置
*/
$table->columns(
[
// 選擇框(主鍵)
$table->selection('id'),
// 將address注入到<span>標籤的內部顯示
$table->expand('address', '地址')->scopedSlots([$table->component(['el' => 'span', 'inject' => ['children']])]),
// 以圖片顯示
$table->column('avatar', '頭像')->scopedSlots(
[
$table->component(
[
'el' => 'img',
'style' => ['width' => '50px'],
'inject' => ['attrs' => ['src']],
]
),
]
),
// 可編輯的文字 非同步修改
$table->column('phone', '手機')->scopedSlots(
[
// 非同步操作的data=[key=>val,value],只有value時將獲取當前列的資料提交
$table->writable()->props(['method' => 'post', 'async' => ['data' => ['id'], 'url' => 'data.php']]),
]
)->props('width', '150px'),
// 可編輯的開關樣式 非同步修改
$table->column('status', '狀態')->scopedSlots(
[
$table->switcher()->props(['method' => 'post', 'async' => ['data' => ['id'], 'url' => 'data.php',]]),
]
),
// 可編輯的下拉框樣式 非同步修改
$table->column('sex', '性別')->scopedSlots(
[
$table->select()->props(
[
'async' => ['method' => 'post', 'data' => ['id', 'username' => 'hello'], 'url' => 'data.php'],
'options' => [1 => '男', '女', '未知',],
]
),
]
),
// 行按鈕操作
$table->column('options', '操作')->props('fixed', 'right')
->scopedSlots(
[
// 開啟一個頁面 (可以配合Form元件進行互動)
$table->button('el-icon-edit', '編輯')->createPage('?form=1', ['id', 'username' => 'hello']),
// 確認框按鈕 非同步提交
$table->button('el-icon-delete', '刪除')
->createConfirm('你要刪除我嗎?', ['method' => 'post', 'data' => ['id', 'username' => 'hello'], 'url' => 'data.php',]),
]
),
]
);
/**
* 分頁配置 配置table的非同步請求資料 如果無需非同步請求 可以忽略
*/
$table->pagination(
(new Pagination())->props(
[
'async' => [
'url' => 'data.php', // 請求地址
// 'data' => [], // 請求擴充套件引數
// ... // axios 其他引數
],
]
)
);
echo $table->view();
Test
進入verdor/iszsw/surface/test目錄
$ php -S localhost:888
說明
前端基於 iszsw/surface-src
本作品採用《CC 協議》,轉載必須註明作者和本文連結