feat(public-ui): implement public UMKM directory, detail and product catalog pages

This commit is contained in:
2026-04-20 17:44:36 +08:00
parent b673e36a45
commit 1a74a1f683
8 changed files with 529 additions and 10 deletions

View File

@@ -122,6 +122,20 @@ export const umkmState = proxy({
}
return false;
}
},
findUnique: {
data: null as any,
loading: false,
async load(id: string) {
this.loading = true;
try {
const res = await fetch(`/api/ekonomi/umkm/${id}`);
const result = await res.json();
if (result.success) {
this.data = result.data;
}
} catch (e) { console.error(e); } finally { this.loading = false; }
}
}
},
@@ -132,10 +146,17 @@ export const umkmState = proxy({
page: 1,
totalPages: 1,
loading: false,
async load(page = 1, limit = 10, search = "", umkmId = "") {
async load(page = 1, limit = 10, search = "", umkmId = "", kategoriId = "") {
this.loading = true;
this.page = page;
try {
const params = new URLSearchParams({ page: page.toString(), limit: limit.toString(), search, umkmId });
const params = new URLSearchParams({
page: page.toString(),
limit: limit.toString(),
search,
umkmId,
kategoriId
});
const res = await fetch(`/api/ekonomi/umkm/produk/find-many?${params}`);
const result = await res.json();
if (result.success) {
@@ -215,6 +236,24 @@ export const umkmState = proxy({
}
},
// Kategori Produk (Share with Pasar Desa)
kategoriProduk: {
findManyAll: {
data: [] as any[],
loading: false,
async load() {
this.loading = true;
try {
const res = await fetch("/api/ekonomi/pasar-desa/kategori-produk/find-many-all");
const result = await res.json();
if (result.success) {
this.data = result.data;
}
} catch (e) { console.error(e); } finally { this.loading = false; }
}
}
},
// Dashboard Module
dashboard: {
kpi: { data: null as any, loading: false },