defOperate.tsx 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. import React, { useEffect, useRef, useState, } from 'react';
  2. import type { EditableFormInstance, ProColumns, } from '@ant-design/pro-components';
  3. import {
  4. baseFun,
  5. SDAreaTtile,
  6. SDButton,
  7. SDEditableTable,
  8. SDLayout,
  9. SDPage,
  10. } from '@sundata/ui-frame';
  11. import type { SysSqlEditDefOperateModel } from './../../../services/pubMng/defOperate';
  12. import { vailOperName } from './../../../services/pubMng/defOperate';
  13. import { saveOperateDefineList } from './../../../services/pubMng/defOperate';
  14. import { getDataList } from './../../../services/pubMng/defOperate';
  15. import { useModel } from '@umijs/max';
  16. const DefOperate: React.FC = () => {
  17. /** 字段数据 */
  18. const [fieldDataSource, setFieldDataSource] = useState<readonly SysSqlEditDefOperateModel[]>();
  19. // 可编辑表格的引用
  20. const tableRef = useRef<EditableFormInstance>();
  21. const { fetchDict } = useModel('dict');
  22. /**关系维护 */
  23. const getListFun = async () => {
  24. const resu = await getDataList();
  25. setFieldDataSource(resu);
  26. }
  27. useEffect(() => {
  28. getListFun();
  29. }, []);
  30. const saveinfo = async () => {
  31. // 检查表格编辑状态
  32. const editingRows = tableRef.current?.getRowsData?.();
  33. if (editingRows && editingRows.length > 0) {
  34. baseFun.warning('参数列表中有正在编辑的参数,请确认或取消修改后再保存');
  35. return;
  36. }
  37. if (!fieldDataSource) {
  38. return;
  39. }
  40. for (let i = 0; i < fieldDataSource.length; i++) {
  41. if (fieldDataSource[i].operusemode == 'attribute' && fieldDataSource[i].datatype == "") {
  42. baseFun.warning("操作符" + fieldDataSource[i].opercode + "使用方式为属性时数据类型不能为空!");
  43. return;
  44. }
  45. for (let j = 0; j < fieldDataSource.length; j++) {
  46. if (fieldDataSource[i].opercode == fieldDataSource[j].opercode && i != j) {
  47. baseFun.warning("操作符" + fieldDataSource[i].opercode + "不唯一");
  48. return;
  49. }
  50. if (fieldDataSource[i].opername == fieldDataSource[j].opername && i != j) {
  51. baseFun.warning("操作符名称 " + fieldDataSource[i].opername + " 不唯一");
  52. return;
  53. }
  54. }
  55. }
  56. //保存
  57. await saveOperateDefineList([...(fieldDataSource || [])]);
  58. baseFun.info('处理完成');
  59. }
  60. const filedColumns: ProColumns<SysSqlEditDefOperateModel>[] = [
  61. {
  62. title: '使用方式',
  63. dataIndex: 'operusemode',
  64. valueType: 'select',
  65. search: false,
  66. request: () => fetchDict({ dictKey: 'operusemode' }),
  67. formItemProps: () => {
  68. return {
  69. rules: [{ required: true }],
  70. };
  71. },
  72. },
  73. {
  74. title: '操作符',
  75. dataIndex: 'opercode',
  76. search: false,
  77. valueType: 'text',
  78. //render:
  79. formItemProps: () => {
  80. return {
  81. rules: [
  82. { required: true },
  83. ],
  84. };
  85. },
  86. },
  87. {
  88. title: '操作参数',
  89. dataIndex: 'operpara',
  90. search: false,
  91. formItemProps: () => {
  92. return {
  93. rules: [{ max: 20, message: '最多20个字符' }],
  94. };
  95. },
  96. },
  97. {
  98. title: '操作名称',
  99. dataIndex: 'opername',
  100. search: false,
  101. formItemProps: () => {
  102. return {
  103. rules: [
  104. { max: 60, message: '最多60个字符' },
  105. { required: true },
  106. {
  107. validator: async (rule, value,) => {
  108. if (value) {
  109. if (value.indexOf(" ") != -1) {
  110. return Promise.reject(new Error("操作名称[" + value + "]不能含有空格!"));
  111. }
  112. if (value.indexOf(".") != -1) {
  113. return Promise.reject(new Error("操作名称[" + value + "]不能含有点号!"));
  114. }
  115. }
  116. const rs = await vailOperName(value);
  117. if (!rs) {
  118. return Promise.reject(new Error("操作名称与编辑器变量名重复"));
  119. }
  120. return Promise.resolve();
  121. }
  122. },
  123. ],
  124. };
  125. },
  126. },
  127. {
  128. title: '数据类型',
  129. dataIndex: 'datatype',
  130. search: false,
  131. valueType: 'select',
  132. request: () => fetchDict({ dictKey: 'datatype' }),
  133. },
  134. {
  135. title: '操作说明',
  136. dataIndex: 'opercomment',
  137. search: false,
  138. ellipsis: true,
  139. valueType: 'textarea',
  140. formItemProps: () => {
  141. return {
  142. rules: [{ max: 200, message: '最多200个字符' }],
  143. };
  144. },
  145. },
  146. ];
  147. return (
  148. <SDPage
  149. footer={[<SDButton autoLoading={true} successMessage='' primary key='save' onClick={saveinfo} >保存</SDButton>]}
  150. >
  151. <SDAreaTtile title="数据操作定义"/>
  152. <SDLayout>
  153. <SDEditableTable
  154. columns={filedColumns}
  155. value={fieldDataSource || []}
  156. //insertDelete={false}
  157. editable={true}
  158. dragable={true}
  159. onChange={(value: any)=>{setFieldDataSource(value)}}
  160. formRef={tableRef}
  161. //bodyMaxHeight='calc(100vh - 350px)'
  162. />
  163. </SDLayout>
  164. </SDPage>
  165. );
  166. };
  167. export default DefOperate;