mapServe.tsx 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. import React, { useState, useEffect } from 'react';
  2. import { FlowchartFormWrapper } 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. export interface IConfig {
  9. label?: string;
  10. x?: number;
  11. y?: number;
  12. width?: number;
  13. height?: number;
  14. count?: number;
  15. fontSize?: number;
  16. fontFill?: string;
  17. fill?: string;
  18. stroke?: string;
  19. flow_id?: string;
  20. flow_node_id?: string;
  21. process_code?: string;
  22. }
  23. const Component = (props: any) => {
  24. const { config, plugin = {}, auditList } = props;
  25. const { updateNode } = plugin;
  26. const [nodeConfig, setNodeConfig] = useState<IConfig>({
  27. ...config,
  28. });
  29. const onNodeConfigChange = (key: string, value: number | string | object) => {
  30. if (key) {
  31. setNodeConfig({
  32. ...nodeConfig,
  33. [key]: value,
  34. });
  35. updateNode({
  36. [key]: value,
  37. });
  38. } else if (value instanceof Object) {
  39. setNodeConfig({
  40. ...nodeConfig,
  41. ...value,
  42. });
  43. updateNode({
  44. ...value,
  45. });
  46. }
  47. };
  48. const onSave = () => {
  49. UnityAction.emit('NODE_SAVE', nodeConfig);
  50. };
  51. useEffect(() => {
  52. setNodeConfig({
  53. ...config,
  54. });
  55. }, [config]);
  56. return (
  57. <div className={`${PREFIX}-panel-body`}>
  58. <div className={`${PREFIX}-panel-group`}>
  59. <h5>内容</h5>
  60. <InputFiled
  61. label="标题"
  62. value={nodeConfig.label}
  63. onChange={value => {
  64. onNodeConfigChange('label', value);
  65. }}
  66. />
  67. </div>
  68. <div className={`${PREFIX}-panel-group`}>
  69. <h5>数据</h5>
  70. <SelectField
  71. label="审批流程"
  72. value={nodeConfig.flow_id}
  73. onChange={value => {
  74. let audit = auditList.find(item => item.list.id == value);
  75. onNodeConfigChange(null, {
  76. flow_node_id: audit.list.FlowNodes[0]?.id,
  77. flow_id: value,
  78. process_code: audit.list.process_code,
  79. });
  80. }}
  81. options={auditList.map(item => {
  82. const list = item.list;
  83. return {
  84. label: list.name || list.id,
  85. value: list.id,
  86. };
  87. })}
  88. />
  89. </div>
  90. <div className={`${PREFIX}-panel-group`}>
  91. <h5>样式</h5>
  92. <Position
  93. x={nodeConfig.x}
  94. y={nodeConfig.y}
  95. onChange={(key, value) => {
  96. onNodeConfigChange(key, value);
  97. }}
  98. />
  99. <Size
  100. width={nodeConfig.width}
  101. height={nodeConfig.height}
  102. onChange={(key, value) => {
  103. onNodeConfigChange(key, value);
  104. }}
  105. />
  106. <ColorPicker
  107. label="填充"
  108. value={nodeConfig.fill}
  109. onChange={(value: string) => {
  110. onNodeConfigChange('fill', value);
  111. }}
  112. />
  113. <ColorPicker
  114. label="边框"
  115. value={nodeConfig.stroke}
  116. onChange={(value: string) => {
  117. onNodeConfigChange('stroke', value);
  118. }}
  119. />
  120. <InputNumberFiled
  121. label="消息数量"
  122. value={nodeConfig.count}
  123. onChange={value => {
  124. onNodeConfigChange('count', value);
  125. }}
  126. />
  127. </div>
  128. <div className={`${PREFIX}-node-text-style`}>
  129. <InputNumberFiled
  130. label="字号"
  131. value={nodeConfig.fontSize}
  132. width={68}
  133. onChange={value => {
  134. onNodeConfigChange('fontSize', value);
  135. }}
  136. />
  137. <ColorPicker
  138. value={nodeConfig.fontFill}
  139. onChange={(value: string) => {
  140. onNodeConfigChange('fontFill', value);
  141. }}
  142. />
  143. </div>
  144. <Button style={{ marginTop: 20 }} type="primary" onClick={onSave}>
  145. 保存
  146. </Button>
  147. </div>
  148. );
  149. };
  150. function RecthServe(props: any) {
  151. return (
  152. <FlowchartFormWrapper {...props}>
  153. {(config, plugin) => <Component {...props} plugin={plugin} config={config} />}
  154. </FlowchartFormWrapper>
  155. );
  156. }
  157. export default connect(({ xflow }) => ({ auditList: xflow.auditList }))(RecthServe);