diff --git a/src/assets/images/SecurityServiceOverview/risk/blue.png b/src/assets/images/SecurityServiceOverview/risk/blue.png
new file mode 100644
index 0000000000000000000000000000000000000000..3f88d6bf1e0d5b2ffa9dff95a786a14b4ebc5d69
Binary files /dev/null and b/src/assets/images/SecurityServiceOverview/risk/blue.png differ
diff --git a/src/assets/images/SecurityServiceOverview/risk/orange.png b/src/assets/images/SecurityServiceOverview/risk/orange.png
new file mode 100644
index 0000000000000000000000000000000000000000..5067f94e73e9494c258057fdb22c998353b58a3f
Binary files /dev/null and b/src/assets/images/SecurityServiceOverview/risk/orange.png differ
diff --git a/src/assets/images/SecurityServiceOverview/risk/red.png b/src/assets/images/SecurityServiceOverview/risk/red.png
new file mode 100644
index 0000000000000000000000000000000000000000..c21409c1b8ed00462069ef980fcfcd2a1981bd73
Binary files /dev/null and b/src/assets/images/SecurityServiceOverview/risk/red.png differ
diff --git a/src/assets/images/SecurityServiceOverview/risk/yellow.png b/src/assets/images/SecurityServiceOverview/risk/yellow.png
new file mode 100644
index 0000000000000000000000000000000000000000..f7501a908c868ead279a9de03c9e67b884e79eeb
Binary files /dev/null and b/src/assets/images/SecurityServiceOverview/risk/yellow.png differ
diff --git a/src/pages/Common/components/EventPicList/index.tsx b/src/pages/Common/components/EventPicList/index.tsx
index 91f781feff62086475207fd0f13ccf1db1186be2..53408ba5bb3bdc478f4e669f271c44b511f573cf 100644
--- a/src/pages/Common/components/EventPicList/index.tsx
+++ b/src/pages/Common/components/EventPicList/index.tsx
@@ -1,79 +1,108 @@
 //公用事件列表
 import { imageOptions } from '@/utils/comm';
-import { Flex, Image, List, Spin } from 'antd';
-import React, { useRef } from 'react';
+import { IMG_URL } from '@/utils/variables';
+import { Flex, Image, List, Modal, Spin } from 'antd';
+import React, { useRef, useState } from 'react';
 import InfiniteScroll from 'react-infinite-scroller';
+import EventDetail from '../../Event/EventDetail';
 import styles from './index.less';
-import { IMG_URL } from '@/utils/variables'
 
 interface EventPicListProps {
   listData: any;
-  setParams: (params: any) => void;
-  listHeight?: number;//高度
+  setParams?: (params: any) => void;
+  listHeight?: number; //高度
   handleDetail?: (record: any) => void;
+  showEventDetail?: boolean; //是否展示详情
 }
-const EventPicList: React.FC<EventPicListProps> = ({ listData, listHeight = 700, setParams, handleDetail }) => {
-
+const EventPicList: React.FC<EventPicListProps> = ({
+  listData,
+  listHeight = 700,
+  setParams,
+  handleDetail,
+  showEventDetail = false,
+}) => {
+  // 事件详情弹窗
+  const [detailModalOpt, setDetailModalOpt] = useState<{
+    open: boolean;
+    eventId: string;
+  }>({
+    open: false,
+    eventId: '',
+  });
   const page = useRef({
     page: 1,
-  })
+  });
 
   //下一页
   const loadMoreData = () => {
-    page.current.page++
+    page.current.page++;
     // setParams(page)
   };
 
-
   return (
-    <div
-      style={{
-        height: listHeight,
-        overflow: 'auto',
-      }}
-    >
-      <InfiniteScroll
-        style={{ overflow: 'hidden' }}
-        loadMore={loadMoreData}
-        hasMore={listData?.hasNext}
-        useWindow={false}
-        loader={
-          <div style={{ textAlign: 'center' }}>
-            <Spin />
-          </div>
-        }
+    <>
+      <div
+        style={{
+          height: listHeight,
+          overflow: 'auto',
+        }}
       >
-        <List
-          grid={{ column: 4, gutter: 20 }}
-          dataSource={listData.items}
-          loading={false}
-          renderItem={(item: any) => (
-            <List.Item key={item.eventId}>
-              <div className={styles.cardWrap} >
-                <Image
-                  {...imageOptions}
-                  src={IMG_URL + item.disposePicPath}
-                  width={'100%'}
-                  height={'160px'}
-                  style={{ objectFit: 'cover' }}
-                />
-                <div className={styles.info} onClick={() => handleDetail && handleDetail(item)}>
-                  <p className={styles.cardText}>
-                    {item.standardEventTitle ?? '无标题'}
-                  </p>
-                  <Flex align='center'>
-                    <span className={styles.status}>{item.caseStatusText}</span>
-                    <span className={styles.type}>{item.collectionModeName || item.eventTypeName}</span>
-                  </Flex>
-                  <div>
-                    <span>上报时间:</span>
-                    <span>{item.reportTime}</span>
-                  </div>
-                  <div className={styles.textellipsis}>
-                    <span>发生位置:</span>
-                    <span>{item.address}</span>
-                  </div>
-                  {/* <LabelImgText
+        <InfiniteScroll
+          style={{ overflow: 'hidden' }}
+          loadMore={loadMoreData}
+          hasMore={listData?.hasNext}
+          useWindow={false}
+          loader={
+            <div style={{ textAlign: 'center' }}>
+              <Spin />
+            </div>
+          }
+        >
+          <List
+            grid={{ column: 4, gutter: 20 }}
+            dataSource={listData.items}
+            loading={false}
+            renderItem={(item: any) => (
+              <List.Item key={item.eventId}>
+                <div className={styles.cardWrap}>
+                  <Image
+                    {...imageOptions}
+                    src={IMG_URL + item.disposePicPath}
+                    width={'100%'}
+                    height={'160px'}
+                    style={{ objectFit: 'cover' }}
+                  />
+                  <div
+                    className={styles.info}
+                    onClick={() => {
+                      showEventDetail &&
+                        setDetailModalOpt({
+                          open: true,
+                          eventId: item.eventId,
+                        });
+                      handleDetail && handleDetail(item);
+                    }}
+                  >
+                    <p className={styles.cardText}>
+                      {item.standardEventTitle ?? '无标题'}
+                    </p>
+                    <Flex align="center">
+                      <span className={styles.status}>
+                        {item.caseStatusText}
+                      </span>
+                      <span className={styles.type}>
+                        {item.collectionModeName || item.eventTypeName}
+                      </span>
+                    </Flex>
+                    <div>
+                      <span>上报时间:</span>
+                      <span>{item.reportTime}</span>
+                    </div>
+                    <div className={styles.textellipsis}>
+                      <span>发生位置:</span>
+                      <span>{item.address}</span>
+                    </div>
+                    {/* <LabelImgText
                     value={<><span style={{ color: '#CBEDFF' }}>上报时间:{item.reportTime}</span></>}
                     valueStyle={{ color: '#fff', fontSize: '16px' }}
                   />
@@ -89,13 +118,24 @@ const EventPicList: React.FC<EventPicListProps> = ({ listData, listHeight = 700,
                     value={item.address}
                     valueStyle={{ color: '#6A738E', fontSize: '14px' }}
                   /> */}
+                  </div>
                 </div>
-              </div>
-            </List.Item>
-          )}
-        />
-      </InfiniteScroll>
-    </div>
+              </List.Item>
+            )}
+          />
+        </InfiniteScroll>
+      </div>
+      {/* 展示详情框 */}
+      <Modal
+        open={detailModalOpt?.open}
+        title={'事件详情'}
+        onCancel={() => setDetailModalOpt({ open: false, eventId: '' })}
+        width={1160}
+        height={950}
+      >
+        <EventDetail eventId={detailModalOpt?.eventId} />
+      </Modal>
+    </>
   );
 };
 
