import { BasicColumn, FormSchema, render, JVxeTypes, JVxeColumn } from '@jdlinker/ui';
import { listSimpleMenus } from '@jdlinker/func';

export const columns: BasicColumn[] = [
  {
    title: '表类型',
    dataIndex: 'tableType',
    width: 120,
    customRender: ({ text }) => {
      return render.renderDict(text, 'table_type');
    }
  },
  {
    title: '表名',
    dataIndex: 'tableName',
    width: 150
  },
  {
    title: '表描述',
    dataIndex: 'tableTxt',
    width: 200
  },
  {
    title: '版本',
    dataIndex: 'tableVersion',
    width: 80
  },
  {
    title: '同步状态',
    dataIndex: 'isDbSynch',
    width: 80,
    sorter: true,
    customRender: ({ record }) => {
      const color = record.isDbSynch == 'Y' ? 'green' : 'red';
      const text = record.isDbSynch ? (record.isDbSynch == 'Y' ? '已同步' : '未同步') : '';
      return render.renderTag(text, color);
    }
  },
  {
    title: '创建时间',
    width: 150,
    dataIndex: 'createTime'
  }
];

export const searchFormSchema: FormSchema[] = [
  {
    label: '表名',
    field: 'tableName',
    component: 'Input',
    colProps: { span: 6 }
  },
  {
    label: '表类型',
    field: 'tableType',
    component: 'JDictSelectTag',
    componentProps: {
      dictCode: 'table_type',
      placeholder: '请选择表类型',
      stringToNumber: true
    },
    colProps: { span: 6 }
  }
];

