daShangDao_miniProgram/unpackage/dist/dev/mp-weixin/pkgUpload/common/vendor.js
2026-06-15 16:37:57 +08:00

679 lines
26 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(global["webpackJsonp"] = global["webpackJsonp"] || []).push([["pkgUpload/common/vendor"],{
/***/ 255:
/*!****************************************************!*\
!*** D:/project/zhizhu/service/selectBookImage.js ***!
\****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(uni) {
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 4);
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.fetchOnSaleProducts = void 0;
var _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 36));
var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ 11));
var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ 5));
var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 38));
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
/**
* 获取在售商品信息
* @param {String} keyword - 搜索关键词ISBN或书名
* @param {String} sortType - 排序类型
* @param {String} conditionValue - 品相条件
* @param {String} cookies - 用户cookies
* @param {Object} options - 可选参数对象
* @param {String} options.publisher - 出版社(版权页比价时使用)
* @param {String} options.author - 作者(版权页比价时使用)
* @param {Boolean} options.autoSwitchAccount - 是否自动切换账号默认为true
* @param {Number} options.retryCount - 重试次数(内部使用)
* @returns {Promise<Array>} - 返回在售商品信息数组
*/
var fetchOnSaleProducts = /*#__PURE__*/function () {
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(keyword, sortType, conditionValue, cookies) {
var options,
autoSwitchAccount,
retryCount,
MAX_RETRY,
searchParams,
queryString,
apiUrl,
_yield$uni$request,
_yield$uni$request2,
err,
res,
newCookie,
responseData,
errorMsg,
isLoginExpired,
_newCookie,
products,
list,
limit,
i,
item,
shippingFee,
shippingFeeText,
shipping,
priceText,
cleanPrice,
totalPrice,
_args = arguments;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
options = _args.length > 4 && _args[4] !== undefined ? _args[4] : {};
_context.prev = 1;
// 设置默认值
autoSwitchAccount = options.autoSwitchAccount !== false; // 默认为true
retryCount = options.retryCount || 0;
MAX_RETRY = 3; // 最大重试次数
// 首先检查cookies是否存在不存在则尝试从本地获取最新的
if (!cookies) {
cookies = uni.getStorageSync('UserInfoCookies');
console.log('从本地存储获取cookies:', cookies);
}
// 如果还是没有cookies提示用户登录
if (cookies) {
_context.next = 9;
break;
}
uni.showToast({
title: '请先在设置页面登录孔网账号',
icon: 'none',
duration: 2000
});
return _context.abrupt("return", []);
case 9:
// 构建直接调用孔夫子API的参数
searchParams = {
searchType: 'category',
dataType: '0',
page: '1',
keyword: keyword,
sortType: sortType,
quality: conditionValue,
actionPath: 'sortType,quality',
quaSelect: '2',
userArea: '13003000000'
}; // 如果是版权页比价,添加出版社和作者参数
if (options.publisher) {
searchParams.press = options.publisher;
}
if (options.author) {
searchParams.author = options.author;
}
// 构建URL查询字符串
queryString = Object.entries(searchParams).map(function (_ref2) {
var _ref3 = (0, _slicedToArray2.default)(_ref2, 2),
key = _ref3[0],
value = _ref3[1];
return "".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(value));
}).join('&'); // 孔夫子API的URL
apiUrl = "https://search.kongfz.com/pc-gw/search-web/client/pc/product/keyword/list?".concat(queryString); // 调用孔夫子API
_context.next = 16;
return uni.request({
url: apiUrl,
method: 'GET',
header: {
'Cookie': "PHPSESSID=".concat(cookies)
}
});
case 16:
_yield$uni$request = _context.sent;
_yield$uni$request2 = (0, _slicedToArray2.default)(_yield$uni$request, 2);
err = _yield$uni$request2[0];
res = _yield$uni$request2[1];
if (!err) {
_context.next = 31;
break;
}
console.error('请求失败:', err);
// 如果允许自动切换账号且未超过最大重试次数
if (!(autoSwitchAccount && retryCount < MAX_RETRY)) {
_context.next = 29;
break;
}
console.log("\u5C1D\u8BD5\u5207\u6362\u8D26\u53F7\u5E76\u91CD\u8BD5(".concat(retryCount + 1, "/").concat(MAX_RETRY, ")..."));
_context.next = 26;
return tryNextAccount();
case 26:
newCookie = _context.sent;
if (!newCookie) {
_context.next = 29;
break;
}
return _context.abrupt("return", fetchOnSaleProducts(keyword, sortType, conditionValue, newCookie, _objectSpread(_objectSpread({}, options), {}, {
retryCount: retryCount + 1
})));
case 29:
uni.showToast({
title: '网络请求失败',
icon: 'none'
});
return _context.abrupt("return", []);
case 31:
// 处理接口返回的数据
console.log("res", res);
responseData = res.data || {}; // 避免 res.data 为 undefined
console.log("在售商品原始数据", responseData);
// 检查孔夫子API返回的状态
if (!(!responseData || responseData.status !== 1)) {
_context.next = 52;
break;
}
errorMsg = responseData.message || '请求出错';
console.error('孔夫子API错误:', errorMsg);
// 检查是否是登录失效
isLoginExpired = errorMsg.includes('登录') || errorMsg.includes('cookie') || responseData.errCode && ["102", "1000", "1001", "1002", "1003", "1004", "1005", "1006", "1007", "1008", "1009"].includes(responseData.errCode) || responseData.errType && ["102", "1000", "1001", "1002", "1003", "1004", "1005", "1006", "1007", "1008", "1009"].includes(responseData.errType);
console.log("isLoginExpired", isLoginExpired);
if (!isLoginExpired) {
_context.next = 50;
break;
}
if (!(autoSwitchAccount && retryCount < MAX_RETRY)) {
_context.next = 47;
break;
}
console.log("\u767B\u5F55\u5DF2\u8FC7\u671F\uFF0C\u5C1D\u8BD5\u5207\u6362\u8D26\u53F7\u5E76\u91CD\u8BD5(".concat(retryCount + 1, "/").concat(MAX_RETRY, ")..."));
_context.next = 44;
return tryNextAccount();
case 44:
_newCookie = _context.sent;
if (!_newCookie) {
_context.next = 47;
break;
}
return _context.abrupt("return", fetchOnSaleProducts(keyword, sortType, conditionValue, _newCookie, _objectSpread(_objectSpread({}, options), {}, {
retryCount: retryCount + 1
})));
case 47:
uni.showToast({
title: '登录已过期,请重新登录',
icon: 'none',
duration: 2000
});
_context.next = 51;
break;
case 50:
uni.showToast({
title: errorMsg,
icon: 'none',
duration: 2000
});
case 51:
return _context.abrupt("return", []);
case 52:
// 解析孔夫子API的响应数据
products = [];
if (responseData.data && responseData.data.itemResponse && responseData.data.itemResponse.list) {
list = responseData.data.itemResponse.list; // 只取前12条记录
limit = Math.min(12, list.length);
for (i = 0; i < limit; i++) {
item = list[i]; // 解析运费信息
shippingFee = 0;
shippingFeeText = '0';
if (item.postage && item.postage.shippingList && item.postage.shippingList.length > 0) {
shipping = item.postage.shippingList[0];
shippingFee = parseFloat(shipping.shippingFee || 0);
shippingFeeText = shipping.shippingFeeText || '0';
}
// 处理价格,去除非数字字符
priceText = item.priceText || '0';
cleanPrice = parseFloat(priceText.replace(/[^\d.]/g, ''));
totalPrice = Number((cleanPrice + shippingFee).toFixed(2));
products.push({
id: item.id || null,
bookName: item.title || '未知书名',
imageUrl: item.imgBigUrl ? item.imgBigUrl.trim() : null,
totalPrice: totalPrice,
bookPrice: cleanPrice,
shopName: item.shopName,
shippingFee: shippingFee,
shippingFeeText: shippingFeeText,
author: item.author || '未知作者',
publisher: item.press || '未知出版社',
qualityText: item.qualityText || '未知品相'
});
}
}
console.log('获取在售商品信息成功:', products);
return _context.abrupt("return", products);
case 58:
_context.prev = 58;
_context.t0 = _context["catch"](1);
console.error('获取在售商品信息失败:', _context.t0);
uni.showToast({
title: '获取在售商品信息失败',
icon: 'none'
});
return _context.abrupt("return", []);
case 63:
case "end":
return _context.stop();
}
}
}, _callee, null, [[1, 58]]);
}));
return function fetchOnSaleProducts(_x, _x2, _x3, _x4) {
return _ref.apply(this, arguments);
};
}();
/**
* 刷新cookies
* @param {String} username - 孔网账号
* @param {String} password - 孔网密码
* @returns {Promise<Object>} - 返回登录结果包含cookies
*/
exports.fetchOnSaleProducts = fetchOnSaleProducts;
var refreshCookies = /*#__PURE__*/function () {
var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(username, password) {
var initResponse, initCookies, loginData, loginResponse, loginCookies, allCookies;
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.prev = 0;
_context2.next = 3;
return uniRequestPromise({
url: 'https://login.kongfz.com/Pc/Login/account',
method: 'GET'
});
case 3:
initResponse = _context2.sent;
// 提取初始响应中的Cookie
initCookies = extractCookiesFromHeaders(initResponse.header); // 第二步:发送登录请求,携带用户名和密码
loginData = {
loginName: username,
loginPass: password
};
_context2.next = 8;
return uniRequestPromise({
url: 'https://login.kongfz.com/Pc/Login/account',
method: 'POST',
data: loginData,
header: {
'Content-Type': 'application/x-www-form-urlencoded',
'Cookie': formatCookieHeader(initCookies)
}
});
case 8:
loginResponse = _context2.sent;
// 提取登录响应中的Cookie
loginCookies = extractCookiesFromHeaders(loginResponse.header); // 合并所有Cookie
allCookies = _objectSpread(_objectSpread({}, initCookies), loginCookies);
return _context2.abrupt("return", {
success: true,
cookies: allCookies,
responseData: loginResponse.data
});
case 14:
_context2.prev = 14;
_context2.t0 = _context2["catch"](0);
console.error('刷新cookies失败:', _context2.t0);
return _context2.abrupt("return", {
success: false,
error: _context2.t0.message || '登录请求发生错误'
});
case 18:
case "end":
return _context2.stop();
}
}
}, _callee2, null, [[0, 14]]);
}));
return function refreshCookies(_x5, _x6) {
return _ref4.apply(this, arguments);
};
}();
/**
* 尝试切换到下一个可用账号并获取新cookie
* @returns {Promise<String|null>} 返回新的cookie或null如果无法切换账号
*/
var tryNextAccount = /*#__PURE__*/function () {
var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
var accountsStr, accounts, currentIndex, nextIndex, nextAccount, result, newCookie;
return _regenerator.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.prev = 0;
// 获取账号列表
accountsStr = uni.getStorageSync('accounts');
if (accountsStr) {
_context3.next = 5;
break;
}
console.log('没有可用的备用账号');
return _context3.abrupt("return", null);
case 5:
accounts = JSON.parse(accountsStr);
if (!(!accounts || accounts.length === 0)) {
_context3.next = 9;
break;
}
console.log('账号列表为空');
return _context3.abrupt("return", null);
case 9:
// 获取当前活跃账号索引
currentIndex = uni.getStorageSync('currentAccountIndex');
currentIndex = currentIndex !== '' ? parseInt(currentIndex) : 0;
// 计算下一个账号索引
nextIndex = (currentIndex + 1) % accounts.length; // 如果循环回到了当前账号,说明只有一个账号或已经尝试了所有账号
if (!(nextIndex === currentIndex)) {
_context3.next = 15;
break;
}
console.log('已尝试所有账号,无法继续切换');
return _context3.abrupt("return", null);
case 15:
// 获取下一个账号信息
nextAccount = accounts[nextIndex]; // 清除原有cookie
uni.removeStorageSync('cookies');
uni.removeStorageSync('UserInfoCookies');
// 使用下一个账号登录
_context3.next = 20;
return refreshCookies(nextAccount.username, nextAccount.password);
case 20:
result = _context3.sent;
if (!(result.success && result.cookies && result.cookies.PHPSESSID)) {
_context3.next = 35;
break;
}
// 更新账号状态
accounts.forEach(function (acc) {
return acc.isActive = false;
});
accounts[nextIndex].isActive = true;
// 保存cookie
newCookie = result.cookies.PHPSESSID;
uni.setStorageSync('cookies', newCookie);
uni.setStorageSync('UserInfoCookies', newCookie);
uni.setStorageSync('KongfzUserName', nextAccount.username);
// 保存更新后的账号列表和当前索引
uni.setStorageSync('accounts', JSON.stringify(accounts));
uni.setStorageSync('currentAccountIndex', nextIndex);
// 发送自定义事件通知页面更新账号状态
uni.$emit('accountSwitched', {
index: nextIndex,
username: nextAccount.username
});
console.log("\u6210\u529F\u5207\u6362\u5230\u8D26\u53F7: ".concat(nextAccount.username));
return _context3.abrupt("return", newCookie);
case 35:
console.log('切换账号失败,尝试下一个账号');
// 递归尝试下一个账号
accounts[nextIndex].isActive = false;
uni.setStorageSync('accounts', JSON.stringify(accounts));
uni.setStorageSync('currentAccountIndex', nextIndex);
return _context3.abrupt("return", tryNextAccount());
case 40:
_context3.next = 46;
break;
case 42:
_context3.prev = 42;
_context3.t0 = _context3["catch"](0);
console.error('切换账号出错:', _context3.t0);
return _context3.abrupt("return", null);
case 46:
case "end":
return _context3.stop();
}
}
}, _callee3, null, [[0, 42]]);
}));
return function tryNextAccount() {
return _ref5.apply(this, arguments);
};
}();
/**
* 将 uni.request 转换为 Promise 形式
*/
var uniRequestPromise = function uniRequestPromise(options) {
return new Promise(function (resolve, reject) {
uni.request(_objectSpread(_objectSpread({}, options), {}, {
success: function success(res) {
return resolve(res);
},
fail: function fail(err) {
return reject(err);
}
}));
});
};
/**
* 从响应头中提取 Cookies
*/
var extractCookiesFromHeaders = function extractCookiesFromHeaders(headers) {
var cookies = {};
var cookieHeaders = headers['Set-Cookie'] || headers['set-cookie'];
if (!cookieHeaders) return cookies;
// 处理可能是数组或字符串的 Cookie 头
var cookieList = Array.isArray(cookieHeaders) ? cookieHeaders : [cookieHeaders];
cookieList.forEach(function (cookieStr) {
// 提取 cookie 名值对(忽略路径、过期时间等属性)
var cookieParts = cookieStr.split(';')[0].split('=');
if (cookieParts.length >= 2) {
cookies[cookieParts[0].trim()] = cookieParts[1].trim();
}
});
return cookies;
};
/**
* 将 Cookie 对象格式化为请求头字符串
*/
var formatCookieHeader = function formatCookieHeader(cookies) {
return Object.entries(cookies).map(function (_ref6) {
var _ref7 = (0, _slicedToArray2.default)(_ref6, 2),
key = _ref7[0],
value = _ref7[1];
return "".concat(key, "=").concat(value);
}).join('; ');
};
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 2)["default"]))
/***/ }),
/***/ 256:
/*!*****************************************!*\
!*** D:/project/zhizhu/utils/upload.js ***!
\*****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(uni) {
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.uploadFile = void 0;
// File upload utility
/**
* Upload a file to the server
* @param {Object} options - Upload options
* @param {string} options.url - Upload URL
* @param {string} options.filePath - Local file path
* @param {Object} options.formData - Additional form data
* @returns {Promise} Upload result
*/
var uploadFile = function uploadFile(options) {
return new Promise(function (resolve, reject) {
uni.uploadFile({
url: options.url,
filePath: options.filePath,
name: options.name || 'file',
formData: options.formData || {},
success: function success(res) {
if (res.statusCode === 200) {
try {
var data = JSON.parse(res.data);
resolve(data);
} catch (e) {
resolve(res.data);
}
} else {
reject(new Error("Upload failed with status ".concat(res.statusCode)));
}
},
fail: function fail(err) {
reject(err);
}
});
});
};
exports.uploadFile = uploadFile;
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 2)["default"]))
/***/ }),
/***/ 273:
/*!**********************************************************!*\
!*** D:/project/zhizhu/service/getAuthorAndPublisher.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(uni) {
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 4);
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getAuthorAndPublisher = exports.default = void 0;
var _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 36));
var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 38));
/**
* 根据关键词获取作者和出版社数据
* @param {string} keyword - 搜索关键词
* @param {string} cookies - 用户cookies
* @returns {Promise<{authors: string[], publishers: string[]}>} 返回作者和出版社数据
*/
var getAuthorAndPublisher = /*#__PURE__*/function () {
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(keyword, cookies) {
var response, data, authors, publishers, authorArray, publisherArray;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
_context.next = 3;
return new Promise(function (resolve, reject) {
uni.request({
url: 'https://api.buzhiyushu.cn/zhishu/shopGoods/getAuthorAndPublisher',
method: 'GET',
data: {
keyword: keyword,
cookies: cookies
},
success: function success(res) {
console.log('API原始响应:', JSON.stringify(res, null, 2));
resolve(res);
},
fail: function fail(err) {
console.error('API请求失败:', err);
reject(new Error(err.errMsg || '网络请求失败'));
}
});
});
case 3:
response = _context.sent;
if (!(!response.data || response.data.code !== 200)) {
_context.next = 7;
break;
}
console.log('API返回数据无效或请求失败');
return _context.abrupt("return", {
authors: [],
publishers: []
});
case 7:
data = response.data.data || []; // 提取作者和出版社数据
authors = new Set();
publishers = new Set();
data.forEach(function (item) {
// 处理作者数据
if (item.author) {
var author = item.author.trim();
if (author) {
authors.add(author);
}
}
// 处理出版社数据
if (item.press) {
var press = item.press.trim();
if (press) {
publishers.add(press);
}
}
});
// 转换为数组并过滤掉空值
authorArray = Array.from(authors).filter(Boolean).slice(0, 10);
publisherArray = Array.from(publishers).filter(Boolean).slice(0, 10);
console.log('提取的作者列表(前10条):', authorArray);
console.log('提取的出版社列表(前10条):', publisherArray);
return _context.abrupt("return", {
authors: authorArray,
publishers: publisherArray
});
case 18:
_context.prev = 18;
_context.t0 = _context["catch"](0);
console.error('获取作者和出版社数据出错:', _context.t0);
return _context.abrupt("return", {
authors: [],
publishers: []
});
case 22:
case "end":
return _context.stop();
}
}
}, _callee, null, [[0, 18]]);
}));
return function getAuthorAndPublisher(_x, _x2) {
return _ref.apply(this, arguments);
};
}();
/**
* 导出所有函数
*/
exports.getAuthorAndPublisher = getAuthorAndPublisher;
var _default = {
getAuthorAndPublisher: getAuthorAndPublisher
};
exports.default = _default;
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 2)["default"]))
/***/ })
}]);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pkgUpload/common/vendor.js.map