-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathNavController.php
More file actions
103 lines (97 loc) · 4.11 KB
/
Copy pathNavController.php
File metadata and controls
103 lines (97 loc) · 4.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<?php
namespace Module\Nav\Admin\Controller;
use Illuminate\Routing\Controller;
use ModStart\Admin\Concern\HasAdminQuickCRUD;
use ModStart\Admin\Layout\AdminCRUDBuilder;
use ModStart\Core\Dao\ModelUtil;
use ModStart\Core\Type\TypeUtil;
use ModStart\Core\Util\SerializeUtil;
use ModStart\Field\AbstractField;
use ModStart\Field\AutoRenderedFieldValue;
use ModStart\Field\Type\FieldRenderMode;
use ModStart\Form\Form;
use ModStart\ModStart;
use ModStart\Repository\Filter\ScopeFilter;
use ModStart\Support\Concern\HasFields;
use Module\Nav\Type\NavOpenType;
use Module\Nav\Type\NavPosition;
use Module\Nav\Util\NavUtil;
class NavController extends Controller
{
use HasAdminQuickCRUD;
protected function crud(AdminCRUDBuilder $builder)
{
if ($builder->mode() == AdminCRUDBuilder::MODE_FORM) {
$positionNavs = [];
foreach (NavUtil::tree() as $v) {
$positionNavs[] = [
'id' => $v['id'],
'position' => $v['position'],
'name' => $v['name'],
];
if (!empty($v['_child'])) {
foreach ($v['_child'] as $v2) {
$positionNavs[] = [
'id' => $v2['id'],
'position' => $v2['position'],
'name' => $v['name'] . ' → ' . $v2['name'],
];
}
}
}
ModStart::script('window.__positionNavs=' . SerializeUtil::jsonEncode($positionNavs) . ';');
ModStart::scriptFile('module/Nav/Admin/Controller/NavEdit.js');
}
$builder
->init('nav')
->field(function ($builder) {
/** @var HasFields $builder */
$builder->id('id', 'ID');
$builder->select('position', '位置')
->optionType(NavPosition::class)
->hookRendering(function (AbstractField $field, $item, $index) {
switch ($field->renderMode()) {
case FieldRenderMode::DETAIL:
case FieldRenderMode::GRID:
if ($item->pid) {
return AutoRenderedFieldValue::make('');
}
return AutoRenderedFieldValue::make(
TypeUtil::name(NavPosition::class, $item->position)
);
}
});
$builder->text('name', '名称');
$builder->icon('icon', '图标')->help('部分主题支持图标显示');
$builder->link('link', '链接');
$builder->switch('enable', '启用')->optionsYesNo()->gridEditable(true)->defaultValue(true);
$builder->radio('openType', '打开方式')->optionType(NavOpenType::class)->defaultValue(NavOpenType::CURRENT_WINDOW);
$builder->display('created_at', L('CreatedAt'))->listable(false);
$builder->display('updated_at', L('UpdatedAt'))->listable(false);
});
foreach (NavPosition::getList() as $key => $value) {
$builder->scopeFilter($key, $value, function (ScopeFilter $filter) use ($key) {
return $filter->where('position', $key);
});
}
$builder->scopeDefault(NavPosition::first());
$builder
->hookSaved(function (Form $form) {
/** @var \stdClass $item */
$item = $form->item();
if ($item->pid > 0) {
$parent = ModelUtil::get('nav', $item->pid);
ModelUtil::update('nav', $item->id, [
'position' => $parent['position'],
]);
}
})
->hookChanged(function (Form $form) {
NavUtil::clearCache();
})
->canBatchDelete(true)
->asTree('id', 'pid', 'sort', 'name')
->treeMaxLevel(3)
->title('导航设置');
}
}