소스 검색

Merge branch 'test_i18n' of shuzhihua/pms-iot-vue into demo

yanghao 2 일 전
부모
커밋
32aa3be850
6개의 변경된 파일214개의 추가작업 그리고 80개의 파일을 삭제
  1. 1 1
      .env.local
  2. 2 21
      pnpm-lock.yaml
  3. 56 2
      src/locales/en.ts
  4. 53 0
      src/locales/zh-CN.ts
  5. 101 55
      src/views/pms/qhse/kanban/index.vue
  6. 1 1
      src/views/pms/stat/inspect.vue

+ 1 - 1
.env.local

@@ -4,7 +4,7 @@ NODE_ENV=development
 VITE_DEV=true
 
 # 请求路径  http://192.168.188.86:48080  https://iot.deepoil.cc:5443  http://172.26.0.56:48080  http://192.168.188.198:48080
-VITE_BASE_URL='https://iot.deepoil.cc:5443'
+VITE_BASE_URL='http://demo.deepoil.cc:9999'
 
 # 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
 VITE_UPLOAD_TYPE=server

+ 2 - 21
pnpm-lock.yaml

@@ -82,7 +82,7 @@ importers:
         version: 4.1.1
       axios:
         specifier: ^1.6.8
-        version: 1.7.8(debug@4.3.7)
+        version: 1.7.8
       benz-amr-recorder:
         specifier: ^1.1.5
         version: 1.1.5
@@ -1591,42 +1591,36 @@ packages:
     engines: {node: '>= 10.0.0'}
     cpu: [arm]
     os: [linux]
-    libc: [glibc]
 
   '@parcel/watcher-linux-arm-musl@2.5.0':
     resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==}
     engines: {node: '>= 10.0.0'}
     cpu: [arm]
     os: [linux]
-    libc: [musl]
 
   '@parcel/watcher-linux-arm64-glibc@2.5.0':
     resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==}
     engines: {node: '>= 10.0.0'}
     cpu: [arm64]
     os: [linux]
-    libc: [glibc]
 
   '@parcel/watcher-linux-arm64-musl@2.5.0':
     resolution: {integrity: sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==}
     engines: {node: '>= 10.0.0'}
     cpu: [arm64]
     os: [linux]
-    libc: [musl]
 
   '@parcel/watcher-linux-x64-glibc@2.5.0':
     resolution: {integrity: sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==}
     engines: {node: '>= 10.0.0'}
     cpu: [x64]
     os: [linux]
-    libc: [glibc]
 
   '@parcel/watcher-linux-x64-musl@2.5.0':
     resolution: {integrity: sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==}
     engines: {node: '>= 10.0.0'}
     cpu: [x64]
     os: [linux]
-    libc: [musl]
 
   '@parcel/watcher-win32-arm64@2.5.0':
     resolution: {integrity: sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==}
@@ -1735,55 +1729,46 @@ packages:
     resolution: {integrity: sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==}
     cpu: [arm]
     os: [linux]
-    libc: [glibc]
 
   '@rollup/rollup-linux-arm-musleabihf@4.27.4':
     resolution: {integrity: sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==}
     cpu: [arm]
     os: [linux]
-    libc: [musl]
 
   '@rollup/rollup-linux-arm64-gnu@4.27.4':
     resolution: {integrity: sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==}
     cpu: [arm64]
     os: [linux]
-    libc: [glibc]
 
   '@rollup/rollup-linux-arm64-musl@4.27.4':
     resolution: {integrity: sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==}
     cpu: [arm64]
     os: [linux]
-    libc: [musl]
 
   '@rollup/rollup-linux-powerpc64le-gnu@4.27.4':
     resolution: {integrity: sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==}
     cpu: [ppc64]
     os: [linux]
-    libc: [glibc]
 
   '@rollup/rollup-linux-riscv64-gnu@4.27.4':
     resolution: {integrity: sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==}
     cpu: [riscv64]
     os: [linux]
