Просмотр исходного кода

Merge branch 'master' of http://1.94.244.160:3000/shuzhihua/pms-iot-vue

zhangcl 1 неделя назад
Родитель
Сommit
ec0e65e074

+ 18 - 14
src/views/pms/iotrddailyreport/components/NonProductionEfficiency.vue

@@ -52,18 +52,18 @@ let chart: echarts.ECharts | null = null
 const router = useRouter()
 
 const nonProductionTimeFields: [keyof ListItem, string][] = [
-  ['accidentTime', '工程质量'],
-  ['repairTime', '设备故障'],
-  ['selfStopTime', '设备保养'],
-  ['complexityTime', '技术受限'],
-  ['relocationTime', '生产配合'],
-  ['rectificationTime', '生产组织'],
-  ['waitingStopTime', '不可抗力'],
-  ['winterBreakTime', '待命'],
-  ['partyaDesign', '甲方设计'],
-  ['partyaPrepare', '甲方准备'],
-  ['partyaResource', '甲方资源'],
-  ['otherNptTime', '其它']
+  ['accidentTime', '工程质量(H)'],
+  ['repairTime', '设备故障(H)'],
+  ['selfStopTime', '设备保养(H)'],
+  ['complexityTime', '技术受限(H)'],
+  ['relocationTime', '生产配合(H)'],
+  ['rectificationTime', '生产组织(H)'],
+  ['waitingStopTime', '不可抗力(H)'],
+  ['winterBreakTime', '待命(H)'],
+  ['partyaDesign', '甲方设计(H)'],
+  ['partyaPrepare', '甲方准备(H)'],
+  ['partyaResource', '甲方资源(H)'],
+  ['otherNptTime', '其它(H)']
 ]
 
 const getQueryWithoutPage = () => {
@@ -205,7 +205,11 @@ const getPieData = () => {
 }
 
 const getNptFieldPieData = () => {
-  const excludedFields: Array<keyof ListItem> = ['selfStopTime', 'relocationTime', 'winterBreakTime']
+  const excludedFields: Array<keyof ListItem> = [
+    'selfStopTime',
+    'relocationTime',
+    'winterBreakTime'
+  ]
 
   return nonProductionTimeFields
     .filter(([field]) => !excludedFields.includes(field))
@@ -430,7 +434,7 @@ const { ZmTable, ZmTableColumn } = useTableComponents<ListItem>()
             </zm-table-column>
             <zm-table-column
               prop="calendarTime"
-              label="自然时间"
+              label="自然时间(H)"
               min-width="92"
               cover-formatter
               action

+ 25 - 28
src/views/pms/iotrhdailyreport/components/NonProductionEfficiency.vue

@@ -52,18 +52,18 @@ let chart: echarts.ECharts | null = null
 const router = useRouter()
 
 const nonProductionTimeFields: [keyof ListItem, string][] = [
-  ['accidentTime', '工程质量'],
-  ['repairTime', '设备故障'],
-  ['selfStopTime', '设备保养'],
-  ['complexityTime', '技术受限'],
-  ['relocationTime', '生产配合'],
-  ['rectificationTime', '生产组织'],
-  ['waitingStopTime', '不可抗力'],
-  ['winterBreakTime', '待命'],
-  ['partyaDesign', '甲方设计'],
-  ['partyaPrepare', '甲方准备'],
-  ['partyaResource', '甲方资源'],
-  ['otherNptTime', '其它']
+  ['accidentTime', '工程质量(H)'],
+  ['repairTime', '设备故障(H)'],
+  ['selfStopTime', '设备保养(H)'],
+  ['complexityTime', '技术受限(H)'],
+  ['relocationTime', '生产配合(H)'],
+  ['rectificationTime', '生产组织(H)'],
+  ['waitingStopTime', '不可抗力(H)'],
+  ['winterBreakTime', '待命(H)'],
+  ['partyaDesign', '甲方设计(H)'],
+  ['partyaPrepare', '甲方准备(H)'],
+  ['partyaResource', '甲方资源(H)'],
+  ['otherNptTime', '其它(H)']
 ]
 
 const getQueryWithoutPage = () => {
@@ -200,7 +200,11 @@ const getPieData = () => {
 }
 
 const getNptFieldPieData = () => {
-  const excludedFields: Array<keyof ListItem> = ['selfStopTime', 'relocationTime', 'winterBreakTime']
+  const excludedFields: Array<keyof ListItem> = [
+    'selfStopTime',
+    'relocationTime',
+    'winterBreakTime'
+  ]
 
   return nonProductionTimeFields
     .filter(([field]) => !excludedFields.includes(field))
@@ -393,16 +397,14 @@ const { ZmTable, ZmTableColumn } = useTableComponents<ListItem>()
             show-summary
             :summary-method="getSummaries"
             :row-class-name="getClickableRowClassName"
-            @row-click="handleRowClick"
-          >
+            @row-click="handleRowClick">
             <zm-table-column
               prop="name"
               label="队伍"
               min-width="120"
               fixed="left"
               cover-formatter
-              :real-value="formatTeamName"
-            />
+              :real-value="formatTeamName" />
             <zm-table-column
               v-for="[prop, label] in nonProductionTimeFields"
               :key="prop"
@@ -410,40 +412,35 @@ const { ZmTable, ZmTableColumn } = useTableComponents<ListItem>()
               :label="label"
               min-width="92"
               cover-formatter
-              :real-value="(row: ListItem) => formatNumber(row[prop])"
-            />
+              :real-value="(row: ListItem) => formatNumber(row[prop])" />
             <zm-table-column label="npt合计" is-parent>
               <zm-table-column
                 prop="nptTotal"
                 label="时长(H)"
                 min-width="92"
                 cover-formatter
-                :real-value="(row: ListItem) => formatNumber(row.nptTotal)"
-              />
+                :real-value="(row: ListItem) => formatNumber(row.nptTotal)" />
               <zm-table-column
                 prop="nptRate"
                 label="占比"
                 min-width="92"
                 cover-formatter
-                :real-value="formatRate"
-              />
+                :real-value="formatRate" />
             </zm-table-column>
             <zm-table-column
               prop="calendarTime"
-              label="自然时间"
+              label="自然时间(H)"
               min-width="92"
               cover-formatter
               action
-              :real-value="(row: ListItem) => formatNumber(row.calendarTime)"
-            />
+              :real-value="(row: ListItem) => formatNumber(row.calendarTime)" />
           </zm-table>
           <div
             v-else
             ref="chartRef"
             v-loading="loading"
             class="npt-board-container"
-            :style="{ width: `${width}px`, height: `${height}px` }"
-          >
+            :style="{ width: `${width}px`, height: `${height}px` }">
           </div>
         </template>
       </el-auto-resizer>

+ 25 - 28
src/views/pms/iotrydailyreport/components/NonProductionEfficiency.vue

@@ -53,18 +53,18 @@ let chart: echarts.ECharts | null = null
 const router = useRouter()
 
 const nonProductionTimeFields: [keyof ListItem, string][] = [
-  ['accidentTime', '工程质量'],
-  ['repairTime', '设备故障'],
-  ['selfStopTime', '设备保养'],
-  ['complexityTime', '技术受限'],
-  ['relocationTime', '生产配合'],
-  ['rectificationTime', '生产组织'],
-  ['waitingStopTime', '不可抗力'],
-  ['winterBreakTime', '待命'],
-  ['partyaDesign', '甲方设计'],
-  ['partyaPrepare', '甲方准备'],
-  ['partyaResource', '甲方资源'],
-  ['otherNptTime', '其它']
+  ['accidentTime', '工程质量(H)'],
+  ['repairTime', '设备故障(H)'],
+  ['selfStopTime', '设备保养(H)'],
+  ['complexityTime', '技术受限(H)'],
+  ['relocationTime', '生产配合(H)'],
+  ['rectificationTime', '生产组织(H)'],
+  ['waitingStopTime', '不可抗力(H)'],
+  ['winterBreakTime', '待命(H)'],
+  ['partyaDesign', '甲方设计(H)'],
+  ['partyaPrepare', '甲方准备(H)'],
+  ['partyaResource', '甲方资源(H)'],
+  ['otherNptTime', '其它(H)']
 ]
 
 const getQueryWithoutPage = () => {
@@ -206,7 +206,11 @@ const getPieData = () => {
 }
 
 const getNptFieldPieData = () => {
-  const excludedFields: Array<keyof ListItem> = ['selfStopTime', 'relocationTime', 'winterBreakTime']
+  const excludedFields: Array<keyof ListItem> = [
+    'selfStopTime',
+    'relocationTime',
+    'winterBreakTime'
+  ]
 
   return nonProductionTimeFields
     .filter(([field]) => !excludedFields.includes(field))
@@ -399,16 +403,14 @@ const { ZmTable, ZmTableColumn } = useTableComponents<ListItem>()
             show-summary
             :summary-method="getSummaries"
             :row-class-name="getClickableRowClassName"
-            @row-click="handleRowClick"
-          >
+            @row-click="handleRowClick">
             <zm-table-column
               prop="name"
               label="队伍"
               min-width="120"
               fixed="left"
               cover-formatter
-              :real-value="formatTeamName"
-            />
+              :real-value="formatTeamName" />
             <zm-table-column
               v-for="[prop, label] in nonProductionTimeFields"
               :key="prop"
@@ -416,40 +418,35 @@ const { ZmTable, ZmTableColumn } = useTableComponents<ListItem>()
               :label="label"
               min-width="92"
               cover-formatter
-              :real-value="(row: ListItem) => formatNumber(row[prop])"
-            />
+              :real-value="(row: ListItem) => formatNumber(row[prop])" />
             <zm-table-column label="npt合计" is-parent>
               <zm-table-column
                 prop="nptTotal"
                 label="时长(H)"
                 min-width="92"
                 cover-formatter
-                :real-value="(row: ListItem) => formatNumber(row.nptTotal)"
-              />
+                :real-value="(row: ListItem) => formatNumber(row.nptTotal)" />
               <zm-table-column
                 prop="nptRate"
                 label="占比"
                 min-width="92"
                 cover-formatter
-                :real-value="formatRate"
-              />
+                :real-value="formatRate" />
             </zm-table-column>
             <zm-table-column
               prop="calendarTime"
-              label="自然时间"
+              label="自然时间(H)"
               min-width="92"
               cover-formatter
               action
-              :real-value="(row: ListItem) => formatNumber(row.calendarTime)"
-            />
+              :real-value="(row: ListItem) => formatNumber(row.calendarTime)" />
           </zm-table>
           <div
             v-else
             ref="chartRef"
             v-loading="loading"
             class="npt-board-container"
-            :style="{ width: `${width}px`, height: `${height}px` }"
-          >
+            :style="{ width: `${width}px`, height: `${height}px` }">
           </div>
         </template>
       </el-auto-resizer>

+ 25 - 28
src/views/pms/iotrydailyreport/components/XjNonProductionEfficiency.vue

@@ -53,18 +53,18 @@ let chart: echarts.ECharts | null = null
 const router = useRouter()
 
 const nonProductionTimeFields: [keyof ListItem, string][] = [
-  ['accidentTime', '工程质量'],
-  ['repairTime', '设备故障'],
-  ['selfStopTime', '设备保养'],
-  ['complexityTime', '技术受限'],
-  ['relocationTime', '生产配合'],
-  ['rectificationTime', '生产组织'],
-  ['waitingStopTime', '不可抗力'],
-  ['winterBreakTime', '待命'],
-  ['partyaDesign', '甲方设计'],
-  ['partyaPrepare', '甲方准备'],
-  ['partyaResource', '甲方资源'],
-  ['otherNptTime', '其它']
+  ['accidentTime', '工程质量(H)'],
+  ['repairTime', '设备故障(H)'],
+  ['selfStopTime', '设备保养(H)'],
+  ['complexityTime', '技术受限(H)'],
+  ['relocationTime', '生产配合(H)'],
+  ['rectificationTime', '生产组织(H)'],
+  ['waitingStopTime', '不可抗力(H)'],
+  ['winterBreakTime', '待命(H)'],
+  ['partyaDesign', '甲方设计(H)'],
+  ['partyaPrepare', '甲方准备(H)'],
+  ['partyaResource', '甲方资源(H)'],
+  ['otherNptTime', '其它(H)']
 ]
 
 const getQueryWithoutPage = () => {
@@ -206,7 +206,11 @@ const getPieData = () => {
 }
 
 const getNptFieldPieData = () => {
-  const excludedFields: Array<keyof ListItem> = ['selfStopTime', 'relocationTime', 'winterBreakTime']
+  const excludedFields: Array<keyof ListItem> = [
+    'selfStopTime',
+    'relocationTime',
+    'winterBreakTime'
+  ]
 
   return nonProductionTimeFields
     .filter(([field]) => !excludedFields.includes(field))
@@ -399,16 +403,14 @@ const { ZmTable, ZmTableColumn } = useTableComponents<ListItem>()
             show-summary
             :summary-method="getSummaries"
             :row-class-name="getClickableRowClassName"
-            @row-click="handleRowClick"
-          >
+            @row-click="handleRowClick">
             <zm-table-column
               prop="name"
               label="队伍"
               min-width="120"
               fixed="left"
               cover-formatter
-              :real-value="formatTeamName"
-            />
+              :real-value="formatTeamName" />
             <zm-table-column
               v-for="[prop, label] in nonProductionTimeFields"
               :key="prop"
@@ -416,40 +418,35 @@ const { ZmTable, ZmTableColumn } = useTableComponents<ListItem>()
               :label="label"
               min-width="92"
               cover-formatter
-              :real-value="(row: ListItem) => formatNumber(row[prop])"
-            />
+              :real-value="(row: ListItem) => formatNumber(row[prop])" />
             <zm-table-column label="npt合计" is-parent>
               <zm-table-column
                 prop="nptTotal"
                 label="时长(H)"
                 min-width="92"
                 cover-formatter
-                :real-value="(row: ListItem) => formatNumber(row.nptTotal)"
-              />
+                :real-value="(row: ListItem) => formatNumber(row.nptTotal)" />
               <zm-table-column
                 prop="nptRate"
                 label="占比"
                 min-width="92"
                 cover-formatter
-                :real-value="formatRate"
-              />
+                :real-value="formatRate" />
             </zm-table-column>
             <zm-table-column
               prop="calendarTime"
-              label="自然时间"
+              label="自然时间(H)"
               min-width="92"
               cover-formatter
               action
-              :real-value="(row: ListItem) => formatNumber(row.calendarTime)"
-            />
+              :real-value="(row: ListItem) => formatNumber(row.calendarTime)" />
           </zm-table>
           <div
             v-else
             ref="chartRef"
             v-loading="loading"
             class="npt-board-container"
-            :style="{ width: `${width}px`, height: `${height}px` }"
-          >
+            :style="{ width: `${width}px`, height: `${height}px` }">
           </div>
         </template>
       </el-auto-resizer>

+ 0 - 119
src/views/pms/qhse/certPerson/CertPersonForm.vue

@@ -35,112 +35,6 @@
 
       <el-divider>是否需要相关证书</el-divider>
 
-      <!-- <div class="flex flex-wrap items-center justify-between">
-        <el-form-item label="硫化氢证" prop="lsh">
-          <el-select v-model="formData.lsh" placeholder="请选择" clearable style="width: 150px">
-            <el-option
-              v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value" />
-          </el-select>
-        </el-form-item>
-
-        <el-form-item label="井控证" prop="jk">
-          <el-select v-model="formData.jk" placeholder="请选择" clearable style="width: 150px">
-            <el-option
-              v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value" />
-          </el-select>
-        </el-form-item>
-
-        <el-form-item label="HSE证" prop="hse">
-          <el-select v-model="formData.hse" placeholder="请选择" clearable style="width: 150px">
-            <el-option
-              v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value" />
-          </el-select>
-        </el-form-item>
-
-        <el-form-item label="司钻证" prop="sz">
-          <el-select v-model="formData.sz" placeholder="请选择" clearable style="width: 150px">
-            <el-option
-              v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value" />
-          </el-select>
-        </el-form-item>
-
-        <el-form-item label="高处作业证" prop="gczy">
-          <el-select v-model="formData.gczy" placeholder="请选择" clearable style="width: 150px">
-            <el-option
-              v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value" />
-          </el-select>
-        </el-form-item>
-
-        <el-form-item label="电工证" prop="dg">
-          <el-select v-model="formData.dg" placeholder="请选择" clearable style="width: 150px">
-            <el-option
-              v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value" />
-          </el-select>
-        </el-form-item>
-
-        <el-form-item
-          label="连续油管主操证"
-          prop="lxygzc"
-          label-width="auto"
-          style="margin-left: -5px">
-          <el-select v-model="formData.lxygzc" placeholder="请选择" clearable style="width: 150px">
-            <el-option
-              v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value" />
-          </el-select>
-        </el-form-item>
-
-        <el-form-item label="吊装证" prop="dz">
-          <el-select v-model="formData.dz" placeholder="请选择" clearable style="width: 150px">
-            <el-option
-              v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value" />
-          </el-select>
-        </el-form-item>
-
-        <el-form-item label="特种作业证" prop="tzzy">
-          <el-select v-model="formData.tzzy" placeholder="请选择" clearable style="width: 150px">
-            <el-option
-              v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value" />
-          </el-select>
-        </el-form-item>
-
-        <el-form-item label="安全管理证" prop="aqgl">
-          <el-select v-model="formData.aqgl" placeholder="请选择" clearable style="width: 150px">
-            <el-option
-              v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value" />
-          </el-select>
-        </el-form-item>
-      </div> -->
-
       <div class="flex flex-wrap items-center justify-between">
         <el-form-item label="硫化氢证" prop="lsh">
           <el-radio-group v-model="formData.lsh">
@@ -234,17 +128,6 @@
           </el-radio-group>
         </el-form-item>
 
-        <el-form-item label="特种作业证" prop="tzzy">
-          <el-radio-group v-model="formData.tzzy">
-            <el-radio
-              v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
-              :key="dict.value"
-              :value="dict.value">
-              {{ dict.label }}
-            </el-radio>
-          </el-radio-group>
-        </el-form-item>
-
         <el-form-item label="安全管理证" prop="aqgl">
           <el-radio-group v-model="formData.aqgl">
             <el-radio
@@ -299,7 +182,6 @@ const formData = ref({
   dg: undefined,
   lxygzc: undefined,
   dz: undefined,
-  tzzy: undefined,
   aqgl: undefined
 })
 const formRules = reactive({
@@ -316,7 +198,6 @@ const formRules = reactive({
   dg: [{ required: true, message: '请选择', trigger: 'blur' }],
   lxygzc: [{ required: true, message: '请选择', trigger: 'blur' }],
   dz: [{ required: true, message: '请选择', trigger: 'blur' }],
-  tzzy: [{ required: true, message: '请选择', trigger: 'blur' }],
   aqgl: [{ required: true, message: '请选择', trigger: 'blur' }]
 })
 const formRef = ref() // 表单 Ref

+ 2 - 2
src/views/pms/qhse/certPerson/index.vue

@@ -166,7 +166,7 @@
               <span v-else></span>
             </template>
           </zm-table-column>
-
+          <!-- 
           <zm-table-column label="特种作业证" align="center">
             <template #default="scope">
               <el-button circle type="success" style="border: none" plain v-if="scope.row.tzzy">
@@ -176,7 +176,7 @@
               </el-button>
               <span v-else></span>
             </template>
-          </zm-table-column>
+          </zm-table-column> -->
 
           <zm-table-column label="安全管理证" align="center">
             <template #default="scope">

+ 82 - 88
src/views/pms/qhse/kanban/index.vue

@@ -212,7 +212,7 @@ const bottomCards = ref([
     icon: Histogram,
     accent: '#4f8dff',
     glow: 'rgba(79, 141, 255, 0.2)',
-    lines: ['在用: 0台', '待检: 0(重点关注)']
+    lines: ['在用: 0台', '待检: 0(重点关注)']
   },
   {
     title: '应急演练',
@@ -315,7 +315,7 @@ async function getInstrumentOverview() {
 
   bottomCards.value[1].lines = [
     `在用: ${total.value}台`,
-    `待检: ${instrumentExpired.value}(重点关注)`
+    `待检: ${instrumentExpired.value}(重点关注)`
   ]
 }
 
@@ -591,33 +591,6 @@ function getSocChartOption(): echarts.EChartsOption {
           }
         }))
       }
-    ],
-    graphic: [
-      {
-        type: 'text',
-        left: '29%',
-        top: '43%',
-        style: {
-          text: 'SOC卡',
-          fill: '#6b7f9c',
-          fontSize: 18,
-          fontWeight: 700,
-          fontFamily: FONT_FAMILY
-        }
-      },
-      {
-        type: 'text',
-        left: '26.5%',
-        top: '50%',
-        textAlign: 'center',
-        style: {
-          text: `${permitStats.value.reduce((sum, item) => sum + item.value, 0)}`,
-          fill: '#114a9b',
-          fontSize: 30,
-          fontWeight: 700,
-          fontFamily: 'YouSheBiaoTiHei, sans-serif'
-        }
-      }
     ]
   }
 }
@@ -888,7 +861,7 @@ onUnmounted(() => {
               <section class="panel board-panel board-panel--center kb-stage-card kb-stage-card--4">
                 <div class="panel-title panel-title--center">
                   <span class="icon-decorator"><span></span><span></span></span>
-                  安全风险四色动态分布
+                  风险管控及隐患排查
                 </div>
                 <div class="risk-grid">
                   <article v-for="zone in riskZones" :key="zone.title" class="risk-card">
@@ -899,69 +872,77 @@ onUnmounted(() => {
                         :duration="2600"
                         :end-val="zone.value"
                         :start-val="0"
-                        :style="{ color: zone.color, fontSize: '28px' }" />
+                        :style="{ color: zone.color, fontSize: '22px' }" />
                     </div>
                     <div class="risk-card__desc">{{ zone.desc }}</div>
                   </article>
                 </div>
-              </section>
-            </div>
 
-            <div class="left-column">
-              <section class="panel board-panel kb-stage-card kb-stage-card--2">
-                <div class="panel-title">
-                  <span class="icon-decorator"><span></span><span></span></span>
-                  隐患排查治理统计
+                <div class="risk-hazard-block">
+                  <div class="panel-title risk-hazard-block__title">
+                    <span class="icon-decorator"><span></span><span></span></span>
+                    隐患排查治理统计
+                  </div>
+                  <div
+                    ref="hazardChartRef"
+                    class="chart-panel chart-panel--echart risk-hazard-block__chart"></div>
                 </div>
-                <div ref="hazardChartRef" class="chart-panel chart-panel--echart"></div>
               </section>
+            </div>
 
+            <div class="left-column">
               <section class="panel board-panel kb-stage-card kb-stage-card--3">
-                <div class="panel-title">
+                <div class="panel-title panel-title--center">
                   <span class="icon-decorator"><span></span><span></span></span>
-                  安全生产天数
+                  结果指标
                 </div>
                 <div ref="safeDayChartRef" class="safe-day-chart-panel"></div>
               </section>
             </div>
 
             <div class="right-column">
-              <section class="panel board-panel kb-stage-card kb-stage-card--5">
-                <div class="panel-title">
+              <section class="panel board-panel board-panel--center kb-stage-card kb-stage-card--4">
+                <div class="panel-title panel-title--center">
                   <span class="icon-decorator"><span></span><span></span></span>
-                  SOC卡类型
+                  行为安全与风险预警
                 </div>
-                <div ref="socChartRef" class="soc-chart-panel"></div>
-              </section>
+                <section class="board-panel kb-stage-card kb-stage-card--5 pt-2">
+                  <div class="panel-title">
+                    <!-- <span class="icon-decorator"><span></span><span></span></span> -->
+                    SOC卡类型
+                  </div>
+                  <div ref="socChartRef" class="soc-chart-panel"></div>
+                </section>
 
-              <section class="panel board-panel kb-stage-card kb-stage-card--6">
-                <div class="panel-title">
-                  <span class="icon-decorator"><span></span><span></span></span>
-                  人员资质风险预警
-                </div>
-                <div class="qualification-panel">
-                  <div class="qualification-icon">
-                    <el-icon>
-                      <CollectionTag />
-                    </el-icon>
+                <section class="board-panel kb-stage-card kb-stage-card--6 pl-4">
+                  <div class="panel-title">
+                    <span class="icon-decorator"><span></span><span></span></span>
+                    人员资质风险预警
                   </div>
-                  <div class="qualification-list">
-                    <div
-                      v-for="item in qualificationWarnings"
-                      :key="item.label"
-                      class="qualification-item">
-                      <span class="qualification-item__label">{{ item.label }}:</span>
-                      <strong :style="{ color: item.accent }">
-                        <CountTo
-                          :duration="2600"
-                          :end-val="item.value"
-                          :start-val="0"
-                          :style="{ color: item.accent }" />
-                        <span class="pl-2">人</span>
-                      </strong>
+                  <div class="qualification-panel">
+                    <div class="qualification-icon">
+                      <el-icon>
+                        <CollectionTag />
+                      </el-icon>
+                    </div>
+                    <div class="qualification-list">
+                      <div
+                        v-for="item in qualificationWarnings"
+                        :key="item.label"
+                        class="qualification-item">
+                        <span class="qualification-item__label">{{ item.label }}:</span>
+                        <strong :style="{ color: item.accent }">
+                          <CountTo
+                            :duration="2600"
+                            :end-val="item.value"
+                            :start-val="0"
+                            :style="{ color: item.accent }" />
+                          <span class="pl-2">人</span>
+                        </strong>
+                      </div>
                     </div>
                   </div>
-                </div>
+                </section>
               </section>
             </div>
           </div>
@@ -1139,7 +1120,7 @@ onUnmounted(() => {
 }
 
 .board-body {
-  padding: 18px 18px 24px;
+  padding: 5px 18px 24px;
 }
 
 .summary-toolbar {
@@ -1216,15 +1197,15 @@ onUnmounted(() => {
 }
 
 .summary-panel {
-  padding: 0 10px 22px;
-  height: 210px;
+  padding: 0 10px 10px;
+  height: 200px;
 }
 
 .summary-grid {
   display: grid;
   grid-template-columns: repeat(6, minmax(0, 1fr));
   gap: 24px;
-  margin-top: 20px;
+  margin-top: 10px;
 }
 
 .summary-tile {
@@ -1316,15 +1297,27 @@ onUnmounted(() => {
 
 .risk-grid {
   display: grid;
-  padding: 30px;
-  margin-top: 34px;
+  padding: 10px 24px 12px;
+  // margin-top: 18px;
   grid-template-columns: repeat(2, minmax(0, 1fr));
-  gap: 26px 28px;
+  gap: 10px 18px;
+}
+
+.risk-hazard-block {
+  padding: 0 24px 5px;
+}
+
+.risk-hazard-block__title {
+  margin-top: 0;
+}
+
+.risk-hazard-block__chart {
+  margin-top: 12px;
 }
 
 .risk-card {
-  min-height: 182px;
-  padding: 34px 24px;
+  min-height: 124px;
+  padding: 20px 18px;
   background: linear-gradient(180deg, rgb(255 255 255 / 42%) 0%, rgb(220 232 250 / 28%) 100%);
   border: 1px solid rgb(255 255 255 / 58%);
   border-radius: 18px;
@@ -1335,25 +1328,25 @@ onUnmounted(() => {
 
 .risk-card__title {
   display: flex;
-  font-size: 20px;
+  font-size: 16px;
   font-weight: 800;
   align-items: center;
-  gap: 12px;
+  gap: 8px;
 }
 
 .risk-card__dot {
-  width: 18px;
-  height: 18px;
+  width: 14px;
+  height: 14px;
   border-radius: 999px;
-  box-shadow: 0 0 0 6px rgb(255 255 255 / 35%);
+  box-shadow: 0 0 0 4px rgb(255 255 255 / 35%);
 }
 
 .risk-card__desc {
-  margin-top: 36px;
-  font-size: 17px;
+  margin-top: 18px;
+  font-size: 13px;
   font-weight: 600;
   color: #6f819a;
-  line-height: 1.55;
+  line-height: 1.35;
 }
 
 .qualification-panel {
@@ -1361,6 +1354,7 @@ onUnmounted(() => {
   margin-top: 26px;
   padding: 28px;
   grid-template-columns: 140px 1fr;
+  padding-left: 120px;
   align-items: center;
   gap: 26px;
 }