export const formSchema: FormSchema[] = [
  {
    field: 'id',
    label: '',
    component: 'Input',
    show: false
  },
  {
    label: '表名称',
    field: 'tableName',
    required: true,
    component: 'Input',
    colProps: {
      span: 6
    }
  },
  {
    label: '表描述',
    field: 'tableComment',
    required: true,
    component: 'Input',
    colProps: {
      span: 6
    }
  },
  {
    label: '类名称',
    field: 'className',
    required: true,
    helpMessage: '默认去除表名的前缀。如果存在重复，则需要手动添加前缀，避免 MyBatis 报 Alias 重复的问题。',
    component: 'Input',
    colProps: {
      span: 6
    }
  },
  {
    label: '作者',
    field: 'author',
    required: true,
    defaultValue: 'juload',
    component: 'Input',
    colProps: {
      span: 6
    }
  },
  {
    label: '生成模板',
    field: 'templateType',
    required: true,
    component: 'JDictSelectTag',
    colProps: {
      span: 6
    },
    defaultValue: 1,
    componentProps: {
      dictCode: 'templateType',
      stringToNumber: true
    }
  },
  {
    label: '前端类型',
    field: 'frontType',
    required: true,
    component: 'JDictSelectTag',
    defaultValue: 30,
    colProps: {
      span: 6
    },
    componentProps: {
      dictCode: 'frontType',
      stringToNumber: true
    }
  },
  {
    label: '生成场景',
    field: 'scene',
    required: true,
    component: 'JDictSelectTag',
    defaultValue: 30,
    colProps: {
      span: 6
    },
    componentProps: {
      dictCode: 'code_scene',
      stringToNumber: true
    }
  },
  {
    label: '模块名',
    field: 'moduleName',
    required: true,
    helpMessage: '模块名，即一级目录，例如 system、infra、tool 等等',
    component: 'Input',
    colProps: { span: 6 }
  },
  {
    label: '业务名',
    field: 'businessName',
    required: true,
    component: 'Input',
    helpMessage: '业务名，即二级目录，例如 user、permission、dict 等等',
    colProps: { span: 6 }
  },
  {
    label: '类名称',
    field: 'className',
    required: true,
    component: 'Input',
    helpMessage: '类名称（首字母大写），例如SysUser、SysMenu、SysDictData 等等',
    colProps: { span: 6 }
  },
  {
    label: '类描述',
    field: 'classComment',
    required: true,
    component: 'Input',
    helpMessage: '用作类描述，例如 用户',
    colProps: { span: 6 }
  },
  {
    label: '上级菜单',
    field: 'parentMenuId',
    required: true,
    component: 'ApiTreeSelect',
    componentProps: {
      api: () => listSimpleMenus(),
      handleTree: 'id'
    },
    colProps: { span: 6 }
  },
  {
    label: '自定义路径',
    field: 'genPath',
    component: 'Input',
    helpMessage: '填写磁盘绝对路径，若不填写，则生成到当前Web项目下',
    defaultValue: '/',
    ifShow: ({ values }) => values.genType === '1',
    colProps: { span: 12 }
  },
  {
    label: '显示复选框',
    field: 'isCheckbox',
    component: 'Select',
    colProps: {
      span: 6
    },
    defaultValue: 'Y',
    componentProps: {
      options: [
        {
          label: '是',
          value: 'Y'
        },
        {
          label: '否',
          value: 'N'
        }
      ]
    }
  },
  {
    label: '是否分页',
    field: 'isPage',
    component: 'Select',
    colProps: {
      span: 6
    },
    defaultValue: 'Y',
    componentProps: {
      options: [
        {
          label: '是',
          value: 'Y'
        },
        {
          label: '否',
          value: 'N'
        }
      ]
    }
  },
  {
    label: '备注',
    field: 'remark',
    component: 'InputTextArea',
    colProps: { span: 24 }
  }
  // {
  //   label: '附表',
  //   field: 'subTableStr',
  //   required: true,
  //   component: 'Input',
  //   colProps: {
  //     span: 12
  //   },
  //   dynamicDisabled: true
  // }
  //
  // {
  //   label: '表单类型',
  //   field: 'formType',
  //   component: 'Select',
  //   colProps: {
  //     span: 6,
  //   },
  //   required: true,
  //   defaultValue: 'drawer',
  //   componentProps: {
  //     options: [
  //       {
  //         label: 'Drawer抽屉',
  //         value: 'drawer',
  //       },
  //       {
  //         label: 'Modal对话框',
  //         value: 'modal',
  //       },
  //     ],
  //   },
  // },
  // {
  //   label: '生成方法',
  //   field: 'genMethod',
  //   component: 'JCheckbox',
  //   defaultValue: 'page,detail,add,update,del,batchDel,import,export',
  //   required: true,
  //   colProps: {
  //     span: 18,
  //   },
  //   componentProps: {
  //     options: [
  //       { label: '分页', value: 'page' },
  //       { label: '详情', value: 'detail' },
  //       { label: '新增', value: 'add' },
  //       { label: '修改', value: 'update' },
  //       { label: '删除', value: 'del' },
  //       { label: '批量删除', value: 'batchDel' },
  //       { label: '导入', value: 'import' },
  //       { label: '导出', value: 'export' },
  //     ],
  //   },
  // },
];

