/* * @Author: yehuozhili * @Date: 2022-04-09 21:44:55 * @LastEditors: yehuozhili * @LastEditTime: 2022-04-10 15:59:37 * @FilePath: \dooringx\packages\dooringx-lib\src\components\leftDataPannel.tsx */ import { Button, Form, Modal, Row, Space, Table, Input, Typography, message, Popconfirm, } from 'antd'; import { ColumnsType } from 'antd/lib/table'; import React, { useState } from 'react'; import UserConfig from '../config'; import { replaceLocale } from '../locale'; interface LeftDataPannelProps { config: UserConfig; } const formItemLayout = { labelCol: { span: 4, }, wrapperCol: { span: 20, }, }; const { Text } = Typography; const reg = /[`~!@#-_$%^&*()+=|{}':;',\[\]<>/?~!@#¥%……&*()——+|{}【】《》 ‘;:”“’。,、?]/g; /** * * 左侧tab页插件 * @param {LeftDataPannelProps} props * @returns */ function LeftDataPannel(props: LeftDataPannelProps) { const config = props.config; const dataCenter = config.getDataCenter(); const dataMap = dataCenter.getDataMap(); const keys = Object.keys(dataMap); const dataSource = keys.map((v) => ({ key: v, value: dataMap[v] })); const forceUpdate = useState(0)[1]; const [addVisible, setAddVisible] = useState(false); const [editVisible, setEditVisible] = useState(false); const [current, setCurrent] = useState>({}); const column: ColumnsType = [ { title: 'Key', dataIndex: 'key', key: 'key', }, { title: '操作', render: (_v, record: any) => { return ( { const newObj = { ...dataMap }; delete newObj[record.key]; dataCenter.staticSetToMap({ ...newObj }, props.config); forceUpdate((v) => v + 1); }} okText={replaceLocale('yes', '确定', config)} cancelText={replaceLocale('no', '取消', config)} > ); }, }, ]; const [form] = Form.useForm(); const [editForm] = Form.useForm(); const formSubmit = (res: any) => { let value: string = res.value; value = value.replace('/s', '').replace('↵', ''); if (value.startsWith('{')) { try { const json = JSON.parse(value); const newObj = { [res.key]: json }; dataCenter.staticSetToMap({ ...dataMap, ...newObj }, props.config); setAddVisible(false); form.resetFields(); } catch (error) { message.error('json格式转换失败'); } } else { const newObj = { [res.key]: value }; dataCenter.staticSetToMap({ ...dataMap, ...newObj }, props.config); setAddVisible(false); form.resetFields(); } }; return (
{addVisible && ( { setAddVisible(false); form.resetFields(); }} onOk={() => { form.validateFields().then((res) => { formSubmit(res); }); }} okText={replaceLocale('yes', '确定', config)} cancelText={replaceLocale('no', '取消', config)} >
({ validator(_, value) { if (!keys.includes(value)) { return Promise.resolve(); } return Promise.reject(new Error('Duplicate keys!')); }, }), () => ({ validator(_, value) { if (!reg.exec(value)) { return Promise.resolve(); } return Promise.reject(new Error('invalid key')); }, }), ]} > 支持字符串、数字、JSON对象格式,直接输入内容即可} rules={[{ required: true, message: 'Please input your value' }]} >
)} {editVisible && ( { setEditVisible(false); editForm.resetFields(); }} onOk={() => { editForm.validateFields().then((res) => { let value: string = res.value; value = value.replace('/s', '').replace('↵', ''); if (value.startsWith('{')) { try { const json = JSON.parse(value); const newObj = { [current.key]: json }; dataCenter.staticSetToMap({ ...dataMap, ...newObj }, props.config); setEditVisible(false); editForm.resetFields(); } catch (error) { message.error('json格式转换失败'); } } else { const newObj = { [current.key]: value }; dataCenter.staticSetToMap({ ...dataMap, ...newObj }, props.config); setEditVisible(false); editForm.resetFields(); } }); }} okText={replaceLocale('yes', '确定', config)} cancelText={replaceLocale('no', '取消', config)} >
支持字符串、数字、JSON对象格式,直接输入内容即可} rules={[{ required: true, message: 'Please input your value' }]} >
)}
); } export default LeftDataPannel;