| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 | 
							- package ii
 
- import (
 
- 	"fmt"
 
- 	"strings"
 
- )
 
- const (
 
- 	formTextTemp = `			<div class="col-md-6" %s>
 
- 									<div class="row %s">
 
- 										<label for="%s" class="col-form-label col-sm-3">%s</label>
 
- 										<div class="col-sm-7 mb-3">
 
- 											<input type="%s" class="form-control %s" %s id="%s" value="%s" %s %s %s>
 
- 											%s%s%s
 
- 										</div>
 
- 										%s
 
- 									</div>
 
- 								</div>`
 
- 	formTextTempWithUnit = `<label for="%s" class="col-form-label col-sm-1">%s</label>`
 
- 	formSelectTempWith   = `		<div class="col-md-6" %s>
 
- 									<div class="row %s">
 
- 										<label for="%s" class="col-form-label col-sm-3">%s</label>
 
- 										<div class="col-sm-7 mb-3">
 
- 											<select class="form-control select2 lowCode" data-toggle="select2" id="%s"
 
- 													%s %s %s %s %s>
 
- 												%s
 
- 											</select>
 
- 											%s%s%s
 
- 										</div>
 
- 										%s
 
- 									</div>
 
- 								</div>`
 
- 	formTextareaTemp = `		<div class="col-md-6" %s>
 
- 									<div class="row %s">
 
- 										<label for="%s" class="col-form-label col-sm-3">%s</label>
 
- 										<div class="col-sm-7 mb-3">
 
- 											<textarea class="form-control" placeholder="" rows="3" id="%s" %s %s>%s</textarea>
 
- 											%s%s%s
 
- 										</div>
 
- 										%s
 
- 									</div>
 
- 								</div>`
 
- 	formTextTempDateOptions = `{"format":"%s","separator":" ~ ","applyLabel":"确定","cancelLabel":"取消","fromLabel":"从","toLabel":"至","customRangeLabel":"自定义","daysOfWeek":["日","一","二","三","四","五","六"],"monthNames": ["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"firstDay": 1}`
 
- )
 
- func (f Form) HiddenAttr() string {
 
- 	if f.Hidden {
 
- 		return "hidden"
 
- 	}
 
- 	return ""
 
- }
 
- func (f Form) DateCss() string {
 
- 	if f.Date != "" {
 
- 		return "v-dateRangePicker lowCode"
 
- 	}
 
- 	return ""
 
- }
 
- func (f Form) DateStyle() string {
 
- 	var (
 
- 		opt    string
 
- 		format = "YYYY-MM-DD"
 
- 	)
 
- 	switch f.Date {
 
- 	case "date":
 
- 		opt = `data-single-Date-Picker="true" `
 
- 	case "dateTime":
 
- 		opt = `data-single-Date-Picker="true" data-time-Picker="true" `
 
- 		format = "YYYY-MM-DD HH:mm"
 
- 	case "dateTimeSecond":
 
- 		opt = `data-single-Date-Picker="true" data-time-Picker="true" data-time-Picker-Seconds="true" `
 
- 		format = "YYYY-MM-DD HH:mm:ss"
 
- 	case "dateRange":
 
- 		opt = `data-single-Date-Picker="false" data-time-Picker="false" `
 
- 	case "dateTimeRange":
 
- 		opt = `data-single-Date-Picker="false" data-time-Picker="true" `
 
- 		format = "YYYY-MM-DD HH:mm"
 
- 	case "dateTimeRangeSecond":
 
- 		opt = `data-single-Date-Picker="false" data-time-Picker="true" data-time-Picker-Seconds="true" `
 
- 		format = "YYYY-MM-DD HH:mm:ss"
 
- 	default:
 
- 		return ""
 
- 	}
 
- 	return opt + fmt.Sprintf(`data-locale='%s'`, fmt.Sprintf(formTextTempDateOptions, format))
 
- }
 
- func (f Form) UnitCss() string {
 
- 	if f.Unit != "" {
 
- 		return "g-3"
 
- 	}
 
- 	return ""
 
- }
 
- func (f Form) UnitLabel(field *FieldInfo) string {
 
- 	if f.Unit != "" {
 
- 		return fmt.Sprintf(formTextTempWithUnit, field.Name, f.Unit)
 
- 	}
 
- 	return ""
 
- }
 
- func (f Form) Required(r bool) string {
 
- 	if r {
 
- 		return "required"
 
- 	}
 
- 	return ""
 
- }
 
- func (f Form) ReadDisable() string {
 
- 	if f.Disable {
 
- 		return "disabled"
 
- 	}
 
- 	if f.ReadOnly {
 
- 		return "readonly"
 
- 	}
 
- 	return ""
 
- }
 
- func (f Form) Limit(mode string, field *FieldInfo) string {
 
- 	switch mode {
 
- 	case "text":
 
- 		if f.Date != "" {
 
- 			return ""
 
- 		}
 
- 		return fmt.Sprintf(`minlength="%f" maxlength="%f"`, field.Minimum, field.Maximum)
 
- 	case "number":
 
- 		if field.Minimum == 0 && field.Maximum == 0 {
 
- 			return ""
 
- 		}
 
- 		step := func() string {
 
- 			if field.Decimal == 0 {
 
- 				return ""
 
- 			}
 
- 			var step string
 
- 			for i := 0; i < field.Decimal; i++ {
 
- 				step += "0"
 
- 			}
 
- 			return "0." + step
 
- 		}
 
- 		return fmt.Sprintf(`min="%f" max="%f" %s`, field.Minimum, field.Maximum, step())
 
- 	case "select":
 
- 		return fmt.Sprintf(`data-maximum-Selection-Length="%f"`, field.Maximum)
 
- 	default:
 
- 		return ""
 
- 	}
 
- }
 
