Compare commits

..

3 Commits

Author SHA1 Message Date
xielei d58fd30476 Merge branch 'master' of http://10.0.41.100:3000/lishenfeng/tsg-web 2024-09-29 17:19:33 +08:00
xielei 7538450e70 页面搭建 2024-09-29 17:19:27 +08:00
xielei c93f08e0d0 页面搭建 2024-09-27 17:52:34 +08:00
14 changed files with 212 additions and 116 deletions

9
package-lock.json generated
View File

@ -50,6 +50,7 @@
"react-cookies": "^0.1.1", "react-cookies": "^0.1.1",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-konva": "^18.2.3", "react-konva": "^18.2.3",
"react-org-tree": "^1.0.1",
"react-pdf": "^7.3.3", "react-pdf": "^7.3.3",
"react-redux": "^8.0.2", "react-redux": "^8.0.2",
"react-rnd": "^10.4.11", "react-rnd": "^10.4.11",
@ -18883,6 +18884,14 @@
"resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
"integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
}, },
"node_modules/react-org-tree": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/react-org-tree/-/react-org-tree-1.0.1.tgz",
"integrity": "sha512-NK1d8VIAzxJyMC/Rx9MupAusoFnokYr81Hw3oEpqxqBLQmpBVAexjvPSAJmhCmsom9Zymu+BMNrjRw5D54n7aw==",
"dependencies": {
"classnames": "^2.2.6"
}
},
"node_modules/react-pdf": { "node_modules/react-pdf": {
"version": "7.3.3", "version": "7.3.3",
"resolved": "https://registry.npmjs.org/react-pdf/-/react-pdf-7.3.3.tgz", "resolved": "https://registry.npmjs.org/react-pdf/-/react-pdf-7.3.3.tgz",

View File

@ -45,6 +45,7 @@
"react-cookies": "^0.1.1", "react-cookies": "^0.1.1",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-konva": "^18.2.3", "react-konva": "^18.2.3",
"react-org-tree": "^1.0.1",
"react-pdf": "^7.3.3", "react-pdf": "^7.3.3",
"react-redux": "^8.0.2", "react-redux": "^8.0.2",
"react-rnd": "^10.4.11", "react-rnd": "^10.4.11",

View File

@ -289,8 +289,9 @@ export async function loadMenu(): Promise<MenuItem[]> {
} }
] ]
}, },
{ id: id(), title: '法律法规', path: '/mgr/sz/flfg' },
{ id: id(), title: '制度管理', path: '/mgr/sz/zdgl' }, { id: id(), title: '制度管理', path: '/mgr/sz/zdgl' },
{ id: id(), title: '法律法规', path: '/mgr/sz/flfg' },
] ]
}, },

View File

