builder-man UI生成器

關(guān)于
UI builder for webman
http://www.wtbis.cn/plugin/70 的精簡版,只使用其UI生成功能。
這個年代,不應該再干那種:復制一下
index.html
、edit.html
、create.html
,修修改改做個功能的事。
2025-03-13 進一步精簡代碼,并適配 webman v2
2024-11-15 升級2.0版本
與1.0版本的不同
-
簡化代碼,去除了與
webman/admin
相關(guān)的依賴代碼,增強兼容性。 -
composer.json
中移除了對ichynul/tpextbuilder
UI的依賴,有兩套UI可供選擇,改為按需選擇安裝。
安裝webman
http://www.wtbis.cn/doc/webman/install.html
安裝本擴展
1、安裝UI builder擴展(三選一):
基于bootstrap
composer require ichynul/tpextbuilder:^3.9.1
或者 (基于vue3 + tinyvue)
composer require ichynul/tpext-tinyvue:^5.0.1
或者 (基于vue3 + vexipui)
composer require ichynul/tpext-vexipui^5.0.1
2、安裝本擴展
composer require ichynul/builder-man:^2.0.1
會自動安裝相關(guān)依賴:tp-orm
、tp-cahce
、tp-template
配置
-
關(guān)閉控制器復用:
/config/app.php
,'controller_reuse' => false
-
配置數(shù)據(jù)庫:
/config/thinkorm.php
-
修改語言
/config/plugin/builder/man/lang.php
:'default_lang' => 'zh-cn', //en 或 zh-cn
使用
運行webman
代碼編寫
模型使用tp-orm
,laravel-orm
理論上也支持。
文檔
https://gxzrnxb27j.k.topthink.com/@tpext-docs/about.html
DEMO
簡單使用,一個表單:
此示例中使用了webman/admin的代碼,確保已安裝webman/admin
<?php
namespace app\controller;
use support\Request;
use tpext\builder\common\Builder;
use think\Controller;
use plugin\admin\app\model\Admin;
/**注意控制器后綴,看你是否開啟后綴,
沒開啟的話這里是: Index extends Controller
**/
class IndexController extends Controller
{
public function index(Request $request)
{
$builder = Builder::getInstance('builder', '測試');
if (request()->method() == 'GET') {
$form = $builder->form();
$form->image('avatar', '頭像')->thumbSize(50, 50);
$form->text('username', '賬號')->required();
$form->text('nickname', '昵稱')->required();
$form->text('mobile', '手機號');
$form->text('email', '郵件');
$form->fill(Admin::where('id', 1)->first());//測試使用laravel模型
return $builder;
} else {
$data = request()->only([
'avatar',
'nickname',
'mobile',
'email',
]);
Admin::where('id', 1)->update($data);
$this->success('成功,數(shù)據(jù)是:' . json_encode($data));
}
}
}
進階使用,配合tpext\builder\traits\actions\*
traits實現(xiàn)CRUD。(laravel-orm
寫法不兼容)
<?php
namespace app\admin\controller;
use think\Controller;
use app\common\model\MemberLevel as LevelModel;
use tpext\builder\traits\actions;
class Memberlevel extends Controller
{
//引入控制器動作
use actions\HasBase;//基礎(chǔ),必須
use actions\HasIndex;//列表
use actions\HasAdd;//添加
use actions\HasEdit;//編輯
use actions\HasView;//查看
use actions\HasDelete;//刪除
/**
* Undocumented variable
*
* @var LevelModel
*/
protected $dataModel;
protected function initialize()
{
$this->dataModel = new LevelModel;
$this->pageTitle = '代理等級';
$this->sortOrder = 'level asc';
$this->selectSearch = 'name';
}
protected function filterWhere()
{
$searchData = request()->get();
$where = [];
if (!empty($searchData['name'])) {
$where[] = ['name', 'like', '%' . $searchData['name'] . '%'];
}
return $where;
}
/**
* 構(gòu)建搜索
*
* @return void
*/
protected function buildSearch()
{
$search = $this->search;
$search->text('name', '名稱', 3)->maxlength(20);
}
/**
* 構(gòu)建表格
*
* @return void
*/
protected function buildTable(&$data = [])
{
$table = $this->table;
$table->show('id', 'ID');
$table->text('name', '名稱')->autoPost();
$table->text('level', '等級');
$table->show('member_count', '人數(shù)統(tǒng)計');
$table->show('description', '描述');
$table->show('create_time', '添加時間');
$table->show('update_time', '更新時間');
$table->getActionbar()
->btnEdit()
->btnView()
->btnDelete();
}
/**
* 構(gòu)建表單
*
* @param boolean $isEdit
* @param array $data
*/
protected function buildForm($isEdit, &$data = [])
{
$form = $this->form;
$form->text('name', '名稱');
$form->number('level', '等級');
$form->textarea('description', '描述');
if ($isEdit) {
$form->show('member_count', '人數(shù)統(tǒng)計');
$form->show('create_time', '添加時間');
$form->show('update_time', '更新時間');
}
}
/**
* 保存數(shù)據(jù)
*
* @param integer $id
* @return void
*/
private function save($id = 0)
{
$data = request()->only([
'name',
'level',
'description',
]);
$result = $this->validate($data, [
'name|名稱' => 'require',
'level|等級' => 'require|number'
]);
if (true !== $result) {
$this->error($result);
}
return $this->doSave($data, $id);
}
}
其他說明
語言
語言默認為英文,如需切換語言:在config\plugin\builder\man\lang.php
中
'default_lang' => 'zh-cn',
上傳文件、鑒權(quán)
需要對上傳文件,選擇文件,導入文件等功能進行定制,可以參考以下代碼:
use tpext\builder\common\Module;
use tpext\builder\common\Builder;
//代碼可以放在基礎(chǔ)控制器的構(gòu)造函數(shù)中、或中間件中
public function setup(){
Module::getInstance()->setUploadUrl('/your/upload/url');//默認為:admin/upload/upfiles
Module::getInstance()->setChooseUrl('/your/choose/url');//默認為:admin/attachment/index
Module::getInstance()->setImportUrl('/your/import/url');//默認為:admin/import/page
//代碼邏輯 可參考 tpextbuilder | tpext-tinyvue 中 controller/admin 目錄下的以下文件:
// Attachment.php | Import.php | Upload.php
Builder::auth('yourauthclass');//設置權(quán)限驗證類,需要實現(xiàn)接口:\tpext\builder\inface\Auth。
Builder::aver('1.0.1');//資源版本號,用于控制更新。依賴的UI庫可能會更新一些靜態(tài)資源,修改版本號可以應用最新資源。
}
License
MIT