mapServe.tsx 6.1 KB

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