index.tsx 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. /*
  2. * @Author: code4eat awesomedema@gmail.com
  3. * @Date: 2023-03-03 11:30:33
  4. * @LastEditors: code4eat awesomedema@gmail.com
  5. * @LastEditTime: 2024-09-09 10:56:09
  6. * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  7. * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  8. */
  9. import { createFromIconfontCN } from '@ant-design/icons';
  10. import { ActionType, DrawerForm, EditableFormInstance, EditableProTable, ProFormInstance, ProFormSelect } from '@ant-design/pro-components';
  11. import { ModalForm, ProFormDigit, ProFormText, ProFormTextArea } from '@ant-design/pro-form'
  12. import { ProColumns } from '@ant-design/pro-table';
  13. import { Input, message, Popconfirm } from 'antd';
  14. import React, { useEffect, useRef, useState } from 'react'
  15. import { addData, delData, editData, getData } from './service';
  16. import './style.less';
  17. import KCIMPagecontainer from '@/components/KCIMPageContainer';
  18. import { KCIMTable } from '@/components/KCIMTable';
  19. import KCIMDrawerForm from '@/components/KCIMDrawerForm';
  20. import TableSelecter from './tableSelector';
  21. const IconFont = createFromIconfontCN({
  22. scriptUrl: '',
  23. });
  24. type TableDataResponse = {
  25. data: any[];
  26. success: boolean;
  27. total: number;
  28. pageSize: number;
  29. totalPage: number;
  30. };
  31. export default function FenyeTemplate() {
  32. const [tableDataFilterParams, set_tableDataFilterParams] = useState<any | undefined>();
  33. const [tableDataSearchKeywords, set_tableDataSearchKeywords] = useState<string>('');
  34. const tableRef = useRef<ActionType>();
  35. const [tableSelecterVisible, set_tableSelecterVisible] = useState(false);
  36. const [tableSelecterType, set_tableSelecterType] = useState<'EMP' | 'CHECKGROUP'>('EMP'); //穿梭框类型
  37. const [currentEdit,set_currentEdit] = useState<any|undefined>(undefined);
  38. const columns: ProColumns[] = [
  39. {
  40. title: 'Code',
  41. dataIndex: 'code',
  42. },
  43. {
  44. title: '展示排序',
  45. dataIndex: 'sort',
  46. },
  47. {
  48. title: '单位名',
  49. dataIndex: 'name',
  50. },
  51. {
  52. title: '职能科室',
  53. dataIndex: 'createUserName',
  54. },
  55. {
  56. title: '单位负责人',
  57. dataIndex: 'manager',
  58. renderText(list, record, index, action) {
  59. if(list){
  60. return list.reduce((prev:string,cur:any)=>`${prev.length>0?prev+',':''}${cur.name}`,'')
  61. }
  62. },
  63. },
  64. {
  65. title: '备注',
  66. dataIndex: 'remark',
  67. },
  68. {
  69. title: '是否作废',
  70. dataIndex: 'remark',
  71. },
  72. {
  73. title: '操作',
  74. key: 'option',
  75. width: 140,
  76. valueType: 'option',
  77. render: (_: any, record: any) => {
  78. return [
  79. <UpDataActBtn key={'act'} record={record} type='EDIT' />,
  80. <a key={'emp'} onClick={() => { openTransformModal(record);set_tableSelecterType('EMP');}} >人员</a>,
  81. // <a key={'theme'}>主题</a>,
  82. // <a key={'checkPoint'}>查核要点</a>
  83. ]
  84. },
  85. },
  86. ]
  87. const getTableData = async (params: any) => {
  88. const resp = await getData(params);
  89. if (resp) {
  90. return {
  91. data: resp,
  92. success: true,
  93. }
  94. }
  95. return []
  96. }
  97. const openTransformModal = (record:any) => {
  98. set_currentEdit(record);
  99. set_tableSelecterVisible(true);
  100. }
  101. const updateTable = async (formVal: any, type: 'EDIT' | "ADD") => {
  102. const content = formVal.table.map((a: any) => ({
  103. }))
  104. if (type == 'ADD') {
  105. const result = {
  106. name: formVal.name,
  107. content: JSON.stringify(formVal.table),
  108. remark: formVal.remark
  109. }
  110. const resp = await addData({ ...result });
  111. if (resp) {
  112. tableRef.current?.reload();
  113. message.success('操作成功!');
  114. }
  115. }
  116. if (type == 'EDIT') {
  117. const result = {
  118. id: formVal.id,
  119. name: formVal.name,
  120. content: JSON.stringify(formVal.table),
  121. remark: formVal.remark
  122. }
  123. const resp = await editData({ ...result });
  124. if (resp) {
  125. tableRef.current?.reload();
  126. message.success('操作成功!');
  127. }
  128. }
  129. return true;
  130. }
  131. const UpDataActBtn = ({ record, type }: { record: any, type: 'EDIT' | 'ADD' }) => {
  132. const formRef = useRef<ProFormInstance<any>>();
  133. return (
  134. <ModalForm
  135. title={`${type == 'EDIT' ? '编辑' : '新增'}单位`}
  136. width={400}
  137. initialValues={type == 'EDIT' ? { ...record, filedType: 'Text' } : { filedType: 'Text' }}
  138. trigger={
  139. type == 'EDIT' ? <a key="edit" >编辑</a> : <span className='add'>新增</span>
  140. }
  141. onFinish={(val: any) => {
  142. return updateTable(type == 'EDIT' ? { ...record, ...val } : { ...val }, type);
  143. }}
  144. formRef={formRef}
  145. modalProps={{ destroyOnClose: true }}
  146. colProps={{ span: 24 }}
  147. grid
  148. >
  149. <ProFormText
  150. name="name"
  151. label="单位名称:"
  152. placeholder="请输入"
  153. rules={[{ required: true, message: '名称不能为空!' }]}
  154. />
  155. <ProFormDigit name="sort" label='展示排序' />
  156. <ProFormTextArea
  157. name="remark"
  158. label="备注:"
  159. placeholder="请输入"
  160. />
  161. </ModalForm>
  162. )
  163. }
  164. const tableDataSearchHandle = (paramName: string) => {
  165. set_tableDataFilterParams({
  166. ...tableDataFilterParams,
  167. [`${paramName}`]: tableDataSearchKeywords
  168. })
  169. }
  170. const tableSelecterCommit = async (keys:React.Key[],rows:any[]) => {
  171. }
  172. useEffect(() => {
  173. }, [])
  174. return (
  175. <KCIMPagecontainer className='unitMana' title={false}>
  176. <TableSelecter
  177. onVisibleChange={(bool) => set_tableSelecterVisible(bool)}
  178. title='关联'
  179. rowKey='id'
  180. tableSelecterType={tableSelecterType}
  181. record={currentEdit}
  182. open={tableSelecterVisible}
  183. onFinish={(keys,rows)=>tableSelecterCommit(keys,rows)}
  184. />
  185. <div className='toolBar'>
  186. <div className='filter'>
  187. <div className='filterItem' style={{ marginRight: 16, width: 250 }}>
  188. <span className='label' style={{ whiteSpace: 'nowrap' }}> 检索:</span>
  189. <Input placeholder={'请输入单位/负责人'} allowClear autoComplete='off'
  190. suffix={
  191. <IconFont type="iconsousuo" style={{ color: '#99A6BF' }} onClick={() => tableDataSearchHandle('filter')} />
  192. }
  193. onChange={(e) => {
  194. set_tableDataSearchKeywords(e.target.value);
  195. if (e.target.value.length == 0) {
  196. set_tableDataFilterParams({
  197. ...tableDataFilterParams,
  198. filter: ''
  199. });
  200. }
  201. }}
  202. onPressEnter={(e) => {
  203. set_tableDataFilterParams({
  204. ...tableDataFilterParams,
  205. filter: (e.target as HTMLInputElement).value
  206. });
  207. }}
  208. />
  209. </div>
  210. </div>
  211. {/* <div className='btnGroup'>
  212. <UpDataActBtn record type='ADD' />
  213. </div> */}
  214. </div>
  215. <div style={{ marginTop: 16 }}>
  216. <KCIMTable columns={columns as ProColumns[]} actionRef={tableRef} rowKey='id' params={tableDataFilterParams} request={(params) => getTableData(params)} />
  217. </div>
  218. </KCIMPagecontainer>
  219. )
  220. }