之前發(fā)布了插件:http://m.wtbis.cn/plugin/70
由于插件頁(yè)面不支發(fā)布回復(fù),所以在此另開一個(gè)貼,希望感興趣的朋友下載試用,有問題的可以在此反饋。
其實(shí)里面包含好幾個(gè)東西,插件系統(tǒng)、后臺(tái)權(quán)限、ui生成、配置管理、等,整合為一個(gè)插件發(fā)布出來(lái),說(shuō)是個(gè)插件,其實(shí)更是一個(gè)框架。
因?yàn)樯婕暗蕉鄠€(gè)功能,而且是移植版,經(jīng)過了大量調(diào)整,所以發(fā)布出來(lái)有一些問題,一直在迭代修復(fù)。
tpext-myadmin 快速開發(fā)框架,內(nèi)置插件系統(tǒng)、admin權(quán)限,插件系統(tǒng),ui生成(類似laravel-admin
)
集成[webman]版?zhèn)}庫(kù):https://github.com/hi-tpext/mywebman
插件倉(cāng)庫(kù):https://github.com/hi-tpext/tpextmyadmin/tree/4.0
[php環(huán)境] 建議7.3
、7.4
。
8.x
未測(cè)試
composer
全新安裝安裝 [webman] 和 [tpextmyadmin]
#取消composer鏡像,使用官方源,確定下載的是最新
composer config -g --unset repos.packagist
composer create-project workerman/webman mywebman
cd mywebman
composer require ichynul/tpextmyadmin:^4.1.1
安裝完畢,此安裝版是最小模式,只包含基本的后臺(tái)功能,建議開發(fā)新項(xiàng)目時(shí)使用此方式。
git
安裝演示站git拉取,依次執(zhí)行以下命令,
mywebman
為新項(xiàng)目目錄,可自行調(diào)整
git clone https://github.com/hi-tpext/mywebman.git mywebman
cd mywebman
composer update
相關(guān)演示代碼在https://github.com/hi-tpext/mywebman
app/admin/
中,數(shù)據(jù)庫(kù)腳本由[myadmindata]
擴(kuò)展提供,請(qǐng)下載安裝。安裝完畢,此安裝版是最和演示站同步的,如果你想自己搭建演示站可用此方式。
注意:此方式的倉(cāng)庫(kù)是不帶
composer
依賴vendor
目錄的,請(qǐng)務(wù)必運(yùn)行composer update
安裝所有依賴后再訪問網(wǎng)站。
/config/thinkorm.php
中配置數(shù)據(jù)庫(kù),或在網(wǎng)頁(yè)中配置[見下一步]新版本默認(rèn)開啟控制器后綴:'controller_suffix' => 'Controller',
請(qǐng)關(guān)閉它,在config/app.php
中修改為:
'controller_suffix' => '',
2023-02-16 已適配
瀏覽器輸入 [http://localhost:8787/admin
] 打開,如果沒有事先配置數(shù)據(jù)庫(kù),將會(huì)跳轉(zhuǎn)到配置數(shù)據(jù)庫(kù)的頁(yè)面(若不能正常跳,配置數(shù)據(jù)庫(kù)后再試)。
自動(dòng)安裝基礎(chǔ)擴(kuò)展
手動(dòng)安裝 [tpext.myadmin
],確保此擴(kuò)展優(yōu)先,以支持其他擴(kuò)展的后臺(tái)菜單創(chuàng)建
默認(rèn)賬號(hào):admin
:tpextadmin
安裝成功后自動(dòng)創(chuàng)建id為1的超級(jí)管理員,并處于登錄狀態(tài)。
手動(dòng)安裝其余裝擴(kuò)展
http://localhost:8787/admin
]打開,進(jìn)入后臺(tái)主頁(yè)。傳統(tǒng)的php-fpm一般是以 public
作為啟動(dòng)目錄,為保持兼容,建議進(jìn)入 public
目錄執(zhí)行啟動(dòng)命令:
[linux]
啟動(dòng):
cd public
php ../start.php start
[windows]
啟動(dòng):
cd public
php ..\windows.php
或修改把 windows.bat
移入 public
目錄并修改內(nèi)容:
CHCP 65001
php ..\windows.php
pause
啟動(dòng):
cd public
.\windows.bat
extend擴(kuò)展基于composer.josn
配置
初次安裝會(huì)檢測(cè),如果未注冊(cè)/extend/目錄
將自動(dòng)修改composer.json
文件(命令行會(huì)提示:注冊(cè)擴(kuò)展目錄:extend/成功,composer.json文件已修改
),但修改后仍然需你下次運(yùn)行composer
相關(guān)命名才后生效。
"autoload": {
/**其他**/
"psr-0": {
"": "extend/"
}
}
如果下載extend
類型插件不能識(shí)別,提示:
執(zhí)行出錯(cuò):
未匹配到擴(kuò)展
是因?yàn)?extend/目錄未注冊(cè),里面的php文件無(wú)法識(shí)別其命名空間。
暫時(shí)解決辦法,檢查composer.json
文件有無(wú)psr-0 extend/
,然后運(yùn)行composer u
,之后使extend
生效,重啟程序。
https://gxzrnxb27j.k.topthink.com/@tpext-docs/about.html
https://github.com/hi-tpext/myadmin
admin
tpextadmin
<?php
namespace app\admin\controller;
use app\common\logic\MemberLogic;
use app\common\model;
use think\Controller;
use tpext\builder\traits\HasBuilder;
/**
* Undocumented class
* @title 會(huì)員管理
*/
class Member extends Controller
{
use HasBuilder;
/**
* Undocumented variable
*
* @var model\Member
*/
protected $dataModel;
protected function initialize()
{
$this->dataModel = new model\Member;
$this->pageTitle = '會(huì)員管理';
$this->enableField = 'status';
$this->pagesize = 8;
/* 作為下拉選擇數(shù)據(jù)源 相關(guān)設(shè)置 */
//顯示
$this->selectTextField = '{id}#{nickname}({mobile})';
//like查詢字段,$this->dataModel->where('username|nickname|mobile', 'like', $kwd);
$this->selectSearch = 'username|nickname|mobile';
}
protected function filterWhere()
{
$searchData = request()->get();
$where = [];
if (!empty($searchData['id'])) {
$where[] = ['id', 'eq', $searchData['id']];
}
if (!empty($searchData['username'])) {
$where[] = ['username', 'like', '%' . $searchData['username'] . '%'];
}
if (!empty($searchData['nickname'])) {
$where[] = ['nickname', 'like', '%' . $searchData['nickname'] . '%'];
}
if (!empty($searchData['mobile'])) {
$where[] = ['mobile', 'like', '%' . $searchData['mobile'] . '%'];
}
if (isset($searchData['status']) && $searchData['status'] != '') {
$where[] = ['status', 'eq', $searchData['status']];
}
if (isset($searchData['level']) && $searchData['level'] != '') {
$where[] = ['level', 'eq', $searchData['level']];
}
if (!empty($searchData['province'])) {
$where[] = ['province', 'eq', $searchData['province']];
if (!empty($searchData['city'])) {
$where[] = ['city', 'eq', $searchData['city']];
if (!empty($searchData['area'])) {
$where[] = ['area', 'eq', $searchData['area']];
}
}
}
return $where;
}
/**
* 構(gòu)建搜索
*
* @return void
*/
protected function builSearch()
{
$search = $this->search;
$search->text('id', '會(huì)員id')->maxlength(20);
$search->text('username', '賬號(hào)')->maxlength(20);
$search->text('nickname', '昵稱')->maxlength(20);
$search->text('mobile', '手機(jī)號(hào)')->maxlength(20);
$search->select('level', '等級(jí)')->optionsData(model\MemberLevel::order('level')->select(), 'name', 'level')->afterOptions([0 => '普通會(huì)員']);
$search->select('status', '狀態(tài)')->options([0 => '禁用', 1 => '正常']);
$search->select('province', '省份')->dataUrl(url('api/areacity/province'), 'ext_name')->withNext(
$search->select('city', '城市')->dataUrl(url('api/areacity/city'), 'ext_name')->withNext(
$search->select('area', '地區(qū)')->dataUrl(url('api/areacity/area'), 'ext_name')
)
);
}
/**
* 構(gòu)建表格
*
* @return void
*/
protected function buildTable(&$data = [])
{
$table = $this->table;
$table->show('id', 'ID');
$table->image('avatar', '頭像')->thumbSize(50, 50)->default('/static/images/touxiang.png');
$table->show('username', '賬號(hào)');
$table->text('nickname', '昵稱')->autoPost()->getWrapper()->addStyle('width:130px');
$table->show('mobile', '手機(jī)號(hào)')->getWrapper()->addStyle('width:100px');
$table->match('gender', '性別')->options([1 => '男', 2 => '女', 0 => '未知'])->getWrapper()->addStyle('width:50px');
$table->show('age', '性別');
$table->show('level_name', '等級(jí)');
$table->show('money', model\MemberAccount::$types['money']);
$table->show('points', model\MemberAccount::$types['points']);
$table->show('pca', '省市區(qū)');
$table->switchBtn('status', '狀態(tài)')->default(1)->autoPost()->getWrapper()->addStyle('width:60px');
$table->show('last_login_time', '最近登錄')->getWrapper()->addStyle('width:150px');
$table->show('create_time', '注冊(cè)時(shí)間')->getWrapper()->addStyle('width:150px');
$table->sortable('id,sort,money,points,commission,re_comm,shares,last_login_time');
$table->getToolbar()
->btnAdd()
->btnEnableAndDisable('啟用', '禁用')
->btnRefresh();
$table->getActionbar()
->btnEdit()
->btnView()
->btnLink('account', url('/admin/memberaccount/add', ['member_id' => '__data.pk__']), '', 'btn-success', 'mdi-square-inc-cash');
}
/**
* 構(gòu)建表單
*
* @param boolean $isEdit
* @param array $data
*/
protected function builForm($isEdit, &$data = [])
{
$form = $this->form;
$form->tab('基本信息');
$form->image('avatar', '頭像')->thumbSize(50, 50);
$form->text('username', '賬號(hào)')->required()->maxlength(20);
$form->text('nickname', '昵稱')->required()->maxlength(20);
$form->text('mobile', '手機(jī)號(hào)')->maxlength(11);
$form->text('email', '郵件')->maxlength(60);
$form->number('age', '年齡')->max(100)->min(1)->default(18);
$form->radio('gender', '性別')->options([0 => '未知', 1 => '男', 2 => '女'])->default(0);
$form->tab('其他信息');
$form->textarea('remark', '備注')->maxlength(255);
$form->switchBtn('status', '狀態(tài)')->default(1);
if ($isEdit) {
$form->show('last_login_time', '最近登錄時(shí)間');
$form->show('create_time', '注冊(cè)時(shí)間');
$form->show('update_time', '修改時(shí)間');
}
}
/**
* 保存數(shù)據(jù)
*
* @param integer $id
* @return void
*/
private function save($id = 0)
{
$data = request()->only([
'avatar',
'username',
'nickname',
'mobile',
'email',
'gender',
'age',
'status',
'remark',
], 'post');
$result = $this->validate($data, [
'username|賬號(hào)' => 'require',
'nickname|昵稱' => 'require',
'mobile|手機(jī)號(hào)' => 'mobile',
'age|年齡' => 'number',
]);
if (true !== $result) {
$this->error($result);
}
return $this->doSave($data, $id);
}
}
Apache2
作者怎么聯(lián)系 我安裝了 怎么和演示的不一樣
你說(shuō)的是生成代碼吧,菜單是要手動(dòng)添加的。
是生成代碼這個(gè)功能404,還是生成出來(lái)的頁(yè)面404?
最好發(fā)個(gè)截圖(在下面新回復(fù),就可以上傳圖片),是哪個(gè)頁(yè)面,或發(fā)一下頁(yè)面url。
哇,不錯(cuò),改天試下,謝謝分享
$table->getToolbar()
->btnAdd($url = url('add',['module'=>request()->get('module',1)]), $label = '添加' $class = 'btn-primary', $icon = 'mdi-plus', $attr = ''); add鏈接添加變量數(shù)據(jù)不起作用,永遠(yuǎn)是1