2.5 主营业务明细与历史对比表完善,增加非会员弹窗跳转,调整会员页面文字,财务数据模块单季度增加总值展示

This commit is contained in:
尚政杰
2026-02-05 17:47:47 +08:00
parent c4cbd5a11f
commit 21e16f543f
86 changed files with 1661 additions and 376 deletions

View File

@@ -380,7 +380,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
d: common_assets._imports_3$12,
e: common_assets._imports_5$7,
f: common_vendor.sr("chartRef1", "351c0d57-0"),
g: common_assets._imports_4$12,
g: common_assets._imports_4$13,
h: common_assets._imports_2$3,
i: common_vendor.f($data.perShareIndicatorList, (item, index, i0) => {
return {

View File

@@ -19,6 +19,8 @@ const _sfc_main = {
option1: {
legend: {
show: true,
itemWidth: 10,
itemHeight: 10,
data: ["货币资金", "同比(右)"]
},
grid: {
@@ -27,13 +29,28 @@ const _sfc_main = {
top: "5%",
bottom: "30%"
},
xAxis: {
type: "category",
data: [],
axisLabel: {
fontSize: 10
xAxis: [
{
type: "category",
data: [],
axisLabel: {
fontSize: 10
}
},
{
type: "category",
data: [],
axisLine: {
show: false
},
axisTick: {
show: false
},
axisLabel: {
show: false
}
}
},
],
yAxis: [
{
type: "value",
@@ -86,13 +103,28 @@ const _sfc_main = {
top: "5%",
bottom: "30%"
},
xAxis: {
type: "category",
data: [],
axisLabel: {
fontSize: 10
xAxis: [
{
type: "category",
data: [],
axisLabel: {
fontSize: 10
}
},
{
type: "category",
data: [],
axisLine: {
show: false
},
axisTick: {
show: false
},
axisLabel: {
show: false
}
}
},
],
yAxis: [
{
type: "value",
@@ -142,14 +174,28 @@ const _sfc_main = {
top: "5%",
bottom: "30%"
},
xAxis: {
type: "category",
data: [],
axisLabel: {
rotate: 45,
fontSize: 10
xAxis: [
{
type: "category",
data: [],
axisLabel: {
fontSize: 10
}
},
{
type: "category",
data: [],
axisLine: {
show: false
},
axisTick: {
show: false
},
axisLabel: {
show: false
}
}
},
],
yAxis: [
{
type: "value",
@@ -301,7 +347,7 @@ const _sfc_main = {
for (let item of showDataList) {
for (let item1 of category) {
let index = showDataList.indexOf(item);
let lastItem = showDataList[index + 1];
let lastItem = this.financialBalanceList[index + 1];
if (item1 + "年一季报" == item.report_type) {
if (item.assets.current_assets.cash) {
data1.unshift(utils_util.accDiv(item.assets.current_assets.cash, 1e8).toFixed(2));
@@ -328,32 +374,63 @@ const _sfc_main = {
}
}
}
let sumData = [];
for (var i = 0; i < data1.length; i++) {
let sum = data1[i];
sum = utils_util.accAdd(sum, data2[i] ? data2[i] : 0);
sum = utils_util.accAdd(sum, data3[i] ? data3[i] : 0);
sum = utils_util.accAdd(sum, data4[i] ? data4[i] : 0).toFixed(2);
if (sum > 1e4) {
sumData.push((sum / 1e4).toFixed(2) + "万");
} else
sumData.push(sum);
}
this.option1.legend.data = ["第一季度", "第二季度", "第三季度", "第四季度"];
this.option1.xAxis.data = category;
this.option1.xAxis[0].data = category;
this.option1.xAxis[1].data = category;
this.option1.series = [
{
type: "bar",
name: "第一季度",
barWidth: "15%",
data: data1,
yAxisIndex: 0
},
{
type: "bar",
name: "第二季度",
barWidth: "15%",
data: data2,
yAxisIndex: 0
},
{
type: "bar",
name: "第三季度",
barWidth: "15%",
data: data3,
yAxisIndex: 0
},
{
type: "bar",
name: "第四季度",
barWidth: "15%",
data: data4,
yAxisIndex: 0
},
{
type: "bar",
name: "总值",
data: sumData,
barWidth: "70%",
xAxisIndex: 1,
yAxisIndex: 0,
itemStyle: {
color: "rgba(0,0,0,0.2)"
},
label: {
show: true,
position: "top"
}
}
];
},
@@ -442,7 +519,8 @@ const _sfc_main = {
sumData.push(sum);
}
this.option1.legend.data = ["货币基金", "同比(右)"];
this.option1.xAxis.data = category;
this.option1.xAxis[0].data = category;
this.option1.xAxis[1].data = category;
let ratioList = [];
for (let item of showDataList) {
let index = showDataList.indexOf(item);
@@ -570,32 +648,63 @@ const _sfc_main = {
}
}
}
let sumData = [];
for (var i = 0; i < data1.length; i++) {
let sum = data1[i];
sum = utils_util.accAdd(sum, data2[i] ? data2[i] : 0);
sum = utils_util.accAdd(sum, data3[i] ? data3[i] : 0);
sum = utils_util.accAdd(sum, data4[i] ? data4[i] : 0).toFixed(2);
if (sum > 1e4) {
sumData.push((sum / 1e4).toFixed(2) + "万");
} else
sumData.push(sum);
}
this.option1.legend.data = ["第一季度", "第二季度", "第三季度", "第四季度"];
this.option1.xAxis.data = category;
this.option1.xAxis[0].data = category;
this.option1.xAxis[1].data = category;
this.option1.series = [
{
type: "bar",
name: "第一季度",
barWidth: "15%",
data: data1,
yAxisIndex: 0
},
{
type: "bar",
name: "第二季度",
barWidth: "15%",
data: data2,
yAxisIndex: 0
},
{
type: "bar",
name: "第三季度",
barWidth: "15%",
data: data3,
yAxisIndex: 0
},
{
type: "bar",
name: "第四季度",
barWidth: "15%",
data: data4,
yAxisIndex: 0
},
{
type: "bar",
name: "总值",
data: sumData,
barWidth: "70%",
xAxisIndex: 1,
yAxisIndex: 0,
itemStyle: {
color: "rgba(0,0,0,0.2)"
},
label: {
show: true,
position: "top"
}
}
];
},
@@ -684,7 +793,8 @@ const _sfc_main = {
sumData.push(sum);
}
this.option1.legend.data = ["所有者权益", "同比(右)"];
this.option1.xAxis.data = category;
this.option1.xAxis[0].data = category;
this.option1.xAxis[1].data = category;
let ratioList = [];
for (let item of showDataList) {
let index = showDataList.indexOf(item);
@@ -718,7 +828,7 @@ const _sfc_main = {
this.option1.series = [
{
type: "bar",
name: "Q1",
name: "第一季度",
data: data1,
stack: "quarter",
yAxisIndex: 0,
@@ -762,7 +872,7 @@ const _sfc_main = {
/**
* 计算经营性现金流增长率
*/
caculateOperatingFlowGrowthRate() {
caculateOperatingCashFlowGrowthRate() {
let flow1 = this.cashFlowList[0].operating_activities.net_flow;
let flow2 = this.cashFlowList[4].operating_activities.net_flow;
return utils_util.accMul(utils_util.accDiv(utils_util.accSub(flow1, flow2), flow2), 100).toFixed(2);
@@ -770,7 +880,7 @@ const _sfc_main = {
/**
* 计算合计现金流增长率
*/
caculateNetIncreaseRatio() {
caculateTotalCashFlowGrowthRate() {
let flow1 = this.cashFlowList[0].cash_changes.net_increase;
let flow2 = this.cashFlowList[4].cash_changes.net_increase;
return utils_util.accMul(utils_util.accDiv(utils_util.accSub(flow1, flow2), flow2), 100).toFixed(2);
@@ -880,32 +990,63 @@ const _sfc_main = {
}
}
}
let sumData = [];
for (var i = 0; i < data1.length; i++) {
let sum = data1[i];
sum = utils_util.accAdd(sum, data2[i] ? data2[i] : 0);
sum = utils_util.accAdd(sum, data3[i] ? data3[i] : 0);
sum = utils_util.accAdd(sum, data4[i] ? data4[i] : 0).toFixed(2);
if (sum > 1e4) {
sumData.push((sum / 1e4).toFixed(2) + "万");
} else
sumData.push(sum);
}
this.option2.legend.data = ["第一季度", "第二季度", "第三季度", "第四季度"];
this.option2.xAxis.data = category;
this.option2.xAxis[0].data = category;
this.option2.xAxis[1].data = category;
this.option2.series = [
{
type: "bar",
name: "第一季度",
barWidth: "15%",
data: data1,
yAxisIndex: 0
},
{
type: "bar",
name: "第二季度",
barWidth: "15%",
data: data2,
yAxisIndex: 0
},
{
type: "bar",
name: "第三季度",
barWidth: "15%",
data: data3,
yAxisIndex: 0
},
{
type: "bar",
name: "第四季度",
barWidth: "15%",
data: data4,
yAxisIndex: 0
},
{
type: "bar",
name: "总值",
data: sumData,
barWidth: "70%",
xAxisIndex: 1,
yAxisIndex: 0,
itemStyle: {
color: "rgba(0,0,0,0.2)"
},
label: {
show: true,
position: "top"
}
}
];
},
@@ -994,7 +1135,7 @@ const _sfc_main = {
sumData.push(sum);
}
this.option2.legend.data = ["经营现金流", "同比(右)"];
this.option2.xAxis.data = category;
this.option2.xAxis[0].data = category;
let ratioList = [];
for (let item of showDataList) {
let index = showDataList.indexOf(item);
@@ -1122,32 +1263,63 @@ const _sfc_main = {
}
}
}
let sumData = [];
for (var i = 0; i < data1.length; i++) {
let sum = data1[i];
sum = utils_util.accAdd(sum, data2[i] ? data2[i] : 0);
sum = utils_util.accAdd(sum, data3[i] ? data3[i] : 0);
sum = utils_util.accAdd(sum, data4[i] ? data4[i] : 0).toFixed(2);
if (sum > 1e4) {
sumData.push((sum / 1e4).toFixed(2) + "万");
} else
sumData.push(sum);
}
this.option2.legend.data = ["第一季度", "第二季度", "第三季度", "第四季度"];
this.option2.xAxis.data = category;
this.option2.xAxis[0].data = category;
this.option2.xAxis[1].data = category;
this.option2.series = [
{
type: "bar",
name: "第一季度",
barWidth: "15%",
data: data1,
yAxisIndex: 0
},
{
type: "bar",
name: "第二季度",
barWidth: "15%",
data: data2,
yAxisIndex: 0
},
{
type: "bar",
name: "第三季度",
barWidth: "15%",
data: data3,
yAxisIndex: 0
},
{
type: "bar",
name: "第四季度",
barWidth: "15%",
data: data4,
yAxisIndex: 0
},
{
type: "bar",
name: "总值",
data: sumData,
barWidth: "70%",
xAxisIndex: 1,
yAxisIndex: 0,
itemStyle: {
color: "rgba(0,0,0,0.2)"
},
label: {
show: true,
position: "top"
}
}
];
},
@@ -1235,7 +1407,7 @@ const _sfc_main = {
} else
sumData.push(sum);
}
this.option2.xAxis.data = category;
this.option2.xAxis[0].data = category;
let ratioList = [];
for (let item of showDataList) {
let index = showDataList.indexOf(item);
@@ -1363,31 +1535,63 @@ const _sfc_main = {
}
}
}
this.option2.xAxis.data = category;
let sumData = [];
for (var i = 0; i < data1.length; i++) {
let sum = data1[i];
sum = utils_util.accAdd(sum, data2[i] ? data2[i] : 0);
sum = utils_util.accAdd(sum, data3[i] ? data3[i] : 0);
sum = utils_util.accAdd(sum, data4[i] ? data4[i] : 0).toFixed(2);
if (sum > 1e4) {
sumData.push((sum / 1e4).toFixed(2) + "万");
} else
sumData.push(sum);
}
this.option2.legend.data = ["第一季度", "第二季度", "第三季度", "第四季度"];
this.option2.xAxis[0].data = category;
this.option2.xAxis[1].data = category;
this.option2.series = [
{
type: "bar",
name: "第一季度",
barWidth: "15%",
data: data1,
yAxisIndex: 0
},
{
type: "bar",
name: "第二季度",
barWidth: "15%",
data: data2,
yAxisIndex: 0
},
{
type: "bar",
name: "第三季度",
barWidth: "15%",
data: data3,
yAxisIndex: 0
},
{
type: "bar",
name: "第四季度",
barWidth: "15%",
data: data4,
yAxisIndex: 0
},
{
type: "bar",
name: "总值",
data: sumData,
barWidth: "70%",
xAxisIndex: 1,
yAxisIndex: 0,
itemStyle: {
color: "rgba(0,0,0,0.2)"
},
label: {
show: true,
position: "top"
}
}
];
},
@@ -1475,7 +1679,7 @@ const _sfc_main = {
} else
sumData.push(sum);
}
this.option2.xAxis.data = category;
this.option2.xAxis[0].data = category;
let ratioList = [];
for (let item of showDataList) {
let index = showDataList.indexOf(item);
@@ -1509,7 +1713,7 @@ const _sfc_main = {
this.option2.series = [
{
type: "bar",
name: "Q1",
name: "第一季度",
data: data1,
stack: "quarter",
yAxisIndex: 0,
@@ -1653,7 +1857,20 @@ const _sfc_main = {
}
}
}
this.option3.xAxis.data = category;
let sumData = [];
for (var i = 0; i < data1.length; i++) {
let sum = data1[i];
sum = utils_util.accAdd(sum, data2[i] ? data2[i] : 0);
sum = utils_util.accAdd(sum, data3[i] ? data3[i] : 0);
sum = utils_util.accAdd(sum, data4[i] ? data4[i] : 0).toFixed(2);
if (sum > 1e4) {
sumData.push((sum / 1e4).toFixed(2) + "万");
} else
sumData.push(sum);
}
this.option2.legend.data = ["第一季度", "第二季度", "第三季度", "第四季度"];
this.option3.xAxis[0].data = category;
this.option3.xAxis[1].data = category;
this.option3.series = [
{
type: "bar",
@@ -1678,6 +1895,21 @@ const _sfc_main = {
name: "第四季度",
data: data4,
yAxisIndex: 0
},
{
type: "bar",
name: "总值",
data: sumData,
barWidth: "70%",
xAxisIndex: 1,
yAxisIndex: 0,
itemStyle: {
color: "rgba(0,0,0,0.2)"
},
label: {
show: true,
position: "top"
}
}
];
},
@@ -1765,7 +1997,7 @@ const _sfc_main = {
} else
sumData.push(sum);
}
this.option3.xAxis.data = category;
this.option3.xAxis[0].data = category;
let ratioList = [];
for (let item of showDataList) {
let index = showDataList.indexOf(item);
@@ -1893,31 +2125,63 @@ const _sfc_main = {
}
}
}
this.option3.xAxis.data = category;
let sumData = [];
for (var i = 0; i < data1.length; i++) {
let sum = data1[i];
sum = utils_util.accAdd(sum, data2[i] ? data2[i] : 0);
sum = utils_util.accAdd(sum, data3[i] ? data3[i] : 0);
sum = utils_util.accAdd(sum, data4[i] ? data4[i] : 0).toFixed(2);
if (sum > 1e4) {
sumData.push((sum / 1e4).toFixed(2) + "万");
} else
sumData.push(sum);
}
this.option2.legend.data = ["第一季度", "第二季度", "第三季度", "第四季度"];
this.option3.xAxis[0].data = category;
this.option3.xAxis[1].data = category;
this.option3.series = [
{
type: "bar",
name: "第一季度",
barWidth: "15%",
data: data1,
yAxisIndex: 0
},
{
type: "bar",
name: "第二季度",
barWidth: "15%",
data: data2,
yAxisIndex: 0
},
{
type: "bar",
name: "第三季度",
barWidth: "15%",
data: data3,
yAxisIndex: 0
},
{
type: "bar",
name: "第四季度",
barWidth: "15%",
data: data4,
yAxisIndex: 0
},
{
type: "bar",
name: "总值",
data: sumData,
barWidth: "70%",
xAxisIndex: 1,
yAxisIndex: 0,
itemStyle: {
color: "rgba(0,0,0,0.2)"
},
label: {
show: true,
position: "top"
}
}
];
},
@@ -2005,7 +2269,7 @@ const _sfc_main = {
} else
sumData.push(sum);
}
this.option3.xAxis.data = category;
this.option3.xAxis[0].data = category;
let ratioList = [];
for (let item of showDataList) {
let index = showDataList.indexOf(item);
@@ -2039,7 +2303,7 @@ const _sfc_main = {
this.option3.series = [
{
type: "bar",
name: "Q1",
name: "第一季度",
data: data1,
stack: "quarter",
yAxisIndex: 0,
@@ -2138,31 +2402,63 @@ const _sfc_main = {
}
}
}
this.option3.xAxis.data = category;
let sumData = [];
for (var i = 0; i < data1.length; i++) {
let sum = data1[i];
sum = utils_util.accAdd(sum, data2[i] ? data2[i] : 0);
sum = utils_util.accAdd(sum, data3[i] ? data3[i] : 0);
sum = utils_util.accAdd(sum, data4[i] ? data4[i] : 0).toFixed(2);
if (sum > 1e4) {
sumData.push((sum / 1e4).toFixed(2) + "万");
} else
sumData.push(sum);
}
this.option2.legend.data = ["第一季度", "第二季度", "第三季度", "第四季度"];
this.option3.xAxis[0].data = category;
this.option3.xAxis[1].data = category;
this.option3.series = [
{
type: "bar",
name: "第一季度",
barWidth: "15%",
data: data1,
yAxisIndex: 0
},
{
type: "bar",
name: "第二季度",
barWidth: "15%",
data: data2,
yAxisIndex: 0
},
{
type: "bar",
name: "第三季度",
barWidth: "15%",
data: data3,
yAxisIndex: 0
},
{
type: "bar",
name: "第四季度",
barWidth: "15%",
data: data4,
yAxisIndex: 0
},
{
type: "bar",
name: "总值",
data: sumData,
barWidth: "70%",
xAxisIndex: 1,
yAxisIndex: 0,
itemStyle: {
color: "rgba(0,0,0,0.2)"
},
label: {
show: true,
position: "top"
}
}
];
},
@@ -2254,7 +2550,7 @@ const _sfc_main = {
} else
sumData.push(sum);
}
this.option3.xAxis.data = category;
this.option3.xAxis[0].data = category;
let ratioList = [];
for (let item of showDataList) {
let index = showDataList.indexOf(item);
@@ -2290,7 +2586,7 @@ const _sfc_main = {
this.option3.series = [
{
type: "bar",
name: "Q1",
name: "第一季度",
data: data1,
stack: "quarter",
yAxisIndex: 0,
@@ -2335,17 +2631,25 @@ const _sfc_main = {
* 计算净利润增长率
*/
caculateNetProfitGrowthRate() {
let flow1 = this.incomeStatementList[0].operating_activities.net_flow;
let flow2 = this.incomeStatementList[4].operating_activities.net_flow;
return utils_util.accMul(utils_util.accDiv(utils_util.accSub(flow1, flow2), flow2), 100).toFixed(2);
let flow1 = this.incomeStatementList[0].profit.net_profit;
let flow2 = this.incomeStatementList[4].profit.net_profit;
return utils_util.accMul(utils_util.accDiv(utils_util.accSub(flow1, flow2), Math.abs(flow2)), 100).toFixed(2);
},
/**
* 计算营业总收入增长率
*/
caculateRevenueGrowthRate() {
let flow1 = this.incomeStatementList[0].cash_changes.net_increase;
let flow2 = this.incomeStatementList[4].cash_changes.net_increase;
return utils_util.accMul(utils_util.accDiv(utils_util.accSub(flow1, flow2), flow2), 100).toFixed(2);
let flow1 = this.incomeStatementList[0].revenue.total_operating_revenue;
let flow2 = this.incomeStatementList[4].revenue.total_operating_revenue;
return utils_util.accMul(utils_util.accDiv(utils_util.accSub(flow1, flow2), Math.abs(flow2)), 100).toFixed(2);
},
/**
* 计算营业利润增长率
*/
caculateRevenueProfitGrowthRate() {
let flow1 = this.incomeStatementList[0].profit.operating_profit;
let flow2 = this.incomeStatementList[4].profit.operating_profit;
return utils_util.accMul(utils_util.accDiv(utils_util.accSub(flow1, flow2), Math.abs(flow2)), 100).toFixed(2);
}
}
};
@@ -2426,11 +2730,11 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
L: $props.cashFlowList.length > 0
}, $props.cashFlowList.length > 0 ? {
M: common_vendor.t($data.getNumStr($props.cashFlowList[0].operating_activities.net_flow)),
N: common_vendor.t(_ctx.caculateOperatingFlowRatio()),
N: common_vendor.t($options.caculateOperatingCashFlowGrowthRate()),
O: common_vendor.t($data.getNumStr($props.cashFlowList[0].investment_activities.net_flow)),
P: common_vendor.t($data.getNumStr($props.cashFlowList[0].financing_activities.net_flow)),
Q: common_vendor.t($data.getNumStr($props.cashFlowList[0].cash_changes.net_increase)),
R: common_vendor.t($options.caculateNetIncreaseRatio())
R: common_vendor.t($options.caculateTotalCashFlowGrowthRate())
} : {}, {
S: common_assets._imports_0$3,
T: common_assets._imports_2$3,
@@ -2461,9 +2765,12 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
af: common_vendor.sr("chartRef3", "619fafcd-2"),
ag: $props.incomeStatementList.length > 0
}, $props.incomeStatementList.length > 0 ? {
ah: common_vendor.t($data.getNumStr($props.incomeStatementList[0].comprehensive_income.total_comprehensive_income)),
ai: common_vendor.t($data.getNumStr($props.incomeStatementList[0].revenue.total_operating_revenue)),
aj: common_vendor.t($data.getNumStr($props.incomeStatementList[0].profit.operating_profit))
ah: common_vendor.t($data.getNumStr($props.incomeStatementList[0].profit.net_profit)),
ai: common_vendor.t($options.caculateNetProfitGrowthRate()),
aj: common_vendor.t($data.getNumStr($props.incomeStatementList[0].revenue.total_operating_revenue)),
ak: common_vendor.t($options.caculateRevenueGrowthRate()),
al: common_vendor.t($data.getNumStr($props.incomeStatementList[0].profit.operating_profit)),
am: common_vendor.t($options.caculateRevenueProfitGrowthRate())
} : {});
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
<view class="cyl_view"><view class="top flex"><view class="child_1">产业链分析</view><view class="child_2">目标公司供应链图谱</view><view class="child_3">节点 {{a}}</view></view><view class="center"><view class="{{['child', b && 'action']}}" bindtap="{{c}}"> 层级视图 </view><view class="{{['child', d && 'action']}}" bindtap="{{e}}"> 流向关系 </view></view><view wx:if="{{f}}" class="bottom"><view class="type flex"><view wx:for="{{g}}" wx:for-item="item" wx:key="i" class="item flex flex1"><view class="{{item.e}}" bindtap="{{item.f}}"><view class="titleNumC">{{item.a}} <text class="{{item.c}}">{{item.b}}</text></view><view class="des">{{item.d}}</view></view><image wx:if="{{item.g}}" class="arrow" src="{{item.h}}" mode="widthFix"></image></view></view><view class="list"><block wx:if="{{h}}"><view wx:for="{{i}}" wx:for-item="item" wx:key="g" class="item" bindtap="{{item.h}}"><view class="title">{{item.a}}</view><view class="des">{{item.b}}</view><view class="labelC flex"><view class="label upstream type">{{item.c}}</view><view class="label upstream market">份额:{{item.d}}%</view></view><view class="importanceC flex"><view class="title">影响度</view><view class="progressBgC flex1"><view class="progress upstream" style="{{'width:' + item.e}}"></view></view><view class="value">{{item.f}}</view></view></view></block><block wx:if="{{j}}"><view wx:for="{{k}}" wx:for-item="item" wx:key="g" class="item" bindtap="{{item.h}}"><view class="title">{{item.a}}</view><view class="des">{{item.b}}</view><view class="labelC flex"><view class="label core type">{{item.c}}</view><view class="label core market">份额:{{item.d}}%</view></view><view class="importanceC flex"><view class="title">影响度</view><view class="progressBgC flex1"><view class="progress core" style="{{'width:' + item.e}}"></view></view><view class="value">{{item.f}}</view></view></view></block><block wx:if="{{l}}"><view wx:for="{{m}}" wx:for-item="item" wx:key="g" class="item" bindtap="{{item.h}}"><view class="title">{{item.a}}</view><view class="des">{{item.b}}</view><view class="labelC flex"><view class="label downstream type">{{item.c}}</view><view class="label downstream market">份额:{{item.d}}%</view></view><view class="importanceC flex"><view class="title">影响度</view><view class="progressBgC flex1"><view class="progress downstream" style="{{'width:' + item.e}}"></view></view><view class="value">{{item.f}}</view></view></view></block></view></view><view wx:if="{{n}}" style="height:500rpx"><l-echart class="r" u-r="chartRef" u-i="4ade4b3d-0" bind:__l="__l"></l-echart></view></view>
<view class="cyl_view"><view class="top flex"><view class="child_1">产业链分析</view><view class="child_2">目标公司供应链图谱</view><view class="child_3">节点 {{a}}</view></view><view class="center"><view class="{{['child', b && 'action']}}" bindtap="{{c}}"> 层级视图 </view><view class="{{['child', d && 'action']}}" bindtap="{{e}}"> 流向关系 </view></view><view wx:if="{{f}}" class="bottom"><view class="type flex"><view wx:for="{{g}}" wx:for-item="item" wx:key="i" class="item flex flex1"><view class="{{item.e}}" bindtap="{{item.f}}"><view class="titleNumC">{{item.a}} <text class="{{item.c}}">{{item.b}}</text></view><view class="des">{{item.d}}</view></view><image wx:if="{{item.g}}" class="arrow" src="{{item.h}}" mode="widthFix"></image></view></view><view class="list"><block wx:if="{{h}}"><view wx:for="{{i}}" wx:for-item="item" wx:key="g" class="item" bindtap="{{item.h}}"><view class="title">{{item.a}}</view><view class="des">{{item.b}}</view><view class="labelC flex"><view class="label upstream type">{{item.c}}</view><view class="label upstream market">份额:{{item.d}}%</view></view><view class="importanceC flex"><view class="title">重要度</view><view class="progressBgC flex1"><view class="progress upstream" style="{{'width:' + item.e}}"></view></view><view class="value">{{item.f}}</view></view></view></block><block wx:if="{{j}}"><view wx:for="{{k}}" wx:for-item="item" wx:key="g" class="item" bindtap="{{item.h}}"><view class="title">{{item.a}}</view><view class="des">{{item.b}}</view><view class="labelC flex"><view class="label core type">{{item.c}}</view><view class="label core market">份额:{{item.d}}%</view></view><view class="importanceC flex"><view class="title">重要度</view><view class="progressBgC flex1"><view class="progress core" style="{{'width:' + item.e}}"></view></view><view class="value">{{item.f}}</view></view></view></block><block wx:if="{{l}}"><view wx:for="{{m}}" wx:for-item="item" wx:key="g" class="item" bindtap="{{item.h}}"><view class="title">{{item.a}}</view><view class="des">{{item.b}}</view><view class="labelC flex"><view class="label downstream type">{{item.c}}</view><view class="label downstream market">份额:{{item.d}}%</view></view><view class="importanceC flex"><view class="title">重要度</view><view class="progressBgC flex1"><view class="progress downstream" style="{{'width:' + item.e}}"></view></view><view class="value">{{item.f}}</view></view></view></block></view></view><view wx:if="{{n}}" style="height:500rpx"><l-echart class="r" u-r="chartRef" u-i="4ade4b3d-0" bind:__l="__l"></l-echart></view></view>

View File

@@ -37,7 +37,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
}, item.show ? {
d: common_assets._imports_0$6
} : {
e: common_assets._imports_1$13
e: common_assets._imports_1$12
}, {
f: item.show
}, item.show ? {
@@ -57,7 +57,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
}, $data.getRateUpOrDown(fitem.year_on_year) ? {
i: common_assets._imports_0$7
} : {
j: common_assets._imports_1$14
j: common_assets._imports_1$13
}, {
k: common_vendor.t(fitem.year_on_year ? fitem.year_on_year : 0),
l: common_vendor.n("chgC flex " + ($data.getRateUpOrDown(fitem.year_on_year) ? "down" : "up")),
@@ -80,7 +80,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return common_vendor.e({
a: item.impact_metrics.is_positive == 1
}, item.impact_metrics.is_positive == 1 ? {
b: common_assets._imports_4$13
b: common_assets._imports_4$14
} : {
c: common_assets._imports_5$8
}, {

View File

@@ -42,7 +42,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
}, pitem.gender == "女" ? {
c: common_assets._imports_0$8
} : {
d: common_assets._imports_1$15
d: common_assets._imports_1$14
}, {
e: common_vendor.n("sexC flexCenter absolute " + (pitem.gender == "女" ? "female" : "male")),
f: common_vendor.t(pitem.name),
@@ -61,7 +61,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
}, pitem.gender == "女" ? {
c: common_assets._imports_0$8
} : {
d: common_assets._imports_1$15
d: common_assets._imports_1$14
}, {
e: common_vendor.n("sexC flexCenter absolute " + (pitem.gender == "女" ? "female" : "male")),
f: common_vendor.t(pitem.name),

View File

@@ -51,7 +51,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
}, $data.getRateUpOrDown(item.ratio_change) ? {
e: common_assets._imports_0$7
} : {
f: common_assets._imports_1$14
f: common_assets._imports_1$13
}, {
g: common_vendor.t($data.getRateStr(item.ratio_change)),
h: common_vendor.n("shengjiang flex " + ($data.getRateUpOrDown(item.ratio_change) ? "down" : "up"))

View File

@@ -90,7 +90,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
r: common_vendor.o(($event) => $options.clickNewsItem(item), index)
});
}),
g: common_assets._imports_1$16,
g: common_assets._imports_1$15,
h: common_assets._imports_2$15,
i: common_assets._imports_3$13
} : {}, {

View File

@@ -15,7 +15,8 @@ const _sfc_main = {
},
tooltip: {
show: true,
triggerOn: "mousemove"
triggerOn: "mousemove",
confine: true
},
radar: {
indicator: [
@@ -95,7 +96,7 @@ const _sfc_main = {
methods: {
async init() {
const chart = await this.$refs.chartRef.init(echarts);
common_vendor.index.__f__("log", "at pagesStock/components/zlfx-view/zlfx-view.vue:183", chart);
common_vendor.index.__f__("log", "at pagesStock/components/zlfx-view/zlfx-view.vue:184", chart);
chart.setOption(this.option);
},
clickIndustryRank() {

View File

@@ -44,9 +44,9 @@ const _sfc_main = {
}
}
],
dataZoom: [{
type: "slider"
}],
// dataZoom:[{
// type:'slider'
// }],
series: [
{
type: "bar",
@@ -187,6 +187,22 @@ const _sfc_main = {
return { text: "一般", color: "orange" };
return { text: "较低", color: "red" };
},
/**
* 遍历数组找出对应的营收
* @param {Object} pitem
*/
getTableRevenue(item, pitem) {
let index = -1;
for (let item1 of pitem.products) {
if (item1.content == item.content) {
index = pitem.products.indexOf(item1);
}
}
if (index > -1) {
return utils_util.getNumStr(pitem.products[index].revenue);
} else
return "-";
},
itemClick(index) {
common_vendor.index.navigateTo({
url: `/pagesStock/stockCenterDetails/cwDetails?index=${index}`
@@ -225,30 +241,33 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
} : {}) : {}, {
q: common_vendor.sr("chartRef1", "d36e6b92-0"),
r: common_vendor.sr("chartRef2", "d36e6b92-1"),
s: common_vendor.f(["业务", "毛利率", "利润", "营收", "营收"], (item, index, i0) => {
return common_vendor.e({
a: common_vendor.t(item),
b: ["", "(2025年中报)", "(2025年中报)", "(2025年中报)", "(2024年年报)"][index].length > 0
}, ["", "(2025年中报)", "(2025年中报)", "(2025年中报)", "(2024年年报)"][index].length > 0 ? {
c: common_vendor.t(["", "(2025年中报)", "(2025年中报)", "(2025年中报)", "(2024年年报)"][index]),
d: index == 0 ? "left" : "center"
} : {}, {
e: index,
f: index == 0 ? "left" : "center",
g: index == 0 ? "flex-start" : "center"
});
}),
t: $props.productClassificationList.length > 0
s: $props.productClassificationList.length > 0
}, $props.productClassificationList.length > 0 ? {
v: common_vendor.f($props.productClassificationList[0].products, (item, index, i0) => {
t: common_vendor.f($props.productClassificationList[0].products, (item, index, i0) => {
return {
a: common_vendor.t(item.content),
b: common_vendor.t(item.profit_margin.toFixed(2)),
c: common_vendor.t($data.getNumStr(item.profit)),
d: common_vendor.t($data.getNumStr(item.revenue)),
e: common_vendor.t(item.content),
f: index,
g: index % 2 == 0 ? "#FFFFFF" : "#FAFAFC"
b: index
};
}),
v: common_vendor.t($props.productClassificationList[0].report_type),
w: common_vendor.t($props.productClassificationList[0].report_type),
x: common_vendor.f($props.productClassificationList, (item, index, i0) => {
return {
a: common_vendor.t(item.report_type),
b: index
};
}),
y: common_vendor.f($props.productClassificationList[0].products, (item, index, i0) => {
return {
a: common_vendor.t(item.profit_margin ? item.profit_margin.toFixed(2) + "%" : "-"),
b: common_vendor.t(item.profit ? $data.getNumStr(item.profit) : "-"),
c: common_vendor.f($props.productClassificationList, (pitem, pindex, i1) => {
return {
a: common_vendor.t($options.getTableRevenue(item, pitem)),
b: pindex
};
}),
d: index
};
})
} : {});

View File

@@ -1 +1 @@
<view><block wx:if="{{a}}"><view class="flex" style="font-size:22rpx;color:#999999;font-weight:500;margin:20rpx;padding:20rpx;box-sizing:border-box;border:1rpx solid #F5F5F5;border-radius:10rpx"><view style="width:195rpx"><view style="font-weight:bold;color:#1DB26F;font-size:30rpx">{{b}}</view><view style="margin-top:10rpx">利润增长</view></view><view><view class="flex"><text style="font-weight:bold;color:#070707;font-size:26rpx;margin-right:10rpx">成长能力</text><text style="color:#A97F53;font-size:20rpx;padding:2rpx 5rpx;background-color:#F8F4ED;border:1rpx solid #F1E7D8;border-radius:3rpx">增长动力</text></view><view style="margin-top:10rpx"><text>营收增长</text><text style="color:#1DB26F;margin:0 10rpx">{{c}}%</text><text style="{{e}}">({{d}})</text></view></view></view><view class="flex" style="font-size:22rpx;color:#999999;font-weight:500;margin:20rpx;padding:20rpx;border:1rpx solid #F5F5F5;border-radius:10rpx"><view style="width:195rpx"><view style="font-weight:bold;color:#F59B38;font-size:30rpx">{{f}}%</view><view style="margin-top:10rpx">ROE</view></view><view><view class="flex"><text style="font-weight:bold;color:#070707;font-size:26rpx;margin-right:10rpx">盈利与回报</text><text style="color:#A97F53;font-size:20rpx;padding:2rpx 5rpx;background-color:#F8F4ED;border:1rpx solid #F1E7D8;border-radius:3rpx">赚钱能力</text></view><view style="margin-top:10rpx"><text style="{{h}}">{{g}}</text><text style="margin-left:10rpx">净利率 {{i}}%|毛利率 {{j}}</text></view></view></view><view wx:if="{{k}}" class="flex" style="font-size:22rpx;color:#999999;font-weight:500;margin:20rpx;padding:20rpx;border:1rpx solid #F5F5F5;border-radius:10rpx"><view style="width:195rpx"><view style="font-weight:bold;color:#EC3440;font-size:30rpx">{{l}}%</view><view style="margin-top:10rpx">资产负债率</view></view><view><view class="flex"><text style="font-weight:bold;color:#070707;font-size:26rpx;margin-right:10rpx">风险与运营</text><text style="color:#A97F53;font-size:20rpx;padding:2rpx 5rpx;background-color:#F8F4ED;border:1rpx solid #F1E7D8;border-radius:3rpx">安全边际</text></view><view style="margin-top:10rpx"><text style="{{n}}">{{m}}</text><text style="margin-left:10rpx">流动比率 {{o}}|研发费用率 {{p}}%</text></view></view></view></block><view style="text-align:center;font-size:26rpx;color:#2B2B2B;font-weight:bold;margin:20rpx"> 营收与利润趋势</view><view style="height:400rpx"><l-echart class="r" u-r="chartRef1" u-i="d36e6b92-0" bind:__l="__l"></l-echart></view><view style="text-align:left;font-size:26rpx;color:#2B2B2B;font-weight:bold;margin:20rpx">主营业务 </view><view style="height:400rpx"><l-echart class="r" u-r="chartRef2" u-i="d36e6b92-1" bind:__l="__l"></l-echart></view><view style="text-align:left;font-size:26rpx;color:#2B2B2B;font-weight:bold;margin:20rpx"> 主营业务明细与历史对比</view><view style="display:grid;grid-template-columns:130rpx repeat(4, 1fr);color:#666666;font-size:20rpx;font-weight:500;background-color:#FAFAFC;margin:20rpx;margin-bottom:0;padding:10rpx;box-sizing:border-box"><view wx:for="{{s}}" wx:for-item="item" wx:key="e" class="flexColumnCenter" style="{{'justify-content:center' + ';' + ('text-align:' + item.f + ';' + ('align-items:' + item.g))}}"><view>{{item.a}}</view><view wx:if="{{item.b}}" style="{{'font-size:18rpx' + ';' + ('text-align:' + item.d)}}">{{item.c}}</view></view></view><block wx:if="{{t}}"><view wx:for="{{v}}" wx:for-item="item" wx:key="f" class="table" style="{{'display:grid;grid-template-columns:130rpx repeat(4, 1fr);margin:0 20rpx;padding:10rpx' + ';' + ('background-color:' + item.g)}}"><view class="item">{{item.a}}</view><view class="item flexCenter">{{item.b}}%</view><view class="item flexCenter">{{item.c}}</view><view class="item flexCenter">{{item.d}}</view><view class="item flexCenter">{{item.e}}</view></view></block><view style="height:80rpx"></view></view>
<view><block wx:if="{{a}}"><view class="flex" style="font-size:22rpx;color:#999999;font-weight:500;margin:20rpx;padding:20rpx;box-sizing:border-box;border:1rpx solid #F5F5F5;border-radius:10rpx"><view style="width:195rpx"><view style="font-weight:bold;color:#1DB26F;font-size:30rpx">{{b}}</view><view style="margin-top:10rpx">利润增长</view></view><view><view class="flex"><text style="font-weight:bold;color:#070707;font-size:26rpx;margin-right:10rpx">成长能力</text><text style="color:#A97F53;font-size:20rpx;padding:2rpx 5rpx;background-color:#F8F4ED;border:1rpx solid #F1E7D8;border-radius:3rpx">增长动力</text></view><view style="margin-top:10rpx"><text>营收增长</text><text style="color:#1DB26F;margin:0 10rpx">{{c}}%</text><text style="{{e}}">({{d}})</text></view></view></view><view class="flex" style="font-size:22rpx;color:#999999;font-weight:500;margin:20rpx;padding:20rpx;border:1rpx solid #F5F5F5;border-radius:10rpx"><view style="width:195rpx"><view style="font-weight:bold;color:#F59B38;font-size:30rpx">{{f}}%</view><view style="margin-top:10rpx">ROE</view></view><view><view class="flex"><text style="font-weight:bold;color:#070707;font-size:26rpx;margin-right:10rpx">盈利与回报</text><text style="color:#A97F53;font-size:20rpx;padding:2rpx 5rpx;background-color:#F8F4ED;border:1rpx solid #F1E7D8;border-radius:3rpx">赚钱能力</text></view><view style="margin-top:10rpx"><text style="{{h}}">{{g}}</text><text style="margin-left:10rpx">净利率 {{i}}%|毛利率 {{j}}</text></view></view></view><view wx:if="{{k}}" class="flex" style="font-size:22rpx;color:#999999;font-weight:500;margin:20rpx;padding:20rpx;border:1rpx solid #F5F5F5;border-radius:10rpx"><view style="width:195rpx"><view style="font-weight:bold;color:#EC3440;font-size:30rpx">{{l}}%</view><view style="margin-top:10rpx">资产负债率</view></view><view><view class="flex"><text style="font-weight:bold;color:#070707;font-size:26rpx;margin-right:10rpx">风险与运营</text><text style="color:#A97F53;font-size:20rpx;padding:2rpx 5rpx;background-color:#F8F4ED;border:1rpx solid #F1E7D8;border-radius:3rpx">安全边际</text></view><view style="margin-top:10rpx"><text style="{{n}}">{{m}}</text><text style="margin-left:10rpx">流动比率 {{o}}|研发费用率 {{p}}%</text></view></view></view></block><view style="text-align:center;font-size:26rpx;color:#2B2B2B;font-weight:bold;margin:20rpx"> 营收与利润趋势</view><view style="height:400rpx"><l-echart class="r" u-r="chartRef1" u-i="d36e6b92-0" bind:__l="__l"></l-echart></view><view style="text-align:left;font-size:26rpx;color:#2B2B2B;font-weight:bold;margin:20rpx">主营业务 </view><view style="height:400rpx"><l-echart class="r" u-r="chartRef2" u-i="d36e6b92-1" bind:__l="__l"></l-echart></view><view style="text-align:left;font-size:26rpx;color:#2B2B2B;font-weight:bold;margin:20rpx"> 主营业务明细与历史对比</view><block wx:if="{{s}}"><view class="mainBusinessC flex"><view class="businessList"><view class="heading">业务</view><view class="list"><view wx:for="{{t}}" wx:for-item="item" wx:key="b" class="item flex">{{item.a}}</view></view></view><scroll-view scroll-x class="dataC flex1"><view class="headingList"><view class="heading"><view class="flexColumnCenter"><view>毛利率</view><view>({{v}})</view></view></view><view class="heading"><view class="flexColumnCenter"><view>利润</view><view>({{w}})</view></view></view><block wx:for="{{x}}" wx:for-item="item" wx:key="b"><view class="heading"><view class="flexColumnCenter"><view>营收</view><view>({{item.a}})</view></view></view></block></view><view class="dataList"><view wx:for="{{y}}" wx:for-item="item" wx:key="d" class="dataItem"><view class="rowItem">{{item.a}}</view><view class="rowItem">{{item.b}}</view><view wx:for="{{item.c}}" wx:for-item="pitem" wx:key="b" class="rowItem">{{pitem.a}}</view></view></view></scroll-view></view></block><view style="height:80rpx"></view></view>

View File

@@ -6,3 +6,56 @@
.table .item.center {
text-align: center;
}
.mainBusinessC {
padding: 0 20rpx;
overflow: hidden;
}
.mainBusinessC .businessList .heading {
background-color: #FAFAFC;
padding: 0 20rpx;
width: 160rpx;
line-height: 80rpx;
font-size: 20rpx;
font-weight: bold;
color: #666;
}
.mainBusinessC .businessList .list .item {
padding: 0 10rpx;
height: 60rpx;
font-size: 18rpx;
font-weight: 500;
color: #666;
}
.mainBusinessC .businessList .list .item:nth-child(2n) {
background-color: #FAFAFC;
}
.mainBusinessC .dataC {
width: calc(100% - 160rpx);
}
.mainBusinessC .dataC .headingList {
white-space: nowrap;
}
.mainBusinessC .dataC .headingList .heading {
background-color: #FAFAFC;
display: inline-flex;
align-items: center;
justify-content: center;
width: 160rpx;
height: 80rpx;
font-size: 20rpx;
color: #666;
}
.mainBusinessC .dataC .dataList .dataItem {
white-space: nowrap;
font-size: 20rpx;
color: #666;
}
.mainBusinessC .dataC .dataList .dataItem .rowItem {
display: inline-flex;
align-items: center;
width: 160rpx;
height: 60rpx;
}
.mainBusinessC .dataC .dataList .dataItem:nth-child(2n) .rowItem {
background-color: #FAFAFC;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 698 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 717 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 701 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 B

View File

@@ -10,45 +10,260 @@ const _sfc_main = {
activeIndex: 0,
bkList: [],
bkFilters: [
"按涨幅",
"按连板数",
"只看龙头"
],
filterIndex: 0,
selectedFullDate: ""
selectedFullDate: "",
// 年-月-日
originData: null,
// 原始接口数据
allStocks: [],
// 所有股票数据(带角色标签)
// 角色配置
STOCK_ROLES: {
dragon: {
text: "龙头",
color: "#EC3440",
bgColor: "#FFE8E9",
icon: "/pagesStock/static/icon/first-icon1.png"
},
follow: {
text: "跟风",
color: "#F97316",
bgColor: "#FFF0E6",
icon: "/pagesStock/static/icon/first-icon2.png"
},
first: {
text: "首板",
color: "#01AB5D",
bgColor: "#E4F9EF",
icon: "/pagesStock/static/icon/first-icon.png"
},
normal: {
text: "",
color: "",
bgColor: "",
icon: ""
}
},
// 连板层级样式配置(新规则)
BOARD_LEVEL_STYLES: {
dragon: {
// 5板及以上 龙头
color: "#ef4444",
bgColor: "#FFE8E9",
borderColor: "#ef4444"
},
high: {
// 3-4板 高位
color: "#f97316",
bgColor: "#FFF0E6",
borderColor: "#f97316"
},
mid: {
// 2板 中位
color: "#eab308",
bgColor: "#FFF9E6",
borderColor: "#eab308"
},
first: {
// 1板 首板
color: "#22c55e",
bgColor: "#E4F9EF",
borderColor: "#22c55e"
}
},
// 板块文字颜色配置(新规则)
SECTOR_COLOR_RULES: [
{ keyword: "公告", color: "#D4AF37" },
// 金色
{ keyword: "其他", color: "#9CA3AF" },
// 灰色
{ keyword: ["AI", "人工智能", "芯片"], color: "#8B5CF6" },
// 紫色
{ keyword: ["锂电", "电池", "新能源"], color: "#10B981" },
// 翠绿
{ keyword: ["医药", "医疗"], color: "#EC4899" },
// 粉色
{ keyword: ["金融", "银行"], color: "#F59E0B" },
// 橙黄
{ keyword: ["军工", "航空"], color: "#EF4444" }
// 红色
],
DEFAULT_SECTOR_COLOR: "#06B6D4"
// 默认 青色
};
},
computed: {
// 筛选后的股票列表
filteredStocks() {
var _a;
if (!this.allStocks.length)
return [];
let stocks = [...this.allStocks];
if (this.activeIndex >= 0 && this.bkList.length) {
const currentSector = (_a = this.bkList[this.activeIndex]) == null ? void 0 : _a.title;
if (currentSector) {
stocks = stocks.filter((stock) => {
const sectorMatch = stock.core_sectors.some((s) => s.includes(currentSector)) || (Array.isArray(stock.sector_category) ? stock.sector_category.includes(currentSector) : stock.sector_category === currentSector);
return sectorMatch;
});
}
}
switch (this.filterIndex) {
case 0:
stocks.sort((a, b) => {
const aDays = this.parseContinuousDays(a.continuous_days);
const bDays = this.parseContinuousDays(b.continuous_days);
return bDays - aDays;
});
break;
case 1:
stocks = stocks.filter((stock) => this.parseContinuousDays(stock.continuous_days) >= 2);
stocks.sort((a, b) => {
const aDays = this.parseContinuousDays(a.continuous_days);
const bDays = this.parseContinuousDays(b.continuous_days);
return bDays - aDays;
});
break;
}
return stocks;
}
},
onLoad(e) {
this.activeIndex = e.index;
this.selectedFullDate = e.data;
common_vendor.index.__f__("log", "at pagesStock/stockCenterDetails/bkydmx.vue:237", "selectedFullDate", this.selectedFullDate);
this.contentTop = this.navH + 20 / 750 * common_vendor.inject("windowWidth");
this.fetchData();
},
methods: {
getPreviousDayDate(dateStr) {
if (!/^\d{4}-\d{2}-\d{2}$/.test(dateStr)) {
common_vendor.index.__f__("error", "at pagesStock/stockCenterDetails/bkydmx.vue:104", "日期格式错误,请传入 YYYY-MM-DD 格式的日期");
return "";
// 解析连板数
parseContinuousDays(continuousDaysStr) {
if (!continuousDaysStr)
return 0;
const match = continuousDaysStr.match(/(\d+)天/);
return match ? Number(match[1]) : 0;
},
// 格式化连板文本(适配新层级)
formatBoardText(continuousDaysStr) {
const boardDays = this.parseContinuousDays(continuousDaysStr);
if (boardDays === 1)
return "首板";
if (boardDays > 1)
return `${boardDays}连板`;
return "";
},
// 获取连板标签样式(按新层级规则)
getBoardTagStyleByLevel(continuousDaysStr) {
const boardDays = this.parseContinuousDays(continuousDaysStr);
let styleConfig = {};
if (boardDays >= 5) {
styleConfig = this.BOARD_LEVEL_STYLES.dragon;
} else if (boardDays >= 3 && boardDays <= 4) {
styleConfig = this.BOARD_LEVEL_STYLES.high;
} else if (boardDays === 2) {
styleConfig = this.BOARD_LEVEL_STYLES.mid;
} else if (boardDays === 1) {
styleConfig = this.BOARD_LEVEL_STYLES.first;
}
const [year, month, day] = dateStr.split("-").map(Number);
const date = new Date(year, month - 1, day);
date.setDate(date.getDate() - 2);
const prevYear = date.getFullYear();
const prevMonth = String(date.getMonth() + 1).padStart(2, "0");
const prevDay = String(date.getDate()).padStart(2, "0");
return `${prevYear}${prevMonth}${prevDay}`;
return {
"color": styleConfig.color || "#FFFFFF",
"background-color": styleConfig.bgColor || "#eab308",
"border": `1rpx solid ${styleConfig.borderColor || "#eab308"}`
};
},
// 获取板块文字颜色(按关键词匹配)
getSectorTextColor(sectorName) {
if (!sectorName)
return this.DEFAULT_SECTOR_COLOR;
for (const rule of this.SECTOR_COLOR_RULES) {
if (Array.isArray(rule.keyword)) {
const isMatch = rule.keyword.some((key) => sectorName.includes(key));
if (isMatch)
return rule.color;
} else {
if (sectorName === rule.keyword)
return rule.color;
}
}
return this.DEFAULT_SECTOR_COLOR;
},
// 获取股票角色
getStockRole(stock, sectorStocks, sectorIndex) {
var _a;
const boardDays = this.parseContinuousDays(stock.continuous_days);
if (boardDays >= 5) {
return this.STOCK_ROLES.dragon;
}
if (boardDays === 1) {
return this.STOCK_ROLES.first;
}
if (sectorIndex < 3 && boardDays >= 2 && boardDays < 5) {
const sortedByTime = [...sectorStocks].sort(
(a, b) => (a.zt_time || "").localeCompare(b.zt_time || "")
);
if (((_a = sortedByTime[0]) == null ? void 0 : _a.scode) === stock.scode && boardDays >= 3) {
return this.STOCK_ROLES.dragon;
}
return this.STOCK_ROLES.follow;
}
return this.STOCK_ROLES.normal;
},
// 获取角色标签样式
getRoleTagStyle(role) {
return {
"background-color": role.bgColor
};
},
// 处理板块切换
handleTabChange(index) {
this.activeIndex = index;
this.setStockRoles();
},
// 处理筛选切换
handleFilterChange(index) {
this.filterIndex = index;
},
// 为所有股票添加角色标签
setStockRoles() {
if (!this.originData || !this.originData.stocks || !this.bkList.length)
return;
common_vendor.index.__f__("log", "at pagesStock/stockCenterDetails/bkydmx.vue:357", "setStockRoles", JSON.stringify(this.originData.stocks));
this.allStocks = this.originData.stocks.map((stock) => {
let sectorIndex = -1;
const stockSectors = Array.isArray(stock.sector_category) ? stock.sector_category : [stock.sector_category];
this.bkList.some((bk, idx) => {
const match = stockSectors.some((s) => s.includes(bk.title));
if (match) {
sectorIndex = idx;
return true;
}
return false;
});
const sectorStocks = this.originData.stocks.filter((s) => {
const sSectors = Array.isArray(s.sector_category) ? s.sector_category : [s.sector_category];
return sSectors.some((ss) => stockSectors.includes(ss));
});
const stockRole = this.getStockRole(stock, sectorStocks, sectorIndex);
return {
...stock,
stockRole: stockRole.text ? stockRole : null
};
});
},
/**
* 请求接口数据(优化:动态日期+自动时间戳)
*/
// 请求接口数据
async fetchData() {
try {
const timestamp = (/* @__PURE__ */ new Date()).getTime();
const formattedDate = this.getPreviousDayDate(this.selectedFullDate);
const formattedDate = this.selectedFullDate;
const baseURL = request_http.getBaseURL1();
const requestUrl = `${baseURL}/data/zt/daily/${formattedDate}.json?t=${timestamp}`;
common_vendor.index.__f__("log", "at pagesStock/stockCenterDetails/bkydmx.vue:137", "请求URL", requestUrl);
common_vendor.index.__f__("log", "at pagesStock/stockCenterDetails/bkydmx.vue:401", "请求URL", requestUrl);
const res = await common_vendor.index.request({
url: requestUrl,
method: "GET"
@@ -59,19 +274,18 @@ const _sfc_main = {
const labels = chartData.labels || [];
const counts = chartData.counts || [];
const maxCount = counts.length > 0 ? Math.max(...counts) : 0;
let bkList = [];
const maxLen = Math.min(labels.length, counts.length);
let bkList = [];
for (let i = 0; i < maxLen; i++) {
const title = labels[i];
const count = counts[i] || 0;
bkList.push({
title,
// 板块名称
count
// 数量
});
}
this.bkList = bkList;
this.setStockRoles();
} else {
common_vendor.index.showToast({
title: "数据请求失败",
@@ -79,7 +293,7 @@ const _sfc_main = {
});
}
} catch (error) {
common_vendor.index.__f__("error", "at pagesStock/stockCenterDetails/bkydmx.vue:178", "请求异常:", error);
common_vendor.index.__f__("error", "at pagesStock/stockCenterDetails/bkydmx.vue:440", "请求异常:", error);
common_vendor.index.showToast({
title: "网络异常",
icon: "none"
@@ -118,7 +332,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
e: common_vendor.f($data.bkFilters, (item, index, i0) => {
return {
a: common_vendor.t(item),
b: common_vendor.o(($event) => $data.filterIndex = index, index),
b: common_vendor.o(($event) => $options.handleFilterChange(index), index),
c: $data.filterIndex == index ? "#070707" : "#939393",
d: $data.filterIndex == index ? "1rpx solid #F2C369" : "1rpx solid #E5E5E5",
e: $data.filterIndex == index ? "#F2C369" : "#fff",
@@ -132,13 +346,28 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
c: index == 0 ? "left" : "center"
};
}),
g: common_vendor.f(30, (item, index, i0) => {
return {
a: index % 2 == 0 ? "#fff" : "#FAFAFC"
};
g: common_vendor.f($options.filteredStocks, (item, index, i0) => {
return common_vendor.e({
a: item.stockRole
}, item.stockRole ? common_vendor.e({
b: item.stockRole.icon
}, item.stockRole.icon ? {
c: item.stockRole.icon
} : {}, {
d: common_vendor.t(item.stockRole.text),
e: item.stockRole.color,
f: common_vendor.s($options.getRoleTagStyle(item.stockRole))
}) : {}, {
g: common_vendor.t(item.sname),
h: common_vendor.t($options.formatBoardText(item.continuous_days)),
i: common_vendor.s($options.getBoardTagStyleByLevel(item.continuous_days)),
j: common_vendor.t(item.core_sectors[0] || "未知板块"),
k: $options.getSectorTextColor(item.core_sectors[0] || "未知板块"),
l: item.scode,
m: index % 2 == 0 ? "#fff" : "#FAFAFC"
});
}),
h: common_assets._imports_1$12,
i: common_vendor.s("top:" + $data.contentTop + "px;")
h: common_vendor.s("top:" + $data.contentTop + "px;")
};
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);

View File

@@ -1 +1 @@
<view><nav-bar wx:if="{{a}}" u-i="573301e0-0" bind:__l="__l" u-p="{{a}}"></nav-bar><image class="topBg absolute" src="{{b}}" mode="widthFix"></image><view class="stockDetailsC fixed" style="{{'background-color:white;border-radius:10rpx;overflow:hidden' + ';' + i}}"><view style="height:86rpx"><scroll-view scroll-x style="white-space:nowrap;height:100%;padding:0 20rpx;box-sizing:border-box" scroll-with-animation scroll-into-view="{{d}}"><view style="display:flex;align-items:center;height:100%;font-weight:500"><view wx:for="{{c}}" wx:for-item="item" wx:key="d" id="{{item.b}}" bindtap="{{item.c}}" style="{{'display:flex;align-items:center;justify-content:center;line-height:85rpx;margin:0 20rpx' + ';' + ('color:' + item.e + ';' + ('border-bottom:' + item.f) + ';' + ('font-size:' + item.g))}}">{{item.a}}</view></view></scroll-view></view><view style="height:1rpx;background-color:#E7E7E7;margin:0 20rpx"></view><view style="height:48rpx;display:grid;grid-template-columns:repeat(3, 1fr);gap:10rpx;margin:23rpx 40rpx"><view wx:for="{{e}}" wx:for-item="item" wx:key="f" bindtap="{{item.b}}" style="{{'height:45rpx;display:flex;align-items:center;justify-content:center;color:#939393;font-size:24rpx;font-weight:500;border-radius:5rpx' + ';' + ('color:' + item.c + ';' + ('border:' + item.d) + ';' + ('background-color:' + item.e))}}">{{item.a}}</view></view><view style="margin:0 20rpx;background-color:#FAFAFC;display:grid;grid-template-columns:35% 20% 20% 25%"><view wx:for="{{f}}" wx:for-item="item" wx:key="b" style="{{'font-size:22rpx;color:#666666;padding:0 15rpx;box-sizing:border-box;font-weight:500;line-height:60rpx' + ';' + ('text-align:' + item.c)}}">{{item.a}}</view></view><scroll-view scroll-y style="position:absolute;top:241rpx;left:0;right:0;bottom:0;font-size:20rpx;font-weight:500"><view wx:for="{{g}}" wx:for-item="item" style="{{'margin:0 20rpx;display:grid;grid-template-columns:35% 20% 20% 25%' + ';' + ('background-color:' + item.a)}}"><view style="display:flex;align-items:center;color:#666666;height:60rpx"><view style="display:flex;align-items:center;background-color:#FFF0E6;border-radius:5rpx;padding:0 10rpx;margin-left:14rpx"><image style="width:15rpx;height:17rpx" src="{{h}}" mode="widthFix"></image><view style="color:#F97316;margin-left:5rpx">跟风</view></view><view style="margin-left:10rpx">康强电子</view></view><view style="display:flex;align-items:center;justify-content:center"><view style="font-size:24rpx;color:#EC3440;font-weight:bold">+10.00%</view></view><view style="display:flex;align-items:center;justify-content:center"><view style="color:#F3B800;padding:0 10rpx;border-radius:5rpx;background-color:#FFF9E6;border:1rpx solid #F3B800;display:flex;align-items:center;justify-content:center">2连板</view></view><view style="display:flex;align-items:center;justify-content:center"><view style="background-color:#F4EFFF;border-radius:5rpx;padding:0 10rpx;color:#8B5CF6">芯片(封装材料)</view></view></view></scroll-view></view></view>
<view><nav-bar wx:if="{{a}}" u-i="573301e0-0" bind:__l="__l" u-p="{{a}}"></nav-bar><image class="topBg absolute" src="{{b}}" mode="widthFix"></image><view class="stockDetailsC fixed" style="{{'background-color:white;border-radius:10rpx;overflow:hidden' + ';' + h}}"><view style="height:86rpx"><scroll-view scroll-x style="white-space:nowrap;height:100%;padding:0 20rpx;box-sizing:border-box" scroll-with-animation scroll-into-view="{{d}}"><view style="display:flex;align-items:center;height:100%;font-weight:500"><view wx:for="{{c}}" wx:for-item="item" wx:key="d" id="{{item.b}}" bindtap="{{item.c}}" style="{{'display:flex;align-items:center;justify-content:center;line-height:85rpx;margin:0 20rpx' + ';' + ('color:' + item.e + ';' + ('border-bottom:' + item.f) + ';' + ('font-size:' + item.g))}}">{{item.a}}</view></view></scroll-view></view><view style="height:1rpx;background-color:#E7E7E7;margin:0 20rpx"></view><view style="height:48rpx;display:grid;grid-template-columns:repeat(3, 1fr);gap:10rpx;margin:23rpx 40rpx"><view wx:for="{{e}}" wx:for-item="item" wx:key="f" bindtap="{{item.b}}" style="{{'height:45rpx;display:flex;align-items:center;justify-content:center;color:#939393;font-size:24rpx;font-weight:500;border-radius:5rpx' + ';' + ('color:' + item.c + ';' + ('border:' + item.d) + ';' + ('background-color:' + item.e))}}">{{item.a}}</view></view><view style="margin:0 20rpx;background-color:#FAFAFC;display:grid;grid-template-columns:35% 20% 20% 25%"><view wx:for="{{f}}" wx:for-item="item" wx:key="b" style="{{'font-size:22rpx;color:#666666;padding:0 15rpx;box-sizing:border-box;font-weight:500;line-height:60rpx' + ';' + ('text-align:' + item.c)}}">{{item.a}}</view></view><scroll-view scroll-y style="position:absolute;top:241rpx;left:0;right:0;bottom:0;font-size:20rpx;font-weight:500"><view wx:for="{{g}}" wx:for-item="item" wx:key="l" style="{{'margin:0 20rpx;display:grid;grid-template-columns:35% 20% 20% 25%' + ';' + ('background-color:' + item.m)}}"><view style="display:flex;align-items:center;color:#666666;height:60rpx"><view wx:if="{{item.a}}" style="{{'display:flex;align-items:center;border-radius:5rpx;padding:0 10rpx;margin-left:14rpx' + ';' + item.f}}"><image wx:if="{{item.b}}" style="width:15rpx;height:17rpx;margin-right:5rpx" src="{{item.c}}" mode="widthFix"></image><view style="{{'color:' + item.e}}">{{item.d}}</view></view><view style="margin-left:10rpx">{{item.g}}</view></view><view style="display:flex;align-items:center;justify-content:center"><view style="font-size:24rpx;color:#EC3440;font-weight:bold">+10.00%</view></view><view style="display:flex;align-items:center;justify-content:center"><view style="{{'padding:0 10rpx;border-radius:5rpx;display:flex;align-items:center;justify-content:center' + ';' + item.i}}">{{item.h}}</view></view><view style="display:flex;align-items:center;justify-content:center"><view style="{{'background-color:#F4EFFF;border-radius:5rpx;padding:0 10rpx;white-space:nowrap;max-width:120rpx;overflow:hidden;text-overflow:ellipsis' + ';' + ('color:' + item.k)}}">{{item.j}}</view></view></view></scroll-view></view></view>

View File

@@ -381,7 +381,10 @@ const _sfc_main = {
clickInDepthAnalysisItem(index) {
if (this.selectInDepthAnalysis != index) {
this.selectInDepthAnalysis = index;
if (index == 2) {
if (index == 0) {
this.getComprehensiveAnalysisData();
this.getIndustryRankListData();
} else if (index == 2) {
this.getValueChainAnalysisData();
} else if (index == 3) {
this.getKeyFactorsTimelineData();
@@ -604,7 +607,7 @@ const _sfc_main = {
}
request_api.managementTeam(code, { active_only: true }).then((res) => {
let data = res.data;
let arr = ["高管", "董事", "监事", "其他"];
let arr = ["高管", "董事", "监事"];
let list = [];
for (let item of arr) {
list.push({ key: item, list: [] });
@@ -1029,7 +1032,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
}),
aj: $data.isData && $data.isManagementEmpty
}, $data.isData && $data.isManagementEmpty ? {
ak: common_assets._imports_5$5
ak: common_assets._imports_5$6
} : {}) : {}, {
al: $data.selectCompanyFiles == 2
}, $data.selectCompanyFiles == 2 ? common_vendor.e({
@@ -1038,7 +1041,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
}),
an: $data.isData && $data.branchList.length == 0
}, $data.isData && $data.branchList.length == 0 ? {
ao: common_assets._imports_5$5
ao: common_assets._imports_5$6
} : {}) : {}, {
ap: $data.selectCompanyFiles == 3
}, $data.selectCompanyFiles == 3 ? common_vendor.e({
@@ -1050,7 +1053,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
} : {}, {
as: $data.isData && !$data.stockBasicInfo
}, $data.isData && !$data.stockBasicInfo ? {
at: common_assets._imports_5$5
at: common_assets._imports_5$6
} : {}) : {}) : {}, {
av: $data.selectTab == 1
}, $data.selectTab == 1 ? common_vendor.e({

View File

@@ -161,9 +161,9 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
a: index
};
}),
k: common_assets._imports_1$12,
l: common_assets._imports_5$6,
m: common_assets._imports_5$6,
k: common_assets._imports_4$12,
l: common_assets._imports_5$4,
m: common_assets._imports_5$4,
n: common_vendor.s("top:" + $data.contentTop + "px;")
};
}