|
@@ -0,0 +1,378 @@
|
|
|
+import React, { Fragment, useState, useEffect, useMemo, useRef } from 'react';
|
|
|
+import { useNavigate } from 'umi';
|
|
|
+import {
|
|
|
+ Card,
|
|
|
+ Table,
|
|
|
+ Empty,
|
|
|
+ Button,
|
|
|
+ Modal,
|
|
|
+ message,
|
|
|
+ Form,
|
|
|
+ DatePicker,
|
|
|
+ Row,
|
|
|
+ Col,
|
|
|
+ Select,
|
|
|
+} from 'antd';
|
|
|
+import { PageContainer } from '@ant-design/pro-components';
|
|
|
+const { RangePicker } = DatePicker;
|
|
|
+import { useRequest, useModel } from '@umijs/max';
|
|
|
+import { queryProfileList, queryApplyList } from '@/services/boom';
|
|
|
+import dayjs from 'dayjs';
|
|
|
+import { queryContractCheck, queryGetContractList } from '@/services/contract';
|
|
|
+import ContractModal, {
|
|
|
+ Status,
|
|
|
+ StatusText,
|
|
|
+ Type,
|
|
|
+} from '../ContractManager/component/Modal';
|
|
|
+const TYPE = {
|
|
|
+ Contract: 1,
|
|
|
+ OA: 2,
|
|
|
+};
|
|
|
+function Apply(props) {
|
|
|
+ const { user } = useModel('userInfo');
|
|
|
+ const [tabActive, setTabActive] = useState('1');
|
|
|
+ const [detail, setDetail] = useState({});
|
|
|
+ const [conVisible, setConVisible] = useState(false);
|
|
|
+ const approveFormRef = useRef();
|
|
|
+ const [applyFormRef] = Form.useForm();
|
|
|
+ let navigate = useNavigate();
|
|
|
+ const contractResult = (res) => {
|
|
|
+ let data = res.data?.list?.map((item) => {
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ table_name: `${user.CName}提交的合同审批`,
|
|
|
+ table_desc: [
|
|
|
+ `合同名称:${item.name}`,
|
|
|
+ `合同编号:${item.code}`,
|
|
|
+ `合同金额:${item.amount}万元`,
|
|
|
+ ],
|
|
|
+ CName: user.CName,
|
|
|
+ create_time: item.cancel_on || item.created_on,
|
|
|
+ type: TYPE.Contract,
|
|
|
+ statusText: StatusText[item.status],
|
|
|
+ showBtn:
|
|
|
+ item.status == Status.Checking || item.status == Status.CalChecking,
|
|
|
+ // key: `${TYPE.Contract}_${item.id}`,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ return { data, pagination: res.data?.pagination }
|
|
|
+ };
|
|
|
+ //OA我的申请列表
|
|
|
+ const {
|
|
|
+ data: OAApplyData,
|
|
|
+ run: OAApplyRun,
|
|
|
+ loading: OAApplyLoading,
|
|
|
+ } = useRequest(queryApplyList, {
|
|
|
+ // manual: true,
|
|
|
+ formatResult: (res) => {
|
|
|
+ return {
|
|
|
+ data: res.data?.list?.map((item) => {
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ CName: item.AuthorInfo.CName,
|
|
|
+ table_desc: [item.table_desc],
|
|
|
+ table_name: item.name
|
|
|
+ };
|
|
|
+ }),
|
|
|
+ pagination: res.data?.pagination
|
|
|
+ }
|
|
|
+ },
|
|
|
+ });
|
|
|
+ //合同管理相关数据
|
|
|
+ //请求我的申请列表
|
|
|
+ const {
|
|
|
+ data: conApplyData,
|
|
|
+ run: conApplyRun,
|
|
|
+ loading: conApplyLoading,
|
|
|
+ } = useRequest(queryGetContractList, {
|
|
|
+ manual: true,
|
|
|
+ defaultParams: [{ created_by: user?.ID, pageSize: 10 }],
|
|
|
+ formatResult: contractResult,
|
|
|
+ });
|
|
|
+ const applyData = useMemo(() => {
|
|
|
+ let result = [];
|
|
|
+ if (OAApplyData?.data && OAApplyData?.data.length > 0) result = [...OAApplyData?.data];
|
|
|
+ return result;
|
|
|
+ }, [OAApplyData]);
|
|
|
+ const onTabChange = (activeKey) => {
|
|
|
+ if (activeKey == '1') {
|
|
|
+ OAApplyRun();
|
|
|
+ } else {
|
|
|
+ conApplyRun({ current: 1, page_size: 10 });
|
|
|
+ }
|
|
|
+ setTabActive(activeKey);
|
|
|
+ };
|
|
|
+ const handleApplySubmit = (values) => {
|
|
|
+ console.log(values);
|
|
|
+ OAApplyRun(values);
|
|
|
+ };
|
|
|
+ const handleApplyPaginationChange = (pagination) => {
|
|
|
+ applyFormRef.validateFields().then((values) => {
|
|
|
+ OAApplyRun({
|
|
|
+ ...values,
|
|
|
+ currentPage: pagination.current,
|
|
|
+ pageSize: pagination.pageSize,
|
|
|
+ });
|
|
|
+ });
|
|
|
+ };
|
|
|
+ const handleProfilePaginationChange = (pagination) => {
|
|
|
+ conApplyRun({
|
|
|
+ current: pagination.current,
|
|
|
+ page_size: pagination.pageSize,
|
|
|
+ });
|
|
|
+ };
|
|
|
+ const columns = [
|
|
|
+ {
|
|
|
+ title: '标题',
|
|
|
+ dataIndex: 'table_name',
|
|
|
+ width: '30%',
|
|
|
+ },
|
|
|
+ // {
|
|
|
+ // title: '摘要',
|
|
|
+ // dataIndex: 'table_desc',
|
|
|
+ // render: (descList) => {
|
|
|
+ // return (
|
|
|
+ // <ul>
|
|
|
+ // {descList?.map((item) => (
|
|
|
+ // <li>{item}</li>
|
|
|
+ // ))}
|
|
|
+ // </ul>
|
|
|
+ // );
|
|
|
+ // },
|
|
|
+ // },
|
|
|
+ {
|
|
|
+ title: '发起人',
|
|
|
+ dataIndex: 'CName',
|
|
|
+ width: '20%',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '发起时间',
|
|
|
+ render: (record) => {
|
|
|
+ return dayjs(record.create_time).format('YYYY-MM-DD HH:mm:ss');
|
|
|
+ },
|
|
|
+ width: '20%',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '流程状态',
|
|
|
+ // dataIndex: 'status',
|
|
|
+ render: (record) => {
|
|
|
+ switch (record.audit_status) {
|
|
|
+ case 0: return '审核中'
|
|
|
+ case 1: return '通过'
|
|
|
+ case 2: return '拒绝'
|
|
|
+ case 3: return '终审通过'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ width: '20%'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '操作',
|
|
|
+ render: (text, record) => (
|
|
|
+ <Fragment>
|
|
|
+ <>
|
|
|
+ <a
|
|
|
+ style={{ color: '#4096ff' }}
|
|
|
+ onClick={() => {
|
|
|
+ navigate(`/profile/${record.id}`);
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ 申请
|
|
|
+ </a>
|
|
|
+ </>
|
|
|
+ </Fragment>
|
|
|
+ ),
|
|
|
+ width: '10%',
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ const agreementColumns = [
|
|
|
+ {
|
|
|
+ title: '标题',
|
|
|
+ dataIndex: 'table_name',
|
|
|
+ width: '30%',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '摘要',
|
|
|
+ dataIndex: 'table_desc',
|
|
|
+ render: (descList) => {
|
|
|
+ return (
|
|
|
+ <ul>
|
|
|
+ {descList?.map((item) => (
|
|
|
+ <li>{item}</li>
|
|
|
+ ))}
|
|
|
+ </ul>
|
|
|
+ );
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '发起人',
|
|
|
+ dataIndex: 'CName',
|
|
|
+ width: '20%',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '发起时间',
|
|
|
+ render: (record) => {
|
|
|
+ return dayjs(record.create_time).format('YYYY-MM-DD HH:mm:ss');
|
|
|
+ },
|
|
|
+ width: '20%',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '流程状态',
|
|
|
+ dataIndex: 'statusText',
|
|
|
+ // render: (record) => {
|
|
|
+ // switch (record.audit_status) {
|
|
|
+ // case 0: return '审核中'
|
|
|
+ // case 1: return '通过'
|
|
|
+ // case 2: return '拒绝'
|
|
|
+ // case 3: return '终审通过'
|
|
|
+ // }
|
|
|
+ // },
|
|
|
+ // width: '20%'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '操作',
|
|
|
+ render: (text, record) => (
|
|
|
+ <Fragment>
|
|
|
+ <>
|
|
|
+ <a
|
|
|
+ style={{ color: '#4096ff' }}
|
|
|
+ onClick={() => {
|
|
|
+ navigate(`/profile/${record.id}`);
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ 申请
|
|
|
+ </a>
|
|
|
+ </>
|
|
|
+ </Fragment>
|
|
|
+ ),
|
|
|
+ width: '10%',
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ const renderPage = (activeKey) => {
|
|
|
+ if (activeKey == '1')
|
|
|
+ return (
|
|
|
+ <>
|
|
|
+ {' '}
|
|
|
+ <Form
|
|
|
+ name="basic"
|
|
|
+ // labelCol={{ span: 0 }}
|
|
|
+ // wrapperCol={{ span: 24 }}
|
|
|
+ onFinish={handleApplySubmit}
|
|
|
+ form={applyFormRef}
|
|
|
+ >
|
|
|
+ <div style={{ display: 'flex' }}>
|
|
|
+ {/* <Form.Item name="range-picker" label="申请时间:">
|
|
|
+ <RangePicker />
|
|
|
+ </Form.Item> */}
|
|
|
+ <Form.Item name="audit_status" label="状态:" initialValue="">
|
|
|
+ <Select
|
|
|
+ style={{ width: 120 }}
|
|
|
+ options={[
|
|
|
+ { value: '', label: '全部' },
|
|
|
+ { value: '0', label: '审核中' },
|
|
|
+ { value: '1', label: '通过' },
|
|
|
+ { value: '2', label: '拒绝' },
|
|
|
+ { value: '3', label: '终审通过' },
|
|
|
+ ]}
|
|
|
+ />
|
|
|
+ </Form.Item>
|
|
|
+ <Form.Item>
|
|
|
+ <Button
|
|
|
+ type="primary"
|
|
|
+ htmlType="submit"
|
|
|
+ style={{ marginLeft: 10 }}
|
|
|
+ >
|
|
|
+ 查询
|
|
|
+ </Button>
|
|
|
+ </Form.Item>
|
|
|
+ </div>
|
|
|
+ </Form>
|
|
|
+ <Table
|
|
|
+ rowKey='id'
|
|
|
+ columns={columns}
|
|
|
+ dataSource={applyData}
|
|
|
+ loading={OAApplyLoading}
|
|
|
+ pagination={OAApplyData?.pagination}
|
|
|
+ onChange={handleApplyPaginationChange}
|
|
|
+ />
|
|
|
+ </>
|
|
|
+ );
|
|
|
+ else if (activeKey == '2')
|
|
|
+ return (
|
|
|
+ <>
|
|
|
+ {' '}
|
|
|
+ <Form
|
|
|
+ name="basic"
|
|
|
+ // labelCol={{ span: 0 }}
|
|
|
+ // wrapperCol={{ span: 24 }}
|
|
|
+ // onFinish={handleApproveSubmit}
|
|
|
+ ref={approveFormRef}
|
|
|
+ >
|
|
|
+ {/* <div style={{ display: 'flex' }}>
|
|
|
+ <Form.Item name="range-picker" label="审批时间:">
|
|
|
+ <RangePicker />
|
|
|
+ </Form.Item>
|
|
|
+ <Form.Item name="audit_status" label="状态:" initialValue="">
|
|
|
+ <Select
|
|
|
+ style={{ width: 120 }}
|
|
|
+ options={[
|
|
|
+ { value: '', label: '全部' },
|
|
|
+ { value: '0', label: '审核中' },
|
|
|
+ { value: '1', label: '通过' },
|
|
|
+ { value: '2', label: '拒绝' },
|
|
|
+ { value: '3', label: '终审通过' },
|
|
|
+ ]}
|
|
|
+ />
|
|
|
+ </Form.Item>
|
|
|
+ <Form.Item>
|
|
|
+ <Button
|
|
|
+ type="primary"
|
|
|
+ htmlType="submit"
|
|
|
+ style={{ marginLeft: 10 }}
|
|
|
+ >
|
|
|
+ 查询
|
|
|
+ </Button>
|
|
|
+ </Form.Item>
|
|
|
+ </div> */}
|
|
|
+ </Form>
|
|
|
+ <Table
|
|
|
+ columns={agreementColumns}
|
|
|
+ dataSource={conApplyData?.data}
|
|
|
+ loading={conApplyLoading}
|
|
|
+ pagination={conApplyData?.pagination}
|
|
|
+ onChange={handleProfilePaginationChange}
|
|
|
+ />
|
|
|
+ </>
|
|
|
+ );
|
|
|
+ };
|
|
|
+ return (
|
|
|
+ <PageContainer
|
|
|
+ header={{
|
|
|
+ title: '我的申请',
|
|
|
+ }}
|
|
|
+ tabList={[
|
|
|
+ {
|
|
|
+ tab: 'OA审批',
|
|
|
+ key: '1',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ tab: '合同管理',
|
|
|
+ key: '2',
|
|
|
+ },
|
|
|
+ ]}
|
|
|
+ onTabChange={onTabChange}
|
|
|
+ >
|
|
|
+ <div>{renderPage(tabActive)}</div>
|
|
|
+ <ContractModal
|
|
|
+ detail={detail}
|
|
|
+ type={Type.check}
|
|
|
+ // projectList={projectData?.list}
|
|
|
+ visible={conVisible}
|
|
|
+ handleOk={(data) =>
|
|
|
+ detail.status == Status.Checking ? runCheck(data) : null
|
|
|
+ }
|
|
|
+ handleCancel={() => setConVisible(false)}
|
|
|
+ />
|
|
|
+ </PageContainer>
|
|
|
+ );
|
|
|
+}
|
|
|
+export default Apply;
|