diff --git a/hwe/ts/PageHistory.vue b/hwe/ts/PageHistory.vue index 82ebfc05..843a8fae 100644 --- a/hwe/ts/PageHistory.vue +++ b/hwe/ts/PageHistory.vue @@ -212,7 +212,7 @@ onMounted(() => { @import "@scss/common/break_500px.scss"; @include media-500px { - .optionMenu::v-deep .dropdown-toggle { + .optionMenu:deep(.dropdown-toggle) { height: 32px; } .isNationRankingBottom { diff --git a/hwe/ts/PartialReservedCommand.vue b/hwe/ts/PartialReservedCommand.vue index 97f90d29..69223213 100644 --- a/hwe/ts/PartialReservedCommand.vue +++ b/hwe/ts/PartialReservedCommand.vue @@ -457,7 +457,7 @@ async function reloadCommandList() { for (const obj of result.turn) { const [year, month] = parseYearMonth(yearMonth); let tooltip: string[] = []; - let style: Record = {}; + let style: Record = {}; const brief = obj.brief; diff --git a/hwe/ts/components/ChiefReservedCommand.vue b/hwe/ts/components/ChiefReservedCommand.vue index ac9d3b2c..45687574 100644 --- a/hwe/ts/components/ChiefReservedCommand.vue +++ b/hwe/ts/components/ChiefReservedCommand.vue @@ -495,7 +495,7 @@ function updateCommandList() { for (const obj of props.turn) { const [year, month] = parseYearMonth(yearMonth); let tooltip: string[] = []; - let style: Record = {}; + let style: Record = {}; const brief = obj.brief; diff --git a/hwe/ts/components/GeneralList.vue b/hwe/ts/components/GeneralList.vue index c57cbd84..73be8468 100644 --- a/hwe/ts/components/GeneralList.vue +++ b/hwe/ts/components/GeneralList.vue @@ -95,7 +95,12 @@ import type { } from "ag-grid-community"; import { ProvidedColumnGroup } from "ag-grid-community"; import { getNpcColor } from "@/common_legacy"; -import type { BaseWithValueColDefParams, ValueGetterParams } from "ag-grid-community/dist/lib/entities/colDef"; +import type { + ValueGetterParams, + ValueFormatterFunc, + ValueGetterFunc, + ValueFormatterParams, +} from "ag-grid-community/dist/lib/entities/colDef"; import type { GameConstStore } from "@/GameConstStore"; import { unwrap } from "@/util/unwrap"; import SimpleTooltipCell from "@/gridCellRenderer/SimpleTooltipCell.vue"; @@ -350,31 +355,26 @@ type headerType = | "killturnAndConnect" | "years" | "warResults"; -interface GenValueParams extends BaseWithValueColDefParams { - data: GeneralListItem; -} -interface GenValueGetterParams extends ValueGetterParams { - data: GeneralListItem; -} -interface GenRowNode extends RowNode { - data: GeneralListItem; -} -interface GenColDef extends ColDef { + +type GenValueParams = ValueFormatterParams; +type GenValueGetterParams = ValueGetterParams; + +type GenRowNode = RowNode; + +interface GenColDef extends ColDef { colId: headerType; field?: headerType; headerName: string; - valueFormatter?: string | ((params: GenValueParams) => string); - filterValueGetter?: string | ((params: GenValueGetterParams) => unknown); - valueGetter?: string | ((params: GenValueGetterParams) => unknown); + valueFormatter?: string | ValueFormatterFunc; + filterValueGetter?: string | ValueGetterFunc; + valueGetter?: string | ValueGetterFunc; } interface GenColGroupDef extends ColGroupDef { headerName: string; children: GenColDef[]; //1단만 할꺼다! groupId: headerType; } -interface GenCellClassParams extends CellClassParams { - data: GeneralListItem; -} + function getColumnList(): [headerType, ProvidedColumnGroup | Column, number?][] { const result: [headerType, ProvidedColumnGroup | Column, number?][] = []; if (!columnApi.value) { @@ -418,19 +418,19 @@ function naiveCheClassNameFilter(value: string): string { } function numberFormatter(unit?: string) { if (unit) { - return (value: GenValueParams): string => { - if (value.value == null) { - return "?"; - } - const valueText = (value.value as number).toLocaleString(); + return (value: ValueFormatterParams): string => { + const valueText = value.value.toLocaleString(); return `${valueText} ${unit}`; }; } - return (value: GenValueParams): string => { - return (value.value as number).toLocaleString(); + return (value: ValueFormatterParams): string => { + return value.value.toLocaleString(); }; } -function extractTroopInfo(value: GeneralListItem): [string, GeneralListItemP1] | undefined { +function extractTroopInfo(value: GeneralListItem | undefined): [string, GeneralListItemP1] | undefined { + if (value === undefined) { + return undefined; + } if (!value.st1) { return undefined; } @@ -502,6 +502,9 @@ const columnRawDefs = ref resizable: false, cellRenderer: (obj: GenValueParams) => { const { data: gen } = obj; + if (gen === undefined) { + return ""; + } return ``; }, pinned: "left", @@ -517,14 +520,20 @@ const columnRawDefs = ref width: 120, sortingOrder: ["asc", "desc", null], lockPosition: true, - cellStyle: (val: GenCellClassParams) => { - const gen = val.data; + cellStyle: (val: CellClassParams) => { + const gen = unwrap(val.data); const style: StyleValue = { color: getNpcColor(gen.npc), }; return style as CellStyle; }, comparator: (_lhs, _rhs, { data: lhs }: GenRowNode, { data: rhs }: GenRowNode) => { + if (lhs === undefined) { + return 1; + } + if (rhs === undefined) { + return -1; + } const npcDiff = lhs.npc - rhs.npc; if (npcDiff != 0) { return npcDiff; @@ -532,7 +541,7 @@ const columnRawDefs = ref return lhs.name.localeCompare(rhs.name); }, - filterValueGetter: ({ data }) => convertSearch초성(data.name), + filterValueGetter: (data: GenValueGetterParams) => convertSearch초성(unwrap(data.data).name).join(''), cellClass: [props.availableGeneralClick ? "clickable-cell" : "", ...defaultCellClass], filter: true, hide: false, @@ -549,7 +558,7 @@ const columnRawDefs = ref headerName: "통|무|지", width: 88, cellRenderer: (obj: GenValueParams) => { - const gen = obj.data; + const gen = unwrap(obj.data); return `${gen.leadership}|${gen.strength}|${gen.intel}`; }, columnGroupShow: "closed", @@ -581,13 +590,17 @@ const columnRawDefs = ref }, ], }, + officerLevel: { headerName: "관직", colId: "officerLevel", field: "officerLevelText", sortable: true, - comparator: (a, b, c, d) => c.data.officerLevel - d.data.officerLevel, + comparator: (a, b, c, d) => unwrap(c.data).officerLevel - unwrap(d.data).officerLevel, cellRenderer: ({ data }: GenValueParams) => { + if (data === undefined) { + return ""; + } if (data.officerLevel >= 5) { return `${data.officerLevelText}`; } @@ -619,6 +632,9 @@ const columnRawDefs = ref columnGroupShow: "closed", width: 60, cellRenderer: ({ data }: GenValueParams) => { + if (data === undefined) { + return ""; + } return `Lv ${data.explevel}
${data.dedLevelText}`; }, }, @@ -628,6 +644,9 @@ const columnRawDefs = ref field: "explevel", width: 60, cellRenderer: ({ data }: GenValueParams) => { + if (data === undefined) { + return ""; + } return `Lv ${data.explevel}
(${data.honorText})`; }, ...sortableNumber, @@ -640,6 +659,9 @@ const columnRawDefs = ref field: "dedLevelText", width: 70, cellRenderer: ({ data }: GenValueParams) => { + if (data === undefined) { + return ""; + } return `${data.dedLevelText}
(${data.bill.toLocaleString()})`; }, ...sortableNumber, @@ -656,6 +678,9 @@ const columnRawDefs = ref colId: "goldRice", headerName: "금/쌀", cellRenderer: ({ data }: GenValueParams) => { + if (data === undefined) { + return ""; + } return `${data.gold.toLocaleString()} 금
${data.rice.toLocaleString()} 쌀`; }, width: 80, @@ -664,6 +689,12 @@ const columnRawDefs = ref sortable: true, sortingOrder: ["desc", "asc", null], comparator(_a, _b, { data: lhs }: GenRowNode, { data: rhs }: GenRowNode) { + if (lhs === undefined) { + return -1; + } + if (rhs === undefined) { + return 1; + } const lhsAmount = lhs.gold + lhs.rice; const rhsAmount = rhs.gold + rhs.rice; return lhsAmount - rhsAmount; @@ -714,7 +745,7 @@ const columnRawDefs = ref headerName: "부대", field: "troop", valueGetter: ({ data }: GenValueGetterParams) => { - if (!data.st1) { + if (data === undefined || !data.st1) { return "?"; } const troopInfo = extractTroopInfo(data); @@ -817,7 +848,7 @@ const columnRawDefs = ref headerName: "훈/사", width: 60, cellRenderer: ({ data }: GenValueParams) => { - if (!data.st1) { + if (data === undefined || !data.st1) { return "?"; } return `${data.train}
${data.atmos}`; @@ -848,7 +879,7 @@ const columnRawDefs = ref field: "defence_train", sortable: true, sortingOrder: ["desc", "asc", null], - valueFormatter: ({ value }) => formatDefenceTrain(value as number), + valueFormatter: (value: GenValueParams) => formatDefenceTrain(value.value), width: 50, }, ], @@ -937,6 +968,9 @@ const columnRawDefs = ref headerName: "단축", width: 70, cellRenderer: ({ data }: GenValueParams) => { + if(data === undefined){ + return "?"; + } if (data.npc >= 2) { return "NPC 장수"; } @@ -974,6 +1008,9 @@ const columnRawDefs = ref headerName: "전체", width: 120, cellRenderer: ({ data }: GenValueParams) => { + if(data === undefined){ + return "?"; + } if (data.npc >= 2) { return "NPC 장수"; } @@ -1025,8 +1062,8 @@ const columnRawDefs = ref headerName: "최근전투", field: "recent_war", width: 60, - valueFormatter: ({ value, data }) => { - if (!data.st1) { + valueFormatter: ({ value, data }: GenValueParams) => { + if (data === undefined || !data.st1) { return "?"; } const turntime = value as string; @@ -1044,6 +1081,9 @@ const columnRawDefs = ref headerName: "요약", width: 60, cellRenderer: ({ data }: GenValueParams) => { + if(data === undefined){ + return '?'; + } return `${data.age}세
${data.belong}년`; }, cellClass: centerCellClass, @@ -1054,7 +1094,7 @@ const columnRawDefs = ref headerName: "연령", field: "age", ...sortableNumber, - valueFormatter: (v: GenValueParams) => `${v.value}세`, + valueFormatter: (v: GenValueParams) => `${v.value}세`, width: 60, cellClass: centerCellClass, columnGroupShow: "open", @@ -1064,7 +1104,7 @@ const columnRawDefs = ref headerName: "사관", field: "belong", ...sortableNumber, - valueFormatter: (v: GenValueParams) => `${v.value}년`, + valueFormatter: (v: GenValueParams) => `${v.value}년`, width: 60, cellClass: centerCellClass, columnGroupShow: "open", @@ -1079,6 +1119,9 @@ const columnRawDefs = ref colId: "killturnAndConnect", headerName: "삭/벌", cellRenderer: ({ data }: GenValueParams) => { + if(data === undefined){ + return '?'; + } return `${data.killturn.toLocaleString()}턴
${data.connect.toLocaleString()}점`; }, cellClass: rightAlignClass, @@ -1090,6 +1133,9 @@ const columnRawDefs = ref headerName: "삭턴", field: "killturn", cellRenderer: ({ data }: GenValueParams) => { + if(data === undefined){ + return '?'; + } return `${data.killturn.toLocaleString()}턴`; }, ...sortableNumber, @@ -1101,6 +1147,9 @@ const columnRawDefs = ref headerName: "벌점", field: "connect", cellRenderer: ({ data }: GenValueParams) => { + if(data === undefined){ + return '?'; + } return `${data.connect.toLocaleString()}점
(${formatConnectScore(data.connect)})`; }, ...sortableNumber, @@ -1117,7 +1166,7 @@ const columnRawDefs = ref colId: "warResults", headerName: "요약", cellRenderer: ({ data }: GenValueParams) => { - if (!data.st1) { + if (data === undefined || !data.st1) { return "?"; } const killRatePercent = Math.round((data.killcrew / Math.max(1, data.deathcrew)) * 100); diff --git a/hwe/ts/map.ts b/hwe/ts/map.ts index 3d04fdcc..f3966963 100644 --- a/hwe/ts/map.ts +++ b/hwe/ts/map.ts @@ -2,7 +2,7 @@ import axios from 'axios'; import $ from 'jquery'; import { isNumber, merge } from 'lodash'; import { convColorValue, convertDictById, stringFormat } from '@/common_legacy'; -import type { InvalidResponse, MapResult } from '@/defs'; +import type { CachedMapResult, InvalidResponse, MapResult } from '@/defs'; import { unwrap } from "@util/unwrap"; import { convertFormData } from '@util/convertFormData'; import { exportWindow } from '@util/exportWindow'; @@ -188,8 +188,8 @@ export async function reloadWorldMap(option: loadMapOption, drawTarget = '.world async function setMapBackground(obj: MapResult): Promise { function setTheme() { - const oldTheme = $world_map.data('currentTheme'); - const newTheme = obj.theme; + const oldTheme = $world_map.data('currentTheme') as string|null; + const newTheme = (obj as CachedMapResult).theme; if (oldTheme === newTheme) { return; } diff --git a/hwe/ts/util/QueryActionHelper.ts b/hwe/ts/util/QueryActionHelper.ts index f0b9f49d..29bb8752 100644 --- a/hwe/ts/util/QueryActionHelper.ts +++ b/hwe/ts/util/QueryActionHelper.ts @@ -8,7 +8,7 @@ export type TurnObjWithTime = TurnObj & { year?: number; month?: number; tooltip?: string; - style?: Record; + style?: Record; }; export const getEmptyTurn = (maxTurn: number): TurnObjWithTime[] => Array.from({