a1a2d86b0b
build(ci): 新增 Jenkinsfile + docker-compose 部署模板
...
- Jenkinsfile:master→PROD(172.17.16.14)、release/next→STAGING(172.17.16.7)
镜像推 172.17.16.7:5000/aiot-platform-ui,宿主机暴露 80
- docker-compose.frontend.yml:nginx 容器加入 1panel-network 走后端 aiot-gateway 反代
2026-04-28 14:40:17 +08:00
ba8509dc66
style(@vben/docs): markdownlint 自动格式化设计稿
...
lint-md 对上一条设计稿做了表格管道对齐和多空格归一化,
收进单独提交保持每次提交可 diff。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-23 20:27:56 +08:00
6b8a05cc4d
docs: 补充用户-项目绑定功能设计稿
...
记录本轮 feat/multi-tenant-project 分支的需求背景、双入口绑定
方案与前后端联动约定,供后续回溯决策。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-23 20:27:09 +08:00
6b8626907e
feat(@vben/web-antd): Lottie 品牌加载动画(主题色自适应)
...
- 新增全局 loading:自定义 apps/web-antd/loading.html 覆盖 inject-app-loading
的默认模板,Vue 挂载前就能播放品牌动画
- 新增 LottieLoading 组件,用于 SSO 回调等"白屏时间偏长"的运行时场景
- 换色方案:Lottie JSON 里原本 5 档硬编码绿色,按当前主题 colorPrimary
生成 5 档 HSL 亮度做指纹替换。挂载前从 localStorage preferences 读色,
挂载后读 CSS 变量 --primary,两条路径共用 public/lottie-theme-patch.js
一份 classic-JS 源,window.__LottieThemePatch__ 上暴露
- vite 插件:启动/构建时从 node_modules 把 lottie_light.min.js 拷到
public/ 供 loading.html <script> 加载;.gitignore 排除该产物
- LottieLoading 复用 loading.html 已经挂好的 window.lottie,不再把
~170KB 播放器再打进 Vue 产物
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-23 20:26:48 +08:00
348e40e9c2
style(@vben/web-antd): 项目成员管理模块格式微调
...
lint 自动格式化:长签名/标题换行、import 顺序、空元素展开;
顺手移除 new Set(undefined) 无意义的 `?? []` 兜底。无行为变更。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-23 20:25:19 +08:00
86a3c1f97b
fix(@vben/web-antd): SSO callback 改走 body 传递 code/state
...
授权 code 原先以 query 形式发给 /system/sso/callback,会被 nginx access
log、浏览器历史和 Referer 捕获。改走 POST body,与后端 @RequestBody
SsoCallbackReqVO 对齐,避免一次性码泄露给中间层。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-23 20:24:52 +08:00
09538b03cb
feat(@vben/web-antd): 项目成员管理改 Drawer + 分页 + 增量
...
从 Modal 多选改为 Drawer 分页表,更接近"成员管理"语义:
- 原 assign-user-form.vue 重写为 Drawer + Vxe 分页表
- 新增 add-user-modal.vue 子弹窗用于添加用户(过滤已是成员)
- 每行一个"移除"popConfirm 按钮,调 removeProjectUser 单删
- 顶部 keyword 搜索,按 username/nickname/mobile 模糊
- 底部提示:超管不在此列表(后端已过滤)
- data.ts 新增 useProjectMemberGridColumns
- api 新增 getProjectUserPage / addProjectUsers / removeProjectUser
- project/index.vue 接入点改 useVbenDrawer
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-23 15:48:43 +08:00
b15b6b4f4d
feat(@vben/web-antd): 用户-项目绑定管理双入口
...
- 用户管理页:下拉操作新增 "分配项目" 按钮 + assign-project-form.vue 弹窗
沿用现有 assign-role-form 的交互(多选 + 覆盖写入)
- 项目管理页:行操作新增 "管理成员" 按钮 + assign-user-form.vue 弹窗
下拉支持搜索用户 nickname/username
- 新建 api/system/user-project/ 封装 4 个接口
- api/system/project 新增 getAllProjectSimpleList:
顶栏 simple-list 已改为用户授权过滤,管理员分配场景需要全量下拉
- 空集保存二次确认:清空所有分配/成员时弹 AntModal.confirm,防误操作
- 权限点:system:user:assign-project / system:project:assign-user
设计文档:docs/design/2026-04-23-user-project-binding.md
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-23 14:51:09 +08:00
20251316ae
chore: 忽略根目录 CLAUDE.md(本地 AI 上下文文件)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-22 23:46:08 +08:00
37acdcf394
feat(@vben/web-antd): 顶栏项目切换器 + 物联运维平台 SSO 无感跳转
...
- 顶栏 TenantDropdown 替换为 ProjectDropdown(新建 widget)
- 进入时拉 /system/project/simple-list;仅当本地 projectId 不在列表时
才回退到首项,避免静默改写用户选择
- 空列表不渲染,避免出现永远空下拉
- 新增"物联运维"按钮,走 OAuth2 authorization code 流程跳 IoT 前端
- state 使用 crypto.randomUUID() / getRandomValues() 生成(CSRF 防护)
- VITE_IOT_BASE_URL 未配置时按钮隐藏,不再硬编码兜底 URL
- 使用原生 <button disabled> 替代 <a role="button">,修复可访问性
- 新增 /sso-callback 回调页 + /system/sso/callback API
- 挂载后立即 history.replaceState 清 code/state,避免二次 exchange
- API 层做 snake_case → camelCase 映射,统一前端风格
- 文档化 redirectUri 必须与 OAuth2 客户端 redirectUris 白名单一致
- authStore 新增 ssoLogin,与 authLogin 抽取共用 postAuthSuccess
- token 为空直接抛错,fetchUserInfo 失败回滚 token 避免 401 循环
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-22 23:43:44 +08:00
72ed0eb5aa
feat(@vben/web-antd): 支持按 platform 过滤多前端菜单
...
业务平台 (biz) 与物联运维平台 (iot) 共享同一后端,需按前端来源过滤菜单,
避免同一角色在两端看到相同菜单。
- 新增 CLIENT_ID 常量,请求拦截器 / 基础 client 统一注入 X-Client-Id 头,
后端密码登录 & refresh-token 据此绑定 token 的 client/platform
- SystemMenuApi.Menu 增加 platform 字段
- 菜单表单新增"所属平台"选择项(PLATFORM_OPTIONS),为 null 则两端共享
配合后端迁移 sql/mysql/migrations/2026-04-20_oauth2_client_platform.sql。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-22 23:40:19 +08:00
93bfef06a4
style(@vben/web-antd): lint 自动格式化项目管理页面
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-16 23:11:06 +08:00
44b2dd9d05
feat(@vben/web-antd): 项目管理前端页面和请求拦截器适配
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-16 23:08:25 +08:00
5faaa3c051
chore: build and deploy web-antd
Web UI CI/CD / build-and-deploy (push) Successful in 8s
2026-04-14 09:33:13 +08:00
615e928929
style(@vben/web-antd): 修正 linter 自动格式化残留
...
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-14 09:14:44 +08:00
86486f77dc
feat(@vben/web-antd): 重设计保洁派单弹窗,修复多项交互缺陷
...
- 全新 UI:工牌卡片支持昵称显示、彩色头像、状态 pill、电量图标
- 修复工牌状态大小写 bug(后端返回小写 idle/busy,前端统一转大写)
- 离线工牌不可点击,选中状态高亮并显示已选工牌名
- 提取 BADGE_STATUS_CONFIG 到 data.ts 统一维护
- 头像色改用字符串哈希,避免大 Long 精度丢失
- handleSubmit 添加 confirmLoading 防重复提交,补充 catch 错误提示
- assigneeName 安全访问(去除非空断言)
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-14 09:12:13 +08:00
084dc51846
fix(@vben/web-antd): 修复工单详情页操作接口错误
...
- 取消/升级优先级弹窗补传 orderType,修复无法识别工单类型的问题
- 新增非待分配状态下的"转派"入口(QUEUED/DISPATCHED/CONFIRMED/ARRIVED)
- 语音提醒从 IoT 原生接口改为 /ops/clean/device/notify
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-13 23:50:18 +08:00
2d2197d40d
fix(@vben/web-antd): 修复工牌状态接口类型定义
...
- BadgeStatusItem 新增 nickname 字段
- batteryLevel 类型修正为 number | null
- ManualDispatchReq 新增 assigneeName 字段
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-04-13 23:48:27 +08:00
2d89503192
chore: build and deploy web-antd
Web UI CI/CD / build-and-deploy (push) Successful in 7s
2026-04-07 23:09:46 +08:00
26aad7b5f4
fix(@vben/web-antd): 工单日志时间改为显示精确时间
2026-04-07 22:13:15 +08:00
60e00ae3d7
chore: build and deploy web-antd
Web UI CI/CD / build-and-deploy (push) Successful in 8s
2026-04-07 13:10:14 +08:00
93498273eb
fix(@vben/web-antd): 修复甘特图组件 props 丢失导致运行时崩溃
...
linter 在 pre-commit 过程中移除了 defineProps/defineEmits,
导致 props 变量未定义,computed 计算 autoRange 等时抛出
ReferenceError: props is not defined
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-07 13:06:18 +08:00
b651e9ae25
chore: build and deploy web-antd
Web UI CI/CD / build-and-deploy (push) Successful in 8s
2026-04-07 13:03:22 +08:00
c3e3389868
fix(@vben/web-antd): 修复工单详情工牌状态字段对齐及依赖清理
...
- work-order/detail: 工牌状态 lastHeartbeatTime→onlineTime,移除 rssi 展示
- trajectory/api: lint 修正(移除冗余空行)
- badge-status-card: linter 格式修正
- pnpm-lock: 更新依赖锁定文件
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-05 15:38:57 +08:00
cc98ba4d0b
feat(@vben/web-antd): 重构轨迹页面子组件
...
trajectory-gantt-area:
- 数字孪生甘特图,纵轴加载完整区域树,仅显示有数据区域
- 区域树缓存提取到 area-tree-cache.ts,单例 Promise 防并发重复请求
- 支持时段预设(自适应/全天/上午/下午/工作时段)和 1x-16x 缩放
- tooltip 类型安全:record 改为 null | TrajectoryRecord
badge-status-card:
- 新增实时轨迹时间线(最近15条,倒序展示)
- 排序改用 toSorted + dayjs valueOf
area-stay-chart:
- 显示 fullAreaName 全路径,标签内置于条形,统一高度 260px
trend-chart:
- 进入改蓝色,离开改橙色
- 修复 height 缺少 px 单位导致图表不渲染
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-05 15:37:59 +08:00
3a14de4d1c
feat(@vben/web-antd): 重构工牌轨迹页面核心逻辑
...
- 接口调用:timeline/summary/hourly-trend/area-stay-stats 并行请求
- 轨迹加载:选中设备用 timeline 接口,deviceId 为空时不传参
- 时间规范化:支持毫秒时间戳/数组/字符串三种后端格式
- 轮询策略:今日每5分钟刷新,实时状态每10秒,历史日期不轮询
- badge 搜索加 300ms 防抖
- onMounted 并行加载工牌列表、数据和区域树
- 移除 useTrajectoryColumns 死代码
- 哈希函数改用 Math.trunc + codePointAt,移除非空断言
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-05 15:30:37 +08:00
1468a4062b
feat(@vben/web-antd): 对齐后端轨迹与工牌接口 DTO 类型定义
...
- TrajectoryRecord 新增 fullAreaName、TimelineQuery.deviceId 改为可选
- AreaStayStats 新增 fullAreaName 字段
- BadgeRealtimeStatus 字段对齐后端:lastHeartbeatTime→onlineTime,移除 rssi
- 新增 TrajectorySummary、HourlyTrend、AreaStayStats 统计接口及类型
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-05 15:25:31 +08:00
c16d049c38
chore: build and deploy web-antd
Web UI CI/CD / build-and-deploy (push) Successful in 8s
2026-03-31 23:16:25 +08:00
af034080ba
feat(@vben/web-antd): 区域树默认展开园区和楼栋节点
2026-03-31 22:55:55 +08:00
f5f488080c
fix(@vben/web-antd): 修正工单详情步骤展示与状态分布配色
2026-03-31 22:55:34 +08:00
16434a0d88
feat(@vben/web-antd): 新增工牌出入轨迹页面
2026-03-31 22:54:45 +08:00
91cd7adc39
chore: build and deploy web-antd
Web UI CI/CD / build-and-deploy (push) Successful in 9s
2026-03-27 16:58:19 +08:00
69edf26550
style(@vben/web-antd): lint 自动格式化修正工单模块
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-27 16:54:07 +08:00
cc2d7a0a04
feat(@vben/web-antd): 手动创建工单分步弹窗 + code review 修复
...
新增手动创建工单功能,分3步:选类型→选区域(TreeSelect全路径)→填表单。
优先级使用字典值,按工单类型动态显示保洁/安保专属字段。
- 新增 create-order-form.vue 分步创建弹窗组件
- work-order/index.vue 挂载弹窗替换占位
- card-view.vue 补充 OpsOrderCenterApi 类型导入
- 还原 auth.ts 误删的 visitTenantId 逻辑
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-27 16:52:15 +08:00
84cb4930fd
refactor(@vben/web-antd): 删除保洁工单中心,统一使用通用工单中心
...
保洁工单中心与通用工单中心功能重叠,统一入口避免歧义。
- 删除 views/ops/cleaning/work-order 整个目录
- 迁移 cleaning-actions/detail-ext/work-progress 组件到 work-order/components/
- 迁移 CLEANING_TYPE_OPTIONS/TEXT_MAP 到 work-order/data.ts
- 删除路由中保洁工单详情和看板两条路由
- 更新详情页组件引用路径
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-27 16:48:13 +08:00
6ca2833df6
refactor(@vben/web-antd): 工单操作接口按业务线拆分(保洁/安保)
...
后端 OpsOrderController 移除了 assign/cancel/complete/create 通用接口,
改由 CleanWorkOrderController 和 SecurityOrderController 各自提供 manual-* 系列接口。
- 新增 api/ops/security/index.ts 安保工单操作 API
- cleaning/index.ts 新增 manualCreate/Dispatch/Cancel/UpgradePriority
- order-center/index.ts 移除 assignOrder/cancelOrder
- 表单组件按工单类型路由到对应 API
- cancel-form/upgrade-priority-form 支持 orderType 区分调用路径
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-27 16:45:11 +08:00
c6e51a215f
chore: build and deploy web-antd
Web UI CI/CD / build-and-deploy (push) Successful in 10s
2026-03-25 16:05:53 +08:00
0dbdba336f
style(@vben/web-antd): lint 自动格式化修正工单模块
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-25 15:45:07 +08:00
506625164c
feat(@vben/web-antd): 安保工单详情左图右表布局改造及工单模块代码质量优化
...
- 安保详情事件信息改为左图右表布局,新增摄像头名称和处理人手机号字段
- 工单卡片展示处理人手机号,时间字段类型兼容时间戳和格式化字符串
- 工单详情页安保扩展区位置下移,安保工单隐藏重复的执行人行
- 登录后默认设置访问租户为登录租户
- 修复 scoped 暗色模式选择器不生效问题,移除 as any 类型断言
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-25 15:43:24 +08:00
de95c707a0
style(@vben/web-antd): lint 自动格式化修正工单模块
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-25 11:37:48 +08:00
9d2e7d9e13
style(@vben/web-antd): P0 紧急工单卡片改为右上角渐变光晕标识
...
- 移除左侧红色竖条(border-left),改为右上角径向渐变
- 渐变色与 P0 标签色系协调(#C01D1D 14% 不透明度)
- 暗色模式适配渐变加深至 18%
- 移除 overflow:hidden 避免裁切子元素阴影
- 状态标签改为 span + inline style 双色渲染
- 同步更新 cleaning/work-order 卡片视图
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-25 11:36:56 +08:00
0772a12074
feat(@vben/web-antd): 工单详情取消状态进度条改造及代码质量优化
...
- 取消状态下进度条展示 timeline 实际节点,末尾追加"已取消"终态
- 已走过节点灰色实心,取消终态节点深灰,进度线灰色
- 移除底部红色 cancelled-banner,改为进度条内联展示
- 进行中节点蓝色标签改为显示到达时间
- 提取 isCurrentActive / getStepTime 简化模板逻辑
- timeline 去重防御异常数据,取消终态改用索引判断
- 移除 progress-steps-wrapper 的 overflow:hidden 避免裁切光晕
- 清理无引用的 cancelled-banner CSS
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-25 11:36:19 +08:00
d0395ba40a
style(@vben/web-antd): 统一工单中心配色方案为柔和浅底双色风格
...
- STATUS_COLOR_MAP / ORDER_TYPE_COLOR_MAP 由单色改为 { bg, text } 双色结构
- 新增 FACILITIES / SERVICE 工单类型配色
- 优先级配色改为按数值直接映射(P0~P3),不再依赖字典 colorType
- Tag 组件替换为 span + inline style,精确控制背景色与文字色
- 仪表板饼图 STATUS_COLORS 同步更新
- 同步更新 cleaning/work-order 模块保持一致
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-25 11:35:37 +08:00
7d22e4b395
fix: 修改文件上传大小限制20M
Web UI CI/CD / build-and-deploy (push) Successful in 10s
2026-03-24 18:59:41 +08:00
c700ab38f4
chore: build and deploy web-antd
Web UI CI/CD / build-and-deploy (push) Successful in 9s
2026-03-24 09:48:00 +08:00
0d505737b9
style(@vben/web-antd): lint 自动格式化修正 login.vue
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-24 09:45:59 +08:00
9c822ba9d9
fix(@vben/web-antd): 企微扫码登录前校验租户是否已选择
...
多租户模式下,未选择租户时点击企微扫码登录会触发
租户字段校验提示,避免无租户请求导致后端报错。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-24 09:44:21 +08:00
2c678c3a82
fix(@vben/web-antd): 优化企业微信扫码登录体验
...
自动社交登录时显示 loading 状态,跳过租户列表加载,
避免闪烁显示登录表单和租户错误信息。
租户 ID 已持久化在 store 中,无需重新获取。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-24 09:38:05 +08:00
f77a8c3e4c
chore: build and deploy web-antd
Web UI CI/CD / build-and-deploy (push) Successful in 8s
2026-03-24 09:30:39 +08:00
7aff45ddf5
fix(@vben/web-antd): 企业微信扫码登录适配 hash 路由模式
...
hash 路由下 OAuth 回调 code/state 在 URL query 中,Vue Router
读不到。登录流程同绑定流程一样通过 sessionStorage 中转参数,
路由守卫检测后重定向到 social-login 页面完成登录。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-24 09:19:18 +08:00