123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420 |
- /**
- * @description:表单配置
- */
- import { IVFormComponent } from '../typings/v-form-component';
- import { isArray } from 'lodash-es';
- import { componentMap as VbenCmp, add } from '/@/components/Form/src/componentMap';
- import { ComponentType } from '/@/components/Form/src/types';
- import { componentMap as Cmp } from '../components';
- import { Component } from 'vue';
- const componentMap = new Map<string, Component>();
- //如果有其它控件,可以在这里初始化
- //注册Ant控件库
- Cmp.forEach((value, key) => {
- componentMap.set(key, value);
- if (VbenCmp[key] == null) {
- add(key as ComponentType, value);
- }
- });
- //注册vben控件库
- VbenCmp.forEach((value, key) => {
- componentMap.set(key, value);
- });
- export { componentMap };
- /**
- * 设置自定义表单控件
- * @param {IVFormComponent | IVFormComponent[]} config
- */
- export function setFormDesignComponents(config: IVFormComponent | IVFormComponent[]) {
- if (isArray(config)) {
- config.forEach((item) => {
- const { componentInstance: component, ...rest } = item;
- componentMap[item.component] = component;
- customComponents.push(Object.assign({ props: {} }, rest));
- });
- } else {
- const { componentInstance: component, ...rest } = config;
- componentMap[config.component] = component;
- customComponents.push(Object.assign({ props: {} }, rest));
- }
- }
- //外部设置的自定义控件
- export const customComponents: IVFormComponent[] = [];
- // 左侧控件列表与初始化的控件属性
- // props.slotName,会在formitem级别生成一个slot,并绑定当前record值
- // 属性props,类型为对象,不能为undefined或是null。
- export const baseComponents: IVFormComponent[] = [
- {
- component: 'InputCountDown',
- label: '倒计时输入',
- icon: 'line-md:iconify2',
- colProps: { span: 24 },
- field: '',
- componentProps: {},
- },
- {
- component: 'IconPicker',
- label: '图标选择器',
- icon: 'line-md:iconify2',
- colProps: { span: 24 },
- field: '',
- componentProps: {},
- },
- {
- component: 'StrengthMeter',
- label: '密码强度',
- icon: 'wpf:password1',
- colProps: { span: 24 },
- field: '',
- componentProps: {},
- },
- {
- component: 'AutoComplete',
- label: '自动完成',
- icon: 'wpf:password1',
- colProps: { span: 24 },
- field: '',
- componentProps: {
- placeholder: '请输入正则表达式',
- options: [
- {
- value: '/^(?:(?:\\+|00)86)?1[3-9]\\d{9}$/',
- label: '手机号码',
- },
- {
- value: '/^((ht|f)tps?:\\/\\/)?[\\w-]+(\\.[\\w-]+)+:\\d{1,5}\\/?$/',
- label: '网址带端口号',
- },
- ],
- },
- },
- {
- component: 'Divider',
- label: '分割线',
- icon: 'radix-icons:divider-horizontal',
- colProps: { span: 24 },
- field: '',
- componentProps: {
- orientation: 'center',
- dashed: true,
- },
- },
- {
- component: 'Checkbox',
- label: '复选框',
- icon: 'ant-design:check-circle-outlined',
- colProps: { span: 24 },
- field: '',
- },
- {
- component: 'CheckboxGroup',
- label: '复选框-组',
- icon: 'ant-design:check-circle-filled',
- field: '',
- colProps: { span: 24 },
- componentProps: {
- options: [
- {
- label: '选项1',
- value: '1',
- },
- {
- label: '选项2',
- value: '2',
- },
- ],
- },
- },
- {
- component: 'Input',
- label: '输入框',
- icon: 'bi:input-cursor-text',
- field: '',
- colProps: { span: 24 },
- componentProps: {
- type: 'text',
- },
- },
- {
- component: 'InputNumber',
- label: '数字输入框',
- icon: 'ant-design:field-number-outlined',
- field: '',
- colProps: { span: 24 },
- componentProps: { style: 'width:200px' },
- },
- {
- component: 'InputTextArea',
- label: '文本域',
- icon: 'ant-design:file-text-filled',
- field: '',
- colProps: { span: 24 },
- componentProps: {},
- },
- {
- component: 'Select',
- label: '下拉选择',
- icon: 'gg:select',
- field: '',
- colProps: { span: 24 },
- componentProps: {
- options: [
- {
- label: '选项1',
- value: '1',
- },
- {
- label: '选项2',
- value: '2',
- },
- ],
- },
- },
- {
- component: 'Radio',
- label: '单选框',
- icon: 'ant-design:check-circle-outlined',
- field: '',
- colProps: { span: 24 },
- componentProps: {},
- },
- {
- component: 'RadioGroup',
- label: '单选框-组',
- icon: 'carbon:radio-button-checked',
- field: '',
- colProps: { span: 24 },
- componentProps: {
- options: [
- {
- label: '选项1',
- value: '1',
- },
- {
- label: '选项2',
- value: '2',
- },
- ],
- },
- },
- {
- component: 'DatePicker',
- label: '日期选择',
- icon: 'healthicons:i-schedule-school-date-time-outline',
- field: '',
- colProps: { span: 24 },
- componentProps: {},
- },
- {
- component: 'RangePicker',
- label: '日期范围',
- icon: 'healthicons:i-schedule-school-date-time-outline',
- field: '',
- colProps: { span: 24 },
- componentProps: {
- placeholder: ['开始日期', '结束日期'],
- },
- },
- {
- component: 'MonthPicker',
- label: '月份选择',
- icon: 'healthicons:i-schedule-school-date-time-outline',
- field: '',
- colProps: { span: 24 },
- componentProps: {
- placeholder: '请选择月份',
- },
- },
- {
- component: 'TimePicker',
- label: '时间选择',
- icon: 'healthicons:i-schedule-school-date-time',
- field: '',
- colProps: { span: 24 },
- componentProps: {},
- },
- {
- component: 'Slider',
- label: '滑动输入条',
- icon: 'vaadin:slider',
- field: '',
- colProps: { span: 24 },
- componentProps: {},
- },
- {
- component: 'Rate',
- label: '评分',
- icon: 'ic:outline-star-rate',
- field: '',
- colProps: { span: 24 },
- componentProps: {},
- },
- {
- component: 'Switch',
- label: '开关',
- icon: 'entypo:switch',
- field: '',
- colProps: { span: 24 },
- componentProps: {},
- },
- {
- component: 'TreeSelect',
- label: '树形选择',
- icon: 'clarity:tree-view-line',
- field: '',
- colProps: { span: 24 },
- componentProps: {
- treeData: [
- {
- label: '选项1',
- value: '1',
- children: [
- {
- label: '选项三',
- value: '1-1',
- },
- ],
- },
- {
- label: '选项2',
- value: '2',
- },
- ],
- },
- },
- {
- component: 'Upload',
- label: '上传',
- icon: 'ant-design:upload-outlined',
- field: '',
- colProps: { span: 24 },
- componentProps: {
- api: () => 1,
- },
- },
- {
- component: 'Cascader',
- label: '级联选择',
- icon: 'ant-design:check-outlined',
- field: '',
- colProps: { span: 24 },
- componentProps: {
- options: [
- {
- label: '选项1',
- value: '1',
- children: [
- {
- label: '选项三',
- value: '1-1',
- },
- ],
- },
- {
- label: '选项2',
- value: '2',
- },
- ],
- },
- },
- // {
- // component: 'Button',
- // label: '按钮',
- // icon: 'dashicons:button',
- // field: '',
- // colProps: { span: 24 },
- // hiddenLabel: true,
- // componentProps: {},
- // },
- // {
- // component: 'ColorPicker',
- // label: '颜色选择器',
- // icon: 'carbon:color-palette',
- // field: '',
- // colProps: { span: 24 },
- // componentProps: {
- // defaultValue: '',
- // value: '',
- // },
- // },
- {
- component: 'slot',
- label: '插槽',
- icon: 'vs:timeslot-question',
- field: '',
- colProps: { span: 24 },
- componentProps: {
- slotName: 'slotName',
- },
- },
- ];
- // https://next.antdv.com/components/transfer-cn
- const transferControl = {
- component: 'Transfer',
- label: '穿梭框',
- icon: 'bx:bx-transfer-alt',
- field: '',
- colProps: { span: 24 },
- componentProps: {
- render: (item) => item.title,
- dataSource: [
- {
- key: 'key-1',
- title: '标题1',
- description: '描述',
- disabled: false,
- chosen: true,
- },
- {
- key: 'key-2',
- title: 'title2',
- description: 'description2',
- disabled: true,
- },
- {
- key: 'key-3',
- title: '标题3',
- description: '描述3',
- disabled: false,
- chosen: true,
- },
- ],
- },
- };
- baseComponents.push(transferControl);
- export const layoutComponents: IVFormComponent[] = [
- {
- field: '',
- component: 'Grid',
- label: '栅格布局',
- icon: 'icon-grid',
- componentProps: {},
- columns: [
- {
- span: 12,
- children: [],
- },
- {
- span: 12,
- children: [],
- },
- ],
- colProps: { span: 24 },
- options: {
- gutter: 0,
- },
- },
- ];
|