refactor: reorganize first page card modules

This commit is contained in:
clz
2026-07-30 16:35:47 +08:00
parent f75936a9bf
commit 7b123ec5f9
22 changed files with 174 additions and 1254 deletions
-17
View File
@@ -1,17 +0,0 @@
export const MAX_TABS = 5;
export const MAX_ITEMS = 3;
export const MAX_TAGS = 3;
export const MAX_SHOW_KEYS = 3;
export const MAX_DOUBLE_KEYS = 2;
export const BLACK_LIST: string[] = [
'合约代码',
'合约简称',
'收盘价',
'最新价',
'涨跌幅',
'code',
'market_id',
'market_code',
'最新涨跌幅',
];
File diff suppressed because it is too large Load Diff
@@ -23,8 +23,8 @@ import { AiDiagnosisNodeComponent } from '../../node/view/AiDiagnosisNodeCompone
import { AiRiseFallNodeComponent } from '../../node/view/AiRiseFallNodeComponent' import { AiRiseFallNodeComponent } from '../../node/view/AiRiseFallNodeComponent'
import { HotListNodeComponent } from '../../node/view/HotListNodeComponent' import { HotListNodeComponent } from '../../node/view/HotListNodeComponent'
import { CommodityOptionsNodeComponent } from '../../node/view/CommodityOptionsNodeComponent' import { CommodityOptionsNodeComponent } from '../../node/view/CommodityOptionsNodeComponent'
import { MarketRankingNodeComponent } from '../../market-ranking/MarketRankingNodeComponent' import { MarketRankingNodeComponent } from '../../node/view/MarketRankingNodeComponent'
import { AiPickNodeComponent } from '../../ai-pick/AiPickNodeComponent' import { AiPickNodeComponent } from '../../node/view/AiPickNodeComponent'
/** /**
+17
View File
@@ -0,0 +1,17 @@
export const MAX_TABS = 5;
export const MAX_ITEMS = 3;
export const MAX_TAGS = 3;
export const MAX_SHOW_KEYS = 3;
export const MAX_DOUBLE_KEYS = 2;
export const BLACK_LIST: Resource[] = [
$r('app.string.ai_pick_contract_code'),
$r('app.string.ai_pick_contract_nickname'),
$r('app.string.ai_pick_close_price'),
$r('app.string.ai_pick_latest_price'),
$r('app.string.ai_pick_change_percent'),
$r('app.string.ai_pick_code'),
$r('app.string.ai_pick_market_id'),
$r('app.string.ai_pick_market_code'),
$r('app.string.ai_pick_latest_change_percent'),
];
@@ -1,20 +1,21 @@
import { MetricId, PeriodId, PeriodRange, SortOrder, TabMetric } from './MarketRankingModels'; import { MetricId, PeriodId, PeriodRange, SortOrder, TabMetric } from '../node/model/MarketRankingModels';
import { TableConstants } from './TableConstants'; import { XTableConstants } from './MarketRankingTableConstants';
import { TableConstants } from "@b2c/lib_baseui";
// 一级 Tab 配置:涨幅/跌幅/涨速/跌速/成交额/日增仓。 // 一级 Tab 配置:涨幅/跌幅/涨速/跌速/成交额/日增仓。
export const TAB_METRICS: TabMetric[] = [ export const TAB_METRICS: TabMetric[] = [
{ id: MetricId.RISE, label: $r('app.string.market_ranking_tab_rise'), api: 'rise_percent', hqId: TableConstants.DATA_ID_ZF, sortOrder: SortOrder.ASC, hasChildren: false }, { id: MetricId.RISE, label: $r('app.string.market_ranking_tab_rise'), api: 'rise_percent', hqId: TableConstants.DATA_ID_ZF, sortOrder: SortOrder.ASC, hasChildren: false },
{ id: MetricId.FALL, label: $r('app.string.market_ranking_tab_fall'), api: 'fall_percent', hqId: TableConstants.DATA_ID_ZF, sortOrder: SortOrder.DESC, hasChildren: false }, { id: MetricId.FALL, label: $r('app.string.market_ranking_tab_fall'), api: 'fall_percent', hqId: TableConstants.DATA_ID_ZF, sortOrder: SortOrder.DESC, hasChildren: false },
{ id: MetricId.RISE_SPEED, label: $r('app.string.market_ranking_tab_rise_speed'), api: 'rise_percent', hqId: TableConstants.DATA_ID_CHG_SPEED_1MIN, sortOrder: SortOrder.ASC, hasChildren: true }, { id: MetricId.RISE_SPEED, label: $r('app.string.market_ranking_tab_rise_speed'), api: 'rise_percent', hqId: XTableConstants.DATA_ID_CHG_SPEED_1MIN, sortOrder: SortOrder.ASC, hasChildren: true },
{ id: MetricId.FALL_SPEED, label: $r('app.string.market_ranking_tab_fall_speed'), api: 'fall_percent', hqId: TableConstants.DATA_ID_CHG_SPEED_1MIN, sortOrder: SortOrder.DESC, hasChildren: true }, { id: MetricId.FALL_SPEED, label: $r('app.string.market_ranking_tab_fall_speed'), api: 'fall_percent', hqId: XTableConstants.DATA_ID_CHG_SPEED_1MIN, sortOrder: SortOrder.DESC, hasChildren: true },
{ id: MetricId.TURN_OVER, label: $r('app.string.market_ranking_tab_turnover'), api: 'turnover', hqId: TableConstants.DATA_ID_TURNOVER, sortOrder: SortOrder.ASC, hasChildren: false }, { id: MetricId.TURN_OVER, label: $r('app.string.market_ranking_tab_turnover'), api: 'turnover', hqId: XTableConstants.DATA_ID_TURNOVER, sortOrder: SortOrder.ASC, hasChildren: false },
{ id: MetricId.INCRE_POSIT, label: $r('app.string.market_ranking_tab_increase_position'), api: 'increase_position', hqId: TableConstants.DATA_ID_INCRE_POSIT, sortOrder: SortOrder.ASC, hasChildren: false }, { id: MetricId.INCRE_POSIT, label: $r('app.string.market_ranking_tab_increase_position'), api: 'increase_position', hqId: TableConstants.DATA_ID_RZC, sortOrder: SortOrder.ASC, hasChildren: false },
]; ];
// 二级 Tab 配置:仅涨速/跌速下出现,按周期筛选 // 二级 Tab 配置:仅涨速/跌速下出现,按周期筛选
export const PERIOD_RANGES: PeriodRange[] = [ export const PERIOD_RANGES: PeriodRange[] = [
{ id: PeriodId.ONE_MIN, label: $r('app.string.market_ranking_period_1min'), api: 'one_minute', hqId: TableConstants.DATA_ID_CHG_SPEED_1MIN }, { id: PeriodId.ONE_MIN, label: $r('app.string.market_ranking_period_1min'), api: 'one_minute', hqId: XTableConstants.DATA_ID_CHG_SPEED_1MIN },
{ id: PeriodId.FIVE_MIN, label: $r('app.string.market_ranking_period_5min'), api: 'five_minute', hqId: TableConstants.DATA_ID_CHG_SPEED_5MIN }, { id: PeriodId.FIVE_MIN, label: $r('app.string.market_ranking_period_5min'), api: 'five_minute', hqId: XTableConstants.DATA_ID_CHG_SPEED_5MIN },
{ id: PeriodId.TEN_MIN, label: $r('app.string.market_ranking_period_10min'), api: 'ten_minute', hqId: TableConstants.DATA_ID_CHG_SPEED_10MIN }, { id: PeriodId.TEN_MIN, label: $r('app.string.market_ranking_period_10min'), api: 'ten_minute', hqId: XTableConstants.DATA_ID_CHG_SPEED_10MIN },
{ id: PeriodId.FIFTEEN_MIN, label: $r('app.string.market_ranking_period_15min'), api: 'fifteen_minute', hqId: TableConstants.DATA_ID_CHG_SPEED_15MIN }, { id: PeriodId.FIFTEEN_MIN, label: $r('app.string.market_ranking_period_15min'), api: 'fifteen_minute', hqId: XTableConstants.DATA_ID_CHG_SPEED_15MIN },
]; ];
@@ -0,0 +1,11 @@
// 市场排名使用的 4106 行情字段 ID,且"@b2c/lib_baseui"的TableConstants不存在的
export class XTableConstants {
static readonly DATA_ID_TURNOVER: number = 19; // 成交额
static readonly DATA_ID_CHG_SPEED_1MIN: number = 34874; // 1 分钟涨跌速
static readonly DATA_ID_CHG_SPEED_5MIN: number = 34325; // 5 分钟涨跌速
static readonly DATA_ID_CHG_SPEED_10MIN: number = 34875; // 10 分钟涨跌速
static readonly DATA_ID_CHG_SPEED_15MIN: number = 34876; // 15 分钟涨跌速
private constructor() {
}
}
@@ -11,9 +11,9 @@ import {
RawPickTabItem, RawPickTabItem,
RawStrategyDetail, RawStrategyDetail,
RawStrategyItem, RawStrategyItem,
} from './AiPickModels'; } from '../node/model/AiPickModels';
import { getResData, getTableList, ResData } from './AiPickUtils'; import { getResData, getTableList, ResData } from '../util/AiPickUtils';
import { MAX_ITEMS, MAX_TABS, MAX_TAGS } from './AiPickConstant'; import { MAX_ITEMS, MAX_TABS, MAX_TAGS } from '../constants/AiPickConstant';
const EMPTY_RAW_STRATEGY_ITEM: RawStrategyItem = {}; const EMPTY_RAW_STRATEGY_ITEM: RawStrategyItem = {};
const EMPTY_RAW_STRATEGY_DETAIL: RawStrategyDetail = { const EMPTY_RAW_STRATEGY_DETAIL: RawStrategyDetail = {
@@ -22,7 +22,7 @@ const EMPTY_RAW_STRATEGY_DETAIL: RawStrategyDetail = {
strategy_type: '', strategy_type: '',
}; };
function parseRawTab(item: RawPickTabItem): PickTabData { function parseRawTab(context: Context, item: RawPickTabItem): PickTabData {
const isSystemPeriod: boolean = item.type === 'system_period'; const isSystemPeriod: boolean = item.type === 'system_period';
const strategyItem: RawStrategyItem = ( const strategyItem: RawStrategyItem = (
isSystemPeriod ? item.system_strategy : item.custom_strategy isSystemPeriod ? item.system_strategy : item.custom_strategy
@@ -30,7 +30,7 @@ function parseRawTab(item: RawPickTabItem): PickTabData {
const strategyDetail: RawStrategyDetail = ( const strategyDetail: RawStrategyDetail = (
isSystemPeriod ? strategyItem.system_strategy : strategyItem.custom_strategy isSystemPeriod ? strategyItem.system_strategy : strategyItem.custom_strategy
) ?? EMPTY_RAW_STRATEGY_DETAIL; ) ?? EMPTY_RAW_STRATEGY_DETAIL;
const resData: ResData = getResData(strategyItem); const resData: ResData = getResData(context, strategyItem);
const allItems: PickContractItem[] = const allItems: PickContractItem[] =
getTableList(resData.list, resData.resultValueList); getTableList(resData.list, resData.resultValueList);
const strategy: PickStrategy = { const strategy: PickStrategy = {
@@ -57,10 +57,10 @@ function parseRawTab(item: RawPickTabItem): PickTabData {
return tabData; return tabData;
} }
function parseRawTabs(rawTabs: RawPickTabItem[]): PickTabData[] { function parseRawTabs(context: Context, rawTabs: RawPickTabItem[]): PickTabData[] {
return rawTabs return rawTabs
.slice(0, MAX_TABS) .slice(0, MAX_TABS)
.map((item: RawPickTabItem): PickTabData => parseRawTab(item)); .map((item: RawPickTabItem): PickTabData => parseRawTab(context, item));
} }
export class AiPickDataFetcher { export class AiPickDataFetcher {
@@ -77,7 +77,7 @@ export class AiPickDataFetcher {
return FirstPageCardsConfigLoader.getConfig()?.aiPick; return FirstPageCardsConfigLoader.getConfig()?.aiPick;
} }
async fetchCardData(): Promise<PickTabData[]> { async fetchCardData(context: Context): Promise<PickTabData[]> {
const cardConfig: AllCardsCard | undefined = this.fetchCardConfig(); const cardConfig: AllCardsCard | undefined = this.fetchCardConfig();
const modData: ModDataItem | undefined = cardConfig?.mod_data[0]; const modData: ModDataItem | undefined = cardConfig?.mod_data[0];
const configuredUrl: string = modData?.url ?? ''; const configuredUrl: string = modData?.url ?? '';
@@ -105,7 +105,7 @@ export class AiPickDataFetcher {
if (responseCode !== 0 || result.data === undefined) { if (responseCode !== 0 || result.data === undefined) {
throw new Error('response code: ' + responseCode); throw new Error('response code: ' + responseCode);
} }
return parseRawTabs(result.data); return parseRawTabs(context, result.data);
} catch (requestError) { } catch (requestError) {
const errorInfo: Error = requestError as Error; const errorInfo: Error = requestError as Error;
HXLog.e('AiPickDataFetcher', 'fetchCardData error: ' + errorInfo.message); HXLog.e('AiPickDataFetcher', 'fetchCardData error: ' + errorInfo.message);
@@ -1,21 +0,0 @@
// 市场排名使用的 4106 行情字段 ID。
export class TableConstants {
static readonly DATA_ID_CODE_4: number = 4; // 合约代码
static readonly DATA_ID_PRE_PRICE: number = 6; // 昨收价
static readonly DATA_ID_OPEN_PRICE: number = 7; // 今日开盘价
static readonly DATA_ID_PRICE: number = 10; // 最新价
static readonly DATA_ID_TURNOVER: number = 19; // 成交额
static readonly DATA_ID_NAME: number = 55; // 合约名称
static readonly DATA_ID_JSJ: number = 66; // 昨日结算价
static readonly DATA_ID_CHG_SPEED_5MIN: number = 34325; // 5 分钟涨跌速
static readonly DATA_ID_INCRE_POSIT: number = 34355; // 日增仓
static readonly DATA_ID_ZF: number = 34818; // 涨跌幅
static readonly DATA_ID_CHG_SPEED_1MIN: number = 34874; // 1 分钟涨跌速
static readonly DATA_ID_CHG_SPEED_10MIN: number = 34875; // 10 分钟涨跌速
static readonly DATA_ID_CHG_SPEED_15MIN: number = 34876; // 15 分钟涨跌速
static readonly DATA_ID_ZF_YTD: number = 34877; // 涨跌幅(昨结算价基准)
static readonly DATA_ID_MARKET: number = 36103; // 市场 ID
private constructor() {
}
}
@@ -11,8 +11,8 @@ import {
CardData, CardData,
PickContractItem, PickContractItem,
PickTabData, PickTabData,
} from '../../ai-pick/AiPickModels'; } from '../model/AiPickModels';
import { getUniqueContracts } from '../../ai-pick/AiPickUtils'; import { getUniqueContracts } from '../../util/AiPickUtils';
const FRAME_ID = 2201; const FRAME_ID = 2201;
const PAGE_ID = 4106; const PAGE_ID = 4106;
@@ -1,5 +1,5 @@
import { AbsRowData, RowData, TableData } from '@b2b/hq_table'; import { AbsRowData, RowData, TableData } from '@b2b/hq_table';
import { TableConstants as BaseTableConstants, TableRequestClient } from '@b2c/lib_baseui'; import { TableConstants as BaseTableConstants, TableConstants, TableRequestClient } from '@b2c/lib_baseui';
import { RequestHelper, StuffTableStruct } from '@kernel/lib_communication'; import { RequestHelper, StuffTableStruct } from '@kernel/lib_communication';
import { import {
QuoteCustomSettingManager, QuoteCustomSettingManager,
@@ -12,12 +12,12 @@ import {
RankItem, RankItem,
RecommendFuturesItem, RecommendFuturesItem,
TabMetric, TabMetric,
} from '../../market-ranking/MarketRankingModels'; } from '../model/MarketRankingModels';
import { import {
PERIOD_RANGES, PERIOD_RANGES,
TAB_METRICS, TAB_METRICS,
} from '../../market-ranking/MarketRankingConstant'; } from '../../constants/MarketRankingConstant';
import { TableConstants } from '../../market-ranking/TableConstants'; import { XTableConstants } from '../../constants/MarketRankingTableConstants';
const FRAME_ID = 2201; const FRAME_ID = 2201;
const PAGE_ID = 4106; const PAGE_ID = 4106;
@@ -90,10 +90,10 @@ class MarketRankingTableRequestClient extends TableRequestClient {
}; };
item.price = this.getNumber(row, TableConstants.DATA_ID_PRICE); item.price = this.getNumber(row, TableConstants.DATA_ID_PRICE);
item.price_chg = this.getNumber(row, TableConstants.DATA_ID_ZF); item.price_chg = this.getNumber(row, TableConstants.DATA_ID_ZF);
if (this.sortId === TableConstants.DATA_ID_TURNOVER) { if (this.sortId === XTableConstants.DATA_ID_TURNOVER) {
item.turnover = this.getNumber(row, TableConstants.DATA_ID_TURNOVER); item.turnover = this.getNumber(row, XTableConstants.DATA_ID_TURNOVER);
} else if (this.sortId === TableConstants.DATA_ID_INCRE_POSIT) { } else if (this.sortId === TableConstants.DATA_ID_RZC) {
item.incre_posit = this.getNumber(row, TableConstants.DATA_ID_INCRE_POSIT); item.incre_posit = this.getNumber(row, TableConstants.DATA_ID_RZC);
} else if (this.sortId !== TableConstants.DATA_ID_ZF) { } else if (this.sortId !== TableConstants.DATA_ID_ZF) {
item.chg_speed = this.getNumber(row, this.sortId); item.chg_speed = this.getNumber(row, this.sortId);
} }
@@ -1,14 +1,14 @@
import { http } from '@kit.NetworkKit'; import { http } from '@kit.NetworkKit';
import { HXLog } from 'biz_common'; import { HXLog } from 'biz_common';
import { buildHeader } from '../util/Header'; import { buildHeader } from '../../util/Header';
import { FirstPageDebugUtil } from '../util/FirstPageDebugUtil'; import { FirstPageDebugUtil } from '../../util/FirstPageDebugUtil';
import { FirstPageCardsConfigLoader } from '../node/datacenter/FirstPageCardsConfigLoader'; import { FirstPageCardsConfigLoader } from './FirstPageCardsConfigLoader';
import { AllCardsCard } from '../node/model/AiDiagnosisNodeModel'; import { AllCardsCard } from '../model/AiDiagnosisNodeModel';
import { import {
RecommendFuturesItem, RecommendFuturesItem,
RecommendFuturesResponse, RecommendFuturesResponse,
} from './MarketRankingModels'; } from '../model/MarketRankingModels';
import { PERIOD_RANGES, TAB_METRICS } from './MarketRankingConstant'; import { PERIOD_RANGES, TAB_METRICS } from '../../constants/MarketRankingConstant';
export class MarketRankingDataFetcher { export class MarketRankingDataFetcher {
private static readonly instance: MarketRankingDataFetcher = new MarketRankingDataFetcher(); private static readonly instance: MarketRankingDataFetcher = new MarketRankingDataFetcher();
@@ -1,23 +1,23 @@
import { emitter } from '@kit.BasicServicesKit'; import { emitter } from '@kit.BasicServicesKit';
import { enableDarkMode } from '@kernel/theme_manager'; import { enableDarkMode } from '@kernel/theme_manager';
import { EmitterConstants, GlobalContext, jumpToQuote } from 'biz_common'; import { EmitterConstants, GlobalContext, jumpToQuote } from 'biz_common';
import { AiPickDataFetcher } from './AiPickDataFetcher'; import { AiPickDataFetcher } from '../../datacenter/AiPickDataFetcher';
import { AiPickHqRequestClient } from '../node/clients/AiPickHqRequestClient'; import { AiPickHqRequestClient } from '../clients/AiPickHqRequestClient';
import { import {
CardData, CardData,
PickContractItem, PickContractItem,
PickStrategy, PickStrategy,
PickTabData, PickTabData,
} from './AiPickModels'; } from '../model/AiPickModels';
import { import {
cellColor, cellColor,
cellValue, cellValue,
formatColName, formatColName,
getUniqueContracts, getUniqueContracts,
} from './AiPickUtils'; } from '../../util/AiPickUtils';
import { AllCardsCard } from '../node/model/AiDiagnosisNodeModel'; import { AllCardsCard } from '../model/AiDiagnosisNodeModel';
import { RouterUtil } from '../util/RouterUtil'; import { RouterUtil } from '../../util/RouterUtil';
import { getResourceString } from '../util/ResourceUtil'; import { getResourceString } from '../../util/ResourceUtil';
interface StrategyDescParams { interface StrategyDescParams {
tabIdx: number; tabIdx: number;
@@ -168,7 +168,7 @@ export struct AiPickNodeComponent {
} }
try { try {
const tabs: PickTabData[] = const tabs: PickTabData[] =
await AiPickDataFetcher.getInstance().fetchCardData(); await AiPickDataFetcher.getInstance().fetchCardData(getContext());
if (!this.isCurrentDataRequest(requestVersion)) { if (!this.isCurrentDataRequest(requestVersion)) {
return; return;
} }
@@ -4,19 +4,19 @@ import {
MetricId, MetricId,
PeriodRange, PeriodRange,
RankItem, RecommendFuturesItem, TabMetric, RankItem, RecommendFuturesItem, TabMetric,
} from './MarketRankingModels'; } from '../model/MarketRankingModels';
import { MarketRankingDataFetcher } from './MarketRankingDataFetcher'; import { MarketRankingDataFetcher } from '../datacenter/MarketRankingDataFetcher';
import { import {
cardDataToContracts, cardDataToContracts,
contractsToPlaceholderCardData, contractsToPlaceholderCardData,
} from './MarketRankingDataMapper'; } from '../../util/MarketRankingDataMapper';
import { MarketRankingHqRequestClient } from '../node/clients/MarketRankingHqRequestClient'; import { MarketRankingHqRequestClient } from '../clients/MarketRankingHqRequestClient';
import { formatGreatNumber, formatPercent, riseFallColor } from '../common/NumberFormat'; import { formatGreatNumber, formatPercent, riseFallColor } from '../../util/NumberFormat';
import { AllCardsCard } from '../node/model/AiDiagnosisNodeModel'; import { AllCardsCard } from '../model/AiDiagnosisNodeModel';
import { PERIOD_RANGES, TAB_METRICS } from './MarketRankingConstant'; import { PERIOD_RANGES, TAB_METRICS } from '../../constants/MarketRankingConstant';
import { enableDarkMode } from '@kernel/theme_manager'; import { enableDarkMode } from '@kernel/theme_manager';
import { EmitterConstants, GlobalContext, jumpToQuote, PreferenceService } from 'biz_common'; import { EmitterConstants, GlobalContext, jumpToQuote, PreferenceService } from 'biz_common';
import { RouterUtil } from '../util/RouterUtil'; import { RouterUtil } from '../../util/RouterUtil';
const NORMAL_SIZE = 3; const NORMAL_SIZE = 3;
const MAX_SIZE = 5; const MAX_SIZE = 5;
@@ -17,7 +17,7 @@ import { FistPageSelfCodeGridItemView } from '../../views/FistPageSelfCodeGridIt
import { HXUtils, TableConstants } from '@b2c/lib_baseui'; import { HXUtils, TableConstants } from '@b2c/lib_baseui';
import { QuoteCustomSettingManager, StandardPriceType } from 'biz_quote'; import { QuoteCustomSettingManager, StandardPriceType } from 'biz_quote';
//TableRowBGView TableConstants //TableRowBGView XTableConstants
/** /**
* 每页显示item数量3 * 每页显示item数量3
@@ -7,14 +7,15 @@ import {
RawFieldItem, RawFieldItem,
RawResultItem, RawResultItem,
RawStrategyItem, RawStrategyItem,
} from './AiPickModels'; } from '../node/model/AiPickModels';
import { BLACK_LIST, MAX_DOUBLE_KEYS, MAX_SHOW_KEYS } from './AiPickConstant'; import { BLACK_LIST, MAX_DOUBLE_KEYS, MAX_SHOW_KEYS } from '../constants/AiPickConstant';
import { import {
formatGreatNumber, formatGreatNumber,
formatPercent, formatPercent,
formatPrice, formatPrice,
riseFallColor, riseFallColor,
} from '../common/NumberFormat'; } from './NumberFormat';
import { getResourceString } from './ResourceUtil';
const EMPTY_EXTRA_FIELDS: Record<string, string> = {}; const EMPTY_EXTRA_FIELDS: Record<string, string> = {};
@@ -25,10 +26,11 @@ export interface ResData {
list: RawDetailItem[]; list: RawDetailItem[];
} }
export function filterFieldKey(key: string): boolean { export function filterFieldKey(context: Context, key: string): boolean {
const blackList = BLACK_LIST.map(value => getResourceString(context, value))
const extBlackList: string[] = const extBlackList: string[] =
BLACK_LIST.map((value: string): string => `期货@${value}`); blackList.map((value: ResourceStr): string => `期货@${value}`);
const inBlack: boolean = BLACK_LIST.includes(key) || extBlackList.includes(key); const inBlack: boolean = blackList.includes(key) || extBlackList.includes(key);
const isChangeField: boolean = const isChangeField: boolean =
key.startsWith('涨跌幅[') || key.startsWith('期货@涨跌幅['); key.startsWith('涨跌幅[') || key.startsWith('期货@涨跌幅[');
return !inBlack && !isChangeField; return !inBlack && !isChangeField;
@@ -39,6 +41,13 @@ export function formatBigData(value: number | string): string {
if (Number.isNaN(numericValue)) { if (Number.isNaN(numericValue)) {
return `${value}`; return `${value}`;
} }
const formattedValue: number = Number(numericValue.toFixed(3));
const absoluteValue: number = Math.abs(formattedValue);
if (absoluteValue < 1e4) {
return `${formattedValue}`;
}
return formatGreatNumber(numericValue); return formatGreatNumber(numericValue);
} }
@@ -67,13 +76,13 @@ export function getResultValueList(
}); });
} }
export function getResData(strategyItem: RawStrategyItem): ResData { export function getResData(context: Context, strategyItem: RawStrategyItem): ResData {
const rawFieldList: RawFieldItem[] = strategyItem.field_list ?? []; const rawFieldList: RawFieldItem[] = strategyItem.field_list ?? [];
const resultList: RawResultItem[] = strategyItem.origin_result_list ?? []; const resultList: RawResultItem[] = strategyItem.origin_result_list ?? [];
const list: RawDetailItem[] = strategyItem.detail_list ?? []; const list: RawDetailItem[] = strategyItem.detail_list ?? [];
const doubleList: RawFieldItem[] = rawFieldList.filter( const doubleList: RawFieldItem[] = rawFieldList.filter(
(field: RawFieldItem): boolean => (field: RawFieldItem): boolean =>
field.type === 'DOUBLE' && filterFieldKey(field.key), field.type === 'DOUBLE' && filterFieldKey(context, field.key),
); );
const doubleListKeys: string[] = const doubleListKeys: string[] =
doubleList.map((field: RawFieldItem): string => field.key); doubleList.map((field: RawFieldItem): string => field.key);
@@ -113,12 +122,12 @@ export function getTableList(
export function getUniqueContracts(cardData: CardData): PickContractItem[] { export function getUniqueContracts(cardData: CardData): PickContractItem[] {
const contracts: PickContractItem[] = []; const contracts: PickContractItem[] = [];
const contractKeys: string[] = []; const contractKeys: Set<string> = new Set();
cardData.tabs.forEach((tab: PickTabData): void => { cardData.tabs.forEach((tab: PickTabData): void => {
tab.items.forEach((item: PickContractItem): void => { tab.items.forEach((item: PickContractItem): void => {
const contractKey: string = `${item.contract}_${item.market}`; const contractKey: string = `${item.contract}_${item.market}`;
if (!contractKeys.includes(contractKey)) { if (!contractKeys.has(contractKey)) {
contractKeys.push(contractKey); contractKeys.add(contractKey);
contracts.push(item); contracts.push(item);
} }
}); });
@@ -2,7 +2,7 @@ import {
CardData, CardData,
RankItem, RankItem,
RecommendFuturesItem, RecommendFuturesItem,
} from './MarketRankingModels'; } from '../node/model/MarketRankingModels';
export function cardDataToContracts(cardData: CardData): RecommendFuturesItem[] { export function cardDataToContracts(cardData: CardData): RecommendFuturesItem[] {
return cardData.tableList.map((item: RankItem): RecommendFuturesItem => ({ return cardData.tableList.map((item: RankItem): RecommendFuturesItem => ({
@@ -119,6 +119,42 @@
"name": "solid_grey_900", "name": "solid_grey_900",
"value": "#3B3B3B" "value": "#3B3B3B"
}, },
{
"name": "commodity_options_expire_label_color",
"value": "#CCA670"
},
{
"name": "hotlist_rank_bg_1",
"value": "#ff2436"
},
{
"name": "hotlist_rank_bg_2",
"value": "#ff661a"
},
{
"name": "hotlist_rank_bg_3",
"value": "#ff9500"
},
{
"name": "hotlist_red",
"value": "#ff2436"
},
{
"name": "hotlist_orange",
"value": "#ff661a"
},
{
"name": "hotlist_blue",
"value": "#3366ff"
},
{
"name": "hotlist_acid_blue",
"value": "#14ccbd"
},
{
"name": "hotlist_green",
"value": "#07ab4b"
},
{ {
"name": "hotlist_purple", "name": "hotlist_purple",
"value": "#b341d9" "value": "#b341d9"
@@ -307,6 +307,39 @@
{ {
"name": "card_explain_confirm", "name": "card_explain_confirm",
"value": "我知道了" "value": "我知道了"
},
{
"name": "ai_pick_contract_code",
"value": "合约代码"
},
{
"name": "ai_pick_contract_nickname",
"value": "合约简称"
},
{
"name": "ai_pick_close_price",
"value": "收盘价"
},
{
"name": "ai_pick_latest_price",
"value": "最新价"
}, {
"name": "ai_pick_change_percent",
"value": "涨跌幅"
},{
"name": "ai_pick_code",
"value": "code"
},
{
"name": "ai_pick_market_id",
"value": "market_id"
},{
"name": "ai_pick_market_code",
"value": "market_code"
},
{
"name": "ai_pick_latest_change_percent",
"value": "最新涨跌幅"
} }
] ]
} }
+1 -1
View File
@@ -5,4 +5,4 @@
"value": "page from package" "value": "page from package"
} }
] ]
} }