diff --git a/flow-engine-framework/src/main/java/com/codingapi/flow/manager/FlowNodeState.java b/flow-engine-framework/src/main/java/com/codingapi/flow/manager/FlowNodeState.java index 4eb996ad..9cbc5c31 100644 --- a/flow-engine-framework/src/main/java/com/codingapi/flow/manager/FlowNodeState.java +++ b/flow-engine-framework/src/main/java/com/codingapi/flow/manager/FlowNodeState.java @@ -66,9 +66,10 @@ public String getName() { } public List getFirstBlocks() { - List blocks = this.node.blocks().stream().sorted(Comparator.comparingInt(IFlowNode::getOrder)).toList(); - if (!blocks.isEmpty()) { - return Stream.of(blocks.get(0)).toList(); + List blocks = this.node.blocks(); + if (blocks!=null && !blocks.isEmpty()) { + List sortList = blocks.stream().sorted(Comparator.comparingInt(IFlowNode::getOrder)).toList(); + return Stream.of(sortList.get(0)).toList(); } return new ArrayList<>(); } diff --git a/frontend/packages/flow-pc/flow-pc-approval/src/components/flow-approval/components/action-button.tsx b/frontend/packages/flow-pc/flow-pc-approval/src/components/flow-approval/components/action-button.tsx new file mode 100644 index 00000000..6e10fe98 --- /dev/null +++ b/frontend/packages/flow-pc/flow-pc-approval/src/components/flow-approval/components/action-button.tsx @@ -0,0 +1,50 @@ +import {Button} from "antd"; +import React from "react"; +import {DisplayStyle, FlowActionDisplay} from "@flow-engine/flow-types"; +import {Icon} from "@flow-engine/flow-pc-ui"; + +interface ActionButtonProps { + onClick: () => void; + title: string; + display: FlowActionDisplay; +} + +export const ActionButton: React.FC = (props) => { + + const display = props.display; + const title = display.title || props.title; + + const style = React.useMemo(() => { + if (display) { + const data = JSON.parse(display.style) as DisplayStyle | undefined; + if (data) { + let style = {} + if (data.backgroundColor) { + style = Object.assign(data, {backgroundColor: `#${data.backgroundColor}`}); + } + if (data.borderColor) { + style = Object.assign(data, {borderColor: `#${data.borderColor}`}); + } + if (data.borderRadius) { + style = Object.assign(data, {borderRadius: Number.parseInt(data.borderRadius)}); + } + if (data.borderSize) { + style = Object.assign(data, {borderWidth: Number.parseInt(data.borderSize)}); + } + return style; + } + } + return {} + }, [display]); + + + return ( + + ) +} \ No newline at end of file diff --git a/frontend/packages/flow-pc/flow-pc-approval/src/components/flow-approval/components/action/add-audit.tsx b/frontend/packages/flow-pc/flow-pc-approval/src/components/flow-approval/components/action/add-audit.tsx index 36b2c4fd..38fe017f 100644 --- a/frontend/packages/flow-pc/flow-pc-approval/src/components/flow-approval/components/action/add-audit.tsx +++ b/frontend/packages/flow-pc/flow-pc-approval/src/components/flow-approval/components/action/add-audit.tsx @@ -1,8 +1,9 @@ import React from "react"; import {FlowActionProps} from "./type"; -import {Button, Form, message, Modal} from "antd"; +import {Form, message, Modal} from "antd"; import {useApprovalContext} from "@/components/flow-approval/hooks/use-approval-context"; import {AddAuditView} from "@/components/flow-approval/plugins/view/add-audit-view"; +import {ActionButton} from "@/components/flow-approval/components/action-button"; /** * 加签 @@ -30,14 +31,14 @@ export const AddAuditAction: React.FC = (props) => { } return ( <> - + title={action.title} + /> = (props) => { } return ( - + title={action.title} + /> ) } \ No newline at end of file diff --git a/frontend/packages/flow-pc/flow-pc-approval/src/components/flow-approval/components/action/delegate.tsx b/frontend/packages/flow-pc/flow-pc-approval/src/components/flow-approval/components/action/delegate.tsx index a7280ec2..e4d8833b 100644 --- a/frontend/packages/flow-pc/flow-pc-approval/src/components/flow-approval/components/action/delegate.tsx +++ b/frontend/packages/flow-pc/flow-pc-approval/src/components/flow-approval/components/action/delegate.tsx @@ -1,8 +1,9 @@ import React from "react"; import {FlowActionProps} from "./type"; -import {Button, Form, message, Modal} from "antd"; +import {Form, message, Modal} from "antd"; import {useApprovalContext} from "@/components/flow-approval/hooks/use-approval-context"; import {DelegateView} from "@/components/flow-approval/plugins/view/delegate-view"; +import {ActionButton} from "@/components/flow-approval/components/action-button"; /** * 委派 @@ -30,14 +31,14 @@ export const DelegateAction: React.FC = (props) => { } return ( <> - + title={action.title} + /> = (props) => { return ( <> - + title={action.title} + /> = (props) => { - {state.flow?.signRequired && currentOperator && ( = (props) => { const action = props.action; - const {state,context} = useApprovalContext() + const {state, context} = useApprovalContext() const actionPresenter = context.getPresenter().getFlowActionPresenter(); const [modalVisible, setModalVisible] = React.useState(false); const [form] = Form.useForm(); @@ -37,14 +38,14 @@ export const RejectAction: React.FC = (props) => { return ( <> - + title={action.title} + /> = (props) => { } return ( <> - + title={action.title} + /> = (props) => { const actionPresenter = context.getPresenter().getFlowActionPresenter(); return ( - + title={action.title} + /> ) } \ No newline at end of file diff --git a/frontend/packages/flow-pc/flow-pc-approval/src/components/flow-approval/components/action/transfer.tsx b/frontend/packages/flow-pc/flow-pc-approval/src/components/flow-approval/components/action/transfer.tsx index a1b611b3..20cae197 100644 --- a/frontend/packages/flow-pc/flow-pc-approval/src/components/flow-approval/components/action/transfer.tsx +++ b/frontend/packages/flow-pc/flow-pc-approval/src/components/flow-approval/components/action/transfer.tsx @@ -1,8 +1,9 @@ import React from "react"; import {FlowActionProps} from "./type"; -import {Button, Form, message, Modal} from "antd"; +import {Form, message, Modal} from "antd"; import {useApprovalContext} from "@/components/flow-approval/hooks/use-approval-context"; import {TransferView} from "@/components/flow-approval/plugins/view/transfer-view"; +import {ActionButton} from "@/components/flow-approval/components/action-button"; /** * 转办 @@ -30,14 +31,14 @@ export const TransferAction: React.FC = (props) => { } return ( <> - + title={action.title} + /> void; +} + + +export const ActionIcon: React.FC = (props) => { + const { value, onChange } = props; + + const options = React.useMemo(() => { + return icons.groups; + }, []); + + const handleSelectIcon = (iconType: string) => { + onChange?.(iconType); + }; + + const content = () => { + return ( +
+ + {options.map((group) => ( + + +
+ {group.label} +
+ + + {group.icons.map((iconType) => ( + +
handleSelectIcon(iconType)} + style={{ + padding: '12px 8px', + borderRadius: 6, + cursor: 'pointer', + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + backgroundColor: value === iconType ? '#e6f7ff' : 'transparent', + border: value === iconType ? '1px solid #1890ff' : '1px solid transparent', + transition: 'all 0.3s' + }} + onMouseEnter={(e) => { + if (value !== iconType) { + e.currentTarget.style.backgroundColor = '#f5f5f5'; + e.currentTarget.style.borderColor = '#d9d9d9'; + } + }} + onMouseLeave={(e) => { + if (value !== iconType) { + e.currentTarget.style.backgroundColor = 'transparent'; + e.currentTarget.style.borderColor = 'transparent'; + } + }} + > + +
+ + ))} +
+ ))} +
+
+ ); + }; + + return ( + + + + ); +}; \ No newline at end of file diff --git a/frontend/packages/flow-pc/flow-pc-design/src/components/design-editor/node-components/action/modal.tsx b/frontend/packages/flow-pc/flow-pc-design/src/components/design-editor/node-components/action/modal.tsx index 78940826..1e0485d1 100644 --- a/frontend/packages/flow-pc/flow-pc-design/src/components/design-editor/node-components/action/modal.tsx +++ b/frontend/packages/flow-pc/flow-pc-design/src/components/design-editor/node-components/action/modal.tsx @@ -1,7 +1,8 @@ -import {Col, Form, FormInstance, Input, Modal, Row, Select, Space} from "antd"; +import {Col, Form, FormInstance, Input, Modal, Row} from "antd"; import React from "react"; -import {GroovyCodeEditor} from "@/components/groovy-code"; -import {GroovyScriptConvertorUtil} from "@flow-engine/flow-core"; +import {CustomScriptView} from "./script"; +import {ActionStyle} from "./style"; +import {ActionIcon} from "@/components/design-editor/node-components/action/icon"; interface ActionModalProps { open: boolean; @@ -13,84 +14,9 @@ interface ActionModalProps { } -interface CustomScriptViewProps{ - options: any[]; - form: FormInstance; -} - -const CustomScriptView:React.FC = (props)=>{ - - const trigger = props.form.getFieldValue("trigger") as string; - - const [currentTrigger,setCurrentTrigger] = React.useState(trigger); - - const handleChangeNodeType = (value: string) => { - const script = props.form.getFieldValue('script') as string; - let groovy; - if (script) { - const returnData = GroovyScriptConvertorUtil.getReturnScript(script).trim(); - groovy = script.replace(returnData, `'${value}'`); - groovy = GroovyScriptConvertorUtil.updateScriptMeta(groovy,`{"trigger":"${value}"}`); - } else { - groovy = `// @CUSTOM_SCRIPT 自定义脚本,返回的数据为动作类型 - // @SCRIPT_META {"trigger":"${value}"} - def run(request){ - return '${value}'; - } - ` - } - props.form.setFieldValue("script", GroovyScriptConvertorUtil.formatScript(groovy)); - setCurrentTrigger(value); - } - - return ( - - - 自定义脚本 - - 触发动作: - - + = (props) => { name={"icon"} label={"按钮图标"} > - + - + - + {custom && ( - + )} diff --git a/frontend/packages/flow-pc/flow-pc-design/src/components/design-editor/node-components/action/script.tsx b/frontend/packages/flow-pc/flow-pc-design/src/components/design-editor/node-components/action/script.tsx new file mode 100644 index 00000000..bb9e3468 --- /dev/null +++ b/frontend/packages/flow-pc/flow-pc-design/src/components/design-editor/node-components/action/script.tsx @@ -0,0 +1,79 @@ +import React from "react"; +import {GroovyCodeEditor} from "@/components/groovy-code"; +import {Col, Form, FormInstance, Select, Space} from "antd"; +import {GroovyScriptConvertorUtil} from "@flow-engine/flow-core"; + + +interface CustomScriptViewProps{ + options: any[]; + form: FormInstance; +} + +export const CustomScriptView:React.FC = (props)=>{ + + const trigger = props.form.getFieldValue("trigger") as string; + + const [currentTrigger,setCurrentTrigger] = React.useState(trigger); + + const handleChangeNodeType = (value: string) => { + const script = props.form.getFieldValue('script') as string; + let groovy; + if (script) { + const returnData = GroovyScriptConvertorUtil.getReturnScript(script).trim(); + groovy = script.replace(returnData, `'${value}'`); + groovy = GroovyScriptConvertorUtil.updateScriptMeta(groovy,`{"trigger":"${value}"}`); + } else { + groovy = `// @CUSTOM_SCRIPT 自定义脚本,返回的数据为动作类型 + // @SCRIPT_META {"trigger":"${value}"} + def run(request){ + return '${value}'; + } + ` + } + props.form.setFieldValue("script", GroovyScriptConvertorUtil.formatScript(groovy)); + setCurrentTrigger(value); + } + + return ( + + + 自定义脚本 + + 触发动作: + { + setStyle(prevState => { + return { + ...prevState, + borderRadius: event.target.value + } + }) + }} + /> + + + + + + 边框大小 + + { + setStyle(prevState => { + return { + ...prevState, + borderSize: event.target.value + } + }) + }} + /> + + + + + + ) +} \ No newline at end of file diff --git a/frontend/packages/flow-pc/flow-pc-ui/src/components/icon/index.tsx b/frontend/packages/flow-pc/flow-pc-ui/src/components/icon/index.tsx new file mode 100644 index 00000000..658af219 --- /dev/null +++ b/frontend/packages/flow-pc/flow-pc-ui/src/components/icon/index.tsx @@ -0,0 +1,61 @@ +import React, {CSSProperties, lazy} from "react"; + +interface IconProps { + type: string; + style?: CSSProperties; +} + +// 动态导入图标的函数 +const loadIcon = (type: string) => { + return lazy(() => + import("@ant-design/icons") + .then(module => { + //@ts-ignore + const IconComponent = module[type]; + if (!IconComponent) { + throw new Error(`Icon ${type} not found`); + } + return { default: IconComponent }; + }) + ); +}; + +export const Icon: React.FC = ({ type, style }) => { + const [IconComponent, setIconComponent] = React.useState | null>(null); + const [error, setError] = React.useState(false); + + React.useEffect(() => { + let mounted = true; + setError(false); + + // 动态导入图标 + import("@ant-design/icons") + .then(module => { + //@ts-ignore + if (mounted && module[type]) { + //@ts-ignore + setIconComponent(() => module[type]); + } else if (mounted) { + setError(true); + } + }) + .catch(() => { + if (mounted) setError(true); + }); + + return () => { + mounted = false; + }; + }, [type]); + + if (error) { + console.warn(`Icon ${type} not found`); + return null; + } + + if (!IconComponent) { + return
Loading...
; + } + + return ; +}; \ No newline at end of file diff --git a/frontend/packages/flow-pc/flow-pc-ui/src/index.ts b/frontend/packages/flow-pc/flow-pc-ui/src/index.ts index 153118c4..2929235e 100644 --- a/frontend/packages/flow-pc/flow-pc-ui/src/index.ts +++ b/frontend/packages/flow-pc/flow-pc-ui/src/index.ts @@ -2,4 +2,5 @@ export * from '@/components/drawer'; export * from '@/components/panel'; export * from '@/components/table'; export * from '@/components/card-from'; -export * from '@/components/text'; \ No newline at end of file +export * from '@/components/text'; +export * from '@/components/icon'; \ No newline at end of file diff --git a/frontend/packages/flow-types/src/types/flow-approval.ts b/frontend/packages/flow-types/src/types/flow-approval.ts index 5604a110..eed2384e 100644 --- a/frontend/packages/flow-types/src/types/flow-approval.ts +++ b/frontend/packages/flow-types/src/types/flow-approval.ts @@ -29,23 +29,23 @@ export const dataTypeOptions = [ */ export interface FormField { // 字段id - id:string; + id: string; // 字段名称 - name:string; + name: string; // 字段编码 - code:string; + code: string; // 数据类型 - type:DataType; + type: DataType; // 是否必填 - required:boolean; + required: boolean; // 默认值 - defaultValue?:string; + defaultValue?: string; // 输入提示 - placeholder?:string; + placeholder?: string; // 提醒提示 - tooltip?:string; + tooltip?: string; // 帮助提示 - help?:string; + help?: string; } /** @@ -53,13 +53,27 @@ export interface FormField { */ export interface FlowForm { // 表单名称 - name:string; + name: string; // 表单编码 - code:string; + code: string; // 表单字段 - fields:FormField[]; + fields: FormField[]; // 子表单 - subForms:FlowForm[]; + subForms: FlowForm[]; +} + +/** + * 展示样式 + */ +export interface DisplayStyle { + // 边框颜色 + borderColor?: string; + // 背景颜色 + backgroundColor?: string; + // 边框大小 + borderSize?: string; + // 边框圆角 + borderRadius?: string; } /** @@ -67,29 +81,29 @@ export interface FlowForm { */ export interface FlowActionDisplay { // 标题 - title:string; + title: string; // 样式 - style:string; + style: string; // 图标 - icon:string; + icon: string; } /** * 流程操作对象 */ -export interface FlowAction{ +export interface FlowAction { // 操作id - id:string; + id: string; // 按钮名称 - title:string; + title: string; // 动作类型 - type:string; + type: string; // 展示样式 - display:FlowActionDisplay; + display: FlowActionDisplay; // 是否启用 - enable:boolean; + enable: boolean; // 自定义脚本 - script?:string; + script?: string; } /** @@ -97,31 +111,31 @@ export interface FlowAction{ */ export interface FlowOperator { // 人员id - id:number; + id: number; // 人员名称 - name:string; + name: string; } /** * 流程操作记录对象 */ -export interface History{ +export interface History { // 记录id - recordId:number; + recordId: number; // 流程标题 - title:string; + title: string; // 审批意见 - advice:string; + advice: string; // 审批签名key - signKey:string; + signKey: string; // 审批节点 - nodeName:string; + nodeName: string; // 审批节点id - nodeId:string; + nodeId: string; // 节点类型 - nodeType:string + nodeType: string // 审批时间 - updateTime:number; + updateTime: number; } /** @@ -129,15 +143,15 @@ export interface History{ */ export interface FlowTodo { // 记录id - recordId:number; + recordId: number; // 流程标题 - title:string; + title: string; // 流程数据 - data:Record; + data: Record; // 记录状态 - recordState:number; + recordState: number; // 流程状态 - flowState:number; + flowState: number; } @@ -146,45 +160,45 @@ export interface FlowTodo { */ export interface FlowApprovalOperator { // 意见信息 - advice:string; + advice: string; // 签名key - signKey:string; + signKey: string; // 审核时间 - approveTime:number; + approveTime: number; // 审批动作 - actionName:string; + actionName: string; // 审批人 - flowOperator:FlowOperator; + flowOperator: FlowOperator; } /** * 流程节点对象 */ -export interface ProcessNode{ +export interface ProcessNode { // 节点id - nodeId:string; + nodeId: string; // 节点名称 - nodeName:string; + nodeName: string; // 节点类型 - nodeType:string; + nodeType: string; // 状态 -1 历史 0 当前 1 未执行 - state:number; + state: number; // 审批人员 - operators:FlowApprovalOperator[] + operators: FlowApprovalOperator[] } /** * 节点 */ -export interface NodeOption{ +export interface NodeOption { // 节点id - id:string; + id: string; // 节点名称 - name:string; + name: string; // 节点类型 - type:string; + type: string; // 展示节点 - display:boolean; + display: boolean; } /** @@ -192,45 +206,45 @@ export interface NodeOption{ */ export interface FlowContent { // 记录id - recordId:number; + recordId: number; // 流程id - processId:string; + processId: string; // 流程设计id - workId:string; + workId: string; // 流程设计编码 - workCode:string; + workCode: string; // 节点id - nodeId:string; + nodeId: string; // 节点名称 - nodeName:string; + nodeName: string; // 节点类型 - nodeType:string; + nodeType: string; // 流程标题 - title:string; + title: string; // 视图名称 - view:string; + view: string; // 是否必填意见 - adviceRequired:boolean; + adviceRequired: boolean; // 是否必填签名 - signRequired:boolean; + signRequired: boolean; // 表单元数据 - form:FlowForm; + form: FlowForm; // 待办记录 - todos:FlowTodo[]; + todos: FlowTodo[]; // 操作按钮 - actions:FlowAction[]; + actions: FlowAction[]; // 是否合并 - mergeable:boolean; + mergeable: boolean; // 流程创建人 - createOperator:FlowOperator; + createOperator: FlowOperator; // 当前流程 - currentOperator:FlowOperator; + currentOperator: FlowOperator; // 流程状态 - flowState:number; + flowState: number; // 记录状态 - recordState:number; + recordState: number; // 审批记录 - histories:History[]; + histories: History[]; // 所有节点 - nodes:NodeOption[]; + nodes: NodeOption[]; } \ No newline at end of file diff --git a/frontend/packages/flow-types/src/types/icons.ts b/frontend/packages/flow-types/src/types/icons.ts new file mode 100644 index 00000000..7c05fe86 --- /dev/null +++ b/frontend/packages/flow-types/src/types/icons.ts @@ -0,0 +1,467 @@ + +export const icons = { + groups: [ + { + label: '方向指示类', + icons: [ + 'ArrowUpOutlined', + 'ArrowDownOutlined', + 'ArrowLeftOutlined', + 'ArrowRightOutlined', + 'UpOutlined', + 'DownOutlined', + 'LeftOutlined', + 'RightOutlined', + 'UpCircleOutlined', + 'DownCircleOutlined', + 'LeftCircleOutlined', + 'RightCircleOutlined', + 'UpSquareOutlined', + 'DownSquareOutlined', + 'LeftSquareOutlined', + 'RightSquareOutlined', + 'CaretUpOutlined', + 'CaretDownOutlined', + 'CaretLeftOutlined', + 'CaretRightOutlined', + 'DoubleLeftOutlined', + 'DoubleRightOutlined', + 'BackwardOutlined', + 'ForwardOutlined', + 'FastBackwardOutlined', + 'FastForwardOutlined', + 'StepBackwardOutlined', + 'StepForwardOutlined', + 'VerticalAlignTopOutlined', + 'VerticalAlignMiddleOutlined', + 'VerticalAlignBottomOutlined', + 'VerticalLeftOutlined', + 'VerticalRightOutlined', + 'ToTopOutlined', + 'ArrowsAltOutlined', + 'SwapOutlined', + 'SwapLeftOutlined', + 'SwapRightOutlined', + 'EnterOutlined', + 'ShrinkOutlined', + 'ExpandOutlined', + 'ExpandAltOutlined', + 'CompressOutlined', + ] + }, + { + label: '编辑类', + icons: [ + 'EditOutlined', + 'FormOutlined', + 'DeleteOutlined', + 'DeleteColumnOutlined', + 'DeleteRowOutlined', + 'InsertRowAboveOutlined', + 'InsertRowBelowOutlined', + 'InsertRowLeftOutlined', + 'InsertRowRightOutlined', + 'CopyOutlined', + 'SaveOutlined', + 'ExportOutlined', + 'ImportOutlined', + 'UndoOutlined', + 'RedoOutlined', + 'FormatPainterOutlined', + 'ScissorOutlined', + 'DragOutlined', + 'HolderOutlined', + 'CodeOutlined', + 'ConsoleSqlOutlined', + 'PullRequestOutlined', + 'SplitCellsOutlined', + 'MergeCellsOutlined', + 'MergeOutlined', + 'UngroupOutlined', + ] + }, + { + label: '提示状态类', + icons: [ + 'InfoCircleOutlined', + 'InfoOutlined', + 'CheckCircleOutlined', + 'CheckOutlined', + 'CheckSquareOutlined', + 'ExclamationCircleOutlined', + 'ExclamationOutlined', + 'WarningOutlined', + 'CloseCircleOutlined', + 'CloseOutlined', + 'CloseSquareOutlined', + 'QuestionCircleOutlined', + 'QuestionOutlined', + 'StopOutlined', + 'LoadingOutlined', + 'Loading3QuartersOutlined', + 'ClockCircleOutlined', + 'HistoryOutlined', + 'SyncOutlined', + 'ReloadOutlined', + 'FireOutlined', + ] + }, + { + label: '通用符号类', + icons: [ + 'HeartOutlined', + 'StarOutlined', + 'LikeOutlined', + 'DislikeOutlined', + 'TagOutlined', + 'TagsOutlined', + + 'BellOutlined', + 'EyeOutlined', + 'EyeInvisibleOutlined', + 'LockOutlined', + 'UnlockOutlined', + 'SecurityScanOutlined', + + 'SafetyCertificateOutlined', + 'SafetyOutlined', + 'HomeOutlined', + 'AppstoreOutlined', + 'AppstoreAddOutlined', + 'BlockOutlined', + + 'LayoutOutlined', + 'FullscreenOutlined', + 'FullscreenExitOutlined', + 'LinkOutlined', + 'PaperClipOutlined', + 'PictureOutlined', + + 'VideoCameraOutlined', + 'VideoCameraAddOutlined', + 'AudioOutlined', + 'AudioMutedOutlined', + 'SoundOutlined', + 'MutedOutlined', + + 'FilterOutlined', + 'SearchOutlined', + 'ZoomInOutlined', + 'ZoomOutOutlined', + 'EnvironmentOutlined', + 'PushpinOutlined', + + 'CompassOutlined', + 'FlagOutlined', + 'RadiusUpleftOutlined', + 'RadiusUprightOutlined', + 'RadiusBottomleftOutlined', + 'RadiusBottomrightOutlined', + + 'RadiusSettingOutlined', + 'ShareAltOutlined', + 'QrcodeOutlined', + 'BarcodeOutlined', + 'PrinterOutlined', + 'TranslationOutlined', + 'MacCommandOutlined', + ] + }, + { + label: '文件文档类', + icons: [ + 'FileOutlined', + 'FilePdfOutlined', + 'FileWordOutlined', + 'FileExcelOutlined', + 'FilePptOutlined', + 'FileMarkdownOutlined', + + 'FileImageOutlined', + 'FileZipOutlined', + 'FileTextOutlined', + 'FileUnknownOutlined', + 'FileExclamationOutlined', + 'FileDoneOutlined', + + 'FileSearchOutlined', + 'FileProtectOutlined', + 'FileSyncOutlined', + 'FileAddOutlined', + 'FileJpgOutlined', + 'FileGifOutlined', + + 'SnippetsOutlined', + 'BookOutlined', + 'ReadOutlined', + 'UnorderedListOutlined', + 'OrderedListOutlined', + 'MailOutlined', + + 'InboxOutlined', + 'SolutionOutlined', + ] + }, + { + label: '数据图表类', + icons: [ + 'AreaChartOutlined', + 'LineChartOutlined', + 'BarChartOutlined', + 'PieChartOutlined', + 'DotChartOutlined', + 'RadarChartOutlined', + 'HeatMapOutlined', + 'NumberOutlined', + 'PercentageOutlined', + 'RiseOutlined', + 'FallOutlined', + 'FundOutlined', + 'FundViewOutlined', + 'FundProjectionScreenOutlined', + 'StockOutlined', + 'DollarOutlined', + 'DollarCircleOutlined', + 'EuroOutlined', + 'EuroCircleOutlined', + 'PoundOutlined', + 'PoundCircleOutlined', + 'WalletOutlined', + 'MoneyCollectOutlined', + 'BankOutlined', + 'PayCircleOutlined', + 'InsuranceOutlined', + 'ReconciliationOutlined', + 'AuditOutlined', + 'CalculatorOutlined', + 'TableOutlined', + 'BorderVerticleOutlined', + 'BorderHorizontalOutlined', + 'BorderLeftOutlined', + 'BorderRightOutlined', + 'BorderTopOutlined', + 'BorderBottomOutlined', + 'BorderOutlined', + 'BorderInnerOutlined', + 'BorderOuterOutlined', + 'BorderlessTableOutlined', + ] + }, + { + label: '用户组织类', + icons: [ + 'UserOutlined', + 'UserAddOutlined', + 'UserDeleteOutlined', + 'UserSwitchOutlined', + 'TeamOutlined', + 'UsergroupAddOutlined', + 'UsergroupDeleteOutlined', + 'ContactsOutlined', + 'CustomerServiceOutlined', + 'ManOutlined', + 'WomanOutlined', + 'IdcardOutlined', + 'VerifiedOutlined', + 'CrownOutlined', + 'TrophyOutlined', + 'GiftOutlined', + 'RedEnvelopeOutlined', + 'ApartmentOutlined', + 'DeploymentUnitOutlined', + 'ClusterOutlined', + 'ProjectOutlined', + 'BranchesOutlined', + 'SubnodeOutlined', + 'NodeCollapseOutlined', + 'NodeExpandOutlined', + 'NodeIndexOutlined', + 'PartitionOutlined', + 'CalendarOutlined', + 'ScheduleOutlined', + ] + }, + { + label: '设备硬件类', + icons: [ + 'DesktopOutlined', + 'LaptopOutlined', + 'MobileOutlined', + 'PhoneOutlined', + 'TabletOutlined', + 'CloudOutlined', + + 'CloudServerOutlined', + 'CloudUploadOutlined', + 'CloudDownloadOutlined', + 'CloudSyncOutlined', + 'DatabaseOutlined', + 'HddOutlined', + + 'ContainerOutlined', + 'WifiOutlined', + 'UsbOutlined', + 'CarOutlined', + 'TruckOutlined', + 'ToolOutlined', + + 'MedicineBoxOutlined', + 'BoxPlotOutlined', + 'CameraOutlined', + 'RobotOutlined', + 'RocketOutlined', + 'ExperimentOutlined', + 'BugOutlined', + 'BuildOutlined', + 'ShopOutlined', + 'ShoppingOutlined', + 'ShoppingCartOutlined', + 'ProductOutlined', + 'DashboardOutlined', + 'ControlOutlined', + 'SlidersOutlined', + 'SettingOutlined', + 'BulbOutlined', + 'PoweroffOutlined', + 'SunOutlined', + 'MoonOutlined', + ] + }, + { + label: '品牌标识类', + icons: [ + 'AlibabaOutlined', + 'AlipayCircleOutlined', + 'AlipayOutlined', + 'TaobaoCircleOutlined', + 'TaobaoOutlined', + 'DingtalkOutlined', + + 'DingdingOutlined', + 'WechatOutlined', + 'WechatWorkOutlined', + 'QqOutlined', + 'WeiboCircleOutlined', + 'WeiboOutlined', + + 'WeiboSquareOutlined', + 'ZhihuOutlined', + 'BaiduOutlined', + 'YuqueOutlined', + 'TikTokOutlined', + 'AmazonOutlined', + + 'AppleOutlined', + 'AndroidOutlined', + 'ChromeOutlined', + 'IeOutlined', + 'GithubOutlined', + 'GitlabOutlined', + + 'Html5Outlined', + 'JavaScriptOutlined', + 'PythonOutlined', + 'JavaOutlined', + 'RubyOutlined', + 'GoogleOutlined', + + 'GooglePlusOutlined', + 'FacebookOutlined', + 'TwitterOutlined', + 'XOutlined', + 'InstagramOutlined', + 'LinkedinOutlined', + + 'YoutubeOutlined', + 'YahooOutlined', + 'SkypeOutlined', + 'SlackOutlined', + 'SlackSquareOutlined', + 'MediumOutlined', + + 'MediumWorkmarkOutlined', + 'RedditOutlined', + 'WhatsAppOutlined', + 'DiscordOutlined', + 'SpotifyOutlined', + 'DropboxOutlined', + + 'BehanceOutlined', + 'BehanceSquareOutlined', + 'DribbbleOutlined', + 'DribbbleSquareOutlined', + 'SketchOutlined', + 'PinterestOutlined', + + 'TwitchOutlined', + 'WindowsOutlined', + 'LinuxOutlined', + 'CodepenOutlined', + 'CodeSandboxOutlined', + 'AntDesignOutlined', + + 'AntCloudOutlined', + 'AliyunOutlined', + 'CiCircleOutlined', + 'CiOutlined', + 'TrademarkCircleOutlined', + 'TrademarkOutlined', + + 'CopyrightCircleOutlined', + 'CopyrightOutlined', + 'OpenAIOutlined', + 'HarmonyOSOutlined', + 'DotNetOutlined', + 'AliwangwangOutlined', + 'DockerOutlined', + 'KubernetesOutlined', + ] + }, + { + label: '其他类', + icons: [ + 'ThunderboltOutlined', + 'FontSizeOutlined', + 'FontColorsOutlined', + 'BoldOutlined', + 'ItalicOutlined', + 'UnderlineOutlined', + 'StrikethroughOutlined', + 'HighlightOutlined', + 'SmallDashOutlined', + 'DashOutlined', + 'ColumnHeightOutlined', + 'ColumnWidthOutlined', + 'LineHeightOutlined', + 'AlignCenterOutlined', + 'AlignLeftOutlined', + 'AlignRightOutlined', + 'AimOutlined', + 'RotateLeftOutlined', + 'RotateRightOutlined', + 'MessageOutlined', + 'CommentOutlined', + 'ClearOutlined', + 'BgColorsOutlined', + 'EllipsisOutlined', + 'MonitorOutlined', + 'GatewayOutlined', + 'FunctionOutlined', + 'IssuesCloseOutlined', + 'ShakeOutlined', + 'SelectOutlined', + 'SendOutlined', + 'ScanOutlined', + 'TransactionOutlined', + 'OneToOneOutlined', + 'DeliveredProcedureOutlined', + 'RestOutlined', + 'RetweetOutlined', + 'SignatureOutlined', + 'SisternodeOutlined', + 'SkinOutlined', + 'SelectOutlined', + ] + } + ] +} \ No newline at end of file diff --git a/frontend/packages/flow-types/src/types/index.ts b/frontend/packages/flow-types/src/types/index.ts index 452f5af7..022f1d55 100644 --- a/frontend/packages/flow-types/src/types/index.ts +++ b/frontend/packages/flow-types/src/types/index.ts @@ -1,3 +1,4 @@ export * from './form-view'; export * from './form-instance'; -export * from './flow-approval'; \ No newline at end of file +export * from './flow-approval'; +export * from './icons'; \ No newline at end of file