feat(wip): 세력 장수 작업 중

This commit is contained in:
2022-04-07 03:03:38 +09:00
parent 9eaaa0da07
commit 73c3cc4983
5 changed files with 77 additions and 32 deletions
+2 -2
View File
@@ -1,6 +1,6 @@
<?php <?php
namespace sammo\API\List\Nation; namespace sammo\API\Nation;
use sammo\DB; use sammo\DB;
use sammo\General; use sammo\General;
@@ -180,7 +180,7 @@ class GeneralList extends \sammo\BaseAPI
if ($reqPermission > $this->permission) { if ($reqPermission > $this->permission) {
continue; continue;
} }
$resultColumns[] = $column; $resultColumns[$column] = $column;
} }
$generalList = []; $generalList = [];
+39 -5
View File
@@ -1,18 +1,52 @@
<template> <template>
<BContainer id="container" :toast="{ root: true }" class="pageNationGeneral bg0"> <BContainer id="container" :toast="{ root: true }" class="pageNationGeneral bg0">
<TopBackBar :title="title" /> <TopBackBar :title="title" />
<GeneralList :list="generalList" />
<BottomBar /> <BottomBar />
</BContainer> </BContainer>
</template> </template>
<script lang="ts">
/*declare const staticValues: {
serverNick: string,
mapName: string,
unitSet: string,
};*/
</script>
<script lang="ts" setup> <script lang="ts" setup>
import TopBackBar from "@/components/TopBackBar.vue"; import TopBackBar from "@/components/TopBackBar.vue";
import BottomBar from "@/components/BottomBar.vue"; import BottomBar from "@/components/BottomBar.vue";
import { BContainer, useToast } from "bootstrap-vue-3"; import { BContainer } from "bootstrap-vue-3";
import { unwrap } from "./util/unwrap"; import { onMounted, ref } from "vue";
import { SammoAPI } from "./SammoAPI";
import { merge2DArrToObjectArr } from "./util/merge2DArrToObjectArr";
import type { GeneralListItem } from "./defs/API/Nation";
import GeneralList from "./components/GeneralList.vue";
const toasts = unwrap(useToast()); const generalList = ref(new Map<number, GeneralListItem>());
const title = '세력 장수'; const title = "세력 장수";
onMounted(async () => {
try {
const { column, list, permission } = await SammoAPI.Nation.GeneralList();
//XXX: 로직상 똑같은데....
if (permission == 0) {
const rawGeneralList = merge2DArrToObjectArr(column, list);
generalList.value = new Map(rawGeneralList.map((v) => [v.no, { permission, ...v }]));
} else if (permission == 1) {
const rawGeneralList = merge2DArrToObjectArr(column, list);
generalList.value = new Map(rawGeneralList.map((v) => [v.no, { permission, ...v }]));
} else if ([2, 3, 4].includes(permission)) {
const rawGeneralList = merge2DArrToObjectArr(column, list);
generalList.value = new Map(rawGeneralList.map((v) => [v.no, { permission, ...v }]));
} else {
throw `?? ${permission}`;
}
} catch (e) {
console.error(e);
throw e;
}
});
</script> </script>
+19
View File
@@ -0,0 +1,19 @@
<template>
<div class="grid">
<div v-for="[generalID, general] of list" :key="generalID" class="row">
{{ general }}
</div>
</div>
</template>
<script lang="ts" setup>
import type { GeneralListItem } from "@/defs/API/Nation";
import type { PropType } from "vue";
defineProps({
list: {
type: Object as PropType<Map<number, GeneralListItem>>,
required: true,
},
});
</script>
+11 -19
View File
@@ -43,39 +43,31 @@ export type GeneralListItemP2 = GeneralListItemP1 & {
officer_city: number, officer_city: number,
} }
export type GeneralListItemP9 = GeneralListItemP2 & {
owner_name: string, export type RawGeneralListItem = GeneralListItemP0 | GeneralListItemP1 | GeneralListItemP2;
}
export type GeneralListItem = export type GeneralListItem =
({permission : 0} & GeneralListItemP0) | ({ permission: 0 } & GeneralListItemP0) |
({permission : 1} & GeneralListItemP1) | ({ permission: 1 } & GeneralListItemP1) |
({permission : 2} & GeneralListItemP2) | ({ permission: 2 | 3 | 4 } & GeneralListItemP2);
({permission : 9} & GeneralListItemP9);
export type RawGeneralListP0 = ValidResponse & { export type RawGeneralListP0 = ValidResponse & {
permission: 0, permission: 0,
column: keyof GeneralListItemP0[], column: (keyof GeneralListItemP0)[],
list: ValuesOf<GeneralListItemP0>[], list: ValuesOf<GeneralListItemP0>[][],
} }
export type RawGeneralListP1 = ValidResponse & { export type RawGeneralListP1 = ValidResponse & {
permission: 1, permission: 1,
column: keyof GeneralListItemP1[], column: (keyof GeneralListItemP1)[],
list: ValuesOf<GeneralListItemP1>[][], list: ValuesOf<GeneralListItemP1>[][],
} }
export type RawGeneralListP2 = ValidResponse & { export type RawGeneralListP2 = ValidResponse & {
permission: 2, permission: 2 | 3 | 4,
column: keyof GeneralListItemP2[], column: (keyof GeneralListItemP2)[],
list: ValuesOf<GeneralListItemP2>[][], list: ValuesOf<GeneralListItemP2>[][],
} }
export type RawGeneralListP9 = ValidResponse & { export type GeneralListResponse = RawGeneralListP0 | RawGeneralListP1 | RawGeneralListP2;
permission: 9,
column: keyof GeneralListItemP9[],
list: ValuesOf<GeneralListItemP9>[][],
}
export type GeneralListResponse = RawGeneralListP0 | RawGeneralListP1 | RawGeneralListP2 | RawGeneralListP9;
+1 -1
View File
@@ -7,7 +7,7 @@ export function merge2DArrToObjectArr<T extends Record<string, unknown>>(column:
for(const rawItem of list){ for(const rawItem of list){
const item: Record<string, unknown> = {}; const item: Record<string, unknown> = {};
if(column.length != item.length){ if(column.length != rawItem.length){
throw `column과 item의 길이가 같지 않습니다: ${column.length} != ${list.length}, ${JSON.stringify(item)}`; throw `column과 item의 길이가 같지 않습니다: ${column.length} != ${list.length}, ${JSON.stringify(item)}`;
} }