editTableModal.tsx 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. import React, { Key, useEffect, useState } from "react";
  2. import { Input, Select } from 'antd'
  3. import { KCIMTable } from "@/components/KCIMTable";
  4. import { createFromIconfontCN } from "@ant-design/icons";
  5. import { EditableProTable, ModalForm, ProColumns, ProFormSelect, ProFormText } from "@ant-design/pro-components";
  6. import { set } from "lodash";
  7. import { getHasSetParamsList, getParamsSelectableList } from "./service";
  8. import { RecordKey } from "@ant-design/pro-utils/es/useEditableArray";
  9. // import './style.less';
  10. interface TableSelecterProps {
  11. record: any
  12. }
  13. const IconFont = createFromIconfontCN({
  14. scriptUrl: '',
  15. });
  16. const EditTableModal = ({ record, open, title, onVisibleChange, rowKey = 'id', onFinish }: {
  17. record: any, open: boolean, title: string, onVisibleChange: (bool: boolean) => void,
  18. rowKey?: string, onFinish?: (selectedRows: any[]) => void
  19. }) => {
  20. const Table = React.forwardRef(({ }: TableSelecterProps, ref) => {
  21. const [datasource, set_datasource] = useState<any[]>([]);
  22. let currentSelectedRow:undefined|any = undefined;
  23. const columns: ProColumns[] = [
  24. {
  25. title: '分摊参数',
  26. dataIndex: 'shareParamCode',
  27. ellipsis:true,
  28. valueType:'select',
  29. request:async ()=>{
  30. const resp = await getParamsSelectableList({pageSize:500,current:1,id:record.id});
  31. if(resp){
  32. return resp.list.map((a:any)=>({label: a.shareParamName,value: a.shareParamCode,id:a.id}))
  33. }
  34. return []
  35. },
  36. fieldProps:{
  37. showSearch:true,
  38. style: {
  39. width: '160px', // 设置你想要的宽度
  40. },
  41. onSelect:(a: any,b: any,c:any)=>{
  42. currentSelectedRow = b;
  43. }
  44. }
  45. },
  46. {
  47. title: '分摊比例',
  48. dataIndex: 'shareParamPopout',
  49. ellipsis:true,
  50. valueType:'digit'
  51. },
  52. {
  53. title: '操作',
  54. valueType: 'option',
  55. render: (text, record, _, action) => [
  56. <a
  57. key="editable"
  58. onClick={() => {
  59. action?.startEditable?.(record.id);
  60. }}
  61. >
  62. 编辑
  63. </a>,
  64. <a
  65. key="delete"
  66. onClick={() => {
  67. set_datasource(datasource.filter((item) => item.id !== record.id));
  68. }}
  69. >
  70. 删除
  71. </a>,
  72. ],
  73. },
  74. ];
  75. const saveHandle = async () => {
  76. onFinish && onFinish(datasource);
  77. }
  78. const getTableData = async () => {
  79. const resp = await getHasSetParamsList(record.id);
  80. if(resp){
  81. set_datasource(resp);
  82. }else{
  83. return Promise.resolve([]);
  84. }
  85. }
  86. useEffect(() => {
  87. getTableData()
  88. }, [])
  89. return (
  90. <div >
  91. <EditableProTable columns={columns}
  92. className='EditableProTable'
  93. options={false}
  94. rowKey={rowKey}
  95. scroll={{ y: 400 }}
  96. tableAlertRender={false}
  97. recordCreatorProps={
  98. {
  99. record: () => ({ id: (Math.random() * 1000000).toFixed(0) }),
  100. }
  101. }
  102. editable={{
  103. onSave: async (rowKey, data, row) => {
  104. // console.log({rowKey, data, row,currentSelectedRow,datasource});
  105. const {index} = data;
  106. if(index > datasource.length - 1){
  107. //新增
  108. const {id,label} = currentSelectedRow;
  109. set_datasource([...datasource,{
  110. shareParamName:label,
  111. shareParamCode:data.shareParamCode,
  112. shareParamPopout:data.shareParamPopout,
  113. id:id
  114. }]);
  115. }else {
  116. //编辑
  117. const newData = [...datasource];
  118. newData[index] = {
  119. shareParamName:currentSelectedRow?currentSelectedRow.label:data.shareParamName,
  120. shareParamCode:data.shareParamCode,
  121. shareParamPopout:data.shareParamPopout,
  122. id:currentSelectedRow?currentSelectedRow.id:data.id
  123. };
  124. set_datasource([...newData]);
  125. }
  126. currentSelectedRow = undefined;
  127. },
  128. }}
  129. value={datasource}
  130. />
  131. <div className='footer'>
  132. <span className='cancel' onClick={() => close()}>取消</span>
  133. <span className='ok' onClick={() => saveHandle()}>{`确认`}</span>
  134. </div>
  135. </div>
  136. )
  137. });
  138. const close = () => {
  139. onVisibleChange && onVisibleChange(false);
  140. }
  141. return (
  142. <ModalForm className="TableSelecter" title={title} width={550} submitter={{
  143. render: false
  144. }} open={open} modalProps={{
  145. closable: false,
  146. }}>
  147. <Table
  148. // ref={tableSelecterRef}
  149. record={undefined}
  150. ></Table>
  151. </ModalForm>
  152. )
  153. }
  154. export default EditTableModal