@hzab/flowlong-designer 1.0.6 → 1.0.7-beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/package.json +1 -1
- package/src/components/NodeWrap/Nodes/Approver/index.tsx +189 -25
- package/src/components/NodeWrap/Nodes/Approver/options.ts +46 -45
- package/src/components/NodeWrap/Nodes/Branch/components/Field/index.tsx +59 -39
- package/src/components/NodeWrap/Nodes/Branch/components/GroupUserSelectorModal/index.tsx +134 -134
- package/src/components/NodeWrap/Nodes/Branch/index.tsx +19 -0
- package/src/components/NodeWrap/Nodes/Promoter/index.tsx +1 -6
- package/src/components/NodeWrap/Nodes/Send/index.tsx +578 -416
- package/src/components/NodeWrap/Nodes/Send/options.ts +46 -45
- package/src/components/NodeWrap/components/SignatureConfiguration/index.less +1 -1
- package/src/components/NodeWrap/components/SignatureConfiguration/index.tsx +32 -22
- package/src/index.tsx +182 -182
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
|
@@ -16,6 +16,13 @@ export const Approver = (props) => {
|
|
|
16
16
|
nodeName: "",
|
|
17
17
|
setType: undefined,
|
|
18
18
|
nodeAssigneeList: [],
|
|
19
|
+
extendConfig: {
|
|
20
|
+
directorWorkAddr: false,
|
|
21
|
+
directorLevel: undefined,
|
|
22
|
+
approvalEnd: undefined,
|
|
23
|
+
isChecked: false,
|
|
24
|
+
directorUsers: [],
|
|
25
|
+
},
|
|
19
26
|
directorMode: undefined,
|
|
20
27
|
termAuto: false,
|
|
21
28
|
examineLevel: undefined,
|
|
@@ -36,7 +43,17 @@ export const Approver = (props) => {
|
|
|
36
43
|
|
|
37
44
|
function onShow() {
|
|
38
45
|
setDrawer(true);
|
|
39
|
-
|
|
46
|
+
const newValue = JSON.parse(JSON.stringify(modelValue));
|
|
47
|
+
const { extendConfig } = newValue;
|
|
48
|
+
if (extendConfig?.directorWorkAddr || extendConfig?.directorUsers?.length > 0) {
|
|
49
|
+
newValue.extendConfig.isChecked = true;
|
|
50
|
+
if (extendConfig.directorWorkAddr) {
|
|
51
|
+
newValue.extendConfig.approvalEnd = 1; // 直到驻点队长
|
|
52
|
+
} else {
|
|
53
|
+
newValue.extendConfig.approvalEnd = 2; // 直到指定用户
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
setForm(newValue);
|
|
40
57
|
}
|
|
41
58
|
|
|
42
59
|
function onNodeDel(e) {
|
|
@@ -72,6 +89,18 @@ export const Approver = (props) => {
|
|
|
72
89
|
return "连续多级主管";
|
|
73
90
|
} else if (nodeConf.setType == 9) {
|
|
74
91
|
return "驻点队长";
|
|
92
|
+
} else if (nodeConf.setType == 20) {
|
|
93
|
+
let users = "";
|
|
94
|
+
if (
|
|
95
|
+
nodeConf.extendConfig &&
|
|
96
|
+
nodeConf.extendConfig.directorUsers &&
|
|
97
|
+
nodeConf.extendConfig.directorUsers.length > 0
|
|
98
|
+
) {
|
|
99
|
+
users = nodeConf.extendConfig.directorUsers.map((item) => item.name).join("、");
|
|
100
|
+
}
|
|
101
|
+
return `发起人向上的第${nodeConf.extendConfig?.directorLevel}级主管 ${
|
|
102
|
+
nodeConf.extendConfig?.directorWorkAddr ? "直到驻点队长" : users ? "直到" + users : ""
|
|
103
|
+
}`;
|
|
75
104
|
}
|
|
76
105
|
}
|
|
77
106
|
|
|
@@ -93,15 +122,30 @@ export const Approver = (props) => {
|
|
|
93
122
|
|
|
94
123
|
function onDrawerSave() {
|
|
95
124
|
signatureConfigurationRef.current.form.validateFields().then((res) => {
|
|
125
|
+
const { extendConfig = {} }: any = form;
|
|
126
|
+
extendConfig["confirmTxt"] = res?.extendConfig?.confirmTxt;
|
|
127
|
+
extendConfig["needConfirm"] = res?.extendConfig?.needConfirm;
|
|
128
|
+
extendConfig["needSign"] = res?.extendConfig?.needSign;
|
|
129
|
+
extendConfig["usePreSign"] = res?.extendConfig?.usePreSign;
|
|
96
130
|
const newValue = {
|
|
97
131
|
...form,
|
|
98
|
-
extendConfig: {
|
|
99
|
-
needSign: res?.needSign, //当前节点需要签名
|
|
100
|
-
needConfirm: res?.needConfirm, //当前节点需要二次确认
|
|
101
|
-
confirmTxt: res?.confirmTxt,
|
|
102
|
-
usePreSign: res?.usePreSign,
|
|
103
|
-
},
|
|
104
132
|
};
|
|
133
|
+
if (form.setType == "20") {
|
|
134
|
+
if (!extendConfig?.isChecked) {
|
|
135
|
+
newValue.extendConfig.directorUsers = [];
|
|
136
|
+
newValue.extendConfig.directorWorkAddr = false;
|
|
137
|
+
} else {
|
|
138
|
+
if (extendConfig?.approvalEnd == 2) {
|
|
139
|
+
newValue.extendConfig.directorWorkAddr = false;
|
|
140
|
+
} else {
|
|
141
|
+
newValue.extendConfig.directorWorkAddr = true;
|
|
142
|
+
newValue.extendConfig.directorUsers = [];
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
delete newValue.extendConfig?.approvalEnd;
|
|
146
|
+
delete newValue.extendConfig?.isChecked;
|
|
147
|
+
}
|
|
148
|
+
|
|
105
149
|
setForm(newValue);
|
|
106
150
|
// 强制更新数据
|
|
107
151
|
onChange && onChange(newValue);
|
|
@@ -194,6 +238,7 @@ export const Approver = (props) => {
|
|
|
194
238
|
name="approverForm"
|
|
195
239
|
labelCol={{ span: 8 }}
|
|
196
240
|
wrapperCol={{ span: 16 }}
|
|
241
|
+
preserve={false}
|
|
197
242
|
initialValues={form}
|
|
198
243
|
autoComplete="off"
|
|
199
244
|
>
|
|
@@ -206,7 +251,20 @@ export const Approver = (props) => {
|
|
|
206
251
|
setForm((f) => {
|
|
207
252
|
// 清空 人员、角色 列表数组
|
|
208
253
|
f.nodeAssigneeList = [];
|
|
254
|
+
f.extendConfig = {
|
|
255
|
+
...f.extendConfig,
|
|
256
|
+
directorWorkAddr: false,
|
|
257
|
+
directorLevel: undefined,
|
|
258
|
+
approvalEnd: undefined,
|
|
259
|
+
isChecked: false,
|
|
260
|
+
directorUsers: [],
|
|
261
|
+
};
|
|
209
262
|
f.setType = val;
|
|
263
|
+
if (val == 20) {
|
|
264
|
+
f.examineMode = 1;
|
|
265
|
+
} else {
|
|
266
|
+
f.examineMode = undefined;
|
|
267
|
+
}
|
|
210
268
|
return { ...f };
|
|
211
269
|
});
|
|
212
270
|
}}
|
|
@@ -214,8 +272,108 @@ export const Approver = (props) => {
|
|
|
214
272
|
/>
|
|
215
273
|
</Form.Item>
|
|
216
274
|
|
|
217
|
-
{form.setType ===
|
|
218
|
-
|
|
275
|
+
{form.setType === 20 ? (
|
|
276
|
+
<>
|
|
277
|
+
<Form.Item label="审批截止至发起人向上的第" name={["extendConfig", "directorLevel"]} key={form.setType}>
|
|
278
|
+
<Select
|
|
279
|
+
disabled={readOnly}
|
|
280
|
+
className={`${readOnly ? "readonly-select" : ""}`}
|
|
281
|
+
onSelect={(val) => {
|
|
282
|
+
setForm((f) => {
|
|
283
|
+
// 清空 人员、角色 列表数组
|
|
284
|
+
f.extendConfig = {
|
|
285
|
+
...f.extendConfig,
|
|
286
|
+
directorLevel: val,
|
|
287
|
+
};
|
|
288
|
+
return { ...f };
|
|
289
|
+
});
|
|
290
|
+
}}
|
|
291
|
+
options={[
|
|
292
|
+
{
|
|
293
|
+
label: "第1级主管",
|
|
294
|
+
value: 1,
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
label: "第2级主管",
|
|
298
|
+
value: 2,
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
label: "第3级主管",
|
|
302
|
+
value: 3,
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
label: "第4级主管",
|
|
306
|
+
value: 4,
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
label: "第5级主管",
|
|
310
|
+
value: 5,
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
label: "第6级主管",
|
|
314
|
+
value: 6,
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
label: "第7级主管",
|
|
318
|
+
value: 7,
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
label: "第8级主管",
|
|
322
|
+
value: 8,
|
|
323
|
+
},
|
|
324
|
+
]}
|
|
325
|
+
/>
|
|
326
|
+
</Form.Item>
|
|
327
|
+
<Form.Item
|
|
328
|
+
label={
|
|
329
|
+
<>
|
|
330
|
+
<Checkbox
|
|
331
|
+
disabled={readOnly}
|
|
332
|
+
className={`${readOnly ? "readonly-select" : ""}`}
|
|
333
|
+
onChange={(e) =>
|
|
334
|
+
setForm((f) => {
|
|
335
|
+
f.extendConfig = { ...f.extendConfig, isChecked: e.target.checked };
|
|
336
|
+
return { ...f };
|
|
337
|
+
})
|
|
338
|
+
}
|
|
339
|
+
checked={form?.extendConfig?.isChecked || false}
|
|
340
|
+
/>
|
|
341
|
+
 审批终点为
|
|
342
|
+
</>
|
|
343
|
+
}
|
|
344
|
+
name={["extendConfig", "approvalEnd"]}
|
|
345
|
+
>
|
|
346
|
+
<Select
|
|
347
|
+
disabled={readOnly}
|
|
348
|
+
className={`${readOnly ? "readonly-select" : ""}`}
|
|
349
|
+
onSelect={(val) => {
|
|
350
|
+
setForm((f) => {
|
|
351
|
+
f.extendConfig = {
|
|
352
|
+
...f.extendConfig,
|
|
353
|
+
approvalEnd: val,
|
|
354
|
+
};
|
|
355
|
+
return { ...f };
|
|
356
|
+
});
|
|
357
|
+
}}
|
|
358
|
+
options={[
|
|
359
|
+
{
|
|
360
|
+
label: "驻点队长",
|
|
361
|
+
value: 1,
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
label: "指定人员",
|
|
365
|
+
value: 2,
|
|
366
|
+
},
|
|
367
|
+
]}
|
|
368
|
+
/>
|
|
369
|
+
</Form.Item>
|
|
370
|
+
</>
|
|
371
|
+
) : null}
|
|
372
|
+
{form.setType === 1 || (form.setType === 20 && form.extendConfig?.approvalEnd == 2) ? (
|
|
373
|
+
<Form.Item
|
|
374
|
+
label="选择成员"
|
|
375
|
+
name={form.setType === 20 ? ["extendConfig", "directorUsers"] : "nodeAssigneeList"}
|
|
376
|
+
>
|
|
219
377
|
{readOnly ? null : (
|
|
220
378
|
<Button
|
|
221
379
|
type="primary"
|
|
@@ -223,11 +381,15 @@ export const Approver = (props) => {
|
|
|
223
381
|
onClick={() =>
|
|
224
382
|
selectorCtx.setSelectHandler(
|
|
225
383
|
1,
|
|
226
|
-
form.nodeAssigneeList,
|
|
384
|
+
form.setType === 20 ? form.extendConfig.directorUsers : form.nodeAssigneeList,
|
|
227
385
|
(selected) => {
|
|
228
386
|
setForm((f) => {
|
|
229
387
|
// 设置 人员、角色 列表数组
|
|
230
|
-
|
|
388
|
+
if (form.setType === 20) {
|
|
389
|
+
f.extendConfig.directorUsers = selected;
|
|
390
|
+
} else {
|
|
391
|
+
f.nodeAssigneeList = selected;
|
|
392
|
+
}
|
|
231
393
|
return { ...f };
|
|
232
394
|
});
|
|
233
395
|
},
|
|
@@ -240,7 +402,7 @@ export const Approver = (props) => {
|
|
|
240
402
|
)}
|
|
241
403
|
|
|
242
404
|
<div className="tags-list">
|
|
243
|
-
{form.nodeAssigneeList?.map((user, idx) => {
|
|
405
|
+
{(form.setType === 20 ? form.extendConfig.directorUsers : form.nodeAssigneeList)?.map((user, idx) => {
|
|
244
406
|
return (
|
|
245
407
|
<Tag
|
|
246
408
|
key={user.id || idx}
|
|
@@ -406,19 +568,21 @@ export const Approver = (props) => {
|
|
|
406
568
|
</>
|
|
407
569
|
) : null}
|
|
408
570
|
*/}
|
|
409
|
-
|
|
410
|
-
<
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
571
|
+
{form.setType !== 20 ? (
|
|
572
|
+
<Form.Item label="多人审批时审批方式" name="examineMode">
|
|
573
|
+
<Radio.Group
|
|
574
|
+
options={examineModeOptions}
|
|
575
|
+
value={form.examineMode}
|
|
576
|
+
style={readOnly ? { pointerEvents: "none" } : {}}
|
|
577
|
+
onChange={(e) => {
|
|
578
|
+
setForm((f) => {
|
|
579
|
+
form.examineMode = e.target.value;
|
|
580
|
+
return { ...f };
|
|
581
|
+
});
|
|
582
|
+
}}
|
|
583
|
+
/>
|
|
584
|
+
</Form.Item>
|
|
585
|
+
) : null}
|
|
422
586
|
</Form>
|
|
423
587
|
<SignatureConfiguration
|
|
424
588
|
ref={signatureConfigurationRef}
|
|
@@ -1,45 +1,46 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 审批人员类型
|
|
3
|
-
*/
|
|
4
|
-
export const setTypeOptions = [
|
|
5
|
-
{ label: "指定成员", value: 1 },
|
|
6
|
-
{ label: "部门经理", value: 2 },
|
|
7
|
-
{ label: "角色", value: 3 },
|
|
8
|
-
// { label: "发起人自选", value: 4 },
|
|
9
|
-
// { label: "发起人自己", value: 5 },
|
|
10
|
-
// { label: "连续多级主管", value: 7 },
|
|
11
|
-
{ label: "驻点队长", value: 9 },
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
{ label: "
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
{ label: "
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
{ label: "
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
{ label: "
|
|
44
|
-
{ label: "
|
|
45
|
-
|
|
1
|
+
/**
|
|
2
|
+
* 审批人员类型
|
|
3
|
+
*/
|
|
4
|
+
export const setTypeOptions = [
|
|
5
|
+
{ label: "指定成员", value: 1 },
|
|
6
|
+
{ label: "部门经理", value: 2 },
|
|
7
|
+
{ label: "角色", value: 3 },
|
|
8
|
+
// { label: "发起人自选", value: 4 },
|
|
9
|
+
// { label: "发起人自己", value: 5 },
|
|
10
|
+
// { label: "连续多级主管", value: 7 },
|
|
11
|
+
{ label: "驻点队长", value: 9 },
|
|
12
|
+
{ label: "连续多级直接主管", value: 20 },
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* 发起人自选
|
|
17
|
+
*/
|
|
18
|
+
export const selectModeOptions = [
|
|
19
|
+
{ label: "自选一个人", value: 1 },
|
|
20
|
+
{ label: "自选多个人", value: 2 },
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* 连续主管审批终点
|
|
25
|
+
*/
|
|
26
|
+
export const directorModeOptions = [
|
|
27
|
+
{ label: "直到最上层主管", value: 0 },
|
|
28
|
+
{ label: "自定义审批终点", value: 1 },
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* 审批期限超时后执行
|
|
33
|
+
*/
|
|
34
|
+
export const termModeOptions = [
|
|
35
|
+
{ label: "自动通过", value: 0 },
|
|
36
|
+
{ label: "自动拒绝", value: 1 },
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* 多人审批时审批方式
|
|
41
|
+
*/
|
|
42
|
+
export const examineModeOptions = [
|
|
43
|
+
// { label: "按顺序依次审批", value: 1 },
|
|
44
|
+
{ label: "或签 (有一人审批通过即可)", value: 3 },
|
|
45
|
+
{ label: "会签 (可同时审批,每个人必须审批通过)", value: 2 },
|
|
46
|
+
];
|
|
@@ -1,39 +1,59 @@
|
|
|
1
|
-
import { Input, InputNumber } from "antd";
|
|
2
|
-
import GroupUserSelectorModal from "../GroupUserSelectorModal";
|
|
3
|
-
|
|
4
|
-
interface FormMapProps {
|
|
5
|
-
type: string;
|
|
6
|
-
onChange?: (v: any) => void;
|
|
7
|
-
value?: any;
|
|
8
|
-
disabled?: boolean;
|
|
9
|
-
readOnly?: boolean;
|
|
10
|
-
}
|
|
11
|
-
const Field = (props: FormMapProps) => {
|
|
12
|
-
const { type, onChange, value, disabled, readOnly } = props;
|
|
13
|
-
return (
|
|
14
|
-
<>
|
|
15
|
-
{["day", "hour"].includes(type) && (
|
|
16
|
-
<Input
|
|
17
|
-
readOnly={readOnly}
|
|
18
|
-
disabled={disabled}
|
|
19
|
-
value={value}
|
|
20
|
-
placeholder="值"
|
|
21
|
-
type="number"
|
|
22
|
-
onChange={(e) => {
|
|
23
|
-
onChange(e.target.value);
|
|
24
|
-
}}
|
|
25
|
-
></Input>
|
|
26
|
-
)}
|
|
27
|
-
{["dept", "assignee"].includes(type) && (
|
|
28
|
-
<GroupUserSelectorModal
|
|
29
|
-
type={type}
|
|
30
|
-
onChange={onChange}
|
|
31
|
-
value={value}
|
|
32
|
-
disabled={disabled}
|
|
33
|
-
readOnly={readOnly}
|
|
34
|
-
></GroupUserSelectorModal>
|
|
35
|
-
)}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
1
|
+
import { Input, InputNumber, Select } from "antd";
|
|
2
|
+
import GroupUserSelectorModal from "../GroupUserSelectorModal";
|
|
3
|
+
|
|
4
|
+
interface FormMapProps {
|
|
5
|
+
type: string;
|
|
6
|
+
onChange?: (v: any) => void;
|
|
7
|
+
value?: any;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
readOnly?: boolean;
|
|
10
|
+
}
|
|
11
|
+
const Field = (props: FormMapProps) => {
|
|
12
|
+
const { type, onChange, value, disabled, readOnly } = props;
|
|
13
|
+
return (
|
|
14
|
+
<>
|
|
15
|
+
{["day", "hour"].includes(type) && (
|
|
16
|
+
<Input
|
|
17
|
+
readOnly={readOnly}
|
|
18
|
+
disabled={disabled}
|
|
19
|
+
value={value}
|
|
20
|
+
placeholder="值"
|
|
21
|
+
type="number"
|
|
22
|
+
onChange={(e) => {
|
|
23
|
+
onChange(e.target.value);
|
|
24
|
+
}}
|
|
25
|
+
></Input>
|
|
26
|
+
)}
|
|
27
|
+
{["dept", "assignee"].includes(type) && (
|
|
28
|
+
<GroupUserSelectorModal
|
|
29
|
+
type={type}
|
|
30
|
+
onChange={onChange}
|
|
31
|
+
value={value}
|
|
32
|
+
disabled={disabled}
|
|
33
|
+
readOnly={readOnly}
|
|
34
|
+
></GroupUserSelectorModal>
|
|
35
|
+
)}
|
|
36
|
+
{["userType"].includes(type) && (
|
|
37
|
+
<Select
|
|
38
|
+
value={value}
|
|
39
|
+
disabled={disabled}
|
|
40
|
+
placeholder="请选择"
|
|
41
|
+
options={[
|
|
42
|
+
{
|
|
43
|
+
label: "保安",
|
|
44
|
+
value: 1,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
label: "职员",
|
|
48
|
+
value: 2,
|
|
49
|
+
},
|
|
50
|
+
]}
|
|
51
|
+
onSelect={(value) => {
|
|
52
|
+
onChange(value);
|
|
53
|
+
}}
|
|
54
|
+
/>
|
|
55
|
+
)}
|
|
56
|
+
</>
|
|
57
|
+
);
|
|
58
|
+
};
|
|
59
|
+
export default Field;
|