@ -29,7 +29,7 @@
top: 30px; top: 30px;
border-radius: 5px; border-radius: 5px;
border: 1px solid #eee; border: 1px solid #eee;
transition: all 0.2s ease 0s;
.ant-tabs-nav{ .ant-tabs-nav{
margin-bottom: 5px; margin-bottom: 5px;

View File

@ -11,8 +11,13 @@ const Page = () => {
<Image src={title} />保护对象 <Image src={title} />保护对象
</div> </div>
<div className={styles.content}> <div className={styles.content}>
水库防洪标准按50年一遇设计1000年一遇校核设计洪水位111.51校核洪水位 112.75 ,水库担负着红安县城七里坪杏花城关等城镇以及京九铁路汉麻连络线省道S234国道G230,京九铁路汉麻联络线等交通设施安全的防洪重任防洪保护人口32万 水库防洪标准按
保护耕地 15 万亩 <span className={styles.color}>50</span>
年一遇设计<span className={styles.color}>1000</span><span className={styles.color}>111.51</span>
校核洪水位 <span className={styles.color}>112.75</span> ,
水库担负着红安县城七里坪杏花城关等城镇
以及京九铁路汉麻连络线省道S234国道G230,京九铁路汉麻联络线等交通设施安全的防洪重任防洪保护人口<span className={styles.color}>32</span>
保护耕地 <span className={styles.color}>15</span>
</div> </div>
</div> </div>

View File

@ -7,4 +7,7 @@
.content{ .content{
font-size: 17px; font-size: 17px;
padding: 0 20px; padding: 0 20px;
}
.color{
color: #409eff;
} }

View File

@ -223,6 +223,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
onDrop={(info) => { console.log(info.dataTransfer.files); }} onDrop={(info) => { console.log(info.dataTransfer.files); }}
fileList={fileList} fileList={fileList}
disabled={loading} disabled={loading}
maxCount={1}
// onSuccess={handleSuccess} // onSuccess={handleSuccess}
> >
<p className="ant-upload-text">点击或拖拽文件到此区域上传</p> <p className="ant-upload-text">点击或拖拽文件到此区域上传</p>

View File

@ -48,7 +48,7 @@ const Page = () => {
title: '施行日期', key: 'implementationDate', dataIndex: 'implementationDate' title: '施行日期', key: 'implementationDate', dataIndex: 'implementationDate'
}, },
{ {
title: '上传时间', key: 'eventsDesc', dataIndex: 'eventsDesc' title: '上传时间', key: 'uploadDate', dataIndex: 'uploadDate'
}, },
{ {
title: '附件', key: 'files', dataIndex: 'files',render:(v,r)=><a onClick={()=>download(v[0].fileId,v[0]?.fileName)}><PaperClipOutlined />{v[0]?.fileName}</a> title: '附件', key: 'files', dataIndex: 'files',render:(v,r)=><a onClick={()=>download(v[0].fileId,v[0]?.fileName)}><PaperClipOutlined />{v[0]?.fileName}</a>

View File

@ -39,8 +39,7 @@ const Page = ({ uploadUrl, downloadUrl, type, getFormInfo, formJsonData }) => {
const [isModal, setIsModal] = useState(false) const [isModal, setIsModal] = useState(false)
const getInfo = () => { const getInfo = () => {
form.validateFields().then((values) => { form.validateFields().then((values) => {
getFormInfo({ ...values, ...fileListHj }) getFormInfo({ ...fileListHj,...values, })
form.resetFields()
setFileList([]) setFileList([])
}).catch((errorInfo) => { }).catch((errorInfo) => {
console.log(errorInfo, 'error'); console.log(errorInfo, 'error');
@ -131,7 +130,9 @@ const Page = ({ uploadUrl, downloadUrl, type, getFormInfo, formJsonData }) => {
} }
useEffect(() => { useEffect(() => {
setFileHj(formJsonData) setFileHj(formJsonData)
form.setFieldsValue(formJsonData)
}, []) }, [])
return ( return (
<Form form={form} onFinish={onFinish} > <Form form={form} onFinish={onFinish} >

View File

@ -1,4 +1,85 @@
const treeData = [
{
value: '行政处理',
title: '行政处理',
children: [
{
value: '责令停止违法行为',
title: '责令停止违法行为',
},
{
value: '责令补办许可手续',
title: '责令补办许可手续',
},
{
value: '责令限期拆除',
title: '责令限期拆除',
},
{
value: '责令采取补救措施',
title: '责令采取补救措施',
},
{
value: '责令停止施工',
title: '责令停止施工',
},
{
value: '责令赔偿损失',
title: '责令赔偿损失',
},
],
},
{
value: '行政处罚',
title: '行政处罚',
children: [
{
value: '警告',
title: '警告',
},
{
value: '罚款',
title: '罚款',
},
{
value: '没收违法所得、非法财产',
title: '没收违法所得、非法财产',
},
{
value: '责令停产停业',
title: '责令停产停业',
},
{
value: '暂扣许可证、执照',
title: '暂扣许可证、执照',
},
{
value: '吊销许可证、执照',
title: '吊销许可证、执照',
},
],
},
{
value: '行政强制措施',
title: '行政强制措施',
children: [
{
value: '查封或扣押设施',
title: '查封或扣押设施',
},
{
value: '查封或扣罚财务',
title: '查封或扣罚财务',
},
{
value: '其他',
title: '其他',
},
],
},
];
const basicData = [ const basicData = [
{ {
label: '填报人', label: '填报人',
@ -76,7 +157,7 @@ const basicData = [
}, },
{ {
label: '违法时间', label: '违法时间',
key: 'IllegalDate', key: 'illegalDate',
type: 'DatePicker', type: 'DatePicker',
span: 12 span: 12
}, },
@ -144,14 +225,17 @@ const clqkData = [
{ {
label: '处理依据', label: '处理依据',
key: 'treatmentBasis', key: 'treatmentBasis',
type: 'input', type: 'TreeSelect',
span: 12, span: 12,
treeData:[],
fieldNames:{label: 'legalName', value: 'legalName', children: 'children'}
}, },
{ {
label: '处理措施', label: '处理措施',
key: 'treatmentMeasure', key: 'treatmentMeasure',
type: 'Select', type: 'TreeSelect',
span: 12 span: 12,
treeData:treeData
}, },
{ {
label: '移送处理情况', label: '移送处理情况',
@ -188,6 +272,7 @@ const clqkData = [
{ {
label: '直接损失金额(万元)', label: '直接损失金额(万元)',
key: 'directLossAmount', key: 'directLossAmount',
labelCol:{span:7},
type: 'input', type: 'input',
span: 12 span: 12
}, },

View File

@ -33,11 +33,23 @@ const items = [
const Page = ({ mode, onCrudSuccess,record,submit }) => { const Page = ({ mode, onCrudSuccess,record,submit }) => {
const [formData,setFormData] =useState({}) const [formData,setFormData] =useState({})
const [clqkDataConfig,setConfig] =useState([])
// debugger; // debugger;
const [key, setKeys] = useState('1') const [key, setKeys] = useState('1')
const onChange = (key) => { const onChange = async(key) => {
console.log(key); console.log(key);
setKeys(key) setKeys(key)
if(key == 2){
const res = await httpget(apiurl.szzf.clyj.tree)
const arr = clqkData.map(item=>{
if(item.key == 'treatmentBasis'){
item.treeData = res.data
}
return item
})
setConfig(arr)
}
}; };
const getFormInfo = (e) => { const getFormInfo = (e) => {
if(!e){ if(!e){
@ -48,7 +60,7 @@ const Page = ({ mode, onCrudSuccess,record,submit }) => {
...formData, ...formData,
...e, ...e,
caseDate: dayjs(e.caseDate).format("YYYY-MM-DD HH:mm:ss"), caseDate: dayjs(e.caseDate).format("YYYY-MM-DD HH:mm:ss"),
IllegalDate: e.IllegalDate ? dayjs(e.IllegalDate).format("YYYY-MM-DD HH:mm:ss") : e.IllegalDate, illegalDate: e.illegalDate ? dayjs(e.v).format("YYYY-MM-DD HH:mm:ss") : e.illegalDate,
} }
if (mode == 'save') { if (mode == 'save') {
@ -80,7 +92,8 @@ const Page = ({ mode, onCrudSuccess,record,submit }) => {
} }
useEffect(()=>{ useEffect(()=>{
if(mode == 'edit' || mode =='view'){ if(mode == 'edit' || mode =='view'){
httpget(apiurl.szzf.ajdj.detail + record.id).then(res=>{ httpget(apiurl.szzf.ajdj.detail + record.id).then(async res=>{
let obj = { let obj = {
createName: localStorage.getItem('userName'), createName: localStorage.getItem('userName'),
createTime: dayjs().format('YYYY-MM-DD HH:mm:ss'), createTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
@ -89,12 +102,12 @@ const Page = ({ mode, onCrudSuccess,record,submit }) => {
if(res.data?.caseDate){ if(res.data?.caseDate){
obj.caseDate=dayjs(res.data.caseDate) obj.caseDate=dayjs(res.data.caseDate)
} }
// if(res.data?.illegalDate){ if(res.data?.illegalDate){
// obj.illegalDate=dayjs(res.data.illegalDate) obj.illegalDate=dayjs(res.data.illegalDate)
// }
if(res.data.IllegalDate){
obj.IllegalDate = dayjs(res.data.IllegalDate)
} }
// if(res.data.IllegalDate){
// obj.IllegalDate = dayjs(res.data.IllegalDate)
// }
setFormData({...res.data,...obj}) setFormData({...res.data,...obj})
}) })
@ -113,7 +126,7 @@ const Page = ({ mode, onCrudSuccess,record,submit }) => {
<Tabs defaultActiveKey="1" items={items} onChange={onChange} /> <Tabs defaultActiveKey="1" items={items} onChange={onChange} />
<> <>
{key == 1 && <BascForm formJson={basicData} formJsonData={formData} fileKey='files1'type={mode} getFormInfo={getFormInfo} uploadUrl={apiurl.szzf.ajdj.upload} downloadUrl={apiurl.szzf.ajdj.download}></BascForm>} {key == 1 && <BascForm formJson={basicData} formJsonData={formData} fileKey='files1'type={mode} getFormInfo={getFormInfo} uploadUrl={apiurl.szzf.ajdj.upload} downloadUrl={apiurl.szzf.ajdj.download}></BascForm>}
{key == 2 && <BascForm formJson={clqkData} fileKey='files2' formJsonData={formData} type={mode} getFormInfo={getFormInfo} uploadUrl={apiurl.szzf.ajdj.upload} downloadUrl={apiurl.szzf.ajdj.download}></BascForm>} {key == 2 && <BascForm formJson={clqkDataConfig} fileKey='files2' formJsonData={formData} type={mode} getFormInfo={getFormInfo} uploadUrl={apiurl.szzf.ajdj.upload} downloadUrl={apiurl.szzf.ajdj.download}></BascForm>}
{key == 3 && <BascForm formJson={xzfy} formJsonData={formData} type={mode} getFormInfo={getFormInfo} uploadUrl={apiurl.szzf.ajdj.upload} downloadUrl={apiurl.szzf.ajdj.download}></BascForm>} {key == 3 && <BascForm formJson={xzfy} formJsonData={formData} type={mode} getFormInfo={getFormInfo} uploadUrl={apiurl.szzf.ajdj.upload} downloadUrl={apiurl.szzf.ajdj.download}></BascForm>}
{key == 4 && <Bajz formJson={xzfy} formJsonData={formData} type={mode} getFormInfo={getFormInfo} uploadUrl={apiurl.szzf.ajdj.upload} downloadUrl={apiurl.szzf.ajdj.download}></Bajz>} {key == 4 && <Bajz formJson={xzfy} formJsonData={formData} type={mode} getFormInfo={getFormInfo} uploadUrl={apiurl.szzf.ajdj.upload} downloadUrl={apiurl.szzf.ajdj.download}></Bajz>}
{key == 5 && <Lsyx formJson={xzfy} formJsonData={formData} type={mode} getFormInfo={getFormInfo} uploadUrl={apiurl.szzf.ajdj.upload} downloadUrl={apiurl.szzf.ajdj.download}></Lsyx>} {key == 5 && <Lsyx formJson={xzfy} formJsonData={formData} type={mode} getFormInfo={getFormInfo} uploadUrl={apiurl.szzf.ajdj.upload} downloadUrl={apiurl.szzf.ajdj.download}></Lsyx>}

View File

@ -166,6 +166,7 @@ const FormZdy = ({ fileKey,typeName = "ddForm", formJson, getFormInfo, type, for
<Form.Item <Form.Item
label={item.label} label={item.label}
name={item.key} name={item.key}
labelCol={item.labelCol}
rules={[{ required: item.required, message: '请输入' + item.label }]} rules={[{ required: item.required, message: '请输入' + item.label }]}
> >
<Input disabled={type == 'view' || item.disabled} placeholder={item.placeholder} addonAfter={item.addonAfter}/> <Input disabled={type == 'view' || item.disabled} placeholder={item.placeholder} addonAfter={item.addonAfter}/>

View File

@ -178,6 +178,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
onDrop={(info) => { console.log(info.dataTransfer.files); }} onDrop={(info) => { console.log(info.dataTransfer.files); }}
fileList={fileList} fileList={fileList}
disabled={loading} disabled={loading}
maxCount={1}
// onSuccess={handleSuccess} // onSuccess={handleSuccess}
> >
<p className="ant-upload-text">点击或拖拽文件到此区域上传</p> <p className="ant-upload-text">点击或拖拽文件到此区域上传</p>

View File

@ -1,40 +1,40 @@
export default function jgOption(data1) { export default function jgOption(data1) {
console.log("123",data1); console.log("123", data1);
const one = `${process.env.PUBLIC_URL}/assets/images/one.png`; const one = `${process.env.PUBLIC_URL}/assets/images/one.png`;
const two = `${process.env.PUBLIC_URL}/assets/images/two.png`; const two = `${process.env.PUBLIC_URL}/assets/images/two.png`;
const three = `${process.env.PUBLIC_URL}/assets/images/three.png`; const three = `${process.env.PUBLIC_URL}/assets/images/three.png`;
const four = `${process.env.PUBLIC_URL}/assets/images/four.png`; const four = `${process.env.PUBLIC_URL}/assets/images/four.png`;
return { return {
series: [{ series: [{
type: 'tree', type: 'tree',
id: 0, id: 0,
name: 'tree1', name: 'tree1',
data: data1, data: data1,
top: '10%', top: '10%',
left: '0%', left: '0%',
bottom: '20%', bottom: '20%',
right: '25%', right: '25%',
avoidLabelOverlap: true,//防止标签重叠 avoidLabelOverlap: true,//防止标签重叠
roam: true, //移动+缩放 'scale' 或 'zoom':只能够缩放。 'move' 或 'pan':只能够平移。 roam: true, //移动+缩放 'scale' 或 'zoom':只能够缩放。 'move' 或 'pan':只能够平移。
scaleLimit:{ //缩放比例 scaleLimit: { //缩放比例
min:0.7,//最小的缩放值 min: 0.7,//最小的缩放值
max:4,//最大的缩放值 max: 4,//最大的缩放值
}, },
layout: 'orthogonal',//树图布局orthogonal水平垂直方向radial径向布局 是指以根节点为圆心,每一层节点为环,一层层向外 layout: 'orthogonal',//树图布局orthogonal水平垂直方向radial径向布局 是指以根节点为圆心,每一层节点为环,一层层向外
orient: 'TB', //树形方向 TB为上下结构 LR为左右结构 orient: 'TB', //树形方向 TB为上下结构 LR为左右结构
// nodePadding: 100,//结点间距 (发现没用) // nodePadding: 100,//结点间距 (发现没用)
//layerPadding: 30,//连接线长度 (发现没用) //layerPadding: 30,//连接线长度 (发现没用)
symbol: 'circle', //图形形状 rect方形 roundRect圆角 emptyCircle圆形 circle实心圆 symbol: 'circle', //图形形状 rect方形 roundRect圆角 emptyCircle圆形 circle实心圆
symbolSize: 14, //状态大小 symbolSize: 14, //状态大小
edgeShape: 'polyline', //线条类型 curve曲线 edgeShape: 'polyline', //线条类型 curve曲线
initialTreeDepth: 3, //初始展开的层级 initialTreeDepth: 3, //初始展开的层级
expandAndCollapse: true,//子树折叠和展开的交互,默认打开 expandAndCollapse: true,//子树折叠和展开的交互,默认打开
lineStyle: {//结构线条样式 lineStyle: {//结构线条样式
width: 1, width: 1,
color: '#1E9FFF', color: '#1E9FFF',
type: 'solid' type: 'solid'
}, },
label: { label: {
// 每个节点对应的文本标签样式 // 每个节点对应的文本标签样式
show: true, // 是否显示标签 show: true, // 是否显示标签
@ -45,55 +45,28 @@ export default function jgOption(data1) {
align: 'center', // 文字水平对齐方式默认自动leftrightcenter align: 'center', // 文字水平对齐方式默认自动leftrightcenter
fontSize: 16, // 字体大小 fontSize: 16, // 字体大小
color: '#000', // 字体颜色 color: '#000', // 字体颜色
overflow: 'breakAll',
formatter: (params) => { formatter: (params) => {
let newName = '' let len = params.data.title
let len = params.data.title.length let str = `{parent3|${len}}`
let strLen = (params.data.parentId === 0 || params.data.parentId === 100 ) ? 100 : 1 //一行显示几个字 return str;
let rowNum = Math.ceil(len / strLen)
if (len > strLen) {
for (let p = 0; p < rowNum; p++) {
let tempStr = ''
let start = p * strLen
let end = start + strLen
if (p == rowNum - 1) {
tempStr = params.data.title.substring(start, len)
} else {
tempStr = params.data.title.substring(start, end) + '\n'
}
newName += tempStr
}
} else {
newName = params.data.title
}
let n = newName
if (n.length > 16) {
n = n.slice(0, 16) + '...'
}
let parentId = params.data.parentId
let userId = params.data.userId;
let str = parentId === 0 ? `{parent|${n}}` :
parentId === 100 ? `{parent1|${n}}` : userId != undefined ? `{parent3|${n}}` : `{parent2|${n}}`
// let str = parentId === 0 ? `<div class='org-parent'>${n}</div>` :
// parentId === 100 ? `<div class='org-parent1'>${n}</div>` : userId != undefined ? `<div class='org-parent3'>${n}</div>` : `<div class='org-parent2'>${n}</div>`
return str;
}, },
rich: { rich: {
parent: { parent: {
color: '#000', color: '#000',
padding: [20, 20], padding: [20, 20],
backgroundColor: { backgroundColor: {
image:one image: one
}, },
height: 40,
fontSize: 20 fontSize: 20
}, },
parent1: { parent1: {
color: '#000', color: '#000',
padding: [10, 10], padding: [10, 10],
backgroundColor: { backgroundColor: {
image:two image: two
}, },
fontSize: 18 fontSize: 18
}, },
@ -101,7 +74,7 @@ export default function jgOption(data1) {
fontSize: 18, fontSize: 18,
color: '#000', color: '#000',
align: 'center', align: 'center',
padding: [10, 10], padding: [10, 10],
backgroundColor: { backgroundColor: {
image: three, image: three,
repeat: "no-repeat", repeat: "no-repeat",
@ -110,6 +83,8 @@ export default function jgOption(data1) {
parent3: { parent3: {
color: '#000', color: '#000',
padding: [10, 10], padding: [10, 10],
width:10,
overflow:'break',
backgroundColor: { backgroundColor: {
image: four, image: four,
repeat: "no-repeat", repeat: "no-repeat",
@ -119,35 +94,35 @@ export default function jgOption(data1) {
} }
}, },
leaves: { //叶子节点文本样式 leaves: { //叶子节点文本样式
label: { label: {
// backgroundColor: '#81c5f7', // backgroundColor: '#81c5f7',
backgroundColor: '#fff', backgroundColor: '#fff',
color:'#333', color: '#333',
position: 'bottom', position: 'bottom',
rotate: 0,//标签旋转。 rotate: 0,//标签旋转。
verticalAlign: 'middle', verticalAlign: 'middle',
align: 'center', align: 'center',
//文本框内文字超过6个字折行 //文本框内文字超过6个字折行
// formatter: function(val) { // formatter: function(val) {
// let strs = val.name.split(''); //字符串数组 // let strs = val.name.split(''); //字符串数组
// let str = '' // let str = ''
// for(let i = 0, s; s = strs[i++];) { //遍历字符串数组 // for(let i = 0, s; s = strs[i++];) { //遍历字符串数组
// str += s; // str += s;
// if(!(i % 6)) str += '\n'; //按需要求余,目前是一个字换一行 // if(!(i % 6)) str += '\n'; //按需要求余,目前是一个字换一行
// } // }
// return str // return str
// }, // },
//或者 //或者
overflow:'break',//break为文字折行 truncate为文字超出部分省略号显示 overflow: 'break',//break为文字折行 truncate为文字超出部分省略号显示
lineOverflow:'truncate',//文字超出高度后 直接截取 lineOverflow: 'truncate',//文字超出高度后 直接截取
} }
}, },
expandAndCollapse: true, //默认展开树形结构 expandAndCollapse: true, //默认展开树形结构
animationDuration: 550, animationDuration: 550,
animationDurationUpdate: 750 animationDurationUpdate: 750
}] }]
}; };
} }