export const dbInfoColumn: JVxeColumn[] = [
  {
    title: 'ID',
    key: 'id',
    type: JVxeTypes.hidden
  },
  {
    title: '字段名称',
    key: 'columnName',
    type: JVxeTypes.input,
    defaultValue: '',
    validateRules: [
      {
        required: true,
        message: '请输入${title}'
      }
    ]
  },
  {
    title: '字段备注',
    key: 'columnComment',
    type: JVxeTypes.input,
    defaultValue: '',
    placeholder: '请输入${title}',
    validateRules: [
      {
        required: true,
        message: '请输入${title}'
      }
    ]
  },
  {
    title: '字段长度',
    key: 'dbLength',
    type: JVxeTypes.inputNumber,
    defaultValue: 32,
    validateRules: [
      {
        required: true,
        message: '请输入${title}'
      }
    ]
  },
  {
    title: '小数点',
    key: 'dbPointLength',
    type: JVxeTypes.inputNumber,
    defaultValue: 0
  },
  {
    title: '默认值',
    key: 'dbDefaultVal',
    type: JVxeTypes.input,
    defaultValue: '',
    placeholder: '请输入${title}'
  },
  {
    title: '字段类型',
    key: 'dataType',
    type: JVxeTypes.select,
    defaultValue: 'varchar',
    options: [
      { title: 'bigint', value: 'BIGINT' },
      { title: 'date', value: 'DATE' },
      { title: 'char', value: 'CHAR' },
      { title: 'datetime', value: 'DATETIME' },
      { title: 'decimal', value: 'DECIMAL' },
      { title: 'double', value: 'DOUBLE' },
      { title: 'float', value: 'FLOAT' },
      { title: 'int', value: 'INT' },
      { title: 'text', value: 'TEXT' },
      { title: 'time', value: 'TIME' },
      { title: 'tinyint', value: 'TINYINT' },
      { title: 'varchar', value: 'VARCHAR' },
      { title: 'integer', value: 'INTEGER' },
      { title: 'timestamp', value: 'TIMESTAMP' }
    ],
    placeholder: '请选择'
  },
  // {
  //   title: '主键',
  //   key: 'dbIsKey',
  //   type: JVxeTypes.checkbox,
  //   customValue: [1, 0],
  //   defaultChecked: false
  // },
  {
    title: '允许空值',
    key: 'nullable',
    type: JVxeTypes.checkbox,
    defaultValue: true,
    customValue: [1, 0],
    defaultChecked: true
  }
];

export const vueInfoColumn: JVxeColumn[] = [
  {
    title: 'ID',
    key: 'id',
    type: JVxeTypes.hidden
  },
  {
    title: '字段名称',
    key: 'columnName',
    type: JVxeTypes.normal
  },
  {
    title: '字段备注',
    key: 'columnComment',
    type: JVxeTypes.normal
  },
  {
    title: '表单显示',
    key: 'updateOperation',
    type: JVxeTypes.checkbox,
    customValue: [1, 0],
    defaultChecked: false
  },
  {
    title: '列表显示',
    key: 'listOperationResult',
    type: JVxeTypes.checkbox,
    customValue: [1, 0],
    defaultChecked: false
  },
  // {
  //   title: '是否排序',
  //   key: 'sortFlag',
  //   type: JVxeTypes.checkbox,
  //   customValue: [1, 0],
  //   defaultChecked: false
  // },
  // {
  //   title: '是否只读',
  //   key: 'isReadOnly',
  //   type: JVxeTypes.checkbox,
  //   customValue: [1, 0],
  //   defaultChecked: true
  // },
  {
    title: '控件类型',
    key: 'htmlType',
    type: JVxeTypes.select,
    defaultValue: 'text',
    options: [
      { label: '文本', value: 'input' },
      { title: '密码', value: 'password' },
      { label: '多行文本', value: 'textarea' },
      { label: '下拉框', value: 'select' },
      { label: '单选框', value: 'radio' },
      { label: '多选框', value: 'checkbox' },
      { title: '日期', value: 'date' },
      { label: '日期-时间', value: 'datetime' },
      { title: '时间', value: 'time' },
      { label: '图片上传', value: 'imageUpload' },
      { label: '文件上传', value: 'fileUpload' },
      { label: '富文本控件', value: 'editor' },
      { title: '开关', value: 'switch' },
      { title: '下拉框多选', value: 'list_multi' },
      { title: 'Popup弹框', value: 'popup' },
      { title: '分类字典树', value: 'cat_tree' },
      { title: '部门选择', value: 'sel_depart' },
      { title: '用户选择', value: 'sel_user' },
      { title: 'MarkDown', value: 'markdown' },
      { title: '省市区组件', value: 'pca' },
      { title: '联动组件', value: 'link_down' },
      { title: '自定义树控件', value: 'sel_tree' }
    ],
    placeholder: '请选择',
    validateRules: [
      {
        required: true,
        message: '请选择${title}'
      }
    ]
  },
  {
    title: '控件长度',
    key: 'fieldLength',
    type: JVxeTypes.inputNumber,
    defaultValue: 120,
    validateRules: [
      {
        required: true,
        message: '请选择${title}'
      }
    ]
  },
  // {
  //   title: '查询类型',
  //   key: 'queryMode',
  //   type: JVxeTypes.select,
  //   customValue: [1, 0],
  //   defaultValue: 'single',
  //   options: [
  //     { title: '普通查询', value: 'single' },
  //     { title: '范围查询', value: 'group' }
  //   ],
  //   placeholder: '请选择',
  //   validateRules: [
  //     {
  //       required: true,
  //       message: '请选择${title}'
  //     }
  //   ]
  // },
  {
    title: '控件默认值',
    key: 'fieldDefaultValue',
    type: JVxeTypes.input
  },
  {
    title: '扩展参数',
    key: 'fieldExtendJson',
    type: JVxeTypes.input
  }
  // {
  //   title: '自定义转化器',
  //   key: 'converter',
  //   type: JVxeTypes.input,
  //   width: 150
  // }
];

