新增二板日历详情数据按涨停时间升序排序
This commit is contained in:
@@ -140,11 +140,18 @@
|
|||||||
|
|
||||||
<el-tabs v-model="activeDetailTab" class="detail-tabs">
|
<el-tabs v-model="activeDetailTab" class="detail-tabs">
|
||||||
<el-tab-pane :label="`涨停板(${limitStocks.length})`" name="limit">
|
<el-tab-pane :label="`涨停板(${limitStocks.length})`" name="limit">
|
||||||
<el-table :data="limitStocks" border stripe max-height="520">
|
<el-table :data="limitStocks" border stripe max-height="520" :default-sort="defaultDetailSort">
|
||||||
<el-table-column prop="name" label="股票简称" min-width="120" sortable />
|
<el-table-column prop="name" label="股票简称" min-width="120" sortable />
|
||||||
<el-table-column prop="ts_code" label="股票代码" min-width="120" sortable />
|
<el-table-column prop="ts_code" label="股票代码" min-width="120" sortable />
|
||||||
<el-table-column prop="industry" label="行业" min-width="120" sortable show-overflow-tooltip />
|
<el-table-column prop="industry" label="行业" min-width="120" sortable show-overflow-tooltip />
|
||||||
<el-table-column prop="first_limit_time" label="首次涨停时间" width="130" align="center" sortable>
|
<el-table-column
|
||||||
|
prop="first_limit_time"
|
||||||
|
label="首次涨停时间"
|
||||||
|
width="130"
|
||||||
|
align="center"
|
||||||
|
sortable
|
||||||
|
:sort-method="sortLimitTimeColumn"
|
||||||
|
>
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
{{ formatLimitTime(row.first_limit_time) }}
|
{{ formatLimitTime(row.first_limit_time) }}
|
||||||
</template>
|
</template>
|
||||||
@@ -176,11 +183,18 @@
|
|||||||
</el-table>
|
</el-table>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane :label="`炸板(${breakStocks.length})`" name="break">
|
<el-tab-pane :label="`炸板(${breakStocks.length})`" name="break">
|
||||||
<el-table :data="breakStocks" border stripe max-height="520">
|
<el-table :data="breakStocks" border stripe max-height="520" :default-sort="defaultDetailSort">
|
||||||
<el-table-column prop="name" label="股票简称" min-width="120" sortable />
|
<el-table-column prop="name" label="股票简称" min-width="120" sortable />
|
||||||
<el-table-column prop="ts_code" label="股票代码" min-width="120" sortable />
|
<el-table-column prop="ts_code" label="股票代码" min-width="120" sortable />
|
||||||
<el-table-column prop="industry" label="行业" min-width="120" sortable show-overflow-tooltip />
|
<el-table-column prop="industry" label="行业" min-width="120" sortable show-overflow-tooltip />
|
||||||
<el-table-column prop="first_limit_time" label="首次涨停时间" width="130" align="center" sortable>
|
<el-table-column
|
||||||
|
prop="first_limit_time"
|
||||||
|
label="首次涨停时间"
|
||||||
|
width="130"
|
||||||
|
align="center"
|
||||||
|
sortable
|
||||||
|
:sort-method="sortLimitTimeColumn"
|
||||||
|
>
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
{{ formatLimitTime(row.first_limit_time) }}
|
{{ formatLimitTime(row.first_limit_time) }}
|
||||||
</template>
|
</template>
|
||||||
@@ -240,6 +254,7 @@ const calendarStats = ref([]);
|
|||||||
const detailVisible = ref(false);
|
const detailVisible = ref(false);
|
||||||
const selectedDay = ref(null);
|
const selectedDay = ref(null);
|
||||||
const activeDetailTab = ref("limit");
|
const activeDetailTab = ref("limit");
|
||||||
|
const defaultDetailSort = { prop: "first_limit_time", order: "ascending" };
|
||||||
|
|
||||||
const monthStart = computed(() =>
|
const monthStart = computed(() =>
|
||||||
selectedMonth.value
|
selectedMonth.value
|
||||||
@@ -267,10 +282,14 @@ const detailStocks = computed(() =>
|
|||||||
Array.isArray(selectedDayStat.value?.stocks) ? selectedDayStat.value.stocks : [],
|
Array.isArray(selectedDayStat.value?.stocks) ? selectedDayStat.value.stocks : [],
|
||||||
);
|
);
|
||||||
const limitStocks = computed(() =>
|
const limitStocks = computed(() =>
|
||||||
detailStocks.value.filter((stock) => stock?.status === "limit"),
|
sortStocksByLimitTime(
|
||||||
|
detailStocks.value.filter((stock) => stock?.status === "limit"),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
const breakStocks = computed(() =>
|
const breakStocks = computed(() =>
|
||||||
detailStocks.value.filter((stock) => stock?.status === "break"),
|
sortStocksByLimitTime(
|
||||||
|
detailStocks.value.filter((stock) => stock?.status === "break"),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
const statMap = computed(() => {
|
const statMap = computed(() => {
|
||||||
const map = new Map();
|
const map = new Map();
|
||||||
@@ -379,6 +398,37 @@ const fetchMonthData = async (withLoading = true) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const sortStocksByLimitTime = (stocks) =>
|
||||||
|
[...stocks].sort(
|
||||||
|
(left, right) =>
|
||||||
|
getLimitTimeSortValue(left?.first_limit_time) -
|
||||||
|
getLimitTimeSortValue(right?.first_limit_time),
|
||||||
|
);
|
||||||
|
|
||||||
|
const sortLimitTimeColumn = (left, right) =>
|
||||||
|
getLimitTimeSortValue(left?.first_limit_time) -
|
||||||
|
getLimitTimeSortValue(right?.first_limit_time);
|
||||||
|
|
||||||
|
const getLimitTimeSortValue = (value) => {
|
||||||
|
if (value === null || value === undefined || value === "") {
|
||||||
|
return Number.MAX_SAFE_INTEGER;
|
||||||
|
}
|
||||||
|
|
||||||
|
const text = String(value);
|
||||||
|
const timeMatch = text.match(/(\d{1,2}):(\d{1,2})(?::(\d{1,2}))?/);
|
||||||
|
if (timeMatch) {
|
||||||
|
const [, hour, minute, second = "0"] = timeMatch;
|
||||||
|
return Number(hour) * 3600 + Number(minute) * 60 + Number(second);
|
||||||
|
}
|
||||||
|
|
||||||
|
const digits = text.replace(/\D/g, "");
|
||||||
|
if (!digits) return Number.MAX_SAFE_INTEGER;
|
||||||
|
|
||||||
|
const timeDigits = digits.length > 6 ? digits.slice(-6) : digits;
|
||||||
|
const number = Number(timeDigits);
|
||||||
|
return Number.isFinite(number) ? number : Number.MAX_SAFE_INTEGER;
|
||||||
|
};
|
||||||
|
|
||||||
const formatRate = (value) => {
|
const formatRate = (value) => {
|
||||||
if (value === null || value === undefined || value === "") return "--";
|
if (value === null || value === undefined || value === "") return "--";
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user