123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410 |
- /*
- * @Author: your name
- * @Date: 2021-07-26 10:13:13
- * @LastEditTime: 2021-08-06 18:28:12
- * @LastEditors: Please set LastEditors
- * @Description: In User Settings Edit
- * @FilePath: /TracerMethodology_PC/src/pages/UserMana/index.js
- */
- import { PlusOutlined } from '@ant-design/icons';
- import { Button, Popconfirm} from 'antd';
- import React, { useState, useRef, useEffect } from 'react';
- import { PageContainer} from '@ant-design/pro-layout';
- import ProTable from '@ant-design/pro-table';
- import { ModalForm, ProFormText, ProFormSelect} from '@ant-design/pro-form';
- import UpdateForm from './updateForm';
- import { getAccountingSubjectList, editAccountingSubjectList, delAccountingSubject, addAccountingSubject, getAccountingSubjectForSelecter } from './service';
- const AccountingSubject = () => {
- const columns = [
- {
- title: '会计科目名称',
- dataIndex: 'accountingName',
- key: 'accountingName',
- hideInSearch: false,
- width: '30%'
- },
- {
- title: '会计科目编码',
- dataIndex: 'accountingCode',
- key: 'accountingCode',
- hideInSearch: true,
- width: '30%'
- },
- {
- title: '是否固定成本',
- dataIndex: 'isBaseCost',
- key: 'isBaseCost',
- hideInSearch: true,
- render: (text) => <>{text == 1 ? '是' : '否'}</>,
- width: '20%'
- },
- {
- title:'操作',
- dataIndex: 'option',
- valueType: 'option',
- key: 'option',
- width: '15%',
- render: (_, record) => [
- <a
- key="config"
- onClick={() => {
- setCurrentRow(record);
- handleModalVisible(true)
- }}
- >
- 添加
- </a>,
- <a
- key="config"
- onClick={() => {
- handleUpdateModalVisible(true);
- setCurrentRow(record);
- }}
- >
- 编辑
- </a>,
- <Popconfirm
- key="subscribeAlert"
- title="是否确定删除?"
- onConfirm={() => {
- setCurrentRow(record);
- delListHandler(record);
- }}
- >
- <a>删除</a>
- </Popconfirm>,
- ],
- },
- ];
- const [createModalVisible, handleModalVisible] = useState(false);
- const [updateModalVisible, handleUpdateModalVisible] = useState(false);
- const actionRef = useRef(); //表格
- const ref = useRef(); //新增表单
- const [currentRow, setCurrentRow] = useState(undefined);
- const [accountType, setAccountType] = useState(1);
- const [options, setOptions] = useState([]);
- const [ifChild, setIfChild] = useState(false);
- const [expanedRowIds,setExpanedRowIds] = useState([]);
- /**
- *
- * @param {Boolean} bool 弹窗展示状态
- */
- const updateModalVisibleChange = (bool) => {
- handleUpdateModalVisible(bool);
- setIfChild(false);
- if (!bool) setCurrentRow(undefined);
- };
- //获取科室列表
- const getList = async (params = {}, sort, filter) => {
- const res = await getAccountingSubjectList({ ...params, accountType: accountType });
- // console.log({res});
- return {
- data: res.data.list,
- total: res.data.totalCount,
- success: res.success,
- };
- };
- /**
- *
- * @param {Object} value 删除项数据
- */
- const delListHandler = async (value) => {
- const resp = await delAccountingSubject(value);
- if (resp.status == 200) {
- if (actionRef.current) {
- actionRef.current.reload();
- }
- }
- };
- const expandHandle = id=>{
-
- if(expanedRowIds.includes(id)){
- const temp = expanedRowIds;
- temp.splice(temp.findIndex(item => item == id), 1);
- setExpanedRowIds([...temp])
- }else{
- setExpanedRowIds([...expanedRowIds,id])
- }
- }
-
- /**
- *
- * @param {Object} record record对象
- * @param {String} type 可选值[del,edit,‘add’]
- */
- const customRowUpdata = (record,type)=>{
- // console.log({record});
- const {accountingCode,accountingName,id} = record;
- const needRowData = {accountingCode,accountingName,id};
- setIfChild(true);
- setCurrentRow(needRowData);
-
- if(type == 'add')handleModalVisible(true);
- if(type == 'edit')handleUpdateModalVisible(true);
- if(type == 'del')delListHandler(needRowData);
- }
- //展开table
- const expandedRowRender = (record, index, indent, expanded) => {
- // console.log({ record, index, indent, expanded });
- const { child } = record;
- const _columns = columns.filter(item => !(['id', 'option'].includes(item.key)));
- return (<table>
- <tbody>
- {
- child&&child.map((item, index) => {
- const { accountingCode, accountingName, id, child } = item;
- console.log({ accountingCode, accountingName, id, child });
- return (
- <React.Fragment key={index}>
- <tr key={id} style={{ position: 'relative' }}>
- <td>
- <table>
- <tbody>
- <tr>
- <td style={{ position: 'absolute', width: 0 }}>
- {
- child&&child.length > 0 &&(
- <button onClick={()=>expandHandle(id)} style={{top:12}} className={
- expanedRowIds.includes(id)?'ant-table-row-expand-icon ant-table-row-expand-icon-expanded':'ant-table-row-expand-icon ant-table-row-expand-icon-collapsed'
- }></button>
- )
- }
- {/* <button className="ant-table-row-expand-icon ant-table-row-expand-icon-expanded customExpandIcon"></button> */}
- </td>
- <td width="30%" style={{ paddingLeft: '0.8%',paddingTop:10,paddingBottom:10 }}><span style={{transform:'rotateY(180deg)'}}>↵</span>会计科目名称:{accountingName}</td>
- <td width="30%" style={{ paddingLeft: '0.3%' }}>会计科目编码:{accountingCode}</td>
- <td width="20%" style={{ paddingLeft: '0.7%' }}>否</td>
- <td width="15%" style={{ paddingLeft: '0.9%' }}>
- <a onClick={()=>customRowUpdata(item,'add')}>添加</a>
- <a onClick={()=>customRowUpdata(item,'edit')}>编辑</a>
- <a onClick={()=>customRowUpdata(item,'del')}>删除</a>
- </td>
- </tr>
- </tbody>
- </table>
- </td>
- </tr>
- {
- expanedRowIds.includes(id)&&<tr key={`expand${id}`}>
- <td width="100%">
- <table>
- <tbody>
- {
- child.map((data, index) => {
-
- const { accountingCode, accountingName, id, child } = data;
- return (
- <tr key={id} style={{ position: 'relative' }}>
- <td style={{ position: 'absolute', width: 0 }}>
- {
- child&&child.length > 0 && <button class="ant-table-row-expand-icon ant-table-row-expand-icon-collapsed"></button>
- }
- </td>
- <td width="30%" style={{ paddingLeft: '2.5%',paddingTop:10,paddingBottom:10 }}>↵会计科目名称:{accountingName}</td>
- <td width="30%" style={{ paddingLeft: '0.3%' }}>会计科目编码:{accountingCode}</td>
- <td width="20%" style={{ paddingLeft: '0.7%' }}>否</td>
- <td width="15%" style={{ paddingLeft: '0.9%' }}><a >编辑</a></td>
- </tr>
- )
- })
- }
- </tbody>
- </table>
- </td>
- </tr>
- }
- </React.Fragment>
- )
- })
- }
- </tbody>
- </table>
- )
-
- };
-
- const onTabChange = (key)=>{
- setAccountType(Number(key));
- if (actionRef.current) {
- actionRef.current.reload();
- }
- }
- useEffect(async () => {
- const respForSelecter = await getAccountingSubjectForSelecter();
- if (respForSelecter.status == 200) {
- setOptions(respForSelecter.data);
- }
- }, [])
- return (
- <PageContainer
- tabList={[
- {
- tab: '收益',
- key: 1,
- },
- {
- tab: '支出',
- key: 2,
- },
- ]}
- onTabChange={onTabChange}
- >
- <ProTable
- columns={columns}
- request={getList}
- actionRef={actionRef}
- rowKey="id"
- expandable={{defaultExpandedRowKeys:[]}}
- // expandable={{ expandedRowRender }}
- toolbar={{
- actions: [
-
- <Button
- key="button"
- icon={<PlusOutlined />}
- type="primary"
- onClick={() => {
- handleModalVisible(true);
- }}
- >
- 新增
- </Button>
- ],
- }}
- search={false}
- pagination={{
- pageSize: 10,
- }}
- />
- <ModalForm
- title="新增会计科目"
- width="800px"
- labelCol={{ span: 5, offset: 3 }}
- layout={'horizontal'}
- visible={createModalVisible}
- onVisibleChange={(bool) => {
-
- if (ref.current) {
- ref.current.resetFields();
- }
- setIfChild(false);
- handleModalVisible(bool);
- }}
- formRef={ref}
- onFinish={async (value) => {
- let id=0;
- currentRow&&(id=currentRow.id)
- const success = await addAccountingSubject({ ...value, id:id,accountingType:accountType });
- // console.log({ success });
- if (success) {
- handleModalVisible(false);
- if (actionRef.current) {
- actionRef.current.reload();
- }
- }
- setCurrentRow(undefined);
- }}
- >
-
- <ProFormText
- label="会计科目编码"
- rules={[
- {
- required: true,
- message:'会计科目编码是必填项',
- },
- ]}
- width="sm"
- name="accountingCode"
- />
- <ProFormText
- label="会计科目名"
- rules={[
- {
- required: true,
- message:'会计科目名是必填项',
- },
- ]}
- width="sm"
- name="accountingName"
- />
- <ProFormSelect
- rules={[
- {
- required: false,
- message:'',
- },
- ]}
- options={[
- {
- value: 0,
- label: '不是',
- },
- {
- value: 1,
- label: '是',
- },
- ]}
- width="sm"
- name="isBaseCode"
- label="是否固定成本"
- />
- </ModalForm>
- {/* 更新 */}
- <UpdateForm
- onSubmit={async (value) => {
- // console.log({ '编辑': value });
- console.log({currentRow});
- const success = await editAccountingSubjectList({...value,accountType});
- if (success) {
- handleUpdateModalVisible(false);
- setCurrentRow(undefined);
- if (actionRef.current) {
- actionRef.current.reload();
- }
- }
- }}
- onCancel={() => {
- handleUpdateModalVisible(false);
- setCurrentRow(undefined);
- }}
- updateModalVisible={updateModalVisible}
- updateModalVisibleChange={updateModalVisibleChange}
- values={currentRow || {}}
- />
- </PageContainer>
- );
- };
- export default AccountingSubject;
|