diff --git a/src/pages/IndustryOperation/components/Advertisement/index.tsx b/src/pages/IndustryOperation/components/Advertisement/index.tsx
index 2ce4b96cf1ab9a44a33b982e3dd6b995cdad9ca0..0a7d9acebb21112d3ea5dfb41f6d41e1554a4284 100644
--- a/src/pages/IndustryOperation/components/Advertisement/index.tsx
+++ b/src/pages/IndustryOperation/components/Advertisement/index.tsx
@@ -9,11 +9,7 @@ const Advertisement: React.FC = () => {
     <div className={styles.container}>
       <div className={styles.container}>
         <Flex justify="space-between">
-          <RealtimeIndex
-            riskNum={3}
-            value={89.5}
-            compareOneHour={-1.3}
-          ></RealtimeIndex>
+          <RealtimeIndex indexId="205" />
           <div className={styles.rightWrap}>
             <DescriptionItem value={86.2} name="“门前五包”履约率" unit="%" />
             <DescriptionItem
diff --git a/src/pages/IndustryOperation/components/DigitalUrbanManagement/index.tsx b/src/pages/IndustryOperation/components/DigitalUrbanManagement/index.tsx
index 100364559c7a26934bf9b8dc0c9fd8ff7bb0b440..4ba6e86289eda8c3f3fecc3a9ee68dfe3c6539dc 100644
--- a/src/pages/IndustryOperation/components/DigitalUrbanManagement/index.tsx
+++ b/src/pages/IndustryOperation/components/DigitalUrbanManagement/index.tsx
@@ -2,9 +2,9 @@ import { CaretUpOutlined } from '@ant-design/icons';
 import { Col, Flex, Row } from 'antd';
 import ReactECharts from 'echarts-for-react';
 import React from 'react';
-import DescriptionItem from '../../../../components/DescriptionItem'; 
-import styles from './index.less';
+import DescriptionItem from '../../../../components/DescriptionItem';
 import { lineOption } from '../../option';
+import styles from './index.less';
 
 const DigitalUrbanManagement: React.FC = () => {
   return (
@@ -40,7 +40,7 @@ const DigitalUrbanManagement: React.FC = () => {
 
       <ReactECharts
         style={{ height: 100, minWidth: 450, margin: '0 auto' }}
-        option={lineOption}
+        option={lineOption()}
       />
     </div>
   );
diff --git a/src/pages/IndustryOperation/components/Illumination/index.tsx b/src/pages/IndustryOperation/components/Illumination/index.tsx
index 2f8a431160a5a2147d5bff6db30d63479229a68f..9fe618921b567814061536b84975af21582cc0a5 100644
--- a/src/pages/IndustryOperation/components/Illumination/index.tsx
+++ b/src/pages/IndustryOperation/components/Illumination/index.tsx
@@ -9,11 +9,7 @@ const Illumination: React.FC = () => {
     <div className={styles.container}>
       <div className={styles.container}>
         <Flex justify="space-between">
-          <RealtimeIndex
-            riskNum={0}
-            value={95.5}
-            compareOneHour={1.3}
-          ></RealtimeIndex>
+          <RealtimeIndex indexId="203" />
           <div className={styles.rightWrap}>
             <DescriptionItem value={48} name="中心城区路灯完好率" unit="%" />
             <DescriptionItem
diff --git a/src/pages/IndustryOperation/components/LawEnforcement/index.tsx b/src/pages/IndustryOperation/components/LawEnforcement/index.tsx
index 17ef6dd5582490bb78dd76bf2d2b54014f827119..165c712b1e3de0f8cf2b2b32d65b1e34545c4d4f 100644
--- a/src/pages/IndustryOperation/components/LawEnforcement/index.tsx
+++ b/src/pages/IndustryOperation/components/LawEnforcement/index.tsx
@@ -8,11 +8,7 @@ const LawEnforcement: React.FC = () => {
   return (
     <div className={styles.container}>
       <Flex justify="space-between">
-        <RealtimeIndex
-          riskNum={3}
-          value={78.5}
-          compareOneHour={1.3}
-        ></RealtimeIndex>
+        <RealtimeIndex indexId={'206'}></RealtimeIndex>
         <div className={styles.rightWrap}>
           <DescriptionItem
             direction="horizontal"
diff --git a/src/pages/IndustryOperation/components/RaiseDust/index.tsx b/src/pages/IndustryOperation/components/RaiseDust/index.tsx
index 81ab17255b5500d495a32ca552972aa284e8511a..fad283407b6a2dccf4edc8377cbaa0a09a6b9246 100644
--- a/src/pages/IndustryOperation/components/RaiseDust/index.tsx
+++ b/src/pages/IndustryOperation/components/RaiseDust/index.tsx
@@ -9,11 +9,7 @@ const RaiseDust: React.FC = () => {
     <div className={styles.container}>
       <div className={styles.container}>
         <Flex justify="space-between">
-          <RealtimeIndex
-            riskNum={0}
-            value={99.5}
-            compareOneHour={1.3}
-          ></RealtimeIndex>
+          <RealtimeIndex indexId="207" />
           <div className={styles.rightWrap}>
             <DescriptionItem
               value={86.2}
diff --git a/src/pages/IndustryOperation/components/RealtimeIndex/index.tsx b/src/pages/IndustryOperation/components/RealtimeIndex/index.tsx
index 2aec553edf7dc0a9bef81205b48b88719839e7e0..cf53a1ef4260ed92eef7b9aefc33858dfe581869 100644
--- a/src/pages/IndustryOperation/components/RealtimeIndex/index.tsx
+++ b/src/pages/IndustryOperation/components/RealtimeIndex/index.tsx
@@ -2,20 +2,28 @@ import { CaretDownOutlined, CaretUpOutlined } from '@ant-design/icons';
 import { Flex, Space } from 'antd';
 import classNames from 'classnames';
 import ReactECharts from 'echarts-for-react';
-import React from 'react';
+import _ from 'lodash';
+import React, { useMemo } from 'react';
+import { IndustryContext } from '../..';
 import { lineOption } from '../../option';
 import styles from './index.less';
 
 interface PropsType {
-  riskNum: number;
-  value: number;
-  compareOneHour: number;
+  indexId: string; //指标
+  riskNum?: number | undefined;
+  value?: number | string;
+  compareOneHour?: number;
 }
 
 const RealtimeIndex: React.FC<PropsType> = (props) => {
-  const { riskNum, value, compareOneHour } = props;
-
-  const getStatus = (val: number) => {
+  let { indexId, riskNum, value } = props;
+  const { indutryIndexData } = React.useContext(IndustryContext);
+  //指标数据
+  const indexData = useMemo(() => {
+    return _.find(indutryIndexData, ['indexId', indexId]);
+  }, [indutryIndexData]);
+  const getStatus = (val: number | string | undefined) => {
+    val = Number(val);
     if (val > 95) {
       return {
         bg: 'rgb(87, 239, 88)',
@@ -35,16 +43,17 @@ const RealtimeIndex: React.FC<PropsType> = (props) => {
       };
     }
   };
-
+  value = value ?? indexData?.qualitySign;
+  riskNum = riskNum ?? indexData?.warningNum ?? 0;
   return (
     <div className={styles.container}>
       <div style={{ color: getStatus(value)?.bg }} className={styles.value}>
         {value}
       </div>
-      <div className={styles.desc}>{getStatus(value)?.desc}</div>
+      <div className={styles.desc}>{indexData?.statusDesc}</div>
       <Flex className={classNames(styles.desc)}>
-        较1小时前
-        {compareOneHour > 0 ? (
+        {indexData?.desc}
+        {indexData?.status === 'up' ? (
           <CaretUpOutlined style={{ color: 'rgb(9, 195, 92)' }} />
         ) : (
           <CaretDownOutlined
@@ -53,10 +62,13 @@ const RealtimeIndex: React.FC<PropsType> = (props) => {
         )}
         <span
           style={{
-            color: compareOneHour > 0 ? 'rgb(9, 195, 92)' : 'rgb(255, 71, 71)',
+            color:
+              indexData?.status === 'up'
+                ? 'rgb(9, 195, 92)'
+                : 'rgb(255, 71, 71)',
           }}
         >
-          {compareOneHour}%
+          {Number(indexData?.diffValue)?.toFixed(2)}
         </span>
       </Flex>
       <div className={styles.risk}>
@@ -67,7 +79,14 @@ const RealtimeIndex: React.FC<PropsType> = (props) => {
           </Space>
         )}
       </div>
-      <ReactECharts style={{ height: 48, width: 190 }} option={lineOption} />
+      {indexData && (
+        <ReactECharts
+          notMerge={true}
+          lazyUpdate={true}
+          style={{ height: 48, width: 190 }}
+          option={lineOption(indexData?.cqiTrend)}
+        />
+      )}
     </div>
   );
 };
diff --git a/src/pages/IndustryOperation/components/RefuseDisposal/index.tsx b/src/pages/IndustryOperation/components/RefuseDisposal/index.tsx
index 44a108a2425beb46203dc5d95c9b46aa0def710b..3e55315bebb62f10c032e88d0caa2d2b90f4e04e 100644
--- a/src/pages/IndustryOperation/components/RefuseDisposal/index.tsx
+++ b/src/pages/IndustryOperation/components/RefuseDisposal/index.tsx
@@ -9,11 +9,7 @@ const RefuseDisposal: React.FC = () => {
     <div className={styles.container}>
       <div className={styles.container}>
         <Flex justify="space-between">
-          <RealtimeIndex
-            riskNum={0}
-            value={95.5}
-            compareOneHour={1.3}
-          ></RealtimeIndex>
+          <RealtimeIndex indexId="209" />
           <div className={styles.rightWrap}>
             <DescriptionItem
               value={48}
diff --git a/src/pages/IndustryOperation/components/RoadAndBridge/index.tsx b/src/pages/IndustryOperation/components/RoadAndBridge/index.tsx
index 80f16fe626043aa3c00f692efc596fbd59aa0634..f1aa7f9fcff19eb74a642044db318c1676b5f54c 100644
--- a/src/pages/IndustryOperation/components/RoadAndBridge/index.tsx
+++ b/src/pages/IndustryOperation/components/RoadAndBridge/index.tsx
@@ -9,11 +9,7 @@ const RoadAndBridge: React.FC = () => {
     <div className={styles.container}>
       <div className={styles.container}>
         <Flex justify="space-between">
-          <RealtimeIndex
-            riskNum={0}
-            value={95.5}
-            compareOneHour={1.3}
-          ></RealtimeIndex>
+          <RealtimeIndex indexId="202" />
           <div className={styles.rightWrap}>
             <DescriptionItem value={48} name="道桥病害" unit="处" />
             <DescriptionItem
diff --git a/src/pages/IndustryOperation/index.tsx b/src/pages/IndustryOperation/index.tsx
index da1df31238d1fd64b6d463524779c3d514ca6c97..90b4fcda1dcbb75a6d7fb44f5de95167c3a78aa5 100644
--- a/src/pages/IndustryOperation/index.tsx
+++ b/src/pages/IndustryOperation/index.tsx
@@ -1,7 +1,9 @@
 import Modal from '@/components/HncyModal';
 import IndustrySystem from '@/pages/Common/Sign/IndustrySystem';
+import services from '@/services';
 import { DoubleRightOutlined } from '@ant-design/icons';
-import { Flex, Space } from 'antd';
+import { useRequest } from 'ahooks';
+import { Flex, Space, Spin } from 'antd';
 import React, { useMemo, useState } from 'react';
 import Advertisement from './components/Advertisement';
 import Card from './components/Card';
@@ -13,7 +15,11 @@ import RaiseDust from './components/RaiseDust';
 import RefuseDisposal from './components/RefuseDisposal';
 import RoadAndBridge from './components/RoadAndBridge';
 import styles from './index.less';
-
+export const IndustryContext = React.createContext(
+  {} as {
+    indutryIndexData: PhysicalsignApi.IndutryIndexInstanceDto[];
+  },
+);
 /** @module 行业运行情况  */
 const IndustryOperation: React.FC = () => {
   const [modalOpt, setModalOpt] = useState<{
@@ -23,6 +29,12 @@ const IndustryOperation: React.FC = () => {
     open: false,
     title: '',
   });
+  const { data: indutryIndexData, loading } = useRequest(() =>
+    services.Physicalsign.getAllIndutryIndexInstance({
+      physicalSignType: '1',
+      objectId: '510100',
+    }),
+  );
   const views = useMemo(() => {
     return [
       {
@@ -35,19 +47,19 @@ const IndustryOperation: React.FC = () => {
       },
       {
         title: '市容广告',
-        children: <Advertisement></Advertisement>,
+        children: <Advertisement />,
       },
       {
         title: '道桥监管',
-        children: <RoadAndBridge></RoadAndBridge>,
+        children: <RoadAndBridge />,
       },
       {
         title: '照明监管',
-        children: <Illumination></Illumination>,
+        children: <Illumination />,
       },
       {
         title: '扬尘治理',
-        children: <RaiseDust></RaiseDust>,
+        children: <RaiseDust />,
       },
       {
         title: '垃圾分类',
@@ -55,45 +67,58 @@ const IndustryOperation: React.FC = () => {
       },
       {
         title: '垃圾处置',
-        children: <RefuseDisposal></RefuseDisposal>,
+        children: <RefuseDisposal />,
       },
     ];
   }, []);
   return (
-    <div className={styles.container}>
-      <Flex justify="space-between" align="center" className={styles.header}>
-        <div>行业运行情况</div>
-        <Space>
-          <div
-            className={styles.header_right_text}
-            onClick={() =>
-              setModalOpt({ open: true, title: ' 目前已接入16个行业系统' })
-            }
+    <IndustryContext.Provider
+      value={{
+        indutryIndexData:
+          indutryIndexData?.data as PhysicalsignApi.IndutryIndexInstanceDto[],
+      }}
+    >
+      <Spin spinning={loading}>
+        <div className={styles.container}>
+          <Flex
+            justify="space-between"
+            align="center"
+            className={styles.header}
           >
-            目前已接入<span>16</span>个行业系统
+            <div>行业运行情况</div>
+            <Space>
+              <div
+                className={styles.header_right_text}
+                onClick={() =>
+                  setModalOpt({ open: true, title: ' 目前已接入16个行业系统' })
+                }
+              >
+                目前已接入<span>16</span>个行业系统
+              </div>
+              <DoubleRightOutlined className={styles.header_right_icon} />
+            </Space>
+          </Flex>
+          <div className={styles.content}>
+            {views.map((item, index) => {
+              return (
+                <Card key={item.title} title={item.title}>
+                  {item.children}
+                </Card>
+              );
+            })}
           </div>
-          <DoubleRightOutlined className={styles.header_right_icon} />
-        </Space>
-      </Flex>
-      <div className={styles.content}>
-        {views.map((item, index) => {
-          return (
-            <Card key={item.title} title={item.title}>
-              {item.children}
-            </Card>
-          );
-        })}
-      </div>
-      <Modal
-        open={modalOpt?.open}
-        title={modalOpt?.title}
-        onCancel={() => setModalOpt({ open: false, title: '' })}
-        width={1104}
-        height={846}
-      >
-        <IndustrySystem />
-      </Modal>
-    </div>
+          <Modal
+            open={modalOpt?.open}
+            title={modalOpt?.title}
+            onCancel={() => setModalOpt({ open: false, title: '' })}
+            width={1104}
+            height={846}
+          >
+            <IndustrySystem />
+          </Modal>
+        </div>
+      </Spin>
+    </IndustryContext.Provider>
   );
 };
 
diff --git a/src/pages/IndustryOperation/option.ts b/src/pages/IndustryOperation/option.ts
index 80f48b831ab37e762ca9b0efdab0a580fe92417c..1aa695fb9a55f698f51eb750bdfb524ad6a476ee 100644
--- a/src/pages/IndustryOperation/option.ts
+++ b/src/pages/IndustryOperation/option.ts
@@ -1,67 +1,91 @@
 import * as echarts from 'echarts';
 
-export const lineOption: echarts.EChartsOption = {
-  tooltip: {
-    show: false,
-  },
-  legend: {
-    show: false,
-  },
-  grid: {
-    top: '10%',
-    left: 0,
-    right: 0,
-    bottom: '1%',
-  },
-  xAxis: [
+export const lineOption: (data?: any) => echarts.EChartsOption = (
+  data = [
     {
-      type: 'category',
-      boundaryGap: false,
-
-      show: false,
+      name: 1,
+      value: 1,
+    },
+    {
+      name: 12,
+      value: 12,
+    },
+    {
+      name: 13,
+      value: 13,
+    },
+    {
+      name: 14,
+      value: 14,
     },
   ],
-  yAxis: {
-    type: 'value',
-    splitLine: {
+) => {
+  return {
+    tooltip: {
+      show: true,
+      trigger: 'axis',
+      axisPointer: {
+        lineStyle: {
+          color: '#3791FD',
+        },
+      },
+    },
+    legend: {
       show: false,
     },
-    show: false,
-    axisLabel: {
+    grid: {
+      top: '10%',
+      left: 0,
+      right: 0,
+      bottom: '1%',
+    },
+    xAxis: {
+      type: 'category',
+      boundaryGap: false,
+      data: data?.map((it: any) => it.name),
       show: false,
     },
-  },
-
-  series: [
-    {
-      type: 'line',
-      symbol: 'none',
-      smooth: false,
-
-      lineStyle: {
-        width: 3,
-        color: 'rgb(68, 242, 255)',
+    yAxis: {
+      type: 'value',
+      splitLine: {
+        show: false,
       },
-      areaStyle: {
-        color: new echarts.graphic.LinearGradient(
-          0,
-          0,
-          0,
-          1,
-          [
-            {
-              offset: 0,
-              color: 'rgb(68, 242, 255)',
-            },
-            {
-              offset: 1,
-              color: 'rgba(68, 242, 255, 0)',
-            },
-          ],
-          false,
-        ),
+      show: false,
+      axisLabel: {
+        show: false,
       },
-      data: [3, 3, 4, 2, 5, 6, 7],
     },
-  ],
+
+    series: [
+      {
+        type: 'line',
+        symbol: 'none',
+        smooth: false,
+        data: data?.map((it: any) => it.value),
+        lineStyle: {
+          width: 3,
+          color: 'rgb(68, 242, 255)',
+        },
+        areaStyle: {
+          color: new echarts.graphic.LinearGradient(
+            0,
+            0,
+            0,
+            1,
+            [
+              {
+                offset: 0,
+                color: 'rgb(68, 242, 255)',
+              },
+              {
+                offset: 1,
+                color: 'rgba(68, 242, 255, 0)',
+              },
+            ],
+            false,
+          ),
+        },
+      },
+    ],
+  };
 };
diff --git a/src/pages/SecurityServiceOverview/components/CustomCard/index.less b/src/pages/SecurityServiceOverview/components/CustomCard/index.less
index 6b6fdfc01dd06af1162dabd688e0f921ac305fdf..0c500854d8fa2c292a2090a6525b8a75ce7cf5f4 100644
--- a/src/pages/SecurityServiceOverview/components/CustomCard/index.less
+++ b/src/pages/SecurityServiceOverview/components/CustomCard/index.less
@@ -1,21 +1,21 @@
 .wrap {
   border-radius: 20px;
-  backdrop-filter: blur(20px);
-  background: rgba(110, 175, 255, 0.2);
+  backdrop-filter: blur(20px); 
+  background: rgba(63, 149, 229, 0.1);
+
   .header {
     .titleBox {
       .block {
         width: 10px;
         height: 24px;
         border-radius: 0px 4px 4px 0px;
-        background: linear-gradient(
-          135.87deg,
-          rgb(86, 167, 255),
-          rgb(86, 238, 255) 99.55%
-        );
+        background: linear-gradient(135.87deg,
+            rgb(86, 167, 255),
+            rgb(86, 238, 255) 99.55%);
         opacity: 0.6;
         margin-right: 7px;
       }
+
       .title {
         white-space: nowrap;
         text-overflow: ellipsis;
@@ -27,4 +27,4 @@
       }
     }
   }
-}
+}
\ No newline at end of file
diff --git a/src/pages/UrbanSecuritySituation/IndustryRisk/index.less b/src/pages/UrbanSecuritySituation/IndustryRisk/index.less
new file mode 100644
index 0000000000000000000000000000000000000000..c4ac1515a6197ed54a5e2c7dbaca3a05098d5385
--- /dev/null
+++ b/src/pages/UrbanSecuritySituation/IndustryRisk/index.less
@@ -0,0 +1,44 @@
+.numWrap {
+  padding: 23px 40px;
+  font-size: 16px;
+  color: #BED1EE;
+  font-family: DingTalk JinBuTi;
+
+  &:hover{
+    cursor: pointer; 
+  }
+}
+
+.text {
+  margin-bottom: 14px;
+  color: #b6cbeb; 
+  span {
+    font-size: 20px;
+    margin-left: 5px;
+
+    &.warnNum {
+      color: #E35050;
+    }
+
+    &.dealNum {
+      color: #23C2FF;
+    }
+  }
+}
+
+.notWarn {
+  box-sizing: border-box;
+  border: 2px solid rgba(65, 255, 117, 0.1);
+  border-radius: 20px;
+  background: rgb(32, 83, 106);
+  width: 187px;
+  height: 40px;
+  font-family: DingTalk JinBuTi;
+  font-size: 18px;
+  color: #CAFCE9;
+  margin-top: 40px;
+
+  .icon {
+    width: 30px;
+  }
+}
\ No newline at end of file
diff --git a/src/pages/UrbanSecuritySituation/IndustryRisk/index.tsx b/src/pages/UrbanSecuritySituation/IndustryRisk/index.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..576bfeaab3618aa9a740c45904d2970126f45c87
--- /dev/null
+++ b/src/pages/UrbanSecuritySituation/IndustryRisk/index.tsx
@@ -0,0 +1,112 @@
+//风险数
+import Modal from '@/components/HncyModal';
+import EventPicList from '@/pages/Common/components/EventPicList';
+import CustomCard from '@/pages/SecurityServiceOverview/components/CustomCard';
+import WarnProgress from '@/pages/SecurityServiceOverview/SecurityState/IndustryWarn/WarnProgress';
+import { Flex, Space } from 'antd';
+import { useState } from 'react';
+import styles from './index.less';
+
+const IndustryRisk: React.FC = () => {
+  const [modalOpt, setModalOpt] = useState<{
+    open: boolean;
+    title?: string;
+  }>({
+    open: false,
+    title: '',
+  });
+  const [listData, setListData] = useState<any>({
+    items: [],
+    loading: true,
+    total: 0,
+    page: 1,
+    hasNext: false,
+  });
+  const riskList = [
+    {
+      label: '道路桥梁',
+    },
+    {
+      label: '固废处置',
+    },
+    {
+      label: '城市照明',
+    },
+    {
+      label: '城市环卫',
+    },
+    {
+      label: '户外广告招牌',
+    },
+    {
+      label: '综合管廊',
+    },
+    {
+      label: '油烟扬尘',
+    },
+  ];
+  return (
+    <Flex gap={30} justify="space-between">
+      {riskList?.map((it, index) => (
+        <CustomCard
+          key={it.label}
+          title={it.label}
+          width={276}
+          height={261}
+          titleStyle={{ color: '#fff' }}
+          style={{
+            paddingTop: 22,
+            backgroundColor: 'rgba(63, 149, 229, 0.2)',
+          }}
+        >
+          <div
+            className={styles.numWrap}
+            onClick={() => setModalOpt({ open: true, title: it.label })}
+          >
+            <p className={styles.text}>
+              风险源数<span> 12</span>
+            </p>
+            {index % 2 === 0 ? (
+              <>
+                <p className={styles.text}>
+                  预警数<span className={styles.warnNum}> 12</span>
+                </p>
+                <p className={styles.text}>
+                  已处置<span className={styles.dealNum}> 12</span>
+                </p>
+                <WarnProgress
+                  size={{ height: 14 }}
+                  percent={80}
+                  success={{ percent: 71 }}
+                />
+              </>
+            ) : (
+              <Flex className={styles.notWarn} align="center" justify="center">
+                <img
+                  src={require('@/assets/images/SecurityServiceOverview/notWarnIcon.png')}
+                  alt=""
+                  className={styles.icon}
+                />
+                <span>无风险预警</span>
+              </Flex>
+            )}
+          </div>
+        </CustomCard>
+      ))}
+      <Modal
+        open={modalOpt?.open}
+        title={
+          <Space>
+            {modalOpt?.title}-<span>当前还有5个红色风险在整改中</span>
+          </Space>
+        }
+        onCancel={() => setModalOpt({ open: false, title: '' })}
+        width={1772}
+        height={846}
+      >
+        <EventPicList showEventDetail listData={listData} listHeight={640} />
+      </Modal>
+    </Flex>
+  );
+};
+export default IndustryRisk;
diff --git a/src/pages/UrbanSecuritySituation/LineCharts/index.tsx b/src/pages/UrbanSecuritySituation/LineCharts/index.tsx
index 07e9b6282eef207d7a97a83cd9fd3ba9a3bbb470..9ace2abc75590399a2fdc376a45dd3f6124edae3 100644
--- a/src/pages/UrbanSecuritySituation/LineCharts/index.tsx
+++ b/src/pages/UrbanSecuritySituation/LineCharts/index.tsx
@@ -1,20 +1,38 @@
-import { useMemo } from 'react'
 import ReactEcharts from 'echarts-for-react';
-const LineCharts = () => {
-
+import { useMemo } from 'react';
+const LineCharts = ({ data }: { data: any[] }) => {
   const option = useMemo(() => {
-    // const data: any = [100, 50, 60, 70, 50]
-    const showXAis = false
+    const chartData: any = [
+      '100',
+      '90',
+      '80',
+      '100',
+      '90',
+      '80',
+      '100',
+      '90',
+      '80',
+      '100',
+      '90',
+      '80',
+      '100',
+      '90',
+      '80',
+      '100',
+      '90',
+      '80',
+    ];
+    const showXAis = true;
     return {
-      color: ['#EB6A6A', '#F69552', '#F0C85E'],
       xAxis: {
         type: 'category',
         boundaryGap: false,
-        show: false,
-        data: showXAis ? ['09:15', '09:15', '09:15', '09:15', '09:15'] : [],
+        show: showXAis,
+        data: showXAis ? data?.map((item) => item.name) : [],
         axisLabel: {
+          show: false,
           color: '#CBEDFF',
-          interval: 0 // 设置为0以显示所有坐标点  
+          interval: 3, // 设置为0以显示所有坐标点
         },
         axisLine: {
           show: false,
@@ -25,30 +43,18 @@ const LineCharts = () => {
         show: false,
       },
       grid: {
-        left: '0',  // 左边距
+        left: '0', // 左边距
         right: '0', // 右边距
-        top: '25%',   // 上边距
-        bottom: '0' // 下边距
-      },
-      legend: {
-        data: ['重大风险', '较大风险', '一般风险'],
-        icon: "circle",
-        top: 0,
-        itemGap: 50,
-        textStyle: {
-          fontSize: '16px',
-          color: '#E4EDFF',
-        }
+        top: '10%', // 上边距
+        bottom: '30%', // 下边距
       },
       series: [
-        { 
-          name: '重大风险',
-          data: [100, 50, 60, 70, 50, 100, 50, 60, 70, 50,100, 50, 60, 70, 50,100, 50, 60, 70, 50],
-          symbol: "none",
+        {
+          data: chartData,
+          symbol: 'none',
           type: 'line',
           lineStyle: {
-            color: "#EB6A6A",
-            width: 4
+            color: '#57EFE5',
           },
 
           areaStyle: {
@@ -62,78 +68,12 @@ const LineCharts = () => {
               colorStops: [
                 {
                   offset: 0,
-                  color: 'rgba(235, 106, 106, 0.2)', // 0% 处的颜色
-                },
-  
-                {
-                  offset: 1,
-                  color: 'rgba(235, 106, 106, 0.1)', // 100% 处的颜色
+                  color: 'rgba(87, 239, 229, 0)', // 0% 处的颜色
                 },
-              ],
-              global: false, // 缺省为 false
-            },
-          },
-        },
-        { 
-          name: '较大风险',
-          data: [80, 30, 20, 60, 90, 80, 30, 20, 60, 90,80, 30, 20, 60, 90,80, 30, 20, 60, 90],
-          symbol: "none",
-          type: 'line',
-          lineStyle: {
-            color: "#F69552",
-            width: 4
-          },
 
-          areaStyle: {
-            // 区域填充样式。设置后显示成区域面积图。
-            color: {
-              type: 'linear',
-              x: 0,
-              y: 1,
-              x2: 0,
-              y2: 0.2,
-              colorStops: [
-                {
-                  offset: 0,
-                  color: 'rgba(246, 149, 82, 0.2)', // 0% 处的颜色
-                },
-  
-                {
-                  offset: 1,
-                  color: 'rgba(246, 149, 82, 0.1)', // 100% 处的颜色
-                },
-              ],
-              global: false, // 缺省为 false
-            },
-          },
-        },
-        { 
-          name: '一般风险',
-          data: [50, 20, 40, 80, 60, 50, 20, 40, 80, 60, 50, 20, 40, 80, 60, 50, 20, 40, 80, 60],
-          symbol: "none",
-          type: 'line',
-          lineStyle: {
-            color: "#F0C85E",
-            width: 4
-          },
-
-          areaStyle: {
-            // 区域填充样式。设置后显示成区域面积图。
-            color: {
-              type: 'linear',
-              x: 0,
-              y: 1,
-              x2: 0,
-              y2: 0.2,
-              colorStops: [
-                {
-                  offset: 0,
-                  color: 'rgb(240, 200, 94, 0.2)', // 0% 处的颜色
-                },
-  
                 {
                   offset: 1,
-                  color: 'rgba(240, 200, 94, 0.1)', // 100% 处的颜色
+                  color: 'rgba(87, 239, 229, 0.36)', // 100% 处的颜色
                 },
               ],
               global: false, // 缺省为 false
@@ -141,15 +81,15 @@ const LineCharts = () => {
           },
         },
       ],
-    }
-  }, [])
+    };
+  }, [data]);
 
   return (
     <ReactEcharts
       option={option} // option:图表配置项
-      style={{ width: '100%', height: '180px', margin: '0 auto' }}
+      style={{ width: '100%', height: '187px' }}
     />
-  )
-}
+  );
+};
 
-export default LineCharts
\ No newline at end of file
+export default LineCharts;
diff --git a/src/pages/UrbanSecuritySituation/RiskLevelNum/index.less b/src/pages/UrbanSecuritySituation/RiskLevelNum/index.less
new file mode 100644
index 0000000000000000000000000000000000000000..916c1e0d0d093ecaf33f483e141e0fd07a6f536a
--- /dev/null
+++ b/src/pages/UrbanSecuritySituation/RiskLevelNum/index.less
@@ -0,0 +1,23 @@
+.riskWrap {
+  width: 50%;
+  margin: 40px auto;
+  font-size: 20px;
+  color: #bccee9;
+  >div:hover{
+    cursor: pointer;
+    font-weight: bold;
+    filter: brightness(108%);
+  }
+
+  .riskIcon {
+    width: 48px;
+  }
+
+  .num {
+    font-family: D-DIN;
+    font-size: 40px;
+    padding: 0 8px;
+    position: relative;
+    top: -4px;
+  }
+}
\ No newline at end of file
diff --git a/src/pages/UrbanSecuritySituation/RiskLevelNum/index.tsx b/src/pages/UrbanSecuritySituation/RiskLevelNum/index.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..cfb8bbe91727c1f7a8b01b0710f7b9d6ad34c886
--- /dev/null
+++ b/src/pages/UrbanSecuritySituation/RiskLevelNum/index.tsx
@@ -0,0 +1,118 @@
+//风险级别
+import risk4 from '@/assets/images/SecurityServiceOverview/risk/blue.png';
+import risk2 from '@/assets/images/SecurityServiceOverview/risk/orange.png';
+import risk1 from '@/assets/images/SecurityServiceOverview/risk/red.png';
+import risk3 from '@/assets/images/SecurityServiceOverview/risk/yellow.png';
+import Modal from '@/components/HncyModal';
+import EventPicList from '@/pages/Common/components/EventPicList';
+import { Flex, Space } from 'antd';
+import { useMemo, useState } from 'react';
+import styles from './index.less';
+const RiskLevelNum: React.FC = () => {
+  //事件列表
+  const [listData, setListData] = useState<any>({
+    items: [],
+    loading: true,
+    total: 0,
+    page: 1,
+    hasNext: false,
+  });
+  const [statisticsData, setStatisticsData] = useState<any>({});
+  const [modalOpt, setModalOpt] = useState<{
+    open: boolean;
+    title: string;
+    type: string;
+  }>({
+    open: false,
+    title: '',
+    type: '',
+  });
+
+  const riskData = useMemo(() => {
+    return [
+      {
+        type: '1',
+        label: '红色风险',
+        value: statisticsData?.majorRiskTotal,
+        icon: risk1,
+        color:
+          'linear-gradient(180.00deg, rgb(255, 138, 138),rgb(208, 62, 62))',
+      },
+      {
+        type: '2',
+        label: '橙色风险',
+        value: statisticsData?.significantRiskTotal,
+        icon: risk2,
+        color:
+          'linear-gradient(180.00deg, rgb(255, 176, 121),rgb(238, 126, 48))',
+      },
+      {
+        type: '3',
+        label: '黄色风险',
+        value: statisticsData?.generalRiskTotal,
+        icon: risk3,
+        color:
+          'linear-gradient(180.00deg, rgb(255, 228, 155),rgb(231, 182, 55))',
+      },
+      {
+        type: '4',
+        label: '一般风险',
+        value: statisticsData?.ybfxRiskTotal,
+        icon: risk4,
+        color:
+          'linear-gradient(180.00deg, rgb(122, 177, 255),rgb(37, 128, 255))',
+      },
+    ];
+  }, [statisticsData]);
+  return (
+    <Flex justify="space-between" className={styles.riskWrap}>
+      {riskData.map((item) => (
+        <div
+          key={item.label}
+          className={styles.riskItem}
+          onClick={() =>
+            setModalOpt({
+              open: true,
+              type: item.type,
+              title: '红色风险',
+            })
+          }
+        >
+          <Space size={6}>
+            <img src={item.icon} alt="" className={styles.riskIcon} />
+            <Flex align="center">
+              <span>{item.label}</span>
+              <Flex align="center">
+                <span
+                  className={styles.num}
+                  style={{
+                    background: item.color,
+                    backgroundClip: 'text',
+                  }}
+                >
+                  {item.value ?? 0}
+                </span>
+                <span>个</span>
+              </Flex>
+            </Flex>
+          </Space>
+        </div>
+      ))}
+      <Modal
+        open={modalOpt?.open}
+        title={
+          <Space>
+            {modalOpt?.title}-<span>当前还有5个红色风险在整改中</span>
+          </Space>
+        }
+        onCancel={() => setModalOpt({ open: false, title: '', type: '' })}
+        width={1772}
+        height={846}
+      >
+        <EventPicList showEventDetail listData={listData} listHeight={640} />
+      </Modal>
+    </Flex>
+  );
+};
+
+export default RiskLevelNum;
diff --git a/src/pages/UrbanSecuritySituation/SignCard/index.less b/src/pages/UrbanSecuritySituation/SignCard/index.less
deleted file mode 100644
index 9bc8f162512eab4ef06c707dc56dd059bf6f1548..0000000000000000000000000000000000000000
--- a/src/pages/UrbanSecuritySituation/SignCard/index.less
+++ /dev/null
@@ -1,52 +0,0 @@
-.wrap {
-  width: 100%;
-  padding: 50px 100px;
-  .card {
-    width: 224px;
-    height: 147px;
-    border-radius: 20px;
-    background: linear-gradient(
-      180deg,
-      rgba(51, 120, 219, 0.5),
-      rgba(49, 147, 173, 0.4) 100%
-    );
-    padding: 15px 0 0 24px;
-
-    .name {
-      font-family: DingTalk JinBuTi;
-      font-size: 30px;
-      font-weight: 400;
-      line-height: 1;
-    }
-    .num {
-      font-family: D-DIN;
-      font-size: 40px;
-      font-weight: 700;
-    }
-    .tag {
-      border-radius: 20px;
-      background: rgba(87, 239, 88, 0.3);
-      color: #ffffff;
-      height: 30px;
-      padding: 0 10px;
-      font-size: 18px;
-    }
-    .riskName {
-      font-size: 18px;
-      font-weight: 400;
-      color: #ff7474;
-      vertical-align: 3px;
-    }
-    .riskNum {
-      border-radius: 5px;
-      background: rgba(233, 125, 125, 0.3);
-      color: #ff7474;
-      font-family: D-DIN;
-      font-size: 20px;
-      height: 24px;
-      line-height: 24px;
-      padding: 0 10px;
-      font-weight: 700;
-    }
-  }
-}
diff --git a/src/pages/UrbanSecuritySituation/SignCard/index.tsx b/src/pages/UrbanSecuritySituation/SignCard/index.tsx
deleted file mode 100644
index 4c456b0475a88003ae70e4a7a7c5e1dbf3cb70cc..0000000000000000000000000000000000000000
--- a/src/pages/UrbanSecuritySituation/SignCard/index.tsx
+++ /dev/null
@@ -1,72 +0,0 @@
-
-import { useState, useEffect } from 'react'
-import { Flex, Space } from 'antd'
-import styles from './index.less'
-import Modal from '@/components/HncyModal'
-import IndustrySign from '@/pages/Common/Sign/IndustrySign'
-import services from '@/services';
-import { getCqiStatusStyle, getCqiStatusTexts } from '@/utils/ui'
-
-const SignCard = () => {
-  const [modalOpt, setModalOpt] = useState<{
-    open: boolean;
-    title: string;
-  }>({
-    open: false,
-    title: '',
-  })
-
-  const [list, setList] = useState<any>([])
-
-
-  const getDepartIndustryPhysicalSignIndexData = () => {
-    const params = {
-      physicalSignType: 1
-    }
-    services.Physicalsign.getDepartIndustryPhysicalSignIndex(params).then((res) => {
-      console.log(res)
-      if(res.code === 200) {
-        setList(res.data)
-      }
-    })
-  }
-
-  useEffect(() => {
-    getDepartIndustryPhysicalSignIndexData()
-  }, [])
-
-  return (
-    <div className={styles.wrap}>
-      <Flex justify='space-between' align='center'>
-        {
-          list.map((item: any) => (
-            <div key={item.objectId} className={styles.card} onClick={() => setModalOpt({ open: true, title: item.objectName })}>
-              <div className={styles.name}>{item?.objectName}</div>
-              <Space style={{ cursor: 'pointer'}}>
-                <span className={styles.num} style={{ color: getCqiStatusStyle(item?.cqi)?.color }}>{item?.cqi}</span>
-                <div className={styles.tag} style={{ ...getCqiStatusStyle(item?.cqi) }}>{item?.status || getCqiStatusTexts(item?.cqi)?.text}</div>
-              </Space>
-              <Space>
-                <span className={styles.riskName}>{item.riskName}</span>
-                {
-                  item.riskNum && <div className={styles.riskNum}>{item.riskNum}</div>
-                }
-              </Space>
-            </div>
-          ))
-        }
-      </Flex>
-      <Modal
-        open={modalOpt?.open}
-        title={modalOpt?.title}
-        onCancel={() => setModalOpt({ open: false, title: ''})}
-        width={1772}
-        height={846}
-      >
-        <IndustrySign />
-      </Modal>
-    </div>
-  )
-}
-
-export default SignCard;
\ No newline at end of file
diff --git a/src/pages/UrbanSecuritySituation/index.less b/src/pages/UrbanSecuritySituation/index.less
index 1d3267bdc0adac55e84b30a82f98d586a81d920a..0e330da1a61a0139e650c954408feb84de566217 100644
--- a/src/pages/UrbanSecuritySituation/index.less
+++ b/src/pages/UrbanSecuritySituation/index.less
@@ -1,34 +1,42 @@
 .container {
   height: 100%;
+
   .top {
     padding: 32px 76px 0 54px;
     margin-bottom: 25px;
+
     .title {
       font-family: DingTalk JinBuTi;
       font-size: 40px;
       color: #fff;
     }
+
     .right {
       font-size: 20px;
       color: #b3d6f7;
       cursor: pointer;
     }
   }
+
   .main {
     flex: 1;
     padding: 0 60px 60px;
+
     .center {
       height: 100%;
       border-radius: 40px;
-      background: linear-gradient(
-        180deg,
-        rgba(27, 50, 89, 0.3),
-        rgba(27, 50, 89, 0.3) 100%
-      );
-      padding-top: 45px;
+      background: linear-gradient(180deg,
+          rgba(27, 50, 89, 0.3),
+          rgba(27, 50, 89, 0.3) 100%);
+      padding: 40px;
 
       .sign {
         text-align: center;
+
+        &:hover {
+          cursor: pointer;
+        }
+
         .title {
           font-family: DingTalk JinBuTi;
           font-size: 40px;
@@ -36,37 +44,45 @@
           color: #e4edff;
           margin-bottom: 30px;
         }
+
         .num {
           font-family: D-DIN;
           font-size: 80px;
           font-weight: 700;
           color: #57ef58;
           line-height: 1;
+          margin-right: 20px;
         }
+
         .desc {
           font-size: 18px;
           font-weight: 400;
           color: #d9d9d9;
         }
-      }
-      .chartSection {
-        width: 1195px;
-        .title {
-          font-size: 20px;
-          font-weight: 700;
-          color: #e4edff;
-        }
+
         .rateName {
           font-size: 18px;
           font-weight: 400;
           color: #d9d9d9;
         }
+
         .rate {
           font-size: 20px;
           font-weight: 700;
           font-family: D-DIN;
         }
       }
+
+      .chartSection {
+        flex: 1;
+        height: 187px;
+
+        .title {
+          font-size: 20px;
+          font-weight: 700;
+          color: #e4edff;
+        }
+      }
     }
   }
-}
+}
\ No newline at end of file
diff --git a/src/pages/UrbanSecuritySituation/index.tsx b/src/pages/UrbanSecuritySituation/index.tsx
index 2128dc93253ef195446143d1d0ebc545daae1ba3..93acd39fdfd358a4139e2ab8484b5a5fa2cc7a50 100644
--- a/src/pages/UrbanSecuritySituation/index.tsx
+++ b/src/pages/UrbanSecuritySituation/index.tsx
@@ -1,65 +1,129 @@
+import Modal from '@/components/HncyModal';
+import services from '@/services';
+import { getCqiStatusStyle, getCqiStatusTexts } from '@/utils/ui';
+import { CaretUpFilled } from '@ant-design/icons';
+import { history } from '@umijs/max';
+import { useRequest } from 'ahooks';
 import { Flex, Space } from 'antd';
 import React, { useEffect, useState } from 'react';
-import { history } from '@umijs/max';
+import ModalContent from '../SecurityServiceOverview/components/ModalContent';
 import styles from './index.less';
-import { CaretUpFilled } from '@ant-design/icons';
+import IndustryRisk from './IndustryRisk';
 import LineCharts from './LineCharts';
-import SignCard from './SignCard';
-import services from '@/services';
-import { getCqiStatusStyle, getCqiStatusTexts } from '@/utils/ui'
-
+import RiskLevelNum from './RiskLevelNum';
 /** @module 城市安全态势 */
 
-
 const UrbanSecuritySituation: React.FC = () => {
-
-  const [cqiData, setCqiData] = useState<any>({})
-
+  const [cqiData, setCqiData] = useState<any>({});
+  const { data: signData } = useRequest(() => {
+    return services.Physicalsign.getComparisonIndexInstance({
+      indexId: 2,
+      physicalSignType: 1,
+      indexType: 1,
+      objectId: '50010',
+    });
+  });
+  const [modalOpt, setModalOpt] = useState<{
+    open: boolean;
+    title?: string;
+  }>({
+    open: false,
+    title: '安全指数溯源',
+  });
   useEffect(() => {
     const params = {
       physicalSignTyp: 1,
       indexType: 1,
       indexHierarchy: '1,2',
       objectId: '',
-      indexId: ''
-    }
+      indexId: '',
+    };
     services.Physicalsign.getIndexInstanceData(params).then((res) => {
-      console.log(res)
-      if(res.code === 200) {
-        setCqiData(res.data)
+      console.log(res);
+      if (res.code === 200) {
+        setCqiData(res.data);
       }
-    })
-  }, [])
-
+    });
+  }, []);
   return (
     <Flex vertical className={styles.container}>
-      <Flex justify='space-between' align='center' className={styles.top}>
+      <Flex justify="space-between" align="center" className={styles.top}>
         <span className={styles.title}>城市安全态势</span>
-        <span className={styles.right} onClick={() => history.push('/securityServiceOverview')}>安全一张图</span>
+        <span
+          className={styles.right}
+          onClick={() => history.push('/securityServiceOverview')}
+        >
+          安全一张图
+        </span>
       </Flex>
       <div className={styles.main}>
-        <Flex vertical align='center' className={styles.center}>
-          <div className={styles.sign}>
-            <div className={styles.title}>今日城市安全综合指数</div>
-            <Space direction='vertical' size={10}>
-              <span className={styles.num} style={{ color: getCqiStatusStyle(cqiData?.cqi)?.color }}>{cqiData?.cqi}</span>
-              <span className={styles.desc}>{cqiData?.statusDesc || getCqiStatusTexts(cqiData?.cqi)?.desc}</span>
-            </Space>
-          </div>
-          <div className={styles.chartSection}>
-            <Flex justify='space-between'>
-              <span className={styles.title}>近30天安全态势</span>
-              <span>
-                <span className={styles.rateName}>月同比</span>
-                <CaretUpFilled style={{ color: '#09C35C', fontSize: 26, verticalAlign: '-5px' }} />
-                <span className={styles.rate} style={{ color: '#09C35C' }}>1.3%</span>
-              </span>
-            </Flex>
-            <LineCharts />
-          </div>
-          <SignCard />
-        </Flex>
+        <div className={styles.center}>
+          <Flex gap={100}>
+            <div
+              className={styles.sign}
+              onClick={() => setModalOpt({ open: true })}
+            >
+              <div className={styles.title}>今日城市安全综合指数</div>
+              <Space size={10}>
+                <span
+                  className={styles.num}
+                  style={{ color: getCqiStatusStyle(cqiData?.cqi)?.color }}
+                >
+                  {cqiData?.cqi}
+                </span>
+                <div>
+                  <span className={styles.desc}>
+                    {cqiData?.statusDesc ||
+                      getCqiStatusTexts(cqiData?.cqi)?.desc}
+                  </span>
+                  <Flex style={{ marginTop: '4px' }}>
+                    <span className={styles.rateName}>月同比</span>
+                    <CaretUpFilled
+                      style={{
+                        color: '#09C35C',
+                        fontSize: 26,
+                        verticalAlign: '-5px',
+                      }}
+                    />
+                    <span className={styles.rate} style={{ color: '#09C35C' }}>
+                      1.3%
+                    </span>
+                  </Flex>
+                </div>
+              </Space>
+            </div>
+            <div className={styles.chartSection}>
+              <Flex justify="space-between">
+                <span className={styles.title}>近30天趋势</span>
+              </Flex>
+              <LineCharts data={[]} />
+            </div>
+          </Flex>
+          <RiskLevelNum />
+          <IndustryRisk />
+        </div>
       </div>
+      <Modal
+        open={modalOpt?.open}
+        title={'安全指数溯源'}
+        onCancel={() => setModalOpt({ open: false, title: '' })}
+        width={2233}
+        height={846}
+      >
+        <ModalContent
+          item={{
+            indexId: signData?.currentIndex?.indexId,
+
+            statusDescription: '理想态',
+          }}
+          lineData={
+            signData?.currentIndex?.indexDataList?.map((item: any) => ({
+              name: item.time,
+              value: item.qualitySign,
+            })) || []
+          }
+        />
+      </Modal>
     </Flex>
   );
 };
diff --git a/src/services/Physicalsign.ts b/src/services/Physicalsign.ts
index 49e9ac084ae9f76163e04b112c6dd8182b9f1fc6..2356862d616fd0f13eaf564f5f93524fe21b672c 100644
--- a/src/services/Physicalsign.ts
+++ b/src/services/Physicalsign.ts
@@ -277,3 +277,16 @@ export async function getCityEventGroupBySource(params: {
     params,
   });
 }
+
+//获取所有行业情况
+export async function getAllIndutryIndexInstance(
+  params: {
+    physicalSignType: '1';  
+    objectId: '510100';
+  },
+): Promise<PhysicalsignApi.Result<PhysicalsignApi.IndutryIndexInstanceDto>> {
+  return request(urlProxyApis(`/zhgl/getAllIndutryIndexInstance`), {
+    method: 'GET',
+    params,
+  });
+}
\ No newline at end of file
diff --git a/src/services/core/Physicalsign.d.ts b/src/services/core/Physicalsign.d.ts
index 122d1c6adc693e89b8caff5b0eeed49cddc68d39..b5c426722d04bd7ecb2780892f8ef88a17f8ae59 100644
--- a/src/services/core/Physicalsign.d.ts
+++ b/src/services/core/Physicalsign.d.ts
@@ -109,4 +109,24 @@ declare namespace PhysicalsignApi {
     objectName: string;
     cqi: string;
   }
+
+  interface IndutryIndexInstanceDto {
+    desc: string;
+    diffValue: -0.5799999999999983;
+    indexId: string;
+    indexName: string;
+    indexStatus: string;
+    indexStatusColor: string;
+    qualitySign: string;
+    status: 'down' | 'up';
+    statusDesc: string;
+    time: string;
+    warningNum: number;
+    cqiTrend: {
+      name: string;
+      objectId: string;
+      objectName: string;
+      value: string;
+    }[];
+  }
 }