1import apiAddress from '../constant/apiAddress.js' 2 3// import { timestampToTime } from '../function.js' 4// export function calcDataList(items, config) { 5// items = items || [] 6// if (!Array.isArray(items)) items = [] 7// return items.map(item => calcDataItem(item, config)) 8// } 9// export function calcDataItem(item, config) { 10// let { children, subtitle, img, content_type } = config || {} 11// subtitle = subtitle || 'subtitle' 12// children = children || 'children' 13// img = img || 'thumb' 14// item.price = item.price || {} 15// item.discount = item.discount || Array.isArray(item.discount) || {} 16// let date_time = timestampToTime(item.show_time || item.add_time) 17// // å¤çproduct_attr_valueæ ¼å¼ä¸ºå符串ï¼è½ç¶ä¸ä¸å®ä¼ç¨å° 18// if (item.product_attr_value && item.product_attr_value instanceof Object) { 19// let key = Object.keys(item.product_attr_value)[0] 20// item.product_attr_value = item.product_attr_value[key] 21// } 22// let data = { 23// href: item.page_url_suffix || item.page_url || '', 24// alt: item.title || '', 25// title: item.title || '', 26// subtitle: item[subtitle] || '', 27// description: item.summary || '', 28// img: item[img] || '', 29// price_max: item.price.cost_min || 0, 30// price_min: item.price.selling_min || 0, 31// reads: item.reads || 0, 32// children: item[children] || [], 33// is_hot: item.is_hot || 0, 34// is_new: item.is_new || 0, 35// is_recommend: item.is_recommend || 0, 36// discount_end_time: item.discount_end_time || 0, 37// discount_start_time: item.discount_start_time || 0, 38// max_discount: item.max_discount || 0, 39// content_type: content_type || item.content_type || 'default', 40// content_id: item.id || 0, 41// id: item.id || 0, 42// } 43// // éæ¶ææ£ 44// if (item.discount.start_time || item.discount.end_time) { 45// data.discount_end_time = item.discount.end_time || 0 46// data.discount_start_time = item.discount.start_time || 0 47// if (item.discount.max_discount > 0) data.max_discount = item.discount.max_discount 48// // const maxDiscountObj = item.price.price_list ? item.price.price_list.find(obj => obj.id === item.discount.max_discount_price_id) || {} : {} 49// // data.price_min = maxDiscountObj.selling_price || data.price_min 50// // data.price_max = maxDiscountObj.cost_price || data.price_max 51// } 52// // ä»·æ ¼å¤çä¸ºå°æ° 53// if (item.price_max) data.price_max = item.price_max 54// else data.price_max = (data.price_max / 100).toFixed(2) 55// if (item.price_min) data.price_min = item.price_min 56// else data.price_min = (data.price_min / 100).toFixed(2) 57// if (item.max_discount) data.max_discount = item.max_discount 58// else data.max_discount = (1000 - data.max_discount) / 10 59// // children 60// data.children = data.children.map(son => calcDataItem(son, config)) 61// // return 62// return data 63// } 64 65/** ç«ç¹å°å¾-è·åæ ç¾å表 */ 66export async function getSitemapTagsList(ctx, params) { 67 return new Promise((resolve, reject) => { 68 ctx.state.request(ctx, { 69 name: 'æ ç¾å表', 70 prefix: '/qqt', 71 url: apiAddress.contentTagsList, 72 method: 'GET', 73 params 74 }) 75 .then(res => { 76 if (res.code === 0) resolve(res.data) 77 else console.error(res.msg) 78 }) 79 .catch(error => reject(error)) 80 }) 81} 82 83/** ç«ç¹å°å¾-è·åç«ç¹æ ç® */ 84export async function getPageCategoryList(ctx, params) { 85 return new Promise((resolve, reject) => { 86 ctx.state.request(ctx, { 87 name: '页颿 ç®', 88 url: apiAddress.pageCategory, 89 method: 'GET', 90 params 91 }) 92 .then(res => { 93 if (res.code === 0) resolve(res.data) 94 else console.error(res.msg) 95 }) 96 .catch(error => reject(error)) 97 }) 98} 99 100/** 101 * æç« å页å表 102 */ 103export function getArticleListPageBySearch(ctx, params) { 104 return new Promise((resolve, reject) => { 105 ctx.state.request(ctx, { 106 name: 'ç«ç¹æç« ', 107 url: apiAddress.articleListPageBySearch, 108 method: 'POST', 109 params 110 }) 111 .then(res => resolve(res.data)) 112 .catch(error => reject(error)) 113 }) 114} 115 116/** 117 * è§é¢å页å表 118 */ 119export function getVideoListPageBySearch(ctx, params) { 120 return new Promise((resolve, reject) => { 121 ctx.state.request(ctx, { 122 name: 'ç«ç¹è§é¢', 123 prefix: '/qqt', 124 url: apiAddress.videoListPageBySearch, 125 method: 'POST', 126 params 127 }) 128 .then(res => resolve(res.data)) 129 .catch(error => reject(error)) 130 }) 131} 132 133/** 134 * èåå页å表 135 */ 136export function getPolymerizeList(ctx, params) { 137 return new Promise((resolve, reject) => { 138 ctx.state.request(ctx, { 139 name: 'èåå表', 140 url: apiAddress.polymerizeListPage, 141 method: 'POST', 142 params 143 }) 144 .then(res => resolve(res.data)) 145 .catch(error => reject(error)) 146 }) 147} 148 149/** 150 * 产åå页å表 151 */ 152export function getProductListPageBySearch(ctx, params) { 153 return new Promise((resolve, reject) => { 154 ctx.state.request(ctx, { 155 url: apiAddress.productListPageBySearch, 156 method: 'POST', 157 params 158 }) 159 .then(res => resolve(res.data)) 160 .catch(error => reject(error)) 161 }) 162} 163 164export function getFAQListPageBySearch(ctx,params) { 165 return new Promise((resolve, reject) => { 166 ctx.state.request(ctx, { 167 name: 'ç«ç¹faq', 168 url: apiAddress.faqListPageBySearch, 169 method: 'POST', 170 params 171 }) 172 .then(res => resolve(res.data)) 173 .catch(error => reject(error)) 174 }) 175} 176 177export const getContent = { 178 179 /** 180 * è·åæ¨èå é¾ 181 * @param ctx 182 * @param params 183 * @returns {Promise<unknown>} 184 */ 185 'get-recommendLinks': function (ctx, params) { 186 return new Promise((resolve, reject) => { 187 const cacheParams = { 188 site_id: params.site_id, 189 page_type: params.page_type, 190 language_code: params.language_code 191 } 192 if (ctx.state.cache) { 193 const cache = ctx.state.cache.getApiData('content_internal_link', cacheParams) 194 if (cache) { 195 resolve(cache.data) 196 return 197 } 198 } 199 ctx.state.request(ctx, { 200 url: apiAddress.recommendLinks, 201 prefix: '/qqt', 202 method: 'GET', 203 params 204 }).then(res => { 205 if (ctx.state.cache) ctx.state.cache.fillApiData(res, 'content_internal_link', cacheParams) 206 resolve(res.data) 207 }).catch(error => reject(error)) 208 }) 209 }, 210 /** 211 * åç±»å 容 212 * @param {string} ids åç±»ID å¤ä¸ªç¨éå·éå¼ 1,2,3 213 * @param {int} page_size å表æ°é 214 * æchildren 215 */ 216 // 'get-page_category': function (ctx, params) { 217 // return new Promise((resolve, reject) => { 218 // ctx.state.request(ctx, { 219 // name: 'åç±»å 容', 220 // url: apiAddress.categoryContent, 221 // method: 'GET', 222 // params 223 // }) 224 // .then(res => resolve(calcDataList(res.data, { children: 'list' }))) 225 // .catch(error => reject(error)) 226 // }) 227 // }, 228 /** 229 * æ´å¤äº§å 230 * @param {int} page_size å表æ°é 231 * æchildren 232 */ 233 'get-moreProducts': function (ctx, params) { 234 return new Promise((resolve, reject) => { 235 ctx.state.request(ctx, { 236 name: 'æ´å¤äº§å', 237 url: apiAddress.productMore, 238 method: 'GET', 239 params 240 }) 241 .then(res => { 242 const contentList = new globalThis.Server.ContentList().product( 243 res.data, 244 { children: 'product' } 245 ) 246 resolve(contentList) 247 }) 248 .catch(error => reject(error)) 249 }) 250 }, 251 /** 252 * æ¨èæ ç®ï¼å³ä¸è§ï¼ 253 * @param {int} site_id ç«ç¹ID 254 * @param {int} relate_type å ³èç±»åï¼2产åï¼3æç« 255 * åªææ ç® 256 */ 257 'get-recommendCategory': function (ctx, params) { 258 return new Promise((resolve, reject) => { 259 const cacheParams = { 260 site_id: params.site_id, 261 content_type: params.content_type, 262 language_code: params.language_code, 263 list_length: params.page_size 264 } 265 if (ctx.query.force && ctx.query.force === 'html' && ctx.state.cache) { 266 const cache = ctx.state.cache.getApiData('content_recommend_category', cacheParams) 267 if (cache) { 268 resolve(new globalThis.Server.ContentList().product(cache.data)) 269 return 270 } 271 } 272 ctx.state.request(ctx, { 273 name: 'æ¨èæ ç®ï¼å³ä¸è§ï¼', 274 url: apiAddress.recommendCategory, 275 method: 'GET', 276 params 277 }) 278 .then(res => { 279 if (ctx.query.force && ctx.query.force === 'html' && ctx.state.cache) ctx.state.cache.fillApiData(res, 'content_recommend_category', cacheParams) 280 resolve(new globalThis.Server.ContentList().link(res.data)) 281 }) 282 .catch(error => reject(error)) 283 }) 284 }, 285 /** 286 * çä½ åæ¬¢ 287 * @param {int} id 产åid 288 * @param {int} page_size å表æ°é 289 */ 290 'get-youMightLike': function (ctx, params) { 291 return new Promise((resolve, reject) => { 292 ctx.state.request(ctx, { 293 name: 'çä½ åæ¬¢', 294 url: apiAddress.mightLike, 295 method: 'GET', 296 params 297 }) 298 .then(res => { 299 const contentList = new globalThis.Server.ContentList().product( 300 res.data, 301 { subtitle: 'product_attr_value' } 302 ) 303 resolve(contentList) 304 }) 305 .catch(error => reject(error)) 306 }) 307 }, 308 /** 309 * æ¨èé 读 310 * @param {int} id æç« id 311 * @param {int} page_size å表æ°é 312 */ 313 'get-recommendReading': function (ctx, params) { 314 return new Promise((resolve, reject) => { 315 ctx.state.request(ctx, { 316 name: 'æ¨èé 读', 317 url: apiAddress.recommendArticle, 318 method: 'GET', 319 params 320 }) 321 .then(res => { 322 if (res.data.length > 0) { 323 let first = {} 324 for (var i = 0; i < res.data.length; i++) { 325 if (res.data[i].thumb) { 326 first = res.data[i] 327 res.data.splice(i, 1) 328 break 329 } 330 } 331 if (Object.keys(first).length > 0) res.data.unshift(first) 332 } 333 const contentList = new globalThis.Server.ContentList().article
333( 334 res.data 335 ) 336 resolve(contentList) 337 }) 338 .catch(error => reject(error)) 339 }) 340 }, 341 /** 342 * ææ°äº§å 343 * @param {int} page_size å表æ°é 344 */ 345 'get-latestProducts': function (ctx, params) { 346 return new Promise((resolve, reject) => { 347 const cacheParams = { 348 exclude_ai: params.exclude_ai, 349 content_type: params.content_type, 350 exclude_ids: [params.content_id], 351 list_length: params.page_size 352 } 353 if (ctx.state.cache) { 354 const cache = ctx.state.cache.getApiData('content_latest_products', cacheParams) 355 if (cache) { 356 resolve(new globalThis.Server.ContentList().product(cache.data)) 357 return 358 } 359 } 360 // åå¤ä¸ä¸ªåç¼å 361 params.page_size ++ 362 363 ctx.state.request(ctx, { 364 name: 'ææ°äº§å', 365 url: apiAddress.latestProducts, 366 method: 'GET', 367 params 368 }) 369 .then(res => { 370 if (ctx.state.cache) ctx.state.cache.fillApiData(res, 'content_latest_products', cacheParams) 371 resolve(new globalThis.Server.ContentList().product(res.data.length === params.page_size ? res.data.slice(0, -1) : res.data)) 372 }) 373 .catch(error => reject(error)) 374 }) 375 }, 376 /** 377 * çé¨æç« 378 * @param {int} page_size å表æ°é 379 */ 380 'get-hotArticles': function (ctx, params) { 381 return new Promise((resolve, reject) => { 382 ctx.state.request(ctx, { 383 name: 'çé¨æç« ', 384 url: apiAddress.hotArticle, 385 method: 'GET', 386 params 387 }) 388 .then(res => { 389 const contentList = new globalThis.Server.ContentList().article
389( 390 res.data 391 ) 392 resolve(contentList) 393 }) 394 .catch(error => reject(error)) 395 }) 396 }, 397 /** 398 * çé¨ä¸é¢ 399 * @param {int} page_size å表æ°é 400 */ 401 'get-hotSpecial': function (ctx, params) { 402 return new Promise((resolve, reject) => { 403 ctx.state.request(ctx, { 404 name: 'çé¨ä¸é¢', 405 url: apiAddress.polymerizeSpecial, 406 method: 'GET', 407 params 408 }) 409 .then(res => { 410 const contentList = new globalThis.Server.ContentList().polymerize( 411 res.data 412 ) 413 resolve(contentList) 414 }) 415 .catch(error => reject(error)) 416 }) 417 }, 418 /** 419 * ææ°ä¸é¢ 420 * @param {int} page_size å表æ°é 421 */ 422 'get-newSpecial': function (ctx, params) { 423 return new Promise((resolve, reject) => { 424 ctx.state.request(ctx, { 425 name: 'ææ°ä¸é¢', 426 url: apiAddress.polymerizeNew, 427 method: 'GET', 428 params 429 }) 430 .then(res => { 431 const contentList = new globalThis.Server.ContentList().polymerize(res.data) 432 resolve(contentList) 433 }) 434 .catch(error => reject(error)) 435 }) 436 }, 437 /** 438 * æ¨èè§é¢ 439 * @param {int} content_id è§é¢id 440 */ 441 'get-recommendVideo': function (ctx, params) { 442 return new Promise((resolve, reject) => { 443 ctx.state.request(ctx, { 444 name: 'æ¨èè§é¢', 445 url: apiAddress.recommendVideo, 446 prefix: '/qqt', 447 method: 'GET', 448 params: { 449 site_id: params.site_id, 450 page_size: params.page_size, 451 content_id: params.content_id, 452 language_code: params.language_code, 453 } 454 }) 455 .then(res => { 456 const contentList = new globalThis.Server.ContentList().video( 457 res.data, 458 { img: 'thumb_prefix' } 459 ) 460 resolve(contentList) 461 }) 462 .catch(error => reject(error)) 463 }) 464 }, 465 /** 466 * è·åæ°ççå产å-è£ ä¿®ç¨ 467 */ 468 'get-products-hot': function (ctx, params) { 469 return new Promise((resolve, reject) => { 470 ctx.state.request(ctx, { 471 name: 'çå产å', 472 url: apiAddress.filterProduct, 473 method: 'GET', 474 params 475 }) 476 .then(res => { 477 const contentList = new globalThis.Server.ContentList().product( 478 res.data 479 ) 480 resolve(contentList) 481 }) 482 .catch(error => reject(error)) 483 }) 484 }, 485 /** 486 * è·åæ°çææ°äº§å-è£ ä¿®ç¨ 487 */ 488 'get-products-new': function (ctx, params) { 489 return new Promise((resolve, reject) => { 490 ctx.state.request(ctx, { 491 name: 'ææ°äº§å', 492 url: apiAddress.filterProduct, 493 method: 'GET', 494 params 495 }) 496 .then(res => { 497 const contentList = new globalThis.Server.ContentList().product( 498 res.data 499 ) 500 resolve(contentList) 501 }) 502 .catch(error => reject(error)) 503 }) 504 }, 505 /** 506 * è·åæ°çæ¨è产å-è£ ä¿®ç¨ 507 */ 508 'get-products-recommend': function (ctx, params) { 509 return new Promise((resolve, reject) => { 510 ctx.state.request(ctx, { 511 name: 'æ¨è产å', 512 url: apiAddress.filterProduct, 513 method: 'GET', 514 params 515 }) 516 .then(res => { 517 const contentList = new globalThis.Server.ContentList().product( 518 res.data 519 ) 520 resolve(contentList) 521 }) 522 .catch(error => reject(error)) 523 }) 524 }, 525 /** 526 * è·åæ°çäº§åæµè§åå²-è£ ä¿®ç¨ 527 */ 528 'get-products-history': function (ctx, params) { 529 return new Promise((resolve, reject) => { 530 ctx.state.request(ctx, { 531 name: 'äº§åæµè§åå²', 532 url: apiAddress.filterProduct, 533 method: 'GET', 534 params 535 }) 536 .then(res => { 537 const contentList = new globalThis.Server.ContentList().product( 538 res.data 539 ) 540 resolve(contentList) 541 }) 542 .catch(error => reject(error)) 543 }) 544 }, 545 /** 546 * è·åæ ç®äº§åæ°æ® 547 */ 548 'get-products-column': function (ctx, params) { 549 return new Promise((resolve, reject) => { 550 const cacheParams = { 551 site_id: params.site_id, 552 language_code: params.language_code, 553 page_type: params.page_type, 554 content_type: params.content_type, 555 page_category_id: params.page_category_id, 556 columns: params.columns, 557 } 558 const temp = {} 559 for (const [key, value] of Object.entries(params)) { 560 if (value !== '' && !['page_size', 'content_id'].includes(key)) { 561 temp[key] = value 562 } 563 } 564 const cacheValid = ctx.query.force && ctx.query.force === 'html' && ctx.state.cache && JSON.stringify(temp, Object.keys(temp).sort()) === JSON.stringify(cacheParams, Object.keys(cacheParams).sort()) 565 if (cacheValid) {
566 cacheParams['list_length'] = params.page_size 567 const cache = ctx.state.cache.getApiData('content_products_column', cacheParams) 568 if (cache) { 569 resolve(new globalThis.Server.ContentList().product(cache.data)) 570 return 571 } 572 } 573 ctx.state.request(ctx, { 574 name: 'æ ç®äº§å', 575 url: apiAddress.filterProduct, 576 method: 'GET', 577 params 578 }) 579 .then(res => { 580 if (cacheValid) ctx.state.cache.fillApiData(res, 'content_products_column', cacheParams) 581 resolve(new globalThis.Server.ContentList().product(res.data)) 582 }) 583 .catch(error => reject(error)) 584 }) 585 }, 586 /** 587 * è·åç¸ä¼¼äº§å 588 */ 589 'get-products-similar': function (ctx, params) { 590 return new Promise((resolve, reject) => { 591 if (!params.tag_ids) { 592 resolve([]) 593 return 594 } 595 ctx.state.request(ctx, { 596 name: 'ç¸ä¼¼äº§å', 597 url: apiAddress.filterProduct, 598 method: 'GET', 599 params 600 }) 601 .then(res => { 602 const contentList = new globalThis.Server.ContentList().product( 603 res.data 604 ) 605 resolve(contentList) 606 }) 607 .catch(error => reject(error)) 608 }) 609 }, 610 /** 611 * è·åæ£å¨è¿è¡çéæ¶ææ£å表-è£ ä¿®ç¨ 612 */ 613 'get-products-discount-now': function (ctx, params) { 614 return new Promise((resolve, reject) => { 615 ctx.state.request(ctx, { 616 name: 'æ£å¨è¿è¡çéæ¶ææ£', 617 url: apiAddress.filterProduct, 618 method: 'GET', 619 params 620 }) 621 .then(res => { 622 const contentList = new globalThis.Server.ContentList().product( 623 res.data 624 ) 625 resolve(contentList) 626 }) 627 .catch(error => reject(error)) 628 }) 629 }, 630 /** 631 * è·åå³å°è¿è¡çéæ¶ææ£å表-è£ ä¿®ç¨ 632 */ 633 'get-products-discount-upcoming': function (ctx, params) { 634 return new Promise((resolve, reject) => { 635 ctx.state.request(ctx, { 636 name: 'å³å°è¿è¡çéæ¶ææ£å表', 637 url: apiAddress.filterProduct, 638 method: 'GET', 639 params 640 }) 641 .then(res => { 642 const contentList = new globalThis.Server.ContentList().product( 643 res.data 644 ) 645 resolve(contentList) 646 }) 647 .catch(error => reject(error)) 648 }) 649 }, 650 /** aiæç« ä¾§è¾¹ç¨å°çï¼é 读éæé«ç产å */ 651 'get-products-most-reads': function (ctx, params) { 652 return new Promise((resolve, reject) => { 653 ctx.state.request(ctx, { 654 name: 'é 读éæé«ç产å', 655 url: apiAddress.filterProduct, 656 method: 'GET', 657 params 658 }) 659 .then(res => { 660 const contentList = new globalThis.Server.ContentList().product( 661 res.data, 662 { subtitle: 'product_attr_value' } 663 ) 664 resolve(contentList) 665 }) 666 .catch(error => reject(error)) 667 }) 668 }, 669 /** 670 * è·åæ°çå ³è产å 671 */ 672 'get-products-related': function(ctx, params) { 673 return new Promise((resolve, reject) => { 674 const cacheParams = { 675 page_category_id: params.page_category_id, 676 content_type: params.content_type, 677 exclude_ids: [params.content_id], 678 list_length: params.page_size 679 } 680 if (ctx.query.force && ctx.query.force === 'html' && ctx.state.cache) { 681 const cache = ctx.state.cache.getApiData('content_products_related', cacheParams) 682 if (cache) { 683 resolve(new globalThis.Server.ContentList().product(cache.data)) 684 return 685 } 686 } 687 // åå¤ä¸ä¸ªåç¼å 688 params.page_size ++ 689 690 ctx.state.request(ctx, { 691 name: 'å ³è产å', 692 url: apiAddress.relatedProduct, 693 method: 'GET', 694 params 695 }) 696 .then(res => { 697 res.data = res.data || [] 698 if (ctx.query.force && ctx.query.force === 'html' && ctx.state.cache) ctx.state.cache.fillApiData(res, 'content_products_related', cacheParams) 699 resolve(new globalThis.Server.ContentList().product(res.data.length === params.page_size ? res.data.slice(0, -1) : res.data)) 700 }) 701 .catch(error => reject(error)) 702 }) 703 }, 704 /** 705 * çä½ åæ¬¢çæ¨èæ ç®ï¼äº§åï¼ 706 */ 707 'get-product-recommendCategory': function (ctx, params) { 708 return new Promise((resolve, reject) => { 709 ctx.state.request(ctx, { 710 name: 'çä½ åæ¬¢-æ¨èæ ç®', 711 url: apiAddress.recommendCategory, 712 method: 'GET', 713 params: { 714 ...params, 715 content_type: '2,6' 716 } 717 }) 718 .then(res => { 719 const contentList = new globalThis.Server.ContentList().link( 720 res.data 721 ) 722 resolve(contentList) 723 }) 724 .catch(error => reject(error)) 725 }) 726 },
727 /** è·åæç« æ ç®å表 */ 728 'get-article-category': function (ctx, params) { 729 return new Promise((resolve, reject) => { 730 ctx.state.request(ctx, { 731 name: 'æç« æ ç®å表', 732 url: apiAddress.articleListPageBySearch, 733 method: 'POST', 734 params 735 }) 736 .then(res => { 737 const contentList = new globalThis.Server.ContentList().article( 738 res.data.list || res.data 739 ) 740 resolve(contentList) 741 }) 742 .catch(error => reject(error)) 743 }) 744 }, 745 /** è·åæç« æ ç®å表 */ 746 'get-article-column': function (ctx, params) { 747 return new Promise((resolve, reject) => { 748 ctx.state.request(ctx, { 749 name: 'æç« æ ç®å表', 750 url: apiAddress.articleListPageBySearch, 751 method: 'POST', 752 params 753 }) 754 .then(res => { 755 const contentList = new globalThis.Server.ContentList().article( 756 res.data.list || res.data 757 ) 758 resolve(contentList) 759 }) 760 .catch(error => reject(error)) 761 }) 762 }, 763 /** è·åè§é¢æ ç®å表 */ 764 'get-video-column': function (ctx, params) { 765 return new Promise((resolve, reject) => { 766 ctx.state.request(ctx, { 767 name: 'è§é¢æ ç®å表', 768 prefix: '/qqt', 769 url: apiAddress.videoListPageBySearch, 770 method: 'POST', 771 params 772 }) 773 .then(res => { 774 const contentList = new globalThis.Server.ContentList().video( 775 res.data.list || res.data 776 ) 777 resolve(contentList) 778 }) 779 .catch(error => reject(error)) 780 }) 781 }, 782 /** è·åfaqæ ç®å表 */ 783 'get-faq-column': function (ctx, params) { 784 return new Promise((resolve, reject) => { 785 ctx.state.request(ctx, { 786 name: 'faqæ ç®å表', 787 url: apiAddress.faqListPageBySearch, 788 method: 'POST', 789 params: { 790 page_category_id: params.ids, 791 site_id: params.site_id, 792 language_code: params.language_code, 793 page_size: params.page_size 794 } 795 }) 796 .then(res => { 797 const contentList = new globalThis.Server.ContentList().faq( 798 res.data.list || res.data 799 ) 800 resolve(contentList) 801 }) 802 .catch(error => reject(error)) 803 }) 804 }, 805 /** è·åä¸è½½æ ç®å表 */ 806 'get-download-column': function (ctx, params) { 807 return new Promise((resolve, reject) => { 808 ctx.state.request(ctx, { 809 name: 'ä¸è½½æ ç®å表', 810 prefix: '/jmc', 811 url: apiAddress.downloadListPage, 812 params 813 }) 814 .then(res => { 815 const contentList = new globalThis.Server.ContentList().download( 816 res.data.list || res.data 817 ) 818 resolve(contentList) 819 }) 820 .catch(error => reject(error)) 821 }) 822 }, 823 /** * å ³èæç« */ 824 'get-article-related': function (ctx, params) { 825 return new Promise((resolve, reject) => { 826 ctx.state.request(ctx, { 827 name: 'å ³èæç« ', 828 url: apiAddress.relatedArticle, 829 method: 'GET', 830 params 831 }) 832 .then(res => {
833 resolve(new globalThis.Server.ContentList().article(res.data)) 834 }) 835 .catch(error => reject(error)) 836 }) 837 }, 838 /** å ³èæ ç®çæç« */ 839 'get-article-related-column': function (ctx, params) { 840 return new Promise((resolve, reject) => { 841 const cacheParams = { 842 page_category_id: params.page_category_id, 843 content_type: params.content_type, 844 exclude_ids: [params.content_id], 845 list_length: params.page_size 846 } 847 if (ctx.query.force && ctx.query.force === 'html' && ctx.state.cache) { 848 const cache = ctx.state.cache.getApiData('content_related_article_column', cacheParams) 849 if (cache) { 850 resolve(new globalThis.Server.ContentList().article(cache.data)) 851 return 852 } 853 } 854 // åå¤ä¸ä¸ªåç¼å 855 params.page_size ++ 856 857 ctx.state.request(ctx, { 858 name: 'å ³èæç« ', 859 url: apiAddress.relatedColumnArticle, 860 method: 'GET', 861 params 862 }) 863 .then(res => { 864 if (ctx.query.force && ctx.query.force === 'html' && ctx.state.cache) ctx.state.cache.fillApiData(res, 'content_related_article_column', cacheParams)
865 resolve(new globalThis.Server.ContentList().article(res.data.length === params.page_size ? res.data.slice(0, -1) : res.data)) 866 }) 867 .catch(error => reject(error)) 868 }) 869 }, 870 /** ææ°æç« */ 871 'get-latestArticles': function (ctx, params) { 872 return new Promise((resolve, reject) => { 873 ctx.state.request(ctx, { 874 name: 'ææ°æç« ', 875 url: apiAddress.latestArticles, 876 method: 'GET', 877 params 878 }) 879 .then(res => { 880 const contentList = new globalThis.Server.ContentList().article(res.data) 881 resolve(contentList) 882 }) 883 .catch(error => reject(error)) 884 }) 885 }, 886 /** ææ°è§é¢ å叿¶é´ */ 887 'get-latestVideos': function (ctx, params) { 888 return new Promise((resolve, reject) => { 889 console.log('params', params) 890 ctx.state.request(ctx, { 891 name: 'ææ°è§é¢', 892 url: apiAddress.latestVideos, 893 method: 'POST', 894 prefix: '/qqt', 895 params 896 }) 897 .then(res => { 898 const contentList = new globalThis.Server.ContentList().video( 899 res.data.list || res.data 900 ) 901 resolve(contentList) 902 }) 903 .catch(error => reject(error)) 904 }) 905 }, 906 /** ææ°è§é¢ ææ¾æ°é */ 907 'get-popularVideos': function (ctx, params) { 908 return new Promise((resolve, reject) => { 909 ctx.state.request(ctx, { 910 name: 'ææ°è§é¢', 911 url: apiAddress.latestVideos, 912 method: 'POST', 913 prefix: '/qqt', 914 params 915 }) 916 .then(res => { 917 const contentList = new globalThis.Server.ContentList().video( 918 res.data.list || res.data 919 ) 920 resolve(contentList) 921 }) 922 .catch(error => reject(error)) 923 }) 924 }, 925 /** 926 * æ¨èæ ç®ï¼æç« ï¼ 927 */ 928 'get-article-recommendCategory': function (ctx, params) { 929 return new Promise((resolve, reject) => { 930 ctx.state.request(ctx, { 931 name: 'æ¨èæ ç®ï¼æç« ï¼', 932 url: apiAddress.recommendCategory, 933 method: 'GET', 934 params: { 935 ...params, 936 content_type: '3,7' 937 } 938 }) 939 .then(res => { 940 const contentList = new globalThis.Server.ContentList().link( 941 res.data 942 ) 943 resolve(contentList) 944 }) 945 .catch(error => reject(error)) 946 }) 947 }, 948 /** è·åçé¨æç´¢ */ 949 'get-search-hot': function (ctx, params) { 950 return new Promise((resolve, reject) => { 951 ctx.state.request(ctx, { 952 name: 'çé¨æç´¢', 953 url: apiAddress.hotSearch, 954 method: 'GET', 955 params 956 }) 957 .then(res => { 958 const contentList = new globalThis.Server.ContentList().link( 959 res.data.list || res.data 960 ) 961 resolve(contentList) 962 }) 963 .catch(error => reject(error)) 964 }) 965 }, 966 /** è·åç¸å ³æç´¢ */ 967 'get-search-related': function (ctx, params) { 968 return new Promise((resolve, reject) => { 969 ctx.state.request(ctx, { 970 name: 'ç¸å ³æç´¢', 971 url: apiAddress.relatedeSearch, 972 method: 'GET', 973 params 974 }) 975 .then(res => { 976 const contentList = new globalThis.Server.ContentList().link( 977 res.data.list || res.data 978 ) 979 resolve(contentList) 980 }) 981 .catch(error => reject(error)) 982 }) 983 }, 984 /** è·åç«ç¹æç« */ 985 'get-article-list': function (ctx,params) { 986 return new Promise((resolve, reject) => { 987 ctx.state.request(ctx, { 988 name: 'ç«ç¹æç« ', 989 url: apiAddress.articleListPageBySearch, 990 method: 'POST', 991 params: { 992 status: 1, 993 ...params 994 } 995 }) 996 .then(res => resolve(res.data.list || [])) 997 .catch(error => reject(error)) 998 }) 999 }, 1000 /** 1001 * è·åé¨åºå表 1002 * @param {*} ctx 1003 * @param {*} params 1004 * @returns 1005 */ 1006 'get-store-list': function (ctx,params) { 1007 return new Promise((resolve, reject) => { 1008 ctx.state.request(ctx, { 1009 name: 'é¨åºå表', 1010 prefix: '/qqt', 1011 url: apiAddress.storeListPageBySearch, 1012 method: 'POST', 1013 params: { 1014 status: 1, 1015 // ...params, 1016 content_type: 17, 1017 site_id: params.site_id, 1018 language_code: params.language_code 1019 } 1020 }) 1021 .then(res => resolve(res.data?.list || [])) 1022 .catch(error => reject(error)) 1023 }) 1024 },
1025 /** è·åfaqå表 */ 1026 'get-faq-list': function (ctx,params) { 1027 return new Promise((resolve, reject) => { 1028 ctx.state.request(ctx, { 1029 name: 'ç«ç¹faq', 1030 url: apiAddress.faqListPageBySearch, 1031 method: 'POST', 1032 params 1033 }) 1034 .then(res => { 1035 const list = res.data?.list || [] 1036 const page_number = res?.data?.page_number || 1 1037 const page_size = res?.data?.page_size || list.length 1038 list.forEach((item, i) => { 1039 list[i].seq = Math.max((page_number - 1) * page_size, 0) + i + 1 1040 }) 1041 resolve(list) 1042 }) 1043 .catch(error => reject(error)) 1044 }) 1045 }, 1046 1047 /** è·åèåæ ç¾å ³èå表 */ 1048 'get-polymerize-relate-tag': function (ctx, params) { 1049 return new Promise((resolve, reject) => { 1050 ctx.state.request(ctx, { 1051 name: 'èåå ³èæ ç¾å表', 1052 url: apiAddress.polymerizeRelateTag, 1053 method: 'GET', 1054 params 1055 }) 1056 .then(res => { 1057 const contentList = res.data || [] 1058 contentList.map(item => { 1059 item.title = item.keywords 1060 return item 1061 }) 1062 resolve(contentList) 1063 }) 1064 .catch(error => reject(error)) 1065 }) 1066 }, 1067 /** è·åæ ç®å 容ååºå表 */ 1068 'get-page-content-desc': function (ctx, params) { 1069 return new Promise((resolve, reject) => { 1070 ctx.state.request(ctx, { 1071 name: 'æ ç®å 容ååºå表', 1072 url: apiAddress.contentListPage, 1073 method: 'GET', 1074 params 1075 }) 1076 .then(res => resolve(res.data.list || [])) 1077 .catch(error => reject(error)) 1078 }) 1079 }, 1080 /** è·åå级æ ç®å表 */ 1081 'get-child-category': function (ctx, params) { 1082 return new Promise((resolve, reject) => { 1083 ctx.state.request(ctx, { 1084 name: 'å级æ ç®å表', 1085 url: apiAddress.pageCategoryListPage, 1086 method: 'GET', 1087 params 1088 }) 1089 .then(res => { 1090 const contentList = new globalThis.Server.ContentList().default( 1091 res.data.list.map(item => { 1092 item.thumb = 'https://img.yfisher.com/' + item.thumb 1093 return item 1094 }) 1095 ) 1096 resolve(contentList) 1097 }) 1098 .catch(error => reject(error)) 1099 }) 1100 }, 1101 /** FAQåç±» */ 1102 'get-faq-type': function (ctx, params) { 1103 return new Promise((resolve, reject) => { 1104 ctx.state.request(ctx, { 1105 name: 'FAQç±»å', 1106 prefix: '/jmc', 1107 url: apiAddress.faqType, 1108 method: 'GET', 1109 params 1110 }) 1111 .then(res => { 1112 resolve(res.data) 1113 }) 1114 .catch(error => reject(error)) 1115 }) 1116 } 1117} 1118 1119/** 1120 * é»é©¬é¡µé¢è·åé»è®¤ç®ä» 1121 */ 1122export function getMediaIntroduction(ctx, params) { 1123 return new Promise((resolve, reject) => { 1124 ctx.state.request(ctx, { 1125 url: apiAddress.mediaIntroduction, 1126 method: 'GET', 1127 params 1128 }) 1129 .then(res => resolve(res.data)) 1130 .catch(error => reject(error)) 1131 }) 1132}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.