|
@@ -1,14 +1,24 @@
|
|
-import React, { useEffect, useState } from 'react';
|
|
|
|
-import { Checkbox, Select } from 'antd';
|
|
|
|
-import DepartmentSelect from '../departSelect';
|
|
|
|
|
|
+import React, { useEffect, useMemo, useState } from 'react';
|
|
|
|
+import { Checkbox, Select, TreeSelect } from 'antd';
|
|
|
|
+import { DeleteOutlined } from '@ant-design/icons';
|
|
import { ComponentName, FormItem } from '../../node/judgeNode/mapServe';
|
|
import { ComponentName, FormItem } from '../../node/judgeNode/mapServe';
|
|
import { InputNumberFiled } from '../../node/fields';
|
|
import { InputNumberFiled } from '../../node/fields';
|
|
|
|
+import { connect } from 'dva';
|
|
|
|
+
|
|
|
|
+const { Option } = Select;
|
|
|
|
+
|
|
|
|
+interface Condition {
|
|
|
|
+ smallValue?: number;
|
|
|
|
+ smallSign?: number;
|
|
|
|
+ bigValue?: number;
|
|
|
|
+ bigSign?: number;
|
|
|
|
+}
|
|
|
|
|
|
export interface JudgeType {
|
|
export interface JudgeType {
|
|
type: string;
|
|
type: string;
|
|
id: string;
|
|
id: string;
|
|
- condition?: number;
|
|
|
|
- values?: string[] | number[];
|
|
|
|
|
|
+ condition?: Condition;
|
|
|
|
+ values?: any[];
|
|
}
|
|
}
|
|
|
|
|
|
export const JudgeOptions = [
|
|
export const JudgeOptions = [
|
|
@@ -21,10 +31,11 @@ export const JudgeOptions = [
|
|
];
|
|
];
|
|
|
|
|
|
const RenderJudge = (props: any) => {
|
|
const RenderJudge = (props: any) => {
|
|
- const { formItems = '', onChange } = props;
|
|
|
|
|
|
+ const { formItems = '', onChange, depUserTree } = props;
|
|
let formData: FormItem[] = formItems ? JSON.parse(formItems) : [];
|
|
let formData: FormItem[] = formItems ? JSON.parse(formItems) : [];
|
|
|
|
|
|
- const handleChange = (values: string[] | number[], item: FormItem, condition?: number) => {
|
|
|
|
|
|
+ const [isBetween, setIsBetween] = useState(false);
|
|
|
|
+ const handleChange = (values: any[], item: FormItem, condition?: Condition) => {
|
|
const itemCur = formData.find(cur => cur.props.id == item.props.id);
|
|
const itemCur = formData.find(cur => cur.props.id == item.props.id);
|
|
let judge: JudgeType = {
|
|
let judge: JudgeType = {
|
|
id: item.props.id,
|
|
id: item.props.id,
|
|
@@ -47,40 +58,140 @@ const RenderJudge = (props: any) => {
|
|
onChange(formData);
|
|
onChange(formData);
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+ const getTreeNode = (pid, dep) => {
|
|
|
|
+ return {
|
|
|
|
+ id: dep.ID,
|
|
|
|
+ pId: pid,
|
|
|
|
+ value: dep.ID,
|
|
|
|
+ title: dep.Name,
|
|
|
|
+ isLeaf: false,
|
|
|
|
+ };
|
|
|
|
+ };
|
|
|
|
+ const getResult = (pid, items) => {
|
|
|
|
+ let result = [];
|
|
|
|
+ items.forEach(item => {
|
|
|
|
+ let node = getTreeNode(pid, item);
|
|
|
|
+ result.push(node);
|
|
|
|
+ if (item.children) {
|
|
|
|
+ let node = getResult(item.ID, item.children);
|
|
|
|
+ result = [...result, ...node];
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ return result;
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ const handleDelete = (item: FormItem) => {
|
|
|
|
+ const index = formData.findIndex(cur => cur.props.id == item.props.id);
|
|
|
|
+ if (index != -1) {
|
|
|
|
+ formData.splice(index, 1);
|
|
|
|
+ onChange(formData);
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ const handleTreeChange = (values: (string | number)[], item: FormItem) => {
|
|
|
|
+ const newValues = values.map(cur => {
|
|
|
|
+ if (typeof cur == 'string' && cur.includes('||')) {
|
|
|
|
+ return { type: 'user', value: Number(cur.split('||')[0]), origin: cur };
|
|
|
|
+ } else {
|
|
|
|
+ return { type: 'dep', value: cur, origin: cur };
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ console.log('=====================', newValues);
|
|
|
|
+ handleChange(newValues, item);
|
|
|
|
+ };
|
|
|
|
+
|
|
const RenderComp = (item: FormItem) => {
|
|
const RenderComp = (item: FormItem) => {
|
|
let component;
|
|
let component;
|
|
switch (item.componentName) {
|
|
switch (item.componentName) {
|
|
case ComponentName.Inner:
|
|
case ComponentName.Inner:
|
|
component = (
|
|
component = (
|
|
- <div className="group">
|
|
|
|
- <div>发起人</div>
|
|
|
|
- <DepartmentSelect
|
|
|
|
- defaultValue={item.judge?.values}
|
|
|
|
- onChange={values => handleChange(values, item)}
|
|
|
|
|
|
+ <>
|
|
|
|
+ <div style={{ display: 'flex', justifyContent: 'space-between' }}>
|
|
|
|
+ <div>发起人</div>
|
|
|
|
+ <DeleteOutlined onClick={() => handleDelete(item)} />
|
|
|
|
+ </div>
|
|
|
|
+ <TreeSelect
|
|
|
|
+ showSearch
|
|
|
|
+ multiple
|
|
|
|
+ allowClear
|
|
|
|
+ defaultValue={item.judge?.values?.map(item => item.origin)}
|
|
|
|
+ style={{ width: '100%' }}
|
|
|
|
+ placeholder="请选择部门"
|
|
|
|
+ treeData={depUserTree}
|
|
|
|
+ onChange={values => {
|
|
|
|
+ handleTreeChange(values, item);
|
|
|
|
+ // handleChange(values, item)
|
|
|
|
+ }}
|
|
/>
|
|
/>
|
|
- </div>
|
|
|
|
|
|
+ </>
|
|
);
|
|
);
|
|
break;
|
|
break;
|
|
case ComponentName.Depart:
|
|
case ComponentName.Depart:
|
|
break;
|
|
break;
|
|
case ComponentName.Money:
|
|
case ComponentName.Money:
|
|
- console.log(item);
|
|
|
|
|
|
+ case ComponentName.Number:
|
|
|
|
+ const { judge, props } = item;
|
|
component = (
|
|
component = (
|
|
<>
|
|
<>
|
|
- <div>{item.props.label}</div>
|
|
|
|
|
|
+ <div style={{ display: 'flex', justifyContent: 'space-between' }}>
|
|
|
|
+ <div>{props.label}</div>
|
|
|
|
+ <DeleteOutlined onClick={() => handleDelete(item)} />
|
|
|
|
+ </div>
|
|
<Select
|
|
<Select
|
|
options={JudgeOptions}
|
|
options={JudgeOptions}
|
|
- defaultValue={item.judge?.values[0] || 1}
|
|
|
|
|
|
+ defaultValue={judge?.values[0]}
|
|
onChange={(value: number) => {
|
|
onChange={(value: number) => {
|
|
- handleChange([value], item);
|
|
|
|
- }}
|
|
|
|
- />
|
|
|
|
- <InputNumberFiled
|
|
|
|
- value={item.judge?.condition}
|
|
|
|
- onChange={value => {
|
|
|
|
- handleChange([], item, value);
|
|
|
|
|
|
+ let newCondition: Condition = null;
|
|
|
|
+ value == 6 ? setIsBetween(true) : setIsBetween(false);
|
|
|
|
+ if (judge && judge.values && judge.values.length > 0) {
|
|
|
|
+ if (judge?.values[0] == 6 && value != 6) newCondition = {};
|
|
|
|
+ else if (judge.values[0] != 6 && value == 6) newCondition = {};
|
|
|
|
+ }
|
|
|
|
+ handleChange([value], item, newCondition);
|
|
}}
|
|
}}
|
|
/>
|
|
/>
|
|
|
|
+ {isBetween ? (
|
|
|
|
+ <div style={{ display: 'flex', justifyContent: 'space-between' }}>
|
|
|
|
+ <InputNumberFiled
|
|
|
|
+ value={judge?.condition?.smallValue}
|
|
|
|
+ onChange={value => {
|
|
|
|
+ handleChange([], item, { ...judge?.condition, smallValue: value });
|
|
|
|
+ }}
|
|
|
|
+ />
|
|
|
|
+ <Select
|
|
|
|
+ defaultValue={judge?.condition?.smallSign}
|
|
|
|
+ onChange={(value: number) => {
|
|
|
|
+ handleChange([], item, { ...judge?.condition, smallSign: value });
|
|
|
|
+ }}
|
|
|
|
+ >
|
|
|
|
+ <Option value={1}>{`<`}</Option>
|
|
|
|
+ <Option value={2}>≤</Option>
|
|
|
|
+ </Select>
|
|
|
|
+ <span>N</span>
|
|
|
|
+ <InputNumberFiled
|
|
|
|
+ value={judge?.condition?.bigValue}
|
|
|
|
+ onChange={value => {
|
|
|
|
+ handleChange([], item, { ...judge?.condition, bigValue: value });
|
|
|
|
+ }}
|
|
|
|
+ />
|
|
|
|
+ <Select
|
|
|
|
+ defaultValue={judge?.condition?.bigSign}
|
|
|
|
+ onChange={(value: number) => {
|
|
|
|
+ handleChange([], item, { ...judge?.condition, bigSign: value });
|
|
|
|
+ }}
|
|
|
|
+ >
|
|
|
|
+ <Option value={1}>{`<`}</Option>
|
|
|
|
+ <Option value={2}>≤</Option>
|
|
|
|
+ </Select>
|
|
|
|
+ </div>
|
|
|
|
+ ) : (
|
|
|
|
+ <InputNumberFiled
|
|
|
|
+ value={judge?.condition?.smallValue}
|
|
|
|
+ onChange={value => {
|
|
|
|
+ handleChange([], item, { smallValue: value });
|
|
|
|
+ }}
|
|
|
|
+ />
|
|
|
|
+ )}
|
|
</>
|
|
</>
|
|
);
|
|
);
|
|
break;
|
|
break;
|
|
@@ -90,7 +201,10 @@ const RenderJudge = (props: any) => {
|
|
const options = item.props.options;
|
|
const options = item.props.options;
|
|
component = (
|
|
component = (
|
|
<>
|
|
<>
|
|
- <div>{item.props.label}</div>
|
|
|
|
|
|
+ <div style={{ display: 'flex', justifyContent: 'space-between' }}>
|
|
|
|
+ <div>{item.props.label}</div>
|
|
|
|
+ <DeleteOutlined onClick={() => handleDelete(item)} />
|
|
|
|
+ </div>
|
|
<Checkbox.Group
|
|
<Checkbox.Group
|
|
defaultValue={item.judge?.values}
|
|
defaultValue={item.judge?.values}
|
|
onChange={(values: any) => handleChange(values, item)}
|
|
onChange={(values: any) => handleChange(values, item)}
|
|
@@ -113,4 +227,4 @@ const RenderJudge = (props: any) => {
|
|
return <>{formData.map(item => RenderComp(item))}</>;
|
|
return <>{formData.map(item => RenderComp(item))}</>;
|
|
};
|
|
};
|
|
|
|
|
|
-export default RenderJudge;
|
|
|
|
|
|
+export default connect(({ flow }) => ({ depUserTree: flow.depUserTree }))(RenderJudge);
|