pretyness

This commit is contained in:
Sirttas
2026-05-24 17:00:34 +02:00
parent 72933ada6e
commit 11fbe847f2
5 changed files with 53 additions and 20 deletions
+17 -4
View File
@@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import {Ledger, useLedgersStore} from "@/ledger/ledger.ts"; import {Ledger, systemLedger, useLedgersStore} from "@/ledger/ledger.ts";
import {storeToRefs} from "pinia"; import {storeToRefs} from "pinia";
import {computed} from "vue"; import {computed} from "vue";
@@ -12,11 +12,24 @@ const ledger = defineModel<Ledger>();
const {ledgers: allLedgers} = storeToRefs(useLedgersStore()); const {ledgers: allLedgers} = storeToRefs(useLedgersStore());
const ledgersToUse = computed(() => props.ledgers || allLedgers); const ledgersToUse = computed(() => props.ledgers || allLedgers);
const legerId = computed({
get: () => ledger.value?.ledgerId,
set: value => ledger.value = ledgersToUse.value[ledgersToUse.value.findIndex(x => x.value === value)]
})
</script> </script>
<template> <template>
<select v-model="ledger"> <select v-model="legerId" :class="{'system-ledger': ledger === systemLedger}">
<option v-for="ledger in ledgersToUse" :key="ledger.ledgerId" :value="ledger">{{ ledger.name }}</option> <option v-for="ledger in ledgersToUse" :key="ledger.ledgerId" :value="ledger.ledgerId" :class="{'system-ledger': ledger === systemLedger}">{{ ledger.name }}</option>
</select> </select>
</template> </template>
<style scoped>
@reference "tailwindcss";
.system-ledger {
@apply text-emerald-400;
}
</style>
+8
View File
@@ -20,6 +20,14 @@ export type MainLedger = MainLedgerResponse & {type: MainLedgerResponseTypeEnum}
export type CombinedLedger = CombinedLedgerResponse & {type: CombinedLedgerResponseTypeEnum} export type CombinedLedger = CombinedLedgerResponse & {type: CombinedLedgerResponseTypeEnum}
export type Ledger = MainLedger | CombinedLedger; export type Ledger = MainLedger | CombinedLedger;
export const systemLedger = {
type: LedgerTypes.Main,
ledgerId: "",
name: "Eve Economy",
balance: 0,
_system: true
} as MainLedger;
export const isMain = (ledger: Ledger): ledger is MainLedger => { export const isMain = (ledger: Ledger): ledger is MainLedger => {
return ledger.type === LedgerTypes.Main; return ledger.type === LedgerTypes.Main;
} }
+3 -3
View File
@@ -48,9 +48,9 @@ watch(useRoute(), async route => {
</div> </div>
</div> </div>
<div v-if="ruleBook" class="flex-col"> <div v-if="ruleBook" class="flex-col">
<div class="flex-col grow border-b-1" v-for="activityType in activityTypes" :key="activityType"> <div class="flex-col grow border-b-1" v-for="activityType in activityTypes" :key="activityType.key">
<span>{{ activityType }}</span> <span>{{ activityType.name }}</span>
<RuleSetInput v-model="ruleBook.ruleSets[activityType]" /> <RuleSetInput v-model="ruleBook.ruleSets[activityType.key]" />
</div> </div>
</div> </div>
</div> </div>
+8 -7
View File
@@ -1,20 +1,21 @@
<script setup lang="ts"> <script setup lang="ts">
import {RuleResponse, RuleResponseRateEnum} from "@/generated/mammon"; import {RuleResponse} from "@/generated/mammon";
import {computed} from "vue"; import {computed} from "vue";
import {isMain, Ledger, LedgerSelect, useLedgersStore} from "@/ledger"; import {isMain, Ledger, LedgerSelect, systemLedger, useLedgersStore} from "@/ledger";
import {ratesTypes} from "@/rules/rules.ts";
const rule = defineModel<RuleResponse>(); const rule = defineModel<RuleResponse>();
const ledgersStore = useLedgersStore(); const ledgersStore = useLedgersStore();
const {findById} = ledgersStore; const {findById} = ledgersStore;
const ledgers = computed(() => ledgersStore.ledgers.filter(isMain)); const ledgers = computed<Ledger[]>(() => [systemLedger, ...ledgersStore.ledgers.filter(isMain)]);
const ledgerComputed = (key: 'fromLedgerId' | 'toLedgerId') => computed<Ledger | undefined>({ const ledgerComputed = (key: 'fromLedgerId' | 'toLedgerId') => computed<Ledger>({
get: () => rule.value && rule.value[key] ? findById(rule.value[key]) : undefined, get: () => rule.value && rule.value[key] ? findById(rule.value[key]) ?? systemLedger : systemLedger,
set: value => { set: value => {
if (value) { if (value) {
rule.value = {...rule.value, [key]: value.ledgerId} rule.value = {...rule.value, [key]: value.ledgerId.length ? value.ledgerId : undefined}
} }
} }
}) })
@@ -26,7 +27,7 @@ const toLedger = ledgerComputed('toLedgerId')
<template> <template>
<select class="me-2 grow" v-model="rule.rate"> <select class="me-2 grow" v-model="rule.rate">
<option v-for="rateType in RuleResponseRateEnum" :key="rateType" :value="rateType">{{ rateType }}</option> <option v-for="rateType in ratesTypes" :key="rateType.key" :value="rateType.key">{{ rateType.name }}</option>
</select> </select>
<LedgerSelect class="me-2 grow" v-model="fromLedger" :ledgers="ledgers" /> <LedgerSelect class="me-2 grow" v-model="fromLedger" :ledgers="ledgers" />
<LedgerSelect class="me-2 grow" v-model="toLedger" :ledgers="ledgers" /> <LedgerSelect class="me-2 grow" v-model="toLedger" :ledgers="ledgers" />
+17 -6
View File
@@ -1,16 +1,27 @@
import {ruleBookControllerApi} from "@/mammon"; import {ruleBookControllerApi} from "@/mammon";
import {RuleBookResponse, RuleSetResponse} from "@/generated/mammon"; import {RuleBookResponse, RuleResponseRateEnum, RuleSetResponse} from "@/generated/mammon";
export const activityTypes = { export const activityTypes = {
itemBought: "ITEM_BOUGHT", itemBought: {key: "ITEM_BOUGHT", name: "Item Bought"},
itemSold: "ITEM_SOLD", itemSold: {key: "ITEM_SOLD", name: "Item Sold"},
// bountyEarned: "BOUNTY_EARNED", // bountyEarned: {id: "BOUNTY_EARNED", name: "Bounty Earned"},
// itemManufactured: "ITEM_MANUFACTURED" // itemManufactured: {id: "ITEM_MANUFACTURED", name: "Item Manufactured"}
} as const; } as const;
export type ActivityType = typeof activityTypes[keyof typeof activityTypes]; export type Activity = { key: ActivityType, name: string }
export type ActivityType = typeof activityTypes[keyof typeof activityTypes]['key'];
export type RuleBook = RuleBookResponse & { ruleSets: { [key: ActivityType]: RuleSetResponse; } } export type RuleBook = RuleBookResponse & { ruleSets: { [key: ActivityType]: RuleSetResponse; } }
export const ratesTypes = {
None: {key: "NONE", name: "0 ISK"},
Value: {key: "VALUE", name: "Value"},
JitaBuy: {key: "JITA_BUY", name: "Jita Buy Order"},
JitaSell: {key: "JITA_SELL", name: "Jita Sell Order"},
EveEstimate: {key: "EVE_ESTIMATE", name: "Eve Estimate"},
} as const;
export type Rate = { key: RuleResponseRateEnum, name: string }
export const findByCharacterId = (characterId: number): Promise<RuleBook> => ruleBookControllerApi.findByCharacterId(characterId) export const findByCharacterId = (characterId: number): Promise<RuleBook> => ruleBookControllerApi.findByCharacterId(characterId)
.then(response => response.data) .then(response => response.data)
.catch(() => ({characterId, ruleSets: {}})); .catch(() => ({characterId, ruleSets: {}}));