瀏覽代碼

feat: 代办页接口接入

lanjianrong 4 年之前
父節點
當前提交
a614d430ab

+ 5 - 5
src/components/AuditContent/index.tsx

@@ -282,7 +282,7 @@ const Index: React.FC<iAuditContentProps> = props => {
           .filter(item => item.progress === '0')
           .map((item, idx) => {
             return idx === 0 ? (
-              <tr key={item.audit_id}>
+              <tr key={item.id}>
                 <td rowSpan={auditors.filter(item => item.progress === '0').length} className="pi-text-center">
                   审批
                 </td>
@@ -298,7 +298,7 @@ const Index: React.FC<iAuditContentProps> = props => {
                 ) : null}
               </tr>
             ) : (
-              <tr key={item.audit_id}>
+              <tr key={item.id}>
                 <td>
                   <SvgIcon type={item.status === 0 ? 'xxh-stop-circle' : 'xxh-chevron-circle-down'}></SvgIcon>
                   <span className="pi-mg-left-3">{item.name}</span>
@@ -347,7 +347,7 @@ const Index: React.FC<iAuditContentProps> = props => {
           .filter(item => item.progress === '2')
           .map((item, idx) => {
             return idx === 0 ? (
-              <tr key={item.audit_id}>
+              <tr key={item.id}>
                 <td rowSpan={auditors.filter(item => item.progress === '2').length} className="pi-text-center">
                   复查
                 </td>
@@ -363,7 +363,7 @@ const Index: React.FC<iAuditContentProps> = props => {
                 ) : null}
               </tr>
             ) : (
-              <tr key={item.audit_id}>
+              <tr key={item.id}>
                 <td>
                   <SvgIcon type={item.status === 0 ? 'xxh-stop-circle' : 'xxh-chevron-circle-down'}></SvgIcon>
                   <span className="pi-mg-left-3">{item.name}</span>
@@ -388,7 +388,7 @@ const Index: React.FC<iAuditContentProps> = props => {
           return (
             <ul className="timeline-list" key={index}>
               {item?.map((auditor, idx) => (
-                <div key={idx}>
+                <div key={auditor.id}>
                   <li className="timeline-list-item">
                     <div
                       className="timeline-item-date pi-flex-column"

+ 1 - 0
src/pages/Dashboard/api.ts

@@ -5,3 +5,4 @@ export async function apiGetDashboard() {
   const { data } = await request.get('/api/dashboard')
   return data
 }
+

+ 4 - 0
src/pages/Dashboard/index.scss

@@ -1,3 +1,7 @@
+.dashborad-content {
+  background: #e4e7ea;
+}
+
 .badge {
   padding: 0.25em 0.4em;
   font-size: 100%;

+ 76 - 46
src/pages/Dashboard/index.tsx

@@ -1,5 +1,5 @@
 import Header from '@/components/Header'
-import React, { useEffect } from 'react'
+import React, { useState, useEffect } from 'react'
 import styles from './index.module.scss'
 import SvgIcon from '@/components/SvgIcon'
 import './index.scss'
@@ -11,30 +11,39 @@ import { Tooltip } from 'antd'
 import { observer } from 'mobx-react'
 import { apiGetDashboard } from './api'
 import consts from '@/utils/consts'
+import { DashboardState } from '@/types/dashboard'
 
-interface iState {
 
-}
 const Index = () => {
+  const messageType = {
+    1: {
+      title: '安全巡检',
+      class: 'badge-success',
+      path: '/console/safe/content/detail/info'
+    },
+    2: {
+      title: '质量巡检',
+      class: 'badge-info',
+      path: '/console/quality/content/detail/info'
+    }
+  }
   useEffect(() => {
     initData()
-
   }, [])
   useEffect(() => {
-    if(!userStore.projectInfo.id) {
+    if (!userStore.projectInfo.id) {
       userStore.getProjectInfo()
     }
   }, [ userStore.projectInfo.id ])
-  // const [state, setState] = useState(initialState)
+  const [ state, setState ] = useState<DashboardState>({ approverData: [], messageData: [], versionData: { id: '', name: '', createTime: '', content: '' } })
   const initData = async () => {
     const { code = -1, data } = await apiGetDashboard()
-    if (code !== consts.RET_CODE.SUCCESS) {
-      console.log(data)
-
+    if (code === consts.RET_CODE.SUCCESS) {
+      setState(data)
     }
   }
   return (
-    <div className="wrap-contaniner hide-menu">
+    <div className="wrap-contaniner hide-menu dashborad-content">
       <Header title="待办事项"></Header>
       <div className={styles.content}>
         <span>系统消息</span>
@@ -49,25 +58,34 @@ const Index = () => {
               <span>需要你处理</span>
             </div>
             <div className={styles.cardBody}>
-              <ul>
-                <li className="pi-flex-column">
-                  <div className="pi-justify-between">
-                    <div>
-                      <span className={[ 'pi-pd-lr-15', 'badge-success' ].join(' ')}>质量巡检</span>
-                      <span className="pi-pd-lr-15">
-                        <span>WWUJ-1 </span>
-                        <Link to="/console/dashboard">施工质量事故</Link>
-                      </span>
-                    </div>
-                    <ZhButton size="small">审批</ZhButton>
-                  </div>
-                  <div className="pi-justify-between mt-1 ">
-                    <span>张三-监理一</span>
-                    <span>{dayjsFormat(new Date(), 'MM-DD HH:mm')}</span>
-                  </div>
-                </li>
-              </ul>
-              {/* <p className="pi-text-center pi-muted">暂时没有需要你处理的事项</p> */}
+              {
+                state.approverData.length ? (
+                  <ul>
+                    {
+                      state.approverData.map(item => {
+                        return (
+                          <li className="pi-flex-column" key={item.id}>
+                            <div className="pi-justify-between">
+                              <div>
+                                <span className={[ 'pi-pd-lr-15', messageType[item.dataType]?.class ].join(' ')}>{messageType[item.dataType]?.title}</span>
+                                <span className="pi-pd-lr-15">
+                                  <span>WWUJ-1 </span>
+                                  <Link to={{ pathname: messageType[item.dataType]?.path, state: { id: item.dataId } }}>{item.inspectionDetail}</Link>
+                                </span>
+                              </div>
+                              <ZhButton size="small"><Link to={{ pathname: messageType[item.dataType]?.path, state: { id: item.dataId } }}>审批</Link></ZhButton>
+                            </div>
+                            <div className="pi-justify-between mt-1 ">
+                              <span>{item.name}-{item.position}</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={[ styles.card, 'pi-flex-quintuple', 'pi-mg-lr-30' ].join(' ')}>
@@ -76,22 +94,34 @@ const Index = () => {
             </div>
             <div className={styles.cardBody}>
               <ul>
-                <li className="pi-flex-column">
-                  <div className="pi-justify-start">
-                    <span className={[ 'pi-pd-lr-15', 'badge-success' ].join(' ')}>质量巡检</span>
-                    <span className="pi-pd-lr-15">
-                      <span>WWUJ-1 </span>
-                      <Link to="/console/dashboard" className="pi-mg-lr-5">
-                        施工质量事故
-                      </Link>
-                      <span>审批完成,待整改</span>
-                    </span>
-                  </div>
-                  <div className="pi-justify-between mt-1">
-                    <span>张三-监理一</span>
-                    <span>{dayjsFormat(new Date(), 'MM-DD HH:mm')}</span>
-                  </div>
-                </li>
+                {
+                  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>{content} </span>
+                              } else if (idx === 1) {
+                                return <Link to={{ pathname: messageType[item.dataType]?.path, state: { id: item.dataId } }} className="pi-mg-lr-5">
+                                  {content}
+                                </Link>
+                              } else {
+                                return <span>{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>
             </div>
           </div>
@@ -126,7 +156,7 @@ const Index = () => {
             </div>
             <div className={[ styles.card, 'mt-2' ].join(' ')}>
               <div className={styles.cardBody}>
-                <span className="pi-link-blue">当前版本: 1.2.0</span>
+                <span className="pi-link-blue">当前版本: {state.versionData.name}</span>
               </div>
             </div>
             <div></div>

+ 3 - 3
src/pages/Quality/Content/Info/Detail/index.tsx

@@ -31,7 +31,7 @@ interface iModalObj {
   loading: boolean
 }
 const Detail: React.FC<RouteComponentProps> = props => {
-  const { saveId = '' } = props.location.state as any
+  const { id = '' } = props.location.state as any
   const [ modalObj, setModalObj ] = useState<iModalObj>({
     ossModal: false,
     auditModal: false,
@@ -80,9 +80,9 @@ const Detail: React.FC<RouteComponentProps> = props => {
   }, [ detail.status ])
   useEffect(() => {
     initData()
-  }, [ saveId ])
+  }, [ id ])
   const initData = async () => {
-    const { code = -1, data = {} } = await apiGetQualityDetail(saveId)
+    const { code = -1, data = {} } = await apiGetQualityDetail(id)
     if (code === consts.RET_CODE.SUCCESS) {
       setDetail({ ...detail, ...data })
     }

+ 1 - 1
src/pages/Quality/Content/List/index.tsx

@@ -63,7 +63,7 @@ const QualityList: React.FC<{}> = () => {
       dataIndex: 'code',
       // eslint-disable-next-line react/display-name
       render: (text: string, record) => {
-        return <Link to={{ pathname: '/console/quality/content/detail/info', state: { saveId: record.id } }}>{text}</Link>
+        return <Link to={{ pathname: '/console/quality/content/detail/info', state: { id: record.id } }}>{text}</Link>
       }
     },
     {

+ 1 - 1
src/pages/Quality/List/index.tsx

@@ -15,7 +15,7 @@ import { useAliveController } from 'react-activation'
 import { RouteComponentProps, withRouter } from 'react-router-dom'
 import styles from './index.module.scss'
 
-const List: React.FC<RouteComponentProps> = props => {
+const List: React.FC<RouteComponentProps> = () => {
   const { clear } = useAliveController()
   useEffect(() => {
     // 清除所有的缓存页面

+ 3 - 3
src/pages/Safe/Content/Info/Detail/index.tsx

@@ -31,7 +31,7 @@ interface iModalObj {
   loading: boolean
 }
 const Detail: React.FC<RouteComponentProps> = props => {
-  const { saveId = '' } = props.location.state as any
+  const { id = '' } = props.location.state as any
   const [ modalObj, setModalObj ] = useState<iModalObj>({
     ossModal: false,
     auditModal: false,
@@ -79,9 +79,9 @@ const Detail: React.FC<RouteComponentProps> = props => {
   }, [ detail.status ])
   useEffect(() => {
     initData()
-  }, [ saveId ])
+  }, [ id ])
   const initData = async () => {
-    const { code = -1, data = {} } = await apiGetSafeDetail(saveId)
+    const { code = -1, data = {} } = await apiGetSafeDetail(id)
     if (code === consts.RET_CODE.SUCCESS) {
       setDetail({ ...detail, ...data })
     }

+ 1 - 1
src/pages/Safe/Content/List/index.tsx

@@ -65,7 +65,7 @@ const SafeList: React.FC<{}> = () => {
       dataIndex: 'code',
       // eslint-disable-next-line react/display-name
       render: (text: string, record) => {
-        return <Link to={{ pathname: '/console/safe/content/detail/info', state: { saveId: record.id } }}>{text}</Link>
+        return <Link to={{ pathname: '/console/safe/content/detail/info', state: { id: record.id } }}>{text}</Link>
       }
     },
     {

+ 4 - 1
src/router/routes.ts

@@ -9,7 +9,10 @@ export const routeConfig: RouteModel[] = [
   },
   {
     path: '/login',
-    component: AsyncModuleLoader(() => import('@/pages/Login'))
+    component: AsyncModuleLoader(() => import('@/pages/Login')),
+    meta: {
+      title: '登录'
+    }
   },
   {
     path: '/console',

+ 35 - 0
src/types/dashboard.d.ts

@@ -0,0 +1,35 @@
+export interface DashboardState {
+  approverData: ApproverDatum[];
+  messageData: MessageDatum[];
+  versionData: VersionData;
+}
+
+interface VersionData {
+  id: string;
+  name: string;
+  createTime: string;
+  content: string;
+}
+
+interface ApproverDatum {
+  id: string;
+  dataType: number;
+  dataId: string;
+  status: number;
+  code: string;
+  inspectionDetail: string;
+  name: string;
+  position: string;
+  createTime: string;
+}
+interface MessageDatum {
+  id: string;
+  projectId: string;
+  bidsectionId: string;
+  accountId: string;
+  dataType: number;
+  dataId: string;
+  title: string;
+  content: string;
+  createTime: string;
+}

+ 1 - 1
src/utils/consts.ts

@@ -4,7 +4,7 @@ export default {
   NAME: '纵横工程建设项目管理系统',
   BASE_URL: {
     DEV: '',
-    PROD: 'http://localhost:2020'
+    PROD: ''
   },
   TOKEN_API: '', // 获取token
   TOKEN_INVALID_CODE: [ 1 ], // 接口返回码如果是1 则表明token过期或无效 需要重新登录