# encoding: utf-8
from __future__ import absolute_import, unicode_literals
import random
import string
class FieldBase(object):
component_name = None
def __init__(self, **kwargs):
for k, v in kwargs.items():
if callable(v):
v = v()
setattr(self, k, v)
if getattr(kwargs, 'id', None) is None:
self.id = self.gen_id()
def gen_id(self):
return "%s-%s" % (self.component_name, random.sample(string.ascii_uppercase + string.digits, 8))
def get_dict(self):
assert self.component_name
return {'component_name': self.component_name, "props": self.get_data()}
def get_data(self):
ret = {}
for k in dir(self):
if k.startswith('_') or k == 'component_name':
continue
v = getattr(self, k, None)
if v is None or hasattr(v, '__call__'):
continue
if v is not None:
if isinstance(v, FieldBase):
v = v.get_data()
ret[k] = v
return ret
[文档]class TextField(FieldBase):
component_name = "TextField"
[文档] def __init__(self, label, required=True, placeholder='', **kwargs):
"""
:param label: 表单组件名称
:param required: 是否必填
:param placeholder: 输入提示
:param kwargs:
"""
super(TextField, self).__init__(required=required, placeholder=placeholder, label=label, **kwargs)
[文档]class TextareaField(FieldBase):
component_name = "TextareaField"
[文档] def __init__(self, label, required=True, placeholder='', **kwargs):
"""
:param label: 表单组件名称
:param required: 是否必填
:param placeholder: 输入提示
:param kwargs:
"""
super(TextareaField, self).__init__(required=required, placeholder=placeholder, label=label, **kwargs)
[文档]class MoneyField(FieldBase):
component_name = "MoneyField"
[文档] def __init__(self, label, required=True, placeholder='', not_upper='', **kwargs):
"""
:param label: 表单组件名称
:param required: 是否必填
:param placeholder: 输入提示
:param kwargs:
"""
super(MoneyField, self).__init__(
required=required, placeholder=placeholder, label=label, not_upper=not_upper, **kwargs
)
[文档]class NumberField(FieldBase):
component_name = "NumberField"
[文档] def __init__(self, label, required=True, placeholder='', unit='', **kwargs):
"""
:param label: 表单组件名称
:param required: 是否必填
:param placeholder: 输入提示
:param kwargs:
"""
super(NumberField, self).__init__(required=required, placeholder=placeholder, label=label, unit=unit, **kwargs)
[文档]class DDDateField(FieldBase):
component_name = "DDDateField"
[文档] def __init__(self, label, required=True, placeholder='', unit='', **kwargs):
"""
:param label: 表单组件名称
:param required: 是否必填
:param placeholder: 输入提示
:param kwargs:
"""
super(DDDateField, self).__init__(required=required, placeholder=placeholder, label=label, unit=unit, **kwargs)
[文档]class DDDateRangeField(FieldBase):
component_name = "DDDateRangeField"
[文档] def __init__(self, label, required=True, placeholder='', unit='', **kwargs):
"""
:param label: 表单组件名称
:param required: 是否必填
:param placeholder: 输入提示
:param kwargs:
"""
super(DDDateRangeField, self).__init__(
required=required, placeholder=placeholder, label=label, unit=unit, **kwargs
)