50 lines
2.0 KiB
Dart
50 lines
2.0 KiB
Dart
|
|
// 功能描述:工单展示适配,状态动作只取服务端许可,不猜测派单和处理时间。
|
|||
|
|
// 版本:1.0.0。
|
|||
|
|
import 'client_models.dart';
|
|||
|
|
|
|||
|
|
class ServiceTicket {
|
|||
|
|
const ServiceTicket(this.record);
|
|||
|
|
final ClientRecord record;
|
|||
|
|
String get identity => record.identity;
|
|||
|
|
String get number => text('ticket_no', record.title);
|
|||
|
|
String get state => text('status_name', '状态待核实');
|
|||
|
|
String get description => text('description', '暂无描述');
|
|||
|
|
String get result => text('result');
|
|||
|
|
String get address => text('address', '未填写地址');
|
|||
|
|
List<Map<String, Object?>> get photos => (record.raw['photos'] as List? ?? [])
|
|||
|
|
.whereType<Map<Object?, Object?>>()
|
|||
|
|
.map((value) => Map<String, Object?>.from(value))
|
|||
|
|
.where((value) => value['identity'] is String)
|
|||
|
|
.toList();
|
|||
|
|
String get fault =>
|
|||
|
|
const {'valve': '阀门故障', 'alarm': '报警器故障', 'leak': '燃气泄漏', 'other': '其他问题'}[text(
|
|||
|
|
'fault_type',
|
|||
|
|
)] ??
|
|||
|
|
category;
|
|||
|
|
String get category =>
|
|||
|
|
const {
|
|||
|
|
'repair': '维修',
|
|||
|
|
'installation': '安装',
|
|||
|
|
'inspection': '安检',
|
|||
|
|
'reinspection': '复检',
|
|||
|
|
'customer_service': '客户服务',
|
|||
|
|
}[text('category')] ??
|
|||
|
|
'其他服务';
|
|||
|
|
List<String> get actions =>
|
|||
|
|
(record.raw['allowed_actions'] as List?)?.whereType<String>().toList() ?? [];
|
|||
|
|
|
|||
|
|
/// 返回可展示文字,空值采用调用方指定的占位。
|
|||
|
|
String text(String key, [String fallback = '']) {
|
|||
|
|
final value = record.raw[key];
|
|||
|
|
return value is String && value.trim().isNotEmpty ? value : fallback;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// 使用接口的真实时间转换到本地,缺失时不生成推测进度。
|
|||
|
|
String time(String key) {
|
|||
|
|
final value = DateTime.tryParse(text(key))?.toLocal();
|
|||
|
|
if (value == null) return '未记录';
|
|||
|
|
String pad(int n) => n.toString().padLeft(2, '0');
|
|||
|
|
return '${value.year}-${pad(value.month)}-${pad(value.day)} ${pad(value.hour)}:${pad(value.minute)}';
|
|||
|
|
}
|
|||
|
|
}
|