export const searchInfoColumn: JVxeColumn[] = [
  {
    title: 'ID',
    key: 'id',
    type: JVxeTypes.hidden
  },
  {
    title: '字段名称',
    key: 'columnName',
    type: JVxeTypes.normal
  },
  {
    title: '字段备注',
    key: 'columnComment',
    type: JVxeTypes.normal
  },
  {
    title: '是否查询',
    key: 'listOperation',
    type: JVxeTypes.checkbox,
    customValue: [1, 0],
    defaultChecked: false
  },
  {
    title: '控件类型',
    key: 'htmlType',
    type: JVxeTypes.select,
    defaultValue: 'text',
    options: [
      { label: '文本', value: 'input' },
      { title: '密码', value: 'password' },
      { label: '多行文本', value: 'textarea' },
      { label: '下拉框', value: 'select' },
      { label: '单选框', value: 'radio' },
      { label: '多选框', value: 'checkbox' },
      { title: '日期', value: 'date' },
      { label: '日期-时间', value: 'datetime' },
      { title: '时间', value: 'time' },
      { label: '图片上传', value: 'imageUpload' },
      { label: '文件上传', value: 'fileUpload' },
      { label: '富文本控件', value: 'editor' },
      { title: '开关', value: 'switch' },
      { title: '下拉框多选', value: 'list_multi' },
      { title: 'Popup弹框', value: 'popup' },
      { title: '分类字典树', value: 'cat_tree' },
      { title: '部门选择', value: 'sel_depart' },
      { title: '用户选择', value: 'sel_user' },
      { title: 'MarkDown', value: 'markdown' },
      { title: '省市区组件', value: 'pca' },
      { title: '联动组件', value: 'link_down' },
      { title: '自定义树控件', value: 'sel_tree' }
    ],
    placeholder: '请选择',
    validateRules: [
      {
        required: true,
        message: '请选择${title}'
      }
    ]
  },
  {
    title: '字典table',
    key: 'queryDictTable',
    type: JVxeTypes.input
  },
  {
    title: '字典Code',
    key: 'queryDictField',
    type: JVxeTypes.input
  },
  {
    title: '字典Text',
    key: 'queryDictText',
    type: JVxeTypes.input
  }
  // {
  //   title: '默认值',
  //   key: 'queryDefVal',
  //   type: JVxeTypes.input
  // },
  // {
  //   title: '是否启用',
  //   key: 'queryConfigFlag',
  //   type: JVxeTypes.checkbox,
  //   customValue: [1, 0],
  //   defaultChecked: false
  // }
];
