|
@@ -18,7 +18,11 @@ import {
|
|
} from 'antd';
|
|
} from 'antd';
|
|
import ModuleTitle from '../../../components/ModuleTitle/moduleTitle';
|
|
import ModuleTitle from '../../../components/ModuleTitle/moduleTitle';
|
|
import { useEffect, useMemo, useState } from 'react';
|
|
import { useEffect, useMemo, useState } from 'react';
|
|
-import { queryDepList, querySupplierList } from '@/services/contract';
|
|
|
|
|
|
+import {
|
|
|
|
+ queryCompany,
|
|
|
|
+ queryDepList,
|
|
|
|
+ querySupplierList,
|
|
|
|
+} from '@/services/contract';
|
|
import { useModel, useRequest } from '@umijs/max';
|
|
import { useModel, useRequest } from '@umijs/max';
|
|
import { CloudUploadOutlined } from '@ant-design/icons';
|
|
import { CloudUploadOutlined } from '@ant-design/icons';
|
|
import styles from '../index.less';
|
|
import styles from '../index.less';
|
|
@@ -52,7 +56,9 @@ export const Status = {
|
|
|
|
|
|
const ContractModal = (props) => {
|
|
const ContractModal = (props) => {
|
|
const [form] = Form.useForm();
|
|
const [form] = Form.useForm();
|
|
- const { initialState: { user } } = useModel('@@initialState');
|
|
|
|
|
|
+ const {
|
|
|
|
+ initialState: { user },
|
|
|
|
+ } = useModel('@@initialState');
|
|
const { userList, run: userListRun } = useModel('userList');
|
|
const { userList, run: userListRun } = useModel('userList');
|
|
const { depList, run: depListRun } = useModel('depList');
|
|
const { depList, run: depListRun } = useModel('depList');
|
|
const FORMAT = 'YYYY-MM-DD';
|
|
const FORMAT = 'YYYY-MM-DD';
|
|
@@ -82,9 +88,13 @@ const ContractModal = (props) => {
|
|
const [fileList, setFileList] = useState([]);
|
|
const [fileList, setFileList] = useState([]);
|
|
const [fileExtendList, setFileExtendList] = useState([]);
|
|
const [fileExtendList, setFileExtendList] = useState([]);
|
|
|
|
|
|
|
|
+ const { data: companyData, run: runCompany } = useRequest(queryCompany);
|
|
|
|
+ console.log('-=0000--------------', companyData);
|
|
|
|
+
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
userListRun();
|
|
userListRun();
|
|
depListRun();
|
|
depListRun();
|
|
|
|
+ runCompany();
|
|
}, []);
|
|
}, []);
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
@@ -113,14 +123,15 @@ const ContractModal = (props) => {
|
|
return false;
|
|
return false;
|
|
}, [user]);
|
|
}, [user]);
|
|
|
|
|
|
- console.log('======================', data, is_supplement);
|
|
|
|
-
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
- if (company == 135) {
|
|
|
|
|
|
+ const item = companyData?.find((item) => item.ID == company);
|
|
|
|
+ if (item?.Flag == 1) {
|
|
setDepDisable(false);
|
|
setDepDisable(false);
|
|
|
|
+ form.setFieldsValue({ dep_id: '', archives_dep: '' });
|
|
// setDealDisable(false);
|
|
// setDealDisable(false);
|
|
} else {
|
|
} else {
|
|
setDepDisable(true);
|
|
setDepDisable(true);
|
|
|
|
+ form.setFieldsValue({ dep_id: '综合管理部', archives_dep: '综合管理部' });
|
|
// setDealDisable(true);
|
|
// setDealDisable(true);
|
|
// form.setFieldsValue({ deal_by: user?.CName });
|
|
// form.setFieldsValue({ deal_by: user?.CName });
|
|
}
|
|
}
|
|
@@ -129,7 +140,11 @@ const ContractModal = (props) => {
|
|
const project_code = projectList?.find(
|
|
const project_code = projectList?.find(
|
|
(item) => item.project_name == project_name,
|
|
(item) => item.project_name == project_name,
|
|
)?.project_full_code;
|
|
)?.project_full_code;
|
|
- if (project_code) form.setFieldsValue({ project_code });
|
|
|
|
|
|
+ if (project_code) {
|
|
|
|
+ form.setFieldsValue({ project_code });
|
|
|
|
+ } else {
|
|
|
|
+ form.setFieldsValue({ project_code: '' });
|
|
|
|
+ }
|
|
}, [project_name]);
|
|
}, [project_name]);
|
|
|
|
|
|
// useEffect(() => {
|
|
// useEffect(() => {
|
|
@@ -137,8 +152,8 @@ const ContractModal = (props) => {
|
|
// }, [is_supplement]);
|
|
// }, [is_supplement]);
|
|
|
|
|
|
const supplyList = useMemo(() => {
|
|
const supplyList = useMemo(() => {
|
|
- return depList ? [...depList, ...supplierList] : supplierList;
|
|
|
|
- }, [depList, supplierList]);
|
|
|
|
|
|
+ return companyData ? [...companyData, ...supplierList] : supplierList;
|
|
|
|
+ }, [companyData, supplierList]);
|
|
|
|
|
|
const disableds = useMemo(() => {
|
|
const disableds = useMemo(() => {
|
|
if (!visible) {
|
|
if (!visible) {
|
|
@@ -166,6 +181,8 @@ const ContractModal = (props) => {
|
|
onChange({ file, fileList }) {
|
|
onChange({ file, fileList }) {
|
|
if (file.status !== 'uploading') {
|
|
if (file.status !== 'uploading') {
|
|
console.log(file, fileList);
|
|
console.log(file, fileList);
|
|
|
|
+ const list = fileList.map((item) => item.response?.data?.attach);
|
|
|
|
+ form.setFieldsValue({ attach: list });
|
|
setFileList(fileList.map((item) => item.response?.data?.attach));
|
|
setFileList(fileList.map((item) => item.response?.data?.attach));
|
|
}
|
|
}
|
|
},
|
|
},
|
|
@@ -191,25 +208,34 @@ const ContractModal = (props) => {
|
|
if (parent_id) values.parent_id = parent_id;
|
|
if (parent_id) values.parent_id = parent_id;
|
|
if (values.amount || values.amount == 0)
|
|
if (values.amount || values.amount == 0)
|
|
values.amount = values.amount + '';
|
|
values.amount = values.amount + '';
|
|
- if (fileList.length > 0) values.attach = JSON.stringify(fileList);
|
|
|
|
- if (values.party_c && values.party_c.length > 0)
|
|
|
|
- values.party_c = values.party_c.join(',');
|
|
|
|
- if (values.company_id == 135 && values.dep_id) {
|
|
|
|
|
|
+ if (values.attach) values.attach = JSON.stringify(values.attach);
|
|
|
|
+ if (fileExtendList.length > 0)
|
|
|
|
+ values.attach_extend = JSON.stringify(fileList);
|
|
|
|
+
|
|
|
|
+ // if (values.party_c && values.party_c.length > 0)
|
|
|
|
+ values.party_c = values.party_c?.join(',');
|
|
|
|
+
|
|
|
|
+ const companyItem = companyData?.find(
|
|
|
|
+ (item) => item.ID == values.company_id,
|
|
|
|
+ );
|
|
|
|
+ //所属公司为本部
|
|
|
|
+ if (companyItem.Flag == 1) {
|
|
const item = getDepItemById(values.dep_id);
|
|
const item = getDepItemById(values.dep_id);
|
|
if (item) {
|
|
if (item) {
|
|
values.dep_name = item.Name;
|
|
values.dep_name = item.Name;
|
|
values.dep_code = item.Code;
|
|
values.dep_code = item.Code;
|
|
}
|
|
}
|
|
- const companyItem = getDepItemById(values.company_id);
|
|
|
|
- if (companyItem) values.company_name = companyItem.Name;
|
|
|
|
- } else if (values.company_id) {
|
|
|
|
- const item = getDepItemById(values.company_id);
|
|
|
|
- if (item) {
|
|
|
|
- values.company_name = item.Name;
|
|
|
|
- values.company_code = item.Code;
|
|
|
|
- }
|
|
|
|
|
|
+ values.company_name = companyItem.Name;
|
|
|
|
+ } else {
|
|
|
|
+ //为分子公司
|
|
|
|
+ values.company_name = companyItem.Name;
|
|
|
|
+ values.company_code = companyItem.Code;
|
|
|
|
+ values.dep_name = '综合管理部';
|
|
|
|
+ values.dep_code = '综合管理部';
|
|
|
|
+ values.dep_id = 0;
|
|
}
|
|
}
|
|
values.created_by = user?.ID;
|
|
values.created_by = user?.ID;
|
|
|
|
+ console.log('-=-=-=-=-=-=-----values--------------', values);
|
|
handleOk(values);
|
|
handleOk(values);
|
|
} else if (type == Type.cancel) {
|
|
} else if (type == Type.cancel) {
|
|
let result = {
|
|
let result = {
|
|
@@ -273,20 +299,20 @@ const ContractModal = (props) => {
|
|
labelCol={{ span: 7 }}
|
|
labelCol={{ span: 7 }}
|
|
wrapperCol={{ span: 17 }}
|
|
wrapperCol={{ span: 17 }}
|
|
>
|
|
>
|
|
- <ModuleTitle title="创建人信息" />
|
|
|
|
|
|
+ <ModuleTitle title="存档人信息" />
|
|
<Row>
|
|
<Row>
|
|
<Col span={10} offset={1}>
|
|
<Col span={10} offset={1}>
|
|
<Form.Item
|
|
<Form.Item
|
|
name="created_name"
|
|
name="created_name"
|
|
initialValue={data?.created_name || user?.CName}
|
|
initialValue={data?.created_name || user?.CName}
|
|
- label="创建人:"
|
|
|
|
|
|
+ label="存档人:"
|
|
>
|
|
>
|
|
<Input disabled />
|
|
<Input disabled />
|
|
</Form.Item>
|
|
</Form.Item>
|
|
<Form.Item
|
|
<Form.Item
|
|
name="company_id"
|
|
name="company_id"
|
|
label="所属公司:"
|
|
label="所属公司:"
|
|
- tooltip="所属公司"
|
|
|
|
|
|
+ tooltip="请选择该存档合同所属公司"
|
|
initialValue={data?.company_id}
|
|
initialValue={data?.company_id}
|
|
rules={[
|
|
rules={[
|
|
{
|
|
{
|
|
@@ -295,20 +321,22 @@ const ContractModal = (props) => {
|
|
},
|
|
},
|
|
]}
|
|
]}
|
|
>
|
|
>
|
|
- <TreeSelect
|
|
|
|
|
|
+ <Select
|
|
|
|
+ showSearch
|
|
style={{ width: '100%' }}
|
|
style={{ width: '100%' }}
|
|
placeholder="请选择"
|
|
placeholder="请选择"
|
|
- showSearch
|
|
|
|
- allowClear
|
|
|
|
- treeDefaultExpandAll
|
|
|
|
- fieldNames={{
|
|
|
|
- label: 'Name',
|
|
|
|
- value: 'ID',
|
|
|
|
- children: 'children',
|
|
|
|
- }}
|
|
|
|
- dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}
|
|
|
|
- treeData={depList}
|
|
|
|
disabled={disableds.contract}
|
|
disabled={disableds.contract}
|
|
|
|
+ filterOption={(input, option) =>
|
|
|
|
+ (option?.label ?? '')
|
|
|
|
+ .toLowerCase()
|
|
|
|
+ .includes(input.toLowerCase())
|
|
|
|
+ }
|
|
|
|
+ options={companyData?.map((item) => {
|
|
|
|
+ return {
|
|
|
|
+ value: item.ID,
|
|
|
|
+ label: item.Name,
|
|
|
|
+ };
|
|
|
|
+ })}
|
|
/>
|
|
/>
|
|
</Form.Item>
|
|
</Form.Item>
|
|
</Col>
|
|
</Col>
|
|
@@ -316,7 +344,7 @@ const ContractModal = (props) => {
|
|
<Form.Item
|
|
<Form.Item
|
|
name="created_on"
|
|
name="created_on"
|
|
initialValue={data?.created_on || dayjs().format(FORMAT)}
|
|
initialValue={data?.created_on || dayjs().format(FORMAT)}
|
|
- label="创建时间:"
|
|
|
|
|
|
+ label="存档时间:"
|
|
>
|
|
>
|
|
<Input disabled />
|
|
<Input disabled />
|
|
</Form.Item>
|
|
</Form.Item>
|
|
@@ -330,7 +358,6 @@ const ContractModal = (props) => {
|
|
placeholder="请选择"
|
|
placeholder="请选择"
|
|
showSearch
|
|
showSearch
|
|
allowClear
|
|
allowClear
|
|
- treeDefaultExpandAll
|
|
|
|
fieldNames={{
|
|
fieldNames={{
|
|
label: 'Name',
|
|
label: 'Name',
|
|
value: 'ID',
|
|
value: 'ID',
|
|
@@ -349,6 +376,7 @@ const ContractModal = (props) => {
|
|
<Form.Item
|
|
<Form.Item
|
|
name="deal_by"
|
|
name="deal_by"
|
|
label="经办人:"
|
|
label="经办人:"
|
|
|
|
+ tooltip="经办人应负责合同审批流程、签字盖章、合同原件存档和电子档案存档。母公司的经办人为OA审批提交人,也是存档人。子公司经办人由子公司合同专员填写,一般是合同审批时的提交人或者是合同实际执行的负责人"
|
|
initialValue={data?.deal_by || user?.CName}
|
|
initialValue={data?.deal_by || user?.CName}
|
|
rules={[
|
|
rules={[
|
|
{
|
|
{
|
|
@@ -380,6 +408,7 @@ const ContractModal = (props) => {
|
|
<Form.Item
|
|
<Form.Item
|
|
name="created_dep"
|
|
name="created_dep"
|
|
label="签约承办部门:"
|
|
label="签约承办部门:"
|
|
|
|
+ tooltip="请选择该存档合同的实际履行部门,一般为经办人所在部门"
|
|
initialValue={data?.created_dep}
|
|
initialValue={data?.created_dep}
|
|
rules={[
|
|
rules={[
|
|
{
|
|
{
|
|
@@ -413,7 +442,7 @@ const ContractModal = (props) => {
|
|
name="is_supplement"
|
|
name="is_supplement"
|
|
label="是否补充协议:"
|
|
label="是否补充协议:"
|
|
tooltip="合同名称"
|
|
tooltip="合同名称"
|
|
- initialValue={data?.name}
|
|
|
|
|
|
+ initialValue={0}
|
|
rules={[
|
|
rules={[
|
|
{
|
|
{
|
|
required: true,
|
|
required: true,
|
|
@@ -429,7 +458,7 @@ const ContractModal = (props) => {
|
|
<Form.Item
|
|
<Form.Item
|
|
name="name"
|
|
name="name"
|
|
label="合同名称:"
|
|
label="合同名称:"
|
|
- tooltip="合同名称"
|
|
|
|
|
|
+ tooltip="请与OA审批时填写的合同名称一致"
|
|
initialValue={data?.name}
|
|
initialValue={data?.name}
|
|
rules={[
|
|
rules={[
|
|
{
|
|
{
|
|
@@ -444,6 +473,7 @@ const ContractModal = (props) => {
|
|
name="effect_on"
|
|
name="effect_on"
|
|
label="合同签订日期:"
|
|
label="合同签订日期:"
|
|
initialValue={data?.effect_on}
|
|
initialValue={data?.effect_on}
|
|
|
|
+ tooltip="合同主体各方签字盖章完成之日,以最后签字盖章的为准"
|
|
rules={[
|
|
rules={[
|
|
{
|
|
{
|
|
required: true,
|
|
required: true,
|
|
@@ -463,6 +493,7 @@ const ContractModal = (props) => {
|
|
<Form.Item
|
|
<Form.Item
|
|
name="project_name"
|
|
name="project_name"
|
|
label="项目名称:"
|
|
label="项目名称:"
|
|
|
|
+ tooltip="不涉及项目请填写“不涉及”"
|
|
initialValue={data?.project_name}
|
|
initialValue={data?.project_name}
|
|
rules={[
|
|
rules={[
|
|
{
|
|
{
|
|
@@ -537,12 +568,24 @@ const ContractModal = (props) => {
|
|
>
|
|
>
|
|
<Input placeholder="请填写" />
|
|
<Input placeholder="请填写" />
|
|
</Form.Item>
|
|
</Form.Item>
|
|
- <Form.Item name="code" initialValue={data?.code} label="合同编号:">
|
|
|
|
|
|
+ <Form.Item
|
|
|
|
+ name="code"
|
|
|
|
+ tooltip="请与OA审批时填写的合同编号一致。合同编号应按《合同管理办法》的合同编码规则编号"
|
|
|
|
+ initialValue={data?.code}
|
|
|
|
+ label="合同编号:"
|
|
|
|
+ rules={[
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: '请填写合同编号',
|
|
|
|
+ },
|
|
|
|
+ ]}
|
|
|
|
+ >
|
|
<Input placeholder="请填写" />
|
|
<Input placeholder="请填写" />
|
|
</Form.Item>
|
|
</Form.Item>
|
|
<Form.Item
|
|
<Form.Item
|
|
label="合同总价款:"
|
|
label="合同总价款:"
|
|
name="amount"
|
|
name="amount"
|
|
|
|
+ tooltip="请与OA审批时填写的“合同金额”一致。不涉及金额填“0”"
|
|
initialValue={data?.amount}
|
|
initialValue={data?.amount}
|
|
rules={[
|
|
rules={[
|
|
{
|
|
{
|
|
@@ -626,7 +669,17 @@ const ContractModal = (props) => {
|
|
</Form.Item>
|
|
</Form.Item>
|
|
<Row>
|
|
<Row>
|
|
<Col span={10} offset={1}>
|
|
<Col span={10} offset={1}>
|
|
- <Form.Item label="合同及合同附件上传:">
|
|
|
|
|
|
+ <Form.Item
|
|
|
|
+ label="合同及合同附件上传:"
|
|
|
|
+ tooltip="请上传合同正式盖章文本的扫描件(含技术协议、质保承诺等附件),不得用照片、图片格式,不得遗漏附件"
|
|
|
|
+ name="attach"
|
|
|
|
+ rules={[
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: '请上传合同及合同相关附件',
|
|
|
|
+ },
|
|
|
|
+ ]}
|
|
|
|
+ >
|
|
{type == Type.add ? (
|
|
{type == Type.add ? (
|
|
<Upload {...UploadProps}>
|
|
<Upload {...UploadProps}>
|
|
<Button icon={<CloudUploadOutlined />}>Upload</Button>
|
|
<Button icon={<CloudUploadOutlined />}>Upload</Button>
|
|
@@ -635,13 +688,7 @@ const ContractModal = (props) => {
|
|
<ul>
|
|
<ul>
|
|
{data?.attach &&
|
|
{data?.attach &&
|
|
JSON.parse(data?.attach)?.map((item, idx) => (
|
|
JSON.parse(data?.attach)?.map((item, idx) => (
|
|
- <li key={`${idx}_${item.name}`}>
|
|
|
|
- {item.name}
|
|
|
|
- {/* <Space>
|
|
|
|
- {item.name} <span>预览</span>{' '}
|
|
|
|
- <a href={item.url}>下载</a>
|
|
|
|
- </Space> */}
|
|
|
|
- </li>
|
|
|
|
|
|
+ <li key={`${idx}_${item.name}`}>{item.name}</li>
|
|
))}
|
|
))}
|
|
</ul>
|
|
</ul>
|
|
)}
|
|
)}
|
|
@@ -650,28 +697,35 @@ const ContractModal = (props) => {
|
|
name="archives_dep"
|
|
name="archives_dep"
|
|
initialValue={data?.archives_dep}
|
|
initialValue={data?.archives_dep}
|
|
label="合同原件存档部门:"
|
|
label="合同原件存档部门:"
|
|
|
|
+ tooltip="母公司财务部和采购部门的合同请选择“财务部”,其他部门请选择“行政部”,子公司合同选择“综合管理部”"
|
|
>
|
|
>
|
|
- {company == 135 ? (
|
|
|
|
- <Select
|
|
|
|
- style={{ width: '100%' }}
|
|
|
|
- options={[
|
|
|
|
- {
|
|
|
|
- value: '财务部',
|
|
|
|
- label: '财务部',
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- value: '行政部',
|
|
|
|
- label: '行政部',
|
|
|
|
- },
|
|
|
|
- ]}
|
|
|
|
- />
|
|
|
|
- ) : (
|
|
|
|
- <Input value={'综合管理部'} disabled={disableds.contract} />
|
|
|
|
- )}
|
|
|
|
|
|
+ <Select
|
|
|
|
+ style={{ width: '100%' }}
|
|
|
|
+ options={[
|
|
|
|
+ {
|
|
|
|
+ value: '财务部',
|
|
|
|
+ label: '财务部',
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ value: '行政部',
|
|
|
|
+ label: '行政部',
|
|
|
|
+ },
|
|
|
|
+ ]}
|
|
|
|
+ disabled={disableds.contract || depDisable}
|
|
|
|
+ />
|
|
</Form.Item>
|
|
</Form.Item>
|
|
</Col>
|
|
</Col>
|
|
<Col span={10}>
|
|
<Col span={10}>
|
|
- <Form.Item label="合同相关资料上传:">
|
|
|
|
|
|
+ <Form.Item
|
|
|
|
+ label="合同相关资料上传:"
|
|
|
|
+ tooltip="依据《合同管理办法》,合同相关资料需要作为合同电子档案的一部分,包括:
|
|
|
|
+ 1)合同会审纪要或投资决策通知书(如有);
|
|
|
|
+ 2)合同相对方的营业执照等资质证的复印件(首次签约的须加盖公章)、个人身份证复印件(合同一方为自然人时提供);
|
|
|
|
+ 3)合同相对方经办人员的授权委托书原件及其身份证复印件(如有);
|
|
|
|
+ 4) 涉及房屋或场地租赁的,还应提供房屋及场地的权属证明资料,但如果续签租赁合同,且房屋所有权人没有发生变更的,在附具相关说明后可不再提供上述资料;
|
|
|
|
+ 5)其他资料。
|
|
|
|
+ "
|
|
|
|
+ >
|
|
{type == Type.add ? (
|
|
{type == Type.add ? (
|
|
<Upload {...UploadPropsExtend}>
|
|
<Upload {...UploadPropsExtend}>
|
|
<Button icon={<CloudUploadOutlined />}>Upload</Button>
|
|
<Button icon={<CloudUploadOutlined />}>Upload</Button>
|