mapServe.tsx 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. import React, { useState, useEffect } from 'react';
  2. import { FlowchartFormWrapper, MODELS, useXFlowApp } from '@antv/xflow';
  3. import { Position, Size, ColorPicker, InputNumberFiled, InputFiled, SelectField } from '../fields';
  4. import { PREFIX } from '../constants';
  5. import { connect } from 'dva';
  6. import { UnityAction } from '@/utils/utils';
  7. import { Button } from 'antd';
  8. import { IProps } from '@/components/Flow/index';
  9. export interface IConfig {
  10. label?: string;
  11. x?: number;
  12. y?: number;
  13. width?: number;
  14. height?: number;
  15. count?: number;
  16. fontSize?: number;
  17. fontFill?: string;
  18. fill?: string;
  19. stroke?: string;
  20. flow_id?: string;
  21. flow_node_id?: string;
  22. process_code?: string;
  23. node_type_psr?: number | string;
  24. }
  25. const defaultConfig: IConfig = {
  26. node_type_psr: 0,
  27. };
  28. const Component = (props: any) => {
  29. const { config, plugin = {}, auditList } = props;
  30. const { updateNode } = plugin;
  31. const [nodeConfig, setNodeConfig] = useState<IConfig>({
  32. ...defaultConfig,
  33. ...config,
  34. });
  35. const app = useXFlowApp();
  36. const [meta, setMeta] = useState<IProps['meta']>(null);
  37. const onNodeConfigChange = (key: string, value: number | string | object) => {
  38. if (key) {
  39. setNodeConfig({
  40. ...nodeConfig,
  41. [key]: value,
  42. });
  43. updateNode({
  44. [key]: value,
  45. });
  46. } else if (value instanceof Object) {
  47. setNodeConfig({
  48. ...nodeConfig,
  49. ...value,
  50. });
  51. updateNode({
  52. ...value,
  53. });
  54. }
  55. };
  56. const onSave = () => {
  57. UnityAction.emit('NODE_SAVE', nodeConfig);
  58. };
  59. useEffect(() => {
  60. setNodeConfig({
  61. ...config,
  62. });
  63. }, [config]);
  64. useEffect(() => {
  65. MODELS.GRAPH_META.useValue(app.modelService).then((meta: IProps['meta']) => {
  66. setMeta(meta);
  67. });
  68. }, []);
  69. return (
  70. <div className={`${PREFIX}-panel-body`}>
  71. <div className={`${PREFIX}-panel-group`}>
  72. <h5>内容</h5>
  73. <InputFiled
  74. label="标题"
  75. value={nodeConfig.label}
  76. disabled={meta?.editMode == 2}
  77. onChange={value => {
  78. onNodeConfigChange('label', value);
  79. }}
  80. />
  81. </div>
  82. <div className={`${PREFIX}-panel-group`}>
  83. <h5>数据</h5>
  84. <SelectField
  85. label="审批流程"
  86. value={nodeConfig.flow_id}
  87. disabled={meta?.editMode == 2}
  88. onChange={value => {
  89. let audit = auditList.find(item => item.list.id == value);
  90. onNodeConfigChange(null, {
  91. flow_node_id: audit.list.FlowNodes[0]?.id,
  92. flow_id: value,
  93. process_code: audit.list.process_code,
  94. });
  95. }}
  96. options={auditList.map(item => {
  97. const list = item.list;
  98. return {
  99. label: list.name || list.id,
  100. value: list.id,
  101. };
  102. })}
  103. />
  104. <SelectField
  105. label="节点类型"
  106. value={nodeConfig.node_type_psr}
  107. onChange={value => {
  108. onNodeConfigChange('node_type_psr', value);
  109. }}
  110. options={[
  111. { label: '默认', value: 0 },
  112. { label: '投标版', value: 1 },
  113. { label: '签字版', value: 2 },
  114. { label: '投标测算', value: 3 },
  115. { label: '合同测算', value: 4 },
  116. { label: '采购合同', value: 5 },
  117. { label: '方案总审', value: 6 },
  118. { label: '清单权限', value: 7 }, //发起人和审批人可见
  119. ]}
  120. />
  121. </div>
  122. {meta?.editMode != 2 && (
  123. <>
  124. <div className={`${PREFIX}-panel-group`}>
  125. <h5>样式</h5>
  126. <Position
  127. x={nodeConfig.x}
  128. y={nodeConfig.y}
  129. onChange={(key, value) => {
  130. onNodeConfigChange(key, value);
  131. }}
  132. />
  133. <Size
  134. width={nodeConfig.width}
  135. height={nodeConfig.height}
  136. onChange={(key, value) => {
  137. onNodeConfigChange(key, value);
  138. }}
  139. />
  140. <ColorPicker
  141. label="填充"
  142. value={nodeConfig.fill}
  143. onChange={(value: string) => {
  144. onNodeConfigChange('fill', value);
  145. }}
  146. />
  147. <ColorPicker
  148. label="边框"
  149. value={nodeConfig.stroke}
  150. onChange={(value: string) => {
  151. onNodeConfigChange('stroke', value);
  152. }}
  153. />
  154. <InputNumberFiled
  155. label="消息数量"
  156. value={nodeConfig.count}
  157. onChange={value => {
  158. onNodeConfigChange('count', value);
  159. }}
  160. />
  161. </div>
  162. <div className={`${PREFIX}-node-text-style`}>
  163. <InputNumberFiled
  164. label="字号"
  165. value={nodeConfig.fontSize}
  166. width={68}
  167. onChange={value => {
  168. onNodeConfigChange('fontSize', value);
  169. }}
  170. />
  171. <ColorPicker
  172. value={nodeConfig.fontFill}
  173. onChange={(value: string) => {
  174. onNodeConfigChange('fontFill', value);
  175. }}
  176. />
  177. </div>
  178. <Button style={{ marginTop: 20 }} type="primary" onClick={onSave}>
  179. 保存
  180. </Button>
  181. </>
  182. )}
  183. </div>
  184. );
  185. };
  186. function RecthServe(props: any) {
  187. return (
  188. <FlowchartFormWrapper {...props}>
  189. {(config, plugin) => <Component {...props} plugin={plugin} config={config} />}
  190. </FlowchartFormWrapper>
  191. );
  192. }
  193. export default connect(({ xflow }) => ({ auditList: xflow.auditList }))(RecthServe);