소스 검색

修改psrbug

Renxy 1 년 전
부모
커밋
7d6744f4db

+ 2 - 2
src/pages/PSRManage/components/compareModal.js

@@ -27,9 +27,9 @@ const CompareModal = ({ list, open, onOk, onCancel }) => {
         }}
       >
         <Space direction="vertical">
-          {list?.map((item) => {
+          {list?.map((item, idx) => {
             return (
-              <Checkbox value={item.id}>
+              <Checkbox value={item.id} key={idx}>
                 {dayjs(item.day).format('YYYY-MM')}
               </Checkbox>
             );

+ 13 - 6
src/pages/PSRManage/components/saveOtherModal.js

@@ -2,7 +2,7 @@ import { DatePicker, Modal, Radio } from 'antd';
 import dayjs from 'dayjs';
 
 import { useState } from 'react';
-const SaveModal = ({ loading, open, onCancel, onOk }) => {
+const SaveModal = ({ loading, open, showType, onCancel, onOk }) => {
   const [day, setDay] = useState('1970-01-31');
   const [tab, setTab] = useState(1);
 
@@ -18,11 +18,18 @@ const SaveModal = ({ loading, open, onCancel, onOk }) => {
       onCancel={onCancel}
       onOk={() => onOk(tab == 1 ? { day } : { day, ver_type: 2 })}
     >
-      <span>类型:</span>
-      <Radio.Group onChange={(e) => setTab(e.target.value)} defaultValue={tab}>
-        <Radio.Button value={1}>月版本</Radio.Button>
-        <Radio.Button value={2}>基础版本</Radio.Button>
-      </Radio.Group>
+      {showType && (
+        <>
+          <span>类型:</span>
+          <Radio.Group
+            onChange={(e) => setTab(e.target.value)}
+            defaultValue={tab}
+          >
+            <Radio.Button value={1}>月版本</Radio.Button>
+            <Radio.Button value={2}>基础版本</Radio.Button>
+          </Radio.Group>
+        </>
+      )}
       {tab == '1' && (
         <div style={{ marginTop: '20px' }}>
           <span>月份:</span>

+ 100 - 21
src/pages/PSRManage/detail.js

@@ -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}

+ 13 - 8
src/pages/PSRManage/index.less

@@ -1,35 +1,40 @@
-.searchContent{
+.searchContent {
   display: flex;
   align-items: center;
   margin-bottom: 40px;
   width: calc(100% - 55px);
-  .itemFlex{
+  .itemFlex {
     display: flex;
     align-items: center;
     margin-right: 30px;
   }
-  .searchBtnSty{
+  .searchBtnSty {
     margin-right: 20px;
   }
 }
-.titleDev{
+.titleDev {
   display: flex;
   align-items: center;
   margin-bottom: 20px;
-  .title{
+  .title {
     margin-left: 30px;
     font-size: 22px;
   }
 }
-.excelTitle{
+.excelTitle {
   display: flex;
   align-items: center;
   margin-bottom: 20px;
   justify-content: space-between;
 }
-.exportDiv{
+.exportDiv {
   display: flex;
   flex-direction: row-reverse;
   margin-bottom: 20px;
 }
-
+.noData {
+  width: 100%;
+  height: 80vh;
+  text-align: center;
+  line-height: 60vh;
+}

+ 8 - 0
src/utils/exportExcl.js

@@ -34,6 +34,14 @@ export function getExcelBolob(luckysheet) {
 }
 
 export function exportExcel(luckysheet, value) {
+  //处理时间错乱问题,把v全部换成m显示值
+  luckysheet.forEach((sheetData) => {
+    sheetData?.celldata.forEach((cell) => {
+      if (cell?.v) {
+        cell.v.v = cell.v.m;
+      }
+    });
+  });
   // return
   // 4.写入 buffer
   getExcelBolob(luckysheet).then((blob) => {