diff --git a/.gitignore b/.gitignore index fb8818a5a07beb5be1c6b17181bd4d5cea077f94..194f5db9988e6c8a027cbe9c3bad64171d44f96a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,5 @@ composer.lock *.css.map !.gitkeep .env +/.svn .vscode diff --git a/application/admin/command/Crud.php b/application/admin/command/Crud.php index db3b2ce223df62d815e0155f4db8cdc2f1ffc87c..67adbbce3261f75f639085bae2a5d3e791ce128b 100755 --- a/application/admin/command/Crud.php +++ b/application/admin/command/Crud.php @@ -115,6 +115,11 @@ class Crud extends Command */ protected $editorClass = 'editor'; + /** + * langList的key最长字节数 + */ + protected $fieldMaxLen = 0; + protected function configure() { $this @@ -324,8 +329,8 @@ class Crud extends Command $controllerUrl = strtolower(implode('/', $controllerArr)); $controllerBaseName = strtolower(implode(DS, $controllerArr)); - //视图文件 - $viewDir = $adminPath . 'view' . DS . $controllerBaseName . DS; + //视图文件 -- 如果控制器名字为驼峰形式,目录名需要转为下划线 + $viewDir = $adminPath . 'view' . DS . strtolower(preg_replace('/(?<=[a-z])([A-Z])/', '_$1', implode(DS, $controllerArr))) . DS; //最终将生成的文件路径 $javascriptFile = ROOT_PATH . 'public' . DS . 'assets' . DS . 'js' . DS . 'backend' . DS . $controllerBaseName . '.js'; @@ -482,6 +487,7 @@ class Crud extends Command //循环所有字段,开始构造视图的HTML和JS信息 foreach ($columnList as $k => $v) { $field = $v['COLUMN_NAME']; + $langField = mb_ucfirst($field); $itemArr = []; // 这里构建Enum和Set类型的列表数据 if (in_array($v['DATA_TYPE'], ['enum', 'set', 'tinyint'])) { @@ -539,6 +545,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}"]); } else if ($inputType == 'datetime') { $cssClassArr[] = 'datetimepicker'; + $attrArr['placeholder'] = "{:__('Please select')}{:__('{$langField}')}"; $attrArr['class'] = implode(' ', $cssClassArr); $format = "YYYY-MM-DD HH:mm:ss"; $phpFormat = "Y-m-d H:i:s"; @@ -594,6 +601,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}"]); } else if ($inputType == 'textarea') { $cssClassArr[] = $this->isMatchSuffix($field, $this->editorSuffix) ? $this->editorClass : ''; + $attrArr['placeholder'] = "{:__('Please input')}{:__('{$langField}')}"; $attrArr['class'] = implode(' ', $cssClassArr); $attrArr['rows'] = 5; $formAddElement = Form::textarea($fieldName, $defaultValue, $attrArr); @@ -614,17 +622,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 : '']); $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}"]); } else if ($inputType == 'citypicker') { + $attrArr['placeholder'] = "{:__('Please select')}{:__('{$langField}')}"; $attrArr['class'] = implode(' ', $cssClassArr); $attrArr['data-toggle'] = "city-picker"; $formAddElement = sprintf("
%s
", Form::input('text', $fieldName, $defaultValue, $attrArr)); $formEditElement = sprintf("
%s
", Form::input('text', $fieldName, $editValue, $attrArr)); } else { + $attrArr['placeholder'] = "{:__('Please input')}{:__('{$langField}')}"; $search = $replace = ''; //特殊字段为关联搜索 if ($this->isMatchSuffix($field, $this->selectpageSuffix)) { $inputType = 'text'; $defaultValue = ''; $attrArr['data-rule'] = 'required'; + $attrArr['placeholder'] = "{:__('Please select')}{:__('{$langField}')}"; $cssClassArr[] = 'selectpage'; $selectpageController = str_replace('_', '/', substr($field, 0, strripos($field, '_'))); $attrArr['data-source'] = $selectpageController . "/index"; @@ -729,9 +740,19 @@ class Crud extends Command $editList = implode("\n", array_filter($editList)); $javascriptList = implode(",\n", array_filter($javascriptList)); $langList = implode(",\n", array_filter($langList)); + //数组等号对齐 + $langList = array_filter(explode(",\n", $langList . ",\n")); + foreach ($langList as &$line) { + if (preg_match("/^\s+'([^']+)'\s*=>\s*'([^']+)'\s*/is", $line, $matches)) { + $line = " '{$matches[1]}'" . str_pad('=>', ($this->fieldMaxLen - strlen($matches[1]) + 3), ' ', STR_PAD_LEFT) . " '{$matches[2]}'"; + } + } + unset($line); + $langList = implode(",\n", array_filter($langList)). ","; //表注释 $tableComment = $modelTableInfo['Comment']; + $tableCNName = mb_substr($tableComment, -1) == '表' ? mb_substr($tableComment, 0, -1) : $tableComment; $tableComment = mb_substr($tableComment, -1) == '表' ? mb_substr($tableComment, 0, -1) . '管理' : $tableComment; $modelInit = ''; @@ -753,6 +774,7 @@ class Crud extends Command 'modelTableTypeName' => $modelTableTypeName, 'validateName' => $validateName, 'tableComment' => $tableComment, + 'tableCNName' => $tableCNName, 'iconName' => $iconName, 'pk' => $priKey, 'order' => $order, @@ -1071,6 +1093,7 @@ EOD; { if ($content || !Lang::has($field)) { $itemArr = []; + $this->fieldMaxLen = strlen($field) > $this->fieldMaxLen ? strlen($field) : $this->fieldMaxLen; $content = str_replace(',', ',', $content); if (stripos($content, ':') !== false && stripos($content, ',') && stripos($content, '=') !== false) { list($fieldLang, $item) = explode(':', $content); @@ -1080,6 +1103,7 @@ EOD; if (count($valArr) == 2) { list($key, $value) = $valArr; $itemArr[$field . ' ' . $key] = $value; + $this->fieldMaxLen = strlen($field . ' ' . $key) > $this->fieldMaxLen ? strlen($field . ' ' . $key) : $this->fieldMaxLen; } } } else { @@ -1087,7 +1111,7 @@ EOD; } $resultArr = []; foreach ($itemArr as $k => $v) { - $resultArr[] = " '" . mb_ucfirst($k) . "' => '{$v}'"; + $resultArr[] = " '" . mb_ucfirst($k) . "' => '{$v}'"; } return implode(",\n", $resultArr); } else { @@ -1128,7 +1152,7 @@ EOD; } $stringArr[] = "'" . $k . "' => " . ($is_var ? $v : "'{$v}'"); } - return implode(",", $stringArr); + return implode(", ", $stringArr); } protected function getItemArray($item, $field, $comment) @@ -1242,8 +1266,8 @@ EOD; $langField = mb_ucfirst($field); return << - -
+ +
{$content}
@@ -1269,11 +1293,11 @@ EOD; return << {$content} +
- {$previewcontainer} EOD; diff --git a/application/admin/command/Crud/stubs/add.stub b/application/admin/command/Crud/stubs/add.stub index 68d6de24138cf9d2f3b1aea801b6f07f6e54201b..33676516e220b9d2f1e139cdae91f351d4f562b4 100644 --- a/application/admin/command/Crud/stubs/add.stub +++ b/application/admin/command/Crud/stubs/add.stub @@ -1,11 +1,9 @@ -
- + {%addList%}