import { FormSchema } from '/@/components/Form';
import { defHttp } from '/@/utils/http/axios';

export const schemas: FormSchema[] = [
  {
    label: '验证码',
    field: 'code',
    component: 'InputCountDown',
    componentProps: {
      //'default': 默认, 'large': 最大, 'small': 最小
      size:'default',
      //倒计时
      count: 120,
    },
  },
  {
    label: 'Api下拉选择',
    field: 'apiSelect',
    component: 'ApiSelect',
    componentProps: {
      //multiple: 多选；不填写为单选
      mode: 'multiple',
      //请求api,返回结果{ result: { records:[{'id':'1',name:'scott'},{'id':'2',name:'小张'}] }}
      api: () => defHttp.get({ url: '/test/jeecgDemo/list' }),
      //数值转成String
      numberToString: false,
      //标题字段
      labelField: 'name',
      //值字段
      valueField: 'id',
      //请求参数
      params: {},
      //返回结果字段
      resultField: 'records',
    },
  },
  {
    label: 'Api树选择',
    field: 'apiSelect',
    component: 'ApiTreeSelect',
    componentProps: {
      /* 请求api,返回结果
         { result: { list: [{ title:'选项0',value:'0',key:'0',
           children: [ {"title": "选项0-0","value": "0-0","key": "0-0"},...]
           }, ...]
         }} */
      api: () => defHttp.get({ url: '/mock/tree/getDemoOptions' }),
      //请求参数
      params: {},
      //返回结果字段
      resultField: 'list',
    },
  },
  {
    label: '校验密码强度',
    field: 'pwd',
    component: 'StrengthMeter',
    componentProps: {
      //是否显示密码文本框
      showInput: true,
      //是否禁用
      disabled: false,
    },
  },
  {
    label: '省市县联动',
    field: 'province',
    component: 'JAreaLinkage',
    componentProps: {
      //是否显示区县，默认true,否则只显示省
      showArea: true,
      //是否是全部文本，默认false
      showAll: true,
    },
  },
  {
    label: '岗位选择',
    field: 'post',
    component: 'JSelectPosition',
    componentProps: {
      //是否右侧显示选中列表
      showSelected: true,
      //最大选择数量
      maxSelectCount: 1,
      //岗位标题
      modalTitle: '岗位',
    },
  },
  {
    label: '角色选择',
    field: 'role',
    component: 'JSelectRole',
    componentProps: {
      //请求参数 如params:{"code":"001"}
      params: {},
      //是否单选,默认false
      isRadioSelection: true,
      //角色标题
      modalTitle: '角色',
    },
  },
  {
    label: '用户选择',
    field: 'user',
    component: 'JSelectUser',
    componentProps: {
      //取值字段配置,一般为主键字段
      rowKey: 'username',
      //显示字段配置
      labelKey: 'realname',
      //是否显示选择按钮
      showButton: false,
      //用户标题
      modalTitle: '用户',
    },
  },
  {
    label: '图片上传',
    field: 'uploadImage',
    component: 'JImageUpload',
    componentProps: {
      //按钮显示文字
      text:'图片上传',
      //支持两种基本样式picture和picture-card
      listType:'picture-card',
      //用于控制文件上传的业务路径,默认temp
      bizPath:'temp',
      //是否禁用
      disabled:false,
      //最大上传数量
      fileMax:1,
    },
  },
  {
    label: '字典标签',
    field: 'dictTags',
    component: 'JDictSelectTag',
    componentProps: {
      //字典code配置，比如通过性别字典编码：sex，也可以使用demo,name,id 表名,名称,值的方式
      dictCode:'sex',
      //支持radio(单选按钮)、radioButton(单选按钮 btn风格)、select(下拉框)
      type:'radioButton'
    },
  },
  {
    label: '部门选择',
    field: 'dept',
    component: 'JSelectDept',
    componentProps: {
      //是否开启异步加载
      sync: false,
      //是否显示复选框
      checkable: true,
      //是否显示选择按钮
      showButton: false,
      //父子节点选中状态不再关联
      checkStrictly: true,
      //选择框标题
      modalTitle: '部门选择',
    },
  },
  {
    label: '省市县级联动',
    field: 'provinceArea',
    component: 'JAreaSelect',
    componentProps: {
      //级别 1 只显示省 2 省市 3 省市区
      level:3
    },
  },
  {
    label: '富文本',
    field: 'editor',
    component: 'JEditor',
    componentProps: {
      //是否禁用
      disabled: false
    },
  },
  {
    label: 'markdown',
    field: 'markdown',
    component: 'JMarkdownEditor',
    componentProps: {
      //是否禁用
      disabled: false
    },
  },
  {
    label: '可输入下拉框',
    field: 'inputSelect',
    component: 'JSelectInput',
    componentProps: {
      options: [
        { label: 'Default', value: 'default' },
        { label: 'IFrame', value: 'iframe' },
      ],
      //是否为搜索模式
      showSearch: true,
      //是否禁用
      disabled: false
    },
  },
  {
    label: '代码编辑器组件',
    field: 'jCode',
    component: 'JCodeEditor',
    componentProps: {
      //高度，默认auto
      height:'150px',
      //是否禁用
      disabled:false,
      //是否全屏
      fullScreen:false,
      //全屏之后的坐标
      zIndex: 999,
      //代码主题，目前只支持idea,可在组件自行扩展
      theme:'idea',
      //代码提示
      keywords:['console'],
      //语言如（javascript,vue,markdown）可在组件自行扩展
      language:'javascript'
    },
  },
  {
    label: '分类字典树',
    field: 'dictTree',
    component: 'JCategorySelect',
    componentProps: {
      //占位内容
      placeholder:'请选择分类字典树',
      //查询条件，如“{'name':'笔记本'}”
      condition:"",
      //是否多选
      multiple: false,
      //起始选择code，见配置的分类字典的类型编码
      pcode: 'A04',
      //父级id
      pid:'',
      //返回key
      back:'id',
    },
  },
  {
    label: '下拉多选',
    field: 'selectMultiple',
    component: 'JSelectMultiple',
    componentProps: {
      //字典code配置，比如通过性别字典编码：sex，也可以使用demo,name,id 表名,名称,值的方式
      dictCode:'company_rank',
      //是否只读
      readOnly:false,
    },
  },
  {
    label: 'popup',
    field: 'popup',
    component: 'JPopup',
    componentProps: ({ formActionType }) => {
      const {setFieldsValue} = formActionType;
      return{
        setFieldsValue:setFieldsValue,
        //online报表编码
        code:"demo",
        //是否为多选
        multi:false,
        //字段配置
        fieldConfig: [
          { source: 'name', target: 'popup' },
        ],
      }
    },
  },
  {
    label: '开关自定义',
    field: 'switch',
    component: 'JSwitch',
    componentProps:{
      //取值 options
      options:['Y','N'],
      //文本option
      labelOptions:['是', '否'],
      //是否启用下拉
      query: false,
      //是否禁用
      disabled: false,
    },
  },
  {
    label: '定时表达式选择',
    field: 'timing',
    component: 'JEasyCron',
    componentProps:{
      //是否隐藏参数秒和年设置，如果隐藏，那么参数秒和年将会全部忽略掉。
      hideSecond: false,
      //是否隐藏参数年设置，如果隐藏，那么参数年将会全部忽略掉
      hideYear: false,
      //是否禁用
      disabled: false,
      //获取预览执行时间列表的函数，格式为：remote (cron值, time时间戳, cb回调函数)
      remote:(cron,time,cb)=>{}
    },
  },
  {
    label: '分类字典树',
    field: 'treeDict',
    component: 'JTreeDict',
    componentProps:{
      //指定当前组件需要存储的字段 可选: id(主键)和code(编码)
      field:'id',
      //是否为异步
      async: true,
      //是否禁用
      disabled: false,
      //指定一个节点的编码,加载该节点下的所有字典数据,若不指定，默认加载所有数据
      parentCode:'A04'
    },
  },
  {
    label: '多行输入窗口',
    field: 'inputPop',
    component: 'JInputPop',
    componentProps:{
      //标题
      title:'多行输入窗口',
      //弹窗显示位置
      position:'bottom',
    },
  },
  {
    label: '多选',
    field: 'multipleChoice',
    component: 'JCheckbox',
    componentProps:{
      //字典code配置，比如通过职位字典编码：company_rank，也可以使用demo,name,id 表名,名称,值的方式
      dictCode:'company_rank',
      //是否禁用
      disabled: false,
      //没有字典code可以使用option来定义
      // options:[
      //   {label:'CE0',value:'1'}
      // ]
    },
  },
  {
    label: '下拉树选择',
    field: 'treeCusSelect',
    component: 'JTreeSelect',
    componentProps: {
      //字典code配置，比如通过性别字典编码：sex，也可以使用sys_permission,name,id 表名,名称,值的方式
      dict: 'sys_permission,name,id',
      //父级id字段
      pidField: 'parent_id',
    },
  },
  {
    label: '根据部门选择用户组件',
    field: 'userByDept',
    component: 'JSelectUserByDept',
    componentProps: {
      //是否显示选择按钮
      showButton: true,
      //选择框标题
      modalTitle: '部门用户选择'
    },
  },
  {
    label: '文件上传',
    field: 'uploadFile',
    component: 'JUpload',
    componentProps: {
      //是否显示选择按钮
      text: '文件上传',
      //最大上传数
      maxCount: 2,
      //是否显示下载按钮
      download: true,
    },
  },
  {
    label: '字典表搜索',
    field: 'dictSearchSelect',
    component: 'JSearchSelect',
    componentProps: {
      //字典code配置，通过 demo,name,id 表名,名称,值的方式
      dict: 'demo,name,id',
      //是否异步加载
      async: true,
      //当async设置为true时有效，表示异步查询时，每次获取数据的数量，默认10
      pageSize:3
    },
  },
  {
    label: '动态创建input框',
    field: 'jAddInput',
    component: 'JAddInput',
    componentProps: {
      //自定义超过多少行才会显示删除按钮，默认为1
      min:1
    },
  },
  {
    label: '用户选择组件',
    field: 'userCusSelect',
    component: 'UserSelect',
    componentProps: {
      //是否多选
      multi: true,
      //从用户表中选择一列，其值作为该控件的存储值，默认id列
      store: 'id',
      //是否排除我自己(当前登录用户)
      izExcludeMy: false,
      //是否禁用
      disabled: false,
    },
  },  
  {
    label: '选择角色组件',
    field: 'roleSelect',
    component: 'RoleSelect',
    componentProps: {
      //最大选择数量  
      maxSelectCount: 4,
      //是否单选
      multi: true
    },
  },  
  {
    label: '数值范围输入框',
    field: 'rangeNumber',
    component: 'JRangeNumber',
  }, 
  {
    label: '远程Api单选框组',
    field: 'apiRadioGroup',
    component: 'ApiRadioGroup',
    componentProps:{
      //请求接口返回结果{ result:{ list: [ name: '选项0',id: '1' ] }}
      api:()=> defHttp.get({ url: '/mock/select/getDemoOptions' }),
      //请求参数
      params:{},
      //是否为按钮风格类型，默认false
      isBtn: false,
      //返回集合名称
      resultField: 'list',
      //标题字段名称
      labelField: 'name',
      //值字段名称
      valueField: 'id',
    }
  },
];
