TermiNexus
c97d5ffb99
feat(gerp): 部门员工点击整行弹出用户详情抽屉
...
部门详情的部门员工子表:点击行内任意位置弹出 60% 宽抽屉,抽屉内容与
/system/user-detail 页面完全一致。
为此把用户详情页内容抽成可嵌入组件 UserDetailPanel(props: userUUID,
emit: loaded/loading/navigate,defineExpose: handleEdit):
- views/system/UserDetail.vue 退化为页面外壳(路由取 UUID + DetailPage 标题/
加载态/编辑按钮),内容由面板提供,页面表现与改动前一致
- DepartmentDetail 的抽屉复用同一面板,因此抽屉里看到的就是同一份内容
顺带修掉一个既有 bug:CrudTable 原先绑定的 @row-click 在 vxe-table 上并不存在
(事件表只有 cell-click),该绑定从未触发过。现改为 cell-click,并放过
复选/单选/序号/展开列与行内按钮,避免勾选行或点操作按钮时误触发行点击。
2026-10-02 12:56:02 +08:00
TermiNexus
741d309715
feat(gerp): 工作组详情员工卡片标题显示角色数与用户数
2026-10-01 23:18:01 +08:00
TermiNexus
66304f9c5e
feat(gerp): 部门/公司详情员工卡片标题显示角色数与用户数
...
部门详情卡片标题改为「部门员工(角色数:x/用户数:y)」,
公司详情改为「员工(角色数:x/用户数:y)」:
角色数取列表 total(用户-角色关系条数),用户数取后端新增的 user_count(去重用户数)。
计数与子表同源:复用 List 接口带 WithUserCount=1 只取 1 行拿计数,保证与表格
完全相同的 DeptUUID/CompanyUUID 过滤;批量调整职务成功后与子表一起刷新。
PagedData 类型补充可选的 user_count 字段。
2026-10-01 23:16:14 +08:00
TermiNexus
dfed6ef8bc
fix(gerp): 详情卡片头只给标题图标上主色,修正操作按钮图标与文字异色
...
.detail-card-header 里的 .el-icon 原为后代选择器,把卡片头右侧 link 按钮(如 eHRM 档案的「删除」)的图标也刷成主色,与按钮 danger 文字色不一致;改为直接子选择器,按钮图标恢复随按钮自身配色。
2026-10-01 20:05:25 +08:00
TermiNexus
c76c73d203
refactor(gerp): 日期选择器 value-format 收敛为共用 columnDateValueFormat
...
CompanyDetail/DepartmentDetail/RoleDetail(公司·系统)/TenantDetail(2 处)/WorkgroupDetail/UserDetail 主编辑弹窗共 8 处复制的 el-date-picker 补齐 value-format,与 CrudFormPanel 共用 utils/column 里的同一实现,避免同类 DateField 提交报错再次出现。
2026-10-01 20:01:53 +08:00
TermiNexus
0fdaf4afba
fix(gerp): 日期字段统一回传纯日期串,修正 DateField 提交报错
...
date 类型(后端 DateField)此前按 Date 对象绑定,提交时被序列化成带时区的 ISO 时刻(2019-08-31T16:00:00.000Z),后端只接受 YYYY-MM-DD 而 500;改为 el-date-picker 显式 value-format=YYYY-MM-DD,跨时区也不会算偏一天。datetime 保持原样。列表与档案只读展示对 date 类型原样输出,不再走 UTC→本地时区转换。
2026-10-01 19:57:46 +08:00
TermiNexus
a25cae3089
feat(gerp): 支持条件显示字段 visibleWhen
...
新增 utils/column.ts isColumnVisible(按另一字段值判定),CrudFormPanel 模板与校验规则只渲染可见列,UserDetail 档案只读展示同口径;types 增加 ColumnSchema.visibleWhen。
2026-10-01 19:51:27 +08:00
TermiNexus
bf94cecea6
feat(gerp): 员工档案填写自动带出部门员工关联并隐藏该字段
...
用户详情页「点击填写/编辑」档案时,按本页 UserUUID 查该员工的主「部门员工关联」自动填充(取值即落库,后端解析出员工与部门),并隐藏表单里的选择器;查不到时(该员工尚未挂靠部门)仍显示选择器供手动选。
2026-10-01 19:39:44 +08:00
TermiNexus
6bb1edba88
feat(gerp): 新增子表单控件,员工档案展示新字段
...
CrudFormPanel 支持 type=subform(明细子表可增删行,明细数组随主表提交);新增 SubFormTable 组件;types 增加 SubFormConfig;UserDetail 档案面板按后端下发选项展示(布尔显示是/否、多选顿号分隔、部门名走关联标签、联系方式明细单独成块,类型名取后端选项)。
2026-10-01 19:36:51 +08:00
TermiNexus
f806106c88
feat(gerp): 部门详情不提供新增入口,新增 creatable 属性
...
CrudTable 新增 creatable 属性(默认 true)只隐藏「新增」按钮,保留编辑/删除/批量删除;部门详情页部门员工子表传 creatable=false —— 部门成员须走入职流程(EmployeeProfile → UserRole/UserRoleDepartment),本页只保留编辑职务与批量调整职务。
2026-10-01 16:56:44 +08:00
TermiNexus
78866514e8
fix(gerp): 修复"空草稿"误判,只看用户可填列
...
草稿判定原来比对整个表单对象,隐藏列/父级注入列/自动时间戳(CreateTime 每次打开都不同)与多选列空数组规范化都会产生差异,导致明明是空草稿仍弹恢复提示。改为写入与恢复共用 hasUserInput:仅比对表单可填列(editableFields)且值非空、与基线不同;内容清空时同步清掉旧草稿。
2026-10-01 16:16:36 +08:00
TermiNexus
0e45175bc8
feat(gerp): 空草稿自动丢弃并新增"删除草稿"操作
...
useDraftAutosave:打开新增表单时,草稿无有效内容(全空值或与表单基线一致)直接丢弃不弹窗;恢复提示按钮改为「恢复草稿/删除草稿」,右上角关闭视为稍后再看(保留草稿)。
2026-10-01 16:13:18 +08:00
TermiNexus
85fba0ef9f
fix(gerp): 实体选择器浏览面板标题去重并加宽加高
...
EntityPicker/MultiEntityPicker 浏览面板标题改用 browseTitle,占位文案已以「选择」开头时不再重复前缀;面板宽度 560->680px,列表高度 220-320 -> 420-560px。
2026-10-01 14:10:07 +08:00
TermiNexus
263375d11f
refactor(batch-position): 批量职务弹窗的部门员工树改用统一数据源
...
新增 composables/useDeptEmployeeTree.ts(部门树 → 成员的单一实现,数据源 /API/FormAPI/DeptEmployeeSearch,与 EntityPicker(treeGroup) 同源):分页拉全 + 服务端部门树组装 + 统一成员标签,单部门模式返回单个分组节点。BatchPositionDialog 的公司页 / 部门列表页 / 部门详情页三个分支改为调用它,删除各自分页拉 UserRoleSearch 再前端拼树、以及 Get/UserRoleDepartment 的重复实现;工作组相关分支(非部门树)保持不动。顺带修正未分组节点 id 未计入 groupIds 导致勾选它会被当作成员 PK 提交的问题。
2026-10-01 00:35:20 +08:00
TermiNexus
cf621cb9ec
feat(ehrm): 用户详情员工档案改为单条档案面板(去表格)
...
去掉员工档案子表,改为一人一份的档案面板:无档案且有 eHRM 权限(菜单可见)时居中显示「点击填写」(抽屉动态表单),无权限显示「无权修改」;已有档案时用 el-descriptions 键值只读展示,卡片右上角提供编辑/删除。表单与列表共用 /API/FormAPI/Columns/EmployeeProfile 列定义,UserUUID 由本页上下文注入。撤回上一版 CrudTable 的 singleRow 属性(该方案已废弃)。
2026-09-30 23:45:46 +08:00
TermiNexus
1cdc44c1d0
fix(theme): 深色模式下主色衍生色阶改用暗底混合
...
applyPrimaryColor 恒定用白色混出 --el-color-primary-light-N,而这些值写的是 documentElement 内联变量,优先级高于 Element Plus 的 html.dark 样式表,导致深色下 light-9 仍是近白(#ecf5ff),plain 按钮(底色=light-9)在深色界面里是一块近白补丁。改为按当前明暗选择混合基色:深色 light-N 混 #141414、dark-2 反向混白 0.2,取值与 EP 暗色主题逐值一致(light-9 #18222b / dark-2 #66b1ff);浅色逻辑不变。
2026-09-30 20:24:46 +08:00
TermiNexus
5e277eb167
style(app): 我的应用/授权审批图标底色与应用市场统一
...
AppMine、AppPending 的 .app-icon 底色同样由主色渐变改为 var(--el-fill-color-light),三处应用图标块样式一致;同步移除 AppMine 的 html.dark 蓝色透明底特例。
2026-09-30 20:22:31 +08:00
TermiNexus
d3e8901e19
style(app): 应用市场图标底色改为中性浅色块
...
图标底色由主色渐变(primary-light-8/7)改为 var(--el-fill-color-light),与应用/公司详情的图标块统一;同步移除 html.dark 下的蓝色透明底特例(浅色填充本身随主题自适应)。
2026-09-30 19:30:51 +08:00
TermiNexus
bdc4cc776b
fix(company): 公司详情 已启用应用 图标改按组件名渲染
...
AppIcon 存的是 Element Plus 图标组件名(UserFilled/Connection/Money 等)而非图片 URL,原实现用 img :src=AppIcon 会加载失败变成破图,且不落回默认图标。改为与 AppMarket/AppMine/AppPending 一致:el-icon + component :is=(AppIcon 或 Grid),无图标时回退默认 Grid 占位图标;顺带移除已失效的 .company-app-icon img 样式。
2026-09-30 19:24:44 +08:00
TermiNexus
507419b6d6
style(global): el-empty 统一居中
...
el-empty 默认宽度随内容收缩,作为 grid/flex 子项时会停在首列而偏左
(应用中心 /app/mine、/app/market 的 .app-grid 卡片栅格最明显)。
全局统一:grid 容器中跨满整行 + 撑满可用宽度 + 文本居中,覆盖全站 el-empty。
2026-09-30 19:08:54 +08:00
TermiNexus
0df186b5c8
fix(CrudTable): 补回 formMode 向 CrudFormPanel 的透传
...
上一轮给 CrudTable 增加 formMode(默认 drawer)时,CrudFormPanel 上的 :mode 绑定被 IDE 静默回滚,导致 mode 恒为 undefined、isDrawer 判定失败 —— 详情页子表(如部门详情页的部门员工)的新增/编辑仍以居中弹窗出现。
本次补回绑定。产物核验:CrudTable 产物中已出现 mode:e.formMode 绑定,容器分支为 isDrawer ? {direction: rtl, size: 600} : {width: 600px};入口 /assets/index-r5V6B5Zk.js。
2026-09-30 00:29:40 +08:00
TermiNexus
524d2ad630
refactor(ui): 剩余编辑/新增类表单弹窗统一改为右侧抽屉
...
承接 CrudTable formMode 默认 drawer,把页面自带的表单弹窗也统一成抽屉(direction=rtl,尺寸沿用原宽度):批量调整职务 780、编辑角色/编辑用户/支付网关配置 600、编辑工单 720、凭证详情分录编辑 900、申请企业邮箱 420、修改邮箱密码 400、编辑/新增联系人 420、申请 Gitea 账号 420、修改 Gitea 密码/一键迁移头像 400/420、修改名字/修改密码 420、邀请成员 460、修改群名 420、创建群聊 520。
保留居中弹窗(非编辑表单):EntityPicker/MultiEntityPicker 选择面板、应用市场安装与应用-职务绑定(内嵌 CrudTable)、AppConfigPage 的同步/复制/移除确认、拒绝入驻申请、审计日志与站内信详情、资产预览、写信与发送消息。
已部署:102 assets 校验一致,入口 /assets/index-xaOjq6Ha.js。
2026-09-30 00:26:28 +08:00
TermiNexus
ce3a565006
feat(components): CrudTable 新增/编辑默认改为右侧抽屉
...
formMode 默认值由 dialog 改为 drawer:全站列表页与详情页子表的新增/编辑统一走右侧抽屉(含部门/角色/租户/工作组/员工/用户/订单/产品及各业务页)。
表格本身嵌在弹窗里的场景显式传 form-mode=dialog 保持居中弹窗:应用市场「应用-职务绑定」弹窗内的 AppPosition / AppVirtualPosition / AppVirtualBinding(弹窗内再叠抽屉会错位)。
已部署:102 assets 校验一致,入口 /assets/index-COtyrWR-.js。
2026-09-29 19:13:45 +08:00
TermiNexus
bb25b6f4d6
feat(company): 公司列表编辑改抽屉 + 公司详情展示已启用应用
...
CrudFormPanel 支持 mode=drawer(CrudTable 新增 formMode prop 透传,默认仍是居中弹窗,避免表格嵌在弹窗里的场景叠抽屉);Company 列表页启用 form-mode=drawer。
公司详情页新增「已启用应用」卡片(仅管理员可见):列出该公司 InstallStatus=1 的应用,支持卸载(停用本公司安装,不动租户级/其它公司)与配置(跳 /app/config 并带 CompanyUUID 定位本公司范围)。新增 appApi.companyApps;AppConfigPage 支持 CompanyUUID 查询参数预选范围。
2026-09-29 18:50:16 +08:00
TermiNexus
2d989d5af1
fix(components): 修正 Boolean prop 缺默认值导致表格退化为只读
...
Vue 会把未传的 Boolean prop 强制转成 false,而代码按未传=undefined 判定:CrudTable 的 editable 未声明默认值,使 canEdit 恒为 false,所有未传 :editable 的表格操作栏只剩查看,新增/批量删除/行内编辑/删除全部消失(部门详情页部门员工子表即此现象);AdminBadge 的 visible 同样缺默认值,导致特权模式横幅从未显示。
两处均改用 withDefaults 显式声明默认 true,并同步部署产物(entry assets/index-Chv4xcO_.js)。
2026-09-29 13:20:53 +08:00
TermiNexus
bf46dd93a0
refactor(company): 租户/角色详情编辑改为右侧抽屉
...
- TenantDetail:编辑租户(600)、编辑企业信息(700)由 el-dialog 改 el-drawer
- RoleDetail:编辑角色(600)由 el-dialog 改 el-drawer
- 与公司/部门/工作组保持一致,表单与 footer 按钮不变
2026-09-29 12:02:18 +08:00
TermiNexus
43a03857d1
refactor(company): 公司/部门/工作组编辑改为右侧抽屉
...
- 三个详情页的编辑 el-dialog 统一改为 el-drawer(direction=rtl, size=600)
- 保留原表单与 footer 按钮,destroy-on-close 语义不变
2026-09-29 12:01:02 +08:00
TermiNexus
6a488fe452
perf(layout): 分包预热改为菜单悬停懒预取
...
- prefetchRoutes 由「登录后全量预热」改为 WarmRouteByPath 按需预热(幂等、弱网跳过)
- 侧边栏菜单项 mouseenter/focusin 触发预热;分组菜单预热其全部子页面
- 首屏零额外请求,仅预热用户已表达意图的页面
2026-09-29 12:01:01 +08:00
TermiNexus
96e0776407
perf(layout): 登录后预热用户可访问页面的分包,配合 72h 强缓存
...
- 新增 utils/prefetchRoutes:遍历静态路由表收集懒加载 loader
- menuGuarded 路由仅当其路径在用户菜单树中才预热;其余登录即可访问的直接预热
- requestIdleCallback 启动 + 限并发 3 + 间隔 150ms,弱网/省流量模式跳过
- 按可见路径集合签名去重,菜单变化(切换角色)后重新预热一次
2026-09-29 11:32:43 +08:00
TermiNexus
1b907b3bb6
feat(app): 授权审批页面按公司管理员及以上判定,并统一相关文案
...
- 新增 userStore.isCompanyAdmin(消费 CheckAdmin.is_company_admin)
- AppPending 用 isCompanyAdmin 判定并更新空态文案
- 申请成功提示与 api/app.ts 注释从「租户管理员」改为「管理员」
2026-09-28 18:23:19 +08:00
TermiNexus
a918c9d488
feat(system): 站内信页面 UI 改版,列表与详情更易读
...
- 改为 el-card 卡片布局,标题/未读数/操作按钮收进卡片头
- 列表项:未读红点 + 左侧主色边、标题右侧显示时间、元信息加分隔
- 刷新按钮同时刷新列表与未读数;无未读时禁用「全部已读」
- 详情正文改为浅底内容块(限高滚动),元信息加分隔线
- 分页增加总数显示
2026-09-28 18:03:23 +08:00
TermiNexus
5405a4dade
fix(deploy): deploy.ps1 改为先构建后替换,消除部署空窗期
...
- 旧流程先删 dist/TempLate 资源再构建,窗口期内请求 404 或命中根目录站点
- 新流程:构建 -> 同步 assets -> 最后替换 index.html -> 清理镜像目录陈旧文件
- 清理仅限 assets/ 与 tinymce/,保留 pages/ 等生产独有目录
2026-09-28 18:03:21 +08:00
TermiNexus
cdfd6f827d
feat(app): 应用市场详情抽屉加遮罩并内联安装管理
...
- 抽屉改为带遮罩阴影,点击遮罩即关闭;宽度 420 -> 560
- 将「管理」弹窗内容(全租户状态/公司级勾选/保存)内联进抽屉
- 卡片「管理」按钮改为打开抽屉,移除独立管理弹窗
- 打开抽屉预取安装数据,保存后自动刷新勾选与「已装」标记
- 修复 loadMarket 重建列表后 detailApp 引用失效
2026-09-28 17:53:57 +08:00
TermiNexus
efd7f98522
fix(talk): 实时通道连接失败时透出错误原因
...
- 新增 connect_error 监听,dispatch talk:error 携带原因
- 避免握手被拒时前端无任何提示
2026-09-28 17:42:59 +08:00
TermiNexus
d00451c924
feat(app): 应用市场卡片支持右侧详情抽屉
...
- 卡片主体点击弹出 el-drawer,展示图标/名称/简介/标签与安装管理
- 配置入口仍跳转原独立页面 /app/config
- 操作区阻止冒泡,避免误触抽屉
2026-09-28 17:42:55 +08:00
TermiNexus
2b13f72045
fix(talk): 兼容历史菜单链接(/talk/index 重定向到 /talk)
...
- 后端菜单链接历史上写过 pages/talk/index.html,前端会规范化为 /talk/index
- 前端菜单有 localStorage 缓存,加此重定向兜住缓存里的旧链接,避免点进去 404
2026-09-28 17:29:28 +08:00
TermiNexus
eb5b51a474
feat(talk): 新增 Talk 企业聊天页面(仿微信三栏)
...
- 新增 src/views/talk/{Talk.vue,GroupCreateDialog.vue}、src/api/talk.ts、src/utils/talkSocket.ts
- 引入 socket.io-client:/talk 命名空间连接、断线重连、401 自动换令牌、心跳与 typing 节流
- 会话列表 / 消息气泡区(图片预览、文件卡片、时间分组、未读红点、上滑加载更早消息)/ 群成员面板
- 建群对话框:选本公司成员 + 配额实时提示(公司群/个人群/单群人数/公司参与人数)
- 路由 /talk(menuGuarded)+ apps/index.ts 注册 + vite.config.ts 增加 /socket.io 代理(ws)
2026-09-26 23:46:41 +08:00
TermiNexus
e79e3bb28b
feat(dashboard): 欢迎页对齐原生 GERP 并移除技术栈展示
...
- 欢迎区:logo + 标题 + 欢迎语 + 每日一言(6s 轮播/点击切换/300ms 淡入淡出)+ 个人中心/快捷操作
- 欢迎区改为占满剩余空间垂直居中(对齐原生 welcome-container),去除面板边框
- 删除「系统信息」面板(含前端/表格/后端技术栈描述行)
- 快捷入口超过 10 项折叠为「展开全部(N)/ 收起」,避免菜单过多拉长页面
2026-09-26 23:46:41 +08:00
TermiNexus
1c0885126d
fix(app-config): 虚拟职务绑定按公司隔离,租户默认层不展示绑定
...
- 新增 bindingEnabled(要求明确选中公司),租户默认层不加载虚拟职务绑定并清空已展示数据、复位脏标记
- 切换范围时仅在选中公司下重新加载绑定,避免误展示/误改他司数据
- getVirtualMapping/setVirtualMapping 注释澄清:CompanyUUID 缺省回落可管理公司
2026-09-15 14:24:46 +08:00
TermiNexus
9d1d6dca93
feat(role-scope): 接入 checkAdmin 细粒度作用域,CrudTable 支持只读模式
...
- stores/user: 新增 roleScopeType/Label 与 isScopeAdmin/isDeptManager/isWorkgroupLead/isScopeMember;AdminCheckResult.role_scope 补 DeptUUID/WorkgroupUUID
- CrudTable: 新增 editable prop,false 时隐藏新增/批量删除/编辑/删除(操作列全空则整列隐藏)
- Users: 四态标题/图标/横幅色/文案,仅 member 关闭行选择与编辑
- Products/Orders: 四态标题与文案、两态横幅;editable 取特权模式
- 清理 company 域 5 页与 system 三页的过期 role_scope TODO 注释
2026-09-15 14:24:40 +08:00
TermiNexus
3d4c46b7ee
feat(gerp-ui): 批量职务调整树形选择 + OA 审批页 + 虚拟职务一键绑定
...
- BatchPositionDialog:部门列表页以部门树组织员工、工作组列表页以工作组树组织成员,
均可勾选具体的人;选中行成员自动预勾选,可追加/取消;提交映射 UserRole/UserRoleWorkgroup
- Department/Workgroup 列表页 toolbar 新增"批量调整职务"入口(CompanyUUID 兜底当前用户公司)
- CrudTable 新增 #toolbar 插槽(暴露 selectedRows/refresh)
- OA 审批页 Approval.vue(请假/出差待审批,30s 轮询,通过/驳回)+ api/oa.ts
- AppConfigPage 虚拟职务"一键绑定"按钮 + api/app.ts autoBindVirtualPositions
- 附带:OA/财务/eHRM 应用页、MultiEntityPicker、菜单/布局优化等系列改动
2026-08-30 13:23:49 +08:00
TermiNexus
93464d0c3c
fix(auth): 租户详情路由加 menuGuarded 守卫
...
- /company/tenant-detail 直链访问时按后端菜单树校验,普通角色菜单已隐藏则拦截跳转
2026-08-25 09:55:57 +08:00
TermiNexus
c085594f51
fix(ui): 菜单 fa 图标宽度改用 --el-menu-icon-width
...
- .gerp-menu-icon 宽度 1em→var(--el-menu-icon-width,24px),与 EP el-icon 菜单图标盒宽一致,左间距/文字起点统一
2026-08-25 08:41:14 +08:00
TermiNexus
9a8cbb1c25
fix(ui): 侧边栏菜单 el-icon 与 fa 图标对齐(font-size/间距)
...
- el-menu-item/el-sub-menu__title 内 el-icon 统一 18px + margin-right 5px,与 .gerp-menu-icon(fa)一致,折叠态均去 margin
2026-08-25 08:39:26 +08:00
TermiNexus
f32ce1ff03
fix(ui): 右上角头像 hover 去除背景圈
...
- 移除 .gerp-user-info:hover 背景色,hover 不再出现边框圈
2026-08-25 08:19:24 +08:00
TermiNexus
3aebb7a035
feat(ui): 切换角色对话框加 loading 遮罩
...
- 设置默认登录角色 / 确认切换时,对话框内容区显示 element-plus v-loading 遮罩(文字区分两种操作)
2026-08-22 01:45:40 +08:00
TermiNexus
f61716f215
feat(auth): 默认登录角色设置(切换角色对话框星标)
...
- 切换角色对话框每张角色卡片加星标按钮:设为/取消默认登录角色(金色高亮)
- user store 新增 defaultRoleUuid 状态与 setDefaultRole 动作,fetchRoles 同步 IsDefault
- auth.ts 新增 SetDefaultRole 接口(POST /Auth/SetDefaultRole)
2026-08-22 01:23:28 +08:00
TermiNexus
1d5e406616
fix(style): 删除全局 el-dropdown-menu padding 4px 规则
...
- global.scss 移除 .el-dropdown__popper .el-dropdown-menu { padding: 4px 0 !important; }
- gerp-user-dropdown 自带 padding: 0 生效,用户下拉菜单无首尾空隙
2026-08-22 01:14:43 +08:00
TermiNexus
2eeaab6c5d
feat(ui): 头像下拉改 hover 触发并加深阴影
...
- el-dropdown trigger 由 click 改为 hover(与官网 GVSite 一致)
- gerp-user-dropdown 加双层阴影(0 10px 30px + 0 2px 8px),层级感与官网超级菜单一致
2026-08-22 01:11:08 +08:00
TermiNexus
a19874da72
feat(msync): 远端 App 打开链路——用户令牌签发拼 URL + 服务离线标记 + /remote 路由
2026-08-14 00:33:49 +08:00
TermiNexus
7e64bdf38a
feat(ram): 应用中心安装弹窗支持 RAM 角色授权选择(角色多选→GrantRoles)
2026-08-14 00:03:32 +08:00
TermiNexus
36afde19da
refactor(frontend): CrudTable 拆分——抽取 CrudFormPanel 动态表单与 useDraftAutosave 草稿 composable
2026-08-13 18:26:18 +08:00
TermiNexus
ce7a17d170
refactor(frontend): Phase 3 质量整改——死状态清理、类型收口、路由收敛、上传统一
...
- stores: 移除未使用的 token/loading/locale 死状态;AdminCheckResult 统一收口 types/api.ts
- router: 移除全 Mock 的 SKU 页生产路由(源码保留待独立工程决策)
- api/request: 新增 requestRaw() 显式原始响应封装(替代 responseType hack)
- Manager.vue: SimpleUpload 弃用 XMLHttpRequest,改统一 axios upload + onUploadProgress(拦截器收益全覆盖)
2026-08-13 18:14:25 +08:00
TermiNexus
4d49e549b5
build(assets): 裁剪 tinymce 部署产物(40MB 整包 → 14 文件 1.19MB)
...
- copyTinymceAssets 只拷运行时必需文件(核心 js/主题/模型/图标/oxide 皮肤 + 8 个在用插件)
- closeBundle 先 rmSync 清空目标目录,防陈旧完整包残留混入 dist
- deploy.ps1 清理阶段同步删除生产 tinymce 残留,保证部署一致性
2026-08-13 18:14:24 +08:00
TermiNexus
b80009c423
chore(gerp): 移除死依赖(FormKit/tinymce-i18n/@vxe-ui/plugin-render-element/vite-plugin-static-copy)并修正误导注释
...
- package.json: 移除 4 个未使用依赖,lock 同步(-27 包)
- main.ts: 去掉 FormKit 全局注册与对应 chunk
- vite.config.ts: 去掉 formkit manualChunk
- RichTextEditor.vue: 修正加载方式注释(自写 copyTinymceAssets 而非 vite-plugin-static-copy)
2026-08-13 17:36:13 +08:00
TermiNexus
08fa5d5139
style(ui): 导航/侧边栏/交互控件禁止文本选中(user-select:none),正文内容保持可选中
2026-08-13 09:44:19 +08:00
TermiNexus
7177f99cb8
feat(app): 应用配置公司化——配置页支持范围选择(租户默认/各公司)+ 批量复制到公司,权限随安装范围
2026-08-13 08:48:05 +08:00
TermiNexus
e1f43efc74
fix(app): 恢复配置按钮——管理范围内已装(含非本公司)也显示配置入口,不再依赖 isAppUsable
2026-08-13 08:36:52 +08:00
TermiNexus
eb0df83267
feat(app): 管理员视角安装分布——市场卡片标记可管理范围内已装该应用的公司名,管理范围内任意公司已装即显示管理
2026-08-13 08:34:58 +08:00
TermiNexus
2746fe4ce9
feat(app): 侧边栏刷新按钮升级为清缓存+全量重拉(用户信息/菜单/管理员状态),避免旧缓存导致安装状态显示错乱
2026-08-13 08:22:16 +08:00
TermiNexus
e654d147db
fix(app): 修复管理弹窗公司全未选中——manageCompanies 参数不再二次包裹 params,后端可正确收到 AppUUID 并返回各公司 Installed 状态
2026-08-13 08:22:16 +08:00
TermiNexus
5b221c07b7
feat(app): 应用中心公司级管理+配置页+身份徽标
...
- AppMarket 已安装应用改'管理':公司级安装/停用弹窗(diff 批量增删公司)
- 新增 AppConfigPage 独立配置页(AppConfig 键值表,/API/App/Config)
- 修复 Config 接口参数嵌套(params[AppUUID]→AppUUID)
- 侧边栏新增'强制刷新菜单'按钮
- 顶部导航新增当前身份徽标(角色+公司,管理员高亮,点击切换)
- 新增前端应用注册表 src/apps/index.ts(AppCode→路由/类型/旧页面映射,预留 MSYNC)
2026-08-13 07:46:59 +08:00
TermiNexus
91e2c186c7
feat(app): 应用中心支持公司维度安装——安装弹窗可选全租户/指定公司,停用双停(租户+当前公司)
2026-08-13 06:28:27 +08:00
TermiNexus
1894786327
chore(app): 删除已拆分的单页应用中心/单页GERP系统(由子页面取代)
2026-08-13 04:33:12 +08:00
TermiNexus
b15d3fe89d
refactor(app): 应用中心改父级菜单——拆分 应用市场/我的应用/授权审批 三个子页面
2026-08-13 04:33:02 +08:00
TermiNexus
ca618aa512
refactor(system): GERP系统改父级菜单——拆分 系统状态/系统时序/配置文件/运行时调整 四个子页面
2026-08-13 04:23:46 +08:00
TermiNexus
797bada4e7
feat(system): GERP系统运维控制台(状态/时序/secrets.ini/运行时调整)+ 路由
2026-08-13 04:20:29 +08:00
TermiNexus
f4aeaf94c4
feat(app): 应用中心页(应用市场/我的应用/授权审批)+ 路由与菜单入口
2026-08-13 04:06:16 +08:00
TermiNexus
6e9de08abc
feat(company): 企业创建成功页新增"返回租户详情",形成填写→详情闭环
2026-08-13 03:06:10 +08:00
TermiNexus
54e0d5fd52
feat(company): 租户详情支持菜单直达(无参数时回退当前角色租户),AdminCheck 类型补充租户字段
2026-08-13 02:57:00 +08:00
TermiNexus
b9e72ccf0e
feat(company): 租户详情展示企业信息(CompanyInfo),未填写引导 epcreate 向导,支持编辑
2026-08-13 02:39:41 +08:00
TermiNexus
e04e1bc91f
feat(router): 新增 debug/epcreate 路由,支持调试路径访问企业创建向导
2026-08-13 02:34:02 +08:00
TermiNexus
f894d81be8
fix(mail): 原文获取增加 blobId→Blob/get 回退,兼容 Stalwart 不支持 raw 属性
2026-08-13 01:24:41 +08:00
TermiNexus
be64c62a12
fix(mail): 原文获取改 blobId 回退方案(兼容 Stalwart 不支持 raw 属性),安全浏览文案改企业级
2026-08-13 01:22:02 +08:00
TermiNexus
ee6cd18c50
feat(mail): HTML 邮件 iframe 安全预览(默认禁脚本+JS 提示启用),支持查看源代码与原文
2026-08-13 01:16:52 +08:00
TermiNexus
670bb7bc76
feat(mail): 申请邮箱统一转为小写
2026-08-13 01:06:37 +08:00
TermiNexus
6454ab0bf5
fix(mail): 邮箱选择改字符串绑定,修复切换后输入框显示未更新
2026-08-13 01:02:54 +08:00
TermiNexus
1332f25326
feat(mail): 多邮箱选择登录与申请,展示已申请数量(N/5)
2026-08-13 01:00:43 +08:00
TermiNexus
fde710918d
fix(gitea): 免密登录改为新开页面跳转,不替换当前页
2026-08-11 16:57:55 +08:00
TermiNexus
40408b39dc
feat(gitea): 增加免密登录按钮,跳转 Gitea OIDC 入口
...
GiteaSessionConfig 增加 SsoUrl;账号卡片显示免密登录按钮,点击跳转 Gitea 的 /user/oauth2/gerp
2026-08-11 16:38:49 +08:00
TermiNexus
4ba18370a4
fix(mail): Blob/get 兼容 Stalwart 的 data:asText 纯文本字段
...
Stalwart v0.11 对 text/* 直接返回 data:asText(非标准 base64 的 data),fetchEmailBody 优先读 data:asText,缺失时回退 atob(data)
2026-08-11 01:26:21 +08:00
TermiNexus
3e0af7596e
fix(mail): 邮件正文经 Blob/get 异步拉取(Stalwart v0.11 不返回 bodyValues)
...
jmap.ts: 新增 fetchEmailBody(Blob/get + atob,HTML 转纯文本),request/call 支持 using 参数(需 urn:ietf:params:jmap:blob capability)
mail.ts: jmap 代理数据类型增加 Using;Mailbox.vue: selectEmail 先显示 bodyValues 否则异步拉取正文,emailBodyText 由 computed 改 ref,switchMailbox 清空正文
2026-08-11 01:22:25 +08:00
TermiNexus
feb187ba23
chore(gerp): deploy.ps1 转纯 ASCII 消除 BOM 警告
...
- PS 5.1 无 BOM 时按 ANSI 代码页解析 UTF-8 文件,中文会乱码导致语法错误;
保留 BOM 又会触发首行 "'#' 不是 cmdlet" 警告
- 脚本注释与输出改为英文(纯 ASCII),无 BOM 下可被 PS 5.1 正确解析
- 头部注释注明须保持 ASCII 以防回归
2026-08-11 01:03:46 +08:00
TermiNexus
716cddb9e8
fix(request): 401 可读 JSON 的 msg 附加到 error.message
...
- 后端 401 均返回 {code, msg} 可读 JSON(如 Mail/Login 的"邮箱或密码错误"),
拦截器此前在 silent 场景原样 reject,调用方只看到 HTTP 状态文本
- 现在统一提取响应体 msg 覆盖到 error.message,silent 与普通调用都能拿到后端文案
2026-08-11 01:03:34 +08:00
TermiNexus
4f4508083c
style(gerp): 整体企业化改造(阿里云式克制风格、配色可配置、Win11 侧边栏)
...
- global.scss 重构为设计令牌体系:细边框/克制圆角/浅阴影/紧凑字号
- 统一覆盖 Element Plus 与 vxe-table 企业化样式(表头底色、行间细横线、紧凑行高)
- app store 支持自定义主色:自动派生 light-N/dark-2 色阶,配色与明暗主题解耦
- Settings 新增"主题与配色"区:预设色板 + 自定义取色器
- 布局头部改面包屑式页名;侧边栏改 Win11 胶囊菜单(无指示条,hover/选中整行高亮,折叠图标居中,菜单项补 title 提示)
- TabBar 还原圆角选中卡片式样式
- Dashboard 重做:关键指标 KPI 区 + 快捷入口 + 系统信息(去除装饰性渐变)
- Login 配色改为跟随主题主色(去掉硬编码渐变)
- 内容区内边距收敛到各视图容器,避免双层 padding
2026-08-11 01:03:18 +08:00
TermiNexus
a813e34a4f
feat(gitea): 新增 Gitea 对接页面(申请/改密/头像迁移/管理)并禁用接口 HTTP 缓存
2026-08-09 18:28:55 +08:00
TermiNexus
f428afa495
feat(doc): 编辑器支持富文本/Markdown 双模式、深色主题、TinyMCE 原生托管与系列排序
2026-08-09 01:50:15 +08:00
TermiNexus
5c320e0e4a
fix(mail): 修复邮件正文为空并新增联系人管理视图
...
- Email/get 补 bodyValues,正文按 partId 取值,HTML 去标签 - 左栏联系人入口 + 中栏 CRUD 管理(新增/编辑/删除) - 文件夹项选中态绑定当前视图,切换联系人时取消高亮
2026-08-08 20:49:51 +08:00
TermiNexus
864a9fae3b
feat(mail): 云端联系人匹配与收件人标签输入 + 邮件列表多项修复
...
- 写信收件人改标签输入(回车生成 label),输入匹配云端联系人下拉 - 邮件列表前端显式按接收时间降序(最新在顶部) - 快速切换文件夹竞态守卫,仅采纳最后请求结果 - 操作栏移至列表底部、删除/标记 loading 遮罩、长标题截断
2026-08-08 19:53:34 +08:00
TermiNexus
0900bfb7b5
fix(mail): 全部邮件排除垃圾箱、Email/set 结果校验与已读本地持久化
...
- 全部邮件查询用 inMailboxOtherThan 排除垃圾箱/垃圾邮件,删除后不再出现 - Email/set 校验 notUpdated/notDestroyed,已读/删除失败不再静默 - 已读本地覆盖表过渡 Stalwart v0.11 keywords 写入 bug,刷新保持已读
2026-08-08 16:52:38 +08:00
TermiNexus
162f713b2e
fix(mail): 修复邮件列表工具栏标题与选中计数换行错乱
...
- 标题与「已选 x 封」计数包裹进同一 flex 容器(align-items: baseline) - white-space nowrap 禁止换行、计数 flex-shrink 0、工具栏 overflow hidden
2026-08-08 16:12:22 +08:00
TermiNexus
ebb77fa632
feat(mail): 邮箱登录持久化、企业化登录页与会话失效回退
...
- 登录 token 存 localStorage,刷新自动恢复会话,失效自动清除回退登录页 - 登录从弹窗改为企业邮箱登录页(品牌区/邮箱徽标/密码输入/修改密码) - Mail/Login 与 Mail/Jmap 接口 silent 化,401 不再误触发系统登出 - 全部邮箱视图不再上传空 filter(修复 502) - JmapClient 新增 onAuthExpired 回调与 JmapAuthError,401 统一清理回退
2026-08-08 16:07:44 +08:00
TermiNexus
b2263a779c
feat(mail): 邮箱界面重构为企业邮箱三栏风格并适配深色主题
...
- 三栏布局:左侧文件夹树(未读徽标)+ 邮件列表(多选/批量已读/删除)+ 阅读窗格(回复/转发/删除) - 新增全部邮件视图、删除移入垃圾箱、批量已读、回复/转发引用头(inReplyTo/references) - 退出邮箱吊销后端会话 token - 硬编码颜色替换为 Element Plus CSS 变量,深色下选中态改用半透明主色
2026-08-08 15:59:21 +08:00
TermiNexus
82d4b03e2a
fix(mail): 修复邮件列表为空(Email/get 移除 Stalwart 不支持的 date 属性)
...
properties 含 'date' 触发 invalidArguments 导致整批邮件加载失败,改用 receivedAt
2026-08-08 15:17:10 +08:00
TermiNexus
86cd82024f
feat(mail): 邮箱登录换取会话 token,JMAP 调用不再传输明文密码
...
- 登录调 /API/Mail/Login 换取 token(密码仅一次传输)
- JmapClient 改持 token;登出吊销 token
2026-08-08 15:12:17 +08:00
TermiNexus
600ca27cbb
feat(mail): 发信成功后归档到已发送(Sent)文件夹
...
Stalwart 不会自动把草稿移到 Sent,EmailSubmission 成功后显式 Email/set update mailboxIds 移至 Sent
2026-08-08 15:00:34 +08:00
TermiNexus
03fd87df13
fix(mail): 发信改用 JMAP bodyValues 标准格式并检查投递结果
...
Stalwart v0.11 不允许 textBody/htmlBody 内联 value(invalidProperties Cannot set property),改用 partId+bodyValues;补 EmailSubmission 响应检查避免误报成功
2026-08-08 13:43:35 +08:00
TermiNexus
5da9dd04eb
fix(mail): 修复 vue-tsc -b 构建类型错误(表格行类型断言与残留导入)
...
Mailbox/MailAdmin 模板内 DefaultRow 类型断言为 JmapEmail/MailAdminItem,清理无用 dateNow 与 buildBasicToken 残留引用
2026-08-08 13:21:11 +08:00
TermiNexus
5e8b603e22
fix(user): 刷新页面后异步刷新菜单缓存,后端菜单变更即时生效
...
restoreSession 缓存命中时不再零请求,异步 fetchMenus 保证新增菜单(如邮箱入口)刷新即可见
2026-08-08 13:10:30 +08:00
TermiNexus
47506bd0b9
feat(company): 新增权限管理页面并重构菜单编辑器公司选择
...
- 新增 company/permission 权限管理页
- 菜单编辑器公司选择改用 EntityPicker
- CrudTable 卡片查看按钮图标化,公司卡片补充父级/租户字段
2026-08-08 13:00:11 +08:00