Files
2026-02-06 18:01:05 +08:00

925 lines
34 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
const common_vendor = require("../../common/vendor.js");
const request_api = require("../../request/api.js");
const common_assets = require("../../common/assets.js");
const echarts = require("../../uni_modules/lime-echart/static/echarts.min.js");
const _sfc_main = {
data() {
return {
navH: common_vendor.inject("navHeight"),
contentTop: "",
currentDate: "",
// 最终要赋值的日期
selectedDate: "",
// 临时存储选中的日期
allStockData: [],
filteredData: [],
conceptStocksList: [],
alertTypeConfig: {
"surge": {
text: "异动",
color: "#FF7A45",
// rgb(255, 122, 69)
filter: "brightness(0) saturate(100%) invert(54%) sepia(60%) saturate(467%) hue-rotate(344deg) brightness(102%) contrast(101%)"
},
"shrink_surge_up": {
text: "缩量急涨",
color: "#722ED1",
// rgb(114, 46, 209)
filter: "brightness(0) saturate(100%) invert(24%) sepia(90%) saturate(2865%) hue-rotate(266deg) brightness(87%) contrast(98%)"
},
"volume_surge_up": {
text: "放量急涨",
color: "#EB2F96",
// rgb(235, 47, 150)
filter: "brightness(0) saturate(100%) invert(34%) sepia(82%) saturate(1970%) hue-rotate(313deg) brightness(91%) contrast(94%)"
},
"volume_oscillation": {
text: "放量震荡",
color: "#13C2C2",
// rgb(19, 194, 194)
filter: "brightness(0) saturate(100%) invert(71%) sepia(62%) saturate(487%) hue-rotate(142deg) brightness(91%) contrast(93%)"
},
"surge_up": {
text: "急涨",
color: "#FF4D4F",
// rgb(255, 77, 79)
filter: "brightness(0) saturate(100%) invert(42%) sepia(93%) saturate(727%) hue-rotate(346deg) brightness(102%) contrast(104%)"
},
"surge_down": {
text: "急跌",
color: "#52C41A",
// rgb(82, 196, 26)
filter: "brightness(0) saturate(100%) invert(68%) sepia(65%) saturate(456%) hue-rotate(71deg) brightness(91%) contrast(86%)"
},
"shrink_surge_down": {
text: "缩量急跌",
color: "#FF7A45",
// rgb(255, 122, 69)
filter: "brightness(0) saturate(100%) invert(54%) sepia(60%) saturate(467%) hue-rotate(344deg) brightness(102%) contrast(101%)"
}
},
topLists: [
{
title: "大盘涨跌幅",
value: "+0.00%",
color: "#EC3440",
backIcon: "/static/icon/gegu/gg-top-0.png"
},
{
title: "涨停/跌停",
value: "+0.00%",
color: "#070707",
backIcon: "/static/icon/gegu/gg-top-1.png"
},
{
title: "多空对比",
value: "0/0",
color: "#070707",
backIcon: "/static/icon/gegu/gg-top-2.png"
},
{
title: "今日成交额",
value: "0万亿",
color: "#070707",
backIcon: "/static/icon/gegu/gg-top-3.png"
},
{
title: "A股总市值",
value: "0万亿",
color: "#070707",
backIcon: "/static/icon/gegu/gg-top-4.png"
},
{
title: "连板龙头",
value: "0只",
color: "#F59B38",
backIcon: "/static/icon/gegu/gg-top-5.png"
}
],
topLists2: [
{
title: "超大盘股",
value: ">1000亿"
},
{
title: "大盘股",
value: "500-1000亿"
},
{
title: "中盘股",
value: "100-500亿"
}
],
list2Index: 0,
typeList: [
{
title: "缩量急涨",
backIcon: "/static/icon/gegu/cate-0.png"
},
{
title: "异动",
backIcon: "/static/icon/gegu/cate-1.png"
},
{
title: "急跌",
backIcon: "/static/icon/gegu/cate-2.png"
},
{
title: "急涨",
backIcon: "/static/icon/gegu/cate-3.png"
},
{
title: "放量震荡",
backIcon: "/static/icon/gegu/cate-4.png"
}
],
marketAlertsList: [],
formattedAvg: 0,
upCount: 0,
downCount: 0,
limit_up_ratio: 0,
searchResultTop: "",
//搜索结果
contentTop: "",
keywords: "",
//搜索关键字
searchShow: false,
//是否展示搜索结果
searchResultList: [],
//搜索结果
selectSearchStockInfo: null,
//选中的搜索股票信息
isShowTime: false,
ec: { lazyLoad: true },
// 延迟加载 ECharts
chart: null,
y2MaxText: "",
// 右侧顶部最大值文本2.36% / -0.89%
y2MinText: ""
// 右侧底部最小值文本(例:-3.12% / 0.56%
};
},
onLoad(e) {
this.activeIndex = e.index;
this.searchResultTop = this.navH + (20 + 70) / 750 * common_vendor.inject("windowWidth");
this.contentTop = this.navH + (20 + 70 + 25) / 750 * common_vendor.inject("windowWidth");
this.conceptsDailyTop();
const now = /* @__PURE__ */ new Date();
const year = now.getFullYear();
const month = (now.getMonth() + 1).toString().padStart(2, "0");
const day = now.getDate().toString().padStart(2, "0");
this.currentDate = `${year}-${month}-${day}`;
},
onShow() {
this.isShowTime = false;
this.marketHeatmap();
this.marketStatistics();
this.marketHotspotListOverview();
},
methods: {
truncateText(text, length) {
if (!text)
return "";
return text.length > length ? text.substring(0, length) + "..." : text;
},
/**
* 点击搜索
*/
clickSearch() {
if (this.keywords) {
this.getSearchStockInfoListData();
} else
this.selectSearchStockInfo = null;
},
/**
* 点击搜索结果背景
*/
clickSearchResultBg() {
this.searchShow = false;
},
/**
* 点击搜索结果列表项
*/
clickSearchResultListItem(item) {
this.selectSearchStockInfo = item;
this.searchShow = false;
this.getStockBasicInfoData();
},
/**
* 根据输入内容获取搜索列表项
*/
getSearchStockInfoListData() {
let param = { q: this.keywords, limit: 10 };
request_api.searchStockInfo(param).then((res) => {
this.searchResultList = res.data;
this.searchShow = this.searchResultList.length > 0;
}).catch((error) => {
});
},
/**
* 获取股票基本信息
*/
getStockBasicInfoData() {
let code = this.stockCode;
if (this.selectSearchStockInfo) {
code = this.selectSearchStockInfo.stock_code;
}
common_vendor.index.navigateTo({
url: "/pagesStock/stockCenterDetails/stockCenterDetails?code=" + code
});
},
/**
* 获取股票当前市场价格信息
*/
getQuoteDetailsData() {
let code = this.stockCode;
if (this.selectSearchStockInfo) {
code = this.selectSearchStockInfo.stock_code;
}
quoteDetailsInfo(code).then((res) => {
this.quoteDetailsInfo = res.data;
}).catch((error) => {
});
},
formatAlpha(value) {
if (value === null || value === void 0 || isNaN(Number(value))) {
return "0.0";
}
return Number(value).toFixed(1);
},
handleTypeClick(index) {
this.list2Index = index;
this.marketHeatmap(this.currentDate);
},
getTableItem(obj) {
const marketCap = obj.market_cap ? obj.market_cap.toFixed(2) : "0.00";
const amount = obj.amount ? obj.amount.toFixed(2) : "0.00";
const changePercent = obj.change_percent ? Number(obj.change_percent) : 0;
let changePercentStr = "";
let changeType = "";
if (changePercent > 0) {
changePercentStr = `+${changePercent}%`;
changeType = "positive";
} else if (changePercent < 0) {
changePercentStr = `${changePercent}%`;
changeType = "negative";
} else {
changePercentStr = "0%";
changeType = "zero";
}
return [
[obj.stock_name, obj.stock_code],
[changePercentStr, "", changeType],
// 第三个元素存类型标记
[`${marketCap}亿元`],
[`${amount}亿元`],
[obj.industry || "暂无"]
// 处理行业为空的情况
];
},
// 处理涨停比:转百分比 + 四舍五入(可指定保留小数位数)
formatLimitUpRatio(value, decimalPlaces = 0) {
if (!value || isNaN(Number(value))) {
return "0%";
}
const percentValue = Number(value) * 100;
const result = decimalPlaces === 0 ? Math.round(percentValue) : percentValue.toFixed(decimalPlaces);
return `${result}%`;
},
conceptsDailyTop() {
request_api.conceptsDailyTop().then((res) => {
}).catch((error) => {
});
},
marketHeatmap(currentDate) {
let param = {
limit: 500
};
if (this.isShowTime) {
if (currentDate && currentDate !== "undefined" && currentDate.trim() !== "") {
param.date = currentDate;
}
}
request_api.marketHeatmap(param).then((res) => {
this.topLists[2].value = res.statistics.rising_count + "/" + res.statistics.falling_count;
this.allStockData = res.data || [];
const limitUpCount = this.allStockData.filter((s) => {
const changePercent = Number(s.change_percent);
return !isNaN(changePercent) && changePercent >= 9.9;
}).length;
const limitDownCount = this.allStockData.filter((s) => {
const changePercent = Number(s.change_percent);
return !isNaN(changePercent) && changePercent <= -9.9;
}).length;
this.topLists[1].value = limitUpCount + "/" + limitDownCount;
this.topLists[5].value = limitUpCount + "只";
this.filterStockByMarketCap();
}).catch((error) => {
});
},
// 根据市值区间筛选数据
filterStockByMarketCap() {
const {
list2Index,
allStockData
} = this;
let filtered = [];
switch (list2Index) {
case 0:
filtered = allStockData.filter((item) => item.market_cap > 1e3);
break;
case 1:
filtered = allStockData.filter((item) => item.market_cap >= 500 && item.market_cap <= 1e3);
break;
case 2:
filtered = allStockData.filter((item) => item.market_cap >= 100 && item.market_cap <= 500);
break;
default:
filtered = allStockData;
}
this.filteredData = filtered.slice(0, 10);
},
marketStatistics() {
request_api.marketStatistics().then((res) => {
this.topLists[3].value = this.formatToTrillion(res.summary.total_amount);
this.topLists[4].value = this.formatToTrillion(res.summary.total_market_cap);
}).catch((error) => {
this.topLists[3].value = "0.0 万亿";
this.topLists[4].value = "0.0 万亿";
});
},
formatToTrillion(num) {
if (typeof num !== "number" || isNaN(num)) {
return "0.0 万亿";
}
const trillionValue = (num / 1e4).toFixed(1);
return `${trillionValue} 万亿`;
},
marketHotspotListOverview() {
let param = {
date: this.currentDate
};
request_api.marketHotspotOverview(param).then((res) => {
var _a;
const data = res == null ? void 0 : res.data;
const alerts = ((_a = res == null ? void 0 : res.data) == null ? void 0 : _a.alerts) || [];
const changePct = res.data.index.change_pct;
let numPct = 0;
if (changePct && !isNaN(Number(changePct))) {
numPct = Number(changePct);
}
const roundedPct = Math.round(numPct * 100) / 100;
const fixedPct = roundedPct.toFixed(2);
let formattedPct = "";
if (roundedPct > 0) {
formattedPct = `+${fixedPct}%`;
} else if (roundedPct < 0) {
formattedPct = `${fixedPct}%`;
} else {
formattedPct = "0.00%";
}
const color = roundedPct > 0 ? "#EC3440" : roundedPct < 0 ? "#01AB5D" : "#666666";
this.topLists[0].value = formattedPct;
this.topLists[0].color = color;
const processedAlerts = alerts.map((alertItem) => {
const stocks = alertItem.stocks || [];
const validStocks = stocks.filter((s) => s.change_pct != null && !isNaN(Number(s.change_pct)));
const avgChange = validStocks.length > 0 ? validStocks.reduce((sum, s) => sum + Number(s.change_pct), 0) / validStocks.length : 0;
const upCount = validStocks.filter((s) => Number(s.change_pct) > 0).length;
const downCount = validStocks.filter((s) => Number(s.change_pct) < 0).length;
const roundedAvg = Math.round(avgChange * 100) / 100;
const formattedAvg = roundedAvg > 0 ? `+${roundedAvg.toFixed(2)}` : roundedAvg.toFixed(2);
return {
...alertItem,
alpha: avgChange,
// 供模板中判断颜色和显示数值
upCount,
// 上涨股票数
downCount,
// 下跌股票数
formattedAvg
// 格式化后的均涨值(带正负号)
};
});
const sortByTimeDesc = (a, b) => {
const timeToMinutes = (timeStr) => {
const [hours, minutes] = timeStr.split(":").map(Number);
return hours * 60 + minutes;
};
const minutesA = timeToMinutes(a.time);
const minutesB = timeToMinutes(b.time);
return minutesB - minutesA;
};
const sortedAlerts = processedAlerts.sort(sortByTimeDesc);
this.marketAlertsList = sortedAlerts;
this.initChart(data.index.timeline, processedAlerts);
}).catch((error) => {
});
},
async initChart(timeline, alerts) {
if (!timeline || timeline.length === 0)
return;
const chart = await this.$refs.chartRef.init(echarts);
this.chartInstance = chart;
const xAxisTime = timeline.map((item) => {
var _a;
return ((_a = item.time) == null ? void 0 : _a.trim()) || "";
});
const yAxisPrice = timeline.map((item) => Number(item.price) || 0);
const changePctList = timeline.map((item) => Number(item.change_pct)).filter((val) => !isNaN(val) && val !== null && val !== void 0);
const validPrices = yAxisPrice.filter((val) => val !== 0 && !isNaN(val));
const priceMin = validPrices.length > 0 ? Math.min(...validPrices) : 0;
const priceMax = validPrices.length > 0 ? Math.max(...validPrices) : 0;
const priceRange = priceMax - priceMin;
const yAxisMin = priceRange > 0 ? priceMin - priceRange * 0.1 : priceMin;
const yAxisMax = priceRange > 0 ? priceMax + priceRange * 0.25 : priceMax;
let y2Min = 0, y2Max = 0;
if (changePctList.length > 0) {
y2Min = Math.min(...changePctList);
y2Max = Math.max(...changePctList);
this.y2MaxText = Number(y2Max).toFixed(2) + "%";
this.y2MinText = Number(y2Min).toFixed(2) + "%";
} else {
this.y2MaxText = "0.00%";
this.y2MinText = "0.00%";
}
const alertObj = {};
let totalAlert = 0;
let sameTimeCount = 0;
let sameScoreCount = 0;
alerts.forEach((alert) => {
var _a;
if (!alert)
return;
const alertTime = ((_a = alert.time) == null ? void 0 : _a.trim()) || "";
const alertScore = Number(alert.importance_score);
if (alertTime === "" || isNaN(alertScore))
return;
const idx = xAxisTime.findIndex((t) => (t == null ? void 0 : t.trim()) === alertTime);
if (idx === -1)
return;
totalAlert++;
if (!alertObj[alertTime]) {
alertObj[alertTime] = { ...alert, idx, importance_score: alertScore };
} else {
sameTimeCount++;
const existAlert = alertObj[alertTime];
if (alertScore > existAlert.importance_score) {
alertObj[alertTime] = { ...alert, idx, importance_score: alertScore };
} else if (alertScore === existAlert.importance_score) {
sameScoreCount++;
}
}
});
const timeToMinutes = (timeStr) => {
const [hour, minute] = timeStr.split(":").map(Number);
return hour * 60 + minute;
};
const get10MinGroup = (minutes) => {
const startMin = Math.floor(minutes / 10) * 10;
const endMin = startMin + 9;
const formatTime = (m) => {
const h = Math.floor(m / 60).toString().padStart(2, "0");
const mi = (m % 60).toString().padStart(2, "0");
return `${h}:${mi}`;
};
return `${formatTime(startMin)}-${formatTime(endMin)}`;
};
const filterBy10MinGroup = (alertObj2) => {
const alertGroupList = Object.keys(alertObj2).filter((time) => time && time.includes(":")).map((time) => {
const minutes = timeToMinutes(time);
return {
group: get10MinGroup(minutes),
// 所属10分钟分组
score: alertObj2[time].importance_score,
// 告警评分
data: alertObj2[time]
// 原始告警数据
};
});
if (alertGroupList.length === 0)
return {};
const groupMap = {};
alertGroupList.forEach((item) => {
if (!groupMap[item.group]) {
groupMap[item.group] = [];
}
groupMap[item.group].push(item);
});
const finalAlertObj = {};
Object.keys(groupMap).forEach((groupName) => {
const groupItems = groupMap[groupName];
const sortedItems = groupItems.sort((a, b) => b.score - a.score);
const topItem = sortedItems[0];
finalAlertObj[topItem.data.time] = topItem.data;
});
return finalAlertObj;
};
const filteredAlertObj = filterBy10MinGroup(alertObj);
const originalKeyLen = Object.keys(alertObj).length;
const filteredKeyLen = Object.keys(filteredAlertObj).length;
const groupDetail = Object.keys(filteredAlertObj).map((time) => {
const minutes = timeToMinutes(time);
return { time, group: get10MinGroup(minutes), score: filteredAlertObj[time].importance_score };
});
common_vendor.index.__f__("log", "at pages/geGuCenter/geGuCenter.vue:957", "===== 告警点处理全统计10分钟分组版=====");
common_vendor.index.__f__("log", "at pages/geGuCenter/geGuCenter.vue:958", "1. 过滤后有效告警总数量:", totalAlert);
common_vendor.index.__f__("log", "at pages/geGuCenter/geGuCenter.vue:959", "2. 相同时间的告警去重数量:", sameTimeCount);
common_vendor.index.__f__("log", "at pages/geGuCenter/geGuCenter.vue:960", "3. 相同时间且相同评分数量:", sameScoreCount);
common_vendor.index.__f__("log", "at pages/geGuCenter/geGuCenter.vue:961", "4. 基础去重后(同时间最高评分)数量:", originalKeyLen);
common_vendor.index.__f__("log", "at pages/geGuCenter/geGuCenter.vue:962", "5. 10分钟分组后每组取最高评分数量", filteredKeyLen);
common_vendor.index.__f__("log", "at pages/geGuCenter/geGuCenter.vue:963", "6. 分组详情(时间→所属分组→评分):", groupDetail);
common_vendor.index.__f__("log", "at pages/geGuCenter/geGuCenter.vue:964", "7. 分组后最终告警详情:", filteredAlertObj);
const alertPoints = Object.values(filteredAlertObj).map((alert) => {
const validIdx = !isNaN(alert.idx) && alert.idx >= 0 && alert.idx < xAxisTime.length ? alert.idx : 0;
const xVal = xAxisTime[validIdx] || "";
const yVal = !isNaN(yAxisPrice[validIdx]) ? yAxisPrice[validIdx] : 0;
return {
name: alert.concept_name || "未知概念",
// 概念名兜底
coord: [xVal, yVal],
// 确保x轴值严格匹配xAxis.datay轴值有效
value: yVal,
itemStyle: { color: "#FF4444" },
// 告警点红色
label: {
formatter() {
return alert.concept_name;
},
show: true,
position: "top",
fontSize: 10,
color: "#FF4444",
fontWeight: "500",
distance: 5
}
};
}).filter(Boolean);
common_vendor.index.__f__("log", "at pages/geGuCenter/geGuCenter.vue:991", "8. 最终ECharts告警点数据10分钟分组", alertPoints);
const option = {
grid: { left: "4%", right: "8%", bottom: "8%", top: "10%", containLabel: true },
xAxis: {
type: "category",
boundaryGap: false,
data: xAxisTime,
axisLabel: {
fontSize: 12,
rotate: 30,
interval: Math.floor(xAxisTime.length / 6)
},
axisTick: {
alignWithLabel: true,
interval: Math.floor(xAxisTime.length / 6)
}
},
yAxis: [
{
type: "value",
min: yAxisMin,
max: yAxisMax,
nameTextStyle: { fontSize: 12 },
axisLabel: {
formatter: (val) => val.toFixed(0),
fontSize: 12
},
splitLine: { lineStyle: { type: "dashed", color: "#EEEEEE" } },
boundaryGap: [0.05, 0.05]
// 上下留5%缓冲,避免顶点告警点被裁剪
}
],
dataZoom: [],
series: [
{
name: "上证指数",
type: "line",
smooth: true,
symbol: "circle",
symbolSize: 5,
itemStyle: { color: "#0092FF" },
lineStyle: {
width: 2,
color: "#0092FF",
shadowColor: "rgba(0,146,255,0.5)",
shadowBlur: 8,
shadowOffsetY: 3,
shadowOffsetX: 0
},
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: "rgba(0,146,255,0.25)" },
{ offset: 1, color: "rgba(0,146,255,0)" }
])
},
data: yAxisPrice,
// 保留所有markPoint显示修复配置强制显示/层级/样式)
markPoint: {
show: true,
// 强制开启显示(关键!)
symbol: "circle",
symbolSize: 5,
// 比折线大,避免被遮挡
z: 10,
// 层级置顶,不被任何元素遮挡
data: alertPoints,
itemStyle: {
color: "#FF4444",
borderColor: "#fff",
// 白色描边,更醒目
borderWidth: 1
},
label: {
show: true,
position: "top",
fontSize: 10,
color: "#FF4444",
fontWeight: "500",
distance: 6,
backgroundColor: "rgba(255,255,255,0.8)",
// 标签白色背景,防融合
padding: [2, 4],
borderRadius: 2,
borderColor: "#FF4444",
// 白色描边,更醒目
borderWidth: 1
}
},
yAxisIndex: 0
}
]
};
common_vendor.index.__f__("log", "at pages/geGuCenter/geGuCenter.vue:1082", "7. 分组后最终告警详情:", JSON.stringify(option.series));
chart.setOption(option, true);
common_vendor.index.onWindowResize(() => {
this.chartInstance && this.chartInstance.resize();
});
},
itemDetails(item) {
common_vendor.index.navigateTo({
url: "/pagesStock/stockCenterDetails/stockCenterDetails?code=" + item.stock_code
});
},
moreAction() {
if (this.isShowTime) {
common_vendor.index.navigateTo({
url: "/pages/geGuCenter/detail?currentDate=" + this.currentDate
});
} else {
common_vendor.index.navigateTo({
url: "/pages/geGuCenter/detail"
});
}
},
allAction(index) {
if (index == 1) {
this.$refs["typePopup"].open();
} else if (index == 2) {
this.$refs["datePopup"].open();
}
},
closeAction(index) {
if (index == 1) {
this.$refs["typePopup"].close();
} else if (index == 2) {
this.$refs["datePopup"].close();
} else if (index == 3) {
this.$refs["detailPopup"].close();
}
},
handleDateChange(date) {
this.selectedDate = date;
common_vendor.index.__f__("log", "at pages/geGuCenter/geGuCenter.vue:1124", "选中的日期:", date);
},
confirmAction(index) {
if (index == 1) {
this.$refs["typePopup"].close();
} else if (index == 2) {
if (this.selectedDate) {
this.currentDate = this.selectedDate;
common_vendor.index.__f__("log", "at pages/geGuCenter/geGuCenter.vue:1133", "最终确认的日期:", this.currentDate);
} else {
const now = /* @__PURE__ */ new Date();
const year = now.getFullYear();
const month = (now.getMonth() + 1).toString().padStart(2, "0");
const day = now.getDate().toString().padStart(2, "0");
this.currentDate = `${year}-${month}-${day}`;
}
this.isShowTime = true;
this.marketHeatmap(this.currentDate);
this.marketStatistics();
this.marketHotspotListOverview();
this.$refs["datePopup"].close();
}
},
bkydAction(item) {
this.$refs["detailPopup"].open();
this.formattedAvg = item.formattedAvg, this.upCount = item.upCount, this.downCount = item.downCount, this.limit_up_ratio = item.limit_up_ratio, this.conceptStocksDetails(item.concept_id);
},
conceptStocksDetails(concept_id) {
common_vendor.index.__f__("log", "at pages/geGuCenter/geGuCenter.vue:1160", "concept_id", concept_id);
request_api.conceptStocks(concept_id, {}).then((res) => {
if (res.data && res.data.stocks) {
let rawData = res.data.stocks;
this.conceptStocksList = rawData.sort((a, b) => {
const aValue = a.change_pct === null || a.change_pct === void 0 ? -999 : Number(a.change_pct);
const bValue = b.change_pct === null || b.change_pct === void 0 ? -999 : Number(b.change_pct);
return bValue - aValue;
});
} else {
common_vendor.index.__f__("warn", "at pages/geGuCenter/geGuCenter.vue:1179", "接口返回数据格式异常", res);
}
}).catch((error) => {
});
},
// 格式化涨跌幅显示(处理正负号、保留两位小数)
formatChangePct(change_pct) {
if (typeof change_pct !== "number")
return "0.00%";
const symbol = change_pct >= 0 ? "+" : "";
return `${symbol}${change_pct.toFixed(2)}%`;
},
// 获取涨跌幅文字颜色(涨红跌绿,平盘灰色)
getChangeColor(change_pct) {
if (typeof change_pct !== "number")
return "#888888";
if (change_pct > 0)
return "#EC3440";
if (change_pct < 0)
return "#00B42A";
return "#888888";
}
}
};
if (!Array) {
const _easycom_navBar2 = common_vendor.resolveComponent("navBar");
const _easycom_l_echart2 = common_vendor.resolveComponent("l-echart");
const _easycom_uni_popup2 = common_vendor.resolveComponent("uni-popup");
const _easycom_LCCalendar22 = common_vendor.resolveComponent("LCCalendar2");
(_easycom_navBar2 + _easycom_l_echart2 + _easycom_uni_popup2 + _easycom_LCCalendar22)();
}
const _easycom_navBar = () => "../../components/navBar/navBar.js";
const _easycom_l_echart = () => "../../uni_modules/lime-echart/components/l-echart/l-echart.js";
const _easycom_uni_popup = () => "../../uni_modules/uni-popup/components/uni-popup/uni-popup.js";
const _easycom_LCCalendar2 = () => "../../components/LCCalendar2/LCCalendar2.js";
if (!Math) {
(_easycom_navBar + _easycom_l_echart + _easycom_uni_popup + _easycom_LCCalendar2)();
}
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return common_vendor.e({
a: common_vendor.p({
leftText: "个股中心",
hideNavBg: true,
hideBack: true
}),
b: common_assets._imports_0,
c: common_assets._imports_1,
d: common_vendor.o([($event) => $data.keywords = $event.detail.value, ($event) => $options.clickSearch()]),
e: $data.keywords,
f: common_vendor.s("top:" + $data.navH + "px;"),
g: $data.searchShow
}, $data.searchShow ? {
h: common_vendor.f($data.searchResultList, (item, index, i0) => {
return {
a: common_vendor.t(item.stock_code),
b: common_vendor.t(item.stock_name),
c: index,
d: common_vendor.o(($event) => $options.clickSearchResultListItem(item), index)
};
}),
i: common_vendor.s("top:" + $data.searchResultTop + "px;"),
j: common_vendor.o(($event) => $options.clickSearchResultBg())
} : {}, {
k: common_vendor.f($data.topLists, (item, index, i0) => {
return {
a: item.backIcon,
b: common_vendor.t(item.title),
c: common_vendor.t(item.value),
d: item.color,
e: index
};
}),
l: common_vendor.f($data.topLists2, (item, index, i0) => {
return {
a: common_vendor.t(item.title),
b: $data.list2Index == index ? "#BB8520" : "#070707",
c: $data.list2Index == index ? "#FFFAF1" : "#FFFFFF",
d: common_vendor.t(item.value),
e: $data.list2Index == index ? "#BB8520" : "#070707",
f: common_vendor.o(($event) => $options.handleTypeClick(index), index),
g: index,
h: `1rpx solid ${$data.list2Index == index ? "#F2C369" : "#D2D2D2"}`
};
}),
m: common_vendor.f(["股票名称", "涨跌幅", "市值", "成交额", "行业"], (item, index, i0) => {
return {
a: common_vendor.t(item),
b: index
};
}),
n: common_vendor.f($data.filteredData, (obj, j, i0) => {
return {
a: common_vendor.f($options.getTableItem(obj), (item, index, i1) => {
return common_vendor.e({
a: common_vendor.t(item[0]),
b: index == 0
}, index == 0 ? {
c: common_vendor.t(item[1])
} : {}, {
d: index,
e: index == 0 ? "#222222" : index == 1 ? item[2] === "positive" ? "#EC3440" : "#01AB5D" : "#666666"
});
}),
b: common_vendor.o(($event) => $options.itemDetails(obj)),
c: j % 2 == 0 ? "#fff" : "#FAFAFC"
};
}),
o: common_assets._imports_2$3,
p: common_vendor.o((...args) => $options.moreAction && $options.moreAction(...args)),
q: common_assets._imports_3$7,
r: common_assets._imports_4$1,
s: common_vendor.o(($event) => $options.allAction(1)),
t: common_vendor.t($data.currentDate),
v: common_assets._imports_4$1,
w: common_vendor.o(($event) => $options.allAction(2)),
x: common_vendor.sr("chartRef", "c7f5c964-1"),
y: common_vendor.t($data.y2MaxText),
z: common_vendor.t($data.y2MinText),
A: common_assets._imports_3$7,
B: common_vendor.f($data.marketAlertsList, (item, index, i0) => {
var _a, _b, _c, _d;
return common_vendor.e({
a: common_vendor.t(item.time),
b: common_vendor.t($options.truncateText(item.concept_name, 5)),
c: ((_a = $data.alertTypeConfig[item.alert_type]) == null ? void 0 : _a.filter) || "",
d: common_vendor.t(((_b = $data.alertTypeConfig[item.alert_type]) == null ? void 0 : _b.text) || "异动"),
e: ((_c = $data.alertTypeConfig[item.alert_type]) == null ? void 0 : _c.color) || "#FF7A45",
f: "1rpx solid " + (((_d = $data.alertTypeConfig[item.alert_type]) == null ? void 0 : _d.color) || "#FF7A45"),
g: common_vendor.t(item.formattedAvg),
h: Number(item.alpha) > 0 ? "#EC3440" : "#01AB5D",
i: common_vendor.t(item.upCount),
j: item.upCount > 0 ? "#EC3440" : "#888888",
k: common_vendor.t(item.downCount),
l: item.downCount > 0 ? "#01AB5D" : "#888888",
m: common_vendor.t(Math.round(item.final_score)),
n: item && Number(item.limit_up_ratio) > 0 && !isNaN(Number(item.limit_up_ratio))
}, item && Number(item.limit_up_ratio) > 0 && !isNaN(Number(item.limit_up_ratio)) ? {
o: common_vendor.t($options.formatLimitUpRatio(item.limit_up_ratio, 0))
} : {}, {
p: index,
q: common_vendor.o(($event) => $options.bkydAction(item), index)
});
}),
C: common_assets._imports_5$3,
D: common_vendor.s("top:" + $data.contentTop + "px;"),
E: common_vendor.o(($event) => $options.closeAction(1)),
F: common_vendor.o(($event) => $options.confirmAction(1)),
G: common_vendor.f($data.typeList, (item, index, i0) => {
return {
a: item.backIcon,
b: common_vendor.t(item.title),
c: index
};
}),
H: common_vendor.sr("typePopup", "c7f5c964-2"),
I: common_vendor.p({
type: "bottom",
safeArea: false
}),
J: common_vendor.o(($event) => $options.closeAction(2)),
K: common_vendor.o(($event) => $options.confirmAction(2)),
L: common_vendor.o($options.handleDateChange),
M: common_vendor.sr("datePopup", "c7f5c964-3"),
N: common_vendor.p({
type: "bottom",
safeArea: false
}),
O: common_assets._imports_6$1,
P: common_vendor.o(($event) => $options.closeAction(3)),
Q: common_vendor.t($data.formattedAvg),
R: Number($data.formattedAvg) > 0 ? "#EC3440" : "#01AB5D",
S: common_vendor.t($data.upCount),
T: $data.upCount > 0 ? "#EC3440" : "#888888",
U: common_vendor.t($data.downCount),
V: $data.downCount > 0 ? "#01AB5D" : "#888888",
W: common_vendor.t($options.formatLimitUpRatio($data.limit_up_ratio, 0)),
X: common_vendor.f($data.conceptStocksList, (item, index, i0) => {
return {
a: common_vendor.t(item.name),
b: common_vendor.t(item.code),
c: common_vendor.t($options.formatChangePct(item.change_pct)),
d: $options.getChangeColor(item.change_pct),
e: index,
f: index % 2 == 0 ? "#fff" : "#FAFAFC"
};
}),
Y: common_vendor.sr("detailPopup", "c7f5c964-5"),
Z: common_vendor.p({
type: "bottom",
safeArea: false
})
});
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/geGuCenter/geGuCenter.js.map