更新
This commit is contained in:
BIN
src/assets/off.png
Normal file
BIN
src/assets/off.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
BIN
src/assets/right.png
Normal file
BIN
src/assets/right.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.6 KiB |
@@ -143,6 +143,7 @@ export default {
|
|||||||
},
|
},
|
||||||
handleClose() {
|
handleClose() {
|
||||||
this.copyFromDlgShow = false
|
this.copyFromDlgShow = false
|
||||||
|
this.addGroupDlgShow = false
|
||||||
},
|
},
|
||||||
handleSuccess() {
|
handleSuccess() {
|
||||||
this.copyFromDlgShow = false
|
this.copyFromDlgShow = false
|
||||||
|
|||||||
@@ -49,12 +49,12 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
|
|||||||
new Promise((resolve) => {
|
new Promise((resolve) => {
|
||||||
let headers = {};
|
let headers = {};
|
||||||
headers['Content-Type'] = 'text/html';
|
headers['Content-Type'] = 'text/html';
|
||||||
headers.cookie = getTemuCookie();
|
//headers.cookie = getTemuCookie();
|
||||||
Promise.resolve().then(() => fetch(request.url, {
|
Promise.resolve().then(() => fetch(request.url, {
|
||||||
'headers': headers,
|
'headers': headers,
|
||||||
'method': 'GET',
|
'method': 'GET',
|
||||||
'referrerPolicy': 'no-referrer',
|
'referrerPolicy': 'no-referrer',
|
||||||
'credentials': 'include',
|
//'credentials': 'include',
|
||||||
'mode': 'cors'
|
'mode': 'cors'
|
||||||
})).then((res) => {
|
})).then((res) => {
|
||||||
// 创建了一个数据读取器
|
// 创建了一个数据读取器
|
||||||
|
|||||||
@@ -35,10 +35,6 @@
|
|||||||
"id": "1",
|
"id": "1",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"path": "rules_1.json"
|
"path": "rules_1.json"
|
||||||
},{
|
|
||||||
"id": "2",
|
|
||||||
"enabled": true,
|
|
||||||
"path": "rules_2.json"
|
|
||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
"content_scripts": [
|
"content_scripts": [
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"manifest_version": 3,
|
"manifest_version": 3,
|
||||||
"name": "TEMU助手",
|
"name": "TEMU助手",
|
||||||
"description": "TEMU助手 - 自动化提高生产效率",
|
"description": "TEMU助手 - 自动化提高生产效率",
|
||||||
"version": "3.1.1",
|
"version": "3.1.3",
|
||||||
"background": {
|
"background": {
|
||||||
"service_worker": "/background.js"
|
"service_worker": "/background.js"
|
||||||
},
|
},
|
||||||
@@ -35,10 +35,6 @@
|
|||||||
"id": "1",
|
"id": "1",
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"path": "rules_1.json"
|
"path": "rules_1.json"
|
||||||
},{
|
|
||||||
"id": "2",
|
|
||||||
"enabled": true,
|
|
||||||
"path": "rules_2.json"
|
|
||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
"content_scripts": [
|
"content_scripts": [
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<ai-list class="list">
|
<ai-list class="list">
|
||||||
<ai-title
|
<ai-title
|
||||||
slot="title"
|
slot="title"
|
||||||
title="商品列表"
|
:title="'关键字('+`${content}` + ')商品列表'"
|
||||||
isShowBottomBorder isShowBack @onBackClick="cancel(false)">
|
isShowBottomBorder isShowBack @onBackClick="cancel(false)">
|
||||||
</ai-title>
|
</ai-title>
|
||||||
<template slot="content">
|
<template slot="content">
|
||||||
@@ -42,7 +42,10 @@
|
|||||||
<div style="display: inline; margin-right: 5px; float: right;">{{ item.saleTotal }}<sub style="margin-left: 2px;" v-html="getSalePercent(item.saleChange)"></sub></div>
|
<div style="display: inline; margin-right: 5px; float: right;">{{ item.saleTotal }}<sub style="margin-left: 2px;" v-html="getSalePercent(item.saleChange)"></sub></div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div style="display: inline">日均销量: <span style="color: red; font-weight: bold">{{ item.averageSale }}</span></div>
|
<div v-if="search.orderBy == '5'" style="display: inline">近3次日均销量: <span style="color: red; font-weight: bold">{{ item.days3AverageSale }}</span></div>
|
||||||
|
<div v-else-if="search.orderBy == '6'" style="display: inline">近7次日均销量: <span style="color: red; font-weight: bold">{{ item.days7AverageSale }}</span></div>
|
||||||
|
<div v-else-if="search.orderBy == '7'" style="display: inline">近15次日均销量: <span style="color: red; font-weight: bold">{{ item.days15AverageSale }}</span></div>
|
||||||
|
<div v-else style="display: inline">日均销量: <span style="color: red; font-weight: bold">{{ item.averageSale }}</span></div>
|
||||||
<ai-product-drop-down :params="item" :isShowDetail="true" :isShowAddFavorite="true" :isShowDelFavorite="false" @onGoDetail="goDetail(item.goodsId, item.monitorId)" style="float: right;"></ai-product-drop-down>
|
<ai-product-drop-down :params="item" :isShowDetail="true" :isShowAddFavorite="true" :isShowDelFavorite="false" @onGoDetail="goDetail(item.goodsId, item.monitorId)" style="float: right;"></ai-product-drop-down>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -86,6 +89,7 @@ import AiProductDropDown from '@/components/AiProductDropDown.vue';
|
|||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
monitorId: '',
|
monitorId: '',
|
||||||
|
content: '',
|
||||||
search: {
|
search: {
|
||||||
current: 1,
|
current: 1,
|
||||||
type: '1',
|
type: '1',
|
||||||
@@ -111,6 +115,15 @@ import AiProductDropDown from '@/components/AiProductDropDown.vue';
|
|||||||
},{
|
},{
|
||||||
value: '4',
|
value: '4',
|
||||||
label: '按日均销量排序'
|
label: '按日均销量排序'
|
||||||
|
},{
|
||||||
|
value: '5',
|
||||||
|
label: '按近3次采集平均销售量排序'
|
||||||
|
},{
|
||||||
|
value: '6',
|
||||||
|
label: '按近7次采集平均销售量排序'
|
||||||
|
},{
|
||||||
|
value: '7',
|
||||||
|
label: '按近15次采集平均销售量排序'
|
||||||
}],
|
}],
|
||||||
tableData: [],
|
tableData: [],
|
||||||
total: 0,
|
total: 0,
|
||||||
@@ -121,6 +134,7 @@ import AiProductDropDown from '@/components/AiProductDropDown.vue';
|
|||||||
|
|
||||||
created () {
|
created () {
|
||||||
this.monitorId = this.params.id
|
this.monitorId = this.params.id
|
||||||
|
this.content = this.params.content
|
||||||
this.getList()
|
this.getList()
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
<el-button type="text" @click="deleteMonitor(row.id)">删除</el-button>
|
<el-button type="text" @click="deleteMonitor(row.id)">删除</el-button>
|
||||||
<el-button type="text" @click="toUpdateMonitor(row)">修改</el-button>
|
<el-button type="text" @click="toUpdateMonitor(row)">修改</el-button>
|
||||||
<el-button type="text" @click="renew(row.id)">续费</el-button>
|
<el-button type="text" @click="renew(row.id)">续费</el-button>
|
||||||
<el-button type="text" @click="toDetail(row.id)">详情</el-button>
|
<el-button type="text" @click="toDetail(row.id, row.content)">详情</el-button>
|
||||||
<el-button type="text" @click="toBegin(row)">采集数据</el-button>
|
<el-button type="text" @click="toBegin(row)">采集数据</el-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -298,11 +298,12 @@ import { Message } from 'element-ui'
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
toDetail (id) {
|
toDetail (id, content) {
|
||||||
this.$emit('change', {
|
this.$emit('change', {
|
||||||
type: 'Detail',
|
type: 'Detail',
|
||||||
params: {
|
params: {
|
||||||
id: id || ''
|
id: id || '',
|
||||||
|
content: content
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<ai-list class="list" v-loading="isLoading" element-loading-text="拼命加载中">
|
<ai-list class="list" v-loading="isLoading" :element-loading-text="loadingText">
|
||||||
<ai-title
|
<ai-title
|
||||||
slot="title"
|
slot="title"
|
||||||
title="上架新品"
|
title="上架新品"
|
||||||
isShowBottomBorder>
|
isShowBottomBorder>
|
||||||
<template #rightBtn>
|
<template #rightBtn>
|
||||||
<div class="title-right">
|
<div class="title-right">
|
||||||
|
<el-checkbox v-model="isMutiSelect">开启多选</el-checkbox>
|
||||||
|
<el-button type="primary" round @click="toAddToGroup" v-if="isMutiSelect">加入分组</el-button>
|
||||||
上次更新时间:{{ lastUpdateTime }}
|
上次更新时间:{{ lastUpdateTime }}
|
||||||
<div>
|
<div>
|
||||||
<el-button type="button" :class="'el-button el-button--primary'" @click="beginSync">同步</el-button>
|
<el-button type="button" :class="'el-button el-button--primary'" @click="beginSync">同步</el-button>
|
||||||
@@ -27,7 +29,16 @@
|
|||||||
<template slot="content">
|
<template slot="content">
|
||||||
<div style="display: grid; grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr; gap: 16px;">
|
<div style="display: grid; grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr; gap: 16px;">
|
||||||
<el-card v-for="item in tableData" :key="item.id" :body-style="{ padding: '0px', margin: '5px' }">
|
<el-card v-for="item in tableData" :key="item.id" :body-style="{ padding: '0px', margin: '5px' }">
|
||||||
<el-image :src="item.imgUrl" class="image" :preview-src-list="[item.imgUrl]" />
|
<div :class="[{'img-background': item.isSelect}, 'img-box']" @click="onGoodsSelect(item)">
|
||||||
|
<div>
|
||||||
|
<el-image v-if="isMutiSelect" :src="item.imgUrl" :class="[{'mask': item.isSelect}, 'image']" />
|
||||||
|
<el-image v-else :src="item.imgUrl" class="image" :preview-src-list="[item.imgUrl]" />
|
||||||
|
</div>
|
||||||
|
<span class="icon-box" v-if="item.isSelect && isMutiSelect">
|
||||||
|
<img style="width: 20px; height: 20px" src="../../../../../assets/right.png">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div style="padding: 14px;">
|
<div style="padding: 14px;">
|
||||||
<div class="bottom clearfix">
|
<div class="bottom clearfix">
|
||||||
<div style="margin-bottom: 5px;">
|
<div style="margin-bottom: 5px;">
|
||||||
@@ -65,6 +76,31 @@
|
|||||||
<el-button type="primary" @click="gotoValid">前往验证</el-button>
|
<el-button type="primary" @click="gotoValid">前往验证</el-button>
|
||||||
</div>
|
</div>
|
||||||
</ai-dialog>
|
</ai-dialog>
|
||||||
|
<ai-dialog
|
||||||
|
title="添加到分组"
|
||||||
|
:visible.sync="addGroupDlgShow"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
width="790px"
|
||||||
|
customFooter
|
||||||
|
:append-to-body="true"
|
||||||
|
@close="addGroupDlgShow = false">
|
||||||
|
<el-form class="ai-form" :model="addGroupForm" label-width="120px" ref="addGroupForm">
|
||||||
|
<el-form-item label="分组" style="width: 100%;" prop="groupId" :rules="[{ required: true, message: '请选择分组', trigger: 'blur' }]">
|
||||||
|
<el-select style="width: 380px" v-model="addGroupForm.groupId" placeholder="请选择分组">
|
||||||
|
<el-option
|
||||||
|
v-for="item in groupList"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div class="dialog-footer" slot="footer">
|
||||||
|
<el-button @click="addGroupDlgShow = false">取消</el-button>
|
||||||
|
<el-button type="primary" @click="addToGroup">确定</el-button>
|
||||||
|
</div>
|
||||||
|
</ai-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -110,7 +146,16 @@ import { Message } from 'element-ui'
|
|||||||
lastUpdateTime: '',
|
lastUpdateTime: '',
|
||||||
|
|
||||||
treeNode: null,
|
treeNode: null,
|
||||||
treeResolve: null
|
treeResolve: null,
|
||||||
|
loadingText: '拼命加载中',
|
||||||
|
isMutiSelect: false,
|
||||||
|
|
||||||
|
addGroupDlgShow: false,
|
||||||
|
addGroupForm: {
|
||||||
|
groupId: '',
|
||||||
|
goodsId: ''
|
||||||
|
},
|
||||||
|
groupList: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -155,6 +200,7 @@ import { Message } from 'element-ui'
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
beginSync() {
|
beginSync() {
|
||||||
|
this.loadingText = '拼命加载中'
|
||||||
this.isLoading = true
|
this.isLoading = true
|
||||||
this.offset = 0
|
this.offset = 0
|
||||||
this.getNewProductData()
|
this.getNewProductData()
|
||||||
@@ -223,6 +269,7 @@ import { Message } from 'element-ui'
|
|||||||
this.getLastUpdateTime()
|
this.getLastUpdateTime()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
this.loadingText = `正在采集第(${this.currentIndex}/${this.goodsList.length})个商品的分类信息`
|
||||||
let res1 = null
|
let res1 = null
|
||||||
let opts = null
|
let opts = null
|
||||||
if (this.isOptApi) {
|
if (this.isOptApi) {
|
||||||
@@ -289,6 +336,9 @@ import { Message } from 'element-ui'
|
|||||||
size: this.form.size
|
size: this.form.size
|
||||||
}
|
}
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
|
res.data.records.map(item => {
|
||||||
|
item.isSelect = false
|
||||||
|
})
|
||||||
this.tableData = res.data.records
|
this.tableData = res.data.records
|
||||||
this.total = res.data.total
|
this.total = res.data.total
|
||||||
})
|
})
|
||||||
@@ -300,7 +350,41 @@ import { Message } from 'element-ui'
|
|||||||
},
|
},
|
||||||
gotoValid() {
|
gotoValid() {
|
||||||
window.open(this.errorUrl, '_blank');
|
window.open(this.errorUrl, '_blank');
|
||||||
}
|
},
|
||||||
|
onGoodsSelect(item) {
|
||||||
|
item.isSelect = !item.isSelect
|
||||||
|
},
|
||||||
|
toAddToGroup() {
|
||||||
|
let goodsObj = this.tableData.filter(item => {
|
||||||
|
return item.isSelect
|
||||||
|
})
|
||||||
|
if (goodsObj.length > 0) {
|
||||||
|
let goodsIds = goodsObj.map(i => {
|
||||||
|
return i.goodsId
|
||||||
|
})
|
||||||
|
this.$http.post('/api/newProductGroup/myPage?size=1000').then(res => {
|
||||||
|
if (res.code == 0) {
|
||||||
|
this.addGroupDlgShow = true
|
||||||
|
this.addGroupForm.goodsId = goodsIds.join(',')
|
||||||
|
this.groupList = res.data.records
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
Message.error("请选择商品")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
addToGroup() {
|
||||||
|
this.$refs.addGroupForm.validate((valid) => {
|
||||||
|
if (valid) {
|
||||||
|
this.$http.post('/api/newProductGroupDetail/add', {...this.addGroupForm}).then(res => {
|
||||||
|
if (res.code == 0) {
|
||||||
|
this.addGroupDlgShow = false
|
||||||
|
Message.success("商品成功添加到分组")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@@ -409,4 +493,36 @@ import { Message } from 'element-ui'
|
|||||||
.el-icon-arrow-down {
|
.el-icon-arrow-down {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.img-box {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
//父级设置 相对定位,让 icon设置绝对定位时能够以该父级为准。
|
||||||
|
position: relative;
|
||||||
|
// icon 设置 绝对定位 让其固定在你想要的合适位置。 样式可调整,自己定位即可。
|
||||||
|
.icon-box {
|
||||||
|
position: absolute;
|
||||||
|
top: 35%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mask {
|
||||||
|
background-color: #000;
|
||||||
|
opacity: 0.6;
|
||||||
|
|
||||||
|
.el-image__inner {
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .mask > img {
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.el-icon {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<ai-list class="list">
|
<ai-list class="list">
|
||||||
<ai-title
|
<ai-title
|
||||||
slot="title"
|
slot="title"
|
||||||
title="商品列表"
|
:title="'店铺ID(' + `${content}` + ')商品列表'"
|
||||||
isShowBottomBorder isShowBack @onBackClick="cancel(false)">
|
isShowBottomBorder isShowBack @onBackClick="cancel(false)">
|
||||||
</ai-title>
|
</ai-title>
|
||||||
<template slot="content">
|
<template slot="content">
|
||||||
@@ -28,6 +28,8 @@
|
|||||||
<el-input :clearable="true" size="small" style="width: 80px" v-model="search.saleEnd" ></el-input>
|
<el-input :clearable="true" size="small" style="width: 80px" v-model="search.saleEnd" ></el-input>
|
||||||
<label style="width:100px">仅显示最新:</label>
|
<label style="width:100px">仅显示最新:</label>
|
||||||
<ai-select :selectList="$dict.getDict('mall_yesno')" v-model="search.isNew"></ai-select>
|
<ai-select :selectList="$dict.getDict('mall_yesno')" v-model="search.isNew"></ai-select>
|
||||||
|
<label style="width:100px">仅显示下架:</label>
|
||||||
|
<ai-select :selectList="$dict.getDict('mall_yesno')" v-model="search.isOff"></ai-select>
|
||||||
</template>
|
</template>
|
||||||
<template #right>
|
<template #right>
|
||||||
<el-button type="primary" @click="search.current =1, getList()">查询</el-button>
|
<el-button type="primary" @click="search.current =1, getList()">查询</el-button>
|
||||||
@@ -35,7 +37,15 @@
|
|||||||
</ai-search-bar>
|
</ai-search-bar>
|
||||||
<div style="display: grid; grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr; gap: 16px;">
|
<div style="display: grid; grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr; gap: 16px;">
|
||||||
<el-card v-for="item in tableData" :key="item.id" :body-style="{ padding: '0px', margin: '5px' }">
|
<el-card v-for="item in tableData" :key="item.id" :body-style="{ padding: '0px', margin: '5px' }">
|
||||||
<span class="nav-label labelBadge">
|
<div :class="[{'img-background': item.isSelect}, 'img-box']" v-if="item.isOff == '1'">
|
||||||
|
<div>
|
||||||
|
<el-image :src="item.imgUrl" class="mask image" :preview-src-list="[item.imgUrl]" />
|
||||||
|
</div>
|
||||||
|
<span class="icon-box">
|
||||||
|
<img style="width: 50px; height: 50px" src="../../../../assets/off.png">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<span class="nav-label labelBadge" v-else>
|
||||||
<span class="ii" v-if="item.isNew == 1">新</span>
|
<span class="ii" v-if="item.isNew == 1">新</span>
|
||||||
<el-image :src="item.imgUrl" class="image" :preview-src-list="[item.imgUrl]" />
|
<el-image :src="item.imgUrl" class="image" :preview-src-list="[item.imgUrl]" />
|
||||||
</span>
|
</span>
|
||||||
@@ -46,7 +56,10 @@
|
|||||||
<div style="display: inline; margin-right: 5px; float: right;">{{ item.saleTotal }}<sub style="margin-left: 2px;" v-html="getSalePercent(item.saleChange)"></sub></div>
|
<div style="display: inline; margin-right: 5px; float: right;">{{ item.saleTotal }}<sub style="margin-left: 2px;" v-html="getSalePercent(item.saleChange)"></sub></div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div style="display: inline">日均销量: <span style="color: red; font-weight: bold">{{ item.averageSale }}</span></div>
|
<div v-if="search.orderBy == '5'" style="display: inline">近3次日均销量: <span style="color: red; font-weight: bold">{{ item.days3AverageSale }}</span></div>
|
||||||
|
<div v-else-if="search.orderBy == '6'" style="display: inline">近7次日均销量: <span style="color: red; font-weight: bold">{{ item.days7AverageSale }}</span></div>
|
||||||
|
<div v-else-if="search.orderBy == '7'" style="display: inline">近15次日均销量: <span style="color: red; font-weight: bold">{{ item.days15AverageSale }}</span></div>
|
||||||
|
<div v-else style="display: inline">日均销量: <span style="color: red; font-weight: bold">{{ item.averageSale }}</span></div>
|
||||||
<ai-product-drop-down :params="item" :isShowDetail="true" :isShowAddFavorite="true" :isShowDelFavorite="false" @onGoDetail="goDetail(item.goodsId, item.monitorId)" style="float: right;"></ai-product-drop-down>
|
<ai-product-drop-down :params="item" :isShowDetail="true" :isShowAddFavorite="true" :isShowDelFavorite="false" @onGoDetail="goDetail(item.goodsId, item.monitorId)" style="float: right;"></ai-product-drop-down>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -88,6 +101,7 @@ import AiProductDropDown from '@/components/AiProductDropDown.vue';
|
|||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
monitorId: '',
|
monitorId: '',
|
||||||
|
content: '',
|
||||||
search: {
|
search: {
|
||||||
current: 1,
|
current: 1,
|
||||||
type: '1',
|
type: '1',
|
||||||
@@ -97,7 +111,8 @@ import AiProductDropDown from '@/components/AiProductDropDown.vue';
|
|||||||
priceEnd: '',
|
priceEnd: '',
|
||||||
saleBegin: '',
|
saleBegin: '',
|
||||||
saleEnd: '',
|
saleEnd: '',
|
||||||
isNew: ''
|
isNew: '',
|
||||||
|
isOff: ''
|
||||||
},
|
},
|
||||||
orderBys: [{
|
orderBys: [{
|
||||||
value: '0',
|
value: '0',
|
||||||
@@ -114,6 +129,15 @@ import AiProductDropDown from '@/components/AiProductDropDown.vue';
|
|||||||
},{
|
},{
|
||||||
value: '4',
|
value: '4',
|
||||||
label: '按日均销量排序'
|
label: '按日均销量排序'
|
||||||
|
},{
|
||||||
|
value: '5',
|
||||||
|
label: '按近3次采集平均销售量排序'
|
||||||
|
},{
|
||||||
|
value: '6',
|
||||||
|
label: '按近7次采集平均销售量排序'
|
||||||
|
},{
|
||||||
|
value: '7',
|
||||||
|
label: '按近15次采集平均销售量排序'
|
||||||
}],
|
}],
|
||||||
tableData: [],
|
tableData: [],
|
||||||
total: 0,
|
total: 0,
|
||||||
@@ -125,6 +149,7 @@ import AiProductDropDown from '@/components/AiProductDropDown.vue';
|
|||||||
created () {
|
created () {
|
||||||
this.$dict.load('mall_yesno');
|
this.$dict.load('mall_yesno');
|
||||||
this.monitorId = this.params.id
|
this.monitorId = this.params.id
|
||||||
|
this.content = this.params.content
|
||||||
this.getList()
|
this.getList()
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -237,4 +262,37 @@ import AiProductDropDown from '@/components/AiProductDropDown.vue';
|
|||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.img-box {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
//父级设置 相对定位,让 icon设置绝对定位时能够以该父级为准。
|
||||||
|
position: relative;
|
||||||
|
// icon 设置 绝对定位 让其固定在你想要的合适位置。 样式可调整,自己定位即可。
|
||||||
|
.icon-box {
|
||||||
|
position: absolute;
|
||||||
|
top: 35%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mask {
|
||||||
|
background-color: #000;
|
||||||
|
opacity: 0.6;
|
||||||
|
|
||||||
|
.el-image__inner {
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .mask > img {
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.el-icon {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
<el-button type="text" @click="deleteMonitor(row.id)">删除</el-button>
|
<el-button type="text" @click="deleteMonitor(row.id)">删除</el-button>
|
||||||
<el-button type="text" @click="toUpdateMonitor(row)">修改</el-button>
|
<el-button type="text" @click="toUpdateMonitor(row)">修改</el-button>
|
||||||
<el-button type="text" @click="renew(row.id)">续费</el-button>
|
<el-button type="text" @click="renew(row.id)">续费</el-button>
|
||||||
<el-button type="text" @click="toDetail(row.id)">详情</el-button>
|
<el-button type="text" @click="toDetail(row.id, row.content)">详情</el-button>
|
||||||
<el-button type="text" @click="toBegin(row)">采集数据</el-button>
|
<el-button type="text" @click="toBegin(row)">采集数据</el-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -289,11 +289,12 @@ import {sendTemuAPIMessage} from '@/api/chromeApi'
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
toDetail (id) {
|
toDetail (id, content) {
|
||||||
this.$emit('change', {
|
this.$emit('change', {
|
||||||
type: 'Detail',
|
type: 'Detail',
|
||||||
params: {
|
params: {
|
||||||
id: id || ''
|
id: id || '',
|
||||||
|
content: content
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -92,7 +92,9 @@ import { Message } from 'element-ui'
|
|||||||
packageNumber: 0,
|
packageNumber: 0,
|
||||||
lastSyncDate: '',
|
lastSyncDate: '',
|
||||||
totalDelivery: 0,
|
totalDelivery: 0,
|
||||||
lastDeliveryTimestamp: 0
|
lastDeliveryTimestamp: 0,
|
||||||
|
|
||||||
|
deliveryOrderList: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -160,7 +162,7 @@ import { Message } from 'element-ui'
|
|||||||
}).then(res => {
|
}).then(res => {
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
this.lastDeliveryTimestamp = res.data?.lastDeliveryTime
|
this.lastDeliveryTimestamp = res.data?.lastDeliveryTime
|
||||||
this.getList()
|
this.toGetList()
|
||||||
} else {
|
} else {
|
||||||
this.isLoading = false
|
this.isLoading = false
|
||||||
Message.error("同步发货单失败")
|
Message.error("同步发货单失败")
|
||||||
@@ -181,103 +183,88 @@ import { Message } from 'element-ui'
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
getList () {
|
toGetList() {
|
||||||
let data = {
|
let data = {
|
||||||
"pageNo": this.currentPage,
|
pageNo: 1,
|
||||||
"pageSize": this.pageSize,
|
pageSize: 100,
|
||||||
"status": 2
|
status: 2
|
||||||
}
|
}
|
||||||
if (this.lastDeliveryTimestamp) {
|
if (this.lastDeliveryTimestamp) {
|
||||||
data.deliverTimeFrom = this.lastDeliveryTimestamp * 1000
|
data.deliverTimeFrom = this.lastDeliveryTimestamp * 1000
|
||||||
data.deliverTimeTo = Date.now()
|
data.deliverTimeTo = data.deliverTimeFrom + 30 * 86400 * 1000
|
||||||
}
|
}
|
||||||
sendChromeAPIMessage({
|
this.getList(data)
|
||||||
|
},
|
||||||
|
async getList (data) {
|
||||||
|
let res = await sendChromeAPIMessage({
|
||||||
url: 'bgSongbird-api/supplier/deliverGoods/management/pageQueryDeliveryOrders',
|
url: 'bgSongbird-api/supplier/deliverGoods/management/pageQueryDeliveryOrders',
|
||||||
needMallId: true,
|
needMallId: true,
|
||||||
mallId: this.search.mallId,
|
mallId: this.search.mallId,
|
||||||
anti: true,
|
anti: true,
|
||||||
data: data}).then((res) => {
|
data: data})
|
||||||
if (res.errorCode == 1000000) {
|
|
||||||
let list = []
|
|
||||||
for(let i = 0;i < res.result.list.length; i++) {
|
|
||||||
let item = res.result.list[i];
|
|
||||||
let data = {};
|
|
||||||
data.id = item.deliveryOrderSn
|
|
||||||
data.productName = item.subPurchaseOrderBasicVO.productName;
|
|
||||||
data.mallId = this.search.mallId
|
|
||||||
data.skcId = item.subPurchaseOrderBasicVO.productSkcId;
|
|
||||||
data.skcExtCode = item.subPurchaseOrderBasicVO.skcExtCode;
|
|
||||||
data.logisticName = item.expressCompany
|
|
||||||
data.logisticNumber = item.expressDeliverySn
|
|
||||||
data.totalNumber = item.deliverSkcNum
|
|
||||||
data.deliveryTime = timestampToTime(item.deliverTime)
|
|
||||||
|
|
||||||
list.push(data)
|
if (res.errorCode == 1000000) {
|
||||||
|
let list = []
|
||||||
|
for(let i = 0;i < res.result.list.length; i++) {
|
||||||
|
let item = res.result.list[i];
|
||||||
|
let data = {};
|
||||||
|
data.id = item.deliveryOrderSn
|
||||||
|
data.productName = item.subPurchaseOrderBasicVO.productName;
|
||||||
|
data.mallId = this.search.mallId
|
||||||
|
data.skcId = item.subPurchaseOrderBasicVO.productSkcId;
|
||||||
|
data.skcExtCode = item.subPurchaseOrderBasicVO.skcExtCode;
|
||||||
|
data.logisticName = item.expressCompany
|
||||||
|
data.logisticNumber = item.expressDeliverySn
|
||||||
|
data.totalNumber = item.deliverSkcNum
|
||||||
|
data.deliveryTime = timestampToTime(item.deliverTime)
|
||||||
|
|
||||||
this.packageNumber = this.packageNumber + item.receivePackageNum
|
list.push(data)
|
||||||
setTimeout(() => {
|
|
||||||
this.getSkuDetailList(data.id)
|
|
||||||
}, 200 * i)
|
|
||||||
}
|
|
||||||
|
|
||||||
this.$http.post('/api/deliveryOrder/add',list).then(res => {
|
let res1 = await sendChromeAPIMessage({
|
||||||
console.log(res)
|
url: 'bgSongbird-api/supplier/deliverGoods/management/queryDeliveryOrderPackageDetailInfo',
|
||||||
})
|
needMallId: true,
|
||||||
|
mallId: this.search.mallId,
|
||||||
|
anti: true,
|
||||||
|
data: {deliveryOrderSn: data.id}})
|
||||||
|
if (res1.errorCode == 1000000) {
|
||||||
|
let tempList = []
|
||||||
|
for(let i = 0;i < res1.result.deliveryOrderDetails.length; i++) {
|
||||||
|
let item1 = res1.result.deliveryOrderDetails[i]
|
||||||
|
|
||||||
if (this.pageSize == res.result.list.length) {
|
let data1 = {}
|
||||||
this.currentPage ++
|
data1.deliveryOrderId = data.id
|
||||||
setTimeout(() => {
|
data1.productSkuId = item1.productSkuId
|
||||||
this.getList()
|
data1.productSkuNumber = item1.deliverSkuNum
|
||||||
}, 1500)
|
|
||||||
} else {
|
tempList.push(data1)
|
||||||
if (this.currentPage == 1 && res.result.list.length == 0) {
|
|
||||||
this.isLoading = false
|
|
||||||
}
|
}
|
||||||
this.end()
|
await this.$http.post('/api/deliveryOrderDetail/add',tempList)
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
setTimeout(() => {
|
|
||||||
this.getList()
|
|
||||||
}, 1500)
|
|
||||||
}
|
}
|
||||||
}).catch(() => {
|
|
||||||
Message.error("同步发货单失败")
|
if (list.length > 0) {
|
||||||
|
await this.$http.post('/api/deliveryOrder/add',list)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.pageSize == res.result.list.length) {
|
||||||
|
data.pageNo ++
|
||||||
|
this.getList(data)
|
||||||
|
return
|
||||||
|
} else if (data.deliverTimeFrom && (Date.now() > (data.deliverTimeFrom + 30 * 86400 * 1000))) {
|
||||||
|
data.deliverTimeFrom = data.deliverTimeFrom + 30 * 86400 * 1000
|
||||||
|
data.deliverTimeTo = data.deliverTimeFrom + 30 * 86400 * 1000
|
||||||
|
data.pageNo = 1
|
||||||
|
this.getList(data)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
this.isLoading = false
|
this.isLoading = false
|
||||||
})
|
this.end()
|
||||||
},
|
} else {
|
||||||
getSkuDetailList(sn) {
|
setTimeout(() => {
|
||||||
sendChromeAPIMessage({
|
this.getList()
|
||||||
url: 'bgSongbird-api/supplier/deliverGoods/management/queryDeliveryOrderPackageDetailInfo',
|
}, 1500)
|
||||||
needMallId: true,
|
}
|
||||||
mallId: this.search.mallId,
|
|
||||||
anti: true,
|
|
||||||
data: {deliveryOrderSn: sn}}).then((res) => {
|
|
||||||
if (res.errorCode == 1000000) {
|
|
||||||
let list = []
|
|
||||||
for(let i = 0;i < res.result.deliveryOrderDetails.length; i++) {
|
|
||||||
let item = res.result.deliveryOrderDetails[i]
|
|
||||||
|
|
||||||
let data = {}
|
|
||||||
data.deliveryOrderId = sn
|
|
||||||
data.productSkuId = item.productSkuId
|
|
||||||
data.productSkuNumber = item.deliverSkuNum
|
|
||||||
|
|
||||||
list.push(data)
|
|
||||||
}
|
|
||||||
this.packageNumber = this.packageNumber - res.result.deliveryOrderDetails.length
|
|
||||||
console.log(this.packageNumber)
|
|
||||||
|
|
||||||
if (this.packageNumber < 10) {
|
|
||||||
this.isLoading = false
|
|
||||||
this.getInfo()
|
|
||||||
}
|
|
||||||
this.$http.post('/api/deliveryOrderDetail/add',list)
|
|
||||||
} else {
|
|
||||||
setTimeout(() => {
|
|
||||||
this.getSkuDetailList(sn)
|
|
||||||
}, 200)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ import { Message } from 'element-ui'
|
|||||||
if (startTime < this.form.date[0].getTime()) {
|
if (startTime < this.form.date[0].getTime()) {
|
||||||
startTime = this.form.date[0].getTime()
|
startTime = this.form.date[0].getTime()
|
||||||
}
|
}
|
||||||
this.getList(startTime, this.form.date[1].getTime() - 1)
|
this.getList(startTime, this.form.date[1].getTime() + 86400*1000 - 1)
|
||||||
},
|
},
|
||||||
getList (startTime, endTime) {
|
getList (startTime, endTime) {
|
||||||
sendChromeAPIMessage({
|
sendChromeAPIMessage({
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ import { Message } from 'element-ui'
|
|||||||
data: {
|
data: {
|
||||||
pageNo: this.currentPage,
|
pageNo: this.currentPage,
|
||||||
pageSize: 100,
|
pageSize: 100,
|
||||||
packageTimeEnd: this.form.date[1].getTime() - 1,
|
packageTimeEnd: this.form.date[1].getTime() + 86400*1000 - 1,
|
||||||
packageTimeStart: this.form.date[0].getTime()
|
packageTimeStart: this.form.date[0].getTime()
|
||||||
}}).then((res) => {
|
}}).then((res) => {
|
||||||
if (res.errorCode == 1000000) {
|
if (res.errorCode == 1000000) {
|
||||||
|
|||||||
Reference in New Issue
Block a user