-    libc: [glibc]
 
   '@rollup/rollup-linux-s390x-gnu@4.27.4':
     resolution: {integrity: sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==}
     cpu: [s390x]
     os: [linux]
-    libc: [glibc]
 
   '@rollup/rollup-linux-x64-gnu@4.27.4':
     resolution: {integrity: sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==}
     cpu: [x64]
     os: [linux]
-    libc: [glibc]
 
   '@rollup/rollup-linux-x64-musl@4.27.4':
     resolution: {integrity: sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==}
     cpu: [x64]
     os: [linux]
-    libc: [musl]
 
   '@rollup/rollup-win32-arm64-msvc@4.27.4':
     resolution: {integrity: sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==}
@@ -1829,28 +1814,24 @@ packages:
     engines: {node: '>=10'}
     cpu: [arm64]
     os: [linux]
-    libc: [glibc]
 
   '@swc/core-linux-arm64-musl@1.9.3':
     resolution: {integrity: sha512-tzVH480RY6RbMl/QRgh5HK3zn1ZTFsThuxDGo6Iuk1MdwIbdFYUY034heWUTI4u3Db97ArKh0hNL0xhO3+PZdg==}
     engines: {node: '>=10'}
     cpu: [arm64]
     os: [linux]
-    libc: [musl]
 
   '@swc/core-linux-x64-gnu@1.9.3':
     resolution: {integrity: sha512-ivXXBRDXDc9k4cdv10R21ccBmGebVOwKXT/UdH1PhxUn9m/h8erAWjz5pcELwjiMf27WokqPgaWVfaclDbgE+w==}
     engines: {node: '>=10'}
     cpu: [x64]
     os: [linux]
-    libc: [glibc]
 
   '@swc/core-linux-x64-musl@1.9.3':
     resolution: {integrity: sha512-ILsGMgfnOz1HwdDz+ZgEuomIwkP1PHT6maigZxaCIuC6OPEhKE8uYna22uU63XvYcLQvZYDzpR3ms47WQPuNEg==}
     engines: {node: '>=10'}
     cpu: [x64]
     os: [linux]
-    libc: [musl]
 
   '@swc/core-win32-arm64-msvc@1.9.3':
     resolution: {integrity: sha512-e+XmltDVIHieUnNJHtspn6B+PCcFOMYXNJB1GqoCcyinkEIQNwC8KtWgMqUucUbEWJkPc35NHy9k8aCXRmw9Kg==}
@@ -9442,7 +9423,7 @@ snapshots:
     transitivePeerDependencies:
       - debug
 
-  axios@1.7.8(debug@4.3.7):
+  axios@1.7.8:
     dependencies:
       follow-redirects: 1.15.9(debug@4.3.7)
       form-data: 4.0.1

+ 56 - 2
src/locales/en.ts

