# Genex Flutter 管理后台 App 开发指南 > 发行方管理控制台(Issuer Console App) --- ## 1. 产品定位 发行方管理后台App为企业/政府/机构提供**Web2体验**的券发行与管理工具。发行方无需了解区块链技术,发券 = 创建优惠活动,链上铸造在后台自动完成。 **核心设计原则**: - 发行方看到的是"创建优惠活动",不是"链上铸造NFT" - 消费数据隔离:发行方仅可见汇总数据(兑付率、销量),不可见消费者个人信息 - AI Agent深度融合:协助发券建议、定价优化、信用提升 --- ## 2. 技术栈 | 技术 | 用途 | |------|------| | **Flutter 3.x** | 跨平台(iOS/Android),与Consumer App共享核心模块 | | **Riverpod 2.x** | 状态管理 | | **GoRouter** | 路由管理 | | **Dio** | HTTP客户端 | | **Freezed** | 不可变数据模型 | | **fl_chart** | 数据可视化图表 | | **qr_code_scanner** | 扫码核销 | --- ## 3. 项目结构 ``` genex_issuer/ ├── lib/ │ ├── main.dart │ ├── app/ │ │ ├── router.dart # 发行方专用路由 │ │ └── theme/ # 企业端主题(区别于消费者端) │ ├── core/ # 共享核心模块(可从mono-repo引用) │ ├── features/ │ │ ├── auth/ # 企业注册/登录 │ │ ├── onboarding/ # 入驻审核流程 │ │ ├── coupon_management/ # 券管理(核心模块) │ │ │ ├── create/ # 创建券(模板化发券) │ │ │ ├── list/ # 券列表管理 │ │ │ ├── detail/ # 券详情/数据 │ │ │ └── recall/ # 券召回/下架 │ │ ├── redemption/ # 核销管理 │ │ ├── finance/ # 财务管理 │ │ ├── credit/ # 信用评级 │ │ ├── dashboard/ # 数据仪表盘 │ │ ├── ai_agent/ # AI Agent │ │ └── settings/ # 设置 │ └── shared/ # 共享组件 ├── test/ └── pubspec.yaml ``` --- ## 4. 核心功能模块 ### 4.1 企业入驻审核 ```dart // 入驻流程状态机 enum OnboardingStep { companyInfo, // 企业基本信息 documents, // 营业执照/资质文件上传 contactPerson, // 联系人信息 review, // 等待平台审核 approved, // 审核通过 rejected, // 审核拒绝(可重新提交) } // 零保证金入驻:审核通过后给予初始低额度 @freezed class IssuerProfile with _$IssuerProfile { const factory IssuerProfile({ required String id, required String companyName, required String businessLicense, required CreditRating creditRating, // 信用等级 required double issuanceQuota, // 发行额度 required IssuerTier tier, // 白银/黄金/铂金/钻石 required OnboardingStep onboardingStep, }) = _IssuerProfile; } enum CreditRating { AAA, AA, A, BBB, BB } enum IssuerTier { silver, gold, platinum, diamond } ``` ### 4.2 模板化发券 > 发行方通过Web2界面创建券,无需了解NFT/ERC标准。 ```dart // 券模板类型 enum CouponTemplate { discount, // 折扣券 voucher, // 代金券 giftCard, // 礼品卡 storedValue, // 储值券 } @freezed class CreateCouponParams with _$CreateCouponParams { const factory CreateCouponParams({ required CouponTemplate template, required String name, required double faceValue, required DateTime expiryDate, // ≤12个月(Utility Track强制) required int quantity, // 发行数量 double? issuePrice, // 发行价(通常折价) bool? transferable, // 是否允许转让(默认可转让) int? maxResaleCount, // 最大转售次数(默认2-3次) bool? stackable, // 是否可叠加使用 double? minPurchaseAmount, // 最低消费金额 List? allowedStoreIds, // 限定门店 String? description, String? imageUrl, }) = _CreateCouponParams; } ``` ```dart // 发券流程 // 选择模板 → 填写信息 → 设定规则 → 预览 → 提交审核 → 审核通过 → 自动链上铸造+上架 class CreateCouponUseCase { Future> call(CreateCouponParams params) async { // 前端校验 if (params.expiryDate.difference(DateTime.now()).inDays > 365) { return Left(Failure.validation( errors: {'expiryDate': 'Utility Track有效期不得超过12个月'}, )); } return _repo.submitCouponDraft(params); // 后端:审核通过 → 自动调用CouponFactory合约铸造(发行方无感知) } } ``` ### 4.3 数据仪表盘 ```dart // 发行方数据概览 @freezed class IssuerDashboard with _$IssuerDashboard { const factory IssuerDashboard({ required int totalIssued, // 总发行量 required int totalRedeemed, // 总核销量 required double redemptionRate, // 兑付率 required double breakageRate, // Breakage率 required double totalRevenue, // 总销售收入 required double availableBalance, // 可提现余额 required CreditRating creditRating, // 信用等级 required double quotaUsed, // 已用额度 required double quotaTotal, // 总额度 }) = _IssuerDashboard; } ``` ### 4.4 财务管理 ```dart // 财务视图:法币展示,不暴露链上稳定币细节 @freezed class FinanceOverview with _$FinanceOverview { const factory FinanceOverview({ required double salesRevenue, // 销售收入 required double pendingSettlement, // 待结算 required double withdrawable, // 可提现 required double totalWithdrawn, // 已提现 required List recentTransactions, }) = _FinanceOverview; } ``` ### 4.5 信用评级展示 ```dart // 四因子信用评分:核销率35% + (1-Breakage率)25% + 市场存续20% + 用户满意度20% class CreditScoreWidget extends StatelessWidget { final CreditDetail credit; @override Widget build(BuildContext context) { return Column(children: [ // 总分和等级 CreditScoreGauge(score: credit.totalScore, rating: credit.rating), // 四因子明细 FactorBar(label: '核销率', value: credit.redemptionRate, weight: 0.35), FactorBar(label: '沉淀控制', value: 1 - credit.breakageRate, weight: 0.25), FactorBar(label: '市场存续', value: credit.tenureScore, weight: 0.20), FactorBar(label: '用户满意度', value: credit.satisfaction, weight: 0.20), ]); } } ``` --- ## 5. AI Agent 集成 ### 5.1 发行方AI Agent场景 | 场景 | AI能力 | UI实现 | |------|--------|--------| | 发券建议 | 分析市场趋势,建议发券时间/面值/折扣/数量 | 发券中心顶部AI建议卡片 | | 定价优化 | 三因子模型+AI定价引擎,提供最优定价策略 | 创建券时AI推荐价格+对比分析 | | 信用提升 | 分析信用评分各维度,给出改善建议 | 信用等级页面AI建议列表 | | 销售分析 | 智能解读销售数据,发现异常和机会 | 数据中心AI洞察卡片 | | 额度规划 | 预测额度消耗速度,建议补充计划 | 额度页面AI规划时间线 | | 合规助手 | 提醒合规要求,辅助材料准备 | 入驻审核时AI检查清单 | ### 5.2 AI建议卡片组件 ```dart class AiSuggestionCard extends StatelessWidget { final AiSuggestion suggestion; final VoidCallback onAccept; final VoidCallback onDismiss; @override Widget build(BuildContext context) { return Card( child: Column(children: [ Row(children: [ Icon(Icons.smart_toy, color: Colors.blue), Text('AI建议', style: Theme.of(context).textTheme.titleSmall), ]), Text(suggestion.content), if (suggestion.actionable) Row(children: [ TextButton(onPressed: onDismiss, child: Text('忽略')), ElevatedButton(onPressed: onAccept, child: Text('采纳')), ]), ]), ); } } ``` --- ## 6. 发行方分层激励展示 | 层级 | 月发行量 | 手续费率 | 增值服务 | |------|---------|---------|---------| | 白银 | < 100万 | 1.5% | 基础数据看板 | | 黄金 | 100-500万 | 1.2% | 高级数据分析+推荐位 | | 铂金 | 500-2000万 | 1.0% | 专属客服+定制报表 | | 钻石 | > 2000万 | 0.8% | 定制开发+专属API+联合营销 | > 新入驻发行方首月享黄金层级手续费(获客激励)。 --- ## 7. 与Consumer App共享 | 共享模块 | 内容 | |---------|------| | `core/network/` | Dio配置、拦截器 | | `core/storage/` | 本地存储封装 | | `core/constants/` | 术语映射、API地址 | | `shared/widgets/` | 通用UI组件 | | `shared/models/` | Coupon、User等共享模型 | 通过Dart Package或Mono-repo方式实现代码共享。 --- ## 8. 测试与发布 - 单元测试:发券参数校验、信用评分计算、额度校验 - Widget测试:发券表单、仪表盘图表 - 集成测试:完整发券流程、核销流程 - 发布通道:与Consumer App独立(不同App ID,不同签名) --- ## 9. 财务管理增强 ### 9.1 保证金与冻结销售款 ```dart // 发行方可选:缴纳保证金以快速提升额度 @freezed class GuaranteeFund with _$GuaranteeFund { const factory GuaranteeFund({ required double deposited, // 已缴纳保证金 required double frozenSales, // 冻结的销售款(自愿开启) required bool autoFreezeEnabled, // 是否开启销售款自动冻结 required double freezePercent, // 冻结比例(如20%销售额) }) = _GuaranteeFund; } // 财务管理增强视图 @freezed class FinanceDetailView with _$FinanceDetailView { const factory FinanceDetailView({ required double salesRevenue, // 销售收入 required double breakageIncome, // Breakage收入(过期券) required double platformFees, // 平台手续费支出 required double pendingSettlement, // 待结算 required double withdrawable, // 可提现 required double totalWithdrawn, // 已提现 required double guaranteeDeposit, // 保证金 required double frozenSales, // 冻结销售款 }) = _FinanceDetailView; } ``` ### 9.2 对账报表 ```dart // 日/月对账单 class ReconciliationReport { final DateTime periodStart; final DateTime periodEnd; final List entries; final double totalIncome; final double totalExpense; final double netBalance; // 导出为CSV/PDF Future exportAsCsv() async { /* ... */ } Future exportAsPdf() async { /* ... */ } } ``` --- ## 10. 发行方数据分析增强 ### 10.1 二级市场分析 ```dart @freezed class SecondaryMarketAnalysis with _$SecondaryMarketAnalysis { const factory SecondaryMarketAnalysis({ required int listedCount, // 二级市场挂单数 required double avgResalePrice, // 平均转售价 required double avgDiscount, // 平均折扣率 required int resaleVolume, // 转售成交量 required double resaleRevenue, // 转售成交额 required List priceHistory, // 价格历史(K线数据) }) = _SecondaryMarketAnalysis; } ``` ### 10.2 融资效果分析 ```dart @freezed class FinancingEffectReport with _$FinancingEffectReport { const factory FinancingEffectReport({ required double cashAdvanced, // 现金提前回笼总额 required double avgAdvanceDays, // 平均提前回笼天数 required double financingCost, // 融资成本(平台手续费+折扣损失) required double effectiveRate, // 等效年利率 required List cashFlowTimeline, // 现金流时序图 }) = _FinancingEffectReport; } ``` --- ## 11. 退款窗口配置 ```dart // 发行方可配置退款期限 @freezed class RefundPolicy with _$RefundPolicy { const factory RefundPolicy({ required int refundWindowDays, // 退款窗口(天,默认7天) required bool autoRefundEnabled, // 是否自动退款 required String refundConditions, // 退款条件说明 }) = _RefundPolicy; } // 创建券时配置退款策略 class CreateCouponWithRefundPolicy { Widget buildRefundSection() { return Column(children: [ Text('退款策略'), NumberPicker( label: '退款窗口(天)', min: 0, max: 30, initial: 7, onChanged: (days) => _refundDays = days, ), SwitchListTile( title: Text('允许自动退款'), subtitle: Text('窗口期内用户可直接退款无需审核'), value: _autoRefund, onChanged: (v) => setState(() => _autoRefund = v), ), ]); } } ``` --- ## 12. 批量操作 ```dart // 批量发行、批量核销、批量导出 class BatchOperationsService { // 批量发行(一次创建多种券模板) Future>> batchCreate( List paramsList ) async { return _repo.batchSubmitDrafts(paramsList); } // 批量核销 Future> batchRedeem( List couponCodes ) async { return _repo.batchRedeem(couponCodes); } // 批量数据导出 Future exportData({ required ExportType type, // coupons / transactions / reconciliation required DateRange range, required ExportFormat format, // csv / xlsx / pdf }) async { return _repo.exportBatchData(type, range, format); } } ``` --- ## 13. 券召回与下架 ```dart // 券召回流程 class CouponRecallService { /// 召回未售出的券(链上销毁) Future> recallUnsold(String couponBatchId) async { return _repo.recallUnsoldCoupons(couponBatchId); } /// 问题券紧急下架 Future> emergencyDelist(String couponId, String reason) async { return _repo.delistCoupon(couponId, reason); } /// 已售出券的退款处理 Future> initiateRefundForSold( String couponBatchId, String refundReason ) async { return _repo.initiateRefundForSoldCoupons(couponBatchId, refundReason); } } ``` --- ## 14. 多门店管理增强 ```dart // 门店层级管理 @freezed class StoreHierarchy with _$StoreHierarchy { const factory StoreHierarchy({ required String id, required String name, required StoreLevel level, // headquarters / regional / store String? parentId, // 上级ID required List children, required StorePermissions permissions, }) = _StoreHierarchy; } enum StoreLevel { headquarters, regional, store } // 门店员工管理 @freezed class StoreEmployee with _$StoreEmployee { const factory StoreEmployee({ required String id, required String name, required String phone, required StoreRole role, // cashier / manager / admin required List storeIds, // 可操作的门店 }) = _StoreEmployee; } enum StoreRole { cashier, // 收银员:仅核销权限 manager, // 店长:核销 + 数据查看 admin, // 管理员:全部权限 } ``` --- ## 15. 专属客服通道 ```dart // 铂金/钻石层级发行方专属客服 class DedicatedSupportWidget extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final issuer = ref.watch(issuerProfileProvider); if (['platinum', 'diamond'].contains(issuer.tier.name)) { return Card( child: ListTile( leading: Icon(Icons.headset_mic, color: Colors.amber), title: Text('专属客服'), subtitle: Text('1小时内响应 | 您的客户经理:${issuer.accountManager}'), onTap: () => _openDedicatedChat(context), ), ); } return Card( child: ListTile( leading: Icon(Icons.support_agent), title: Text('在线客服'), subtitle: Text('24小时内响应'), onTap: () => _openSupportTicket(context), ), ); } } ``` --- *文档版本: v2.0* *基于: Genex 券交易平台 - 软件需求规格说明书 v4.1* *技术栈: Flutter 3.x + Riverpod + Clean Architecture* *更新: 补充保证金/冻结销售款/对账报表/二级市场分析/融资效果/退款窗口/批量操作/券召回/多门店增强/专属客服*