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." });
}
var apiKey = _configuration["OpenRouter:OCRkey"];
var apiKey = _configuration["9Router:OCRkey"];
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;
@ -843,7 +843,7 @@ namespace eSPJ.Controllers.SpjDriverUpstController
var payload = new
{
model = "openai/gpt-5-image-mini",
model = "image-combo",
messages = new object[]
{
new
@ -854,14 +854,7 @@ namespace eSPJ.Controllers.SpjDriverUpstController
new
{
type = "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.
"
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."
},
new
{
@ -875,7 +868,7 @@ namespace eSPJ.Controllers.SpjDriverUpstController
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("Accept", "application/json");
request.Headers.TryAddWithoutValidation("HTTP-Referer", "https://pesapakawan.dinaslhdki.id");

View File

@ -29,15 +29,25 @@
</div>
</div>
<div class="absolute -top-4 left-1/2 transform -translate-x-1/2">
<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">
<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-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>
</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 -->
<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">
<!-- ini untuk yang struk -->
<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>
</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>

View File

@ -11,6 +11,9 @@
"OpenRouter": {
"OCRkey": "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"
},
"9Router": {
"OCRkey": "sk-50d5eecff8b7f7dc-6gwrum-312a1b07"
},
"Mapbox": {
"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 theme, base, components, utilities;
@layer theme {
@ -66,6 +66,7 @@
--color-blue-600: oklch(54.6% 0.245 262.881);
--color-blue-700: oklch(48.8% 0.243 264.376);
--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-100: oklch(93% 0.034 272.788);
--color-indigo-300: oklch(78.5% 0.115 274.713);
@ -335,6 +336,15 @@
.inset-x-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 {
inset-inline-start: calc(var(--spacing) * 0);
}
@ -344,6 +354,12 @@
.start-100 {
inset-inline-start: calc(var(--spacing) * 100);
}
.-end {
inset-inline-end: calc(var(--spacing) * -1);
}
.end {
inset-inline-end: var(--spacing);
}
.end-0 {
inset-inline-end: calc(var(--spacing) * 0);
}
@ -366,7 +382,7 @@
top: calc(var(--spacing) * 1);
}
.top-1\/2 {
top: calc(1/2 * 100%);
top: calc(1 / 2 * 100%);
}
.top-2 {
top: calc(var(--spacing) * 2);
@ -468,7 +484,7 @@
left: calc(var(--spacing) * 0);
}
.left-1\/2 {
left: calc(1/2 * 100%);
left: calc(1 / 2 * 100%);
}
.left-2 {
left: calc(var(--spacing) * 2);
@ -993,13 +1009,13 @@
width: calc(var(--spacing) * 1);
}
.w-1\/3 {
width: calc(1/3 * 100%);
width: calc(1 / 3 * 100%);
}
.w-2 {
width: calc(var(--spacing) * 2);
}
.w-2\/3 {
width: calc(2/3 * 100%);
width: calc(2 / 3 * 100%);
}
.w-3 {
width: calc(var(--spacing) * 3);
@ -1146,7 +1162,7 @@
border-collapse: collapse;
}
.-translate-x-1\/2 {
--tw-translate-x: calc(calc(1/2 * 100%) * -1);
--tw-translate-x: calc(calc(1 / 2 * 100%) * -1);
translate: var(--tw-translate-x) var(--tw-translate-y);
}
.-translate-x-12 {
@ -1158,7 +1174,7 @@
translate: var(--tw-translate-x) var(--tw-translate-y);
}
.-translate-y-1\/2 {
--tw-translate-y: calc(calc(1/2 * 100%) * -1);
--tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
translate: var(--tw-translate-x) var(--tw-translate-y);
}
.-translate-y-16 {
@ -1725,6 +1741,9 @@
.bg-blue-600 {
background-color: var(--color-blue-600);
}
.bg-blue-800 {
background-color: var(--color-blue-800);
}
.bg-cyan-400\/10 {
background-color: color-mix(in srgb, oklch(78.9% 0.154 211.53) 10%, transparent);
@supports (color: color-mix(in lab, red, red)) {
@ -1785,6 +1804,9 @@
.bg-green-600 {
background-color: var(--color-green-600);
}
.bg-green-700 {
background-color: var(--color-green-700);
}
.bg-indigo-300 {
background-color: var(--color-indigo-300);
}
@ -2828,6 +2850,9 @@
.ring-green-100 {
--tw-ring-color: var(--color-green-100);
}
.ring-green-200 {
--tw-ring-color: var(--color-green-200);
}
.ring-orange-200 {
--tw-ring-color: var(--color-orange-200);
}
@ -2861,10 +2886,6 @@
--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,);
}
.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 {
--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,);