新增searchFacet API获取全新/古旧真实统计

This commit is contained in:
97694732@qq.com 2026-06-03 16:23:23 +08:00
parent 4d557b4be0
commit e062725f2d
2 changed files with 72 additions and 33 deletions

View File

@ -751,7 +751,7 @@
<script>
import { getWarehouseList, getLocationList, searchBookByIsbn } from '@/utils/api.js'
import { login as kongfzLogin, searchProducts } from '@/utils/kongfz.js'
import { login as kongfzLogin, searchProducts, searchFacet } from '@/utils/kongfz.js'
export default {
data() {
@ -993,11 +993,15 @@ export default {
// 2. -
const phpsessid = this.kongfzToken || uni.getStorageSync('kongfz_phpsessid') || ''
searchProducts(this.isbn, { phpsessid }).then(data => {
// +
Promise.all([
searchProducts(this.isbn, { phpsessid }),
searchFacet(this.isbn, { phpsessid })
]).then(([productsData, facetData]) => {
this.isLoading = false
if (data && data.total > 0) {
if (productsData && productsData.total > 0) {
// 12
const list = (data.list || []).slice(0, 12)
const list = (productsData.list || []).slice(0, 12)
this.productList = list.map(item => ({
image: item.imgBigUrl || '',
totalPrice: parseFloat((item.priceText || '0').replace(/[^\d.]/g, '')),
@ -1010,26 +1014,17 @@ export default {
pubDate: item.pubDateText || '',
bookId: item.id || ''
}))
// ///
const oldCount = list.filter(item => {
const qt = (item.qualityText || '').toLowerCase()
return !qt.includes('全新') && !qt.includes('新')
}).length
const newCount = list.filter(item => {
const qt = (item.qualityText || '').toLowerCase()
return qt.includes('全新') || qt.includes('新')
}).length
this.marketData = {
onSale: data.total || 0,
old: oldCount,
new: newCount,
sold: 0
}
} else {
this.marketData = { onSale: 0, old: 0, new: 0, sold: 0 }
}
// 使facet
this.marketData = {
onSale: productsData ? productsData.total : 0,
old: facetData ? facetData.oldCount : 0,
new: facetData ? facetData.newCount : 0,
sold: 0
}
}).catch(() => {
this.isLoading = false
this.marketData = { onSale: 0, old: 0, new: 0, sold: 0 }
})
},

View File

@ -30,7 +30,6 @@ export function login(username, password) {
// 提取PHPSESSID
let phpsessid = ''
// 尝试从 Set-Cookie 中提取
const setCookie = res.header['Set-Cookie'] || res.header['set-cookie']
if (setCookie) {
const match = setCookie.match(/PHPSESSID=([^;]+)/)
@ -39,7 +38,6 @@ export function login(username, password) {
}
}
// 判断登录是否成功
const responseText = typeof res.data === 'string' ? res.data : JSON.stringify(res.data)
const isSuccess = responseText.includes('login.kongfz.cn/Pc/Session/rsync') ||
responseText.includes('window.location.href') ||
@ -53,7 +51,6 @@ export function login(username, password) {
message: '登录成功'
})
} else if (res.statusCode === 200 && responseText.includes('errCode')) {
// 尝试解析错误信息
try {
const json = typeof res.data === 'string' ? JSON.parse(res.data) : res.data
if (json.errCode === 1001) {
@ -80,12 +77,57 @@ export function login(username, password) {
})
}
/**
* 搜索孔夫子商品品相统计全新/古旧等
* @param {string} keyword ISBN或书名
* @param {object} options {phpsessid, userArea}
* @returns {Promise<{newCount: number, oldCount: number, totalFound: number}>}
*/
export function searchFacet(keyword, options = {}) {
const { phpsessid = '', userArea = '1006000000' } = options
return new Promise((resolve, reject) => {
uni.request({
url: 'https://search.kongfz.com/pc-gw/search-web/client/pc/product/keyword/normal/facet',
method: 'GET',
data: {
dataType: 0,
keyword: keyword,
page: 1,
userArea: userArea
},
header: {
'Cookie': phpsessid ? `PHPSESSID=${phpsessid}` : ''
},
success: (res) => {
console.log('孔夫子统计响应:', res.statusCode, res.data)
if (res.statusCode === 200 && res.data && res.data.status === 1 && res.data.data) {
const qualities = res.data.data.qualities || []
let newCount = 0
let oldCount = 0
qualities.forEach(q => {
if (q.showName === '全新') {
newCount = parseInt(q.showValue || 0, 10)
}
if (q.showName === '古 | 旧 | 二手') {
oldCount = parseInt(q.showValue || 0, 10)
}
})
const totalFound = parseInt(res.data.data.totalFoundText || res.data.data.matchInfo?.totalFound || 0, 10)
resolve({ newCount, oldCount, totalFound })
} else {
resolve({ newCount: 0, oldCount: 0, totalFound: 0 })
}
},
fail: (err) => {
console.error('孔夫子统计失败:', err)
resolve({ newCount: 0, oldCount: 0, totalFound: 0 })
}
})
})
}
/**
* 获取商品列表分页
* @param {string} token PHPSESSID
* @param {object} params 筛选参数
* @param {function} onProgress 进度回调
* @returns {Promise<Array>}
*/
export function fetchItems(token, params = {}, onProgress) {
const items = []
@ -140,11 +182,6 @@ export function fetchItems(token, params = {}, onProgress) {
})
}
export default {
login,
fetchItems
}
/**
* 搜索孔夫子在售商品需要登录Cookie
* @param {string} keyword ISBN或书名
@ -190,3 +227,10 @@ export function searchProducts(keyword, options = {}) {
})
})
}
export default {
login,
searchFacet,
fetchItems,
searchProducts
}