You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
8.2 KiB
188 lines
8.2 KiB
'use strict';
|
|
import React, { useEffect, useState, useRef } from 'react';
|
|
import { connect } from 'react-redux';
|
|
import { push } from 'react-router-redux';
|
|
import { Popconfirm, Button, Popover, Skeleton, Form, Tag, Modal, Collapse, Input } from '@douyinfe/semi-ui';
|
|
import { IconSearch, IconHelpCircle, IconAlertCircle, IconMinusCircle, IconPlusCircle, IconPlus, IconRefresh } from '@douyinfe/semi-icons';
|
|
import { SkeletonScreen } from "$components";
|
|
|
|
const AddModel = props => {
|
|
const { dispatch, user, error, actions, close, dataToModal, editionData, cancel } = props
|
|
const { edition } = actions
|
|
const [query, setQuery] = useState({ limit: 10, page: 0 }); //页码信息
|
|
const [limits, setLimits] = useState()//每页实际条数
|
|
const [detailV, setDetailV] = useState(false)
|
|
const [property, setProperty] = useState([{ key: 'hb', value: 'ture' }])
|
|
const [attributeValue, setattributeValue] = useState({})
|
|
const api = useRef()
|
|
|
|
useEffect(() => {
|
|
if (dataToModal?.properties) {
|
|
let data = []
|
|
for (let k in dataToModal?.properties) {
|
|
data.push({ key: k, value: dataToModal?.properties[k] })
|
|
}
|
|
setProperty(data)
|
|
}
|
|
}, [])
|
|
|
|
useEffect(() => {
|
|
let data = {}
|
|
property?.map(v => {
|
|
if (v.key) {
|
|
data[v.key] = v.value
|
|
}
|
|
})
|
|
setattributeValue(data)
|
|
}, [property])
|
|
|
|
return (
|
|
<>
|
|
<Modal
|
|
title={dataToModal?.id ? '修改网关' : '新增网关'}
|
|
// okText={okText}
|
|
visible={true}
|
|
onOk={() => {
|
|
api.current.validate().then(r => {
|
|
// console.log(r);
|
|
r.properties = JSON.stringify(attributeValue)
|
|
if (dataToModal?.id) {
|
|
dispatch(edition.putedge(dataToModal?.id, r)).then(res => {
|
|
console.log(res)
|
|
if (res.success) {
|
|
close()
|
|
}
|
|
})
|
|
} else {
|
|
dispatch(edition.postedge(r)).then(res => {
|
|
// console.log(res);
|
|
if (res.success) {
|
|
close()
|
|
}
|
|
})
|
|
}
|
|
|
|
})
|
|
}}
|
|
width={500}
|
|
onCancel={() => cancel()}
|
|
>
|
|
<Form
|
|
getFormApi={(formApi) => (api.current = formApi)}
|
|
layout="horizontal"
|
|
labelAlign="right"
|
|
labelWidth="114px"
|
|
style={{ display: 'flex', flexDirection: 'column' }}
|
|
>
|
|
<Form.Input
|
|
field='serialNo'
|
|
label='设备序列号:'
|
|
labelPosition="left"
|
|
hideButtons={true}
|
|
placeholder='请输入设备序列号'
|
|
style={{ width: 240, marginBottom: 12 }}
|
|
initValue={dataToModal?.serialNo || ''}
|
|
disabled={dataToModal?.id ? true : false}
|
|
rules={[{ required: true, message: "请输入设备序列号" }, { pattern: "^[a-zA-Z0-9]{4,20}$", message: "必须4~20位数字或字母" },]}
|
|
/>
|
|
<Form.Input
|
|
field='name'
|
|
label='设备名称:'
|
|
labelPosition="left"
|
|
hideButtons={true}
|
|
placeholder='请输入设备名称'
|
|
style={{ width: 240, marginBottom: 12 }}
|
|
initValue={dataToModal?.name || ''}
|
|
rules={[{ required: true, message: "请输入设备名称" }]}
|
|
/>
|
|
{/* <Form.Input
|
|
field='properties'
|
|
label='设备属性:'
|
|
labelPosition="left"
|
|
hideButtons={true}
|
|
placeholder='请输入设备属性'
|
|
style={{ width: 240, marginBottom: 12 }}
|
|
initValue={JSON.stringify(dataToModal?.properties) || ''}
|
|
// rules={[{ required: true, message: "请输入设备属性" }, { pattern: "^[0-9]+$", message: "只能输入数字" },]}
|
|
/> */}
|
|
<Form.Input
|
|
field='hardwareName' label='硬件信息:'
|
|
labelPosition="left"
|
|
hideButtons={true}
|
|
placeholder='请输入硬件信息'
|
|
style={{ width: 240, marginBottom: 12 }}
|
|
initValue={dataToModal?.hardwareName || ''}
|
|
// rules={[{ required: true, message: "请输入硬件信息" }, { pattern: "^[0-9]+$", message: "只能输入数字" },]}
|
|
/>
|
|
<Form.Select
|
|
field="softwareVer"
|
|
label='软件信息:'
|
|
labelPosition="left"
|
|
placeholder='请选择软件版本'
|
|
style={{ width: 240, marginBottom: 12 }}
|
|
initValue={dataToModal?.softwareVer || ''}
|
|
// rules={[{ required: true, message: "请选择软件版本" }]}
|
|
>
|
|
{editionData?.map((v, i) => <Form.Select.Option key={'softwareVer' + i} value={v}>{v}</Form.Select.Option>)}
|
|
</Form.Select>
|
|
|
|
<div style={{ display: 'flex', marginBottom: 12 }}>
|
|
<div style={{ width: 114, height: 44, padding: '6px 16px 6px 0', textIndent: 38, fontWeight: 600, color: 'var(--semi-color-text-0)', fontSize: 14 }}>设备属性:</div>
|
|
<Collapse style={{ width: 270, background: 'var(--semi-color-fill-0)' }}>
|
|
<Collapse.Panel header={<div style={{ width: 260, whiteSpace: 'nowrap', textOverflow: 'ellipsis', overflow: 'hidden' }}>{JSON.stringify(attributeValue)}</div>} itemKey="1">
|
|
<div style={{ background: 'white', paddingBottom: 10, position: 'relative' }}>
|
|
<div style={{ display: 'flex', marginBottom: 10 }}>
|
|
<div style={{ width: 104, fontWeight: 600, marginLeft: 6 }}>key:</div>
|
|
<div style={{ width: 94, fontWeight: 600, }}>value:</div>
|
|
</div>
|
|
{property?.map((v, i) =>
|
|
<div key={'properties' + i} style={{ marginBottom: 10 }}>
|
|
<Input value={v.key} style={{ width: 90, marginLeft: 6 }}
|
|
onChange={e => {
|
|
console.log(e);
|
|
property?.splice(i, 1, { key: e, value: v.value })
|
|
setProperty([...property])
|
|
}}
|
|
/> --
|
|
<Input value={v.value} style={{ width: 90 }}
|
|
onChange={e => {
|
|
property?.splice(i, 1, { key: v.key, value: e })
|
|
setProperty([...property])
|
|
}}
|
|
/>
|
|
{property?.length > 1 ? <IconMinusCircle onClick={() => {
|
|
console.log(i);
|
|
console.log(property);
|
|
property?.splice(i, 1)
|
|
setProperty([...property])
|
|
}} /> : ""}
|
|
</div>)}
|
|
<IconPlusCircle style={{ position: 'absolute', bottom: 0, right: 0 }}
|
|
onClick={() => {
|
|
setProperty([...property, { key: '', value: '' }])
|
|
}}
|
|
/>
|
|
</div>
|
|
|
|
</Collapse.Panel>
|
|
</Collapse>
|
|
</div>
|
|
</Form>
|
|
</Modal>
|
|
</>
|
|
|
|
);
|
|
}
|
|
|
|
function mapStateToProps (state) {
|
|
const { auth, global } = state;
|
|
return {
|
|
user: auth.user,
|
|
error: auth.error,
|
|
actions: global.actions,
|
|
apiRoot: global.apiRoot,
|
|
isRequesting: auth.isRequesting
|
|
}
|
|
}
|
|
|
|
export default connect(mapStateToProps)(AddModel);
|