一键生成CRUD生成紧凑型表单

pull/101/head
PPPSCN 2019-03-01 22:50:24 +08:00
parent 8ecb59db9a
commit d2e55530cb
13 changed files with 76 additions and 29 deletions

View File

@ -580,6 +580,7 @@ class Crud extends Command
$formEditElement = $this->getReplacedStub('html/select', ['field' => $field, 'fieldName' => $fieldName, 'fieldList' => $this->getFieldListName($field), 'attrStr' => Form::attributes($attrArr), 'selectedValue' => "\$row.{$field}"]); $formEditElement = $this->getReplacedStub('html/select', ['field' => $field, 'fieldName' => $fieldName, 'fieldList' => $this->getFieldListName($field), 'attrStr' => Form::attributes($attrArr), 'selectedValue' => "\$row.{$field}"]);
} elseif ($inputType == 'datetime') { } elseif ($inputType == 'datetime') {
$cssClassArr[] = 'datetimepicker'; $cssClassArr[] = 'datetimepicker';
$attrArr['placeholder'] = "{:__('Please select')}{:__('{$langField}')}";
$attrArr['class'] = implode(' ', $cssClassArr); $attrArr['class'] = implode(' ', $cssClassArr);
$format = "YYYY-MM-DD HH:mm:ss"; $format = "YYYY-MM-DD HH:mm:ss";
$phpFormat = "Y-m-d H:i:s"; $phpFormat = "Y-m-d H:i:s";
@ -636,6 +637,7 @@ class Crud extends Command
$formEditElement = $this->getReplacedStub('html/' . $inputType, ['field' => $field, 'fieldName' => $fieldName, 'fieldList' => $this->getFieldListName($field), 'attrStr' => Form::attributes($attrArr), 'selectedValue' => "\$row.{$field}"]); $formEditElement = $this->getReplacedStub('html/' . $inputType, ['field' => $field, 'fieldName' => $fieldName, 'fieldList' => $this->getFieldListName($field), 'attrStr' => Form::attributes($attrArr), 'selectedValue' => "\$row.{$field}"]);
} elseif ($inputType == 'textarea') { } elseif ($inputType == 'textarea') {
$cssClassArr[] = $this->isMatchSuffix($field, $this->editorSuffix) ? $this->editorClass : ''; $cssClassArr[] = $this->isMatchSuffix($field, $this->editorSuffix) ? $this->editorClass : '';
$attrArr['placeholder'] = "{:__('Please input')}{:__('{$langField}')}";
$attrArr['class'] = implode(' ', $cssClassArr); $attrArr['class'] = implode(' ', $cssClassArr);
$attrArr['rows'] = 5; $attrArr['rows'] = 5;
$formAddElement = Form::textarea($fieldName, $defaultValue, $attrArr); $formAddElement = Form::textarea($fieldName, $defaultValue, $attrArr);
@ -656,17 +658,20 @@ class Crud extends Command
$formAddElement = $this->getReplacedStub('html/' . $inputType, ['field' => $field, 'fieldName' => $fieldName, 'fieldYes' => $yes, 'fieldNo' => $no, 'attrStr' => Form::attributes($attrArr), 'fieldValue' => $defaultValue, 'fieldSwitchClass' => $defaultValue == $no ? $stateNoClass : '']); $formAddElement = $this->getReplacedStub('html/' . $inputType, ['field' => $field, 'fieldName' => $fieldName, 'fieldYes' => $yes, 'fieldNo' => $no, 'attrStr' => Form::attributes($attrArr), 'fieldValue' => $defaultValue, 'fieldSwitchClass' => $defaultValue == $no ? $stateNoClass : '']);
$formEditElement = $this->getReplacedStub('html/' . $inputType, ['field' => $field, 'fieldName' => $fieldName, 'fieldYes' => $yes, 'fieldNo' => $no, 'attrStr' => Form::attributes($attrArr), 'fieldValue' => "{\$row.{$field}}", 'fieldSwitchClass' => "{eq name=\"\$row.{$field}\" value=\"{$no}\"}fa-flip-horizontal text-gray{/eq}"]); $formEditElement = $this->getReplacedStub('html/' . $inputType, ['field' => $field, 'fieldName' => $fieldName, 'fieldYes' => $yes, 'fieldNo' => $no, 'attrStr' => Form::attributes($attrArr), 'fieldValue' => "{\$row.{$field}}", 'fieldSwitchClass' => "{eq name=\"\$row.{$field}\" value=\"{$no}\"}fa-flip-horizontal text-gray{/eq}"]);
} elseif ($inputType == 'citypicker') { } elseif ($inputType == 'citypicker') {
$attrArr['placeholder'] = "{:__('Please select')}{:__('{$langField}')}";
$attrArr['class'] = implode(' ', $cssClassArr); $attrArr['class'] = implode(' ', $cssClassArr);
$attrArr['data-toggle'] = "city-picker"; $attrArr['data-toggle'] = "city-picker";
$formAddElement = sprintf("<div class='control-relative'>%s</div>", Form::input('text', $fieldName, $defaultValue, $attrArr)); $formAddElement = sprintf("<div class='control-relative'>%s</div>", Form::input('text', $fieldName, $defaultValue, $attrArr));
$formEditElement = sprintf("<div class='control-relative'>%s</div>", Form::input('text', $fieldName, $editValue, $attrArr)); $formEditElement = sprintf("<div class='control-relative'>%s</div>", Form::input('text', $fieldName, $editValue, $attrArr));
} else { } else {
$attrArr['placeholder'] = "{:__('Please input')}{:__('{$langField}')}";
$search = $replace = ''; $search = $replace = '';
//特殊字段为关联搜索 //特殊字段为关联搜索
if ($this->isMatchSuffix($field, $this->selectpageSuffix)) { if ($this->isMatchSuffix($field, $this->selectpageSuffix)) {
$inputType = 'text'; $inputType = 'text';
$defaultValue = ''; $defaultValue = '';
$attrArr['data-rule'] = 'required'; $attrArr['data-rule'] = 'required';
$attrArr['placeholder'] = "{:__('Please select')}{:__('{$langField}')}";
$cssClassArr[] = 'selectpage'; $cssClassArr[] = 'selectpage';
$selectpageController = str_replace('_', '/', substr($field, 0, strripos($field, '_'))); $selectpageController = str_replace('_', '/', substr($field, 0, strripos($field, '_')));
$attrArr['data-source'] = $selectpageController . "/index"; $attrArr['data-source'] = $selectpageController . "/index";
@ -1310,8 +1315,8 @@ EOD;
$langField = mb_ucfirst($field); $langField = mb_ucfirst($field);
return <<<EOD return <<<EOD
<div class="form-group"> <div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('{$langField}')}:</label> <label for="c-{$field}" class="control-label">{:__('{$langField}')}:</label>
<div class="col-xs-12 col-sm-8"> <div class="pp_container">
{$content} {$content}
</div> </div>
</div> </div>
@ -1337,11 +1342,11 @@ EOD;
return <<<EOD return <<<EOD
<div class="input-group"> <div class="input-group">
{$content} {$content}
<span class="msg-box n-top" for="c-{$field}"></span>
<div class="input-group-addon no-border no-padding"> <div class="input-group-addon no-border no-padding">
<span><button type="button" id="plupload-{$field}" class="btn btn-danger plupload" data-input-id="c-{$field}"{$uploadfilter}{$multiple}{$preview}><i class="fa fa-upload"></i> {:__('Upload')}</button></span> <span><button type="button" id="plupload-{$field}" class="btn btn-danger plupload" data-input-id="c-{$field}"{$uploadfilter}{$multiple}{$preview}><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-{$field}" class="btn btn-primary fachoose" data-input-id="c-{$field}"{$selectfilter}{$multiple}><i class="fa fa-list"></i> {:__('Choose')}</button></span> <span><button type="button" id="fachoose-{$field}" class="btn btn-primary fachoose" data-input-id="c-{$field}"{$selectfilter}{$multiple}><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div> </div>
<span class="msg-box n-right" for="c-{$field}"></span>
</div> </div>
{$previewcontainer} {$previewcontainer}
EOD; EOD;

View File

@ -1,9 +1,7 @@
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action=""> <form id="add-form" role="form" data-toggle="validator" method="POST" action="">
{%addList%} {%addList%}
<div class="form-group layer-footer"> <div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label> <div class="pp_container text-center">
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button> <button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button> <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div> </div>

View File

@ -1,9 +1,7 @@
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action=""> <form id="edit-form" role="form" data-toggle="validator" method="POST" action="">
{%editList%} {%editList%}
<div class="form-group layer-footer"> <div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label> <div class="pp_container text-center">
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button> <button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button> <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div> </div>

View File

@ -1,5 +1,4 @@
<div class="radio" id="c-{%field%}">
<div class="radio">
{foreach name="{%fieldList%}" item="vo"} {foreach name="{%fieldList%}" item="vo"}
<label for="{%fieldName%}-{$key}"><input id="{%fieldName%}-{$key}" name="{%fieldName%}" type="radio" value="{$key}" {in name="key" value="{%selectedValue%}"}checked{/in} /> {$vo}</label> <label for="{%fieldName%}-{$key}"><input id="{%fieldName%}-{$key}" name="{%fieldName%}" type="radio" value="{$key}" {in name="key" value="{%selectedValue%}"}checked{/in} /> {$vo}</label>
{/foreach} {/foreach}

View File

@ -1,4 +1,3 @@
<select {%attrStr%}> <select {%attrStr%}>
{foreach name="{%fieldList%}" item="vo"} {foreach name="{%fieldList%}" item="vo"}
<option value="{$key}" {in name="key" value="{%selectedValue%}"}selected{/in}>{$vo}</option> <option value="{$key}" {in name="key" value="{%selectedValue%}"}selected{/in}>{$vo}</option>

View File

@ -114,9 +114,16 @@ html.ios-fix body {
table.table-template { table.table-template {
overflow: hidden; overflow: hidden;
} }
.sp_container .msg-box { .pp_container {
border: none;
margin: 0;
padding: 0;
position: relative;
vertical-align: middle;
}
.sp_container .msg-box,.pp_container .msg-box {
position: absolute; position: absolute;
right: 0; left: 0;
top: 0; top: 0;
} }
.toast-top-right-index { .toast-top-right-index {
@ -989,6 +996,40 @@ table.table-nowrap thead > tr > th {
.wipecache li a { .wipecache li a {
color: #444444 !important; color: #444444 !important;
} }
.col-md-1-5 {
width: 20% !important;
float: left;
}
.col-xs-1-5,.col-sm-1-5,.col-md-1-5,.col-lg-1-5 {
min-height: 1px;
padding-left: 15px;
padding-right: 15px;
position: relative;
}
@media (min-width: 768px) {
.col-sm-1-5 {
width: 20%;
float: left;
}
}
@media (min-width: 992px) {
.col-md-1-5 {
width: 20%;
float: left;
}
}
@media (min-width: 1200px) {
.col-lg-1-5 {
width: 20%;
float: left;
}
}
div.pre { div.pre {
display: block; display: block;
padding: 5px; padding: 5px;
@ -1003,6 +1044,11 @@ div.pre {
border-radius: 3px; border-radius: 3px;
text-align: left; text-align: left;
} }
#add-form .panel-body,#edit-form .panel-body{
padding-bottom:0;
}
/*修正开关关闭下的颜色值*/ /*修正开关关闭下的颜色值*/
.btn-switcher.disabled { .btn-switcher.disabled {
opacity: .6; opacity: .6;

File diff suppressed because one or more lines are too long

View File

@ -9290,8 +9290,9 @@ define('form',['jquery', 'bootstrap', 'upload', 'validator'], function ($, undef
validClass: 'has-success', validClass: 'has-success',
invalidClass: 'has-error', invalidClass: 'has-error',
bindClassTo: '.form-group', bindClassTo: '.form-group',
formClass: 'n-default n-bootstrap', formClass: 'n-yellow n-bootstrap',
msgClass: 'n-right', msgClass: 'n-top',
theme: 'yellow_top',
stopOnError: true, stopOnError: true,
display: function (elem) { display: function (elem) {
return $(elem).closest('.form-group').find(".control-label").text().replace(/\:/, ''); return $(elem).closest('.form-group').find(".control-label").text().replace(/\:/, '');

View File

@ -12,8 +12,9 @@ define(['jquery', 'bootstrap', 'upload', 'validator'], function ($, undefined, U
validClass: 'has-success', validClass: 'has-success',
invalidClass: 'has-error', invalidClass: 'has-error',
bindClassTo: '.form-group', bindClassTo: '.form-group',
formClass: 'n-default n-bootstrap', formClass: 'n-yellow n-bootstrap',
msgClass: 'n-right', msgClass: 'n-top',
theme: 'yellow_top',
stopOnError: true, stopOnError: true,
display: function (elem) { display: function (elem) {
return $(elem).closest('.form-group').find(".control-label").text().replace(/\:/, ''); return $(elem).closest('.form-group').find(".control-label").text().replace(/\:/, '');