baozhangchao 3 years ago
parent
commit
9e1444b985

+ 79
- 0
src/pages/staff/Organization/TreeTitle.jsx View File

@@ -0,0 +1,79 @@
1
+import { Icon } from 'antd';
2
+import { useState } from 'react';
3
+
4
+export default (props) => {
5
+    const [isEdit, setIsEdit] = useState(false)
6
+    const [inputVal, setInputVal] = useState()
7
+    const { onAdd, onDelete, isDelete, onChange, value } = props
8
+
9
+    const handleClose = () => {
10
+        setIsEdit(false)
11
+        setInputVal(value)
12
+    }
13
+
14
+    const handleSave = () => {
15
+        onChange(inputVal)
16
+        setIsEdit(false)
17
+        setInputVal()
18
+    }
19
+
20
+    if (isEdit) {
21
+        return (
22
+
23
+            <div>
24
+                {/* 逻辑运算 OR  */}
25
+                {/* item项目value根据状态切换 */}
26
+                {/*onChange这个API是一个函数,并且需要返回值,API的返回值是onChange方法的返回值
27
+                e就是api的形参,这个参数的生成需要onChange的API触发,同时将e传给方法并获取其返回值
28
+                实参把值给形参,由形参保存。
29
+                这个e会获取到最新的变化值并且传到onchange方法
30
+                */}
31
+                <input value={inputVal} onChange={(e) => setInputVal(e.target.value)} />
32
+
33
+                <Icon
34
+                    //取消保存
35
+                    type="close-circle"
36
+                    theme="filled"
37
+
38
+                    style={{ marginLeft: 10 }}
39
+                    onClick={handleClose}//恢复默认值 
40
+                />
41
+                <Icon
42
+                    //保存节点
43
+                    type="check-circle"
44
+                    theme="filled"
45
+                    style={{ marginLeft: 10 }}
46
+                    onClick={handleSave}
47
+                />
48
+            </div>
49
+        )
50
+    }
51
+
52
+    return (
53
+        <div >
54
+            <span>{value}</span>
55
+            <span>
56
+                {/* 编辑edit onclick 拿到项目的key */}
57
+                <Icon
58
+                    type="edit"
59
+                    style={{ marginLeft: 10 }}
60
+                    onClick={() => setIsEdit(true)}
61
+                />
62
+                {/* 编辑plus onclick 拿到项目的key */}
63
+                <Icon
64
+                    type="plus"
65
+                    style={{ marginLeft: 10 }}
66
+                    onClick={onAdd}
67
+                />
68
+                {/* 先确认父key是不是绝对等于"0" */}
69
+                {isDelete && (
70
+                    <Icon
71
+                        type="delete"
72
+                        style={{ marginLeft: 10 }}
73
+                        onClick={onDelete}
74
+                    />
75
+                )}
76
+            </span>
77
+        </div>
78
+    )
79
+}

+ 4
- 0
src/pages/staff/Organization/form.jsx View File

@@ -0,0 +1,4 @@
1
+
2
+export default (props) => {
3
+
4
+}

+ 502
- 248
src/pages/staff/Organization/index.jsx View File

