junny_dev_kit 1.5.6+1
junny_dev_kit: ^1.5.6+1 copied to clipboard
JunnySoft开发工具包.
1.5.6+1 - 2025-12-18 #
🧰 工具与配置 #
- 初始化 OpenSpec 规范驱动开发框架
- 新增 AI 助手配置(.claude/commands, .gemini/commands)
- 更新 ObjectBox 生成文件适配 generator v2025_12_16
1.5.6 - 2025-12-18 #
🎨 体验优化 #
- 组织树节点禁用态视觉反馈增强:无权限或不可选节点显示灰色文字并附加锁图标,避免用户点击无响应造成困惑。
- 新增
isNodeTapEnabled方法统一判断节点点击权限(同时满足"可选"与"有权限")。 _buildClickableTreeNode根据权限状态动态调整文字颜色、禁用点击事件并显示锁图标。
- 新增
🧰 依赖 #
- 升级 objectbox → 5.1.0-dev.2(原 5.1.0-dev.0)
- 升级 objectbox_flutter_libs → 5.1.0-dev.2(原 5.1.0-dev.0)
- 升级 objectbox_generator → 5.1.0-dev.2(原 5.1.0-dev.0)
- 升级 video_player_android → 2.9.0(原 2.8.22)
🔎 影响文件 #
- lib/src/pages/organization/tree/logic.dart
- lib/src/pages/organization/tree/page.dart
- pubspec.lock
1.5.5 - 2025-12-16 #
1.5.4 - 2025-12-15 #
1.5.3 - 2025-12-05 #
✨ 配置与扩展 #
- 表单控制策略可插拔:新增
FormControlStrategy接口与默认实现,支持自定义必填/禁用判断,默认策略沿用旧版口径(必填 01=1,禁用 03!=1)。 JunnyKitConfig.init支持注入自定义策略,统一从配置导出;未注入时自动落回默认策略。
🛠 可靠性 #
FormControlMixin统一委托策略判断必填/禁用,并按策略声明的controlTypeCodes拉取控制数据,避免硬编码。
🔎 影响文件 #
- lib/src/configs/form_control_strategy.dart
- lib/src/configs/configs.dart
- lib/src/configs/junny_kit_config.dart
- lib/src/mixins/form_control_mixin.dart
1.5.2+2 - 2025-11-26 #
1.5.2+1 - 2025-11-17 #
- 🧰 依赖版本策略调整
- 将 dart_aliyun_oss / junny_utils / junny_widget 三个依赖放宽为 any,方便业务工程统一管理版本
- 不引入新功能,仅调整依赖解析策略,保持 1.5.2 既有行为不变
1.5.2 - 2025-11-11 #
✨ 功能与体验 #
- 附件预览分享能力全覆盖:
- 图片预览页、PDF 预览页、Office 在线预览(仅 officePreviewPrefix 链接)均新增右上角分享按钮,颜色跟随主题主色。
- Office 在线预览分享会自动解析真实文件 URL(src),下载至本地后分享真实文件,而非分享预览 URL。
- 列表下载的可见反馈与引导:
- 顶部细线性进度条用于展现下载进度(fallback→Dio 与原生一致可见)。
- 若发生 fallback→Dio,下载完成后弹出对话框提供“一键分享”入口,避免用户找不到下载到的文件。
- 预览点击防重入:列表项点击预览增加 1.2s 轻度防抖,避免误触打开多个预览页;PDF 的“下载并预览”路径亦带防重入。
🛠 可靠性与兼容 #
- Android AVD 下载不可用时自动降级:
- 增补权限:FOREGROUND_SERVICE / FOREGROUND_SERVICE_DATA_SYNC / ACCESS_NETWORK_STATE / WAKE_LOCK。
- enqueued ≥ 阈值(可配)自动降级至 Dio,并严格仅使用传入的 OSS headers,避免头部污染导致下载失败。
- 本地缓存命中优先:已存在同名文件直接返回,避免重复下载。
⚙️ 可配置项 #
- JunnyOtherConfig 新增:
downloadFallbackTimeoutSeconds(默认 6)控制降级触发阈值。downloadVerboseLogging(默认 false)控制过程详细日志;默认仅输出汇总日志。
🧹 代码质量 #
- flutter analyze 全量通过(0 issues)。
🔎 影响文件(节选) #
- 预览/分享:
- lib/src/pages/common/web_page.dart
- lib/src/pages/common/image_preview_page.dart
- lib/src/extensions/business_dialog_extension.dart(context.previewFile)
- lib/src/pages/attachment/{page.dart,logic.dart}
- 下载核心:lib/src/utils/utils.dart
- 配置:lib/src/configs/other_config.dart
1.5.1+1 - 2025-10-30 #
🐛 修复 #
- 用户信息读取与持久化稳态化:
getTenantId/getUserId兼容num类型(如double)并统一转为int,避免非常规数值形态导致返回null。_getUserInfo增加诊断日志(未命中/解码失败)以定位键名不一致、重复记录或时序空窗等问题。updateDBUserInfo在租户状态校验通过后,提前落库tenantId/userId;当登录返回缺少tenantId且账号为“唯一租户且状态有效”时,自动补齐并立即写库,缩短早期读取空窗。setUserInfoByKey记录写入异常日志,便于快速定位持久化失败。
🔎 影响文件 #
- lib/src/databases/utils/user_info_db_utils.dart
- lib/src/utils/business_utils.dart
1.5.1 - 2025-10-20 #
1.5.0 - 2025-10-17 #
✨ 新增 #
- configs/storage: 新增以下配置与工具,统一库内以“字节”为唯一口径,并将单位转换/容量校验放到边界:
checkBeforeUpload:上传前容量校验回调(项目侧实现,库仅传totalBytes)。fileSizeUnitForPersistence:保存到后端时fileSize的单位(byte|kb|mb|gb)。fileSizeRounding:单位转换取整策略(floor|round|ceil)。keepLocalFileSizeOnMerge:合并服务端返回数据时,是否保留本地字节口径的fileSize。ossFileKeyBuilder:自定义 OSS 对象 key 构建器(仅accessType=oss生效,可为 null)。- 工具:
bytesToUnitInt、类型:JunnyStorageUnit、JunnyRoundingMode、JunnyOssFileKeyBuilder。
🔧 改进 #
- widgets/assets_upload_dialog:
- 上传前调用
checkBeforeUpload(totalBytes)决定是否放行;未提供回调则默认放行。 - 通过
bytesToUnitInt在saveFileInfo前按配置单位转换并取整fileSize。 - 合并服务端返回时可保留本地字节口径的
fileSize,避免单位口径被覆盖。 - OSS 上传支持通过
ossFileKeyBuilder自定义对象 key;默认仍为tenant/<tenantId>/<subSystemCode|common>/<timestampedFileName>。
- 上传前调用
🧨 BREAKING CHANGE #
- 移除
JunnyBaseRepositoryConfig.companyStorageSize以及库内依赖的容量校验逻辑。- 迁移:在项目初始化的
JunnyStorageConfig中实现checkBeforeUpload,自行查询后端容量并与totalBytes比较。 - 如需后端以 KB/MB 持久化
fileSize,设置fileSizeUnitForPersistence与fileSizeRounding。
- 迁移:在项目初始化的
📚 文档 #
- 更新配置文档,移除
companyStorageSize,补充新配置与迁移指引。
1.4.7 - 2025-10-16 #
✨ 功能 #
- 集成分享能力:接入
share_plus,支持 ISpect 面板内容分享与统计数据导出后一键分享(文本/文件)。 - 导航观察增强:新增
ISpectNavigatorObserver,注入至navigatorObservers,配合 ISpect 面板进行路由观察与调试。 - 调试开关显式化:
ISpectBuilder启用isInspectorEnabled / isPerformanceEnabled / isColorPickerEnabled(Debug 默认启用)。
🔧 体验优化 #
- 全局 Toast 支持多条并行展示:
showAppToast增加SmartToastType.multi,避免提示互相覆盖。
📦 依赖升级 #
ispect→ ^4.4.6(原 ^4.4.2)ispectify_dio→ ^4.4.6(原 ^4.4.2)share_plus→ ^12.0.0(新增)- 传递升级:
draggable_panel1.3.1、flutter_plugin_android_lifecycle2.0.32、video_player_*系列等(详见pubspec.lock)。
✅ 兼容性与影响范围 #
- 仅在 Debug 下默认启用 ISpect 调试能力;Release 不受影响。
- 新增
share_plus依赖:如需文件分享,iOS/Android 可能需要最小平台配置或权限说明。 - 菜单与导航行为未改变:仅增加观察/分享能力,不影响业务逻辑。
🔎 影响文件 #
lib/src/junnysoft_app.dart:引入share_plus、ISpectNavigatorObserver、分享与调试开关。lib/src/extensions/function_extension.dart:Toast 配置增强(SmartToastType.multi)。pubspec.yaml、pubspec.lock:版本与依赖更新(version: 1.4.7)。
1.4.6+1 - 2025-10-14 #
🐛 修复 #
- 子系统模式的首屏数据“回灌未过滤菜单”问题:将持久化改为“过滤后的结果”,避免首屏对齐从本地缓存带回已被
validRoutes筛掉的未实现页面。- 影响位置:
lib/src/menus/services/menu_data_loader.dart(持久化逻辑)
- 影响位置:
✅ 兼容性与影响范围 #
- 单系统项目(直接进入子系统页):已生效,过滤结果与 UI 展示保持一致。
- 多系统项目(工作台→子系统):工作台页不受影响;进入子系统后同样按“过滤后持久化”生效,避免回退或切换 Tab 时回灌。
🔧 其它 #
- 移除临时调试日志(仅 Debug):
processors/widgets/presentation中的诊断输出已清理,不影响功能。
1.4.6 - 2025-10-10 #
♻️ 架构与分层 #
- 目录与职责收敛:processors 仅保留纯处理(预处理/可见性/集成/构建器),移除落库副作用;services 下沉应用编排(MenuDataLoader/MenuDataService/HookEmitter);presentation 收敛 pages/handlers/resolvers;widgets 物理位于
menus/widgets,语义归属展示层。 • 影响位置:lib/src/menus/processors/{menu_preprocessor.dart,menu_visibility_filter.dart,quick_menu_integrator.dart,multi_level_menu_processor.dart,universal_menu_processor.dart,processors.dart}lib/src/menus/services/{menu_data_loader.dart,menu_data_service.dart,hook_emitter.dart,services.dart}lib/src/menus/presentation/{pages/*,handlers/*,resolvers/*}lib/src/menus/widgets/{universal_menu_widget.dart,menu_tab_view.dart,unified_menu_card.dart,menu_coordinator.dart}
🔧 菜单系统增强 #
- 路由/语义注入统一:
routeBuilder/routeConfig与MenuSemanticConfig贯穿使用;路由校验优先validRoutes,回退validator;快捷菜单集成保持纯处理;Tab 标题统一使用TitleResolver(All 标签特例)。 • 影响位置:lib/src/menus/core/menu_route_config.dartlib/src/menus/presentation/resolvers/{title_resolver.dart,icon_resolver.dart}lib/src/menus/widgets/{menu_tab_view.dart,unified_menu_card.dart,universal_menu_widget.dart}
🧩 语义层引入 #
- 新增
MenuSemanticConfig,集中“菜单/按钮/页面”判定(默认 flg<2),并透传到UniversalMenuWidget/Workbench/SubSystem/ MenuDataLoader/MenuUtils/UniversalMenuProcessor/MenuTapHandler;修复快捷菜单与按钮 path 冲突导致 actions 为空的问题(DB 回退优先页面级节点,返回嵌套 JSON)。 • 影响位置:lib/src/menus/core/menu_semantic_config.dartlib/src/menus/presentation/handlers/menu_tap_handler.dartlib/src/menus/services/menu_data_loader.dartlib/src/menus/processors/{menu_utils.dart,universal_menu_processor.dart}
📚 文档更新 #
- 菜单聚合入口
menus.dart顶部新增中文指引(推荐引入、分层边界、扩展点、常见陷阱、迁移提示);README 同步“widgets 物理路径在 widgets/、语义归属 presentation”与聚合导出/引入建议。 • 影响位置:lib/src/menus/menus.dartlib/src/menus/README.md
🧾 版本 #
- 打标签:
v1.4.6(本次未修改pubspec.yaml版本号)
1.4.5 - 2025-09-28 #
🔧 菜单系统增强 #
-
菜单数据加载器优化:重构菜单数据加载逻辑,新增批量处理和错误处理机制 • 影响位置:
lib/src/menus/widgets/menu_data_loader.dart
-
菜单处理器改进:优化工作台数据处理器和菜单点击处理器,提升性能和稳定性 • 影响位置:
lib/src/menus/processors/workbench_data_processor.dartlib/src/menus/processors/menu_tap_handler.dart
-
菜单组件增强:改进菜单处理器工厂和通用菜单组件的功能和用户体验 • 影响位置:
lib/src/menus/widgets/menu_handler_factory.dartlib/src/menus/widgets/universal_menu_widget.dart
-
菜单配置优化:更新菜单配置组和页面组件的配置管理 • 影响位置:
lib/src/menus/core/menu_config_groups.dartlib/src/menus/pages/universal_subsystem_page.dartlib/src/menus/pages/universal_workbench_page.dart
🌐 国际化改进 #
- 翻译系统优化:增强本地化管理功能,改进翻译数据处理逻辑
• 影响位置:
lib/src/translations/junny_localization.dart
🛡️ 安全与配置 #
- 安全设置类型扩展:新增安全配置选项和类型定义
• 影响位置:
lib/src/constants/security_settings_type.dart
📚 文档更新 #
- 菜单系统文档完善:更新README文档,补充最新功能说明
• 影响位置:
lib/src/menus/README.md
🧾 版本 #
pubspec.yaml版本号更新至1.4.5
1.4.4 - 2025-09-25 #
🔧 菜单系统增强 #
-
工作台数据处理器优化:新增工作台条目和Tab过滤功能,提升数据处理效率和灵活性 • 影响位置:
lib/src/menus/processors/workbench_data_processor.dart
-
菜单路由配置增强:增加工作台条目过滤器和工作台Tab过滤器,支持更精细的路由控制 • 影响位置:
lib/src/menus/core/menu_route_config.dart
-
数据库工具优化:改进菜单数据库工具类的查询性能和数据处理逻辑 • 影响位置:
lib/src/databases/utils/menu_db_utils.dart
-
通用菜单组件改进:优化菜单组件的状态管理和数据加载逻辑,提升用户体验 • 影响位置:
lib/src/menus/widgets/universal_menu_widget.dart
🧾 版本 #
pubspec.yaml版本号更新至1.4.4
1.4.3 - 2025-09-24 #
🔧 代码优化与重构 #
-
Analytics 模块优化:优化分析配置管理器、导出助手、测试助手和工具类的代码结构和性能 • 影响位置:
lib/src/analytics/utils/analytics_config_manager.dartlib/src/analytics/utils/analytics_export_helper.dartlib/src/analytics/utils/analytics_test_helper.dartlib/src/analytics/utils/analytics_utils.dart
-
配置系统优化:改进 JunnyKitConfig 和其他配置模块的代码质量 • 影响位置:
lib/src/configs/junny_kit_config.dartlib/src/configs/other_config.dart
-
数据库工具优化:提升数据库相关工具类的性能和可维护性 • 影响位置:
lib/src/databases/utils/address_db_utils.dartlib/src/databases/utils/db_cleanup_manager.dartlib/src/databases/utils/db_performance_monitor.dartlib/src/databases/utils/db_utils.dartlib/src/databases/utils/menu_db_utils.dart
🎨 UI 组件改进 #
-
菜单组件优化:改进菜单相关组件的用户体验和性能 • 影响位置:
lib/src/menus/processors/menu_tap_handler.dartlib/src/menus/processors/universal_menu_processor.dartlib/src/menus/widgets/menu_card_builder.dartlib/src/menus/widgets/menu_data_loader.dartlib/src/menus/widgets/unified_menu_card.dartlib/src/menus/widgets/universal_menu_widget.dart
-
页面组件优化:优化通用页面组件的显示效果和交互体验 • 影响位置:
lib/src/pages/attachment/logic.dartlib/src/pages/common/crop_image_page.dartlib/src/pages/common/image_preview_page.dartlib/src/pages/workflow/approve/logic.dartlib/src/pages/workflow/approve_new/logic.dart
🌐 国际化改进 #
- 翻译系统优化:改进本地化管理和翻译数据库工具
• 影响位置:
lib/src/translations/junny_localization.dartlib/src/translations/localization_db_manager.dartlib/src/translations/localization_db_utils.dart
🛠️ 工具类增强 #
-
业务工具优化:提升业务相关工具类的功能和性能 • 影响位置:
lib/src/utils/business_utils.dartlib/src/utils/tax/strategy.dartlib/src/utils/update_utils.dartlib/src/utils/utils.dart
-
Mixin 优化:改进表单控制 Mixin 的逻辑和可用性 • 影响位置:
lib/src/mixins/form_control_mixin.dart
🔌 网络层改进 #
- 拦截器优化:优化 Token 拦截器的处理逻辑
• 影响位置:
lib/src/networks/interceptors/token_interceptor.dart
📦 核心架构 #
-
应用核心优化:改进 JunnysoftApp 的架构和扩展功能 • 影响位置:
lib/src/junnysoft_app.dart
-
扩展功能优化:优化业务对话框扩展的功能和体验 • 影响位置:
lib/src/extensions/business_dialog_extension.dart
-
模型优化:改进基础模型的结构和性能 • 影响位置:
lib/src/models/base_model.dart
🧾 版本 #
pubspec.yaml版本号更新至1.4.3
1.4.2 - 2025-09-22 #
🧭 MultiLevel 菜单可见性与路径命中修复 #
- 过滤口径统一:仅以 flg<2 作为“菜单子项”,按钮(flg≥2)不参与结构判断;当无菜单子项时,对父节点使用自身路由兜底校验。
- Tab 切换查询统一:Specific Tab 统一使用
path=leafPath、withParentPath=fullPath,解决多级场景下叶子 path 重名的命中歧义,并与 All Tab 保持一致。 - 避免首次“假空态”:移除子系统分支中过度防守的
!mounted→ 空结果路径(仍保留调用方的 mounted 防护)。
影响位置:
- lib/src/menus/processors/menu_utils.dart
- lib/src/menus/processors/universal_menu_processor.dart
- lib/src/menus/widgets/universal_menu_widget.dart
- lib/src/menus/widgets/menu_data_service.dart
🧹 缓存清理策略精细化(子系统页) #
- 子系统根入口页(menuPath 为空)刷新:按
systemCode精准清理该系统菜单缓存; - 嵌套子页面(menuPath 非空)刷新:跳过清理,避免“清空 + 小集写回”导致根层数据丢失。
影响位置:
- lib/src/menus/widgets/universal_menu_widget.dart(触发点)
- lib/src/menus/providers/menu_storage_provider.dart(新增按系统清理接口)
- lib/src/databases/utils/menu_db_utils.dart(按系统清理实现)
♻️ 其它稳态化 #
didUpdateWidget中对routeValidator做“等价变化”判断(当两侧均提供validRoutes时以集合内容判定),减少无意义刷新与 Tab 重置。- 清理调试日志与 no-op 分支,保持逻辑清爽。
影响位置:
- lib/src/menus/widgets/universal_menu_widget.dart(等价性判断、日志清理)
- lib/src/menus/processors/multi_level_menu_processor.dart(日志清理)
- lib/src/menus/widgets/menu_data_service.dart(日志清理)
- lib/src/menus/providers/menu_storage_provider.dart(日志清理)
- lib/src/databases/utils/menu_db_utils.dart(日志清理)
📚 文档 #
- 更新多层级筛选、Tab 命中与缓存策略的说明:
- lib/src/menus/README.md
- 新增变更溯源文档:
- issues/menus_filtering_refactor_summary.md
🧾 版本 #
pubspec.yaml版本号更新至1.4.2
1.4.1 - 2025-09-19 #
🧩 菜单路由构造一致性 #
- 统一菜单点击导航路径构造至
MenuRouteConfig.buildRoute,避免分散直拼${JunnyKitConfig.packageName}://$subSystemCode/$path带来的分歧。 • 新增buildRoute(String subSystemCode, String path, {String? packageName})支持包名覆盖,满足差异化场景。 • 影响位置:lib/src/menus/core/menu_route_config.dartlib/src/menus/processors/menu_tap_handler.dart
⚡ 路由过滤性能与可调优 #
MenuUtils.validateAndFilterMenus新增参数{int batchSize = 16},对叶子路由进行分批Future.wait并发验证,提升在大菜单 + 异步 validator 下的过滤性能。UniversalMenuProcessor新增validatorBatchSize字段并向下传递batchSize;MenuValidationConfig新增concurrentBatchSize字段,UniversalMenuWidget→MenuHandlerFactory→UniversalMenuProcessor全链路透传。 • 影响位置:lib/src/menus/processors/menu_utils.dartlib/src/menus/processors/universal_menu_processor.dartlib/src/menus/widgets/menu_handler_factory.dartlib/src/menus/core/menu_config_groups.dartlib/src/menus/widgets/universal_menu_widget.dart
🐛 Bug 修复 #
- 修复
UniversalMenuWidgetState在didUpdateWidget期间重复初始化late final字段导致的LateInitializationError。 • 变更:将_processor、_menuTapHandler改为late可重赋值字段,并通过_initializeHandlers()安全重建,避免崩溃。
🧪 向后兼容 #
- 默认批大小仍为
16,保留与历史行为一致;若提供validRoutes集合仍走 O(1) 过滤路径,不受影响。
🧾 版本 #
pubspec.yaml版本号更新至1.4.1
1.4.0+1 - 2025-09-18 #
🐛 Bug 修复 #
- 修复 FormControlMixin 在流程办理态下对
defaultEnabled的双重否定导致服务端EDIT仍被禁用的问题。 • 修改位置:lib/src/mixins/form_control_mixin.dart:375, 401• 变更细节:将!(defaultEnabled ?? true/false)改为defaultEnabled != null && !defaultEnabled,仅在显式false时禁用,避免误判并提升可读性。
✅ 审批逻辑优化(approve_new) #
- 启动判定改为以
WorkflowType.add为准,替代通过taskData.formCode是否为空判断。 workflowStartAssignees请求体合并_buildBaseWorkflowData(),统一构建requestData,避免参数缺失。- 字段取值统一化:
•
formCode:taskData['formCode'] ?? widget.workflowData['formCode']•processCode/processSubmitFlg/projectId/sid/taskId: 统一直接从taskData[...]读取 •currentProcessNodeCode: 构建 baseData 时使用taskData['currentProcessNodeCode'] - 目的:提升健壮性、与 V3 接口入参对齐,减少 NPE/空值兼容逻辑。
- 变更位置:
lib/src/pages/workflow/approve_new/logic.dart:246-283, 1268-1307
🧾 版本 #
pubspec.yaml版本号更新至1.4.0+1
1.4.0 - 2025-09-18 #
📦 版本与依赖 #
- 版本号更新至
1.4.0 - 依赖升级: • background_downloader: 9.2.3 → 9.2.5 • connectivity_plus: 6.1.5 → 7.0.0 • file_picker: 10.3.2 → 10.3.3 • flutter_svg: 2.2.0 → 2.2.1 • ispect: 4.3.0 → 4.3.6 • ispectify_dio: 4.3.0 → 4.3.6 • junny_utils: 0.1.0 → 0.1.1 • objectbox: 4.3.0 → 4.3.1 • objectbox_flutter_libs: 4.3.0 → 4.3.1 • objectbox_generator: 4.3.0 → 4.3.1
🧩 业务模块与组件 #
- 附件模块:
attachment/logic.dart、attachment/page.dart优化 - 签名模块:
signature/edit与signature/pad逻辑与页面更新 - 审批模块:
workflow/approve、approve_new、delegate页面/逻辑优化 - 组织模块:
organization/tree与organization/user页面/逻辑优化 - 菜单与组件:
unified_menu_card、flow_item_card、selection_card体验与稳定性提升 - 工具与对话框:
business_dialog_utils、business_utils、update_dialog、assets_upload_dialog - Mixins:
counter/form/list/flow/workflow等通用能力增强 - 新增:
lib/src/configs/translation_config.dart翻译配置
🧰 其他 #
- 升级 pub(9ee8dd2)
- 同步
pubspec.lock
1.3.1 - 2025-08-28 #
🔧 网络层架构优化 #
- 拦截器系统重构 - 提供更灵活的自定义拦截器配置
• 新增
interceptors配置参数,支持完全自定义拦截器链 • 移除shouldUseLoading配置,改为通过拦截器列表控制 • 所有拦截器类添加const构造函数,提升性能 • 优化拦截器中的 headers 处理,避免直接修改原始对象
🎨 UI 组件增强 #
- 控制台面板扩展 - 支持自定义按钮配置
• JunnysoftApp 新增
consolePanelButtons参数 • 支持在 ISpect 控制台中添加自定义功能按钮 • Toast 显示类型优化为多实例模式
🐛 Bug 修复 #
- 修复网络拦截器中 headers 直接修改导致的潜在问题
- 优化 MetaDataInterceptor 和 TokenInterceptor 的异步处理
- 清理无用的临时文件
CHANGELOG_ARCHIVE.md.header_added
1.3.0 - 2025-08-25 #
🔄 Flutter SDK 兼容性更新 #
- Flutter SDK 升级至 3.35.1 - 适配最新 Flutter 版本的 API 变动
•
AppBarTheme.color→AppBarTheme.backgroundColor•BottomAppBarTheme→BottomAppBarThemeData•ISpectifyDioLogger→ISpectDioInterceptor•DraggablePanelController初始化方式调整
📦 依赖包更新 #
- ispect:
4.2.0→4.3.0- 调试工具升级 - ispectify_dio:
4.2.0→4.3.0- Dio 拦截器升级 - junny_utils:
0.0.10→0.1.0- 工具库升级 - file_picker:
10.3.1→10.3.2- 文件选择器升级 - draggable_panel:
1.0.6→1.1.0- 拖拽面板升级
🔧 其他 #
- 版本号更新为
1.3.0 - 保持向后兼容性,仅更新必要的 API 调用
1.2.0 - 2025-08-19 #
🏗️ 菜单系统架构与数据一致性 #
- 多层菜单处理器预处理与排序改进,补全
subSystemCode,稳定路径与层级。 - 菜单存储与数据服务支持
withParentPath与多标签/路径组合查询,递归排序子树,改进缓存清理。 - 统一菜单标签常量(如
ALL、QUICK_MENU),替换硬编码字符串;优化 Tab 解析与查询参数。
📦 数据库与工具 #
DatabaseUtils与各 DB 工具改为基于传入Store的store.box<T>()初始化,提升一致性与稳定性。AddressDBUtils、LocalizationDBUtils等对齐初始化方式并增强异常处理。
🌐 本地化 #
- 本地化模块与 Provider 统一使用新的 Box 初始化方式,优化查询与缓存策略。
🧹 模型与常量 #
JunnySubsystemMenu新增withParentPath字段,修正父级关联并完善树构建逻辑。Language模型移除与子系统菜单的多余关联,精简结构。- 在
lib/src/constants/constants.dart新增并统一常量,移除分散的硬编码键名。
🧩 组件与交互 #
UniversalMenuWidget、MenuTabView、MenuCardBuilder、UniversalSubSystemPage等组件适配新常量与查询参数。
🔧 其他 #
- 统一 Key 命名、清理无用
await、优化异常处理;自动更新 ObjectBox 生成文件。 pubspec.yaml版本更新为1.2.0。
1.1.2 - 2025-08-14 #
✨ 税务计算模块 #
- 无焦点兜底计算:当无焦点但数据齐备时触发目标计算并回填(适配 DataMap 场景)。
•
BaseTaxStrategy._shouldCalculateTarget()传入本轮已计算参数,避免依赖未补丁数据。 • 兜底开关下沉至TaxOperator.enableNoFocusFallback,默认开启,可在实现/构造中配置。 - 金额有焦点时单价反算策略:新增
ReversePricePolicy (always|whenEmpty|never),默认whenEmpty,避免财务手动改金额后覆盖已填单价。 •BaseTaxStrategy._executeCoreCalculation()按策略决定是否反算并写回,跳过时输出简洁日志。 - 日志精简:保留“无焦点兜底触发目标计算”“写回不含税总金额”等关键日志,移除冗长诊断日志。
🌐 本地化与提示文案优化 #
- 采用
MaterialLocalizations标准文案替换部分自定义翻译键,统一行为与平台语义: •lib/src/extensions/business_dialog_extension.dart•lib/src/mixins/list_mixin.dart•lib/src/mixins/list_operation_mixin.dart•lib/src/pages/organization/tree/logic.dart•lib/src/pages/workflow/approve_new/logic.dart•lib/src/widgets/business/flow_item_card.dart•lib/src/widgets/business/selected_action_button.dart
🔧 其他 #
- 调整若干 imports,移除不再使用的 translations 依赖引用。
1.1.1+2 - 2025-08-11 #
✨ 路由统计增强 #
- 在
lib/src/utils/route_stack_observer.dart的_trackPageView()捕获并上报push的arguments - 新增统计字段:
route_name、args_count、args_keys、args(或args_type/args_string) - 当
route.settings.name为空时,以route.runtimeType作为回退
更多历史版本请查看 CHANGELOG_ARCHIVE.md
1.1.1+1 - 2025-08-04 #
🔧 文件下载优化与依赖更新 #
🏗️ 文件下载功能优化
- ♻️ OSS 文件下载请求头优化
• 修改
FileDataExtension.downloadSingleFile()方法的请求头配置 • 将Content-Type: application/octet-stream改为Accept: application/octet-stream• 添加Cache-Control: no-cache禁用缓存,确保获取最新文件 • 为 OSS 签名请求添加dateTime: DateTime.now().toUtc()参数 • 提升文件下载的可靠性和时效性
📦 依赖更新
- ⬆️ mailer 依赖升级 • 将 mailer 从 6.4.1 升级到 6.5.0 • 获得最新的邮件发送功能和安全性改进
1.1.1 - 2025-08-04 #
🔧 数据库清理架构优化 #
✨ 新增功能
- 🆕 LocaleDBUtils 工具类 • 新增独立的语种数据库操作工具类 • 提供完整的语种数据 CRUD 操作 • 支持语种代码查询和存在性检查
🏗️ 架构重构
-
♻️ 数据库清理逻辑重构 • 修复
clearCacheAndToLogin()方法逻辑漏洞 • 解决清理用户缓存时意外清除 account 数据库的问题 • 实现精确的按类型清理逻辑,避免重复清理 -
🔄 DatabaseUtils 架构优化 • 将
getUserMenu()和setSubSystemMenu()业务逻辑迁移到 MenuDBUtils • DatabaseUtils 改为纯粹的中间层委托,不包含具体业务实现 • 提升代码架构的一致性和可维护性
📏 命名规范统一
- 🎯 清理方法命名标准化
• 单一数据类型工具类统一使用
clear()方法 • InitStatusDBUtils、LocaleDBUtils、DictDBUtils、AccountDBUtils、UserInfoDBUtils • 多种数据类型工具类保留具体命名(如 MenuDBUtils 的 clearUserMenus 等) • 提升 API 设计一致性和简洁性
🐛 问题修复
- 🔧 缓存清理逻辑修复 • 修复 BusinessUtils._clearDatabaseCache() 中的重复清理问题 • 采用互斥清理策略:精确清理 vs 批量清理 • 优化 DatabaseUtils 批量清理方法,统一调用专业工具类
🚀 性能优化
- ⚡ 清理操作优化 • 使用并行清理提升性能(Future.wait) • 避免不必要的重复数据库操作 • 优化翻译数据库的复杂清理流程
1.1.0 - 2025-08-02 #
🎉 重大功能发布 - 通用菜单系统与地址数据库架构升级 #
✨ 新增功能 #
- 🆕 通用菜单模块 - 完全配置化的工作台和子系统菜单组件
• 新增
UniversalMenuWidget通用菜单组件 • 新增UniversalWorkbenchPage工作台页面组件 • 新增UniversalSubSystemPage子系统页面组件 • 支持完全配置化的字段映射和显示控制
🏗️ 架构重构 #
- ♻️ 地址数据库架构重构:从 JSON 文件迁移到预置 ObjectBox 数据库
• 删除
assets/others/address.json,新增预置数据库文件 • 实现独立的地址数据库管理系统AddressDBUtils• 支持预置数据库文件的自动复制和初始化机制 • 提供完整的地址查询 API(按 ID、父级 ID、层级、地名搜索等)
🔧 配置系统 #
- 📋 菜单配置系统
•
MenuFieldConfig: 自定义数据字段名映射 •MenuDisplayConfig: 控制布局样式和显示策略 •MenuRouteConfig: 管理导航行为 •MenuIconProvider: 自定义图标映射逻辑 • 新增配置组类简化参数传递
🗃️ 数据处理优化 #
-
📊 菜单数据处理器 •
MenuDataSource: 抽象数据源接口 •UniversalMenuProcessor: 菜单数据处理器 •WorkbenchDataProcessor: 工作台数据处理器 •MultiLevelMenuProcessor: 多层级菜单处理器 • 支持多层级菜单结构和权限验证 -
📊 JunnyAddress 模型结构简化 • 字段名统一:
parentBusinessId→parentId• 移除不必要的索引注解和 Relations 注释代码 • 简化模型结构,提升查询性能
🎨 UI 组件 #
- 🖼️ 统一菜单 UI 组件
•
UnifiedMenuCard: 统一菜单卡片组件 •MenuTabView: 分组标签视图 •MenuDataLoader: 菜单数据加载器 •MenuDataService: 菜单数据服务 • 支持工作台和子系统两种显示模式
🔌 提供者接口 #
- 🔗 菜单服务提供者
•
MenuStorageProvider: 菜单存储提供者 •MenuTranslationProvider: 菜单翻译提供者 • 支持缓存机制和国际化
🗑️ 废弃标记 #
- ⚠️ 标记 setAddresses 方法为废弃 • 预置地址数据库为只读,不支持写入操作 • 提供迁移指南,建议使用独立的用户地址数据库
🔧 代码优化 #
-
🧹 DatabaseUtils 架构调整 • 移除地址相关的直接管理,委托给 AddressDBUtils • 删除 setAddressesJson 方法,简化初始化流程 • 新增 initAddressData 委托方法
-
💻 翻译模型优化 • 简化
JunnyLocale模型结构 • 移除冗余的localDbId字段 • 使用 assignable ID 优化数据库存储 -
🧹 菜单数据库工具优化 • 简化
MenuDBUtils.setSubsystemMenusFromObjects方法签名 • 移除重复的方法实现,统一菜单对象存储逻辑 • 优化异常处理,使用 rethrow 保持错误堆栈
📦 资源配置更新 #
- 🔧 pubspec.yaml 资源路径调整
• 从
assets/others/更新为assets/address_db/• 自动生成文件同步更新(ObjectBox 模型、Assets 生成代码)
📚 文档完善 #
- 📖 新增详细的菜单模块文档 • 新增详细的 README 文档和使用指南 • 包含完整的 API 参考和最佳实践 • 更新实际 API 参数和配置示例
1.0.1+2 - 2025-07-26 #
� 架构优化 #
- ♻️ 用户信息监听系统重构:从 ValueNotifier 迁移到 ObjectBox Stream 响应式方案
• 新增
userInfoStream方法,基于 ObjectBox 原生响应式查询 • 使用box.query().watch(triggerImmediately: true)实现自动监听 • 自动解析 JSON 数据并提供 broadcast stream 支持
🗑️ 代码清理 #
- 🧹 移除废弃的 ValueNotifier 相关代码
• 删除
getUserInfoNotifier、_notifyUserInfoChanged、disposeAllNotifiers方法 • 移除手动通知逻辑和 ValueNotifier 相关代码 • 清理不再需要的 import 依赖
🔧 使用方更新 #
- 💻 更新相关组件使用新的 Stream API
• DatabaseUtils 新增
userInfoStream方法 • 更新junnysoft_app.dart水印监听使用 StreamBuilder • 更新business_utils.dart移除手动清理逻辑 • 更新示例文件使用 StreamBuilder 替代 ValueListenableBuilder
⚡ 性能优化 #
- 🚀 基于 ObjectBox 原生响应式查询的性能提升 • 基于 ObjectBox 原生响应式查询,性能更优 • 无需手动通知和清理,减少内存泄漏风险 • 与 ObjectBox 官方推荐的数据观察者模式保持一致 • 代码更简洁,维护成本更低
📦 依赖更新 #
- 🔧 新增依赖包
• 新增
flat_buffers: ^23.5.26依赖,支持高性能序列化 • 优化.pubignore配置,改进包发布流程
1.0.0 - 2025-07-26 #
🎉 重大版本发布 - 数据库架构全面升级 #
🏗️ 架构重构 #
- ♻️ 数据库引擎完全迁移:从 Isar 4.0.0-dev.14 迁移到 ObjectBox • 完全替换底层数据库引擎,提升性能和稳定性 • 保持所有业务 API 完全兼容,零业务代码变更 • 支持更高效的数据存储和查询操作 • 优化内存使用和磁盘空间占用
🗃️ 数据模型重构 #
- 📊 核心数据模型全面升级
•
JunnyAccount- 用户账户信息模型 •JunnyAddress- 地址信息模型 •JunnyDict- 字典数据模型 •JunnyInitStatus- 初始化状态模型 •JunnyLocale- 本地化配置模型 •JunnyQuickMenu- 快捷菜单模型 •JunnySubsystemMenu- 子系统菜单模型 •JunnyUserInfo- 用户信息模型 •JunnyUserMenu- 用户菜单模型 •JunnyLanguage- 翻译语言模型 •JunnyLanguageLog- 翻译日志模型
🔧 数据库工具类重构 #
- 🛠️ 专业化数据库操作工具
•
AccountDBUtils- 账户数据操作工具 •AddressDBUtils- 地址数据操作工具 •DictDBUtils- 字典数据操作工具 •InitStatusDBUtils- 初始化状态操作工具 •MenuDBUtils- 菜单数据操作工具 •UserInfoDBUtils- 用户信息操作工具 •DatabaseCleanupManager- 数据库清理管理器 • 移除DbAsyncManager,优化异步操作架构
🚀 性能优化 #
- ⚡ 用户信息变更监听优化
• 使用
ValueNotifier替代Stream实现 • 降低内存占用,提升响应速度 • 支持智能更新判断,避免不必要的通知 • 新增getAllUserInfo方法支持批量数据获取
🌐 翻译系统优化 #
- 🔄 翻译缓存架构升级
• 新增
QueryCache查询缓存层 • 优化翻译数据库连接管理 • 改进翻译数据持久化机制 • 支持翻译数据库重连和故障恢复
🧹 代码清理 #
- 🗑️ 移除过时文件和依赖 • 删除所有 Isar 相关生成文件 (*.g.dart) • 移除数据库相关文档文件 • 清理过时的配置和工具类 • 优化项目结构和依赖关系
📦 依赖更新 #
- 📋 核心依赖升级
• 移除
isar和isar_flutter_libs依赖 • 新增objectbox和objectbox_flutter_libs依赖 • 更新相关开发工具依赖 • 优化构建配置文件
🔒 稳定性提升 #
- 🛡️ 数据安全和一致性保障 • 完善数据库操作异常处理机制 • 支持数据库连接故障自动恢复 • 优化并发操作安全性 • 提供完整的数据迁移和回滚支持
📝 开发体验 #
- 💻 开发工具和示例完善
• 新增
UserInfoListenerExample用户信息监听示例 • 完善数据库操作文档和注释 • 优化代码生成和构建流程 • 提供详细的迁移指南和最佳实践
0.13.5-dev - 2025-06-30 #
🐛 Bug 修复 #
- 🔧 修复 FormControlMixin 子表禁用逻辑缺陷
• 修复
isSubtableDisabled方法缺少页面类型判断的问题 • 确保普通编辑页面(add/modify)正确调用_isEditDisabled逻辑 • 确保流程页面正确调用_isWorkflowDisabled逻辑 • 统一返回值类型为bool,保持 API 一致性 • 解决普通编辑页面子表禁用状态判断错误的问题
0.13.4-dev - 2025-06-27 #
🐛 Bug 修复 #
- 🔧 修复组织机构树页面用户数据字段映射问题
• 修复用户数据的
id和userId字段双向赋值逻辑 • 确保无论数据源格式如何都能正确处理用户数据 • 避免因缺少userId字段导致的数据处理错误
0.13.3-dev - 2025-06-27 #
🏗️ 架构重构 #
- ♻️ 列表 Mixin 架构重构,支持分页和非分页两种模式
• 重构
ListPageMixin,保持原有分页功能完全不变 • 新增ListDataMixin,支持非分页全量数据获取 • 重命名list_page_mixin.dart为list_mixin.dart统一管理 • 抽取通用的删除逻辑,实现代码复用
✨ 新功能 #
- 🚀 非分页列表支持
• 新增
ListDataMixin支持一次性获取所有数据 • 适用于数据量较小的简单列表场景 • 支持客户端筛选和排序 • 只支持下拉刷新,不支持上拉加载
📚 文档更新 #
- 📖 完善详细的文档注释和使用示例
• 为
ListPageMixin和ListDataMixin添加完整的类级别文档 • 每个公开方法都有详细的参数说明和返回值描述 • 提供丰富的代码使用示例 • 新增docs/list_mixins_guide.md详细使用指南 • 创建lib/src/examples/list_mixins_example.dart完整示例代码
🔧 开发体验优化 #
- 💡 智能提示增强 • 通过详细的文档注释,IDE 可以提供更好的智能提示 • 清晰的方法分类:必须实现 vs 可选重写 • 统一的文档格式和 emoji 图标,提升可读性
0.13.2-dev - 2025-06-25 #
🏗️ 架构重构 #
- ♻️ Tree 组件迁移修复和优化
• 完成组织机构页面的 Tree 组件重构迁移
• 将
JunnyTreeNode<T>迁移到TreeViewNode<T>• 更新数据访问方式:node.data→node.content• 适配新的 TreeController API:findNodes→searchNodes
✨ 新功能 #
- 🚀 Tree 组件性能优化 • 配置 JunnyTreeController 的 titleProvider 和 childrenProvider • 实现智能筛选策略:单字段用 searchNodes,多字段用 filterNodes • 支持多字段筛选:组织名称、组织代码、组织层级 • 提供不同匹配策略:模糊匹配和精确匹配
🐛 Bug 修复 #
- 🔧 修复 Tree 组件类型错误
• 解决
JunnyTreeNode未定义的编译错误 • 修复findNodes方法不存在的问题 • 清理未使用的筛选条件检查方法
📚 文档更新 #
- 📖 完善 Tree 组件迁移指南 • 更新迁移步骤和注意事项 • 添加性能优化建议 • 提供完整的代码示例