src/utils/request.js
@@ -11,6 +11,29 @@ // 是否显示重新登录 export let isRelogin = { show: false } /** * 全局日期展示口径:**页面上所有时间只显示年月日,不显示时分秒**。 * 后端返回的 `datetime/timestamp` 是 "2026-05-23 10:30:00"(或带 T / 毫秒的 ISO 形式), * 这里在响应拦截器里递归把它统一截断成 "2026-05-23", * 覆盖所有直接用 `prop` 渲染、不走 `parseTime` 的表格列 / 详情弹框 / 图表。 * 只匹配严格的日期时间串,不会误伤普通文本。 */ const DATE_TIME_RE = /^(\d{4}-\d{2}-\d{2})[ T]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?$/ function trimDateTimeDeep(value, depth = 0) { if (value === null || value === undefined) return value if (typeof value === 'string') { const m = DATE_TIME_RE.exec(value) return m ? m[1] : value } if (typeof value !== 'object' || depth > 12) return value if (Array.isArray(value)) { for (let i = 0; i < value.length; i++) value[i] = trimDateTimeDeep(value[i], depth + 1) return value } for (const key of Object.keys(value)) value[key] = trimDateTimeDeep(value[key], depth + 1) return value } axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' // 创建axios实例 const service = axios.create({ @@ -104,7 +127,8 @@ ElNotification.error({ title: msg }) return Promise.reject('error') } else { return Promise.resolve(res.data) // 全局:把响应里所有 datetime 截断为「年月日」再交给页面 return Promise.resolve(trimDateTimeDeep(res.data)) } }, error => { src/views/basicData/customerFile/index.vue
@@ -269,7 +269,7 @@ <el-date-picker v-model="reminderForm.reminderTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" placeholder="请选择提醒时间" style="width: 100%" /> </el-form-item> @@ -337,7 +337,7 @@ <el-date-picker v-model="negotiationForm.followUpTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" placeholder="请选择" style="width: 100%" /> </el-form-item> src/views/collaborativeApproval/notificationManagement/index.vue
@@ -155,7 +155,7 @@ v-model="meetingForm.startTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" placeholder="请选择开始时间" style="width: 100%" /> src/views/collaborativeApproval/rulesRegulationsManagement/index.vue
@@ -103,7 +103,7 @@ prop="effectiveTime"> <el-date-picker v-model="regulationForm.effectiveTime" type="datetime" format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择生效时间" style="width: 100%" /> src/views/equipmentManagement/repair/Modal/MaintainModal.vue
@@ -25,7 +25,7 @@ <el-date-picker v-model="form.maintenanceTime" placeholder="请选择维修日期" format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" clearable src/views/equipmentManagement/spareParts/index.vue
@@ -257,8 +257,27 @@ } const res = await getSparePartsList(params); if (res.code === 200) { renderTableData.value = res.data.records || []; categories.value = res.data.records || []; const records = res.data.records || []; // 「设备名称」列取的是 deviceNameStr:后端已按 device_ids 反查设备名返回; // 若后端返回为空(老版本后端),这里用已加载的设备选项兜底计算,保证列不空白。 for (const row of records) { if (!row.deviceNameStr && row.deviceIds) { const names = String(row.deviceIds).split(',') .map(id => id.trim()).filter(Boolean) .map(id => { const d = (deviceOptions.value || []).find(x => String(x.id) === String(id)); return d ? (d.deviceName || d.name || '') : ''; }).filter(Boolean); row.deviceNameStr = names.join(','); } // 备件分类行(parentId 为空)本身不绑定设备,给个占位符, // 否则这一列会出现空白单元格,看起来像"设备名称没显示"。 if (!row.deviceNameStr && (row.parentId === null || row.parentId === undefined || row.parentId === '')) { row.deviceNameStr = '—'; } } renderTableData.value = records; categories.value = records; pagination.total = res.data.total || 0; } } catch (error) { @@ -281,14 +300,16 @@ fetchListData(); } // 分页大小改变 const handleSizeChange = (size) => { pagination.size = size; pagination.current = 1; // 分页变化(PIMTable/Pagination 回传的是 { page, limit } 对象) // 2026-10-13 修复:原来写成 handleSizeChange(size) 把整个对象赋给 pagination.size, // 导致翻页请求带上 size=[object Object],第 2/3 页永远打不开(备件共 21 条却只能看到 10 条)。 const handleSizeChange = ({ page, limit } = {}) => { if (page) pagination.current = page; if (limit) pagination.size = limit; fetchListData(); } // 当前页改变 // 当前页改变(保留给需要单独绑定的场景) const handleCurrentChange = (current) => { pagination.current = current; fetchListData(); @@ -408,7 +429,9 @@ }; // 组件挂载时获取列表数据 onMounted(() => { onMounted(async () => { // 先加载设备选项,fetchListData 里用它兜底计算 deviceNameStr await loadDeviceName(); fetchListData(); }); </script> src/views/equipmentManagement/upkeep/Form/MaintenanceModal.vue
@@ -18,7 +18,7 @@ <el-date-picker v-model="form.maintenanceActuallyTime" placeholder="请选择实际保养日期" format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" clearable src/views/inventoryManagement/stockWarning/index.vue
@@ -262,7 +262,7 @@ type="datetime" placeholder="请选择预警时间" style="width: 100%" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" /> </el-form-item> </el-col> @@ -273,7 +273,7 @@ type="datetime" placeholder="请选择预计充装时间" style="width: 100%" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" /> </el-form-item> </el-col> @@ -287,7 +287,7 @@ type="datetime" placeholder="请选择预计缺气时间" style="width: 100%" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" /> </el-form-item> </el-col> src/views/inventoryManagement/transportTaskManagement/index.vue
@@ -305,7 +305,7 @@ v-model="form.loadTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm" format="YYYY-MM-DD" placeholder="请选择装货时间" style="width: 100%" /> @@ -317,7 +317,7 @@ v-model="form.deliveryTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm" format="YYYY-MM-DD" placeholder="请选择送货时间" style="width: 100%" /> @@ -329,7 +329,7 @@ v-model="form.signTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm" format="YYYY-MM-DD" placeholder="请选择签收时间" style="width: 100%" /> src/views/monitor/logininfor/index.vue
@@ -37,7 +37,7 @@ <el-form-item label="登录时间" style="width: 308px"> <el-date-picker v-model="dateRange" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" type="daterange" range-separator="-" start-placeholder="开始日期" src/views/monitor/operlog/index.vue
@@ -61,7 +61,7 @@ <el-form-item label="操作时间" style="width: 308px"> <el-date-picker v-model="dateRange" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" type="daterange" range-separator="-" start-placeholder="开始日期" src/views/qualityManagement/afterSalesTraceability/index.vue
@@ -223,7 +223,7 @@ v-model="form.feedbackTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm" format="YYYY-MM-DD" placeholder="请选择反馈时间" style="width: 100%" /> src/views/safeProduction/accidentReportingRecord/index.vue
@@ -77,7 +77,7 @@ <el-date-picker style="width: 100%" v-model="form.happenTime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" type="datetime" placeholder="请选择" clearable /> @@ -157,7 +157,7 @@ <el-date-picker style="width: 100%" v-model="form.createTime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" type="datetime" disabled placeholder="请选择" src/views/salesManagement/returnOrder/components/formDia.vue
@@ -52,7 +52,7 @@ </el-col> <el-col :span="4"> <el-form-item label="制单时间:" prop="makeTime"> <el-date-picker v-model="form.makeTime" type="datetime" style="width:100%" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" /> <el-date-picker v-model="form.makeTime" type="datetime" style="width:100%" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD" /> </el-form-item> </el-col> <el-col :span="4">