import React, { useState, useEffect, useMemo } from 'react'; import { FlowchartFormWrapper } from '@antv/xflow'; import { Position, Size, ColorPicker, InputNumberField, InputField, SelectField, } from '../fields'; import { PREFIX } from '../constants'; import { connect } from 'umi'; import { UnityAction } from '@/utils/utils'; import { Button, Radio, RadioChangeEvent, Select, TreeSelect, InputNumber, } from 'antd'; const { Option } = Select; export const enum TYPE { INITIATOR = 1, AUDIT, JUDGE, COPYMAN, } export const typeOption = [ { label: '审批人', value: TYPE.AUDIT }, { label: '发起人', value: TYPE.INITIATOR }, { label: '抄送人', value: TYPE.COPYMAN }, ]; export interface IConfig { label?: string; x?: number; y?: number; width?: number; height?: number; count?: number; fontSize?: number; fontFill?: string; fill?: string; stroke?: string; flow_id?: string; flow_node_id?: string; process_code?: string; type: TYPE; initiator: { label: string; //描述 type: string; value: number; origin?: string | number; name?: string; }[]; //审批人目前只支持单选角色或者单选人 audits: { label: string; //描述 type: string; value: number; origin?: string | number; name?: string; is_cc: number; }[]; } export const enum IDTYPE { DEP = 'dep', USER = 'user', ROLE = 'role', LEADER = 'leader', } const Component = (props: any) => { const defaultConfig = { type: TYPE.AUDIT, }; const { config, plugin = {}, depUserTree, roleList, userList } = props; const { updateNode } = plugin; const [isRole, setIsRole] = useState(1); ///按角色还是个人 const [nodeConfig, setNodeConfig] = useState({ ...defaultConfig, ...config, }); const onNodeConfigChange = (key: string, value: number | string | object) => { if (key) { setNodeConfig({ ...nodeConfig, [key]: value, }); updateNode({ type: nodeConfig.type ? nodeConfig.type : TYPE.AUDIT, [key]: value, }); } else if (value instanceof Object) { setNodeConfig({ ...nodeConfig, ...value, }); updateNode({ type: nodeConfig.type ? nodeConfig.type : TYPE.AUDIT, ...value, }); } }; useEffect(() => { let bool = 1; if (nodeConfig.audits?.length > 0) switch (nodeConfig.audits[0].type) { case IDTYPE.USER: bool = 0; break; case IDTYPE.ROLE: bool = 1; break; case IDTYPE.LEADER: bool = 2; break; } console.log(bool); setIsRole(bool); }, []); const handleTreeChange = (values: (string | number)[]) => { const newValues = values.map((cur) => { if (typeof cur == 'string' && cur.includes('||')) { return { type: IDTYPE.USER, value: Number(cur.split('||')[0]), origin: cur, }; } else { return { type: IDTYPE.DEP, value: cur, origin: cur, is_cc: 1 }; } }); onNodeConfigChange('initiator', newValues); }; // const onSave = () => { // UnityAction.emit('NODE_SAVE', nodeConfig); // }; useEffect(() => { setNodeConfig({ ...defaultConfig, ...config, }); }, [config]); const renderAuditSelect = (key: Number) => { switch (key) { case 0: return ( <> ); case 1: return ( <> ); case 2: return ( <> 0 ? nodeConfig.audits[0].value : 0 } onChange={(value) => { onNodeConfigChange('audits', [ { type: IDTYPE.LEADER, label: nodeConfig.label == '动作节点' ? '审批人' : nodeConfig.label, value: Number(value), }, ]); }} /> ); } }; return (
内容
{ onNodeConfigChange('', { label: value, audits: nodeConfig?.audits?.length > 0 ? [{ ...(nodeConfig?.audits[0] || []), label: value }] : [], }); }} /> { onNodeConfigChange('type', value); }} options={typeOption} />
样式
{ onNodeConfigChange(key, value); }} /> { onNodeConfigChange(key, value); }} /> { onNodeConfigChange('fill', value); }} /> { onNodeConfigChange('stroke', value); }} /> { onNodeConfigChange('count', value); }} />
{ onNodeConfigChange('fontSize', value); }} /> { onNodeConfigChange('fontFill', value); }} />
{nodeConfig.type == TYPE.INITIATOR && (
item.origin)} style={{ width: '80%' }} placeholder="请选择" treeData={depUserTree} onChange={(values) => { handleTreeChange(values); }} />
)} {nodeConfig.type == TYPE.AUDIT && (
审批人
{ console.log(e.target.value); setIsRole(e.target.value); onNodeConfigChange('audits', []); }} value={isRole} > 发起人自选 指定人 部门主管
{renderAuditSelect(isRole)}
)}
{nodeConfig.type == TYPE.COPYMAN && (
)} {/* */}
); }; function RecthServe(props: any) { return ( {(config, plugin) => ( )} ); } export default connect(({ xflow, flow, user }) => ({ auditList: xflow.auditList, depUserTree: user.depUserTree, roleList: user.roleList, userList: user.list, }))(RecthServe);