From 6f3c2a05cc7767a2bac8869e1be040b24e719d33 Mon Sep 17 00:00:00 2001 From: liushiwei <499672082@qq.com> Date: Tue, 26 Sep 2023 13:52:52 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + src/assets/css/index.scss | 17 +++ src/components/AiSearchBar.vue | 1 - src/view/product/NiubiCopy.vue | 239 +++++++++++++++++++++++++++++++-- 4 files changed, 245 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 828c8ac..44dcfff 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "@antv/g2plot": "^2.4.31", + "@toast-ui/vue-image-editor": "^3.15.2", "axios": "^1.4.0", "core-js": "^3.8.3", "dayjs": "^1.11.9", diff --git a/src/assets/css/index.scss b/src/assets/css/index.scss index daf9b43..d83bfa9 100644 --- a/src/assets/css/index.scss +++ b/src/assets/css/index.scss @@ -452,3 +452,20 @@ img { .fill { flex: 1; } + +.search-item { + display: flex; + align-items: center; + margin: 0 16px 12px; + + label { + font-size: 14px; + color: #666; + font-weight: 500; + width: 100px; + } + + input { + width: 240px; + } +} \ No newline at end of file diff --git a/src/components/AiSearchBar.vue b/src/components/AiSearchBar.vue index 20aca83..45c74cf 100644 --- a/src/components/AiSearchBar.vue +++ b/src/components/AiSearchBar.vue @@ -8,7 +8,6 @@ - diff --git a/src/view/product/NiubiCopy.vue b/src/view/product/NiubiCopy.vue index 8bb157f..25dcb8d 100644 --- a/src/view/product/NiubiCopy.vue +++ b/src/view/product/NiubiCopy.vue @@ -11,11 +11,30 @@
+ + + import {sendChromeAPIMessage, sendChromeWebReqMessage} from '@/api/chromeApi' +import 'tui-image-editor/dist/tui-image-editor.css' +import 'tui-color-picker/dist/tui-color-picker.css' import { Message } from 'element-ui' +const ImageEditor = require('tui-image-editor') + const localeZh = { + // override default English locale to your custom + Crop: '裁剪', + ZoomIn: '放大', + ZoomOut: '缩小', + Hand: '拖拽', + History: '历史记录', + DeleteAll: '全部删除', + Delete: '删除', + Undo: '撤销', + Redo: '反撤销', + Reset: '重置', + Flip: '镜像', + Rotate: '旋转', + Draw: '画', + Shape: '形状标注', + Icon: '图标标注', + Text: '文字标注', + Mask: '遮罩', + Filter: '滤镜', + Bold: '加粗', + Italic: '斜体', + Underline: '下划线', + Left: '左对齐', + Center: '居中', + Right: '右对齐', + Color: '颜色', + 'Text size': '字体大小', + Custom: '自定义', + Square: '正方形', + Apply: '应用', + Cancel: '取消', + 'Flip X': 'X 轴', + 'Flip Y': 'Y 轴', + Range: '区间', + Stroke: '描边', + Fill: '填充', + Circle: '圆', + Triangle: '三角', + Rectangle: '矩形', + Free: '曲线', + Straight: '直线', + Arrow: '箭头', + 'Arrow-2': '箭头2', + 'Arrow-3': '箭头3', + 'Star-1': '星星1', + 'Star-2': '星星2', + Polygon: '多边形', + Location: '定位', + Heart: '心形', + Bubble: '气泡', + 'Custom icon': '自定义图标', + 'Load Mask Image': '加载蒙层图片', + Grayscale: '灰度', + Blur: '模糊', + Sharpen: '锐化', + Emboss: '浮雕', + 'Remove White': '除去白色', + Distance: '距离', + Brightness: '亮度', + Noise: '噪音', + 'Color Filter': '彩色滤镜', + Sepia: '棕色', + Sepia2: '棕色2', + Invert: '负片', + Pixelate: '像素化', + Threshold: '阈值', + Tint: '色调', + Multiply: '正片叠底', + Blend: '混合色' + // etc... + } + const customTheme = { + // image 左上角度图片 + 'common.bi.image': '', // 在这里换上你喜欢的logo图片 + 'common.bisize.width': '0px', + 'common.bisize.height': '0px', + 'common.backgroundImage': 'none', + 'common.backgroundColor': '#f3f4f6', + 'common.border': '1px solid #444', + + // header + 'header.backgroundImage': 'none', + 'header.backgroundColor': '#f3f4f6', + 'header.border': '0px', + 'header.display': 'none', + + // load button + 'loadButton.backgroundColor': '#fff', + 'loadButton.border': '1px solid #ddd', + 'loadButton.color': '#222', + 'loadButton.fontFamily': 'NotoSans, sans-serif', + 'loadButton.fontSize': '12px', + 'loadButton.display': 'none', // 可以直接隐藏掉 + + // download button + 'downloadButton.backgroundColor': '#fdba3b', + 'downloadButton.border': '1px solid #fdba3b', + 'downloadButton.color': '#fff', + 'downloadButton.fontFamily': 'NotoSans, sans-serif', + 'downloadButton.fontSize': '12px', + 'downloadButton.display': 'none', // 可以直接隐藏掉 + + // icons default + 'menu.normalIcon.color': '#8a8a8a', + 'menu.activeIcon.color': '#555555', + 'menu.disabledIcon.color': '#434343', + 'menu.hoverIcon.color': '#e9e9e9', + 'submenu.normalIcon.color': '#8a8a8a', + 'submenu.activeIcon.color': '#e9e9e9', + + 'menu.iconSize.width': '24px', + 'menu.iconSize.height': '24px', + 'submenu.iconSize.width': '32px', + 'submenu.iconSize.height': '32px', + + // submenu primary color + 'submenu.backgroundColor': '#1e1e1e', + 'submenu.partition.color': '#858585', + + // submenu labels + 'submenu.normalLabel.color': '#858585', + 'submenu.normalLabel.fontWeight': 'lighter', + 'submenu.activeLabel.color': '#fff', + 'submenu.activeLabel.fontWeight': 'lighter', + + // checkbox style + 'checkbox.border': '1px solid #ccc', + 'checkbox.backgroundColor': '#fff', + + // rango style + 'range.pointer.color': '#fff', + 'range.bar.color': '#666', + 'range.subbar.color': '#d1d1d1', + + 'range.disabledPointer.color': '#414141', + 'range.disabledBar.color': '#282828', + 'range.disabledSubbar.color': '#414141', + + 'range.value.color': '#fff', + 'range.value.fontWeight': 'lighter', + 'range.value.fontSize': '11px', + 'range.value.border': '1px solid #353535', + 'range.value.backgroundColor': '#151515', + 'range.title.color': '#fff', + 'range.title.fontWeight': 'lighter', + + // colorpicker style + 'colorpicker.button.border': '1px solid #1e1e1e', + 'colorpicker.title.color': '#fff' + } + export default { name: 'CopyProduct', @@ -80,8 +254,8 @@ import { Message } from 'element-ui' search: { current: 1, size: 10, - productName: '', - mallName: '' + type: '', + mallId: '' }, props: { value: 'catId', @@ -107,9 +281,10 @@ import { Message } from 'element-ui' } }, colConfigs: [ - { prop: 'productName', label: '商品名称', align: 'left' }, - { prop: 'mallName', label: '目标店铺', align: 'left'}, - { prop: 'createTime', label: '添加时间', width: '180px', fixed: 'right'} + { prop: 'url', label: '商品地址', align: 'left' }, + { prop: 'type', label: '来源', align: 'left',formart: v => this.$dict.getLabel('copy_from', v), }, + { prop: 'mallName', label: '店铺名称', align: 'left'}, + { prop: 'createTime', label: '复制时间', width: '180px', fixed: 'right'} ], tableData: [], total: 0, @@ -128,11 +303,12 @@ import { Message } from 'element-ui' }, created () { + this.$dict.load('copy_from'); }, methods: { getList () { - this.$http.post('/api/product/myPage',null,{ + this.$http.post('/api/copyProduct/myPage',null,{ params: { ...this.search } @@ -165,6 +341,10 @@ import { Message } from 'element-ui' url: this.form.url, }).then((res) => { if (this.form.type == '1') { + if (res.indexOf("rawData") == -1) { + Message.error("请检查地址是否正确,或者“TEMU”网站是否出现图形验证码") + return + } let str = res.substring(res.indexOf("rawData")) str = str.substring(0, str.indexOf("<\/script>")) str = str.substring(str.indexOf("{")) @@ -201,21 +381,43 @@ import { Message } from 'element-ui' }) return 0 }))).then(() => { - this.$http.post('/api/product/translate',{type: 1, goods: this.goods, sku: this.sku, productDetail: this.productDetail}).then(res => { + this.$http.post('/api/copyProduct/translate',{type: 1, goods: this.goods, sku: this.sku, productDetail: this.productDetail}).then(res => { if (res.code == 0) { this.createDraft(res.data) } }) }) } else if (this.form.type == '2') { + if (res.indexOf("runParams") == -1) { + Message.error("请检查地址是否正确,或者“速卖通”网站是否出现滑动条") + return + } let str = res.substring(res.indexOf("runParams")) str = str.substring(0, str.indexOf("<\/script>")) str = str.substring(str.indexOf("{")) str = str.substring(0, str.lastIndexOf("}")) str = str.substring(str.indexOf('data')) str = str.substring(5) - //str = str + "}" - console.log(str) + + let obj = JSON.parse(str) + + /*this.$http.post('/api/copyProduct/translate',{type: 2, productName: obj.productInfoComponent.subject, skuObj: obj.skuComponent, productDetail: this.productDetail}).then(res => { + if (res.code == 0) { + this.createDraft(res.data) + } + })*/ + + sendChromeWebReqMessage({ + type: source, + url: obj.productDescComponent.descriptionUrl, + }).then((res1) => { + res1 = res1.substring(0, res1.indexOf("