|
@@ -1,10 +1,8 @@ |
|
|
import logo from './logo.svg'; |
|
|
|
|
|
import './App.css'; |
|
|
import './App.css'; |
|
|
import init, { greet } from "knmodel"; |
|
|
|
|
|
import React, { useEffect, useState, useMemo } from 'react'; |
|
|
|
|
|
|
|
|
import React, { useState, useMemo } from 'react'; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var d = { |
|
|
|
|
|
|
|
|
// 默认规则数据 |
|
|
|
|
|
window.d = { |
|
|
field: '就诊卡号11', |
|
|
field: '就诊卡号11', |
|
|
required: 1, |
|
|
required: 1, |
|
|
chiled: [ |
|
|
chiled: [ |
|
@@ -72,18 +70,48 @@ var d = { |
|
|
], |
|
|
], |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
function App() { |
|
|
|
|
|
|
|
|
// 这里主要用于同步全局对象 |
|
|
|
|
|
function updateData(index = "", name, value) { |
|
|
|
|
|
console.log(index,name,value); |
|
|
|
|
|
let idxs = index.split("-"); |
|
|
|
|
|
let dStr = ""; |
|
|
|
|
|
let i = 0; |
|
|
|
|
|
while (true) { |
|
|
|
|
|
let idx = idxs.shift() |
|
|
|
|
|
if (typeof idx == "undefined") { |
|
|
|
|
|
break |
|
|
|
|
|
} |
|
|
|
|
|
if (idx == 0 && i == 0) { |
|
|
|
|
|
dStr = "window.d" |
|
|
|
|
|
} |
|
|
|
|
|
if (idx == 0 && i > 0) { |
|
|
|
|
|
dStr += `.chiled[${idx}]`; |
|
|
|
|
|
} |
|
|
|
|
|
i++; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
const [data, setData] = useState(d); |
|
|
|
|
|
|
|
|
if (typeof value == "number") { |
|
|
|
|
|
dStr += `.${name}=${value}`; |
|
|
|
|
|
} else if (typeof value == "string") { |
|
|
|
|
|
dStr += `.${name}="${value}"`; |
|
|
|
|
|
} else if (typeof value == "object") { |
|
|
|
|
|
let s = JSON.stringify(value); |
|
|
|
|
|
dStr += `.${name}= JSON.parse(\`${s}\`)`; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
|
|
init().then(() => { |
|
|
|
|
|
// greet("Hello Tianya"); |
|
|
|
|
|
}) |
|
|
|
|
|
}, []) |
|
|
|
|
|
|
|
|
console.log(window.d); |
|
|
|
|
|
console.log(dStr); |
|
|
|
|
|
|
|
|
|
|
|
eval(dStr); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function App() { |
|
|
|
|
|
|
|
|
|
|
|
const [data, setData] = useState(window.d); |
|
|
|
|
|
|
|
|
function TreeNode(props) { |
|
|
function TreeNode(props) { |
|
|
console.log(props); |
|
|
|
|
|
|
|
|
console.log("xx"); |
|
|
|
|
|
// 这里需要把属性分离出状态 |
|
|
const [idHash, setIdHash] = useState(new Date().getTime() + Math.round(Math.random() * 10000)) |
|
|
const [idHash, setIdHash] = useState(new Date().getTime() + Math.round(Math.random() * 10000)) |
|
|
const [nodeField, setNodeField] = useState(props.data.field) |
|
|
const [nodeField, setNodeField] = useState(props.data.field) |
|
|
const [nodeRequired, setNodeRequired] = useState(props.data.required) |
|
|
const [nodeRequired, setNodeRequired] = useState(props.data.required) |
|
@@ -91,8 +119,8 @@ function App() { |
|
|
|
|
|
|
|
|
// 这里只有子集变化了才更新 |
|
|
// 这里只有子集变化了才更新 |
|
|
const listItems = useMemo(() => { |
|
|
const listItems = useMemo(() => { |
|
|
return nodeChiled.map((item) => |
|
|
|
|
|
<TreeNode data={item}></TreeNode> |
|
|
|
|
|
|
|
|
return nodeChiled.map((item, i) => |
|
|
|
|
|
<TreeNode data={item} index={props.index + "-" + i} key={i}></TreeNode> |
|
|
) |
|
|
) |
|
|
}, [nodeChiled]) |
|
|
}, [nodeChiled]) |
|
|
|
|
|
|
|
@@ -100,14 +128,30 @@ function App() { |
|
|
function handleOnClick() { |
|
|
function handleOnClick() { |
|
|
if (nodeRequired == 0) { |
|
|
if (nodeRequired == 0) { |
|
|
setNodeRequired(1) |
|
|
setNodeRequired(1) |
|
|
|
|
|
updateData(props.index, "required", 1); |
|
|
} else { |
|
|
} else { |
|
|
setNodeRequired(0) |
|
|
setNodeRequired(0) |
|
|
|
|
|
updateData(props.index, "required", 0); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 增加子节点 |
|
|
|
|
|
function handleOnAdd() { |
|
|
|
|
|
let newItem = { |
|
|
|
|
|
field: '未命名', |
|
|
|
|
|
required: 1, |
|
|
|
|
|
chiled: [ |
|
|
|
|
|
] |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
let newNodeChiled = nodeChiled.concat(newItem); |
|
|
|
|
|
setNodeChiled(newNodeChiled); |
|
|
|
|
|
updateData(props.index, "chiled", newNodeChiled); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
return ( |
|
|
return ( |
|
|
<div id={idHash} style={{ marginLeft: "30px" }}> |
|
|
<div id={idHash} style={{ marginLeft: "30px" }}> |
|
|
<h2>{nodeField}<a onClick={handleOnClick}>[{nodeRequired}]</a></h2> |
|
|
|
|
|
|
|
|
<h2>{nodeField}<a onClick={handleOnClick}>[{nodeRequired}]</a> <a style={{ color: "blue", cursor: "pointer" }} onClick={handleOnAdd}>+</a></h2> |
|
|
<div>{listItems}</div> |
|
|
<div>{listItems}</div> |
|
|
</div> |
|
|
</div> |
|
|
); |
|
|
); |
|
@@ -117,7 +161,7 @@ function App() { |
|
|
<div className="App"> |
|
|
<div className="App"> |
|
|
<h1>Node</h1> |
|
|
<h1>Node</h1> |
|
|
<hr></hr> |
|
|
<hr></hr> |
|
|
<TreeNode data={data}></TreeNode> |
|
|
|
|
|
|
|
|
<TreeNode data={data} index={"0"}></TreeNode> |
|
|
</div> |
|
|
</div> |
|
|
); |
|
|
); |
|
|
} |
|
|
} |
|
|