yangjingjing

yangjingjing pushed to ts at yangjingjing/risk_control_platform_ui

  • 79e5e8a973 feat(profile): 隐藏第三方应用 tab; feat(layout): 头像下拉新增个人中心/布局设置; chore(sse): 重试改为无限重试(后端断连时不再放弃)

1 månad sedan

yangjingjing pushed to master at yangjingjing/risk_control_platform_ui

  • 79e5e8a973 feat(profile): 隐藏第三方应用 tab; feat(layout): 头像下拉新增个人中心/布局设置; chore(sse): 重试改为无限重试(后端断连时不再放弃)

1 månad sedan

yangjingjing pushed to main at yangjingjing/risk_control_platform_app

  • 9e5d1cf5d0 fix(uniapp): 生产环境 BASE_API 改空字符串(适配 nginx 全反代) 之前 ba5ce50 用 /prod-api 是基于 plus-ui 部署约定的猜测,但本项目 实际生产 nginx 是 location / 全反代到 9225,没有特殊前缀。 实测: curl https://xlpt.lygjdf.net/resource/oss/upload → 200/405 通 curl https://xlpt.lygjdf.net/dev-api/resource/oss/upload → 404 curl https://xlpt.lygjdf.net/prod-api/resource/oss/upload → 404 所以生产 build:h5 必须用空 BASE_API,所有 URL 走根路径: - /resource/oss/upload - /resource/oss/proxy - /auth/login - /risk/... dev:h5 不受影响,继续走 vite proxy /dev-api → 9225

1 månad sedan

yangjingjing pushed to main at yangjingjing/risk_control_platform_app

  • ba5ce50f67 fix(uniapp): BASE_API 区分 dev / build 模式 之前 BASE_API 写死 '/dev-api': - dev:h5 模式: vite proxy 转发 /dev-api → 9225 OK - build:h5 模式: 打包后走 https://host/dev-api/... 但生产 nginx 通常不反代 /dev-api → 404 (用户实际生产 https://xlpt.lygjdf.net 就遇到 404 No endpoint) 修复: - import.meta.env.MODE === 'production' ? '/prod-api' : '/dev-api' - 与 plus-ui 部署约定一致(参见 nginx ly.conf) - 同步修改 oss.ts 走同样判断 部署:生产 nginx 需要配 location /prod-api/ { proxy_pass http://backend:9225/; # 末尾 / 把 /prod-api/ 替换成 / } dev:h5 不受影响,继续走 vite proxy /dev-api

1 månad sedan

