|
@@ -0,0 +1,456 @@
|
|
|
|
+import React, { useEffect, useRef, useState } from 'react';
|
|
|
|
+import { Button, Form, FormInstance, Input, Space, Tooltip, Upload } from 'antd';
|
|
|
|
+import { ActionType, EditableFormInstance, ProColumns, ProFormInstance, ProTable } from '@ant-design/pro-components';
|
|
|
|
+import { baseFun, ContextMenu, DictTree, EditType, SDAreaTtile, SDButton, SDForm, SDFormDict, SDFormText, SDLayout, SDModalForm, SDOperate, SDPage, SDSubmitButton, SDTree } from '@sundata/ui-frame';
|
|
|
|
+import { SysFunButtonInfoModel } from '@/services/authMng/funcMng';
|
|
|
|
+import { getDetail1, getFunTree1,save, rules_addone, rules_list, rwaCalcConfOffbalanceprotypeModel, rwaCalcConfOffbalanceprotyperuleModel, shunxu, save2, rules_modifyone, rules_deleteone, info_deleteone, jiaoyan } from '@/services/rwa/info_list';
|
|
|
|
+import { DataNode } from 'antd/lib/tree';
|
|
|
|
+import { MenuInfo } from 'rc-menu/lib/interface';
|
|
|
|
+import { WomanOutlined } from '@ant-design/icons';
|
|
|
|
+import { conforms, isNull } from 'lodash';
|
|
|
|
+import { number } from 'echarts';
|
|
|
|
+//const tableRef = useRef<EditableFormInstance>();
|
|
|
|
+
|
|
|
|
+type aaa ={
|
|
|
|
+ ismini ?:any;
|
|
|
|
+ offobjectNo ?:any;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+const infolist: React.FC<aaa> = (prop :aaa) => {
|
|
|
|
+
|
|
|
|
+ /** 编辑方式,查看、修改、新增按钮时设置,详细信息表单中使用 */
|
|
|
|
+ const [editType, setEditType] = useState<EditType>('update');
|
|
|
|
+ const formRef = useRef<FormInstance<any>>();
|
|
|
|
+ const [treeData, setTreeData] = useState<DictTree[]>();
|
|
|
|
+
|
|
|
|
+ const formRef1 = useRef<FormInstance<any>>();
|
|
|
|
+ const formRef3 = useRef<FormInstance<any>>();
|
|
|
|
+ const [visible1,setVisible1] = useState<boolean>(false);//弹窗是否显示
|
|
|
|
+ const [visible2,setVisible2] = useState<boolean>(false);//弹窗是否显示
|
|
|
|
+
|
|
|
|
+ const [editType1, setEditType1] = useState<EditType>('update');
|
|
|
|
+ const [ismini1,setIsmini1] =useState<boolean>(false);
|
|
|
|
+
|
|
|
|
+ const [count1,setCount1] = useState<string>();
|
|
|
|
+
|
|
|
|
+// const leaf = useRef('1');
|
|
|
|
+// const levelcode = useRef(0);
|
|
|
|
+
|
|
|
|
+const actionRef1 = useRef<ActionType>();
|
|
|
|
+
|
|
|
|
+const formRef2 = useRef<FormInstance<any>>();
|
|
|
|
+const [state1,setState1] = useState<String>();
|
|
|
|
+
|
|
|
|
+const [dataSource, setDataSource] = useState<any>() ;
|
|
|
|
+ const [mockData, setMockData] = useState<rwaCalcConfOffbalanceprotyperuleModel[]>([]);
|
|
|
|
+ let runtimeEditType: EditType;
|
|
|
|
+
|
|
|
|
+ const [count,setCount] = useState<number>(0);
|
|
|
|
+ useEffect(() => {
|
|
|
|
+ refreshTree().then((data) => {
|
|
|
|
+ console.log(data);
|
|
|
|
+ formInit(data[0].value);
|
|
|
|
+ });
|
|
|
|
+ // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
|
|
+ }, []);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ const closeAndRefresh1 = ()=>{
|
|
|
|
+ setVisible1(false);
|
|
|
|
+ actionRef1.current?.reloadAndRest?.();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const formInit = async (offobjectNo?: string) => {
|
|
|
|
+ const data = await getDetail1({offobjectNo});
|
|
|
|
+ if (!data.buttonList) data.buttonList = [];
|
|
|
|
+ let i = 0;
|
|
|
|
+ data.buttonList = data.buttonList.map((item) => {
|
|
|
|
+ i += 1;
|
|
|
|
+ return { ...item, id: i };
|
|
|
|
+ });
|
|
|
|
+ setMockData(data.buttonList);
|
|
|
|
+ setState1(data.offobjectNo);
|
|
|
|
+ formRef.current?.setFieldsValue(data);
|
|
|
|
+ if(data.ismini=='0'){
|
|
|
|
+ setIsmini1(false);
|
|
|
|
+ setVisible2(false);
|
|
|
|
+ }else{
|
|
|
|
+ setIsmini1(true);
|
|
|
|
+ setVisible2(true);}
|
|
|
|
+ //leaf.current = data.leaf || '1';
|
|
|
|
+ // levelcode.current = data.levelcode || 0;
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ const fontColor = { color: '#ff0000' }; // 红色
|
|
|
|
+ const refreshTree = async () => {
|
|
|
|
+ const newTree = await getFunTree1();
|
|
|
|
+ setTreeData(newTree);
|
|
|
|
+ return newTree;
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ const inst2 = async(formDate:rwaCalcConfOffbalanceprotyperuleModel)=>{
|
|
|
|
+ const res =await rules_addone(formDate);
|
|
|
|
+ actionRef1.current?.reloadAndRest?.();
|
|
|
|
+ const res1 =await rules_list(state1);
|
|
|
|
+ setMockData(res1)
|
|
|
|
+
|
|
|
|
+ setVisible1(false);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const selectdata =async(record:any)=>{
|
|
|
|
+ setVisible1(true);
|
|
|
|
+ const sd = await rules_modifyone(record.ruleNo)
|
|
|
|
+ formRef2.current?.setFieldsValue(sd);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const deldata1 =async(record:any)=>{
|
|
|
|
+baseFun.confirm("请确认是否继续操作",async()=>{
|
|
|
|
+ const sd = await rules_deleteone(record.ruleNo)
|
|
|
|
+ setEditType1('update');
|
|
|
|
+// refreshTree().then((data) => {
|
|
|
|
+ const sd1=await rules_list(state1);
|
|
|
|
+ setMockData(sd1);
|
|
|
|
+// });;
|
|
|
|
+})
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+const menu: ContextMenu[] = [
|
|
|
|
+ {
|
|
|
|
+ key: 'create',
|
|
|
|
+ label: '新建',
|
|
|
|
+ method: async (node) => {
|
|
|
|
+ const offobjectNo = node.key as string;
|
|
|
|
+ console.log('-----')
|
|
|
|
+ // const data = await getDetail1({ offobjectNo });
|
|
|
|
+ // levelcode.current = data.levelcode || 0;
|
|
|
|
+ // 点击右键菜单后,会先执行 onRightClick 获取所选菜单信息,这里直接使用即可
|
|
|
|
+ setEditType('create');
|
|
|
|
+ runtimeEditType = 'create';
|
|
|
|
+ // 设置新增初始值
|
|
|
|
+ formRef.current?.setFieldsValue({
|
|
|
|
+ offobjectNo: '',
|
|
|
|
+ offobjectName: '',
|
|
|
|
+ offobjectSuper: offobjectNo,
|
|
|
|
+ offobjectSuperName: node.title?.toString(),
|
|
|
|
+ offobjectStageId:'',
|
|
|
|
+ offobjectIndex:'',
|
|
|
|
+ defaultOut:'',
|
|
|
|
+ ismini:'' ,
|
|
|
|
+ ccf: '',
|
|
|
|
+ yesorno:'1'
|
|
|
|
+ });
|
|
|
|
+ if(editType =='create'){
|
|
|
|
+ setMockData([]);
|
|
|
|
+ }
|
|
|
|
+ // leaf.current = '1';
|
|
|
|
+ // levelcode.current = levelcode.current + 1;
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ key: 'delete',
|
|
|
|
+ label: '删除',
|
|
|
|
+ method: async (node) => {
|
|
|
|
+ const funccode = node.key as string;
|
|
|
|
+ if (node.children) {
|
|
|
|
+ baseFun.warning('请先删除所有下级节点');
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if (treeData?.length === 1 && !treeData[0].children) {
|
|
|
|
+ baseFun.warning('不能删除根节点');
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ await info_deleteone(funccode);
|
|
|
|
+ refreshTree();
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ ];
|
|
|
|
+
|
|
|
|
+ const btnColumns: ProColumns<rwaCalcConfOffbalanceprotyperuleModel>[] = [
|
|
|
|
+ { title : '计算实例号',
|
|
|
|
+ dataIndex : 'calcindex',
|
|
|
|
+ hideInTable:true,
|
|
|
|
+ width : 150
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ { title : '起始数据日期',
|
|
|
|
+ dataIndex : 'sdate',
|
|
|
|
+ hideInTable:true,
|
|
|
|
+ width : 150
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ { title : '截止数据日期',
|
|
|
|
+ dataIndex : 'edate',
|
|
|
|
+ hideInTable:true,
|
|
|
|
+ width : 150
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ { title : '年月',
|
|
|
|
+ dataIndex : 'term',
|
|
|
|
+ hideInTable:true,
|
|
|
|
+ width : 150
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ { title : '数据日期',
|
|
|
|
+ dataIndex : 'dataDate',
|
|
|
|
+ hideInTable:true,
|
|
|
|
+ width : 150
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ { title : '表外项目编号',
|
|
|
|
+ dataIndex : 'offobjectNo',
|
|
|
|
+ hideInTable:true,
|
|
|
|
+ width : 150
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ { title : '规则名称',
|
|
|
|
+ dataIndex : 'ruleName',
|
|
|
|
+ width : 150
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ { title : '规则编号',
|
|
|
|
+ dataIndex : 'ruleNo',
|
|
|
|
+ width : 150
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ { title : '规则序号',
|
|
|
|
+ dataIndex : 'ruleIndex',
|
|
|
|
+ width : 150
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ { title : '所属产品',
|
|
|
|
+ dataIndex : 'ruleProductNo',
|
|
|
|
+ width : 150
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ { title : '分类规则',
|
|
|
|
+ dataIndex : 'ruleGetdata',
|
|
|
|
+ width : 150
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ { title : '输入',
|
|
|
|
+ dataIndex : 'ruleIn',
|
|
|
|
+ width : 150
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ { title : '输出',
|
|
|
|
+ dataIndex : 'ruleOut',
|
|
|
|
+ width : 150
|
|
|
|
+ }, {
|
|
|
|
+ title: '操作',
|
|
|
|
+ dataIndex: 'operate',
|
|
|
|
+ valueType: 'option',
|
|
|
|
+ width:130,
|
|
|
|
+ render: (_, record) => [
|
|
|
|
+ <span style={editType.length==7 ?{display:'none'}:{}}>
|
|
|
|
+ <SDOperate
|
|
|
|
+ key="roleCfg"
|
|
|
|
+ icon={<WomanOutlined />}
|
|
|
|
+ successMessage=""
|
|
|
|
+
|
|
|
|
+ onClick={()=>{
|
|
|
|
+ selectdata(record);
|
|
|
|
+ setVisible1(true);
|
|
|
|
+ setEditType('update')
|
|
|
|
+ } }
|
|
|
|
+ >
|
|
|
|
+ 修改
|
|
|
|
+ </SDOperate>
|
|
|
|
+ <SDOperate
|
|
|
|
+ key="roleCfg"
|
|
|
|
+ icon={<WomanOutlined />}
|
|
|
|
+ successMessage=""
|
|
|
|
+ onClick={()=>{
|
|
|
|
+ deldata1(record);
|
|
|
|
+ } }
|
|
|
|
+ >
|
|
|
|
+ 删除
|
|
|
|
+ </SDOperate>
|
|
|
|
+ </span>
|
|
|
|
+ ]}
|
|
|
|
+
|
|
|
|
+ ]
|
|
|
|
+ const handleSave =async(formData:rwaCalcConfOffbalanceprotypeModel)=>{
|
|
|
|
+ // formData.buttonList=mockData
|
|
|
|
+ if(mockData.length<=0){
|
|
|
|
+ baseFun.warning("表外项目分类认定规则列表中至少有一条记录");
|
|
|
|
+ }else{
|
|
|
|
+ if(editType=='update'){
|
|
|
|
+ await save({...formData})
|
|
|
|
+ save1(formData.offobjectNo);
|
|
|
|
+ refreshTree().then((data) => {
|
|
|
|
+ formInit(data[0].value);
|
|
|
|
+ });
|
|
|
|
+ setEditType('update');
|
|
|
|
+ baseFun.info('保存成功');
|
|
|
|
+ // actionRef.current?.reloadAndRest?.();
|
|
|
|
+ }else{
|
|
|
|
+ const sd =await jiaoyan (formData.offobjectNo)
|
|
|
|
+ if(sd>='1'){
|
|
|
|
+ baseFun.warning("表外项目代码已存在,请重新输入");
|
|
|
|
+ formRef.current?.setFieldValue('offobjectNo',null)
|
|
|
|
+ }else{
|
|
|
|
+ await save({...formData})
|
|
|
|
+ save1(formData.offobjectNo);
|
|
|
|
+ refreshTree().then((data) => {
|
|
|
|
+ formInit(data[0].value);
|
|
|
|
+ });
|
|
|
|
+ setEditType('update');
|
|
|
|
+ baseFun.info('保存成功');
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const save1 =async(formData:any)=>{
|
|
|
|
+ await save2(mockData,formData)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const xuhao = async(state1:any) => {
|
|
|
|
+ const sd = state1;
|
|
|
|
+ let aa = await shunxu(sd);
|
|
|
|
+ console.log(aa);
|
|
|
|
+ formRef2.current?.setFieldValue('ruleNo',aa)
|
|
|
|
+ // return setCount1(aa);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ const handleSelect =async(node: DataNode)=>{
|
|
|
|
+ // const editingRows = tableRef.current?.getRowsData?.();
|
|
|
|
+ // if (editingRows && editingRows.length > 0) {
|
|
|
|
+ // baseFun.warning('参数列表中有正在编辑的参数,请确认或取消修改后再切换');
|
|
|
|
+ // return;
|
|
|
|
+ // }
|
|
|
|
+ const funccode = node.key as string;
|
|
|
|
+ // 右键菜单点击新增按钮后,再点击树节点时,需要重置editType
|
|
|
|
+ setEditType('update');
|
|
|
|
+ // formRef.current?.resetFields(); TODO 尝试配合request解决表单内容不刷新问题
|
|
|
|
+ formRef.current?.setFieldsValue(await formInit(funccode));
|
|
|
|
+ }
|
|
|
|
+ return(
|
|
|
|
+ <SDPage footer={[<SDSubmitButton successMessage='' editType={editType} formRef={formRef} doSubmit={handleSave} >保存</SDSubmitButton>]}>
|
|
|
|
+ <SDLayout subLayout='horizontal' >
|
|
|
|
+ <SDLayout
|
|
|
|
+ title='菜单列表'
|
|
|
|
+ colSpan='25%'
|
|
|
|
+ fixHeight
|
|
|
|
+ >
|
|
|
|
+ <SDTree treeData={treeData} handleSelect={handleSelect} contextMenus={menu} />
|
|
|
|
+ </SDLayout>
|
|
|
|
+ <SDLayout
|
|
|
|
+ title='表外项目分类信息维护'
|
|
|
|
+ colSpan='75%'
|
|
|
|
+ fixHeight
|
|
|
|
+ >
|
|
|
|
+
|
|
|
|
+ <SDForm
|
|
|
|
+ formRef={formRef}
|
|
|
|
+ editType={editType}
|
|
|
|
+ initialValues={{state:'1',ismini:prop.ismini,offobjectNo:prop.offobjectNo}}
|
|
|
|
+ onValuesChange={(changedValues,value)=>{
|
|
|
|
+ if(value.ismini!='' && value.ismini!=undefined){
|
|
|
|
+ if(value.ismini=='0'){
|
|
|
|
+ setIsmini1(false);
|
|
|
|
+ setVisible2(false);
|
|
|
|
+ }else{
|
|
|
|
+ setIsmini1(true);
|
|
|
|
+ setVisible2(true);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ setState1(value.offobjectNo)
|
|
|
|
+ }}
|
|
|
|
+ >
|
|
|
|
+<SDFormText name="offobjectNo" label="表外项目代码" readonlyCond='update' required max={128} width='md'/>
|
|
|
|
+<SDFormText name="offobjectName" label="表外项目名称" required />
|
|
|
|
+<SDFormText name="offobjectSuper" label="上级表外项目代码" required readonlyCond='both' />
|
|
|
|
+<SDFormText name="offobjectSuperName" label="上级表外项目名称" required readonlyCond='both' />
|
|
|
|
+<SDFormDict name="ismini" label="是否最细一级" required dictKey='YESORNO'/>
|
|
|
|
+{ismini1&&(<SDFormText name="ccf" label="转换系数(%)" required={ismini1} />)}
|
|
|
|
+<SDFormText name="defaultOut" label="默认输出数据源" required />
|
|
|
|
+<SDFormText name="offobjectStageId" label="所属阶段" required />
|
|
|
|
+<SDFormText name="offobjectIndex" label="认定顺序号" required />
|
|
|
|
+<SDFormText name="yesorno" label="状态" readonlyCond='both'/>
|
|
|
|
+ </SDForm>
|
|
|
|
+ <SDAreaTtile title="表外项目分类认定规则列表"/>
|
|
|
|
+ { visible2 &&( <ProTable
|
|
|
|
+ //editable={true}
|
|
|
|
+ formRef={formRef1}
|
|
|
|
+ search={false}
|
|
|
|
+ columns={btnColumns}
|
|
|
|
+ actionRef={actionRef1}
|
|
|
|
+ dataSource={mockData}
|
|
|
|
+ onChange={setDataSource}
|
|
|
|
+ request={(async (state1:any)=>{
|
|
|
|
+ // if(editType!='create' ){
|
|
|
|
+ // const res1 =await rules_list(state1);
|
|
|
|
+ // setMockData(res1)
|
|
|
|
+ // return {data:res1};
|
|
|
|
+ // }else{
|
|
|
|
+ return {data:mockData};
|
|
|
|
+ // }
|
|
|
|
+ })}
|
|
|
|
+ toolBarRender={(_, { selectedRowKeys }) => {
|
|
|
|
+ return[
|
|
|
|
+ <span style={editType=='display'?{display:'none'}:{}}>
|
|
|
|
+ <SDButton
|
|
|
|
+ key="create"
|
|
|
|
+ successMessage=''
|
|
|
|
+ icon={<WomanOutlined />}
|
|
|
|
+ onClick={async() => {
|
|
|
|
+ xuhao(state1)
|
|
|
|
+ setVisible1(true);
|
|
|
|
+ setEditType1('create');
|
|
|
|
+ // formRef2.current?.setFieldValue("ruleNo",count1)
|
|
|
|
+ }}
|
|
|
|
+ >
|
|
|
|
+ 新增
|
|
|
|
+ </SDButton>,
|
|
|
|
+ </span>
|
|
|
|
+ ]
|
|
|
|
+ }}
|
|
|
|
+ //value={dataSource || []}
|
|
|
|
+ //={setDataSource}
|
|
|
|
+ />
|
|
|
|
+ ) }
|
|
|
|
+ </SDLayout>
|
|
|
|
+ </SDLayout>
|
|
|
|
+ {visible1 &&(
|
|
|
|
+ <SDModalForm title={''} visible={true} onValuesChange={() => { setVisible1(false); } }
|
|
|
|
+ footer={[<SDSubmitButton editType={editType1} formRef={formRef2} successMessage="" doSubmit={inst2}>保存</SDSubmitButton>,
|
|
|
|
+ <SDButton successMessage="" onClick={() => closeAndRefresh1()}>关闭</SDButton>]} onVisibleChange={()=>{setVisible1(false); } }
|
|
|
|
+ >
|
|
|
|
+<SDLayout>
|
|
|
|
+<SDForm editType={editType1} formRef={formRef2} >
|
|
|
|
+ <span style={{display:'none'}}>
|
|
|
|
+<SDFormText name="calcindex" label="计算实例号" />
|
|
|
|
+<SDFormText name="sdate" label="起始数据日期" />
|
|
|
|
+<SDFormText name="edate" label="截止数据日期" />
|
|
|
|
+<SDFormText name="term" label="年月" />
|
|
|
|
+<SDFormText name="dataDate" label="数据日期" />
|
|
|
|
+<SDFormText name="offobjectNo" label="表外项目编号" />
|
|
|
|
+</span>
|
|
|
|
+<SDFormText name="ruleNo" label="规则编号" readonlyCond='both' />
|
|
|
|
+<SDFormText name="ruleName" label="规则名称" />
|
|
|
|
+<SDFormDict name="ruleProductNo" label="产品名称" dictKey='@ruleProductNo' />
|
|
|
|
+<SDFormText name="ruleIn" label="输入数据源 " />
|
|
|
|
+<SDFormText name="ruleOut" label="输出数据源" />
|
|
|
|
+<SDFormText name="ruleIndex" label="规则序号" />
|
|
|
|
+<SDFormText name="ruleGetdata" label="表外项目分类认定规则" />
|
|
|
|
+ </SDForm>
|
|
|
|
+ </SDLayout>
|
|
|
|
+</SDModalForm>
|
|
|
|
+ )
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ </SDPage>
|
|
|
|
+
|
|
|
|
+ )
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+export default infolist;
|