mano-code/custom-extend

基于owl-admin和amis的底层自定义扩展

v1.1.7 2024-09-30 06:22 UTC

This package is auto-updated.

Last update: 2024-09-30 06:23:10 UTC


README

中继owl-admin、增加自定义组件

安装本扩展
composer require mano-code/custom-extend

1. 为了方便初学者避免遇到PHP扩展以及配置问题,推荐使用docker-compose作为环境编排。运行环境需要安装docker

a. 发布配置

php artisan publish:docker

b. 启动环境

docker-compose up -d

如需进入docker环境内的运行环境,调试命令请使用即可进入容器内终端

docker-compose exec api bash

如需修改访问端口,则在项目目录下的docker-compose.yml内修改services->nginx->ports的8000为你要使用的端口,默认端口为:localhost:8000/admin

2. 为了解决字典自动加载,以及扩展更新时新增的Migration文件。使用\ManoCode\CustomExtend\Extend\ManoCodeServiceProvider作为基础服务提供者即可解决。具体使用方式参考如下

并且将扩展依赖加入到自己扩展的composer.json->require内。版本要求为:*

在自己扩展内的src/XxxxServiceProvider.php内修改继承类为ManoCodeServiceProvider如下所示。

<?php

namespace ManoCode\Demo;

use ManoCode\CustomExtend\Extend\ManoCodeServiceProvider;

/**
 * 扩展的服务提供者
 */
class DemoServiceProvider extends ManoCodeServiceProvider
{
    protected $menu = [
        [
            'parent' => '',
            'title' => '演示系统',
            'url' => '/demo',
            'url_type' => '1',
            'icon' => 'ant-design:file-zip-outlined',
        ]
    ];
    protected $dict = [
        [
            'key' => 'filesystem.driver',
            'value' => '文件系统驱动',
            'keys' => [
                [
                    'key' => 'local',
                    'value' => '本地存储'
                ],
                [
                    'key' => 'kodo',
                    'value' => '七牛云kodo'
                ],
                [
                    'key' => 'cos',
                    'value' => '腾讯云COS'
                ],
                [
                    'key' => 'oss',
                    'value' => '阿里云OSS'
                ]
            ]
        ]
    ];
    protected $permission = [
        [
            'name'=>'测试权限',
            'slug'=>'test',
            'method'=>[],// 空则代表ANY
            'path'=>[],// 授权接口
            'parent'=>'',// 父级权限slug字段
        ],
        [
            'name'=>'测试接口',
            'slug'=>'test',
            'method'=>[
                'POST',
                'GET',
            ],// 空则代表ANY
            'path'=>[
                '/test/api*'
            ],// 授权接口
            'parent'=>'test',// 父级权限slug字段
        ],
    ];
}

3. 如需定义API直接提供给外部使用,或者自定义鉴权机制,则可以在扩展目录下的src/Http/api_routes.php定义路由。此文件默认不存在,需要自己创建。

新建路由文件src/Http/api_routes.php

写入自己的路由如下所示

本路由可以使用/demo直接访问,与admin_api无关

<?php

use Illuminate\Support\Facades\Route;
Route::any('/demo',function(){
    return ['msg'=>'HelloWorld'];
});
Route::get('/test',[ManoCode\FileSystem\Http\Controllers\DemoApiController::class,'test']);
Route::get('/test1',[ManoCode\FileSystem\Http\Controllers\DemoApiController::class,'test1']);

4. API逻辑交互也提供了json返回的工具类

新建控制器,use ApiResponseTrait;即可通过$this调用接口返回工具

<?php

namespace ManoCode\FileSystem\Http\Controllers;

use Illuminate\Routing\Controller;
use ManoCode\CustomExtend\Traits\ApiResponseTrait;

/**
 *
 */
class DemoApiController extends Controller
{
    use ApiResponseTrait;
    public function test()
    {
        return $this->success('测试成功',[
            'list'=>[]
        ]);
    }
    public function test1()
    {
        return $this->fail('错误',[
            'list'=>[]
        ]);
    }
}

5. 公共函数库

函数1 function setOptionsColor(string $name, array $options = []): string

/**
 * 根据指定选项生成一个动态的三元表达式字符串。
 *
 * @param string $name 变量名称,将用于表达式中作为条件变量。
 * @param array $options 选项数组,其中键 (`key`) 代表需要与变量匹配的值,值 (`value`) 代表匹配成功时返回的颜色或状态值。
 *                       颜色格式可以是 'active', 'inactive', 'error', 'success', 'processing', 'warning' 或具体色值。
 *                       例如:
 *                       [
 *                           'enable' => 'success',
 *                           'disable' => 'error',
 *                       ]
 * @return string 返回构建好的三元表达式字符串,格式为:
 *                 ${name=="value1"?"color1":(name=="value2"?"color2":"default")}
 *                 其中,'default' 是当所有条件不匹配时的默认值。
 */
function setOptionsColor(string $name, array $options = []): string
使用示例

一般用于状态字段的颜色选择,只需要提供字段名、颜色对照表即可使用 中文名称需要自行在Service完成调整

amis()->TableColumn('state_title', '状态')->type('tag')->static()->set('color',$this->setOptionsColor('state',['enable'=>'success','disable'=>'error']))