1
This commit is contained in:
97
src/utils/publishHelper.js
Normal file
97
src/utils/publishHelper.js
Normal file
@@ -0,0 +1,97 @@
|
||||
import { addToFavorites, getBySkuid } from "@/api/system/favoriteProduct";
|
||||
|
||||
function parseMaybeJson(str) {
|
||||
if (!str || typeof str !== 'string') return null;
|
||||
try { return JSON.parse(str); } catch(e) { return null; }
|
||||
}
|
||||
|
||||
function getNested(obj, path) {
|
||||
try {
|
||||
if (!obj) return null;
|
||||
const segs = path.split('.');
|
||||
let cur = obj;
|
||||
for (const k of segs) {
|
||||
if (cur && typeof cur === 'object' && k in cur) cur = cur[k]; else return null;
|
||||
}
|
||||
return cur;
|
||||
} catch(e) { return null; }
|
||||
}
|
||||
|
||||
export function parsePublishResponse(res) {
|
||||
try {
|
||||
const d = res && res.data ? res.data : res;
|
||||
const productId = d?.product_id ?? d?.productId ?? d?.data?.product_id ?? d?.data?.productId ?? null;
|
||||
const productStatus = d?.product_status ?? d?.productStatus ?? d?.data?.product_status ?? d?.data?.productStatus ?? null;
|
||||
const outerId = d?.outer_id ?? d?.outerId ?? d?.data?.outer_id ?? d?.data?.outerId ?? null;
|
||||
return { productId, productStatus, outerId };
|
||||
} catch(e) { return { productId: null, productStatus: null, outerId: null }; }
|
||||
}
|
||||
|
||||
function buildFavoriteFromTransfer(product, pub) {
|
||||
const spuid = product?.spuid || product?.skuId || product?.skuid || '';
|
||||
return {
|
||||
skuid: spuid,
|
||||
productName: product?.skuName || product?.title || '',
|
||||
shopName: product?.shopName || '',
|
||||
productUrl: product?.url || '',
|
||||
productImage: Array.isArray(product?.images) && product.images.length ? product.images[0] : '',
|
||||
price: (product?.price != null ? String(product.price) : (product?.lowestCouponPrice != null ? String(product.lowestCouponPrice) : '')),
|
||||
commissionInfo: product?.commissionShare ? `${product.commissionShare}%` : (product?.commission != null ? String(product.commission) : ''),
|
||||
remark: `自动添加 - 发品时间: ${new Date().toLocaleString()}${pub.outerId ? `, 商家编码: ${pub.outerId}` : ''}`,
|
||||
productId: pub.productId,
|
||||
productStatus: pub.productStatus
|
||||
};
|
||||
}
|
||||
|
||||
function buildFavoriteFromXb(child, pub) {
|
||||
const jq = parseMaybeJson(child?.jsonQueryResult);
|
||||
const spuid = (jq && (jq.spuid || getNested(jq, 'spuid'))) || child?.spuid || child?.skuid || '';
|
||||
const shopName = getNested(jq, 'shopInfo.shopName') || child?.shopName || '';
|
||||
const shopId = getNested(jq, 'shopInfo.shopId') || child?.shopId || '';
|
||||
const productUrl = jq?.materialUrl || jq?.url || child?.materialUrl || child?.productUrl || '';
|
||||
const productImage = getNested(jq, 'imageInfo.mainImage') || child?.productImage || '';
|
||||
const price = child?.firstPrice || getNested(jq, 'priceInfo.lowestCouponPrice') || getNested(jq, 'priceInfo.price') || '';
|
||||
const commissionInfo = getNested(jq, 'commissionInfo.commissionShare') ? `${getNested(jq, 'commissionInfo.commissionShare')}%` : (getNested(jq, 'commissionInfo.commission') || '');
|
||||
return {
|
||||
skuid: spuid,
|
||||
productName: child?.skuName || child?.productName || '',
|
||||
shopName,
|
||||
shopId,
|
||||
productUrl,
|
||||
productImage,
|
||||
price,
|
||||
commissionInfo,
|
||||
productId: pub.productId,
|
||||
productStatus: pub.productStatus,
|
||||
remark: `自动添加 - 发品时间: ${new Date().toLocaleString()}${pub.outerId ? `, 商家编码: ${pub.outerId}` : ''}`
|
||||
};
|
||||
}
|
||||
|
||||
export async function addToFavoritesAfterPublishFromTransfer(product, res) {
|
||||
const pub = parsePublishResponse(res);
|
||||
const spuid = product?.spuid || product?.skuId || product?.skuid || '';
|
||||
if (!spuid) return { success: false, reason: 'no_spuid' };
|
||||
try {
|
||||
const exist = await getBySkuid(spuid);
|
||||
if (exist && exist.data) return { success: true, skipped: true };
|
||||
} catch(e) {}
|
||||
const payload = buildFavoriteFromTransfer(product, pub);
|
||||
const addRes = await addToFavorites(payload);
|
||||
return { success: addRes && addRes.code === 200 };
|
||||
}
|
||||
|
||||
export async function addToFavoritesAfterPublishFromXb(child, res) {
|
||||
const pub = parsePublishResponse(res);
|
||||
const jq = parseMaybeJson(child?.jsonQueryResult);
|
||||
const spuid = (jq && (jq.spuid || getNested(jq, 'spuid'))) || child?.spuid || child?.skuid || '';
|
||||
if (!spuid) return { success: false, reason: 'no_spuid' };
|
||||
try {
|
||||
const exist = await getBySkuid(spuid);
|
||||
if (exist && exist.data) return { success: true, skipped: true };
|
||||
} catch(e) {}
|
||||
const payload = buildFavoriteFromXb(child, pub);
|
||||
const addRes = await addToFavorites(payload);
|
||||
return { success: addRes && addRes.code === 200 };
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user