indexconfig.tsx 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. import React, { useEffect, useRef, useState } from "react";
  2. import { type ProColumns, type ActionType, type ProFormInstance, EditableProTable } from '@ant-design/pro-components';
  3. import type {FormInstance} from 'antd'
  4. import { SDPage,SDFormText,SDModalForm,SDTable,SDButton,SDSubmitButton,EditType, SDAreaTtile, SDOperate, baseFun, validateFun, SDFormDict, } from "@sundata/ui-frame";
  5. import type { IndexConfigModel, IndexSourceModel } from '@/services/internalEvaluation/configuration/indexconfig';
  6. import { WomanOutlined } from "@ant-design/icons";
  7. import { ProductProps } from "@/sundataImport";
  8. import { deleteRows, getDataList, selectDetailData, updateExistData, createData } from "@/services/internalEvaluation/configuration/indexconfig";
  9. import { countChineseChars, firstCharIsNotNumber } from "../utils/rwacheckutils";
  10. import { useModel } from '@umijs/max';
  11. type widowRush = {
  12. onCancel: () => void;
  13. onChangeVisible(visible: boolean, type: string): unknown;
  14. onChangeVisdible:(visible:boolean,type ?: 'none' | 'raload' )=>void;
  15. }& ProductProps;
  16. const indexconfig : React.FC<widowRush> = (prop:widowRush) => {
  17. /** 编辑方式,查看、修改、新增按钮时设置,详细信息表单中使用 */
  18. const [editType, setEditType] = useState<EditType>(prop.editType || 'display');
  19. /** 是否显示详细信息窗口 */
  20. const [detailVisible, setDetailVisible] = useState<boolean>(false);
  21. const [currentRow, setCurrentRow] = useState<IndexConfigModel>();
  22. /** 表格引用对象,刷新表格使用 */
  23. const actionRef = useRef<ActionType>();
  24. const formRef = useRef<FormInstance<any>>();
  25. const templateRef = useRef<FormInstance<any>>();
  26. // 页面数据
  27. var formDataList = new Array<IndexConfigModel>;
  28. const { fetchDict } = useModel('dict');
  29. const [indexSourceList, setIndexSourceList] = useState<IndexSourceModel[]>();
  30. useEffect(() => {
  31. }, []);
  32. // 修改查询查询
  33. const selectData = async (formdata : IndexConfigModel) => {
  34. const data = await selectDetailData(formdata);
  35. formRef.current?.setFieldsValue(data);
  36. setIndexSourceList(data.indexDataSource);
  37. }
  38. // 删除
  39. const delRows =async(record:any)=>{
  40. baseFun.confirm('确认删除?',async() =>{
  41. await deleteRows(record);
  42. baseFun.info("删除成功");
  43. closeAndRefresh();
  44. });
  45. }
  46. //关闭窗口刷新父页面
  47. const closeAndRefresh = ()=>{
  48. actionRef.current?.reloadAndRest?.();
  49. }
  50. // 插入或者更新数据
  51. const handleSave = async(data: IndexConfigModel,) => {
  52. data.indexDataSource = indexSourceList;
  53. if (editType == 'update' ) {
  54. await updateExistData(data);
  55. closeAndRefresh();
  56. }
  57. else if (editType == 'create' ) {
  58. await createData(data);
  59. closeAndRefresh();
  60. }
  61. setDetailVisible(false);
  62. }
  63. // 数据项配置页面展示元素
  64. const columns: ProColumns<IndexConfigModel>[] = [
  65. {
  66. title: '指标编号',
  67. dataIndex: 'indexNo',
  68. hideInTable: false,
  69. },
  70. {
  71. title: '指标名称',
  72. dataIndex: 'indexName',
  73. search: false,
  74. hideInTable: false,
  75. formItemProps:{
  76. rules:[
  77. {validator:validateFun.chineseRex,message:'请输入中文'},
  78. ]
  79. }
  80. },
  81. {
  82. title: '指标逻辑',
  83. dataIndex: 'indexLogic',
  84. search: false,
  85. hideInTable: false,
  86. },
  87. {
  88. title: '操作',
  89. dataIndex: 'operate',
  90. valueType: 'option',
  91. render: (_, record) => [
  92. <SDOperate
  93. key="roleCfg"
  94. icon={<WomanOutlined />}
  95. successMessage=""
  96. onClick={
  97. ()=>{
  98. selectData(record);
  99. setDetailVisible(true);
  100. setEditType('update')
  101. } }
  102. >
  103. 修改
  104. </SDOperate>,
  105. <SDOperate
  106. key="roleCfg"
  107. icon={<WomanOutlined />}
  108. successMessage=""
  109. onClick={()=>{delRows(record) } }
  110. >
  111. 删除
  112. </SDOperate>,
  113. ],
  114. },
  115. ];
  116. // 数据项配置页面展示元素
  117. const indexSourceColumns: ProColumns<IndexSourceModel>[] = [
  118. {
  119. title: '指标数据来源编号',
  120. dataIndex: 'indexSourceNo',
  121. search: false,
  122. hideInTable: true,
  123. },
  124. {
  125. title: '指标编号',
  126. dataIndex: 'indexNo',
  127. search:false,
  128. hideInTable: true,
  129. },
  130. {
  131. title: '其他指标编号',
  132. dataIndex: 'otherIndexNo',
  133. hideInTable: false,
  134. valueType:'select',
  135. request:()=>fetchDict('@selectAllIndexToDict'),
  136. fieldProps: {
  137. treeDefaultExpandAll: true,
  138. treeCheckable:true,
  139. },
  140. },
  141. {
  142. title: '数据集编号',
  143. dataIndex: 'dataSetNo',
  144. search: false,
  145. hideInTable: false,
  146. valueType:'select',
  147. request:()=>fetchDict('@selectDataSet'),
  148. fieldProps: {
  149. treeDefaultExpandAll: true,
  150. treeCheckable:true,
  151. },
  152. },
  153. {
  154. title: '数据类型',
  155. dataIndex: 'dataSourceType',
  156. search: false,
  157. hideInTable: false,
  158. request:()=>fetchDict('INDEXSOURCETYPE'),
  159. valueType:'select',
  160. fieldProps: {
  161. treeDefaultExpandAll: true,
  162. treeCheckable:true,
  163. },
  164. },
  165. {
  166. title: '操作',
  167. valueType: 'option',
  168. width: 200,
  169. render: (text, record, _, action) => [
  170. <a
  171. key="editable"
  172. onClick={() => {
  173. action?.startEditable?.(record.indexSourceNo);
  174. }}
  175. >
  176. 编辑
  177. </a>,
  178. <a
  179. key="delete"
  180. onClick={() => {
  181. setIndexSourceList(indexSourceList?.filter((item) => item.indexSourceNo !== record.indexSourceNo));
  182. }}
  183. >
  184. 删除
  185. </a>,
  186. ],
  187. },
  188. ];
  189. return (
  190. <SDPage>
  191. <SDTable
  192. title="查询表格"
  193. rowKey="customerName"
  194. request={async (formdata:IndexConfigModel) =>{
  195. const formDatas = await getDataList(formdata);
  196. // 解构数组(导出用)
  197. formDataList=[...formDatas];
  198. return {data: formDatas}
  199. } }
  200. columns={columns}
  201. actionRef={actionRef}
  202. toolBarRender={(_: any, { selectedRows }: any) => [
  203. <SDButton
  204. successMessage=""
  205. onClick={()=>{
  206. setEditType('create');
  207. setDetailVisible(true);
  208. setIndexSourceList([]);
  209. }}
  210. >
  211. 新增
  212. </SDButton>
  213. ]}
  214. formRef={formRef}
  215. setDetailVisible={() => {setDetailVisible(true)}}
  216. setEditType={setEditType}
  217. setCurrentRow={setCurrentRow}
  218. />
  219. {detailVisible && (
  220. <SDModalForm
  221. title={'详细信息'}
  222. editType={editType}
  223. params={currentRow}
  224. visible={detailVisible}
  225. onVisibleChange={() => {setDetailVisible(false)}}
  226. footer={[
  227. <SDSubmitButton editType={editType} formRef={formRef} doSubmit={handleSave} >保存</SDSubmitButton>,
  228. <SDButton
  229. key="closeUpdate"
  230. successMessage=''
  231. onClick={() => {
  232. setDetailVisible(false);
  233. }}>关闭</SDButton>
  234. ]}
  235. tableRef={actionRef}
  236. formRef={formRef}
  237. >
  238. <SDAreaTtile title='指标配置信息'/>
  239. <SDFormText name="indexNo" readonlyCond="update"
  240. rules={[
  241. { required: true, message: '请输入编号' },
  242. {
  243. validator:validateFun.account
  244. },
  245. {
  246. validator: (rule, value, callback)=> {
  247. if (firstCharIsNotNumber(value)>0) {
  248. callback('编号不能以数字开头');
  249. } else {
  250. callback();
  251. }
  252. }
  253. }]} label="指标编号"/>
  254. <SDFormText name="indexName" rules={[{validator:validateFun.chineseRex,message:'请输入中文'}]} label="指标名称"/>
  255. <SDFormText type="textarea" name="indexLogic" label="指标逻辑"/>
  256. <SDAreaTtile title='数据来源'/>
  257. <EditableProTable<IndexSourceModel>
  258. rowKey="indexSourceNo"
  259. headerTitle="可编辑表格"
  260. columns={indexSourceColumns}
  261. value={indexSourceList}
  262. dataSource={indexSourceList}
  263. onChange={(value)=>{
  264. setIndexSourceList([...value]);
  265. }}
  266. recordCreatorProps={
  267. {
  268. position:'bottom',
  269. record: () => ({ indexSourceNo: (Math.random() * 1000000).toFixed(0),
  270. })
  271. }
  272. }
  273. />
  274. </SDModalForm>
  275. )}
  276. </SDPage>
  277. );
  278. }
  279. export default indexconfig;