店小秘多平台铺货配方:7 平台建品脚本 + 静默拦截诊断法 + 项目状态
- TikTok/Shopee/速卖通/Walmart 各 46-47 条已在待发布 - Ozon 47 条已建、改价 40/47 - SHEIN 配方跑通第一条;Temu 差「预览图」一步 - 核心产出:MYJ.message.error 钩子诊断法(解开了三个平台的保存静默拦截) - 含下一轮提示词 NEXT-ROUND-PROMPT.md
This commit is contained in:
commit
f5720ad613
94 files changed
+21561
No files matched your search
@@ -0,0 +1,320 @@
|
||||
{
|
||||
"708420302844": {
|
||||
"price": "36.45",
|
||||
"readback": "API 回读: {\"n\":12,\"prices\":[43.74,43.74,43.74],\"sales\":[36.45,36.45,36.45]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true,
|
||||
"sales": [
|
||||
36.45,
|
||||
36.45,
|
||||
36.45
|
||||
]
|
||||
},
|
||||
"547183997437": {
|
||||
"price": "36.45",
|
||||
"readback": "API 回读: {\"n\":1,\"prices\":[43.74],\"sales\":[36.45]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true,
|
||||
"sales": [
|
||||
36.45
|
||||
]
|
||||
},
|
||||
"657617635303": {
|
||||
"price": "36.45",
|
||||
"readback": "API 回读: {\"n\":5,\"prices\":[43.74,43.74,43.74],\"sales\":[36.45,36.45,36.45]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true,
|
||||
"sales": [
|
||||
36.45,
|
||||
36.45,
|
||||
36.45
|
||||
]
|
||||
},
|
||||
"641673262387": {
|
||||
"price": "36.45",
|
||||
"readback": "API 回读: {\"n\":32,\"prices\":[43.74,43.74,43.74],\"sales\":[36.45,36.45,36.45]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true,
|
||||
"sales": [
|
||||
36.45,
|
||||
36.45,
|
||||
36.45
|
||||
]
|
||||
},
|
||||
"764423265986": {
|
||||
"price": "34.0",
|
||||
"readback": "{\"n\":2,\"prices\":[2.81,2.81],\"sales\":[2.81,2.81]}",
|
||||
"save": "[]",
|
||||
"ok": false,
|
||||
"sales": [
|
||||
2.81,
|
||||
2.81
|
||||
]
|
||||
},
|
||||
"735147938123": {
|
||||
"price": "34.0",
|
||||
"readback": "API 回读: {\"n\":1,\"prices\":[40.8],\"sales\":[34]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true,
|
||||
"sales": [
|
||||
34.0
|
||||
]
|
||||
},
|
||||
"548459586741": {
|
||||
"price": "34.0",
|
||||
"readback": "API 回读: {\"n\":1,\"prices\":[40.8],\"sales\":[34]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true,
|
||||
"sales": [
|
||||
34.0
|
||||
]
|
||||
},
|
||||
"610164857063": {
|
||||
"price": "34.0",
|
||||
"readback": "API 回读: {\"n\":10,\"prices\":[40.8,40.8,40.8],\"sales\":[34,34,34]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true,
|
||||
"sales": [
|
||||
34.0,
|
||||
34.0,
|
||||
34.0
|
||||
]
|
||||
},
|
||||
"676236596821": {
|
||||
"price": "34.0",
|
||||
"readback": "API 回读: {\"n\":1,\"prices\":[40.8],\"sales\":[34]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true,
|
||||
"sales": [
|
||||
34.0
|
||||
]
|
||||
},
|
||||
"866537106657": {
|
||||
"price": "34.0",
|
||||
"readback": "{\"n\":9,\"prices\":[1.14,1.27,1.27],\"sales\":[1.14,1.27,1.27]}",
|
||||
"save": "[]",
|
||||
"ok": false
|
||||
},
|
||||
"591994902720": {
|
||||
"price": "31.91",
|
||||
"readback": "API 回读: {\"n\":4,\"prices\":[38.3,38.3,38.3],\"sales\":[31.91,31.91,31.91]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"836512561982": {
|
||||
"price": "30.2",
|
||||
"readback": "API 回读: {\"n\":4,\"prices\":[36.24,36.24,36.24],\"sales\":[30.2,30.2,30.2]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"714492799386": {
|
||||
"price": "28.36",
|
||||
"readback": "API 回读: {\"n\":7,\"prices\":[34.04,34.04,34.04],\"sales\":[28.36,28.36,28.36]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"902440558099": {
|
||||
"price": "27.27",
|
||||
"readback": "API 回读: {\"n\":1,\"prices\":[32.73],\"sales\":[27.27]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"823838532886": {
|
||||
"price": "27.0",
|
||||
"readback": "API 回读: {\"n\":6,\"prices\":[32.4,32.4,32.4],\"sales\":[27,27,27]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"661190598139": {
|
||||
"price": "26.64",
|
||||
"readback": "API 回读: {\"n\":28,\"prices\":[31.97,31.97,31.97],\"sales\":[26.64,26.64,26.64]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"685456757807": {
|
||||
"price": "26.64",
|
||||
"readback": "API 回读: {\"n\":26,\"prices\":[31.97,31.97,31.97],\"sales\":[26.64,26.64,26.64]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"893592264148": {
|
||||
"price": "26.45",
|
||||
"readback": "API 回读: {\"n\":6,\"prices\":[31.74,31.74,31.74],\"sales\":[26.45,26.45,26.45]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"639409307567": {
|
||||
"price": "25.82",
|
||||
"readback": "{\"n\":2,\"prices\":[5.48,5.48],\"sales\":[5.48,5.48]}",
|
||||
"save": "[]",
|
||||
"ok": false
|
||||
},
|
||||
"896469995553": {
|
||||
"price": "25.18",
|
||||
"readback": "API 回读: {\"n\":2,\"prices\":[30.22,30.22],\"sales\":[25.18,25.18]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"719391062058": {
|
||||
"price": "23.71",
|
||||
"readback": "API 回读: {\"n\":6,\"prices\":[28.46,28.46,28.46],\"sales\":[23.71,23.71,23.71]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"698782391248": {
|
||||
"price": "23.6",
|
||||
"readback": "API 回读: {\"n\":1,\"prices\":[28.32],\"sales\":[23.6]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"823560564174": {
|
||||
"price": "23.11",
|
||||
"readback": "API 回读: {\"n\":9,\"prices\":[27.74,27.74,27.74],\"sales\":[23.11,23.11,23.11]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"857781294719": {
|
||||
"price": "22.73",
|
||||
"readback": "API 回读: {\"n\":3,\"prices\":[27.28,27.28,27.28],\"sales\":[22.73,22.73,22.73]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"707826905566": {
|
||||
"price": "22.55",
|
||||
"readback": "API 回读: {\"n\":4,\"prices\":[27.06,27.06,27.06],\"sales\":[22.55,22.55,22.55]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"1027332215847": {
|
||||
"price": "22.55",
|
||||
"readback": "API 回读: {\"n\":10,\"prices\":[27.06,27.06,27.06],\"sales\":[22.55,22.55,22.55]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"607330049419": {
|
||||
"price": "22.24",
|
||||
"readback": "API 回读: {\"n\":9,\"prices\":[26.69,26.69,26.69],\"sales\":[22.24,22.24,22.24]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"944470567338": {
|
||||
"price": "22.18",
|
||||
"readback": "API 回读: {\"n\":2,\"prices\":[26.62,26.62],\"sales\":[22.18,22.18]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"787261097583": {
|
||||
"price": "22.18",
|
||||
"readback": "{\"n\":12,\"prices\":[3.48,3.48,3.48],\"sales\":[3.48,3.48,3.48]}",
|
||||
"save": "[]",
|
||||
"ok": false
|
||||
},
|
||||
"694637537727": {
|
||||
"price": "22.18",
|
||||
"readback": "API 回读: {\"n\":5,\"prices\":[26.62,26.62,26.62],\"sales\":[22.18,22.18,22.18]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"621300323670": {
|
||||
"price": "21.89",
|
||||
"readback": "API 回读: {\"n\":1,\"prices\":[26.27],\"sales\":[21.89]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"682195499823": {
|
||||
"price": "21.35",
|
||||
"readback": "{\"n\":3,\"prices\":[3.01,3.01,3.01],\"sales\":[3.01,3.01,3.01]}",
|
||||
"save": "[]",
|
||||
"ok": false
|
||||
},
|
||||
"623011262210": {
|
||||
"price": "21.27",
|
||||
"readback": "API 回读: {\"n\":1,\"prices\":[25.53],\"sales\":[21.27]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"833753630925": {
|
||||
"price": "21.27",
|
||||
"readback": "API 回读: {\"n\":1,\"prices\":[25.53],\"sales\":[21.27]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"854003999648": {
|
||||
"price": "21.15",
|
||||
"readback": "API 回读: {\"n\":27,\"prices\":[25.38,25.38,25.38],\"sales\":[21.15,21.15,21.15]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"703822717997": {
|
||||
"price": "20.77",
|
||||
"readback": "API 回读: {\"n\":2,\"prices\":[24.93,24.93],\"sales\":[20.77,20.77]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"863524134410": {
|
||||
"price": "20.73",
|
||||
"readback": "API 回读: {\"n\":1,\"prices\":[24.88],\"sales\":[20.73]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"853414558425": {
|
||||
"price": "20.45",
|
||||
"readback": "API 回读: {\"n\":22,\"prices\":[24.54,24.54,24.54],\"sales\":[20.45,20.45,20.45]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"750271307455": {
|
||||
"price": "20.18",
|
||||
"readback": "API 回读: {\"n\":3,\"prices\":[24.22,24.22,24.22],\"sales\":[20.18,20.18,20.18]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"726442972676": {
|
||||
"price": "20.09",
|
||||
"readback": "API 回读: {\"n\":24,\"prices\":[24.11,24.11,24.11],\"sales\":[20.09,20.09,20.09]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"953869908708": {
|
||||
"price": "19.91",
|
||||
"readback": "API 回读: {\"n\":21,\"prices\":[23.9,23.9,23.9],\"sales\":[19.91,19.91,19.91]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"775057912118": {
|
||||
"price": "19.84",
|
||||
"readback": "API 回读: {\"n\":26,\"prices\":[23.81,23.81,23.81],\"sales\":[19.84,19.84,19.84]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"863384503032": {
|
||||
"price": "19.82",
|
||||
"readback": "{\"n\":1,\"prices\":[2.21],\"sales\":[2.21]}",
|
||||
"save": "[]",
|
||||
"ok": false
|
||||
},
|
||||
"739147684759": {
|
||||
"price": "19.64",
|
||||
"readback": "{\"n\":3,\"prices\":[2.07,2.07,2.07],\"sales\":[2.07,2.07,2.07]}",
|
||||
"save": "[]",
|
||||
"ok": false
|
||||
},
|
||||
"774494945453": {
|
||||
"price": "19.45",
|
||||
"readback": "{\"n\":1,\"prices\":[23.34],\"sales\":[19.45]}",
|
||||
"save": "[\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"997450831819": {
|
||||
"price": "18.07",
|
||||
"readback": "{\"n\":1,\"prices\":[21.69],\"sales\":[18.07]}",
|
||||
"save": "[\"POST\"]",
|
||||
"ok": true
|
||||
},
|
||||
"601964534137": {
|
||||
"price": "17.91",
|
||||
"readback": "API 回读: {\"n\":5,\"prices\":[21.5,21.5,21.5],\"sales\":[17.91,17.91,17.91]}",
|
||||
"save": "保存请求: [\"POST\"]",
|
||||
"ok": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
[
|
||||
{
|
||||
"oid": "866537106657",
|
||||
"red": [
|
||||
"变种图片",
|
||||
"请视频上传7天内完成产品发布",
|
||||
"请填写SKU",
|
||||
"请填写售价",
|
||||
"包装尺寸请输入1~13500之间的数值!",
|
||||
"重量请输入1~1000000之间的数值!",
|
||||
"变种图不能为空"
|
||||
]
|
||||
},
|
||||
{
|
||||
"oid": "639409307567",
|
||||
"red": [
|
||||
"变种图片",
|
||||
"请视频上传7天内完成产品发布",
|
||||
"请填写SKU",
|
||||
"请填写售价",
|
||||
"包装尺寸请输入1~13500之间的数值!",
|
||||
"重量请输入1~1000000之间的数值!",
|
||||
"变种图不能为空"
|
||||
]
|
||||
},
|
||||
{
|
||||
"oid": "787261097583",
|
||||
"red": [
|
||||
"变种图片",
|
||||
"请视频上传7天内完成产品发布",
|
||||
"请填写SKU",
|
||||
"请填写售价",
|
||||
"包装尺寸请输入1~13500之间的数值!",
|
||||
"重量请输入1~1000000之间的数值!",
|
||||
"变种图不能为空"
|
||||
]
|
||||
},
|
||||
{
|
||||
"oid": "682195499823",
|
||||
"red": [
|
||||
"变种图片",
|
||||
"请视频上传7天内完成产品发布",
|
||||
"请填写SKU",
|
||||
"请填写售价",
|
||||
"包装尺寸请输入1~13500之间的数值!",
|
||||
"重量请输入1~1000000之间的数值!",
|
||||
"变种图不能为空"
|
||||
]
|
||||
},
|
||||
{
|
||||
"oid": "863384503032",
|
||||
"red": [
|
||||
"变种图片",
|
||||
"请视频上传7天内完成产品发布",
|
||||
"请填写SKU",
|
||||
"请填写售价",
|
||||
"包装尺寸请输入1~13500之间的数值!",
|
||||
"重量请输入1~1000000之间的数值!",
|
||||
"变种图不能为空"
|
||||
]
|
||||
},
|
||||
{
|
||||
"oid": "739147684759",
|
||||
"red": [
|
||||
"变种图片",
|
||||
"请视频上传7天内完成产品发布",
|
||||
"请填写SKU",
|
||||
"请填写售价",
|
||||
"包装尺寸请输入1~13500之间的数值!",
|
||||
"重量请输入1~1000000之间的数值!",
|
||||
"变种图不能为空"
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,331 @@
|
||||
[
|
||||
{
|
||||
"oid": "708420302844",
|
||||
"pid": "184807701684297335",
|
||||
"price": 36.45,
|
||||
"w": 130,
|
||||
"cost": 10.0
|
||||
},
|
||||
{
|
||||
"oid": "547183997437",
|
||||
"pid": "184807701684297331",
|
||||
"price": 36.45,
|
||||
"w": 130,
|
||||
"cost": 10.0
|
||||
},
|
||||
{
|
||||
"oid": "657617635303",
|
||||
"pid": "184807701684297329",
|
||||
"price": 36.45,
|
||||
"w": 130,
|
||||
"cost": 10.0
|
||||
},
|
||||
{
|
||||
"oid": "641673262387",
|
||||
"pid": "184807701684297327",
|
||||
"price": 36.45,
|
||||
"w": 130,
|
||||
"cost": 10.0
|
||||
},
|
||||
{
|
||||
"oid": "764423265986",
|
||||
"pid": "184807701684297353",
|
||||
"price": 34.0,
|
||||
"w": 100,
|
||||
"cost": 10.0
|
||||
},
|
||||
{
|
||||
"oid": "735147938123",
|
||||
"pid": "184807701684297347",
|
||||
"price": 34.0,
|
||||
"w": 100,
|
||||
"cost": 10.0
|
||||
},
|
||||
{
|
||||
"oid": "548459586741",
|
||||
"pid": "184807701684297343",
|
||||
"price": 34.0,
|
||||
"w": 100,
|
||||
"cost": 10.0
|
||||
},
|
||||
{
|
||||
"oid": "610164857063",
|
||||
"pid": "184807701684297341",
|
||||
"price": 34.0,
|
||||
"w": 100,
|
||||
"cost": 10.0
|
||||
},
|
||||
{
|
||||
"oid": "676236596821",
|
||||
"pid": "184807701684297339",
|
||||
"price": 34.0,
|
||||
"w": 100,
|
||||
"cost": 10.0
|
||||
},
|
||||
{
|
||||
"oid": "866537106657",
|
||||
"pid": "184807701684297333",
|
||||
"price": 34.0,
|
||||
"w": 100,
|
||||
"cost": 10.0
|
||||
},
|
||||
{
|
||||
"oid": "591994902720",
|
||||
"pid": "184807701684307653",
|
||||
"price": 31.91,
|
||||
"w": 130,
|
||||
"cost": 7.5
|
||||
},
|
||||
{
|
||||
"oid": "836512561982",
|
||||
"pid": "184807701684307649",
|
||||
"price": 30.2,
|
||||
"w": 130,
|
||||
"cost": 6.56
|
||||
},
|
||||
{
|
||||
"oid": "714492799386",
|
||||
"pid": "184807701684307651",
|
||||
"price": 28.36,
|
||||
"w": 100,
|
||||
"cost": 6.9
|
||||
},
|
||||
{
|
||||
"oid": "902440558099",
|
||||
"pid": "184807701684308549",
|
||||
"price": 27.27,
|
||||
"w": 130,
|
||||
"cost": 4.95
|
||||
},
|
||||
{
|
||||
"oid": "823838532886",
|
||||
"pid": "184807701684308547",
|
||||
"price": 27.0,
|
||||
"w": 130,
|
||||
"cost": 4.8
|
||||
},
|
||||
{
|
||||
"oid": "661190598139",
|
||||
"pid": "184807701684297355",
|
||||
"price": 26.64,
|
||||
"w": 10,
|
||||
"cost": 10.0
|
||||
},
|
||||
{
|
||||
"oid": "685456757807",
|
||||
"pid": "184807701684297349",
|
||||
"price": 26.64,
|
||||
"w": 10,
|
||||
"cost": 10.0
|
||||
},
|
||||
{
|
||||
"oid": "893592264148",
|
||||
"pid": "184807701684308575",
|
||||
"price": 26.45,
|
||||
"w": 130,
|
||||
"cost": 4.5
|
||||
},
|
||||
{
|
||||
"oid": "639409307567",
|
||||
"pid": "184807701684308551",
|
||||
"price": 25.82,
|
||||
"w": 100,
|
||||
"cost": 5.5
|
||||
},
|
||||
{
|
||||
"oid": "896469995553",
|
||||
"pid": "184807701684308597",
|
||||
"price": 25.18,
|
||||
"w": 130,
|
||||
"cost": 3.8
|
||||
},
|
||||
{
|
||||
"oid": "719391062058",
|
||||
"pid": "184807701684308589",
|
||||
"price": 23.71,
|
||||
"w": 130,
|
||||
"cost": 2.99
|
||||
},
|
||||
{
|
||||
"oid": "698782391248",
|
||||
"pid": "184807701684308545",
|
||||
"price": 23.6,
|
||||
"w": 100,
|
||||
"cost": 4.28
|
||||
},
|
||||
{
|
||||
"oid": "823560564174",
|
||||
"pid": "184807701684308537",
|
||||
"price": 23.11,
|
||||
"w": 130,
|
||||
"cost": 2.66
|
||||
},
|
||||
{
|
||||
"oid": "857781294719",
|
||||
"pid": "184807701684308587",
|
||||
"price": 22.73,
|
||||
"w": 130,
|
||||
"cost": 2.45
|
||||
},
|
||||
{
|
||||
"oid": "707826905566",
|
||||
"pid": "184807701684308543",
|
||||
"price": 22.55,
|
||||
"w": 100,
|
||||
"cost": 3.7
|
||||
},
|
||||
{
|
||||
"oid": "1027332215847",
|
||||
"pid": "184807701684308541",
|
||||
"price": 22.55,
|
||||
"w": 100,
|
||||
"cost": 3.7
|
||||
},
|
||||
{
|
||||
"oid": "607330049419",
|
||||
"pid": "184807701684308573",
|
||||
"price": 22.24,
|
||||
"w": 130,
|
||||
"cost": 2.18
|
||||
},
|
||||
{
|
||||
"oid": "944470567338",
|
||||
"pid": "184807701684308595",
|
||||
"price": 22.18,
|
||||
"w": 100,
|
||||
"cost": 3.5
|
||||
},
|
||||
{
|
||||
"oid": "787261097583",
|
||||
"pid": "184807701684308593",
|
||||
"price": 22.18,
|
||||
"w": 100,
|
||||
"cost": 3.5
|
||||
},
|
||||
{
|
||||
"oid": "694637537727",
|
||||
"pid": "184807701684307645",
|
||||
"price": 22.18,
|
||||
"w": 130,
|
||||
"cost": 2.15
|
||||
},
|
||||
{
|
||||
"oid": "621300323670",
|
||||
"pid": "184807701684308533",
|
||||
"price": 21.89,
|
||||
"w": 130,
|
||||
"cost": 1.99
|
||||
},
|
||||
{
|
||||
"oid": "682195499823",
|
||||
"pid": "184807701684308539",
|
||||
"price": 21.35,
|
||||
"w": 100,
|
||||
"cost": 3.04
|
||||
},
|
||||
{
|
||||
"oid": "623011262210",
|
||||
"pid": "184807701684307647",
|
||||
"price": 21.27,
|
||||
"w": 100,
|
||||
"cost": 3.0
|
||||
},
|
||||
{
|
||||
"oid": "833753630925",
|
||||
"pid": "184807701684308591",
|
||||
"price": 21.27,
|
||||
"w": 100,
|
||||
"cost": 3.0
|
||||
},
|
||||
{
|
||||
"oid": "854003999648",
|
||||
"pid": "184807701684308571",
|
||||
"price": 21.15,
|
||||
"w": 130,
|
||||
"cost": 1.58
|
||||
},
|
||||
{
|
||||
"oid": "703822717997",
|
||||
"pid": "184807701684307641",
|
||||
"price": 20.77,
|
||||
"w": 130,
|
||||
"cost": 1.375
|
||||
},
|
||||
{
|
||||
"oid": "863524134410",
|
||||
"pid": "184807701684307643",
|
||||
"price": 20.73,
|
||||
"w": 100,
|
||||
"cost": 2.7
|
||||
},
|
||||
{
|
||||
"oid": "853414558425",
|
||||
"pid": "184807701684307655",
|
||||
"price": 20.45,
|
||||
"w": 130,
|
||||
"cost": 1.2
|
||||
},
|
||||
{
|
||||
"oid": "750271307455",
|
||||
"pid": "184807701684308581",
|
||||
"price": 20.18,
|
||||
"w": 130,
|
||||
"cost": 1.05
|
||||
},
|
||||
{
|
||||
"oid": "726442972676",
|
||||
"pid": "184807701684308579",
|
||||
"price": 20.09,
|
||||
"w": 130,
|
||||
"cost": 1.0
|
||||
},
|
||||
{
|
||||
"oid": "953869908708",
|
||||
"pid": "184807701684307639",
|
||||
"price": 19.91,
|
||||
"w": 130,
|
||||
"cost": 0.9
|
||||
},
|
||||
{
|
||||
"oid": "775057912118",
|
||||
"pid": "184807701684308577",
|
||||
"price": 19.84,
|
||||
"w": 130,
|
||||
"cost": 0.86
|
||||
},
|
||||
{
|
||||
"oid": "863384503032",
|
||||
"pid": "184807701684308585",
|
||||
"price": 19.82,
|
||||
"w": 100,
|
||||
"cost": 2.2
|
||||
},
|
||||
{
|
||||
"oid": "739147684759",
|
||||
"pid": "184807701684308535",
|
||||
"price": 19.64,
|
||||
"w": 100,
|
||||
"cost": 2.1
|
||||
},
|
||||
{
|
||||
"oid": "774494945453",
|
||||
"pid": "184807701684308583",
|
||||
"price": 19.45,
|
||||
"w": 100,
|
||||
"cost": 2.0
|
||||
},
|
||||
{
|
||||
"oid": "997450831819",
|
||||
"pid": "184807701684307657",
|
||||
"price": 18.07,
|
||||
"w": 100,
|
||||
"cost": 1.24
|
||||
},
|
||||
{
|
||||
"oid": "601964534137",
|
||||
"pid": "184807701684308531",
|
||||
"price": 17.91,
|
||||
"w": 100,
|
||||
"cost": 1.15
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,100 @@
|
||||
import { newTarget, CDP, SAN } from '/tmp/cdp3.mjs';
|
||||
import fs from 'fs';
|
||||
|
||||
/* ── Ozon 改价(≤500g 档,售价 = 合计成本 ÷ (1 − 20% − 利润率))──
|
||||
node ozprice_set.mjs <pid> <priceCNY> [dry]
|
||||
dry = 只填不保存 */
|
||||
|
||||
const PID = process.argv[2];
|
||||
const PRICE = process.argv[3];
|
||||
const DRY = process.argv[4] === 'dry';
|
||||
if (!PID || !PRICE) { console.log('用法: node ozprice_set.mjs <pid> <priceCNY> [dry]'); process.exit(1); }
|
||||
|
||||
const wait = ms => new Promise(z => setTimeout(z, ms));
|
||||
const log = (...a) => console.log(' ', ...a);
|
||||
|
||||
const tl = await (await fetch('http://127.0.0.1:9223/json/list')).json();
|
||||
let k = 0;
|
||||
for (const t of tl.filter(x => x.type === 'page' && x.url.includes('ozonProduct/edit'))) { await fetch(`http://127.0.0.1:9223/json/close/${t.id}`).catch(() => {}); k++; }
|
||||
if (k) { log(`清理残留编辑页 ${k} 个`); await wait(1100); }
|
||||
|
||||
const t = await newTarget('about:blank');
|
||||
const c = await CDP.connect(t.webSocketDebuggerUrl);
|
||||
await c.send('Page.enable'); await c.send('Runtime.enable');
|
||||
await c.send('Page.navigate', { url: `https://www.dianxiaomi.com/web/ozonProduct/edit?id=${PID}` });
|
||||
await wait(32000);
|
||||
for (let i = 0; i < 8; i++) {
|
||||
const x = await c.evalJS(`(()=>{const ms=[...document.querySelectorAll('.ant-modal')].filter(e=>e.offsetParent!==null);
|
||||
if(!ms.length)return'n'; ms.forEach(m=>{const cb=m.querySelector('.ant-modal-close'); if(cb&&cb.offsetParent!==null)cb.click();}); return 'c';})()`);
|
||||
if (x === 'n') break; await wait(1000);
|
||||
}
|
||||
await wait(2000);
|
||||
|
||||
// 1. 找 SKU 表 + 价格列
|
||||
const map = await c.evalJS(`(()=>{
|
||||
const tbls=[...document.querySelectorAll('table')].filter(t=>t.offsetParent!==null);
|
||||
for(let ti=0;ti<tbls.length;ti++){
|
||||
const ths=[...tbls[ti].querySelectorAll('th')].map(e=>(e.innerText||'').replace(/\\s+/g,' ').trim());
|
||||
if(!ths.some(h=>/价格|售价|₽|RUB/i.test(h))) continue;
|
||||
const rows=[...tbls[ti].querySelectorAll('tbody tr')].filter(x=>x.querySelectorAll('input').length);
|
||||
if(!rows.length) continue;
|
||||
return JSON.stringify({ti, ths, rowCount: rows.length,
|
||||
vals: rows.slice(0,3).map(tr=>[...tr.querySelectorAll('input')].map(i=>(i.value||'').slice(0,12)))});
|
||||
}
|
||||
return 'no-table';})()`);
|
||||
log('SKU 表:', SAN(String(map)).slice(0, 500));
|
||||
if (map === 'no-table') { log('❌ 找不到价格表'); process.exit(1); }
|
||||
const M = JSON.parse(String(map));
|
||||
|
||||
const IDX_PRICE = M.ths.findIndex(h => /价格|售价|₽|RUB/i.test(h) && !/划线|原价|市场价|最低/i.test(h));
|
||||
const IDX_OLD = M.ths.findIndex(h => /划线|原价|市场价/i.test(h));
|
||||
const OLD_PRICE = (Math.ceil(Number(PRICE) * 1.2 * 100) / 100).toFixed(2);
|
||||
log('价格列:', IDX_PRICE, JSON.stringify(M.ths[IDX_PRICE]), '| 原价列:', IDX_OLD, IDX_OLD >= 0 ? JSON.stringify(M.ths[IDX_OLD]) : '(无)', '→ 原价设为', OLD_PRICE);
|
||||
|
||||
// 2. 填价
|
||||
const r = await c.evalJS(`(()=>{
|
||||
const setV=(el,v)=>{ Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,'value').set.call(el,String(v));
|
||||
el.dispatchEvent(new Event('input',{bubbles:true})); el.dispatchEvent(new Event('change',{bubbles:true})); el.dispatchEvent(new Event('blur',{bubbles:true})); };
|
||||
const tbls=[...document.querySelectorAll('table')].filter(t=>t.offsetParent!==null);
|
||||
const tbl=tbls[${M.ti}]; if(!tbl)return'no-table';
|
||||
const rows=[...tbl.querySelectorAll('tbody tr')].filter(x=>x.querySelectorAll('input').length);
|
||||
let n=0;
|
||||
rows.forEach(tr=>{ const tds=[...tr.querySelectorAll('td')]; const td=tds[${IDX_PRICE}]; if(!td)return;
|
||||
const inp=td.querySelector('input'); if(!inp)return; setV(inp,${JSON.stringify(PRICE)}); n++;
|
||||
const od=tds[${IDX_OLD}]; if(od){ const oi=od.querySelector('input'); if(oi) setV(oi, ${JSON.stringify(OLD_PRICE)}); } });
|
||||
return 'set:'+n+'/'+rows.length;})()`);
|
||||
log('填价:', r);
|
||||
await wait(2500);
|
||||
|
||||
// 3. 回读
|
||||
const back = await c.evalJS(`(()=>{const tbls=[...document.querySelectorAll('table')].filter(t=>t.offsetParent!==null);
|
||||
const tbl=tbls[${M.ti}]; const rows=[...tbl.querySelectorAll('tbody tr')].filter(x=>x.querySelectorAll('input').length);
|
||||
return JSON.stringify(rows.slice(0,5).map(tr=>[...tr.querySelectorAll('td')].map(td=>{const i=td.querySelector('input'); return i?i.value:'';})));})()`);
|
||||
log('回读:', SAN(String(back)).slice(0, 300));
|
||||
|
||||
if (DRY) { log('dry-run,不保存'); process.exit(0); }
|
||||
|
||||
// 4. 保存(优先「保存并移入待发布」,与 fixone3 一致)
|
||||
await c.evalJS(`window.scrollTo(0,0)`); await wait(700);
|
||||
const reqs = [];
|
||||
c.on(m => { if (m.method === 'Network.requestWillBeSent') { const u = m.params.request.url; if (/ozonProduct\/add\.json/.test(u)) reqs.push(m.params.request.method); } });
|
||||
await c.send('Network.enable').catch(()=>{});
|
||||
const sv = await c.evalJS(`(()=>{const xs=[...document.querySelectorAll('button')].filter(e=>e.offsetParent!==null);
|
||||
let x=xs.find(e=>/保存并移入待发布/.test((e.innerText||'').trim())); let tag='保存并移入待发布';
|
||||
if(!x){ x=xs.find(e=>/^保\\s*存$/.test((e.innerText||'').trim())); tag='保存'; }
|
||||
if(!x) return 'nf';
|
||||
for(const ev of ['mousedown','mouseup','click']) x.dispatchEvent(new MouseEvent(ev,{bubbles:true,cancelable:true,view:window})); return tag;})()`);
|
||||
log('保存按钮:', sv);
|
||||
await wait(13000);
|
||||
await c.evalJS(`(()=>{const ms=[...document.querySelectorAll('.ant-modal')].filter(e=>e.offsetParent!==null);
|
||||
for(const m of ms){const b=[...m.querySelectorAll('button')].find(x=>/确定|确认/.test(x.innerText||'')); if(b)b.click();} return 1;})()`);
|
||||
await wait(5000);
|
||||
log('保存请求:', JSON.stringify(reqs));
|
||||
|
||||
// 5. API 回读(权威)
|
||||
const back2 = await c.evalJS(`(async()=>{const rr=await fetch('/api/ozonProduct/add.json?id=${PID}&_t='+Date.now(),{headers:{'X-Requested-With':'XMLHttpRequest','Cache-Control':'no-cache'}});
|
||||
const tx=await rr.text(); if(!tx.startsWith('{'))return'(err)';
|
||||
const p=(JSON.parse(tx).data||{}).product||{}; const vl=p.variantList||[];
|
||||
return JSON.stringify({n:vl.length, prices:vl.slice(0,3).map(v=>v.price), sales:vl.slice(0,3).map(v=>v.salePrice)});})()`, true);
|
||||
log('★ API 回读:', SAN(String(back2)).slice(0, 260));
|
||||
process.exit(0);
|
||||
Reference in new issue
Block a user