@@ -1,253 +1,507 @@
1
-import React, { useState } from "react";
2
-import { Tree, Icon, Card } from "antd";
3
-import { nanoid } from "nanoid";//生成唯一id
4
-import { duration } from "moment";
5
-
6
-const { TreeNode } = Tree;
7
-//树形数据
8
-const treeData = [
9
-  {
10
-    value: "0",
11
-    defaultValue: "0",
12
-    key: "0",
13
-    parentKey: '0',
14
-    isEditable: false,
15
-    children: [
16
-      {
17
-        value: "0",
18
-        key: "0-1",
19
-        defaultValue: "0-1",
20
-        isEditable: false,
21
-      },
22
-    ],
23
-  },
24
-
25
-];
26
-
27
-const expandedKeyArr = ["0"];
28
-export default function TreeDemo() {
29
-  const [data, setData] = useState(treeData);//获取值,及时更新被修改的值。变量
30
-  const [expandedKeys, setExpandedKeys] = useState(expandedKeyArr);//状态
31
-  const onExpand = (expandedKeys) => {
32
-    //记录折叠的key值
33
-    setExpandedKeys(expandedKeys);
34
-  };
35
-  //开始渲染树形节点 data拿到数据
36
-  const renderTreeNodes = (data) => {
37
-    //遍历项目
38
-    let nodeArr = data.map((item) => {
39
-      //项目编辑内容=title
40
-      if (item.isEditable) {
41
-        item.title = (
42
-          <div>
43
-            {/* 逻辑运算 OR  */}
44
-            {/* item项目value根据状态切换 */}
45
-            {/*onChange这个API是一个函数,并且需要返回值,API的返回值是onChange方法的返回值
46
-            e就是api的形参,这个参数的生成需要onChange的API触发,同时将e传给方法并获取其返回值
47
-            实参把值给形参,由形参保存。
48
-
49
-            这个e会获取到最新的变化值并且传到onchange方法
50
-            */}
51
-            <input value={item.value || ''} onChange={(e) => onChange(e, item.key)} />
52
-
53
-            <Icon
54
-              //取消保存
55
-              type="close-circle"
56
-              theme="filled"
57
-
58
-              style={{ marginLeft: 10 }}
59
-              onClick={() => onClose(item.key, item.defaultValue)}//恢复默认值 
60
-            />
61
-            <Icon
62
-              //保存节点
63
-              type="check-circle"
64
-              theme="filled"
65
-              style={{ marginLeft: 10 }}
66
-              onClick={() => onSave(item.key)}
67
-            />
68
-          </div>
69
-        );
70
-      } else {
71
-        //放在标题旁边
72
-        item.title = (
73
-          <div >
74
-            <span>{item.value}</span>
75
-            <span>
76
-              {/* 编辑edit onclick 拿到项目的key */}
77
-              <Icon
78
-                type="edit"
79
-                style={{ marginLeft: 10 }}
80
-                onClick={() => onEdit(item.key)}
81
-              />
82
-              {/* 编辑plus onclick 拿到项目的key */}
83
-              <Icon
84
-                type="plus"
85
-                style={{ marginLeft: 10 }}
86
-                onClick={() => onAdd(item.key)}
87
-              />
88
-              {/* 先确认父key是不是绝对等于"0" */}
89
-              {item.parentKey === "0" ? null : (
90
-                <Icon
91
-                  type="delete"
92
-                  style={{ marginLeft: 10 }}
93
-                  onClick={() => onDelete(item.key)}
94
-                />
95
-              )}
96
-            </span>
97
-          </div>
98
-        );
99
-      }
100
-      //更新数据----------------------------
101
-      if (item.children) {
102
-        return (
103
-          <TreeNode title={item.title} key={item.key} dataRef={item}>
104
-            {/* 渲染 */}
105
-            {renderTreeNodes(item.children)}
106
-          </TreeNode>
107
-        );
108
-      }
109
-      //返回他的标题,和key值
110
-      return <TreeNode title={item.title} key={item.key} />;
111
-    });
112
-    //返回节点
113
-    return nodeArr;
1
+// import React, { useState } from "react";
2
+// import { Tree, Icon, Card } from "antd";
3
+// import { nanoid } from "nanoid";//生成唯一id
4
+// import { duration } from "moment";
5
+// import TreeTitle from './TreeTitle'
6
+
7
+// const { TreeNode } = Tree;
8
+// //树形数据
9
+// const treeData = [
10
+//   {
11
+//     value: "0",
12
+//     defaultValue: "0",
13
+//     key: "0",
14
+//     parentKey: '0',
15
+//     isEditable: false,
16
+//     children: [
17
+//       {
18
+//         value: "0",
19
+//         key: "0-1",
20
+//         defaultValue: "0-1",
21
+//         isEditable: false,
22
+//       },
23
+//     ],
24
+//   },
25
+
26
+// ];
27
+
28
+// const expandedKeyArr = ["0"];
29
+// export default function TreeDemo() {
30
+//   const [data, setData] = useState(treeData);//获取值,及时更新被修改的值。变量
31
+//   const [expandedKeys, setExpandedKeys] = useState(expandedKeyArr);//状态
32
+//   // const onExpand = (expandedKeys) => {
33
+//   //   //记录折叠的key值
34
+//   //   setExpandedKeys(expandedKeys);
35
+//   // };
36
+//   //开始渲染树形节点 data拿到数据
37
+//   const renderTreeNodes = (data) => {
38
+//     //遍历项目
39
+//     let nodeArr = data.map((item) => {
40
+
41
+//       const Title = (
42
+//         <TreeTitle
43
+//           value={item.value}
44
+//           isDelete={item.parentKey !== "0"}
45
+//           onAdd={() => onAdd(item.key)}
46
+//           onDelete={() => onDelete(item.key)}
47
+//           onChange={(val) => onChange(val, item.key)}
48
+//         />
49
+//       );
50
+//       if (item.children) {
51
+//         return (
52
+//           <TreeNode title={Title} key={item.key} dataRef={item}>
53
+//             {/* 渲染 */}
54
+//             {renderTreeNodes(item.children)}
55
+//           </TreeNode>
56
+//         );
57
+//       }
58
+//       //返回他的标题,和key值
59
+//       return <TreeNode title={Title} key={item.key} />;
60
+//     });
61
+//     //返回节点
62
+//     return nodeArr;
63
+//   }
64
+//   //新增
65
+//   const onAdd = (key) => {
66
+//     if (expandedKeys.indexOf(key) === -1) {
67
+//       expandedKeyArr.push(key);
68
+//     }
69
+//     setExpandedKeys(expandedKeyArr.slice());
70
+//     addNode(key, treeData);//添加节点 树形
71
+//     //useState里数据务必为immutable (不可赋值的对象),所以必须加上slice()返回一个新的数组对象
72
+//     setData(treeData.slice());//添加子项
73
+//   };
74
+//   //编辑
75
+//   //拿到key treeData数据--setData设置数据---slice删除数据中已返回的元素  [aa,bb,cc,dd,ee]--slice(2)输出[cc,dd,ee]
76
+//   const onEdit = (key) => {
77
+//     editNode(key, treeData);
78
+//     setData(treeData.slice());
79
+//   };
80
+//   const editNode = (key, data) =>
81
+//     data.forEach((item) => {
82
+//       if (item.key === key) {
83
+//         //编辑状态 true
84
+
85
+//         item.isEditable = true;
86
+//       } else {
87
+
88
+//         //编辑状态 false
89
+//         item.isEditable = false;
90
+//       }
91
+//       item.value = item.defaultValue; // 当某节点处于编辑状态,并改变数据,点击编辑其他节点时,此节点变成不可编辑状态,value 需要回退到 defaultvalue
92
+//       //当某子项处于编辑状态,改变数据,点击其他时候,此项变成不可编辑
93
+//       if (item.children) {
94
+//         editNode(key, item.children);
95
+//         //编辑子节点
96
+//       }
97
+//     });
98
+
99
+//   const addNode = (key, data) =>
100
+//     data.forEach((item) => {
101
+//       if (item.key === key) {//如果拿到的key相同则判断子项
102
+//         if (item.children) {
103
+//           item.children.push({
104
+//             value: "default",//创建新的子项默认值
105
+//             key: nanoid(), // 这个 key 应该是唯一的
106
+//           });
107
+//         } else {
108
+//           item.children = [];
109
+//           item.children.push({
110
+//             value: "default",
111
+//             key: nanoid(),
112
+//           });
113
+//         }
114
+//         return;
115
+//       }
116
+//       if (item.children) {
117
+//         addNode(key, item.children);
118
+//       }
119
+//     });
120
+
121
+//   const onChange = (val, key) => {
122
+//     changeNode(key, val, treeData);
123
+//     setData(treeData.slice());
124
+//   };
125
+
126
+//   const changeNode = (key, value, data) =>
127
+//     data.forEach((item) => {
128
+//       if (item.key === key) {//新增子项内容赋值
129
+//         item.value = value;
130
+//       }
131
+//       if (item.children) {
132
+//         changeNode(key, value, item.children);//子项
133
+//       }
134
+//     });
135
+
136
+//   //确认保存节点
137
+//   const saveNode = (key, data) =>
138
+//     data.forEach((item) => {
139
+//       if (item.key === key) {
140
+//         item.defaultValue = item.value;//item.value内容赋值给defaultValue
141
+//       }
142
+//       //子项保存不能编辑
143
+//       if (item.children) {
144
+//         saveNode(key, item.children);
145
+//       }
146
+//       //项目是否能编辑
147
+//       item.isEditable = false;
148
+//     });
149
+
150
+//   //取消确认
151
+//   const closeNode = (key, defaultValue, data) =>
152
+//     data.forEach((item) => {
153
+//       item.isEditable = false;
154
+//       if (item.key === key) {
155
+//         item.value = defaultValue;
156
+//       }
157
+//       if (item.children) {
158
+//         closeNode(key, defaultValue, item.children);
159
+//       }
160
+//     });
161
+//   // slice() 方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。
162
+//   const onDelete = (key) => {
163
+//     deleteNode(key, treeData);
164
+//     setData(treeData.slice());
165
+//   };
166
+//   //删除节点
167
+//   const deleteNode = (key, data) =>
168
+//     //拿到每个key数据, 如果要删除的key相同,则删除,并返回。如果不同判断子项
169
+//     data.forEach((item, index) => {
170
+//       if (item.key === key) {
171
+//         data.splice(index, 1);//从某个位置开始删除元素
172
+//         return;
173
+//       } else {
174
+//         if (item.children) {
175
+//           deleteNode(key, item.children);
176
+//         }
177
+//       }
178
+//     });
179
+
180
+//   return (
181
+//     <div>
182
+//       <Card style={{ width: '90%' }}>
183
+//         <Tree
184
+//           switcherIcon={<Icon type="down-square" theme="filled" />}
185
+//           expandedKeys={expandedKeys}
186
+//         // onExpand={onExpand}
187
+//         >
188
+//           {renderTreeNodes(data)}
189
+//         </Tree>
190
+//       </Card>
191
+
192
+//     </div>
193
+//   );
194
+// }
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+import { Row, Col, Card, Tree, DatePicker, Form, Input, InputNumber, Radio, Button } from 'antd'
209
+import React, { useEffect, useState, useCallback } from 'react';
210
+import ImageUpload from '@/components/XForm/ImageUpload';
211
+
212
+// import userTrees from './tree'
213
+
214
+const { TreeNode, DirectoryTree } = Tree
215
+const FormItem = Form.Item;
216
+
217
+
218
+
219
+
220
+const userTree = React.forwardRef((props, ref) => {
221
+  const [loading, setLoading] = useState(false);//防止多次点击 定义loadind
222
+  const [formData, setFormData] = useState();//提交表单的数据
223
+  const [contentType, setContentType] = useState(1);//单选。初始默认显示1 富文本框。点击视频, 渲染2
224
+  const { form, history } = props;
225
+  const { getFieldDecorator, setFieldsValue, validateFields } = form;
226
+  const { curriculumId } = history.location.query || {}
227
+  function goBack() {
228
+    window.history.back(-1)
114 229
   }
115
-  //新增
116
-  const onAdd = (key) => {
117
-    if (expandedKeys.indexOf(key) === -1) {
118
-      expandedKeyArr.push(key);
119
-    }
120
-    setExpandedKeys(expandedKeyArr.slice());
121
-    addNode(key, treeData);//添加节点 树形
122
-    //useState里数据务必为immutable (不可赋值的对象),所以必须加上slice()返回一个新的数组对象
123
-    setData(treeData.slice());//添加子项
124
-  };
125
-  //编辑
126
-  //拿到key treeData数据--setData设置数据---slice删除数据中已返回的元素  [aa,bb,cc,dd,ee]--slice(2)输出[cc,dd,ee]
127
-  const onEdit = (key) => {
128
-    editNode(key, treeData);
129
-    setData(treeData.slice());
130
-  };
131
-  const editNode = (key, data) =>
132
-    data.forEach((item) => {
133
-      if (item.key === key) {
134
-        //编辑状态 true
135
-
136
-        item.isEditable = true;
137
-      } else {
138
-
139
-        //编辑状态 false
140
-        item.isEditable = false;
141
-      }
142
-      item.value = item.defaultValue; // 当某节点处于编辑状态,并改变数据,点击编辑其他节点时,此节点变成不可编辑状态,value 需要回退到 defaultvalue
143
-      //当某子项处于编辑状态,改变数据,点击其他时候,此项变成不可编辑
144
-      if (item.children) {
145
-        editNode(key, item.children);
146
-        //编辑子节点
147
-      }
148
-    });
149
-
150
-  const addNode = (key, data) =>
151
-    data.forEach((item) => {
152
-      if (item.key === key) {//如果拿到的key相同则判断子项
153
-        if (item.children) {
154
-          item.children.push({
155
-            value: "default",//创建新的子项默认值
156
-            key: nanoid(), // 这个 key 应该是唯一的
157
-          });
158
-        } else {
159
-          item.children = [];
160
-          item.children.push({
161
-            value: "default",
162
-            key: nanoid(),
163
-          });
164
-        }
165
-        return;
166
-      }
167
-      if (item.children) {
168
-        addNode(key, item.children);
169
-      }
170
-    });
171
-
172
-  const onChange = (e, key) => {
173
-    changeNode(key, e.target.value, treeData);
174
-    setData(treeData.slice());
175
-  };
176 230
 
177
-  const changeNode = (key, value, data) =>
178
-    data.forEach((item) => {
179
-      if (item.key === key) {//新增子项内容赋值
180
-        item.value = value;
181
-      }
182
-      if (item.children) {
183
-        changeNode(key, value, item.children);//子项
184
-      }
185
-    });
186
-
187
-  const onSave = (key) => {
188
-    saveNode(key, treeData);
189
-    setData(treeData.slice());
190
-  };
191
-  //确认保存节点
192
-  const saveNode = (key, data) =>
193
-    data.forEach((item) => {
194
-      if (item.key === key) {
195
-        item.defaultValue = item.value;//item.value内容赋值给defaultValue
196
-      }
197
-      //子项保存不能编辑
198
-      if (item.children) {
199
-        saveNode(key, item.children);
200
-      }
201
-      //项目是否能编辑
202
-      item.isEditable = false;
203
-    });
204
-
205
-  const onClose = (key, defaultValue) => {
206
-    closeNode(key, defaultValue, treeData);
207
-    //项目关闭,获取treeData树数据值
208
-    setData(treeData);
209
-  };
210
-  //取消确认
211
-  const closeNode = (key, defaultValue, data) =>
212
-    data.forEach((item) => {
213
-      item.isEditable = false;
214
-      if (item.key === key) {
215
-        item.value = defaultValue;
216
-      }
217
-      if (item.children) {
218
-        closeNode(key, defaultValue, item.children);
219
-      }
220
-    });
221
-  // slice() 方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。
222
-  const onDelete = (key) => {
223
-    deleteNode(key, treeData);
224
-    setData(treeData.slice());
231
+  const formItemLayout = {
232
+    //布局
233
+    labelCol: { span: 6 },
234
+    wrapperCol: { span: 14 },
235
+
225 236
   };
226
-  //删除节点
227
-  const deleteNode = (key, data) =>
228
-    //拿到每个key数据, 如果要删除的key相同,则删除,并返回。如果不同判断子项
229
-    data.forEach((item, index) => {
230
-      if (item.key === key) {
231
-        data.splice(index, 1);//从某个位置开始删除元素
232
-        return;
233
-      } else {
234
-        if (item.children) {
235
-          deleteNode(key, item.children);
236
-        }
237
-      }
238
-    });
239 237
 
240 238
   return (
241
-    <div>
242
-      <Card style={{ width: '90%' }}>
243
-        <Tree
244
-          switcherIcon={<Icon type="down-square" theme="filled" />}
245
-          expandedKeys={expandedKeys}
246
-          onExpand={onExpand}>
247
-          {renderTreeNodes(data)}
248
-        </Tree>
249
-      </Card>
250
-
251
-    </div>
252
-  );
253
-}
239
+    <Card>
240
+      <Row justify='center'>
241
+        <Col xs={{ span: 5, offset: 1 }} lg={{ span: 6, offset: 0 }}>
242
+          <Card>
243
+            <DirectoryTree multiple>
244
+              <TreeNode title="parent 0" key="0-0">
245
+                <TreeNode title="leaf 0-0" key="0-0-0" isLeaf />
246
+                <TreeNode title="leaf 0-1" key="0-0-1" isLeaf />
247
+              </TreeNode>
248
+              <TreeNode title="parent 1" key="0-1">
249
+                <TreeNode title="leaf 1-0" key="0-1-0" isLeaf />
250
+                <TreeNode title="leaf 1-1" key="0-1-1" isLeaf />
251
+                <TreeNode title="leaf 1-1" key="0-1-2" isLeaf />
252
+                <TreeNode title="leaf 1-1" key="0-1-3" isLeaf />
253
+                <TreeNode title="leaf 1-1" key="0-1-4" isLeaf />
254
+                <TreeNode title="leaf 1-1" key="0-1-5" isLeaf />
255
+              </TreeNode>
256
+            </DirectoryTree>
257
+          </Card>
258
+        </Col>
259
+        {/* FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF>Form表单 */}
260
+        <Col xs={{ span: 10, offset: 10 }} lg={{ span: 10, offset: 4 }}>
261
+          <Card>
262
+            <Form {...formItemLayout} >
263
+              <FormItem label="照片" help="建议尺寸:750px*600px,比例5:4,格式:jpg,用于:列表和详情">
264
+                {
265
+                  getFieldDecorator('curriculumImg', {
266
+                    rules: [
267
+                      { required: true, message: '请上传照片' }
268
+                    ]
269
+                  })(
270
+                    <ImageUpload />
271
+                  )
272
+                }
273
+              </FormItem>
274
+              <FormItem label="姓名">
275
+                {
276
+                  getFieldDecorator('name', {
277
+                    rules: [
278
+                      { required: true, message: '请输入姓名' }
279
+                    ]
280
+                  })(
281
+                    <Input style={{ width: '88px' }} />
282
+                  )
283
+                }
284
+              </FormItem>
285
+              <FormItem label="年龄" >
286
+                {
287
+                  getFieldDecorator('weight', {
288
+                    rules: [{ required: true, message: '请输入年龄' }]
289
+                  })(
290
+                    <InputNumber min='18' />
291
+                  )
292
+                }
293
+              </FormItem>
294
+
295
+              <FormItem label="性别">
296
+                {
297
+                  getFieldDecorator('type', {
298
+                    rules: [
299
+                      { required: true, message: '请选择性别' }
300
+                    ]
301
+                  })(
302
+                    <Radio.Group value={contentType} style={{ width: '500px' }} defaultValue={1}>
303
+                      {/* onChange={e => setContentType(e.target.value)} */}
304
+                      <Radio value={1}>男</Radio>
305
+                      <Radio value={2}>女</Radio>
306
+                    </Radio.Group>
307
+                  )
308
+                }
309
+              </FormItem>
310
+              <Form.Item label="工作总时间" style={{ marginBottom: 0 }} help="如未离职,第二个日期则不用输入">
311
+                <Form.Item style={{ display: 'inline-block' }} >
312
+                  <DatePicker />
313
+                </Form.Item>
314
+                <span style={{ display: 'inline-block', width: '20px', textAlign: 'center' }}>至</span>
315
+                <Form.Item style={{ display: 'inline-block' }}>
316
+                  <DatePicker />
317
+                </Form.Item>
318
+              </Form.Item>
319
+
320
+              <FormItem wrapperCol={{ span: 12, offset: 6 }}>
321
+                <Button loading={loading} type="primary" htmlType="">
322
+                  保存
323
+                </Button>
324
+                <Button style={{ marginLeft: '2em' }} onClick={goBack}>
325
+                  返回
326
+                </Button>
327
+                <Button type='danger' style={{ marginLeft: '2em' }} >
328
+                  删除
329
+                </Button>
330
+              </FormItem>
331
+            </Form>
332
+          </Card>
333
+        </Col>
334
+      </Row>
335
+    </Card>
336
+
337
+  )
338
+})
339
+
340
+
341
+
342
+// import React, { useEffect, useState, useCallback } from 'react';
343
+// import { Button, Form, Select, Input, InputNumber, Radio, message, DatePicker, Card } from 'antd';
344
+// import ImageUpload from '@/components/XForm/ImageUpload';
345
+// import FileUpload from '@/components/XForm/FileUpload';
346
+// import Wangedit from '@/components/Wangedit/Wangedit';
347
+// import router from 'umi/router';
348
+// import { fetch, apis } from '@/utils/request';
349
+
350
+// const FormItem = Form.Item;
351
+// const Option = Select.Option;
352
+// // const getCurriculumData = fetch(apis.course.searchCourse);
353
+// // const saveCurriculumData = fetch(apis.course.addCourse);
354
+// // const updateCurriculumData = fetch(apis.course.alterCourse);
355
+// const goBack = () => router.goBack(-1);
356
+
357
+// const userTree = React.forwardRef((props, ref) => {
358
+//   const [loading, setLoading] = useState(false);//防止多次点击 定义loadind
359
+//   const [formData, setFormData] = useState();//提交表单的数据
360
+//   const [contentType, setContentType] = useState(1);//单选。初始默认显示1 富文本框。点击视频, 渲染2
361
+//   const { form, history } = props;
362
+//   const { getFieldDecorator, setFieldsValue, validateFields } = form;
363
+//   const { curriculumId } = history.location.query || {}
364
+
365
+//   const formItemLayout = {
366
+//     //布局
367
+//     labelCol: { span: 6 },
368
+//     wrapperCol: { span: 14 },
369
+
370
+//   };
371
+
372
+//   const handleSubmit = (e) => {
373
+//     e.preventDefault();
374
+//     validateFields((err, values) => {
375
+//       if (err) {
376
+//         return;
377
+//         //字符验证未填写---返回
378
+//       }
379
+
380
+//       setLoading(true);//loading开始
381
+
382
+//       if (curriculumId) {
383
+//         //如果有这个id拿。没有就,拿返回的curriculumId
384
+//         updateCurriculumData({
385
+//           data: {
386
+//             ...values,
387
+//             curriculumId
388
+//           },
389
+//           urlData: { id: curriculumId }
390
+//         }).then(() => {
391
+//           setLoading(false);
392
+//           message.success('数据更新成功');
393
+//           goBack()
394
+//         }).catch((err) => {
395
+//           setLoading(false);//loading消失
396
+//           message.error(err.message || err);
397
+//         })
398
+//       } else {
399
+//         saveCurriculumData({ data: values }).then(() => {
400
+//           setLoading(false);
401
+//           message.success('数据保存成功');
402
+//           goBack()
403
+//         }).catch((err) => {
404
+//           setLoading(false);//loading消失
405
+//           message.error(err.message || err);
406
+//         })
407
+//       }
408
+//     });
409
+//   }
410
+
411
+//   const getCourseData = useCallback(({ curriculumId }) => {//函数结果存 初始化运行一次,等待调用。
412
+//     getCurriculumData({ urlData: { id: curriculumId } }).then((res) => {
413
+//       setFormData(res)
414
+//     })
415
+//   }, [])
416
+
417
+//   useEffect(() => {
418
+//     if (curriculumId) {
419
+//       getCourseData({ curriculumId })//第一次渲染前//获取id
420
+//     }
421
+//   }, [curriculumId])//第二次id一样不执行
422
+
423
+//   useEffect(() => {
424
+//     if (formData) {//1.form表单数据{2} 执行。无变更不执行
425
+//       setFieldsValue(formData)
426
+//     }
427
+//   }, [formData])//2.有变更跟的话
428
+
429
+
430
+//   return (
431
+//     <Card>
432
+//       <Form {...formItemLayout} onSubmit={handleSubmit}>
433
+//         <FormItem label="照片" help="建议尺寸:750px*600px,比例5:4,格式:jpg,用于:列表和详情">
434
+//           {
435
+//             getFieldDecorator('curriculumImg', {
436
+//               rules: [
437
+//                 { required: true, message: '请上传照片' }
438
+//               ]
439
+//             })(
440
+//               <ImageUpload />
441
+//             )
442
+//           }
443
+//         </FormItem>
444
+//         <FormItem label="姓名">
445
+//           {
446
+//             getFieldDecorator('name', {
447
+//               rules: [
448
+//                 { required: true, message: '请输入姓名' }
449
+//               ]
450
+//             })(
451
+//               <Input style={{ width: '88px' }} />
452
+//             )
453
+//           }
454
+//         </FormItem>
455
+//         <FormItem label="年龄" >
456
+//           {
457
+//             getFieldDecorator('weight', {
458
+//               rules: [{ required: true, message: '请输入年龄' }]
459
+//             })(
460
+//               <InputNumber min='18' />
461
+//             )
462
+//           }
463
+//         </FormItem>
464
+
465
+//         <FormItem label="性别">
466
+//           {
467
+//             getFieldDecorator('type', {
468
+//               rules: [
469
+//                 { required: true, message: '请选择性别' }
470
+//               ]
471
+//             })(
472
+//               <Radio.Group value={contentType} style={{ width: '500px' }} defaultValue={1}>
473
+//                 {/* onChange={e => setContentType(e.target.value)} */}
474
+//                 <Radio value={1}>男</Radio>
475
+//                 <Radio value={2}>女</Radio>
476
+//               </Radio.Group>
477
+//             )
478
+//           }
479
+//         </FormItem>
480
+//         <Form.Item label="工作总时间" style={{ marginBottom: 0 }} help="如未离职,第二个日期则不用输入">
481
+//           <Form.Item style={{ display: 'inline-block' }} >
482
+//             <DatePicker />
483
+//           </Form.Item>
484
+//           <span style={{ display: 'inline-block', width: '20px', textAlign: 'center' }}>至</span>
485
+//           <Form.Item style={{ display: 'inline-block' }}>
486
+//             <DatePicker />
487
+//           </Form.Item>
488
+//         </Form.Item>
489
+
490
+//         <FormItem wrapperCol={{ span: 12, offset: 6 }}>
491
+//           <Button loading={loading} type="primary" htmlType="">
492
+//             保存
493
+//           </Button>
494
+//           <Button style={{ marginLeft: '2em' }} onClick={goBack}>
495
+//             返回
496
+//           </Button>
497
+//           <Button type='danger' style={{ marginLeft: '2em' }} >
498
+//             删除
499
+//           </Button>
500
+//         </FormItem>
501
+//       </Form>
502
+//     </Card>
503
+
504
+//   )
505
+// })
506
+
507
+export default Form.create({})(userTree);