|
@@ -233,6 +233,8 @@ const PSRDetail = () => {
|
|
|
const [compareOpen, setCompareOpen] = useState(false);
|
|
|
const [compareValues, setCompareValues] = useState([]);
|
|
|
const [isOriginVer, setIsOriginVer] = useState(false); //是否原始版本 是的话只能另存不能编辑
|
|
|
+ const [noData, setNoData] = useState(false); //是否展示导出按钮
|
|
|
+ const titleRef = useRef('');
|
|
|
|
|
|
const luckysheetRef = useRef();
|
|
|
const iframeRef = useRef();
|
|
@@ -310,14 +312,13 @@ const PSRDetail = () => {
|
|
|
},
|
|
|
);
|
|
|
|
|
|
- //保存/另存为月度psr和现金流接口
|
|
|
+ //保存月度psr和现金流接口
|
|
|
const { run: runSave, loading: saveLoading } = useRequest(
|
|
|
(data) => querySavePsrMonth(data),
|
|
|
{
|
|
|
manual: true,
|
|
|
onSuccess: () => {
|
|
|
message.success('保存成功');
|
|
|
- if (open) setOpen(false);
|
|
|
},
|
|
|
onError: () => {
|
|
|
message.success('添加失败');
|
|
@@ -325,6 +326,23 @@ const PSRDetail = () => {
|
|
|
},
|
|
|
);
|
|
|
|
|
|
+ //另存为月度psr和现金流接口
|
|
|
+ const { run: runSaveOther, loading: saveOtherLoading } = useRequest(
|
|
|
+ (data) => querySavePsrMonth(data),
|
|
|
+ {
|
|
|
+ manual: true,
|
|
|
+ onSuccess: () => {
|
|
|
+ message.success('另存成功');
|
|
|
+ if (open) setOpen(false);
|
|
|
+ //另存成功之后切换到最新的记录
|
|
|
+ initPsrActrual(key);
|
|
|
+ },
|
|
|
+ onError: () => {
|
|
|
+ message.success('另存失败');
|
|
|
+ },
|
|
|
+ },
|
|
|
+ );
|
|
|
+
|
|
|
//请求月度psr和现金流详情接口
|
|
|
const { run: runDetail } = useRequest((data) => queryPsrMonthDetail(data), {
|
|
|
manual: true,
|
|
@@ -342,6 +360,9 @@ const PSRDetail = () => {
|
|
|
if (jsonData[0].config && typeof jsonData[0].config == 'string')
|
|
|
jsonData[0].config = JSON.parse(jsonData[0].config);
|
|
|
renderSheet(jsonData, data.is_edit);
|
|
|
+ } else {
|
|
|
+ setExcelData({ name: '' });
|
|
|
+ setNoData(true);
|
|
|
}
|
|
|
},
|
|
|
});
|
|
@@ -382,6 +403,19 @@ const PSRDetail = () => {
|
|
|
}, [key]);
|
|
|
|
|
|
useEffect(() => {
|
|
|
+ let str = '';
|
|
|
+ switch (key) {
|
|
|
+ case '2':
|
|
|
+ str = '签字版PSR_';
|
|
|
+ break;
|
|
|
+ case '3':
|
|
|
+ str = '过程/终版PSR_';
|
|
|
+ break;
|
|
|
+ case '4':
|
|
|
+ str = '现金流_';
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ titleRef.current = str;
|
|
|
setCompareValues([]);
|
|
|
if (key) {
|
|
|
onChange(key);
|
|
@@ -420,7 +454,9 @@ const PSRDetail = () => {
|
|
|
const data_type = key == '3' ? 1 : 2;
|
|
|
const res = await queryPsrMonthLast({ project_id: projectId, data_type });
|
|
|
if (res.data?.length > 0 && res.data[0].json_data) {
|
|
|
- let name = dayjs(res.data[0].day).format('YYYY-MM');
|
|
|
+ let name = `${titleRef.current}${dayjs(res.data[0].day).format(
|
|
|
+ 'YYYY-MM',
|
|
|
+ )}`;
|
|
|
if (res.data[0].ver_type == 1) name = '原始版本';
|
|
|
if (res.data[0].ver_type == 2) name = '基础版本';
|
|
|
|
|
@@ -434,6 +470,10 @@ const PSRDetail = () => {
|
|
|
Array.isArray(data) ? data : [data],
|
|
|
isOrigin ? 0 : res.data[0].is_edit,
|
|
|
);
|
|
|
+ } else {
|
|
|
+ setIsOriginVer(false);
|
|
|
+ setExcelData({ name: '' });
|
|
|
+ setNoData(true);
|
|
|
}
|
|
|
};
|
|
|
|
|
@@ -452,7 +492,7 @@ const PSRDetail = () => {
|
|
|
const rc = key == '3' ? { r: 1, c: 1 } : { r: 1, c: 3 }; //psr日期位置是1 1 现金流日期位置是 1 3
|
|
|
const dateItem = celldata?.find((item) => item.r == rc.r && item.c == rc.c);
|
|
|
if (dateItem) {
|
|
|
- dateItem.v.v = days;
|
|
|
+ dateItem.v.v = days + '';
|
|
|
// dateItem.v.m = days;
|
|
|
}
|
|
|
|
|
@@ -463,7 +503,7 @@ const PSRDetail = () => {
|
|
|
json_data: JSON.stringify(luckyData.data),
|
|
|
data_type: data_type,
|
|
|
};
|
|
|
- runSave(params);
|
|
|
+ runSaveOther(params);
|
|
|
}
|
|
|
};
|
|
|
//保存
|
|
@@ -537,9 +577,9 @@ const PSRDetail = () => {
|
|
|
return preValues;
|
|
|
};
|
|
|
|
|
|
- const exportExcl = (title) => {
|
|
|
+ const exportExcl = (className) => {
|
|
|
const luckyData = luckysheetRef.current?.toJson();
|
|
|
- exportExcel(luckyData.data, title);
|
|
|
+ exportExcel(luckyData.data, name);
|
|
|
};
|
|
|
|
|
|
const handlerLoad = () => {
|
|
@@ -547,12 +587,18 @@ const PSRDetail = () => {
|
|
|
luckysheetRef.current = contentWindow.luckysheet;
|
|
|
};
|
|
|
const renderSheet = (currentData, is_edit = false) => {
|
|
|
+ if (!currentData || !currentData[0]?.celldata) {
|
|
|
+ setNoData(true);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ setNoData(false);
|
|
|
if (!luckysheetRef.current) {
|
|
|
setTimeout(() => {
|
|
|
renderSheet(currentData, is_edit);
|
|
|
}, 500);
|
|
|
return;
|
|
|
}
|
|
|
+ console.log('----------------------', currentData);
|
|
|
const data = currentData;
|
|
|
//设置单元格不可编辑
|
|
|
data?.forEach((item) => {
|
|
@@ -644,7 +690,7 @@ const PSRDetail = () => {
|
|
|
// luckysheetRef.current.setCellValue(8, 8, res.data.Month);
|
|
|
}
|
|
|
};
|
|
|
- const renderTitle = (data_type, title) => {
|
|
|
+ const renderTitle = (data_type, name) => {
|
|
|
if (compareValues?.length == 2) {
|
|
|
return (
|
|
|
<div className={styles.exportDiv}>
|
|
@@ -666,7 +712,11 @@ const PSRDetail = () => {
|
|
|
//投标版psr
|
|
|
return (
|
|
|
<div className={styles.exportDiv}>
|
|
|
- <Button type="primary" onClick={() => exportExcl(title)}>
|
|
|
+ <Button
|
|
|
+ type="primary"
|
|
|
+ onClick={() => exportExcl(name)}
|
|
|
+ disabled={noData}
|
|
|
+ >
|
|
|
导出
|
|
|
</Button>
|
|
|
</div>
|
|
@@ -675,9 +725,9 @@ const PSRDetail = () => {
|
|
|
//签字版psr
|
|
|
return (
|
|
|
<div className={styles.excelTitle}>
|
|
|
- <div>
|
|
|
- 当前PSR表单:
|
|
|
- <span style={{ color: 'blue' }}>{excelData?.name}</span>
|
|
|
+ <div style={{ minWidth: '10px' }}>
|
|
|
+ {/* 当前PSR表单:
|
|
|
+ <span style={{ color: 'blue' }}>{excelData?.name}</span> */}
|
|
|
</div>
|
|
|
<Space>
|
|
|
<Button
|
|
@@ -686,10 +736,15 @@ const PSRDetail = () => {
|
|
|
run(init_flow_id);
|
|
|
setHistoryOpen(true);
|
|
|
}}
|
|
|
+ disabled={noData}
|
|
|
>
|
|
|
- {`${title}历史版本`}
|
|
|
+ 历史版本
|
|
|
</Button>
|
|
|
- <Button type="primary" onClick={() => exportExcl(title)}>
|
|
|
+ <Button
|
|
|
+ type="primary"
|
|
|
+ onClick={() => exportExcl(name)}
|
|
|
+ disabled={noData}
|
|
|
+ >
|
|
|
导出
|
|
|
</Button>
|
|
|
</Space>
|
|
@@ -699,7 +754,7 @@ const PSRDetail = () => {
|
|
|
return (
|
|
|
<div className={styles.excelTitle}>
|
|
|
<div>
|
|
|
- 当前PSR表单:
|
|
|
+ 当前{key == '4' ? '现金流' : 'PSR'}表单:
|
|
|
<span style={{ color: 'blue' }}>{excelData?.name}</span>
|
|
|
</div>
|
|
|
<Space>
|
|
@@ -709,8 +764,9 @@ const PSRDetail = () => {
|
|
|
runList();
|
|
|
setHistoryOpen(true);
|
|
|
}}
|
|
|
+ disabled={noData}
|
|
|
>
|
|
|
- {`${title}历史版本`}
|
|
|
+ {`${name}历史版本`}
|
|
|
</Button>
|
|
|
<Button
|
|
|
type="primary"
|
|
@@ -722,14 +778,23 @@ const PSRDetail = () => {
|
|
|
<Button
|
|
|
type="primary"
|
|
|
onClick={handlerSave}
|
|
|
+ loading={saveLoading}
|
|
|
disabled={!excelData?.is_edit || isOriginVer}
|
|
|
>
|
|
|
保存
|
|
|
</Button>
|
|
|
- <Button type="primary" onClick={() => setCompareOpen(true)}>
|
|
|
+ <Button
|
|
|
+ type="primary"
|
|
|
+ onClick={() => setCompareOpen(true)}
|
|
|
+ disabled={noData}
|
|
|
+ >
|
|
|
比对
|
|
|
</Button>
|
|
|
- <Button type="primary" onClick={() => exportExcl(title)}>
|
|
|
+ <Button
|
|
|
+ type="primary"
|
|
|
+ onClick={() => exportExcl(excelData?.name)}
|
|
|
+ disabled={noData}
|
|
|
+ >
|
|
|
导出
|
|
|
</Button>
|
|
|
</Space>
|
|
@@ -828,9 +893,19 @@ const PSRDetail = () => {
|
|
|
{/* <input type="file" onChange={handlerOnChange} /> */}
|
|
|
<span className={styles.title}>{project_name}</span>
|
|
|
</div>
|
|
|
- <Tabs defaultActiveKey="1" type="card" items={items} onChange={setKey} />
|
|
|
+ <Tabs
|
|
|
+ defaultActiveKey="1"
|
|
|
+ type="card"
|
|
|
+ items={items}
|
|
|
+ onChange={(key) => {
|
|
|
+ setKey(key);
|
|
|
+ titleRef.current = '';
|
|
|
+ }}
|
|
|
+ />
|
|
|
{compareValues?.length == 2 ? (
|
|
|
<CompareCom values={compareValues} />
|
|
|
+ ) : noData ? (
|
|
|
+ <div className={styles.noData}>暂无数据</div>
|
|
|
) : (
|
|
|
<iframe
|
|
|
style={{
|
|
@@ -854,14 +929,18 @@ const PSRDetail = () => {
|
|
|
items={historyList?.map((item) => {
|
|
|
return {
|
|
|
children: (
|
|
|
- <a onClick={() => handlerDetailClick(item.id)}>{item.name}</a>
|
|
|
+ <a onClick={() => handlerDetailClick(item.id)}>
|
|
|
+ {titleRef.current}
|
|
|
+ {item.name}
|
|
|
+ </a>
|
|
|
),
|
|
|
};
|
|
|
})}
|
|
|
/>
|
|
|
</Drawer>
|
|
|
<SaveModal
|
|
|
- loading={saveLoading}
|
|
|
+ showType={key == '4'}
|
|
|
+ loading={saveOtherLoading}
|
|
|
open={open}
|
|
|
onCancel={() => setOpen(false)}
|
|
|
onOk={handlerSaveOther}
|