mirror of
https://github.com/hay-kot/homebox.git
synced 2024-11-16 21:58:40 +00:00
feat: add receipt support for attachments (#89)
* add receipt support for attachments * fix show logic
This commit is contained in:
parent
dbaaf4ad0a
commit
57f9372e49
6 changed files with 25 additions and 4 deletions
|
@ -95,6 +95,7 @@ const (
|
||||||
TypeManual Type = "manual"
|
TypeManual Type = "manual"
|
||||||
TypeWarranty Type = "warranty"
|
TypeWarranty Type = "warranty"
|
||||||
TypeAttachment Type = "attachment"
|
TypeAttachment Type = "attachment"
|
||||||
|
TypeReceipt Type = "receipt"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (_type Type) String() string {
|
func (_type Type) String() string {
|
||||||
|
@ -104,7 +105,7 @@ func (_type Type) String() string {
|
||||||
// TypeValidator is a validator for the "type" field enum values. It is called by the builders before save.
|
// TypeValidator is a validator for the "type" field enum values. It is called by the builders before save.
|
||||||
func TypeValidator(_type Type) error {
|
func TypeValidator(_type Type) error {
|
||||||
switch _type {
|
switch _type {
|
||||||
case TypePhoto, TypeManual, TypeWarranty, TypeAttachment:
|
case TypePhoto, TypeManual, TypeWarranty, TypeAttachment, TypeReceipt:
|
||||||
return nil
|
return nil
|
||||||
default:
|
default:
|
||||||
return fmt.Errorf("attachment: invalid enum value for type field: %q", _type)
|
return fmt.Errorf("attachment: invalid enum value for type field: %q", _type)
|
||||||
|
|
|
@ -13,7 +13,7 @@ var (
|
||||||
{Name: "id", Type: field.TypeUUID},
|
{Name: "id", Type: field.TypeUUID},
|
||||||
{Name: "created_at", Type: field.TypeTime},
|
{Name: "created_at", Type: field.TypeTime},
|
||||||
{Name: "updated_at", Type: field.TypeTime},
|
{Name: "updated_at", Type: field.TypeTime},
|
||||||
{Name: "type", Type: field.TypeEnum, Enums: []string{"photo", "manual", "warranty", "attachment"}, Default: "attachment"},
|
{Name: "type", Type: field.TypeEnum, Enums: []string{"photo", "manual", "warranty", "attachment", "receipt"}, Default: "attachment"},
|
||||||
{Name: "document_attachments", Type: field.TypeUUID},
|
{Name: "document_attachments", Type: field.TypeUUID},
|
||||||
{Name: "item_attachments", Type: field.TypeUUID},
|
{Name: "item_attachments", Type: field.TypeUUID},
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ func (Attachment) Mixin() []ent.Mixin {
|
||||||
func (Attachment) Fields() []ent.Field {
|
func (Attachment) Fields() []ent.Field {
|
||||||
return []ent.Field{
|
return []ent.Field{
|
||||||
field.Enum("type").
|
field.Enum("type").
|
||||||
Values("photo", "manual", "warranty", "attachment").
|
Values("photo", "manual", "warranty", "attachment", "receipt").
|
||||||
Default("attachment"),
|
Default("attachment"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ export enum AttachmentTypes {
|
||||||
Manual = "manual",
|
Manual = "manual",
|
||||||
Warranty = "warranty",
|
Warranty = "warranty",
|
||||||
Attachment = "attachment",
|
Attachment = "attachment",
|
||||||
|
Receipt = "receipt",
|
||||||
}
|
}
|
||||||
|
|
||||||
export type Result<T> = {
|
export type Result<T> = {
|
||||||
|
|
|
@ -190,6 +190,7 @@
|
||||||
const dropAttachment = (files: File[] | null) => uploadAttachment(files, AttachmentTypes.Attachment);
|
const dropAttachment = (files: File[] | null) => uploadAttachment(files, AttachmentTypes.Attachment);
|
||||||
const dropWarranty = (files: File[] | null) => uploadAttachment(files, AttachmentTypes.Warranty);
|
const dropWarranty = (files: File[] | null) => uploadAttachment(files, AttachmentTypes.Warranty);
|
||||||
const dropManual = (files: File[] | null) => uploadAttachment(files, AttachmentTypes.Manual);
|
const dropManual = (files: File[] | null) => uploadAttachment(files, AttachmentTypes.Manual);
|
||||||
|
const dropReceipt = (files: File[] | null) => uploadAttachment(files, AttachmentTypes.Receipt);
|
||||||
|
|
||||||
async function uploadAttachment(files: File[] | null, type: AttachmentTypes) {
|
async function uploadAttachment(files: File[] | null, type: AttachmentTypes) {
|
||||||
if (!files && files.length === 0) {
|
if (!files && files.length === 0) {
|
||||||
|
@ -378,6 +379,7 @@
|
||||||
<DropZone @drop="dropWarranty"> Warranty </DropZone>
|
<DropZone @drop="dropWarranty"> Warranty </DropZone>
|
||||||
<DropZone @drop="dropManual"> Manual </DropZone>
|
<DropZone @drop="dropManual"> Manual </DropZone>
|
||||||
<DropZone @drop="dropAttachment"> Attachment </DropZone>
|
<DropZone @drop="dropAttachment"> Attachment </DropZone>
|
||||||
|
<DropZone @drop="dropReceipt"> Receipt </DropZone>
|
||||||
</div>
|
</div>
|
||||||
<button
|
<button
|
||||||
v-else
|
v-else
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
attachments: ItemAttachment[];
|
attachments: ItemAttachment[];
|
||||||
warranty: ItemAttachment[];
|
warranty: ItemAttachment[];
|
||||||
manuals: ItemAttachment[];
|
manuals: ItemAttachment[];
|
||||||
|
receipts: ItemAttachment[];
|
||||||
};
|
};
|
||||||
|
|
||||||
const attachments = computed<FilteredAttachments>(() => {
|
const attachments = computed<FilteredAttachments>(() => {
|
||||||
|
@ -40,6 +41,7 @@
|
||||||
attachments: [],
|
attachments: [],
|
||||||
manuals: [],
|
manuals: [],
|
||||||
warranty: [],
|
warranty: [],
|
||||||
|
receipts: [],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,6 +53,8 @@
|
||||||
acc.warranty.push(attachment);
|
acc.warranty.push(attachment);
|
||||||
} else if (attachment.type === "manual") {
|
} else if (attachment.type === "manual") {
|
||||||
acc.manuals.push(attachment);
|
acc.manuals.push(attachment);
|
||||||
|
} else if (attachment.type === "receipt") {
|
||||||
|
acc.receipts.push(attachment);
|
||||||
} else {
|
} else {
|
||||||
acc.attachments.push(attachment);
|
acc.attachments.push(attachment);
|
||||||
}
|
}
|
||||||
|
@ -61,6 +65,7 @@
|
||||||
attachments: [] as ItemAttachment[],
|
attachments: [] as ItemAttachment[],
|
||||||
warranty: [] as ItemAttachment[],
|
warranty: [] as ItemAttachment[],
|
||||||
manuals: [] as ItemAttachment[],
|
manuals: [] as ItemAttachment[],
|
||||||
|
receipts: [] as ItemAttachment[],
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@ -103,7 +108,8 @@
|
||||||
attachments.value.photos.length > 0 ||
|
attachments.value.photos.length > 0 ||
|
||||||
attachments.value.attachments.length > 0 ||
|
attachments.value.attachments.length > 0 ||
|
||||||
attachments.value.warranty.length > 0 ||
|
attachments.value.warranty.length > 0 ||
|
||||||
attachments.value.manuals.length > 0
|
attachments.value.manuals.length > 0 ||
|
||||||
|
attachments.value.receipts.length > 0
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -134,6 +140,10 @@
|
||||||
push("Manuals");
|
push("Manuals");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (attachments.value.receipts.length > 0) {
|
||||||
|
push("Receipts");
|
||||||
|
}
|
||||||
|
|
||||||
return details;
|
return details;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -323,6 +333,13 @@
|
||||||
:item-id="item.id"
|
:item-id="item.id"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
<template #receipts>
|
||||||
|
<ItemAttachmentsList
|
||||||
|
v-if="attachments.receipts.length > 0"
|
||||||
|
:attachments="attachments.receipts"
|
||||||
|
:item-id="item.id"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
</DetailsSection>
|
</DetailsSection>
|
||||||
</BaseCard>
|
</BaseCard>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue