356 lines
10 KiB
PHP

<?php
/**
* @author yupoxiong<i@yufuping.com>
*/
namespace generate\field;
use generate\traits\Tools;
class Field
{
use Tools;
//当前字段可用规则
public static $rules = [
//非空
'required' => '非空',
'wechat' => '微信号',
'qq' => 'QQ号',
'account' => '账号',
'cn_name' => '中文姓名',
'car_number' => '车牌号',
//自定义正则
'regular' => '自定义正则'
];
//列表名字
public static $listNameHtml = <<<EOF
<th>[FORM_NAME]</th>\n
EOF;
//列表字段
public static $listFieldHtml = <<<EOF
<td>{\$item.[FIELD_NAME]}</td>\n
EOF;
//列表关联筛选
public static $listSearchRelationHtml = <<<EOF
<div class="form-group">
<select name="[FIELD_NAME]" id="[FIELD_NAME]" class="form-control input-sm index-search">
<option value="">[FORM_NAME]</option>
{foreach name='[FIELD_NAME1]_list' id='item'}
<option value="{\$item.id}" {if isset($[FIELD_NAME]) && ''!==$[FIELD_NAME] && $[FIELD_NAME]==\$item.id}selected{/if}>{\$item.[RELATION_SHOW]}</option>
{/foreach}
</select>
</div>
<script>
$(function () {
$('#[FIELD_NAME]').select2({
width:'100%'
});
});
</script>\n
EOF;
//列表自定义筛选数据
public static $listSearchSelectHtml = <<<EOF
<div class="form-group">
<select name="[FIELD_NAME]" id="[FIELD_NAME]" class="form-control input-sm index-search">
<option value="">[FORM_NAME]</option>
{foreach \$[FIELD_LIST] as \$key=>\$value}
<option value="{\$key}" {if isset($[FIELD_NAME]) && ''!==$[FIELD_NAME] && $[FIELD_NAME]==\$key}selected{/if}>{\$value}</option>
{/foreach}
</select>
</div>
<script>
$(function () {
$('#[FIELD_NAME]').select2({
width:'100%'
});
});
</script>\n
EOF;
//列表日期筛选
public static $listSearchDate = <<<EOF
<div class="form-group">
<input value="{\$[FIELD_NAME]|default=''}" readonly name="[FIELD_NAME]" id="[FIELD_NAME]" class="form-control input-sm indexSearchDateRange" placeholder="[FORM_NAME]">
</div>
<script>
laydate.render({
elem: '#[FIELD_NAME]',
range: true,
});
</script>\n
EOF;
//列表日期时间筛选
public static $listSearchDatatime = <<<EOF
<div class="form-group">
<input value="{\$[FIELD_NAME]|default=''}" readonly name="[FIELD_NAME]" id="[FIELD_NAME]" class="form-control input-sm indexSearchDatetimeRange" placeholder="[FORM_NAME]">
</div>
<script>
laydate.render({
elem: '#[FIELD_NAME]',
type: 'datetime',
range: true,
});
</script>\n
EOF;
//图片字段显示
public static $listImgHtml = <<<EOF
<td><img class="dataListImg" src="{\$item.[FIELD_NAME]}"></td>\n
EOF;
public static $listMultiImgHtml = <<<EOF
<td class="dataListMultiImg" id="[FIELD_NAME]ImgViewer{\$data_key}">
{foreach name='item.[FIELD_NAME]' id='item_[FIELD_NAME]'}
<img class="dataListImg" data-img="{\$item_[FIELD_NAME]}" src="{\$item_[FIELD_NAME]}">
{/foreach}
</td>
<script>
$(function () {
$('#[FIELD_NAME]ImgViewer{\$data_key}').viewer({
url:'data-img',
});
});
</script>\n
EOF;
public static $listMultiFileHtml = <<<EOF
<td class="dataListMultiFile">
{foreach name='item.[FIELD_NAME]' id='item_[FIELD_NAME]'}
<a target="_blank" href="{\$item_[FIELD_NAME]}">查看文件</a>
{/foreach}
</td>
EOF;
//status字段获取器为switch的时候自动显示为field_name_text
public static $listSwitchHtml = <<<EOF
<td>{\$item.[FIELD_NAME]_text}</td>\n
EOF;
//验证器场景
public static $validateSceneCode =
<<<EOF
'add' => [[RULE_FIELD]],
'edit' => [[RULE_FIELD]],\n
EOF;
//获取选择的字段和字段对应的验证optionDOM代码
public function getFormSelectOption($field_type)
{
$result = ['text', ''];
$field_info = $this->getFieldInfo($file_name = '', $field_type);
switch ($field_info['type']) {
case 'tinyint':
$result[0] = 'switch';
break;
case 'smallint':
$result[0] = 'number';
break;
case 'mediumint':
$result[0] = 'number';
break;
case 'int':
$result[0] = 'number';
break;
case 'bigint':
$result[0] = 'number';
break;
case 'float':
$result[0] = 'number';
break;
case 'double':
$result[0] = 'number';
break;
case 'decimal':
$result[0] = 'number';
break;
case 'char':
$result[0] = 'text';
break;
case 'varchar':
$result[0] = 'text';
break;
case 'tinytext':
$result[0] = 'editor';
break;
case 'tinyblob':
$result[0] = 'editor';
break;
case 'text':
$result[0] = 'editor';
break;
case 'blob':
$result[0] = 'editor';
break;
case 'longtext':
$result[0] = 'editor';
break;
case 'longblob':
$result[0] = 'editor';
break;
case 'date':
$result[0] = 'date';
break;
case 'datetime':
$result[0] = 'datetime';
break;
case 'timestamp':
$result[0] = 'datetime';
break;
case 'time':
$result[0] = 'time';
break;
case 'year':
$result[0] = 'year';
break;
default:
$result[0] = 'text';
break;
}
$result[1] = $this->getValidateOption($result[0], $field_info['length']);
return $result;
}
//根据表单类型和长度返回相应的验证
public function getValidateOption($type, $length = '')
{
switch ($type) {
case 'text':
$data = Text::rule($length);
break;
case 'number':
$data = Number::rule($length);
break;
case 'password':
$data = Password::rule($length);
break;
case 'mobile':
$data = Mobile::rule($length);
break;
case 'email':
$data = Email::rule($length);
break;
case 'id_card':
$data = IdCard::rule($length);
break;
case 'url':
$data = Url::rule($length);
break;
case 'ip':
$data = Ip::rule($length);
break;
case 'texterea':
$data = Textarea::rule($length);
break;
case 'checkbox':
$data = Checkbox::rule($length);
break;
case 'switch':
$data = SwitchField::rule($length);
break;
case 'radio':
$data = Radio::rule($length);
break;
case 'select':
$data = Select::rule($length);
break;
case 'multi_select':
$data = MultiSelect::rule($length);
break;
case 'image':
$data = Image::rule($length);
break;
case 'multi_image':
$data = MultiImage::rule($length);
break;
case 'file':
$data = File::rule($length);
break;
case 'multi_file':
$data = MultiFile::rule($length);
break;
case 'date':
$data = Date::rule($length);
break;
case 'date_range':
$data = DateRange::rule($length);
break;
case 'datetime':
$data = Datetime::rule($length);
break;
case 'datetime_range':
$data = DatetimeRange::rule($length);
break;
case 'year':
$data = Year::rule($length);
break;
case 'year_range':
$data = YearRange::rule($length);
break;
case 'year_month':
$data = YearMonth::rule($length);
break;
case 'year_month_range':
$data = YearMonthRange::rule($length);
break;
case 'map':
$data = Map::rule($length);
break;
case 'color':
$data = Color::rule($length);
break;
case 'icon':
$data = Icon::rule($length);
break;
case 'editor':
$data = Editor::rule($length);
break;
default:
$data = Text::rule($length);
break;
}
return $data;
}
//规则
public static function rule($length = '')
{
$html = '';
$rules = static::$rules;
foreach ($rules as $key => $value) {
$key = str_replace('[LENGTH]', $length, $key);
$html .= '<option value="' . $key . '">' . $value . '</option>';
}
return $html;
}
public static function createHtmlRule($rule)
{
$html = '';
if (key_exists($rule, self::$rules)) {
$html .= '';
}
}
}