diff --git a/html/cai.html b/html/cai.html
index 9816ee6..ba5be30 100644
--- a/html/cai.html
+++ b/html/cai.html
@@ -178,6 +178,51 @@
let currentPage = 1;
let menuData = [];
let currentLottery = null;
+ // 付费文章专家展示上限:未列出的彩种/玩法保持接口返回的完整分页。
+ const paidExpertDisplayLimits = [
+ { lotteries: ["fc3d", "福彩3d"], plays: ["独胆"], total: 10 },
+ {
+ lotteries: ["fc3d", "福彩3d"],
+ plays: ["杀1码", "杀码"],
+ total: 20,
+ },
+ { lotteries: ["pl3", "排列三"], plays: ["独胆"], total: 10 },
+ {
+ lotteries: ["pl3", "排列三"],
+ plays: ["杀1码", "杀码"],
+ total: 20,
+ },
+ {
+ lotteries: ["ssq", "双色球"],
+ plays: ["1码定胆", "一码定胆"],
+ total: 10,
+ },
+ { lotteries: ["qlc", "七乐彩"], plays: ["独胆"], total: 20 },
+ ];
+
+ function normalizeDisplayLimitKey(value) {
+ return String(value || "").replace(/\s/g, "").toLowerCase();
+ }
+
+ function getPaidExpertDisplayLimit(playName) {
+ const lotteryKeys = [
+ currentLottery && currentLottery.code,
+ currentLottery && currentLottery.suoxie,
+ currentLottery && currentLottery.name,
+ currentCode,
+ ].map(normalizeDisplayLimitKey);
+ const playKey = normalizeDisplayLimitKey(playName);
+ const matchedLimit = paidExpertDisplayLimits.find((item) => {
+ const lotteryMatched = item.lotteries.some((lottery) =>
+ lotteryKeys.includes(normalizeDisplayLimitKey(lottery)),
+ );
+ const playMatched = item.plays.some(
+ (name) => playKey === normalizeDisplayLimitKey(name),
+ );
+ return lotteryMatched && playMatched;
+ });
+ return matchedLimit ? matchedLimit.total : null;
+ }
// Login status
function logout() {
@@ -523,6 +568,11 @@
return;
}
currentTypeId = typeId;
+ const displayLimit = getPaidExpertDisplayLimit(getCurrentTypeName());
+ const maxPage = displayLimit
+ ? Math.ceil(displayLimit / currentRowPageSize)
+ : Infinity;
+ currentPage = Math.min(Math.max(1, Number(currentPage) || 1), maxPage);
ApiClient.get(ApiClient.API.payArticleExpertRank, {
menuId: typeId,
issueCount: currentPageSize,
@@ -532,8 +582,12 @@
if (ApiClient.isSuccess(res) && ApiClient.pickData(res, null)) {
const data = ApiClient.pickData(res, {}) || {};
const list = data.records || data.rows || ApiClient.asArray(data);
- renderArticles(list);
- renderPagination(data.totalRow || data.total || data.count || list.length || 0);
+ const total = data.totalRow || data.total || data.count || list.length || 0;
+ const visibleTotal = displayLimit
+ ? Math.min(total, displayLimit)
+ : total;
+ renderArticles(ApiClient.asArray(list).slice(0, currentRowPageSize));
+ renderPagination(visibleTotal);
} else {
$("#articleBody").html(
'
| 暂无数据 |
',
diff --git a/html/caiinfo.html b/html/caiinfo.html
index 9efb1bb..659b34d 100644
--- a/html/caiinfo.html
+++ b/html/caiinfo.html
@@ -319,13 +319,17 @@
ApiClient.get(ApiClient.API.webConfig).catch(function () {
return { data: {} };
}),
+ ApiClient.get(ApiClient.API.configCopyright).catch(function () {
+ return { data: [] };
+ }),
ApiClient.get(ApiClient.API.configSite).catch(function () {
return { data: {} };
}),
]).then(function (results) {
if (!CommonUtil.applyWebConfigs) return;
CommonUtil.applyWebConfigs(ApiClient.pickData(results[0], {}) || {});
- CommonUtil.applyWebConfigs(ApiClient.pickData(results[1], {}) || {});
+ CommonUtil.applyCopyrightConfigs(ApiClient.pickData(results[1], []) || []);
+ CommonUtil.applyWebConfigs(ApiClient.pickData(results[2], {}) || {});
});
}
diff --git a/utils/ApiClient.js b/utils/ApiClient.js
index 6687e7b..d45813b 100644
--- a/utils/ApiClient.js
+++ b/utils/ApiClient.js
@@ -34,6 +34,7 @@ const ApiClient = {
webConfig: '/api/web/config',
configList: '/api/web/config/list',
configSite: '/api/web/config/site',
+ configCopyright: '/api/web/config/copyright',
bannerList: '/api/web/banner/list',
adList: '/api/web/ad/list',
freeArticleRecommend: '/api/web/free-article/recommend',
@@ -911,9 +912,10 @@ const ApiClient = {
},
async loadHomeIndexCompat() {
- const [configList, config, siteConfig, menus, banners, notices, ads, freeArticles, links, latest] = await Promise.all([
+ const [configList, config, copyright, siteConfig, menus, banners, notices, ads, freeArticles, links, latest] = await Promise.all([
this.get('/api/web/config/list').catch(() => ({ data: [] })),
this.get('/api/web/config').catch(() => ({ data: {} })),
+ this.get(this.API.configCopyright).catch(() => ({ data: [] })),
this.get('/api/web/config/site').catch(() => ({ data: {} })),
this.loadHomeMenusCompat().catch(() => ({ data: [] })),
this.get('/api/web/banner/list').catch(() => ({ data: [] })),
@@ -977,6 +979,7 @@ const ApiClient = {
webConfigs: this.asArray(this.pickData(configList, [])).length
? this.asArray(this.pickData(configList, []))
: this.configObjectToList(config.data || {}),
+ copyrightConfigs: this.asArray(this.pickData(copyright, [])),
siteConfig: siteConfig.data || {},
menuList,
navList: menuList,
diff --git a/utils/CommonUtil.js b/utils/CommonUtil.js
index 508e602..7a1020e 100644
--- a/utils/CommonUtil.js
+++ b/utils/CommonUtil.js
@@ -725,7 +725,6 @@ const CommonUtil = {
sort: item.sort === undefined || item.sort === null ? index : Number(item.sort),
}));
- const copyrightItems = [];
const footerContactItems = [];
configs.forEach((item) => {
const isFooterContact = this.isFooterContactConfig(item);
@@ -740,15 +739,24 @@ const CommonUtil = {
this.setMeta('description', item.content || '');
} else if (item.type === 'web_icon') {
this.setIcon(item.content || '');
- } else if (item.type === 'web_copyright' && !isFooterContact) {
- copyrightItems.push(item);
}
});
- this.applyFooterCopyright(copyrightItems);
this.renderFooterContact(footerContactItems);
},
+ applyCopyrightConfigs(configs) {
+ const copyrightItems = this.asArray(configs)
+ .filter((item) => item && (item.content || item.value) && item.isEnabled !== '0' && item.isEnabled !== 0 && item.isEnabled !== false)
+ .map((item, index) => ({
+ ...item,
+ content: item.content || item.value || '',
+ sort: item.sort === undefined || item.sort === null ? index : Number(item.sort),
+ }));
+
+ this.applyFooterCopyright(copyrightItems);
+ },
+
ensureGlobalFooterLayout() {
if (typeof document === 'undefined') return;
const $ = this.$;
@@ -1098,6 +1106,7 @@ const CommonUtil = {
else if (data.siteConfig) this.applyWebConfigs(data.siteConfig);
else if (data.config) this.applyWebConfigs(data.config);
else if (result.data) this.applyWebConfigs(result.data);
+ this.applyCopyrightConfigs(data.copyrightConfigs);
if (!loadHomeData && options.ads !== false && data.adList) {
this.processAndRenderAds(data.adList, options.adPositions);
@@ -2161,9 +2170,10 @@ const CommonUtil = {
},
async loadBasePageData(options = {}) {
- const [configList, config, siteConfig, ads] = await Promise.all([
+ const [configList, config, copyright, siteConfig, ads] = await Promise.all([
ApiClient.get('/api/web/config/list').catch(() => ({ data: [] })),
ApiClient.get('/api/web/config').catch(() => ({ data: {} })),
+ ApiClient.get(ApiClient.API.configCopyright).catch(() => ({ data: [] })),
ApiClient.get('/api/web/config/site').catch(() => ({ data: {} })),
options.ads === false
? Promise.resolve({ data: [] })
@@ -2181,6 +2191,7 @@ const CommonUtil = {
: ApiClient.configObjectToList
? ApiClient.configObjectToList(config.data || {})
: config.data || {},
+ copyrightConfigs: this.asArray(this.pickData(copyright, [])),
adList: this.asArray(this.pickData(ads, [])),
},
};
@@ -2191,10 +2202,11 @@ const CommonUtil = {
return ApiClient.loadHomeIndexCompat();
}
- const [configList, config, siteConfig, menus, banners, notices, ads, freeArticles, latest] =
+ const [configList, config, copyright, siteConfig, menus, banners, notices, ads, freeArticles, latest] =
await Promise.all([
ApiClient.get('/api/web/config/list').catch(() => ({ data: [] })),
ApiClient.get('/api/web/config').catch(() => ({ data: {} })),
+ ApiClient.get(ApiClient.API.configCopyright).catch(() => ({ data: [] })),
ApiClient.get('/api/web/config/site').catch(() => ({ data: {} })),
ApiClient.get('/api/web/menu/home-nav').catch(() => ({ data: [] })),
ApiClient.get('/api/web/banner/list').catch(() => ({ data: [] })),
@@ -2266,6 +2278,7 @@ const CommonUtil = {
: ApiClient.configObjectToList
? ApiClient.configObjectToList(config.data || {})
: config.data || {},
+ copyrightConfigs: this.asArray(this.pickData(copyright, [])),
siteConfig: siteConfig.data || {},
bannerList: this.asArray(this.pickData(banners, [])),
noticeList: this.asArray(this.pickData(notices, [])),