rule.tsx 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. import React, { useEffect, useRef, useState } from "react";
  2. import type { ProColumns, ActionType } from '@ant-design/pro-components';
  3. import type {FormInstance} from 'antd'
  4. import {Upload} from 'antd'
  5. import { SDPage,SDFormText,SDModalForm,SDTable,SDFormItem,SDButton,SDSubmitButton,EditType, SDAreaTtile, SDOperate, baseFun,SDModal, validateFun, SDFormDict, } from "@sundata/ui-frame";
  6. import {getDataList,deleteRows,selectDetailData,fetchDetailData,
  7. updateExistData,exportExcelModel,uploadAction,templateUpload,seleDictCodeName} from '@/services/rwa/rwa_calc_config_acquisition/rule';
  8. import { WomanOutlined } from "@ant-design/icons";
  9. import { ProductProps } from "@/sundataImport";
  10. import { useModel } from '@umijs/max';
  11. import { max } from "lodash";
  12. import { SysListModel } from "@/services/rwa/rwa_calc_config_acquisition/rule";
  13. type widowRush = {
  14. subjectCodes:string;
  15. onOrOff:string;
  16. resultType:string;
  17. ruleNo:string;
  18. onCancel: () => void;
  19. onChangeVisible(visible: boolean, type: string): unknown;
  20. onChangeVisdible:(visible:boolean,type ?: 'none' | 'raload' )=>void;
  21. }& ProductProps;
  22. // 总账取数
  23. const rule : React.FC<widowRush> = (prop:widowRush) => {
  24. /** 编辑方式,查看、修改、新增按钮时设置,详细信息表单中使用 */
  25. const [editType, setEditType] = useState<EditType>(prop.editType || 'display');
  26. /** 是否显示详细信息窗口 */
  27. const [detailVisible, setDetailVisible] = useState<boolean>(false);
  28. /** 当前行数据 */
  29. const [currentRow, setCurrentRow] = useState<SysListModel>();
  30. /** 表格引用对象,刷新表格使用 */
  31. const actionRef = useRef<ActionType>();
  32. const formRef = useRef<FormInstance<any>>();
  33. /** 声明字典 */
  34. const { fetchDict } = useModel('dict');
  35. // 页面数据
  36. var formDataList = new Array<SysListModel>;
  37. /**上传文件 */
  38. const [fileData, setFileData] = useState<File>();
  39. // 导入窗口显示
  40. const [importVisible, setImportVisible] = useState<boolean>(false);
  41. useEffect(() => {
  42. }, []);
  43. // 修改查询查询
  44. const selectData = async (formdata : SysListModel) => {
  45. const data = await selectDetailData(formdata);
  46. formRef.current?.setFieldsValue(data);
  47. }
  48. // 作废
  49. const delRows =async(record:any)=>{
  50. baseFun.confirm('请确认是否继续操作',async() =>{
  51. if (record.state == '失效') {
  52. baseFun.info("此数据已为失效状态");
  53. return;
  54. } else {
  55. await deleteRows(record.ruleNo);
  56. baseFun.info("作废成功");
  57. }
  58. closeAndRefresh();
  59. });
  60. }
  61. //关闭窗口刷新父页面
  62. const closeAndRefresh = ()=>{
  63. actionRef.current?.reloadAndRest?.();
  64. }
  65. // 插入或者更新数据
  66. const handleSave = async(data: SysListModel,) => {
  67. if (editType == 'update' ) {
  68. if (currentRow?.ruleNo) {
  69. await updateExistData(data,currentRow?.ruleNo);
  70. closeAndRefresh();
  71. } else {
  72. baseFun.error("当前行为空");
  73. return;
  74. }
  75. } else if (editType == 'create' ) {
  76. await fetchDetailData(data);
  77. closeAndRefresh();
  78. }
  79. setDetailVisible(false);
  80. }
  81. // 模板下载
  82. const templateUploadAction = async() => {
  83. // 模板下载(模板code:ListOfPublicSector)
  84. await templateUpload("ListOfPublicSector");
  85. }
  86. /**上传属性 */
  87. const fileProps = {
  88. onRemove: () => {
  89. setFileData(undefined);
  90. },
  91. beforeUpload(info: any) {
  92. setFileData(info);
  93. },
  94. };
  95. /**上传提交 */
  96. const uploadSubmit = async () => {
  97. if (!fileData) {
  98. baseFun.warning('未上传文件');
  99. return;
  100. }
  101. const res = await uploadAction(fileData);
  102. if ('' === res) {
  103. // baseFun.info("处理完成");
  104. closeAndRefresh()
  105. } else {
  106. baseFun.error(res);
  107. }
  108. setEditType('update');
  109. setDetailVisible(false);
  110. };
  111. // 页面展示元素
  112. const columns: ProColumns<SysListModel>[] = [
  113. {
  114. title: '计算实例号',
  115. dataIndex: 'calcindex',
  116. search: false,
  117. hideInTable: true,
  118. },
  119. {
  120. title: '起始数据日期',
  121. dataIndex: 'startDate',
  122. search: false,
  123. hideInTable: true,
  124. },
  125. {
  126. title: '截止数据日期',
  127. dataIndex: 'endDate',
  128. search: false,
  129. hideInTable: true,
  130. },
  131. {
  132. title: '年月',
  133. dataIndex: 'term',
  134. search: false,
  135. hideInTable: true,
  136. },
  137. {
  138. title: '数据日期',
  139. dataIndex: 'dataDate',
  140. search: false,
  141. hideInTable: true,
  142. },
  143. {
  144. title: '规则编号',
  145. dataIndex: 'ruleNo',
  146. hideInTable: false,
  147. },
  148. {
  149. title: '规则名称',
  150. dataIndex: 'ruleName',
  151. hideInTable: false,
  152. },
  153. {
  154. title: '科目代码',
  155. dataIndex: 'subjectCodes',
  156. hideInTable: false,
  157. },
  158. {
  159. title: '科目名称',
  160. dataIndex: 'subjectNames',
  161. hideInTable: false,
  162. },
  163. {
  164. title: '表内风险暴露分类',
  165. dataIndex: 'ledgerRiskexposureNo',
  166. hideInTable: false,
  167. valueType: 'treeSelect',
  168. request: () => fetchDict('@positiveRiskType'),
  169. fieldProps: {
  170. treeDefaultExpandAll: true,
  171. // treeCheckable:true,
  172. },
  173. },
  174. {
  175. title: '表外项目分类',
  176. dataIndex: 'ledgerOffObjectNo',
  177. hideInTable: false,
  178. valueType: 'treeSelect',
  179. request: () => fetchDict('@positiveOffProjectType'),
  180. fieldProps: {
  181. treeDefaultExpandAll: true,
  182. // treeCheckable:true,
  183. },
  184. },
  185. {
  186. title: '状态',
  187. dataIndex: 'state',
  188. search: false,
  189. hideInTable: false,
  190. },
  191. {
  192. title: '操作',
  193. dataIndex: 'operate',
  194. valueType: 'option',
  195. render: (_, record) => [
  196. <SDOperate
  197. key="roleCfg"
  198. icon={<WomanOutlined />}
  199. successMessage=""
  200. onClick={
  201. ()=>{
  202. selectData(record);
  203. setCurrentRow(record);
  204. setDetailVisible(true);
  205. setEditType('update')
  206. } }
  207. >
  208. 修改
  209. </SDOperate>,
  210. <SDOperate
  211. key="roleCfg"
  212. icon={<WomanOutlined />}
  213. successMessage=""
  214. onClick={()=>{
  215. selectData(record);
  216. setEditType('display')
  217. setDetailVisible(true)} }
  218. >
  219. 查看
  220. </SDOperate>,
  221. <SDOperate
  222. key="roleCfg"
  223. icon={<WomanOutlined />}
  224. successMessage=""
  225. onClick={()=>{delRows(record) } }
  226. >
  227. 作废
  228. </SDOperate>,
  229. ],
  230. },
  231. ];
  232. return (
  233. <SDPage>
  234. <SDTable
  235. title="查询表格"
  236. rowKey="customerName"
  237. request={async (formdata:SysListModel) =>{
  238. const formDatas = await getDataList(formdata);
  239. // 解构数组(导出用)
  240. formDataList=[...formDatas];
  241. return {data: formDatas}
  242. } }
  243. columns={columns}
  244. operations={["create"]}
  245. toolBarRender={(_, { selectedRows }) => [
  246. <SDButton
  247. key="export"
  248. successMessage=''
  249. onClick={() => {
  250. baseFun.confirm('确认导出数据?',async() => { exportExcelModel(formDataList,"rule")});
  251. }}
  252. >
  253. 全部导出
  254. </SDButton>,
  255. ]}
  256. actionRef={actionRef}
  257. formRef={formRef}
  258. setDetailVisible={() => {setDetailVisible(true)}}
  259. setEditType={setEditType}
  260. setCurrentRow={()=>{setCurrentRow}}
  261. />
  262. {detailVisible && (
  263. <SDModalForm
  264. title={'详细信息'}
  265. editType={editType}
  266. params={currentRow}
  267. visible={detailVisible}
  268. initialValues={
  269. {
  270. getdataMode:'取实际余额',
  271. subjectCodes:prop.subjectCodes,
  272. resultType:prop.resultType,
  273. onOrOff:prop.onOrOff
  274. }
  275. }
  276. onVisibleChange={() => {setDetailVisible(false)}}
  277. onValuesChange={async (changevalues) => {
  278. if (changevalues.subjectCodes != undefined) {
  279. const value = await seleDictCodeName(changevalues.subjectCodes);
  280. formRef.current?.setFieldValue('subjectNames',value);
  281. }
  282. if (changevalues.resultType != undefined) {
  283. if (changevalues.resultType == '1') {
  284. formRef.current?.setFieldValue('onOrOff','表内');
  285. } else if (changevalues.resultType == '2') {
  286. formRef.current?.setFieldValue('onOrOff','表外');
  287. } else {
  288. formRef.current?.setFieldValue('onOrOff','');
  289. }
  290. }
  291. }}
  292. footer={[
  293. <SDSubmitButton editType={editType} formRef={formRef} doSubmit={handleSave} >保存</SDSubmitButton>,
  294. <SDButton
  295. key="closeUpdate"
  296. successMessage=''
  297. onClick={() => {
  298. setDetailVisible(false);
  299. }}>关闭</SDButton>
  300. ]}
  301. tableRef={actionRef}
  302. formRef={formRef}
  303. >
  304. <SDAreaTtile title='缓释品信息'/>
  305. <SDFormText name="ruleNo" rules={[{max:20, message:'名称长度不能超过20位'}]} label="规则编号"/>
  306. <SDFormText name="ruleName" label="规则名称" rules={[{max:30, message:'名称长度不能超过30位'}]} />
  307. <SDFormDict name="subjectCodes" dictKey="SUBJECTCODE" label="科目代码" />
  308. <SDFormText name="subjectNames" label="科目名称" />
  309. <SDFormDict name="accountingDirection" dictKey="ACCOUNTING_DIRECTION" label="记账方向"/>
  310. <SDFormDict name="calcMode" dictKey="CALC_METHOD" label="计算方式"/>
  311. <SDFormDict name="getdataMode" label="取值方式" dictKey="GETDATA_MODE" />
  312. <SDFormDict name="resultType" dictKey="RESULT_TYPE" label="计算项" />
  313. <SDFormText name="onOrOff" label="表内外标识" />
  314. <SDFormDict name="ledgerRiskexposureNo" label="表内风险暴露分类" dictKey="@positiveRiskType" />
  315. <SDFormDict name="ledgerOffObjectNo" label="表外项目分类" dictKey="@positiveOffProjectType"/>
  316. <SDFormDict name="ledgerStageId" label="所属阶段" dictKey="@stageinId" />
  317. <SDFormText name="ledgerGetdataRule"
  318. type="textarea" label="总账取数规则"/>
  319. </SDModalForm>
  320. )}
  321. </SDPage>
  322. );
  323. }
  324. export default rule;