|
@@ -8,12 +8,11 @@ import {
|
|
} from '@/services/safety';
|
|
} from '@/services/safety';
|
|
import { UnityAction } from '@/utils/utils';
|
|
import { UnityAction } from '@/utils/utils';
|
|
import { useNavigate, useParams, useRequest } from '@umijs/max';
|
|
import { useNavigate, useParams, useRequest } from '@umijs/max';
|
|
-import { Button, Space } from 'antd';
|
|
|
|
|
|
+import { Button, Space, Spin } from 'antd';
|
|
import { useEffect, useState } from 'react';
|
|
import { useEffect, useState } from 'react';
|
|
import styles from './index.less';
|
|
import styles from './index.less';
|
|
const doorIcon = require('@/assets/deviceManager/doorIcon.png');
|
|
const doorIcon = require('@/assets/deviceManager/doorIcon.png');
|
|
const videoIcon = require('@/assets/air-conditioner.png');
|
|
const videoIcon = require('@/assets/air-conditioner.png');
|
|
-const chartIcon = require('@/assets/deviceManager/chartIcon.png');
|
|
|
|
const DeviceManager = () => {
|
|
const DeviceManager = () => {
|
|
const { projectId } = useParams();
|
|
const { projectId } = useParams();
|
|
const [tab, setTab] = useState(localStorage.safeTab || '1');
|
|
const [tab, setTab] = useState(localStorage.safeTab || '1');
|
|
@@ -25,6 +24,8 @@ const DeviceManager = () => {
|
|
manual: true,
|
|
manual: true,
|
|
},
|
|
},
|
|
);
|
|
);
|
|
|
|
+
|
|
|
|
+ //视频接口
|
|
const {
|
|
const {
|
|
data: dataOver,
|
|
data: dataOver,
|
|
run: runOver,
|
|
run: runOver,
|
|
@@ -63,12 +64,12 @@ const DeviceManager = () => {
|
|
}
|
|
}
|
|
};
|
|
};
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
- localStorage.safeTab = '1'
|
|
|
|
- if(tab == '2') {
|
|
|
|
|
|
+ localStorage.safeTab = '1';
|
|
|
|
+ if (tab == '2') {
|
|
run();
|
|
run();
|
|
runOver();
|
|
runOver();
|
|
}
|
|
}
|
|
- },[])
|
|
|
|
|
|
+ }, []);
|
|
return (
|
|
return (
|
|
<PageContent tabs>
|
|
<PageContent tabs>
|
|
<TabsContent
|
|
<TabsContent
|
|
@@ -94,7 +95,7 @@ const DeviceManager = () => {
|
|
<Door
|
|
<Door
|
|
data={data?.list}
|
|
data={data?.list}
|
|
dataOver={dataOver}
|
|
dataOver={dataOver}
|
|
- loading={loading}
|
|
|
|
|
|
+ loading={loading || loadingOver}
|
|
projectId={projectId}
|
|
projectId={projectId}
|
|
/>
|
|
/>
|
|
),
|
|
),
|
|
@@ -104,7 +105,7 @@ const DeviceManager = () => {
|
|
</PageContent>
|
|
</PageContent>
|
|
);
|
|
);
|
|
};
|
|
};
|
|
-const Video = ({ projectId, data, dataOnline, loading }) => {
|
|
|
|
|
|
+const Video = ({ data, dataOnline, loading }) => {
|
|
const renderRed = (item) => {
|
|
const renderRed = (item) => {
|
|
return (
|
|
return (
|
|
<div className={styles.cardItem}>
|
|
<div className={styles.cardItem}>
|
|
@@ -116,42 +117,46 @@ const Video = ({ projectId, data, dataOnline, loading }) => {
|
|
);
|
|
);
|
|
};
|
|
};
|
|
return (
|
|
return (
|
|
- <Space direction="vertical" size={16} className={styles.sparePart}>
|
|
|
|
- <div className={`card-box ${styles.titleContent}`}>
|
|
|
|
- <div className={styles.titleLeft}>
|
|
|
|
- <img className={styles.img} src={videoIcon} />
|
|
|
|
- <div className={styles.textCon}>
|
|
|
|
- <div className={styles.num}>{dataOnline?.total || 0}</div>
|
|
|
|
- <div className={styles.text}>在库数量(个)</div>
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
- <div>
|
|
|
|
- <div className={styles.lTextCon1}>
|
|
|
|
- <div className={styles.onlinePoint} />
|
|
|
|
- <span className={styles.text}>在线:{dataOnline?.online || 0}</span>
|
|
|
|
|
|
+ <Spin spinning={loading}>
|
|
|
|
+ <Space direction="vertical" size={16} className={styles.sparePart}>
|
|
|
|
+ <div className={`card-box ${styles.titleContent}`}>
|
|
|
|
+ <div className={styles.titleLeft}>
|
|
|
|
+ <img className={styles.img} src={videoIcon} />
|
|
|
|
+ <div className={styles.textCon}>
|
|
|
|
+ <div className={styles.num}>{dataOnline?.total || 0}</div>
|
|
|
|
+ <div className={styles.text}>在库数量(个)</div>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
- <div className={styles.lTextCon2}>
|
|
|
|
- <div className={styles.outlinePoint} />
|
|
|
|
- <span className={styles.text}>
|
|
|
|
- 离线:{dataOnline?.offline || 0}
|
|
|
|
- </span>
|
|
|
|
|
|
+ <div>
|
|
|
|
+ <div className={styles.lTextCon1}>
|
|
|
|
+ <div className={styles.onlinePoint} />
|
|
|
|
+ <span className={styles.text}>
|
|
|
|
+ 在线:{dataOnline?.online || 0}
|
|
|
|
+ </span>
|
|
|
|
+ </div>
|
|
|
|
+ <div className={styles.lTextCon2}>
|
|
|
|
+ <div className={styles.outlinePoint} />
|
|
|
|
+ <span className={styles.text}>
|
|
|
|
+ 离线:{dataOnline?.offline || 0}
|
|
|
|
+ </span>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- </div>
|
|
|
|
|
|
|
|
- {data?.map((item, idx) => (
|
|
|
|
- <div key={`video_${idx}`} className="card-box">
|
|
|
|
- {renderRed(item)}
|
|
|
|
- </div>
|
|
|
|
- ))}
|
|
|
|
- </Space>
|
|
|
|
|
|
+ {data?.map((item, idx) => (
|
|
|
|
+ <div key={`video_${idx}`} className="card-box">
|
|
|
|
+ {renderRed(item)}
|
|
|
|
+ </div>
|
|
|
|
+ ))}
|
|
|
|
+ </Space>
|
|
|
|
+ </Spin>
|
|
);
|
|
);
|
|
};
|
|
};
|
|
const Door = ({ data, dataOver, loading, projectId }) => {
|
|
const Door = ({ data, dataOver, loading, projectId }) => {
|
|
const navigate = useNavigate();
|
|
const navigate = useNavigate();
|
|
|
|
|
|
const handleClick = () => {
|
|
const handleClick = () => {
|
|
- localStorage.safeTab = '2'
|
|
|
|
|
|
+ localStorage.safeTab = '2';
|
|
navigate(`/safety/detail/${projectId}`);
|
|
navigate(`/safety/detail/${projectId}`);
|
|
};
|
|
};
|
|
|
|
|
|
@@ -166,47 +171,49 @@ const Door = ({ data, dataOver, loading, projectId }) => {
|
|
);
|
|
);
|
|
};
|
|
};
|
|
return (
|
|
return (
|
|
- <Space direction="vertical" size={16} className={styles.doorPart}>
|
|
|
|
- <div className={styles.titleContent}>
|
|
|
|
- <div className={`card-box ${styles.cardLeft}`}>
|
|
|
|
- <div className={styles.up}>
|
|
|
|
- <img className={styles.img} src={doorIcon} />
|
|
|
|
- <div className={styles.textCon}>
|
|
|
|
- <div className={styles.num}>{dataOver?.total}</div>
|
|
|
|
- <div className={styles.text}>门禁数量(个)</div>
|
|
|
|
|
|
+ <Spin spinning={loading}>
|
|
|
|
+ <Space direction="vertical" size={16} className={styles.doorPart}>
|
|
|
|
+ <div className={styles.titleContent}>
|
|
|
|
+ <div className={`card-box ${styles.cardLeft}`}>
|
|
|
|
+ <div className={styles.up}>
|
|
|
|
+ <img className={styles.img} src={doorIcon} />
|
|
|
|
+ <div className={styles.textCon}>
|
|
|
|
+ <div className={styles.num}>{dataOver?.total}</div>
|
|
|
|
+ <div className={styles.text}>门禁数量(个)</div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div className={styles.bottom}>
|
|
|
|
+ <div className={styles.lTextCon2}>
|
|
|
|
+ <div className={styles.onlinePoint} />
|
|
|
|
+ <span className={styles.text}>在线:{dataOver?.online}</span>
|
|
|
|
+ </div>
|
|
|
|
+ <div className={styles.lTextCon2}>
|
|
|
|
+ <div className={styles.outlinePoint} />
|
|
|
|
+ <span className={styles.text}>离线:{dataOver?.offline}</span>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- <div className={styles.bottom}>
|
|
|
|
- <div className={styles.lTextCon2}>
|
|
|
|
- <div className={styles.onlinePoint} />
|
|
|
|
- <span className={styles.text}>在线:{dataOver?.online}</span>
|
|
|
|
|
|
+ <div className={`card-box ${styles.cardRight}`}>
|
|
|
|
+ <div className={styles.textContent}>
|
|
|
|
+ <div className={styles.in} />
|
|
|
|
+ <span className={styles.text}>今日进厂人数:{2}</span>
|
|
</div>
|
|
</div>
|
|
- <div className={styles.lTextCon2}>
|
|
|
|
- <div className={styles.outlinePoint} />
|
|
|
|
- <span className={styles.text}>离线:{dataOver?.offline}</span>
|
|
|
|
|
|
+ <div className={styles.textContent}>
|
|
|
|
+ <div className={styles.out} />
|
|
|
|
+ <span className={styles.text}>今日出厂人数:{2}</span>
|
|
</div>
|
|
</div>
|
|
|
|
+ <Button className={styles.btn} onClick={handleClick}>
|
|
|
|
+ 门禁日志
|
|
|
|
+ </Button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- <div className={`card-box ${styles.cardRight}`}>
|
|
|
|
- <div className={styles.textContent}>
|
|
|
|
- <div className={styles.in} />
|
|
|
|
- <span className={styles.text}>今日进厂人数:{2}</span>
|
|
|
|
- </div>
|
|
|
|
- <div className={styles.textContent}>
|
|
|
|
- <div className={styles.out} />
|
|
|
|
- <span className={styles.text}>今日出厂人数:{2}</span>
|
|
|
|
|
|
+ {data?.map((item, idx) => (
|
|
|
|
+ <div key={`door_${idx}`} className="card-box">
|
|
|
|
+ {renderRed(item)}
|
|
</div>
|
|
</div>
|
|
- <Button className={styles.btn} onClick={handleClick}>
|
|
|
|
- 门禁日志
|
|
|
|
- </Button>
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
- {data?.map((item, idx) => (
|
|
|
|
- <div key={`door_${idx}`} className="card-box">
|
|
|
|
- {renderRed(item)}
|
|
|
|
- </div>
|
|
|
|
- ))}
|
|
|
|
- </Space>
|
|
|
|
|
|
+ ))}
|
|
|
|
+ </Space>
|
|
|
|
+ </Spin>
|
|
);
|
|
);
|
|
};
|
|
};
|
|
|
|
|