数据表格

TIP

当前数据库设计规范参考fastadmin和BuildAdmin,在原有的基础上,实现无需代码自动根据数据库直接实现CRUD。

基础用法

数据表格是有两个action的,一个为table另外一个为indextable用于创建表格结构,index用于获取对应模型的数据。并且表格是需要配合vue中的dk-table组件,在dk-table中自动实现了dk-form

PHP代码示例



namespace addons\gs_demo\controller\admin;

use addons\gs_demo\model\ProjectModel;
use app\common\services\table\DataTable;
use hiduoke\controller\AddonsController;

class Project extends AddonsController
{
    /**
     * @var ProjectModel
     */
    protected $model;

    public function initialize(): void
    {
        parent::initialize();
        $this->model = new ProjectModel();
    }
    /**
     * 查看
     * @throws Throwable
     */
    public function index()
    {
        if ($this->request->param('select')) {
            return $this->select();
        }
        list($where, $alias, $limit, $order) = $this->queryBuilder();
        $res = $this->model
            ->field($this->indexField)
            ->withJoin($this->withJoinTable, $this->withJoinType)
            ->alias($alias)
            ->where($where)
            ->order($order)
            ->paginate($limit);
        return $this->success('', [
            'list'  => $res->items(),
            'total' => $res->total(),
        ]);
    }

    /**
     * 表格
     * @return \think\response\Json
     */
    public function table()
    {
        $DataTable = (new DataTable($this->model));
        if ($this->request->param('recycle')) {
            // 回收站
            $DataTable->field([$this->model->getPk(), 'delete_time']);
        }
        $table_column = $DataTable->operation()->create();
        return $this->success('ok', ['column' => $table_column, 'pk' => $this->model->getPk()]);
    }

}

Vue示例

使用dk-table即可直接实现数据表格中CRUD

<template>
  <dk-table ref="DkTableRef" table-api="/gs_demo/admin.project" :cache-table="false"></dk-table>
</template>
<script setup lang="ts">
  import { ref, onMounted } from 'vue'
  const DkTableRef = ref()
  onMounted(() => {
    DkTableRef.value.DkTable.onClickButton((event, data) => {
      console.log('event', event, data)
    })
  })
</script>

DkTable属性

属性名说明类型可选值默认值
tableApi接收php后端api地址string——
cacheTable是否缓存表格配置boolean——true

Ref 属性

一些自定义的写法可以使用ref中暴露的属性来实现。

属性说明
DkTableDkTableClass的对象
TableRefDkTable中ElTable的Ref
FormRefDkTable中DkForm的Ref

设置字段

可以通过field设置要使用的字段名称

$table_column = $DataTable
    ->field(['title','cover_image','create_time','update_time'])
    ->operation()->create();

自定义字段类型

DataTable可以通过数据库结构自动获取到对应的字段类型,进而渲染对应的样式,设置字段的render即可。

此方法用于指定列的渲染器类型。 可接受的渲染器类型包括:

描述
icon显示图标
switch显示开关控件
image显示单个图片
images显示图片列表
tag显示标签
tags显示标签列表
url显示链接
datetime显示日期时间
time时间
year
color显示颜色
buttons显示按钮组
customRender使用自定义渲染函数
slot使用插槽

buttons按钮组

参数名描述示例值
render按钮渲染器类型moveButton / confirmButton / tipButton / basicButton
name按钮的唯一标识名称,内置默认有几个weigh-sort / edit / delete
title按钮标题,鼠标移上去显示拖拽排序
text按钮文本内容编辑
type按钮样式类型info / primary / danger / waring
icon图标类名,用于展示按钮图标,参考Element图标Rank / Edit / Delete
class按钮自定义CSS类名table-row-weigh-sort
disabledTip是否禁用按钮并显示提示信息(默认为false)false
popconfirm额外配置(confirmButton) - 确认弹窗参数
└── confirmButtonText确认按钮文本确认删除
└── cancelButtonText取消按钮文本关闭
└── confirmButtonType确认按钮样式类型danger
└── title弹窗提示标题您确定要删除所选记录吗?

表格按钮详情

  1. 拖拽排序按钮:

    • render: moveButton
    • name: weigh-sort
    • 类型与样式:info,带有Rank图标
  2. 编辑按钮:

    • render: tipButton
    • name: edit
    • 类型与样式:primary,带有Edit图标
  3. 删除按钮:

    • render: confirmButton
    • name: delete
    • 类型与样式:danger,带有Delete图标
    • 额外功能:点击后出现确认弹窗,需确认后执行删除操作

自定义插槽