- func (f Form) Value(field *FieldInfo) string {
 
- 	s, err := field.convertString(field.defaultValue)
 
- 	if err != nil {
 
- 		return err.Error()
 
- 	}
 
- 	return s
 
- }
 
- func (f Form) HelpCss() string {
 
- 	if f.Help != "" {
 
- 		return fmt.Sprintf(`<div class="form-text">%s</div>`, f.Help)
 
- 	}
 
- 	return ""
 
- }
 
- func (f Form) SelectAjax() string {
 
- 	if f.URL != "" {
 
- 		return fmt.Sprintf(`data-ajax-url="%s"`, f.URL)
 
- 	}
 
- 	return ""
 
- }
 
- func (f Form) SelectMulti() string {
 
- 	if f.Multiple {
 
- 		return `data-allow-clear="true" multiple`
 
- 	}
 
- 	return ""
 
- }
 
- func (f Form) SelectOption(field *FieldInfo) string {
 
- 	opt := strings.Builder{}
 
- 	if !field.Required {
 
- 		opt.WriteString(`<option></option>`)
 
- 	}
 
- 	sel := strings.Split(f.Selected, ",")
 
- 	for _, enum := range field.Enums {
 
- 		if _, ok := f.isSelected(sel, enum); ok {
 
- 			opt.WriteString(fmt.Sprintf(`<option value="%v" selected>%v</option>`, enum, enum))
 
- 		} else {
 
- 			opt.WriteString(fmt.Sprintf(`<option value="%v">%v</option>`, enum, enum))
 
- 		}
 
- 	}
 
- 	return opt.String()
 
- }
 
- func (f Form) isSelected(enums []string, v string) (int, bool) {
 
- 	for i, enum := range enums {
 
- 		if enum == v {
 
- 			return i, true
 
- 		}
 
- 	}
 
- 	return -1, false
 
- }
 
- func (f Form) ValidFeedbackCss() string {
 
- 	if f.ValidFeedback == "" {
 
- 		f.ValidFeedback = " "
 
- 	}
 
- 	return fmt.Sprintf(`<div class="valid-feedback">%s</div>`, f.ValidFeedback)
 
- }
 
- func (f Form) InValidFeedbackCss() string {
 
- 	if f.InvalidFeedback == "" {
 
- 		f.InvalidFeedback = " "
 
- 	}
 
- 	return fmt.Sprintf(`<div class="invalid-feedback">%s</div>`, f.InvalidFeedback)
 
- }
 
- func (f *FieldInfo) Former() string {
 
- 	switch f.Form.Mode {
 
- 	case "text", "number", "password":
 
- 		return fmt.Sprintf(formTextTemp,
 
- 			f.Form.HiddenAttr(),
 
- 			f.Form.UnitCss(),
 
- 			f.Name, f.Label, f.Form.Mode,
 
- 			f.Form.DateCss(),
 
- 			f.Form.DateStyle(),
 
- 			f.Name,
 
- 			f.Form.Value(f),
 
- 			f.Form.Limit(f.Form.Mode, f),
 
- 			f.Form.Required(f.Required),
 
- 			f.Form.ReadDisable(),
 
- 			f.Form.HelpCss(),
 
- 			f.Form.ValidFeedbackCss(),
 
- 			f.Form.InValidFeedbackCss(),
 
- 			f.Form.UnitLabel(f),
 
- 		)
 
- 	case "select":
 
- 		return fmt.Sprintf(formSelectTempWith,
 
- 			f.Form.HiddenAttr(),
 
- 			f.Form.UnitCss(),
 
- 			f.Name, f.Label, f.Name,
 
- 			f.Form.Limit(f.Form.Mode, f),
 
- 			f.Form.SelectAjax(),
 
- 			f.Form.Required(f.Required),
 
- 			f.Form.ReadDisable(),
 
- 			f.Form.SelectMulti(),
 
- 			f.Form.SelectOption(f),
 
- 			f.Form.HelpCss(),
 
- 			f.Form.ValidFeedbackCss(),
 
- 			f.Form.InValidFeedbackCss(),
 
- 			f.Form.UnitLabel(f),
 
- 		)
 
- 	case "textarea":
 
- 		return fmt.Sprintf(formTextareaTemp,
 
- 			f.Form.HiddenAttr(),
 
- 			f.Form.UnitCss(),
 
- 			f.Name, f.Label, f.Name,
 
- 			f.Form.Required(f.Required),
 
- 			f.Form.ReadDisable(),
 
- 			f.Form.Value(f),
 
- 			f.Form.HelpCss(),
 
- 			f.Form.ValidFeedbackCss(),
 
- 			f.Form.InValidFeedbackCss(),
 
- 			f.Form.UnitLabel(f),
 
- 		)
 
- 	default:
 
- 		return ""
 
- 	}
 
- }
 
 
  |