package cn.axzo.workflow.common.model.request.form.definition;


import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import java.util.List;
import java.util.Map;

/**
 * 表单定义中的字段相关属性入参模型
 * <p>
 * 本模型不支持变更增加属性，只能放入 params 中
 *
 * @author wangli
 * @since 2023/7/20 10:39
 */
@ApiModel("表单定义中的字段相关属性入参模型")
@Data
public class FormFieldDTO {

    /**
     * 字段类型, 如果是分组:FormContainer,其他表单组件:FormField
     */
    @ApiModelProperty(value = "表单字段类型")
    @NotBlank(message = "字段类型不能为空")
    private String fieldType = "FormField";

    /**
     * 前端组件类型
     * <p>
     * { label: "文本", value: "input" },
     * { label: "多行文本", value: "textarea" },
     * { label: "附件", value: "upload" },
     * { label: "图片", value: "image" },
     * { label: "自定义组件", value: "customComponent" },
     * { label: "任务单", value: "taskOrder" },
     * { label: "整改单", value: "rectifyOrder" },
     * { label: "变洽签单", value: "changeSignatureOrder" },
     * { label: "通讯录", value: "contacts" },
     * { label: "金额", value: "amount" },
     */
    @ApiModelProperty(value = "前端的组件类型")
    private String type;

    /**
     * 表单字段组件 ID
     */
    @ApiModelProperty(value = "表单字段组件ID", example = "account")
    @NotBlank(message = "表单字段组件 ID 不能为空")
    private String id;

    /**
     * 表单字段名称
     */
    @ApiModelProperty(value = "表单字段名称", example = "账号")
    private String name;

    /**
     * 部分组件是多值，比如日期区间，多选, 多附件
     */
    @ApiModelProperty(value = "表单字段默认值", example = "account")
    private Object value;

    /**
     * 表单占位提示
     */
    @ApiModelProperty(value = "表单字段占位提示")
    private String placeholder;

    /**
     * 表单的扩展属性,里面会包含required/editable/readonly/hidden/defaultValue 的 key
     */
    @ApiModelProperty(value = "该表单字段的其他扩展属性,期望 JSON 格式")
    private Map<String, Object> params;

    /**
     * 当 fieldType=FormContainer 时,这里的代表内部的集合
     */
    @ApiModelProperty(value = "分组内的字段,配合 fieldType=FormContainer 使用")
    private List<List<FormFieldDTO>> fields;
}


