Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

需求整理 #1

Open
18 of 36 tasks
icedfish opened this issue Jan 27, 2016 · 29 comments
Open
18 of 36 tasks

需求整理 #1

icedfish opened this issue Jan 27, 2016 · 29 comments

Comments

@icedfish
Copy link
Contributor

icedfish commented Jan 27, 2016

0. 给新生儿起个名字

  • lego
  • block
  • hawl
  • scaffold

1. 一些约定

  1. 前端基于Bootstrap3,不基于Inspinia

11. Rapyd需要保留的地方

  • 保留addText() 系列方法
  • 保留Filter,Editor,Grid的三者分开的设定
  • 支持Rules和前端检查
  • cell()保留

12. Rapyd需要加的功能

  • $filter->items()
  • KV类型
  • TestCase + 各种防注入检查
  • DataEditor 加个 success url
  • 加个remember功能,全局支持开启草稿(纯前端实现)。
  • a.b.c的方式不但支持relation,还支持调用属性。
  • 支持rule的前端检查以及控件集成,比如required、required_if,最好能动态生成。

13. Rapyd需要改进的功能

  • 所有属性应该默认protected
  • Build函数太复杂导致很多问题
  • Model修改后从数据库读一次新的数据,避免脏数据
  • Action & Status 需要合并
  • mode('readonly') => ->readonly()
  • 改进排序,改为方法调用,并且可以指定排序字段
  • 保存按钮可以自定义文字和样式
  • TL是废的
  • 干掉所有直接add()的支持,都用addText()
  • 默认Table在移动上的展现很困难,改为非Table方案
  • 在后端做些判断,而不是纯前端的实现Table
  • 尽量渲染View,不要拼HTML
  • $grid->edit()不能显示文字,只能现实图标。
  • AutoComplete在filter时:auto_xiaoqu_name=京通苑阳光华苑&xiaoqu_name=136
  • XSS Filter没必要自己写
  • options() && selectOpts() 两个一起用起来还是比较麻烦,思考简化方案。
  • Tag类型有多relation有相同字段名时有冲突

14. Rapyd应该干掉的部分

  • map可以干掉
  • buildCsv
  • Auto
  • 多语言支持
@zhwei
Copy link
Collaborator

zhwei commented Feb 21, 2016

修改按钮默认不显示

@zhwei
Copy link
Collaborator

zhwei commented Feb 22, 2016

Number组件添加max min之类函数,在前端同时通过html属性限制

@zhwei
Copy link
Collaborator

zhwei commented Feb 23, 2016

DataGrid加默认paginate

@micln
Copy link
Contributor

micln commented Feb 23, 2016

大半夜犯抽了。。本评论请无视。。


readonly的实现,现在就是填充个div。换成个readonly的input怎么样,有遇到过readonly但是想用js去改的。

@icedfish
Copy link
Contributor Author

使用DataEditor编辑数据,且对应要修改的Model数据不存在时,更早给出更合理的报错,现在的出错信息很奇怪。

@icedfish
Copy link
Contributor Author

@micln readonly如果还能改的话才叫坑爹好不好。。。 理论上readonly的字段就算form里面扔回来,后端也不该认的。

@zhwei
Copy link
Collaborator

zhwei commented Feb 25, 2016

传入已存储的model时,忽略modify|show等参数的值

@zhwei
Copy link
Collaborator

zhwei commented Mar 12, 2016

表单控件:SelectOrInput

@micln
Copy link
Contributor

micln commented Apr 30, 2016

addTags的每一项要不要加个能点的链接。非必须

@zhwei
Copy link
Collaborator

zhwei commented May 13, 2016

  • 单元测试的帮助函数,方便模拟请求
  • 前端必要的地方可以试下集成vue.js

@micln
Copy link
Contributor

micln commented May 25, 2016

常用的 cell 进行封装,比如 ModelLabel、链接。而且基本上都是一行的 cell 函数

@zhwei
Copy link
Collaborator

zhwei commented May 25, 2016

可以提供在外部项目注册Marco的接口,调用时 ->marco('model-label')

@zhwei
Copy link
Collaborator

zhwei commented Jun 2, 2016

DataForm的view函数是个很好的实现,可以根据传入的回调返回不同的response,其实还有些地方可以利用这个用法,比如:

  • DataGrid的导出功能
  • DataForm的自动补全,默认解析传入的name,也可以传入特定Closure,返回补全结果集。
$edit->addAutocomplete('target-xiaoqu', '目标小区')->match(function ($keyword) {

    return Xiaoqu::whereType(\Xiaoqu::TYPE_重点)
            ->where(function ($query) use ($keyword) {
                $pattern = "%{$keyword}%";
                /** @var \Xiaoqu $query */
                $query->where('name', 'like', $pattern)
                    ->orWhere('alias', 'like', $pattern);
            })
            ->take(10)
            ->get()
            ->map(function (self $xq) {
                return [
                    'id' => $xq->id,
                    'name' => $xq->name . ($xq->alias ? " ({$xq->alias})" : "")
                ];
            })
            ->toArray();

});

自动补全的链接:

