From 1e0f197c35834e0da500a47acc66933d9f179445 Mon Sep 17 00:00:00 2001 From: franky <16621167566@163.com> Date: Fri, 10 Jun 2022 17:23:35 +0800 Subject: [PATCH] =?UTF-8?q?spu=20=E6=96=B0=E5=A2=9E=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/mall/product/spu/index.vue | 393 ++++++++++++++++-- 1 file changed, 347 insertions(+), 46 deletions(-) diff --git a/yudao-ui-admin/src/views/mall/product/spu/index.vue b/yudao-ui-admin/src/views/mall/product/spu/index.vue index 0596ebb03..af48687e4 100644 --- a/yudao-ui-admin/src/views/mall/product/spu/index.vue +++ b/yudao-ui-admin/src/views/mall/product/spu/index.vue @@ -111,31 +111,33 @@ 添加规格
- {{tag.tagName}} - 删除 + {{tag.name}} + 删除 +
- {{tagItem.propValue}} + v-for="(tagItem, tagItemIndex) in tag.selectValues" + :key="tagItem" + style="margin-right: 10px" + :disable-transitions="false"> + {{tagItem}} - - + + + + + + + + +
- + - + + :key="item.id" + :label="item.name" + :value="item.name"> @@ -161,7 +164,90 @@ 确定 取消 - + + + + + + + + + + + + + + + + + + + + + + + + + @@ -199,30 +285,42 @@ listCategory, updateCategory } from "@/api/mall/product/category"; - import { createProperty, updateProperty, deleteProperty, getProperty, getPropertyPage, exportPropertyExcel } from "@/api/mall/product/property"; + import { + createProperty, + updateProperty, + deleteProperty, + getProperty, + getPropertyPage, + exportPropertyExcel + } from "@/api/mall/product/property"; import Editor from '@/components/Editor'; import ImageUpload from '@/components/ImageUpload'; + export default { name: "Spu", components: { - Editor,ImageUpload + Editor, ImageUpload }, data() { return { - dbTagValues:[], - unUseTags:[], - propertyPageList:[], + tableLeftTitles: [], + dbTagValues: [], + allhistoryTags: [], + unUseTags: [], + propertyPageList: [], isShowTagInput: false, addTagInput: { name: '', - selectValues: [] + propertyId: '', + selectValues: [], + selectValueIds: [], }, - skuTags:[], + skuTags: [], propName: { checkStrictly: true, - label:'name', - value:'id' + label: 'name', + value: 'id' }, categoryList: [], // 遮罩层 @@ -256,7 +354,22 @@ status: null, }, // 表单参数 - form: {}, + form: { + id: undefined, + name: undefined, + sellPoint: undefined, + description: undefined, + categoryId: undefined, + categoryIds: [], + picUrls: undefined, + sort: undefined, + likeCount: undefined, + price: undefined, + quantity: undefined, + status: undefined, + isShowTagInput: undefined, + skus:[], + }, // 表单校验 rules: { sellPoint: [{required: true, message: "卖点不能为空", trigger: "blur"}], @@ -264,38 +377,183 @@ categoryIds: [{required: true, message: "分类id不能为空", trigger: "blur"}], picUrls: [{required: true, message: "商品主图地址", trigger: "blur"}], sort: [{required: true, message: "排序字段不能为空", trigger: "blur"}], - } + }, + tagIndex:0, }; }, created() { + this.getList(); - this.getListCategory(); - this.getPropertyPageList(); + }, methods: { - addTag(){ + getTableSpecData() { + return this.value + }, + tableSpanMethod({row, column, rowIndex, columnIndex}) { }, - hideTagInput(){ + changeSkuStatus(tagIndex) { + if(this.form.skus[tagIndex].status == 0){ + this.form.skus[tagIndex].status = 1 ; + }else { + this.form.skus[tagIndex].status = 0 ; + } }, - shopTagInput(){ + skuAddProdName() { + if (this.initing) { + return + } + let skuList = [] + for (let i = 0; i < this.value.length; i++) { + const sku = Object.assign({}, this.value[i]) + if (!sku.properties) { + return + } + sku.skuName = '' + let properties = sku.properties.split(';') + for (const propertiesKey in properties) { + sku.skuName += properties[propertiesKey].split(':')[1] + ' ' + } + sku.prodName = this.prodName + ' ' + sku.skuName + skuList.push(sku) + } + this.$emit('input', skuList) + }, + handleTagClose(tagIndex, tagItemIndex) { }, - removeTag(row){ + //确定添加sku规格 + addTag() { + let skus = this.unUseTags.map(function (item, index) { + return item.name + }); + console.log("skus=="+JSON.stringify(skus)) + let index = skus.indexOf(this.addTagInput.name); + console.log("index=="+index) + console.log("skus[index].id=="+this.unUseTags[index].id) + console.log("this.unUseTags[index].propertyValueList=="+JSON.stringify(this.unUseTags[index].propertyValueList)) + this.addTagInput.propertyId = this.unUseTags[index].id; + for (let i = 0; i < this.addTagInput.selectValues.length; i++) { + for (let j = 0; j < this.unUseTags[index].propertyValueList.length; j++) { + if (this.addTagInput.selectValues[i] == this.unUseTags[index].propertyValueList[j].name) { + this.addTagInput.selectValueIds.push(this.unUseTags[index].propertyValueList[j].id) + } + } + } + let addTagInput = JSON.parse(JSON.stringify(this.addTagInput)) + console.log("addTagInput=="+JSON.stringify(addTagInput)) + this.skuTags.push(addTagInput); + this.unUseTags.splice(index, 1); + this.isShowTagInput = false; + this.getTable(); }, - handleTagClick(row){ + getTable(){ + this.form.skus=[]; + let skuTags = JSON.parse(JSON.stringify(this.skuTags)); + let sku1s = []; + let skuIds = []; + let propertyIds = []; + let propertyNames = []; + for (let i = 0; i < skuTags.length; i++) { + sku1s.push(skuTags[i].selectValues); + skuIds.push(skuTags[i].selectValueIds); + propertyIds.push(skuTags[i].propertyId); + propertyNames.push(skuTags[i].name); + } + let skuAll = sku1s.reduce((x,y) =>{ + let arr = []; + x.forEach(m => y.forEach(y => arr.push(m.concat([y])))) + return arr; + },[[]]) + console.log(skuAll); + let skuIdAll = skuIds.reduce((x,y) =>{ + let arr = []; + x.forEach(m => y.forEach(y => arr.push(m.concat([y])))) + return arr; + },[[]]) + console.log(skuIdAll); + for (let i = 0; i < skuAll.length; i++) { + let han = { + propertyNames:propertyNames, + propertyIds:propertyIds, + propertyChildNames:skuAll[i], + propertyChildIds:skuIdAll[i], + properties: [], + picUrl: '', + costPrice: '', + originalPrice: '', + spuId: '', + prodName: '', + price: '', + barCode: '', + status: '0', + } + this.form.skus.push(han); + } + this.form.skus.forEach(x=>{ + x.properties=[]; + for (let i = 0; i { this.propertyPageList = response.data.list; - this.unUseTags= this.propertyPageList.map(function (item,index) { + + this.unUseTags = this.propertyPageList.map(function (item, index) { return item }) + this.allhistoryTags = JSON.parse(JSON.stringify(this.unUseTags)); console.log(this.propertyPageList) }); }, @@ -327,6 +585,7 @@ }, /** 表单重置 */ reset() { + this.form = { id: undefined, name: undefined, @@ -340,9 +599,10 @@ price: undefined, quantity: undefined, status: undefined, - isShowTagInput:undefined, - + isShowTagInput: undefined, + skus:[], }; + this.skuTags=[]; this.resetForm("form"); }, /** 搜索按钮操作 */ @@ -361,13 +621,31 @@ this.reset(); this.open = true; this.title = "添加商品spu"; + this.getListCategory(); + this.getPropertyPageList(); }, /** 修改按钮操作 */ handleUpdate(row) { this.reset(); const id = row.id; getSpu(id).then(response => { - this.form = response.data; + let dataSpu = response.data; + this.form = { + id: dataSpu.id, + name: dataSpu.name, + sellPoint: dataSpu.sellPoint, + description: dataSpu.sellPoint, + categoryId: dataSpu.sellPoint, + categoryIds: [], + picUrls: dataSpu.picUrls, + sort: dataSpu.sort, + likeCount: dataSpu.likeCount, + price: dataSpu.price, + quantity: dataSpu.quantity, + status: dataSpu.status, + isShowTagInput:undefined, + skus:dataSpu.productSkuRespVOS, + }; this.open = true; this.title = "修改商品spu"; }); @@ -380,7 +658,9 @@ if (!valid) { return; } - this.form.categoryId= this.form.categoryIds[(this.form.categoryIds.length-1)] + this.form.picUrls = this.form.picUrls.split(','); + this.form.categoryId = this.form.categoryIds[(this.form.categoryIds.length - 1)]; + this.form.status = Number(this.form.status); // 修改的提交 if (this.form.id != null) { updateSpu(this.form).then(response => { @@ -429,3 +709,24 @@ } }; +