update: apikey dan navigation

main
marszayn 2026-04-22 15:14:11 +07:00
parent 183a156686
commit e728c4995b
4 changed files with 55 additions and 28 deletions

View File

@ -823,10 +823,10 @@ namespace eSPJ.Controllers.SpjDriverUpstController
return BadRequest(new { success = false, message = "Ukuran foto terlalu besar. Maksimal 5MB." }); return BadRequest(new { success = false, message = "Ukuran foto terlalu besar. Maksimal 5MB." });
} }
var apiKey = _configuration["OpenRouter:OCRkey"]; var apiKey = _configuration["9Router:OCRkey"];
if (string.IsNullOrWhiteSpace(apiKey)) if (string.IsNullOrWhiteSpace(apiKey))
{ {
return StatusCode(500, new { success = false, message = "OpenRouter API key belum diset." }); return StatusCode(500, new { success = false, message = "9Router API key belum diset." });
} }
byte[] fileBytes; byte[] fileBytes;
@ -843,7 +843,7 @@ namespace eSPJ.Controllers.SpjDriverUpstController
var payload = new var payload = new
{ {
model = "openai/gpt-5-image-mini", model = "image-combo",
messages = new object[] messages = new object[]
{ {
new new
@ -854,14 +854,7 @@ namespace eSPJ.Controllers.SpjDriverUpstController
new new
{ {
type = "text", type = "text",
text = @" text = @"Baca angka pada display timbangan digital dari gambar ini. Fokus hanya pada digit display, abaikan refleksi, cahaya merah, dan teks lain. Keluarkan tepat satu baris angka saja. Format output wajib NNN,NN (gunakan koma sebagai desimal dua digit). Jika tidak yakin atau angka tidak terbaca, keluarkan 0,00. Jangan tambahkan kata, kalimat, atau simbol lain."
Baca angka pada display timbangan digital dari gambar ini.
Fokus hanya pada digit display, abaikan refleksi, cahaya merah, dan teks lain.
Keluarkan tepat satu baris angka saja.
Format output wajib NNN,NN (gunakan koma sebagai desimal dua digit).
Jika tidak yakin atau angka tidak terbaca, keluarkan 0,00.
Jangan tambahkan kata, kalimat, atau simbol lain.
"
}, },
new new
{ {
@ -875,7 +868,7 @@ namespace eSPJ.Controllers.SpjDriverUpstController
var json = JsonSerializer.Serialize(payload); var json = JsonSerializer.Serialize(payload);
var request = new HttpRequestMessage(HttpMethod.Post, "https://openrouter.ai/api/v1/chat/completions"); var request = new HttpRequestMessage(HttpMethod.Post, "http://10.50.50.61:20128/v1/chat/completions");
request.Headers.TryAddWithoutValidation("Authorization", $"Bearer {apiKey}"); request.Headers.TryAddWithoutValidation("Authorization", $"Bearer {apiKey}");
request.Headers.TryAddWithoutValidation("Accept", "application/json"); request.Headers.TryAddWithoutValidation("Accept", "application/json");
request.Headers.TryAddWithoutValidation("HTTP-Referer", "https://pesapakawan.dinaslhdki.id"); request.Headers.TryAddWithoutValidation("HTTP-Referer", "https://pesapakawan.dinaslhdki.id");

View File

@ -29,15 +29,25 @@
</div> </div>
</div> </div>
<div class="absolute -top-4 left-1/2 transform -translate-x-1/2"> <div class="absolute -top-4 left-1/2 transform -translate-x-1/2 flex flex-col items-center">
<a href="@Url.Action("Index", "Submit")" id="odoBtn" class="hover:cursor-pointer w-14 h-14 bg-upst rounded-full shadow-xl flex items-center justify-center transition-all duration-300 hover:scale-110 hover:rotate-6 border-4 border-white ring-2 ring-gray-200">
@* <a href="@Url.Action("Index", "Submit")"
id="odoBtn"
class="hover:cursor-pointer w-14 h-14 bg-blue-800 rounded-full shadow-xl flex items-center justify-center transition-all duration-300 hover:scale-110 hover:rotate-6 border-4 border-white ring-2 ring-gray-200">
<i class="w-6 h-6 text-white" data-lucide="truck"></i> <i class="w-6 h-6 text-white" data-lucide="truck"></i>
</a> </a>
<span class="bg-blue-800 px-2 py-1 rounded-full text-xs text-white font-medium mt-2 text-center">
Upload Muatan
</span> *@
@* <!-- ini untuk yang struk --> <!-- ini untuk yang struk -->
<a href="@Url.Action("Struk", "Submit")" id="strukBtn" class="hover:cursor-pointer w-14 h-14 bg-upst rounded-full shadow-xl flex items-center justify-center transition-all duration-300 hover:scale-110 hover:rotate-6 border-4 border-white ring-2 ring-orange-200"> <a href="@Url.Action("Struk", "Submit")" id="strukBtn" class="hover:cursor-pointer w-14 h-14 bg-green-700 rounded-full shadow-xl flex items-center justify-center transition-all duration-300 hover:scale-110 hover:rotate-6 border-4 border-white ring-2 ring-green-200">
<i class="w-6 h-6 text-white" data-lucide="file-text"></i> <i class="w-6 h-6 text-white" data-lucide="file-text"></i>
</a> *@ </a>
<span class="bg-green-700 px-2 py-1 rounded-full text-xs text-white font-medium mt-2 text-center">
Upload Struk
</span>
</div> </div>
</div> </div>

View File

@ -11,6 +11,9 @@
"OpenRouter": { "OpenRouter": {
"OCRkey": "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" "OCRkey": "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"
}, },
"9Router": {
"OCRkey": "sk-50d5eecff8b7f7dc-6gwrum-312a1b07"
},
"Mapbox": { "Mapbox": {
"Apikey": "pk.eyJ1IjoibWFyc3pheW4iLCJhIjoiY21sajUyMDd0MDllcjNncGdna3NzeTR4ZyJ9.Wvbh5J94j9sF_8KNPp9FYQ" "Apikey": "pk.eyJ1IjoibWFyc3pheW4iLCJhIjoiY21sajUyMDd0MDllcjNncGdna3NzeTR4ZyJ9.Wvbh5J94j9sF_8KNPp9FYQ"
}, },

View File

@ -1,4 +1,4 @@
/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */ /*! tailwindcss v4.2.4 | MIT License | https://tailwindcss.com */
@layer properties; @layer properties;
@layer theme, base, components, utilities; @layer theme, base, components, utilities;
@layer theme { @layer theme {
@ -66,6 +66,7 @@
--color-blue-600: oklch(54.6% 0.245 262.881); --color-blue-600: oklch(54.6% 0.245 262.881);
--color-blue-700: oklch(48.8% 0.243 264.376); --color-blue-700: oklch(48.8% 0.243 264.376);
--color-blue-800: oklch(42.4% 0.199 265.638); --color-blue-800: oklch(42.4% 0.199 265.638);
--color-blue-950: oklch(28.2% 0.091 267.935);
--color-indigo-50: oklch(96.2% 0.018 272.314); --color-indigo-50: oklch(96.2% 0.018 272.314);
--color-indigo-100: oklch(93% 0.034 272.788); --color-indigo-100: oklch(93% 0.034 272.788);
--color-indigo-300: oklch(78.5% 0.115 274.713); --color-indigo-300: oklch(78.5% 0.115 274.713);
@ -335,6 +336,15 @@
.inset-x-4 { .inset-x-4 {
inset-inline: calc(var(--spacing) * 4); inset-inline: calc(var(--spacing) * 4);
} }
.\!start {
inset-inline-start: var(--spacing) !important;
}
.-start {
inset-inline-start: calc(var(--spacing) * -1);
}
.start {
inset-inline-start: var(--spacing);
}
.start-0 { .start-0 {
inset-inline-start: calc(var(--spacing) * 0); inset-inline-start: calc(var(--spacing) * 0);
} }
@ -344,6 +354,12 @@
.start-100 { .start-100 {
inset-inline-start: calc(var(--spacing) * 100); inset-inline-start: calc(var(--spacing) * 100);
} }
.-end {
inset-inline-end: calc(var(--spacing) * -1);
}
.end {
inset-inline-end: var(--spacing);
}
.end-0 { .end-0 {
inset-inline-end: calc(var(--spacing) * 0); inset-inline-end: calc(var(--spacing) * 0);
} }
@ -1725,6 +1741,9 @@
.bg-blue-600 { .bg-blue-600 {
background-color: var(--color-blue-600); background-color: var(--color-blue-600);
} }
.bg-blue-800 {
background-color: var(--color-blue-800);
}
.bg-cyan-400\/10 { .bg-cyan-400\/10 {
background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 10%, transparent); background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 10%, transparent);
@supports (color: color-mix(in lab, red, red)) { @supports (color: color-mix(in lab, red, red)) {
@ -1785,6 +1804,9 @@
.bg-green-600 { .bg-green-600 {
background-color: var(--color-green-600); background-color: var(--color-green-600);
} }
.bg-green-700 {
background-color: var(--color-green-700);
}
.bg-indigo-300 { .bg-indigo-300 {
background-color: var(--color-indigo-300); background-color: var(--color-indigo-300);
} }
@ -2828,6 +2850,9 @@
.ring-green-100 { .ring-green-100 {
--tw-ring-color: var(--color-green-100); --tw-ring-color: var(--color-green-100);
} }
.ring-green-200 {
--tw-ring-color: var(--color-green-200);
}
.ring-orange-200 { .ring-orange-200 {
--tw-ring-color: var(--color-orange-200); --tw-ring-color: var(--color-orange-200);
} }
@ -2861,10 +2886,6 @@
--tw-drop-shadow: drop-shadow(var(--drop-shadow-lg)); --tw-drop-shadow: drop-shadow(var(--drop-shadow-lg));
filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
} }
.grayscale {
--tw-grayscale: grayscale(100%);
filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
}
.invert { .invert {
--tw-invert: invert(100%); --tw-invert: invert(100%);
filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);