@@ -8896,8 +8896,8 @@ export default {
     'indexvue325112-3': 'Quarterly',
     'indexvue325112-4': 'Annual',
     'indexvue325112-5': 'Inisialisasi',
-    'indexvue325112-6': 'Risk Control and Hidden Danger Management',
-    'indexvue325112-7': 'Behavioral Safety and System Warning',
+    'indexvue325112-6': 'Risk Control and Danger',
+    'indexvue325112-7': 'Behavioral Safety and Warning',
     'indexvue325112-8': 'Person',
     'indexvue325112-9': 'Expired or not',
     'indexvue325112-10': 'Please select whether to expire or not',
@@ -8955,6 +8955,60 @@ export default {
     'indexvue325112-62': 'Sort',
     'indexvue325112-63': 'Purchase Date',
     'indexvue325112-64': 'Price',
+    'indexvue325112-65': 'Kanban',
+    'indexvue325112-66': 'Certificates',
+    'indexvue325112-67': 'QHSE Data',
+    'indexvue325112-68': 'Quality Indicator',
+    'indexvue325112-69': 'Man-hour(h)',
+    'indexvue325112-70': 'Mileage‌(km)',
+    'indexvue325112-71': 'Major risk',
+    'indexvue325112-72': 'Certificate holding rate',
+    'indexvue325112-73': 'Divice Compliance rate',
+    'indexvue325112-74': 'Work permits',
+    'indexvue325112-75': 'Date',
+    'indexvue325112-76': 'Total',
+    'indexvue325112-77': 'Rectification',
+    'indexvue325112-78': '‌Not rectified',
+    'indexvue325112-79': 'Hidden danger',
+    'indexvue325112-80': 'Office Area/Hall/Passage',
+    'indexvue325112-81': 'Material/Maintenance/Unloading',
+    'indexvue325112-82': 'Welding/Machining/Lifting Area',
+    'indexvue325112-83': 'Chemical/Pressure/Power',
+    'indexvue325112-84': 'area',
+    'indexvue325112-85': '‌Personal protection‌',
+    'indexvue325112-86': 'Standard operation',
+    'indexvue325112-87': 'Command‌',
+    'indexvue325112-88': 'Personnel Location',
+    'indexvue325112-89': 'Workplace',
+    'indexvue325112-90': 'Certificate expired',
+    'indexvue325112-91': 'Expiring soon',
+    'indexvue325112-92': 'Work Safety Days',
+    'indexvue325112-93': 'System compliance',
+    'indexvue325112-94': 'Safety inspection‌',
+    'indexvue325112-95': 'Emergency drill',
+    'indexvue325112-96': 'Occupational Health',
+    'indexvue325112-97': 'Hazardous Waste',
+    'indexvue325112-98': 'Internal audit completed',
+    'indexvue325112-99': '‌Awaiting external review',
+
+    'indexvue325112-100': 'In use',
+    'indexvue325112-101': 'To be inspected',
+    'indexvue325112-102': 'item',
+    'indexvue325112-103': 'important',
+    'indexvue325112-104': 'Emergency Drill',
+    'indexvue325112-105': 'times',
+    'indexvue325112-106': 'Physical examination rate',
+    'indexvue325112-107': 'qualified‌',
+    'indexvue325112-108': 'Hazardous waste',
+    'indexvue325112-109': 'Three wastes disposal meets 100%',
+
+    'indexvue325112-110': 'QHSE Kanban',
+    'indexvue325112-111': 'Certificate Information',
+
+    'indexvue325112-112': 'LTIR(mwh)',
+    'indexvue325112-113': 'TRIR(mwh)',
+    'indexvue325112-114': 'PMVA(mkm)',
+
     'indexvue621523-0': 'Name',
     'indexvue621523-1': 'Please enter the name of the measuring instrument',
     'indexvue621523-2': 'Responsible Person',

+ 53 - 0
src/locales/zh-CN.ts

@@ -8841,6 +8841,59 @@ export default {
     'indexvue325112-62': '分类',
     'indexvue325112-63': '采购日期',
     'indexvue325112-64': '价格',
+    'indexvue325112-65': 'QHSE看板',
+    'indexvue325112-66': '证书信息',
+    'indexvue325112-67': 'QHSE关键数据',
+    'indexvue325112-68': 'QHSE指标',
+    'indexvue325112-69': '人工时(小时)',
+    'indexvue325112-70': '车辆里程(公里)',
+    'indexvue325112-71': '重大风险数量',
+    'indexvue325112-72': '特种人员持证率',
+    'indexvue325112-73': '设备检测合规率',
+    'indexvue325112-74': '作业许可证数量',
+    'indexvue325112-75': '日期',
+    'indexvue325112-76': '总数',
+    'indexvue325112-77': '已整改',
+    'indexvue325112-78': '未整改',
+    'indexvue325112-79': '隐患数量',
+    'indexvue325112-80': '办公区 / 展厅 / 主通道',
+    'indexvue325112-81': '物料库 / 维修 / 装卸区',
+    'indexvue325112-82': '焊接 / 机加 / 吊装区',
+    'indexvue325112-83': '危化库 / 试压区 / 配电房',
+    'indexvue325112-84': '区',
+    'indexvue325112-85': '个人防护',
+    'indexvue325112-86': '规范操作',
+    'indexvue325112-87': '规范指挥',
+    'indexvue325112-88': '人员位置',
+    'indexvue325112-89': '作业场所',
+    'indexvue325112-90': '证件过期',
+    'indexvue325112-91': '即将到期',
+    'indexvue325112-92': '安全生产天数',
+    'indexvue325112-93': '体系合规',
+    'indexvue325112-94': '安全检测',
+    'indexvue325112-95': '应急演练',
+    'indexvue325112-96': '职业健康',
+    'indexvue325112-97': '危废管控',
+
+    'indexvue325112-98': '内审已完成',
+    'indexvue325112-99': '外审待安排',
+    'indexvue325112-100': '在用',
+    'indexvue325112-101': '待检',
+    'indexvue325112-102': '项',
+    'indexvue325112-103': '重点关注',
+    'indexvue325112-104': '年度应急演练',
+    'indexvue325112-105': '次',
+    'indexvue325112-106': '职业健康体检率',
+    'indexvue325112-107': '达标',
+    'indexvue325112-108': '危废暂存合规',
+    'indexvue325112-109': '三废处置100%达标',
+    'indexvue325112-110': 'QHSE管理看板',
+    'indexvue325112-111': '证书信息看板',
+
+    'indexvue325112-112': 'LTIR(百万工时)',
+    'indexvue325112-113': 'TRIR(百万工时)',
+    'indexvue325112-114': 'PMVA(百万公里)',
+
     'indexvue621523-0': '计量器具名称',
     'indexvue621523-1': '请输入计量器具名称',
     'indexvue621523-2': '责任人',

+ 101 - 55
src/views/pms/qhse/kanban/index.vue

@@ -106,10 +106,10 @@ let safeDayChart: echarts.ECharts | null = null
 let qhseTrendChart: echarts.ECharts | null = null
 let socChart: echarts.ECharts | null = null
 
-const summaryTabs: Array<{ label: string; value: SummaryTabValue }> = [
-  { label: '首页看板', value: 'home' },
-  { label: '证书信息', value: 'certificate' }
-]
+const summaryTabs: Array<{ label: string; value: SummaryTabValue }> = computed(() => [
+  { label: t('qhse.indexvue325112-65'), value: 'home' },
+  { label: t('qhse.indexvue325112-66'), value: 'certificate' }
+])
 
 const activeSummaryTab = ref<SummaryTabValue>('home')
 
@@ -134,12 +134,14 @@ watch(
 )
 
 const pageTitle = computed(() =>
-  activeSummaryTab.value === 'certificate' ? '证书信息看板' : 'QHSE管理看板'
+  activeSummaryTab.value === 'certificate'
+    ? t('qhse.indexvue325112-111')
+    : t('qhse.indexvue325112-110')
 )
 
-const summaryCards = ref([
+const summaryCards = computed(() => [
   {
-    title: '人工时(小时)',
+    title: t('qhse.indexvue325112-69'),
     value: 671987,
     note: '',
     accent: '#4f8dff',
@@ -147,7 +149,7 @@ const summaryCards = ref([
     icon: Clock
   },
   {
-    title: '车辆里程(公里)',
+    title: t('qhse.indexvue325112-70'),
     value: 631128,
     note: '',
     accent: '#4f8dff',
@@ -155,7 +157,7 @@ const summaryCards = ref([
     icon: Odometer
   },
   {
-    title: '重大风险数量',
+    title: t('qhse.indexvue325112-71'),
     value: 0,
     note: '',
     accent: '#ff5a62',
@@ -163,7 +165,7 @@ const summaryCards = ref([
     icon: Warning
   },
   {
-    title: '特种人员持证率',
+    title: t('qhse.indexvue325112-72'),
     value: 0,
     note: 'Warn: 0',
     accent: '#f2b800',
@@ -171,7 +173,7 @@ const summaryCards = ref([
     icon: Postcard
   },
   {
-    title: '设备检测合规率',
+    title: t('qhse.indexvue325112-73'),
     value: '98%',
     note: '',
     accent: '#f2b800',
@@ -179,7 +181,7 @@ const summaryCards = ref([
     icon: DataAnalysis
   },
   {
-    title: '作业许可证数量',
+    title: t('qhse.indexvue325112-74'),
     value: 0,
     note: '',
     accent: '#4f8dff',
@@ -188,42 +190,83 @@ const summaryCards = ref([
   }
 ])
 
-const hazardBars = ref([
-  { label: '总数', value: 0, color: '#4f8dff' },
-  { label: '已整改', value: 0, color: '#43c7ca' },
-  { label: '未整改', value: 0, color: '#ff981f' }
+const hazardBars = computed(() => [
+  { label: t('qhse.indexvue325112-76'), value: 0, color: '#4f8dff' },
+  { label: t('qhse.indexvue325112-77'), value: 0, color: '#43c7ca' },
+  { label: t('qhse.indexvue325112-78'), value: 0, color: '#ff981f' }
 ])
 
 const riskZones = ref([
-  { title: '', desc: '办公区 / 展厅 / 主通道', color: '#25b36a', value: 0 },
-  { title: '', desc: '物料库 / 维修 / 装卸区', color: '#3d7cff', value: 0 },
-  { title: '', desc: '焊接 / 机加 / 吊装区', color: '#ff9827', value: 0 },
-  { title: '', desc: '危化库 / 试压区 / 配电房', color: '#ff5b61', value: 0 }
+  {
+    title: '',
+    desc: t('qhse.indexvue325112-80'),
+    color: '#25b36a',
+    value: 0
+  },
+  {
+    title: '',
+    desc: t('qhse.indexvue325112-81'),
+    color: '#3d7cff',
+    value: 0
+  },
+  {
+    title: '',
+    desc: t('qhse.indexvue325112-82'),
+    color: '#ff9827',
+    value: 0
+  },
+  {
+    title: '',
+    desc: t('qhse.indexvue325112-83'),
+    color: '#ff5b61',
+    value: 0
+  }
 ])
 
-const permitStats = ref<PermitStat[]>([
-  { label: '个人防护', value: 18, color: '#4f8dff' },
-  { label: '规范操作', value: 26, color: '#43c7ca' },
-  { label: '规范指挥', value: 12, color: '#ffb14a' },
-  { label: '人员位置', value: 9, color: '#ff7a7a' },
-  { label: '作业场所', value: 15, color: '#8d8cff' }
+const permitStats = computed(() => [
+  { label: t('qhse.indexvue325112-85'), value: 18, color: '#4f8dff' },
+  { label: t('qhse.indexvue325112-86'), value: 26, color: '#43c7ca' },
+  { label: t('qhse.indexvue325112-87'), value: 12, color: '#ffb14a' },
+  { label: t('qhse.indexvue325112-88'), value: 9, color: '#ff7a7a' },
+  { label: t('qhse.indexvue325112-89'), value: 15, color: '#8d8cff' }
 ])
 
-const qualificationWarnings = ref([
-  { label: '证件过期', value: 0, accent: '#ff7a7a', key: 'expired' },
-  { label: '即将到期', value: 0, accent: '#e6ab00', key: 'warn' }
+const qualificationWarnings = computed(() => [
+  { label: t('qhse.indexvue325112-90'), value: 0, accent: '#ff7a7a', key: 'expired' },
+  { label: t('qhse.indexvue325112-91'), value: 0, accent: '#e6ab00', key: 'warn' }
 ])
 
-const qhseMetricTabs = [
-  { label: 'LTIR(百万工时)', value: 'ltir', accent: '#3d7cff', label2: '百万工时损失工时事故率' },
-  { label: 'TRIR(百万工时)', value: 'trir', accent: '#17b6c5', label2: '百万工时总可记录事件率' },
+// const qhseMetricTabs = [
+//   { label: 'LTIR(百万工时)', value: 'ltir', accent: '#3d7cff', label2: '百万工时损失工时事故率' },
+//   { label: 'TRIR(百万工时)', value: 'trir', accent: '#17b6c5', label2: '百万工时总可记录事件率' },
+//   {
+//     label: 'PMVA(百万公里)',
+//     value: 'pmva',
+//     accent: '#f2a93b',
+//     label2: '百万公里可预防性交通事故率'
+//   }
+// ] as const
+
+const qhseMetricTabs = computed(() => [
+  {
+    label: t('qhse.indexvue325112-112'),
+    value: 'ltir',
+    accent: '#3d7cff',
+    label2: '百万工时损失工时事故率'
+  },
   {
-    label: 'PMVA(百万公里)',
+    label: t('qhse.indexvue325112-113'),
+    value: 'trir',
+    accent: '#17b6c5',
+    label2: '百万工时总可记录事件率'
+  },
+  {
+    label: t('qhse.indexvue325112-114'),
     value: 'pmva',
     accent: '#f2a93b',
     label2: '百万公里可预防性交通事故率'
   }
-] as const
+])
 
 const activeQhseMetric = ref<QhseMetricValue>('ltir')
 const dangerGradeOptions = computed(() => getStrDictOptions(DICT_TYPE.DANGER_GRADE))
@@ -273,41 +316,44 @@ const qhseTrendSeries = ref<Record<QhseMetricValue, Array<{ year: string; value:
   ]
 })
 
-const bottomCards = ref([
+const bottomCards = computed(() => [
   {
-    title: '体系合规',
+    title: t('qhse.indexvue325112-93'),
     icon: Files,
     accent: '#39c6cc',
     glow: 'rgba(57, 198, 204, 0.22)',
-    lines: ['内审已完成', '外审待安排']
+    lines: [t('qhse.indexvue325112-98'), t('qhse.indexvue325112-99')]
   },
   {
-    title: '安全检测',
+    title: t('qhse.indexvue325112-94'),
     icon: Histogram,
     accent: '#4f8dff',
     glow: 'rgba(79, 141, 255, 0.2)',
-    lines: ['在用: 0台', '待检: 0项(重点关注)']
+    lines: [
+      `${t('qhse.indexvue325112-100')}: 0${t('stat.availabili107902-1')}`,
+      `${t('qhse.indexvue325112-101')}: 0${t('qhse.indexvue325112-102')}(${t('qhse.indexvue325112-103')})`
+    ]
   },
   {
-    title: '应急演练',
+    title: t('qhse.indexvue325112-95'),
     icon: AlarmClock,
     accent: '#ff5b61',
     glow: 'rgba(255, 91, 97, 0.22)',
-    lines: ['年度应急演练:80次']
+    lines: [`${t('qhse.indexvue325112-104')}:80${t('qhse.indexvue325112-105')}`]
   },
   {
-    title: '职业健康',
+    title: t('qhse.indexvue325112-96'),
     icon: Checked,
     accent: '#f2c11a',
     glow: 'rgba(242, 193, 26, 0.2)',
-    lines: ['职业健康体检率', '98.7%(达标)']
+    lines: [`${t('qhse.indexvue325112-106')}`, `98.7%(${t('qhse.indexvue325112-107')})`]
   },
   {
-    title: '危废管控',
+    title: t('qhse.indexvue325112-97'),
     icon: Flag,
     accent: '#28c98b',
     glow: 'rgba(40, 201, 139, 0.2)',
-    lines: ['危废暂存合规', '三废处置100%达标']
+    lines: [`${t('qhse.indexvue325112-108')}`, `${t('qhse.indexvue325112-109')}`]
   }
 ])
 
@@ -382,7 +428,7 @@ async function getStatic() {
     const item = staticData.value[index]
     if (!item) return
     zone.value = item.count || 0
-    zone.title = `${item.classify}`
+    zone.title = `${item.classify}`
   })
 }
 
@@ -404,7 +450,7 @@ async function getInstrumentOverview() {
   instrumentExpired.value = statData.expired || 0
 
   bottomCards.value[1].lines = [
-    `在用: ${total.value}台`,
+    `${t('qhse.indexvue325112-100')}: ${total.value}台`,
     `待检: ${instrumentExpired.value}项(重点关注)`
   ]
 }
@@ -450,7 +496,7 @@ function getHazardChartOption(): echarts.EChartsOption {
     },
     yAxis: {
       type: 'value',
-      name: '隐患数量',
+      name: t('qhse.indexvue325112-79'),
       nameLocation: 'end',
       nameGap: 13,
       nameTextStyle: {
@@ -560,7 +606,7 @@ function getSafeDayChartOption(): echarts.EChartsOption {
       formatter(params: any) {
         if (!params || (Array.isArray(params) && params.length === 0)) return ''
         const item = Array.isArray(params) ? params[0] : params
-        return `${item.name}<br/>安全生产天数:<span style="font-weight:700">${item.value}</span>`
+        return `${item.name}<br/> ${t('qhse.indexvue325112-92')}:<span style="font-weight:700">${item.value}</span>`
       }
     }),
     xAxis: {
@@ -601,7 +647,7 @@ function getSafeDayChartOption(): echarts.EChartsOption {
     },
     series: [
       {
-        name: '安全生产天数',
+        name: t('qhse.indexvue325112-92'),
         type: 'bar',
         data: safeDayBarData.value.map((item) => item.value),
         barWidth: 22,
@@ -636,7 +682,7 @@ function getSafeDayChartOption(): echarts.EChartsOption {
         left: 'center',
         bottom: 0,
         style: {
-          text: '安全生产天数',
+          text: t('qhse.indexvue325112-92'),
           fill: '#5b6f8f',
           font: `700 12px ${FONT_FAMILY}`
         }
@@ -672,7 +718,7 @@ function destroySafeDayChart() {
 
 function getQhseTrendChartOption(): echarts.EChartsOption {
   const activeTab =
-    qhseMetricTabs.find((item) => item.value === activeQhseMetric.value) || qhseMetricTabs[0]
+    qhseMetricTabs.value.find((item) => item.value === activeQhseMetric.value) || qhseMetricTabs[0]
   const seriesData = qhseTrendSeries.value[activeQhseMetric.value] || []
 
   return {
@@ -1316,7 +1362,7 @@ onUnmounted(() => {
           </div>
 
           <div v-if="activeSummaryTab === 'home'" class="summary-toolbar__date">
-            <span class="summary-toolbar__date-label">日期:</span>
+            <span class="summary-toolbar__date-label">{{ t('qhse.indexvue325112-75') }}:</span>
 
             <div class="flex items-center gap-2 datepicker">
               <el-date-picker
@@ -1357,7 +1403,7 @@ onUnmounted(() => {
           <section class="panel summary-panel kb-stage-card kb-stage-card--1">
             <div class="panel-title">
               <span class="icon-decorator"><span></span><span></span></span>
-              QHSE关键数据
+              {{ t('qhse.indexvue325112-67') }}
             </div>
             <div class="summary-grid">
               <article
@@ -1428,7 +1474,7 @@ onUnmounted(() => {
               <section class="panel board-panel kb-stage-card kb-stage-card--3">
                 <div class="panel-title panel-title--center">
                   <span class="icon-decorator"><span></span><span></span></span>
-                  QHSE指标
+                  {{ t('qhse.indexvue325112-68') }}
                 </div>
 
                 <section class="board-panel kb-stage-card kb-stage-card--5">

+ 1 - 1
src/views/pms/stat/inspect.vue

@@ -13,7 +13,7 @@
                   :model="queryParams"
                   ref="queryFormRef"
                   :inline="true"
-                  label-width="80px">
+                  label-width="auto">
                   <el-form-item :label="t('stat.inspectvue702065-1')" prop="project_name">
                     <el-tree-select
                       v-model="queryParams.deptId"