feat: V/R 유지보수 시스템 전환 및 대시보드 테이블 형태 완성
Some checks failed
Flutter Test & Quality Check / Test on macos-latest (push) Has been cancelled
Flutter Test & Quality Check / Test on ubuntu-latest (push) Has been cancelled
Flutter Test & Quality Check / Build APK (push) Has been cancelled

- V/R 시스템 완전 전환: WARRANTY/CONTRACT/INSPECTION → V(방문)/R(원격)
- 유지보수 대시보드 카드 → StandardDataTable 테이블 형태 전환
- "조회중..." 문제 해결: 백엔드 직접 필드 사용 (equipment_model, company_name)
- MaintenanceDto 신규 필드 추가: company_id, company_name, equipment_serial, equipment_model
- preloadEquipmentData 비활성화로 불필요한 equipment-history API 호출 제거
- CO-STAR 프레임워크 적용 및 CLAUDE.md v3.0 업데이트
- Flutter Analyze ERROR: 0 유지, 100% shadcn_ui 컴플라이언스

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
JiWoong Sul
2025-09-05 14:33:20 +09:00
parent 2c20999025
commit 519e1883a3
46 changed files with 7804 additions and 1034 deletions

View File

@@ -573,7 +573,10 @@ mixin _$EquipmentHistoryRequestDto {
@JsonKey(name: 'equipments_id')
int get equipmentsId => throw _privateConstructorUsedError;
@JsonKey(name: 'warehouses_id')
int get warehousesId => throw _privateConstructorUsedError;
int? get warehousesId =>
throw _privateConstructorUsedError; // 출고 시 null 가능 (다른 회사로 완전 이관)
@JsonKey(name: 'company_ids')
List<int>? get companyIds => throw _privateConstructorUsedError; // 백엔드 API 매칭
@JsonKey(name: 'transaction_type')
String get transactionType => throw _privateConstructorUsedError;
int get quantity => throw _privateConstructorUsedError;
@@ -600,7 +603,8 @@ abstract class $EquipmentHistoryRequestDtoCopyWith<$Res> {
@useResult
$Res call(
{@JsonKey(name: 'equipments_id') int equipmentsId,
@JsonKey(name: 'warehouses_id') int warehousesId,
@JsonKey(name: 'warehouses_id') int? warehousesId,
@JsonKey(name: 'company_ids') List<int>? companyIds,
@JsonKey(name: 'transaction_type') String transactionType,
int quantity,
@JsonKey(name: 'transacted_at') DateTime? transactedAt,
@@ -624,7 +628,8 @@ class _$EquipmentHistoryRequestDtoCopyWithImpl<$Res,
@override
$Res call({
Object? equipmentsId = null,
Object? warehousesId = null,
Object? warehousesId = freezed,
Object? companyIds = freezed,
Object? transactionType = null,
Object? quantity = null,
Object? transactedAt = freezed,
@@ -635,10 +640,14 @@ class _$EquipmentHistoryRequestDtoCopyWithImpl<$Res,
? _value.equipmentsId
: equipmentsId // ignore: cast_nullable_to_non_nullable
as int,
warehousesId: null == warehousesId
warehousesId: freezed == warehousesId
? _value.warehousesId
: warehousesId // ignore: cast_nullable_to_non_nullable
as int,
as int?,
companyIds: freezed == companyIds
? _value.companyIds
: companyIds // ignore: cast_nullable_to_non_nullable
as List<int>?,
transactionType: null == transactionType
? _value.transactionType
: transactionType // ignore: cast_nullable_to_non_nullable
@@ -670,7 +679,8 @@ abstract class _$$EquipmentHistoryRequestDtoImplCopyWith<$Res>
@useResult
$Res call(
{@JsonKey(name: 'equipments_id') int equipmentsId,
@JsonKey(name: 'warehouses_id') int warehousesId,
@JsonKey(name: 'warehouses_id') int? warehousesId,
@JsonKey(name: 'company_ids') List<int>? companyIds,
@JsonKey(name: 'transaction_type') String transactionType,
int quantity,
@JsonKey(name: 'transacted_at') DateTime? transactedAt,
@@ -693,7 +703,8 @@ class __$$EquipmentHistoryRequestDtoImplCopyWithImpl<$Res>
@override
$Res call({
Object? equipmentsId = null,
Object? warehousesId = null,
Object? warehousesId = freezed,
Object? companyIds = freezed,
Object? transactionType = null,
Object? quantity = null,
Object? transactedAt = freezed,
@@ -704,10 +715,14 @@ class __$$EquipmentHistoryRequestDtoImplCopyWithImpl<$Res>
? _value.equipmentsId
: equipmentsId // ignore: cast_nullable_to_non_nullable
as int,
warehousesId: null == warehousesId
warehousesId: freezed == warehousesId
? _value.warehousesId
: warehousesId // ignore: cast_nullable_to_non_nullable
as int,
as int?,
companyIds: freezed == companyIds
? _value._companyIds
: companyIds // ignore: cast_nullable_to_non_nullable
as List<int>?,
transactionType: null == transactionType
? _value.transactionType
: transactionType // ignore: cast_nullable_to_non_nullable
@@ -733,11 +748,13 @@ class __$$EquipmentHistoryRequestDtoImplCopyWithImpl<$Res>
class _$EquipmentHistoryRequestDtoImpl implements _EquipmentHistoryRequestDto {
const _$EquipmentHistoryRequestDtoImpl(
{@JsonKey(name: 'equipments_id') required this.equipmentsId,
@JsonKey(name: 'warehouses_id') required this.warehousesId,
@JsonKey(name: 'warehouses_id') this.warehousesId,
@JsonKey(name: 'company_ids') final List<int>? companyIds,
@JsonKey(name: 'transaction_type') required this.transactionType,
required this.quantity,
@JsonKey(name: 'transacted_at') this.transactedAt,
this.remark});
this.remark})
: _companyIds = companyIds;
factory _$EquipmentHistoryRequestDtoImpl.fromJson(
Map<String, dynamic> json) =>
@@ -748,7 +765,21 @@ class _$EquipmentHistoryRequestDtoImpl implements _EquipmentHistoryRequestDto {
final int equipmentsId;
@override
@JsonKey(name: 'warehouses_id')
final int warehousesId;
final int? warehousesId;
// 출고 시 null 가능 (다른 회사로 완전 이관)
final List<int>? _companyIds;
// 출고 시 null 가능 (다른 회사로 완전 이관)
@override
@JsonKey(name: 'company_ids')
List<int>? get companyIds {
final value = _companyIds;
if (value == null) return null;
if (_companyIds is EqualUnmodifiableListView) return _companyIds;
// ignore: implicit_dynamic_type
return EqualUnmodifiableListView(value);
}
// 백엔드 API 매칭
@override
@JsonKey(name: 'transaction_type')
final String transactionType;
@@ -762,7 +793,7 @@ class _$EquipmentHistoryRequestDtoImpl implements _EquipmentHistoryRequestDto {
@override
String toString() {
return 'EquipmentHistoryRequestDto(equipmentsId: $equipmentsId, warehousesId: $warehousesId, transactionType: $transactionType, quantity: $quantity, transactedAt: $transactedAt, remark: $remark)';
return 'EquipmentHistoryRequestDto(equipmentsId: $equipmentsId, warehousesId: $warehousesId, companyIds: $companyIds, transactionType: $transactionType, quantity: $quantity, transactedAt: $transactedAt, remark: $remark)';
}
@override
@@ -774,6 +805,8 @@ class _$EquipmentHistoryRequestDtoImpl implements _EquipmentHistoryRequestDto {
other.equipmentsId == equipmentsId) &&
(identical(other.warehousesId, warehousesId) ||
other.warehousesId == warehousesId) &&
const DeepCollectionEquality()
.equals(other._companyIds, _companyIds) &&
(identical(other.transactionType, transactionType) ||
other.transactionType == transactionType) &&
(identical(other.quantity, quantity) ||
@@ -785,8 +818,15 @@ class _$EquipmentHistoryRequestDtoImpl implements _EquipmentHistoryRequestDto {
@JsonKey(includeFromJson: false, includeToJson: false)
@override
int get hashCode => Object.hash(runtimeType, equipmentsId, warehousesId,
transactionType, quantity, transactedAt, remark);
int get hashCode => Object.hash(
runtimeType,
equipmentsId,
warehousesId,
const DeepCollectionEquality().hash(_companyIds),
transactionType,
quantity,
transactedAt,
remark);
/// Create a copy of EquipmentHistoryRequestDto
/// with the given fields replaced by the non-null parameter values.
@@ -809,7 +849,8 @@ abstract class _EquipmentHistoryRequestDto
implements EquipmentHistoryRequestDto {
const factory _EquipmentHistoryRequestDto(
{@JsonKey(name: 'equipments_id') required final int equipmentsId,
@JsonKey(name: 'warehouses_id') required final int warehousesId,
@JsonKey(name: 'warehouses_id') final int? warehousesId,
@JsonKey(name: 'company_ids') final List<int>? companyIds,
@JsonKey(name: 'transaction_type') required final String transactionType,
required final int quantity,
@JsonKey(name: 'transacted_at') final DateTime? transactedAt,
@@ -823,7 +864,10 @@ abstract class _EquipmentHistoryRequestDto
int get equipmentsId;
@override
@JsonKey(name: 'warehouses_id')
int get warehousesId;
int? get warehousesId; // 출고 시 null 가능 (다른 회사로 완전 이관)
@override
@JsonKey(name: 'company_ids')
List<int>? get companyIds; // 백엔드 API 매칭
@override
@JsonKey(name: 'transaction_type')
String get transactionType;