import { Button } from 'antd'; import React, { useRef, useState } from 'react'; import { unstable_batchedUpdates as batch } from 'react-dom'; import { XForm } from '../packages/react/src/index'; const defaultValues = { name: '璀璨大礼包', price: '6000', stock: 1, content: [ { type: 2, medalid: 1230002, outdate: -1 }, { type: 3, titleId: '19001', titleOutdate: '-1' }, { type: 4, bubbleId: '11001', bubbleOutdate: '-1' }, { type: 6, bagId: 2021097, bagCount: 5 }, { type: 5, carId: 2004, carOutdate: -1 } ] }; const limitPositiveInts = (value: string | number) => { const reg = /^([1-9])(\d*).*$/; if (typeof value === 'string') { return !isNaN(Number(value)) ? value.replace(reg, '$1$2') : ''; } else if (typeof value === 'number') { return !isNaN(value) ? String(value).replace(reg, '$1$2') : ''; } else { return ''; } }; const limitSpecialInts = (value: string | number) => { const reg = /^(\-)*([1-9][0-9]*).*$/; if (String(value) === '-' || Number(value) === -1) { return '-1'; } if (typeof value === 'string') { return !isNaN(Number(value)) ? value.replace(reg, '$2') : ''; } if (typeof value === 'number') { return !isNaN(value) ? String(value).replace(reg, '$2') : ''; } return ''; }; const schema = [ { key: 'name', type: 'Input', ui: { label: '礼包名称', required: true }, props: { placeholder: '请输入礼包名称,不能超过20个字符,中英文都算作1个字符', maxLength: 20 }, rules: [ { required: true, message: '请输入礼包名称' } ] }, { key: 'price', type: 'InputNumber', ui: { label: '价格(音符)', required: true }, props: { placeholder: '1至10000000之间的整数', min: 1, step: 1, max: 10000000, formatter: limitPositiveInts, parser: limitPositiveInts, style: { width: '200px' } }, rules: [ { required: true, message: '请输入价格' } ] }, { key: 'stock', type: 'InputNumber', ui: { label: '可购买份数(份/日)', required: true }, props: { placeholder: '1至100000之间的整数', min: 1, step: 1, max: 100000, formatter: limitPositiveInts, parser: limitPositiveInts, style: { width: '200px' } }, rules: [ { required: true, message: '请输入购买份数' } ] }, { key: 'content', type: 'Array', value: [{ type: 2 }], props: { type: 'Card', max: 8, min: 1, labelCol: { span: 8 }, wrapperCol: { span: 14 } }, ui: { label: '内容' }, children: [ { key: 'type', type: 'Select', value: 2, ui: { label: '类型', required: true }, options: [ { name: '勋章', value: 2 }, { name: '头衔', value: 3 }, { name: '气泡', value: 4 }, { name: '背包', value: 6 }, { name: '座架', value: 5 } ], rules: [ { required: true, message: '请选择礼品类型' } ] }, { key: 'medalid', type: 'InputNumber', ui: { label: '勋章id', required: true }, props: { placeholder: '>=1整数', min: 1, step: 1, formatter: limitPositiveInts, parser: limitPositiveInts, style: { width: '200px' } }, listeners: [ { watch: ['type'], condition: 'type.value != 2', set: { status: 'hidden' } } ], rules: [ { required: true, message: '请输入勋章id' } ] }, { key: 'outdate', type: 'InputNumber', ui: { label: '有效期(永久填-1)', required: true }, props: { placeholder: '1至10000之间的整数或-1', min: -1, step: 1, max: 10000, formatter: limitSpecialInts, parser: limitSpecialInts, style: { width: '200px' } }, listeners: [ { watch: ['type'], condition: 'type.value != 2', set: { status: 'hidden' } } ], rules: [ { required: true, message: '请输入有效期' } ] }, { key: 'titleId', type: 'Input', ui: { label: '头衔id', required: true }, listeners: [ { watch: ['type'], condition: 'type.value != 3', set: { status: 'hidden' } } ] }, { key: 'titleOutdate', type: 'Input', ui: { label: '有效期(天, -1永久)', required: true }, listeners: [ { watch: ['type'], condition: 'type.value != 3', set: { status: 'hidden' } } ] }, { key: 'bubbleId', type: 'Input', ui: { label: '气泡框id', required: true }, listeners: [ { watch: ['type'], condition: 'type.value != 4', set: { status: 'hidden' } } ] }, { key: 'bubbleOutdate', type: 'Input', ui: { label: '有效期(天, -1永久)', required: true }, listeners: [ { watch: ['type'], condition: 'type.value != 4', set: { status: 'hidden' } } ] }, { key: 'privilege', type: 'CheckboxAll', ui: { label: '称号特权', required: true }, options: [ { name: '聊天勋章', value: 0 }, { name: '用户卡片展示', value: 1 }, { name: '进场特效', value: 2 } ], listeners: [ { watch: ['type'], condition: 'type.value != 2', set: { status: 'hidden' } } ], rules: [ { type: 'array', required: true, message: '请至少选择一个展示' } ] }, { key: 'bagId', type: 'InputNumber', ui: { label: '背包id', required: true }, props: { placeholder: '>=1整数', min: 1, step: 1, formatter: limitPositiveInts, parser: limitPositiveInts, style: { width: '200px' } }, listeners: [ { watch: ['type'], condition: 'type.value != 6', set: { status: 'hidden' } } ], rules: [ { required: true, message: '请输入背包id' } ] }, { key: 'bagCount', type: 'InputNumber', ui: { label: '数量', required: true }, props: { placeholder: '1至100000之间的整数', min: 1, step: 1, max: 100000, formatter: limitPositiveInts, parser: limitPositiveInts, style: { width: '200px' } }, listeners: [ { watch: ['type'], condition: 'type.value != 6', set: { status: 'hidden' } } ], rules: [ { required: true, message: '请输入礼物数量' } ] }, { key: 'carId', type: 'InputNumber', ui: { label: '座驾id', required: true }, props: { placeholder: '>=1整数', min: 1, step: 1, formatter: limitPositiveInts, parser: limitPositiveInts, style: { width: '200px' } }, listeners: [ { watch: ['type'], condition: 'type.value != 5', set: { status: 'hidden' } } ], rules: [ { required: true, message: '请输入座驾id' } ] }, { key: 'carOutdate', type: 'InputNumber', ui: { label: '有效期(天)(永久填-1)', required: true }, props: { placeholder: '1至10000之间的整数或-1', min: -1, step: 1, max: 10000, formatter: limitSpecialInts, parser: limitSpecialInts, style: { width: '200px' } }, listeners: [ { watch: ['type'], condition: 'type.value != 5', set: { status: 'hidden' } } ], rules: [ { required: true, message: '请输入有效期' } ] } ] } ]; export default function() { const formRef = useRef(null); const [status, setStatus] = useState(null); const [values, setValues] = useState(null); const onSubmit = () => { formRef.current.submit().then((data: any) => { console.log(data); }); }; const onAdd = () => { batch(() => { // formRef.current.reset(); setValues(null); setStatus('edit'); }); }; const onReset = () => { batch(() => { setValues({...defaultValues}); setStatus('edit'); }); }; const onView = () => { batch(() => { setValues({...defaultValues}); setStatus('preview'); }); }; return ( <>
); }