| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- <?php
- namespace zin;
- require_once dirname(__DIR__) . DS . 'formgroup' . DS . 'v1.php';
- require_once dirname(__DIR__) . DS . 'inputgroup' . DS . 'v1.php';
- require_once dirname(__DIR__) . DS . 'picker' . DS . 'v1.php';
- require_once dirname(__DIR__) . DS . 'input' . DS . 'v1.php';
- class sqlBuilderControl extends wg
- {
- /**
- * @var mixed[]
- */
- protected static $defineProps = array(
- "type?: string", // 控件类型。
- "class?: string",
- "name?: string", // 控件名。
- "label?: string", // 控件标签。
- "items?: array", // 控件下拉选项,仅type=picker时有效。
- "value?: string", // 控件值。
- 'required?: bool=false', // 控件是否可清空,仅type=picker时有效。
- 'multiple?: bool=false', // 控件是否多选,仅type=picker时有效。
- "placeholder?: string", // 提示文本。
- 'labelWidth?: string="80px"', // 标签宽度。
- 'labelAlign?: string="center"', // 标签对齐方式。
- 'width?: string="60"', // 控件宽度。
- "suffix?: string", // 后缀内容。
- 'onChange?: function',
- "error?: bool=false", // 是否存在错误。
- 'errorText?: string' // 错误提示。
- );
- public static function getPageCSS()
- {
- return file_get_contents(__DIR__ . DS . 'css' . DS . 'v1.css');
- }
- /**
- * 构建控件。
- * Build control.
- *
- * @access protected
- * @return node|null
- */
- protected function buildControl()
- {
- list($type, $name, $items, $value, $required, $multiple, $placeholder, $onChange, $error) = $this->prop(array('type', 'name', 'items', 'value', 'required', 'multiple', 'placeholder', 'onChange', 'error'));
- if($type == 'picker')
- {
- if(is_array($items))
- {
- if(is_string($value) && !isset($items[$value])) $value = null;
- if(is_array($value))
- {
- foreach($value as $currentIndex => $currentValue)
- {
- if(!isset($items[$currentValue])) unset($value[$currentIndex]);
- }
- }
- }
- return picker
- (
- setID("builderPicker_$name"),
- setClass('builder-picker', array('has-error' => $error)),
- set::name($name),
- set::items($items),
- set::placeholder($placeholder),
- set::disabled(empty($items)),
- set::required($required),
- set::multiple($multiple),
- on::change()->do($onChange),
- !empty($value) ? set::value($value) : null
- );
- }
- if($type == 'input') return input
- (
- setID("builderInput_$name"),
- setClass('builder-input', array('has-error' => $error)),
- set::name($name),
- set::placeholder($placeholder),
- on::change()->do($onChange),
- set::value($value)
- );
- if($type == 'date') return datePicker
- (
- setID("builderDate$name"),
- setClass('builder-date', array('has-error' => $error)),
- set::name($name),
- set::placeholder($placeholder),
- on::change()->do($onChange),
- set::value($value)
- );
- if($type == 'datetime') return datetimePicker
- (
- setID("builderDatetime$name"),
- setClass('builder-datetime', array('has-error' => $error)),
- set::name($name),
- set::placeholder($placeholder),
- on::change()->do($onChange),
- set::value($value)
- );
- return null;
- }
- protected function build()
- {
- global $lang;
- list($class, $label, $labelWidth, $labelAlign, $width, $suffix, $error, $errorText) = $this->prop(array('class', 'label', 'labelWidth', 'labelAlign', 'width', 'suffix', 'error', 'errorText'));
- $padding = $labelAlign == 'center' ? 1 : 3;
- return formGroup
- (
- setClass($class),
- set::label($label),
- set::labelWidth($labelWidth),
- set::labelClass('bg-gray-100 ring ring-border-strong', "justify-$labelAlign-important px-{$padding}-important" ),
- set::width($width),
- inputGroup
- (
- setClass('flex col'),
- div
- (
- setClass('flex row'),
- $this->buildControl(),
- !empty($suffix) ? label($suffix) : null
- ),
- span
- (
- setClass('text-danger', array('hidden' => !$error)),
- empty($errorText) ? $lang->bi->emptyError : $errorText
- )
- )
- );
- }
- }
|