http://xxxx.xxx/path?__lego_autocomplete=target-xiaoqu&keyword=xxxx

2016.6.7 补充

提供注册机制,可以注册特殊且常用的补全函数。

LegoRegister::addAutoCompleteMatch('target-xiaoqu', function ($keyword) {

    // balabala

});


// 使用时

$edit->addAutocomplete('target-xiaoqu', '目标小区')->match('target-xiaoqu')

@icedfish
Copy link
Contributor Author

icedfish commented Jun 2, 2016

这个不错。权限问题也解决了。

@zhwei
Copy link
Collaborator

zhwei commented Jun 7, 2016

DataGrid & DataForm & DataFilter 的 each 函数

可接收 >= 1个参数,第一个参数为 Field 可能存在的函数名,调用时,会尝试调用 Field 上的该函数,后续参数作为函数参数。

$edit->each('required');
$edit->each('options', ['', '']);

// 6.16更新
$edit->each(\Closure);

@zhwei
Copy link
Collaborator

zhwei commented Jun 16, 2016

常用Model的特定字段经常会重复写,可以在Controller构造函数中注册Model常用字段

LegoRegister::addModel(Room::class, [
    'status' => [
        'type' => 'select',
        'options' => [ ... ]
        'label' => '销售状态',
        'cell' => function ($status, Room $room) {
            return ModelTool::label($room);
        }
    ],
    'address' => [ ... ]
    // ...

]);


$filter->addMany('status', 'address');
$grid->addMany('status', 'address')

@zhwei
Copy link
Collaborator

zhwei commented Jun 19, 2016

confirm & choose

@zhwei
Copy link
Collaborator

zhwei commented Jun 21, 2016

嗯,级联控件

$edit->addDependentSelect('bank_name', '银行名');
$edit->addDependentSelect('bank_city', '银行所在城市')
    ->depend('bank_name', function ($bankName) {
        return Bank::whereBankName($bankName)->pluck('city', 'id');
    });


return $edit->view(...)

或者直接扩展 Select Field

@micln
Copy link
Contributor

micln commented Jun 21, 2016

这个不需要定义一个Ajax的URL规则么

@zhwei
Copy link
Collaborator

zhwei commented Jun 22, 2016

@micln 需要的,可以参照上面自动补全的链接。

2016-06-22 11 03 58

@zhwei
Copy link
Collaborator

zhwei commented Jul 12, 2016

手机验证码 && 图片验证码 的控件

@zhwei
Copy link
Collaborator

zhwei commented Sep 6, 2016

select 控件的默认选项使用 constants() 获取,约定优于配置。

@micln
Copy link
Contributor

micln commented Sep 6, 2016

我觉得 listXX 优先于 constants 好一些,现在的 addModelChoice 里就这么干的,考虑到自定义情况

@zhwei
Copy link
Collaborator

zhwei commented Sep 6, 2016

自定义的场景还是直接作为参数传入 options() 更好些。

2016-09-06 10:20 GMT+08:00 huiren notifications@github.com:

我觉得 listXX 优先于 constants 好一些,现在的 addModelChoice 里就这么干的,考虑到自定义情况


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
#1 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABYSO561RWQmpKdCbMHwnJOq4u-Dt0WXks5qnM37gaJpZM4HNHjV
.

@zhwei
Copy link
Collaborator

zhwei commented Feb 22, 2017

Grid (列表) 中的批处理

$grid->addAction('分派')
    ->form(function (Form $form) {
            $form->addAutoComplete('执行人')->match(function ($keyword) {
                    return Corp::where('name', 'like', '%' . $keyword . '%')->pluck('name', 'id');
            });
    })
    ->action(function (Task $task, Form $form) {
        $task->executor_id = $form->field('执行人')->getNewValue();
        $task->save();
    })

@zhwei
Copy link
Collaborator

zhwei commented Feb 22, 2017

我觉得 listXX 优先于 constants 好一些,现在的 addModelChoice 里就这么干的,考虑到自定义情况

@micln 在 Lego 里可以继承 Select 在 Laputa 中实现定制化的 ModelSelect ,优雅,还有自动补全 ^_^


哈哈,Lego 写到现在终于算是达到预期了,上面 90+% 需求已满足 ,剩余需求可以现有架构上轻松实现。

@heimasi
Copy link

heimasi commented Mar 12, 2017

这个轮子造的好,辛苦了各位大牛!
有个常用的需求不知道好实现不:在form中增加一个grid,grid是当前model的一对多数据。比如:分类和物品,查看或编辑某个分类时,同时显示该分类下的物品,并且还可以编辑。

@zhwei
Copy link
Collaborator

zhwei commented Mar 12, 2017

@heimasi 之前有过想法,API 大致如下

$form->addHasMany('books', function (Form $form) {
	$form->addText('name');
	$form->addText('company');
	...
});

但还没排上计划,可以单独建个 Issue ,当然更希望能直接提 PR 哦!😄

@zhwei
Copy link
Collaborator

zhwei commented Mar 12, 2017

此 Issue 仅用于最早期需求整理,后续意见请新建 Issue

@wutongwan wutongwan locked and limited conversation to collaborators Mar 12, 2017
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants