Преглед изворни кода

feat: 修复代办页当数据不存在时页面报错的bug

lanjianrong пре 4 година
родитељ
комит
8f6bad807b
2 измењених фајлова са 64 додато и 63 уклоњено
  1. 34 31
      src/pages/Dashboard/index.tsx
  2. 30 32
      src/pages/Management/Tender/List/index.tsx

+ 34 - 31
src/pages/Dashboard/index.tsx

@@ -93,36 +93,39 @@ const Index = () => {
               <span>需要你关注</span>
             </div>
             <div className={styles.cardBody}>
-              <ul>
-                {
-                  state.messageData.map(item => (
-                    <li className="pi-flex-column" key={item.id}>
-                      <div className="pi-justify-start">
-                        <span className={[ 'pi-pd-lr-15', messageType[item.dataType]?.class ].join(' ')}>{messageType[item.dataType]?.title}</span>
-                        <span className="pi-pd-lr-15">
-                          {
-                            item.content.split('|').map((content, idx) => {
-                              if (idx === 0) {
-                                return <span key={idx}>{content} </span>
-                              } else if (idx === 1) {
-                                return <Link key={idx} to={{ pathname: messageType[item.dataType]?.path, state: { id: item.dataId } }} className="pi-mg-lr-5">
-                                  {content}
-                                </Link>
-                              } else {
-                                return <span key={idx}>{content}</span>
-                              }
-                            })
-                          }
-                        </span>
-                      </div>
-                      <div className="pi-justify-between mt-1">
-                        <span>{item.title}</span>
-                        <span>{dayjsFormat(item.createTime, 'MM-DD HH:mm')}</span>
-                      </div>
-                    </li>
-                  ))
-                }
-              </ul>
+              {state.messageData.length ? (
+                <ul>
+                  {
+                    state.messageData.map(item => (
+                      <li className="pi-flex-column" key={item.id}>
+                        <div className="pi-justify-start">
+                          <span className={[ 'pi-pd-lr-15', messageType[item.dataType]?.class ].join(' ')}>{messageType[item.dataType]?.title}</span>
+                          <span className="pi-pd-lr-15">
+                            {
+                              item.content.split('|').map((content, idx) => {
+                                if (idx === 0) {
+                                  return <span key={idx}>{content} </span>
+                                } else if (idx === 1) {
+                                  return <Link key={idx} to={{ pathname: messageType[item.dataType]?.path, state: { id: item.dataId } }} className="pi-mg-lr-5">
+                                    {content}
+                                  </Link>
+                                } else {
+                                  return <span key={idx}>{content}</span>
+                                }
+                              })
+                            }
+                          </span>
+                        </div>
+                        <div className="pi-justify-between mt-1">
+                          <span>{item.title}</span>
+                          <span>{dayjsFormat(item.createTime, 'MM-DD HH:mm')}</span>
+                        </div>
+                      </li>
+                    ))
+                  }
+                </ul>
+              ) : <p className="pi-text-center pi-muted">暂时没有需要你处理的事项</p>}
+
             </div>
           </div>
           <div className="pi-flex-twice pi-flex-column">
@@ -156,7 +159,7 @@ const Index = () => {
             </div>
             <div className={[ styles.card, 'mt-2' ].join(' ')}>
               <div className={styles.cardBody}>
-                <span className="pi-link-blue">当前版本: {state.versionData.name}</span>
+                <span className="pi-link-blue">当前版本: {state.versionData?.name}</span>
               </div>
             </div>
             <div />

+ 30 - 32
src/pages/Management/Tender/List/index.tsx

@@ -12,7 +12,7 @@ import { apiResfulTree, apiTree } from './api'
 import ModalForm from './components/ModalForm'
 import styles from './index.module.scss'
 import './index.scss'
-const Tender: React.FC<{}> = () =>{
+const Tender: React.FC<{}> = () => {
   const [ tree, setTree ] = useState<TenderTree>({
     ancounts: 0,
     attribution: '',
@@ -33,7 +33,8 @@ const Tender: React.FC<{}> = () =>{
     parentId: '',
     projectId: '',
     serial: '',
-    updateTime: '' })
+    updateTime: ''
+  })
   const [ modal, setModal ] = useState<iModalProps>({
     type: 'folder',
     visible: false,
@@ -49,7 +50,7 @@ const Tender: React.FC<{}> = () =>{
     })
   }
 
-  const columns: ColumnsType<TenderTree>  = [
+  const columns: ColumnsType<TenderTree> = [
     {
       title: '名称',
       dataIndex: 'name',
@@ -69,7 +70,7 @@ const Tender: React.FC<{}> = () =>{
       key: 'member',
       width: 200,
       // eslint-disable-next-line react/display-name
-      render: (text:string, record: TenderTree) => {
+      render: (text: string, record: TenderTree) => {
         if (!record.isfolder) {
           return (
             <div>
@@ -86,11 +87,11 @@ const Tender: React.FC<{}> = () =>{
       key: 'opreate',
       width: 80,
       // eslint-disable-next-line react/display-name
-      render: (text:string, record: TenderTree) => {
+      render: (text: string, record: TenderTree) => {
         return <Dropdown overlay={() => {
           return (
             <Menu>
-              <Menu.Item key="0"><div className="menu-item"  onClick={() => treeBtnClick({ type: 'rename', id: record.id })}><SvgIcon type="xxh-edit" style={{ fontSize: 12 }} /><span className="pi-mg-left-5">重命名</span></div></Menu.Item>
+              <Menu.Item key="0"><div className="menu-item" onClick={() => treeBtnClick({ type: 'rename', id: record.id })}><SvgIcon type="xxh-edit" style={{ fontSize: 12 }} /><span className="pi-mg-left-5">重命名</span></div></Menu.Item>
               <Menu.Item key="1"><div className="menu-item" onClick={() => treeBtnClick({ type: 'move', id: record.id, isFolder: Boolean(record.isfolder) })}><SvgIcon type="xxh-exchange-alt" style={{ fontSize: 12 }} /><span className="pi-mg-left-5">移动</span></div></Menu.Item>
               {
                 record.children?.length ?
@@ -101,40 +102,40 @@ const Tender: React.FC<{}> = () =>{
                       </div>
                     </Tooltip>
                   </Menu.Item>
-                :
-                <Menu.Item key="2"><div className="menu-item" onClick={() => treeBtnClick({ type : record.isfolder ? 'delFolder' : 'delTender', id: record.id, name: record.name })}><SvgIcon type="xxh-times" style={{ fontSize: 12 }} /><span className="pi-mg-left-5">删除</span></div></Menu.Item>
+                  :
+                  <Menu.Item key="2"><div className="menu-item" onClick={() => treeBtnClick({ type: record.isfolder ? 'delFolder' : 'delTender', id: record.id, name: record.name })}><SvgIcon type="xxh-times" style={{ fontSize: 12 }} /><span className="pi-mg-left-5">删除</span></div></Menu.Item>
               }
               {
                 record.isfolder ? <Menu.Divider /> : ''
               }
               {
                 record.isfolder ? (!record.hasFolder) ?
-                <Menu.Item key="3"><div className= "menu-item" onClick={() => treeBtnClick({ type: 'tender', id: record.id })}><SvgIcon type="xxh-plus" style={{ fontSize: 12 }} /><span className="pi-mg-left-5">新建标段</span></div></Menu.Item>
-                :
-                <Menu.Item key="3">
-                  <Tooltip placement="left" title="标段无法与文件夹同层">
-                    <div className= "menu-item text-muted"><SvgIcon type="xxh-plus" style={{ fontSize: 12 }} /><span className="pi-mg-left-5">新建标段</span></div>
-                  </Tooltip></Menu.Item>
-                : ''
+                  <Menu.Item key="3"><div className="menu-item" onClick={() => treeBtnClick({ type: 'tender', id: record.id })}><SvgIcon type="xxh-plus" style={{ fontSize: 12 }} /><span className="pi-mg-left-5">新建标段</span></div></Menu.Item>
+                  :
+                  <Menu.Item key="3">
+                    <Tooltip placement="left" title="标段无法与文件夹同层">
+                      <div className="menu-item text-muted"><SvgIcon type="xxh-plus" style={{ fontSize: 12 }} /><span className="pi-mg-left-5">新建标段</span></div>
+                    </Tooltip></Menu.Item>
+                  : ''
               }
               {
                 record.isfolder ? !record.isBid ?
-                <Menu.Item key="4"><div className="menu-item" onClick={() => treeBtnClick({ type : 'folder', id: record.id })}><SvgIcon type="xxh-folders" style={{ fontSize: 12 }} /><span className="pi-mg-left-5">新建子文件夹</span></div></Menu.Item>
-                :
-                <Menu.Item key="4">
-                  <Tooltip placement="left" title="文件夹无法与标段同层">
-                    <div className="menu-item text-muted"><SvgIcon type="xxh-folders" style={{ fontSize: 12 }} /><span className="pi-mg-left-5">新建子文件夹</span></div>
-                  </Tooltip>
-                </Menu.Item>
-                : ''
+                  <Menu.Item key="4"><div className="menu-item" onClick={() => treeBtnClick({ type: 'folder', id: record.id })}><SvgIcon type="xxh-folders" style={{ fontSize: 12 }} /><span className="pi-mg-left-5">新建子文件夹</span></div></Menu.Item>
+                  :
+                  <Menu.Item key="4">
+                    <Tooltip placement="left" title="文件夹无法与标段同层">
+                      <div className="menu-item text-muted"><SvgIcon type="xxh-folders" style={{ fontSize: 12 }} /><span className="pi-mg-left-5">新建子文件夹</span></div>
+                    </Tooltip>
+                  </Menu.Item>
+                  : ''
               }
 
             </Menu>
           )
         }} trigger={[ 'click' ]}>
           <span>
-          <SvgIcon type="xxh-align-justify" style={{ fontSize: 12, color: "#007bff" }} />
-            <CaretDownOutlined style={{ fontSize: "12px", color: "#007bff" }}/>
+            <SvgIcon type="xxh-align-justify" style={{ fontSize: 12, color: "#007bff" }} />
+            <CaretDownOutlined style={{ fontSize: "12px", color: "#007bff" }} />
           </span>
         </Dropdown>
       }
@@ -142,10 +143,7 @@ const Tender: React.FC<{}> = () =>{
   ]
 
   const onCreate = async (values: iTenderFormValue, type: string) => {
-    setModal({
-      ...modal,
-      confirmLoading: true
-    })
+    setModal({ ...modal, confirmLoading: true })
     const { code = -1 } = await apiResfulTree(type, values)
     if (code === consts.RET_CODE.SUCCESS) {
       getTree()
@@ -187,12 +185,12 @@ const Tender: React.FC<{}> = () =>{
             rowKey={record => record.id}
             indentSize={20}
             bordered
-             />
+          />
         </div>
-        <ModalForm modalObj={modal}  treeObj={tree} onCreate={onCreate} onCancel={() => setModal({
+        <ModalForm modalObj={modal} treeObj={tree} onCreate={onCreate} onCancel={() => setModal({
           ...modal,
           visible: false
-        })}  />
+        })} />
       </div>
     </div>
   )