yangjingjing pushed to main at yangjingjing/risk_control_platform_app

  • 465c2a1ad9 fix(uniapp): readonly 模式保留后端 photos + checkResult→result 映射 之前 loadDetail 不管什么模式都把 photos/result 清成空: items.value = (data.items || []).map((it) => ({ ...it, result: undefined, photos: [] // 覆盖了后端 record_item.photos })) 导致 readonly '查看详情' 显示: - 检查结果两个按钮都是空(后端 checkResult='0' 正常没映射) - 现场照片区永远空(后端 photos 被覆盖成 []) 修复:按 readonly 区分 - readonly=true: 保留后端字段 - checkResult '0'/'1' → result 'NORMAL'/'ABNORMAL' 给模板 - photos 字符串逗号分隔 → 数组 - remark → reason - readonly=false: 清空用户态字段,让用户重新填

1 månad sedan

yangjingjing pushed to main at yangjingjing/risk_control_platform_app

  • 05935517e0 fix(uniapp): H5 端图片走 oss proxy + 显式 px + Sass 修复 - 新增 utils/oss.ts: ossUrl(url) 工具 * http://xxx → /dev-api/resource/oss/proxy?url=encoded(...) * https/相对路径/data:/blob: 不动 * BASE_API 硬编码 '/dev-api',避免循环依赖 + SyntaxError - pages/inspection/check + qualityInspection/check: * <image :src> 改 ossUrl(p) 走代理,解决 H5 端 mixed content * <image @error=onPhotoError> 加载失败容错 * .photo-thumb 显式 90px×90px(H5 rpx 可能 0×0) * .photo-img 加 display:block + object-fit:cover 兜底 * 加 .photo-view-count 角标显示已选张数 * Sass 变量 $primary-color 在 scoped style 不继承,改成硬编码 #409EFF - onSubmit 位置获取独立 try-catch: * 二维码校验独立 catch(具体错误信息) * 位置获取独立 catch(失败仅 warn,不阻塞) * 跳 check 页时经纬度传 0,0

1 månad sedan

yangjingjing pushed to 5.X at yangjingjing/risk_control_platform

  • 6a0ed1548b fix(risk): queryMobileDetail 关联 record_item photos + OSS proxy @SaIgnore - SysOssController: 加 /resource/oss/proxy 代理方法 * 解决 H5 端 HTTPS 页面加载 HTTP OSS 资源 mixed content 阻止 * @SaIgnore 跳过 sa-token 鉴权(image 请求没法带 clientid header) * content-type 推断 + 1天缓存 - RiskInspectionTaskServiceImpl.queryMobileDetail: * 查 record_item (按 recordId) 关联填 task_item.photos * readonly 模式'查看详情'能看到已拍照片 * 注入 recordItemMapper

1 månad sedan

yangjingjing pushed to 5.X at yangjingjing/risk_control_platform

  • 4c6094ba6a fix(risk): mobileList 查 record 时 slot 兼容 fallback 之前 expandByTimeSlots 从 task.time_slot 拆 slot (e.g. '15:00-16:00') 传给 convertToMobileVo,但 submitPunch 时如果 bo.slot 为空,record.slot=NULL, 导致 (taskId, slot) 精确查不到 → latest=null → 走 task.planEndTime.before(now) 误判成 OVERDUE,移动端 list 看到的状态跟实际 task_status='已打卡' 不一致, task 卡片按钮显示错误,用户能反复进打卡页。 修复:convertToMobileVo 查 (taskId, slot) 查不到时,fallback 查 (taskId, slot IS NULL), 兼容老 record 没存 slot 的情况(单时段任务 submitPunch 不传 slot)。 实测:防重复测试_1553 punchStatus 从 OVERDUE → PUNCHED ✓

1 månad sedan

yangjingjing pushed to 5.X at yangjingjing/risk_control_platform

  • fe21f36ee8 fix(risk): submitPunch 防重复打卡 之前 submitPunch 完全没去重,同一 task 可以反复打卡,每次都新建 record, PC 端打卡记录 dialog 里看到一长串重复的'已打卡'条目。 修复:第 1 步后加防重复判断,按 (taskId, slot) 查 record: - 单时段/非每日任务:slot 为空,按 taskId 查 - 每日多时段任务:slot='HH:mm-HH:mm',按 (taskId, slot) 查 - 已有 record → throw ServiceException('已打卡,请勿重复打卡') (用 ServiceException 而非 IllegalArgumentException,被 RuoYi GlobalExceptionHandler 统一处理成 500 + msg,前端 request 拦截器把 msg 当 Error.message 抛出, check 页 catch 后弹 toast 给用户)

1 månad sedan

yangjingjing pushed to master at yangjingjing/risk_control_platform_ui

  • a366c9a675 chore: sync .eslintrc-auto-import.json

1 månad sedan

yangjingjing pushed to ts at yangjingjing/risk_control_platform_ui

  • a366c9a675 chore: sync .eslintrc-auto-import.json

1 månad sedan

yangjingjing pushed to main at yangjingjing/risk_control_platform_app

  • 7ec70df5ef fix(uniapp): 扫码链路 4 个关键 bug 1. request.ts: 加 safeStringifyLongIds 全局拦截 解析前用正则把 long-id 字段(id/taskId/userId/...)从数字转字符串, 解决雪花 ID (2.08e18) 超过 Number.MAX_SAFE_INTEGER (9.0e15) 导致的 JS Number 精度丢失(JSON.stringify 末位被 round 掉) 2. api/inspection.ts: verifyQrCode 字段名修正 data: { taskId, qrContent } → { taskId, qrCode: qrContent } 之前移动端发的字段名跟后端 VerifyQrBo 不一致,qrCode 收到 null 3. scan/index.vue (巡检 + 品控): taskId 改 string 防止 onLoad Number(q.taskId) 精度丢失 4. scan/index.vue (巡检 + 品控): 扫码流程改进 - lastFailedQr 冷却 1.5s,防止 raf 反复命中同 QR 弹错 - resumeScan: 不匹配/异常时清空结果 + 重启 H5 scanner (修 bug: h5StopScanner 把 h5Stream 置 null,resumeScan 不能用 h5Stream 作判断) - 位置获取独立 try-catch,失败不阻塞扫码流程 (H5 端用户没授权位置时不再弹'校验失败') - 错误消息细分:二维码校验失败带具体原因 5. .gitignore: 加 cert/(自签 H5 证书,不入库) 参考: api/qualityInspection.ts 之前就是对的(qrCode),证明此次修复对齐

1 månad sedan

yangjingjing pushed to 5.X at yangjingjing/risk_control_platform

  • 58adaf65ca fix(risk): verifyQr 接收 string taskId(防 JS 雪花 ID 精度丢失) - VerifyQrBo.taskId: Long → String(@NotBlank) - 两个 verifyQr Controller:加 Long.parseLong 转换,失败 R.fail - 原因:雪花 ID (2.08e18) 超过 JS Number.MAX_SAFE_INTEGER (9.0e15), 移动端 JSON.stringify 时末位精度丢失,后端 selectById 查不到任务

1 månad sedan

yangjingjing pushed to master at yangjingjing/risk_control_platform_ui

  • 915eafaefa feat(risk): 巡检任务编辑 - 扫码时间根据巡检时段自动同步 之前扫码开启时间/扫码间隔是独立输入字段,跟 timeSlotList 完全脱钩, 导致多时段任务时扫码窗口只覆盖部分时段(例:开启 16:09 + 间隔 30min 只能覆盖 16:10-17:00,18:10-19:00 就扫不上)。 新增 watch(timeSlotList) → syncScanTime: - 首个 slot 的开始 → scanStartTime (今天日期 + HH:mm:00) - 末个 slot 的结束 - 首个 slot 的开始 → scanIntervalSec (秒) - 仅 cycle='每日' 生效(其他周期用 dayOfWeek/dayOfMonth) - 无 slot 时不动,保留默认/手动值 在巡检时间标签下方加 hint 提示自动同步结果,绿色加粗关键值, 让用户一眼看到是 watch 算出来的。 测试: 扫码测试任务_2026 (slot=09:00-18:00) 编辑时 - scanStartTime 自动同步为 2026-07-23 09:00:00 - scanIntervalSec 自动同步为 32400 (9 小时)
  • a22af8d1d6 feat(risk): 地图选点组件 + 字典化 + 审计 UI 重做 + 401 修复 新增: - src/components/MapPickerDialog: 腾讯地图弹框选点,自动定位/逆地理/联想搜索 修复: - request.ts 401 处理: 同步 removeToken + 绝对路径 location.href 兜底,避免 pinia 未就绪导致 '重新登录' 没反应 - personnel/index.vue 人员编辑: storeId 不在 storeOptions 时临时塞回,避免显示裸 ID - personnel/index.vue 人员 cert 保存: 物理删+insert 绕过软删 PRIMARY KEY 冲突 - workReport/index.vue 作业上报: auditStatus 字典值统一为中文(待审核/审核通过/审核不通过) - hiddenDanger/index.vue 安全隐患: dangerType 改字典驱动 risk_danger_type - personnelChange/index.vue 审计工作: 加载 audit_change_type 字典 + 文件网格 3 列 + 圆形彩色 icon + 表格 table-layout fixed - utils/request.ts 加 removeToken import 环境: - .env.development / .env.production 加 VITE_QQMAP_KEY 腾讯地图 key
  • f9fab2936f feat(inspection): 扫码任务弹窗补 3 字段(设备名称/开启时间/间隔) v-if form.scanEnabled 时弹窗额外显示: - 扫码设备名称(必填,展示用) - 扫码开启时间(el-date-picker datetime) - 扫码间隔(s)(el-input-number,默认 1800,min 60, max 86400) form 初始默认值同步加 3 字段 影响:inspectionTask + qualityInspectionTask 两边
  • eef1357ed4 fix(inspection): 巡检结果 0/1 翻译成'正常/异常'中文 + 颜色正确(绿/红) 原代码:el-tag 直接 dump 后端存的 '0'/'1' 数字 用户看到'巡检结果 0'不知道啥意思 修法: - getResultTag 加 '0'/'1' key(0=success 绿,1=danger 红) - 新增 getResultLabel(r) 翻译函数:0/1 -> 正常/异常 - 4 个 el-tag 全部用 getResultLabel(checkResult) 显示中文 影响:inspectionTask + qualityInspectionTask 两边列表打卡结果列/详情弹窗描述/项目明细表共 4 处
  • 033448ef2a fix(inspection): 打卡详情照片列从 URL 文本改为 el-image 缩略图(支持多图/点击放大) 原代码 <span v-if=checkPhotos>{{ checkPhotos }}</span> 直接 dump 字符串 改成 <el-image> 60x60 缩略图 + preview 点击放大 + preview-src-list 拼多图 影响:plus-ui/src/views/risk/inspectionTask/index.vue, plus-ui/src/views/risk/qualityInspectionTask/index.vue
  • View comparison for these 25 commits »

1 månad sedan

yangjingjing pushed to ts at yangjingjing/risk_control_platform_ui

  • 915eafaefa feat(risk): 巡检任务编辑 - 扫码时间根据巡检时段自动同步 之前扫码开启时间/扫码间隔是独立输入字段,跟 timeSlotList 完全脱钩, 导致多时段任务时扫码窗口只覆盖部分时段(例:开启 16:09 + 间隔 30min 只能覆盖 16:10-17:00,18:10-19:00 就扫不上)。 新增 watch(timeSlotList) → syncScanTime: - 首个 slot 的开始 → scanStartTime (今天日期 + HH:mm:00) - 末个 slot 的结束 - 首个 slot 的开始 → scanIntervalSec (秒) - 仅 cycle='每日' 生效(其他周期用 dayOfWeek/dayOfMonth) - 无 slot 时不动,保留默认/手动值 在巡检时间标签下方加 hint 提示自动同步结果,绿色加粗关键值, 让用户一眼看到是 watch 算出来的。 测试: 扫码测试任务_2026 (slot=09:00-18:00) 编辑时 - scanStartTime 自动同步为 2026-07-23 09:00:00 - scanIntervalSec 自动同步为 32400 (9 小时)

1 månad sedan

yangjingjing pushed to main at yangjingjing/risk_control_platform_app

  • 82a2692f09 feat(uniapp): 巡检/品控 列表-详情-扫码 透传 slot(每日多时段打卡独立) - types/inspection: PunchSubmitPayload 加 slot?: string - api/inspection: getInspectionTaskDetail(id, slot?) 加 slot 参数 - pages/inspection/list: onPunchTap / onDetailTap 跳转时拼 &slot=<slot> - pages/inspection/check: onLoad 收 slot,loadDetail 传给 API,submitPunch payload 带 slot - pages/inspection/scan: onLoad 收 slot,跳 check 时拼 slot - pages/qualityInspection/*: 同 inspection 的三处修改

1 månad sedan

yangjingjing pushed to 5.X at yangjingjing/risk_control_platform

  • c894151b0b feat(risk): 打卡按 slot 独立记录(每日多时段场景 PUNCHED 互不影响) 数据库: - risk_inspection_record 加 slot varchar(50)(每日多时段任务用) - sql/risk_inspection_record_slot.sql 幂等迁移脚本 实体/BO: - RiskInspectionRecord 加 slot 字段 - MobilePunchBo 加 slot 字段(打卡提交时携带) 服务: - submitPunch 把 slot 写入 record - convertToMobileVo 加 slot 重载,按 (taskId, slot) 查最新 record - expandByTimeSlots 每个 slot 独立调 convertToMobileVo(task, slot)(不再共享 task 级 punchStatus) - 新增 filterByPunchStatus(rows, status):expandByTimeSlots 拆解后按 vo.punchStatus 内存层二次过滤(DONE tab 只显示 PUNCHED slot,PENDING/OVERDUE 同理) - queryMobileDetail 加 (id, slot) 重载,按 slot 改 planStartTime/planEndTime Controller: - mobileDetail 加 @RequestParam slot 参数

1 månad sedan

yangjingjing pushed to 5.X at yangjingjing/risk_control_platform

  • 5c9845d4bd feat(risk): 移动端任务按 time_slot 拆 N 个待办(每日多时段场景) - MobileInspectionTaskVo 新增 slot / allTimeSlots 字段 - queryMobileList / queryQualityMobileList: 按 task.time_slot(逗号分隔)拆成多个 vo,每个 vo.planStartTime/planEndTime 改为今天 + slot 起止时间 - 新增 expandByTimeSlots / parseTimeSlots / mergeDateTime 私有方法 - punchStatus 共享 task 级别(同 task 一次打卡所有 slot 都视为已打卡) - 未打卡 slot 当前时间 > planEndTime → 单标 OVERDUE

1 månad sedan

yangjingjing pushed to 5.X at yangjingjing/risk_control_platform

  • f498832578 feat(sql): 2026-07-21 巡检任务扫码字段 3 列(punch_device_name/scan_start_time/scan_interval_sec) 补 commit f6614ac7 漏存的 SQL 迁移脚本: - punch_device_name: 扫码设备名称(展示用) - scan_start_time: 扫码开启时间(二维码生效起始) - scan_interval_sec: 扫码间隔(秒),默认 1800 全部 SQL 幂等(INFORMATION_SCHEMA 判断后再 ALTER)
  • 03c41bbf4d feat(sql): 2026-07-21 巡检任务扫码字段 3 列(punch_device_name/scan_start_time/scan_interval_sec) 补 commit f6614ac7 漏存的 SQL 迁移脚本: - punch_device_name: 扫码设备名称(展示用) - scan_start_time: 扫码开启时间(二维码生效起始) - scan_interval_sec: 扫码间隔(秒),默认 1800 全部 SQL 幂等(INFORMATION_SCHEMA 判断后再 ALTER)
  • View comparison for these 2 commits »

1 månad sedan

yangjingjing pushed to 5.X at yangjingjing/risk_control_platform

  • 03c41bbf4d feat(sql): 2026-07-21 巡检任务扫码字段 3 列(punch_device_name/scan_start_time/scan_interval_sec) 补 commit f6614ac7 漏存的 SQL 迁移脚本: - punch_device_name: 扫码设备名称(展示用) - scan_start_time: 扫码开启时间(二维码生效起始) - scan_interval_sec: 扫码间隔(秒),默认 1800 全部 SQL 幂等(INFORMATION_SCHEMA 判断后再 ALTER)

1 månad sedan