2026-04-29 20:37:03 +08:00

744 lines
19 KiB
Dart

class SCVipResourceRes {
SCVipResourceRes({
String? resourceId,
String? name,
String? url,
String? sourceUrl,
String? resourceUrl,
String? cover,
String? coverUrl,
}) {
_resourceId = resourceId;
_name = name;
_url = url;
_sourceUrl = sourceUrl;
_resourceUrl = resourceUrl;
_cover = cover;
_coverUrl = coverUrl;
}
SCVipResourceRes.fromJson(dynamic json) {
final map = _asMap(json);
if (map == null) return;
_resourceId = _stringValue(map['resourceId']);
_name = _stringValue(map['name']);
_url = _stringValue(map['url']);
_sourceUrl = _stringValue(map['sourceUrl']);
_resourceUrl = _stringValue(map['resourceUrl']);
_cover = _stringValue(map['cover']);
_coverUrl = _stringValue(map['coverUrl']);
}
String? _resourceId;
String? _name;
String? _url;
String? _sourceUrl;
String? _resourceUrl;
String? _cover;
String? _coverUrl;
String? get resourceId => _resourceId;
String? get name => _name;
String? get url => _url;
String? get sourceUrl => _sourceUrl;
String? get resourceUrl => _resourceUrl;
String? get cover => _cover;
String? get coverUrl => _coverUrl;
String? get previewUrl {
final cover = _firstNonBlank([_coverUrl, _cover]);
if (cover != null) return cover;
final staticUrl = _firstNonBlank(
[_url, _resourceUrl, _sourceUrl].where((value) {
final text = value?.trim();
return text != null && text.isNotEmpty && !_isSvgaUrl(text);
}),
);
if (staticUrl != null) return staticUrl;
return _firstNonBlank([_url, _resourceUrl, _sourceUrl]);
}
String? get sourceResourceUrl =>
_firstNonBlank([_sourceUrl, _resourceUrl, _url]);
bool get hasIdentity {
final id = _resourceId?.trim();
return id != null && id.isNotEmpty && id != '0';
}
bool get hasAnyUrl =>
_firstNonBlank([_url, _sourceUrl, _resourceUrl, _cover, _coverUrl]) !=
null;
bool get hasPreviewUrl => previewUrl != null;
bool get hasSourceUrl => sourceResourceUrl != null;
bool get hasContent =>
hasAnyUrl || hasIdentity || (_name?.trim().isNotEmpty ?? false);
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['resourceId'] = _resourceId;
map['name'] = _name;
map['url'] = _url;
map['sourceUrl'] = _sourceUrl;
map['resourceUrl'] = _resourceUrl;
map['cover'] = _cover;
map['coverUrl'] = _coverUrl;
return map;
}
}
class SCVipStatusRes {
SCVipStatusRes({
String? userId,
String? sysOrigin,
bool? active,
String? status,
num? level,
String? levelCode,
String? displayName,
String? startAt,
String? expireAt,
SCVipResourceRes? badge,
SCVipResourceRes? avatarFrame,
SCVipResourceRes? entryEffect,
SCVipResourceRes? chatBubble,
SCVipResourceRes? floatPicture,
}) {
_userId = userId;
_sysOrigin = sysOrigin;
_active = active;
_status = status;
_level = level;
_levelCode = levelCode;
_displayName = displayName;
_startAt = startAt;
_expireAt = expireAt;
_badge = badge;
_avatarFrame = avatarFrame;
_entryEffect = entryEffect;
_chatBubble = chatBubble;
_floatPicture = floatPicture;
}
SCVipStatusRes.fromJson(dynamic json) {
final map = _asMap(json);
if (map == null) return;
_userId = _stringValue(map['userId']);
_sysOrigin = _stringValue(map['sysOrigin']);
_active = _boolValue(map['active']);
_status = _stringValue(map['status']);
_level = _numValue(map['level']);
_levelCode = _stringValue(map['levelCode']);
_displayName = _stringValue(map['displayName']);
_startAt = _stringValue(map['startAt']);
_expireAt = _stringValue(map['expireAt']);
_badge = _resourceValue(map['badge']);
_avatarFrame = _resourceValue(map['avatarFrame']);
_entryEffect = _resourceValue(map['entryEffect']);
_chatBubble = _resourceValue(map['chatBubble']);
_floatPicture = _resourceValue(map['floatPicture']);
}
String? _userId;
String? _sysOrigin;
bool? _active;
String? _status;
num? _level;
String? _levelCode;
String? _displayName;
String? _startAt;
String? _expireAt;
SCVipResourceRes? _badge;
SCVipResourceRes? _avatarFrame;
SCVipResourceRes? _entryEffect;
SCVipResourceRes? _chatBubble;
SCVipResourceRes? _floatPicture;
String? get userId => _userId;
String? get sysOrigin => _sysOrigin;
bool? get active => _active;
String? get status => _status;
num? get level => _level;
String? get levelCode => _levelCode;
String? get displayName => _displayName;
String? get startAt => _startAt;
String? get expireAt => _expireAt;
SCVipResourceRes? get badge => _badge;
SCVipResourceRes? get avatarFrame => _avatarFrame;
SCVipResourceRes? get entryEffect => _entryEffect;
SCVipResourceRes? get chatBubble => _chatBubble;
SCVipResourceRes? get floatPicture => _floatPicture;
bool get isActive => _active == true && (_level ?? 0) > 0;
int get levelInt => (_level ?? 0).toInt();
String get displayNameText {
final name = _displayName?.trim();
if (name != null && name.isNotEmpty) return name;
final code = _levelCode?.trim();
if (code != null && code.isNotEmpty) return code;
return levelInt > 0 ? 'VIP $levelInt' : 'VIP';
}
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['userId'] = _userId;
map['sysOrigin'] = _sysOrigin;
map['active'] = _active;
map['status'] = _status;
map['level'] = _level;
map['levelCode'] = _levelCode;
map['displayName'] = _displayName;
map['startAt'] = _startAt;
map['expireAt'] = _expireAt;
if (_badge != null) map['badge'] = _badge?.toJson();
if (_avatarFrame != null) map['avatarFrame'] = _avatarFrame?.toJson();
if (_entryEffect != null) map['entryEffect'] = _entryEffect?.toJson();
if (_chatBubble != null) map['chatBubble'] = _chatBubble?.toJson();
if (_floatPicture != null) map['floatPicture'] = _floatPicture?.toJson();
return map;
}
}
class SCVipLevelConfigRes {
SCVipLevelConfigRes({
num? level,
String? levelCode,
String? displayName,
bool? enabled,
num? durationDays,
num? priceGold,
SCVipResourceRes? badge,
SCVipResourceRes? avatarFrame,
SCVipResourceRes? entryEffect,
SCVipResourceRes? chatBubble,
SCVipResourceRes? floatPicture,
bool? canPurchase,
num? payableGold,
}) {
_level = level;
_levelCode = levelCode;
_displayName = displayName;
_enabled = enabled;
_durationDays = durationDays;
_priceGold = priceGold;
_badge = badge;
_avatarFrame = avatarFrame;
_entryEffect = entryEffect;
_chatBubble = chatBubble;
_floatPicture = floatPicture;
_canPurchase = canPurchase;
_payableGold = payableGold;
}
SCVipLevelConfigRes.fromJson(dynamic json) {
final map = _asMap(json);
if (map == null) return;
_level = _numValue(map['level']);
_levelCode = _stringValue(map['levelCode']);
_displayName = _stringValue(map['displayName']);
_enabled = _boolValue(map['enabled']);
_durationDays = _numValue(map['durationDays']);
_priceGold = _numValue(map['priceGold']);
_badge = _resourceValue(map['badge']);
_avatarFrame = _resourceValue(map['avatarFrame']);
_entryEffect = _resourceValue(map['entryEffect']);
_chatBubble = _resourceValue(map['chatBubble']);
_floatPicture = _resourceValue(map['floatPicture']);
_canPurchase = _boolValue(map['canPurchase']);
_payableGold = _numValue(map['payableGold']);
}
num? _level;
String? _levelCode;
String? _displayName;
bool? _enabled;
num? _durationDays;
num? _priceGold;
SCVipResourceRes? _badge;
SCVipResourceRes? _avatarFrame;
SCVipResourceRes? _entryEffect;
SCVipResourceRes? _chatBubble;
SCVipResourceRes? _floatPicture;
bool? _canPurchase;
num? _payableGold;
num? get level => _level;
String? get levelCode => _levelCode;
String? get displayName => _displayName;
bool? get enabled => _enabled;
num? get durationDays => _durationDays;
num? get priceGold => _priceGold;
SCVipResourceRes? get badge => _badge;
SCVipResourceRes? get avatarFrame => _avatarFrame;
SCVipResourceRes? get entryEffect => _entryEffect;
SCVipResourceRes? get chatBubble => _chatBubble;
SCVipResourceRes? get floatPicture => _floatPicture;
bool? get canPurchase => _canPurchase;
num? get payableGold => _payableGold;
int get levelInt => (_level ?? 0).toInt();
String get displayNameText {
final name = _displayName?.trim();
if (name != null && name.isNotEmpty) return name;
final code = _levelCode?.trim();
if (code != null && code.isNotEmpty) return code;
return levelInt > 0 ? 'VIP$levelInt' : 'VIP';
}
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['level'] = _level;
map['levelCode'] = _levelCode;
map['displayName'] = _displayName;
map['enabled'] = _enabled;
map['durationDays'] = _durationDays;
map['priceGold'] = _priceGold;
if (_badge != null) map['badge'] = _badge?.toJson();
if (_avatarFrame != null) map['avatarFrame'] = _avatarFrame?.toJson();
if (_entryEffect != null) map['entryEffect'] = _entryEffect?.toJson();
if (_chatBubble != null) map['chatBubble'] = _chatBubble?.toJson();
if (_floatPicture != null) map['floatPicture'] = _floatPicture?.toJson();
map['canPurchase'] = _canPurchase;
map['payableGold'] = _payableGold;
return map;
}
}
class SCVipHomeRes {
SCVipHomeRes({
String? userId,
String? sysOrigin,
bool? configured,
SCVipStatusRes? state,
List<SCVipLevelConfigRes>? levels,
}) {
_userId = userId;
_sysOrigin = sysOrigin;
_configured = configured;
_state = state;
_levels = levels;
}
SCVipHomeRes.fromJson(dynamic json) {
final map = _asMap(json);
if (map == null) return;
_userId = _stringValue(map['userId']);
_sysOrigin = _stringValue(map['sysOrigin']);
_configured = _boolValue(map['configured']);
final stateMap = _asMap(map['state']);
_state =
stateMap != null && stateMap.isNotEmpty
? SCVipStatusRes.fromJson(stateMap)
: null;
_levels =
_asList(
map['levels'],
).map((dynamic item) => SCVipLevelConfigRes.fromJson(item)).toList();
}
String? _userId;
String? _sysOrigin;
bool? _configured;
SCVipStatusRes? _state;
List<SCVipLevelConfigRes>? _levels;
String? get userId => _userId;
String? get sysOrigin => _sysOrigin;
bool? get configured => _configured;
SCVipStatusRes? get state => _state;
List<SCVipLevelConfigRes> get levels => _levels ?? <SCVipLevelConfigRes>[];
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['userId'] = _userId;
map['sysOrigin'] = _sysOrigin;
map['configured'] = _configured;
if (_state != null) map['state'] = _state?.toJson();
map['levels'] = levels.map((item) => item.toJson()).toList();
return map;
}
}
class SCVipPreviewRes {
SCVipPreviewRes({
String? userId,
String? sysOrigin,
String? orderType,
num? currentLevel,
num? targetLevel,
num? durationDays,
num? originalPriceGold,
num? payableGold,
String? startAt,
String? expireAt,
SCVipLevelConfigRes? targetConfig,
}) {
_userId = userId;
_sysOrigin = sysOrigin;
_orderType = orderType;
_currentLevel = currentLevel;
_targetLevel = targetLevel;
_durationDays = durationDays;
_originalPriceGold = originalPriceGold;
_payableGold = payableGold;
_startAt = startAt;
_expireAt = expireAt;
_targetConfig = targetConfig;
}
SCVipPreviewRes.fromJson(dynamic json) {
final map = _asMap(json);
if (map == null) return;
_userId = _stringValue(map['userId']);
_sysOrigin = _stringValue(map['sysOrigin']);
_orderType = _stringValue(map['orderType']);
_currentLevel = _numValue(map['currentLevel']);
_targetLevel = _numValue(map['targetLevel']);
_durationDays = _numValue(map['durationDays']);
_originalPriceGold = _numValue(map['originalPriceGold']);
_payableGold = _numValue(map['payableGold']);
_startAt = _stringValue(map['startAt']);
_expireAt = _stringValue(map['expireAt']);
final targetConfigMap = _asMap(map['targetConfig']);
_targetConfig =
targetConfigMap != null && targetConfigMap.isNotEmpty
? SCVipLevelConfigRes.fromJson(targetConfigMap)
: null;
}
String? _userId;
String? _sysOrigin;
String? _orderType;
num? _currentLevel;
num? _targetLevel;
num? _durationDays;
num? _originalPriceGold;
num? _payableGold;
String? _startAt;
String? _expireAt;
SCVipLevelConfigRes? _targetConfig;
String? get userId => _userId;
String? get sysOrigin => _sysOrigin;
String? get orderType => _orderType;
num? get currentLevel => _currentLevel;
num? get targetLevel => _targetLevel;
num? get durationDays => _durationDays;
num? get originalPriceGold => _originalPriceGold;
num? get payableGold => _payableGold;
String? get startAt => _startAt;
String? get expireAt => _expireAt;
SCVipLevelConfigRes? get targetConfig => _targetConfig;
int get targetLevelInt => (_targetLevel ?? 0).toInt();
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['userId'] = _userId;
map['sysOrigin'] = _sysOrigin;
map['orderType'] = _orderType;
map['currentLevel'] = _currentLevel;
map['targetLevel'] = _targetLevel;
map['durationDays'] = _durationDays;
map['originalPriceGold'] = _originalPriceGold;
map['payableGold'] = _payableGold;
map['startAt'] = _startAt;
map['expireAt'] = _expireAt;
if (_targetConfig != null) {
map['targetConfig'] = _targetConfig?.toJson();
}
return map;
}
}
class SCVipPurchaseRes {
SCVipPurchaseRes({
bool? success,
SCVipOrderRes? order,
SCVipStatusRes? state,
}) {
_success = success;
_order = order;
_state = state;
}
SCVipPurchaseRes.fromJson(dynamic json) {
final map = _asMap(json);
if (map == null) return;
_success = _boolValue(map['success']);
final orderMap = _asMap(map['order']);
_order =
orderMap != null && orderMap.isNotEmpty
? SCVipOrderRes.fromJson(orderMap)
: null;
final stateMap = _asMap(map['state']);
_state =
stateMap != null && stateMap.isNotEmpty
? SCVipStatusRes.fromJson(stateMap)
: null;
}
bool? _success;
SCVipOrderRes? _order;
SCVipStatusRes? _state;
bool? get success => _success;
SCVipOrderRes? get order => _order;
SCVipStatusRes? get state => _state;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['success'] = _success;
if (_order != null) map['order'] = _order?.toJson();
if (_state != null) map['state'] = _state?.toJson();
return map;
}
}
class SCVipOrdersRes {
SCVipOrdersRes({List<SCVipOrderRes>? records, num? total}) {
_records = records;
_total = total;
}
SCVipOrdersRes.fromJson(dynamic json) {
final map = _asMap(json);
if (map == null) return;
_records =
_asList(
map['records'],
).map((dynamic item) => SCVipOrderRes.fromJson(item)).toList();
_total = _numValue(map['total']);
}
List<SCVipOrderRes>? _records;
num? _total;
List<SCVipOrderRes> get records => _records ?? <SCVipOrderRes>[];
num? get total => _total;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['records'] = records.map((item) => item.toJson()).toList();
map['total'] = _total;
return map;
}
}
class SCVipOrderRes {
SCVipOrderRes({
String? id,
String? eventId,
String? sysOrigin,
String? userId,
String? orderType,
num? fromLevel,
num? toLevel,
num? durationDays,
num? originalPriceGold,
num? paidGold,
String? status,
String? startAt,
String? expireAt,
}) {
_id = id;
_eventId = eventId;
_sysOrigin = sysOrigin;
_userId = userId;
_orderType = orderType;
_fromLevel = fromLevel;
_toLevel = toLevel;
_durationDays = durationDays;
_originalPriceGold = originalPriceGold;
_paidGold = paidGold;
_status = status;
_startAt = startAt;
_expireAt = expireAt;
}
SCVipOrderRes.fromJson(dynamic json) {
final map = _asMap(json);
if (map == null) return;
_id = _stringValue(map['id']);
_eventId = _stringValue(map['eventId']);
_sysOrigin = _stringValue(map['sysOrigin']);
_userId = _stringValue(map['userId']);
_orderType = _stringValue(map['orderType']);
_fromLevel = _numValue(map['fromLevel']);
_toLevel = _numValue(map['toLevel']);
_durationDays = _numValue(map['durationDays']);
_originalPriceGold = _numValue(map['originalPriceGold']);
_paidGold = _numValue(map['paidGold']);
_status = _stringValue(map['status']);
_startAt = _stringValue(map['startAt']);
_expireAt = _stringValue(map['expireAt']);
}
String? _id;
String? _eventId;
String? _sysOrigin;
String? _userId;
String? _orderType;
num? _fromLevel;
num? _toLevel;
num? _durationDays;
num? _originalPriceGold;
num? _paidGold;
String? _status;
String? _startAt;
String? _expireAt;
String? get id => _id;
String? get eventId => _eventId;
String? get sysOrigin => _sysOrigin;
String? get userId => _userId;
String? get orderType => _orderType;
num? get fromLevel => _fromLevel;
num? get toLevel => _toLevel;
num? get durationDays => _durationDays;
num? get originalPriceGold => _originalPriceGold;
num? get paidGold => _paidGold;
String? get status => _status;
String? get startAt => _startAt;
String? get expireAt => _expireAt;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['id'] = _id;
map['eventId'] = _eventId;
map['sysOrigin'] = _sysOrigin;
map['userId'] = _userId;
map['orderType'] = _orderType;
map['fromLevel'] = _fromLevel;
map['toLevel'] = _toLevel;
map['durationDays'] = _durationDays;
map['originalPriceGold'] = _originalPriceGold;
map['paidGold'] = _paidGold;
map['status'] = _status;
map['startAt'] = _startAt;
map['expireAt'] = _expireAt;
return map;
}
}
Map<String, dynamic>? _asMap(dynamic value) {
if (value is Map<String, dynamic>) return value;
if (value is Map) return Map<String, dynamic>.from(value);
return null;
}
List<dynamic> _asList(dynamic value) {
if (value is List) return value;
return <dynamic>[];
}
SCVipResourceRes? _resourceValue(dynamic value) {
final map = _asMap(value);
if (map == null || map.isEmpty) return null;
return SCVipResourceRes.fromJson(map);
}
String? _stringValue(dynamic value) {
if (value == null) return null;
return value.toString();
}
num? _numValue(dynamic value) {
if (value == null) return null;
if (value is num) return value;
return num.tryParse(value.toString());
}
bool? _boolValue(dynamic value) {
if (value == null) return null;
if (value is bool) return value;
if (value is num) return value != 0;
final lower = value.toString().toLowerCase();
if (lower == 'true') return true;
if (lower == 'false') return false;
return null;
}
String? _firstNonBlank(Iterable<String?> values) {
for (final value in values) {
final text = value?.trim();
if (text != null && text.isNotEmpty) {
return text;
}
}
return null;
}
bool _isSvgaUrl(String value) {
final lower = value.toLowerCase();
return lower.endsWith('.svga') || lower.contains('.svga?');
}