diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/sku/vo/ProductSkuCreateOrUpdateReqVO.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/sku/vo/ProductSkuCreateOrUpdateReqVO.java index 01a09fd39..c9d059578 100755 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/sku/vo/ProductSkuCreateOrUpdateReqVO.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/sku/vo/ProductSkuCreateOrUpdateReqVO.java @@ -1,14 +1,20 @@ package cn.iocoder.yudao.module.product.controller.admin.sku.vo; import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; +import javax.validation.constraints.NotEmpty; + @ApiModel("管理后台 - 商品 SKU 创建/更新 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) public class ProductSkuCreateOrUpdateReqVO extends ProductSkuBaseVO { + @ApiModelProperty(value = "商品 id 更新时须有", example = "1") + private Long id; + } diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuBaseVO.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuBaseVO.java index c320f902f..5f6c69e94 100755 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuBaseVO.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductSpuBaseVO.java @@ -65,10 +65,21 @@ public class ProductSpuBaseVO { @NotNull(message = "是否展示库存不能为空") private Boolean showStock; + @ApiModelProperty(value = "库存", required = true, example = "true") + private Integer totalStock; + + @ApiModelProperty(value = " 最小价格,单位使用:分", required = true, example = "1024") + private Integer minPrice; + + @ApiModelProperty(value = "最大价格,单位使用:分", required = true, example = "1024") + private Integer maxPrice; + // ========== 统计相关字段 ========= @ApiModelProperty(value = "虚拟销量", required = true, example = "1024") @NotNull(message = "虚拟销量不能为空") private Integer virtualSalesCount; + @ApiModelProperty(value = "点击量", example = "1024") + private Integer clickCount; } diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/SpuPageReqVO.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/SpuPageReqVO.java index 12eff36c7..1af946ebe 100755 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/SpuPageReqVO.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/SpuPageReqVO.java @@ -42,7 +42,7 @@ public class SpuPageReqVO extends PageParam { private Integer quantity; @ApiModelProperty(value = "上下架状态: 0 上架(开启) 1 下架(禁用)") - private Boolean status; + private Integer status; @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @ApiModelProperty(value = "创建时间") diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/spu/ProductSpuMapper.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/spu/ProductSpuMapper.java index a1d919ef2..fa4bc36ba 100755 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/spu/ProductSpuMapper.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/spu/ProductSpuMapper.java @@ -19,16 +19,11 @@ public interface ProductSpuMapper extends BaseMapperX { return selectPage(reqVO, new LambdaQueryWrapperX() .likeIfPresent(ProductSpuDO::getName, reqVO.getName()) .eqIfPresent(ProductSpuDO::getSellPoint, reqVO.getSellPoint()) - .eqIfPresent(ProductSpuDO::getDescription, reqVO.getDescription()) .eqIfPresent(ProductSpuDO::getCategoryId, reqVO.getCategoryId()) .eqIfPresent(ProductSpuDO::getPicUrls, reqVO.getPicUrls()) - .eqIfPresent(ProductSpuDO::getSort, reqVO.getSort()) -// .eqIfPresent(ProductSpuDO::getLikeCount, reqVO.getLikeCount()) -// .eqIfPresent(ProductSpuDO::getPrice, reqVO.getPrice()) -// .eqIfPresent(ProductSpuDO::getQuantity, reqVO.getQuantity()) .eqIfPresent(ProductSpuDO::getStatus, reqVO.getStatus()) .betweenIfPresent(ProductSpuDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(ProductSpuDO::getId)); + .orderByDesc(ProductSpuDO::getSort)); } } diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java index df6d3171f..f583f8685 100755 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java @@ -90,17 +90,19 @@ public class ProductSpuServiceImpl implements ProductSpuService { validateSpuExists(updateReqVO.getId()); // 校验分类 categoryService.validateProductCategory(updateReqVO.getCategoryId()); - // TODO @luowenfeng:校验品牌 + // 校验品牌 + brandService.validateProductBrand(updateReqVO.getBrandId()); // 校验SKU List skuCreateReqList = updateReqVO.getSkus(); // 多规格才需校验 productSkuService.validateProductSkus(skuCreateReqList, updateReqVO.getSpecType()); - // 更新 SPU ProductSpuDO updateObj = ProductSpuConvert.INSTANCE.convert(updateReqVO); - // TODO @计算各种字段 + updateObj.setMarketPrice(CollectionUtils.getMaxValue(skuCreateReqList, ProductSkuCreateOrUpdateReqVO::getMarketPrice)); + updateObj.setMaxPrice(CollectionUtils.getMaxValue(skuCreateReqList, ProductSkuCreateOrUpdateReqVO::getPrice)); + updateObj.setMinPrice(CollectionUtils.getMinValue(skuCreateReqList, ProductSkuCreateOrUpdateReqVO::getPrice)); + updateObj.setTotalStock(CollectionUtils.getSumValue(skuCreateReqList, ProductSkuCreateOrUpdateReqVO::getStock, Integer::sum)); ProductSpuMapper.updateById(updateObj); - // 更新 SKU productSkuService.updateProductSkus(updateObj.getId(), updateReqVO.getSkus()); } @@ -149,7 +151,7 @@ public class ProductSpuServiceImpl implements ProductSpuService { ProductPropertyViewRespVO.Tuple2 tuple2 = new ProductPropertyViewRespVO.Tuple2(pv.getValueId(), propertyValueMaps.get(pv.getValueId()).getName()); propertyValues.add(tuple2); }); - productPropertyViewRespVO.setPropertyValues(propertyValues); + productPropertyViewRespVO.setPropertyValues(propertyValues.stream().distinct().collect(Collectors.toList())); productPropertyViews.add(productPropertyViewRespVO); }); spuVO.setProductPropertyViews(productPropertyViews); diff --git a/yudao-ui-admin/src/main.js b/yudao-ui-admin/src/main.js index 2ce318cc0..2b94d6c7c 100644 --- a/yudao-ui-admin/src/main.js +++ b/yudao-ui-admin/src/main.js @@ -16,7 +16,7 @@ import './permission' // permission control import './tongji' // 百度统计 import { getDicts } from "@/api/system/dict/data"; import { getConfigKey } from "@/api/infra/config"; -import { parseTime, resetForm, handleTree, addBeginAndEndTime} from "@/utils/ruoyi"; +import { parseTime, resetForm, handleTree, addBeginAndEndTime, divide} from "@/utils/ruoyi"; import Pagination from "@/components/Pagination"; // 自定义表格工具扩展 import RightToolbar from "@/components/RightToolbar" @@ -36,6 +36,7 @@ Vue.prototype.getDictDataLabel = getDictDataLabel Vue.prototype.DICT_TYPE = DICT_TYPE Vue.prototype.handleTree = handleTree Vue.prototype.addBeginAndEndTime = addBeginAndEndTime +Vue.prototype.divide = divide // 全局组件挂载 Vue.component('DictTag', DictTag) diff --git a/yudao-ui-admin/src/utils/ruoyi.js b/yudao-ui-admin/src/utils/ruoyi.js index 7096e1fdc..fa8307e22 100644 --- a/yudao-ui-admin/src/utils/ruoyi.js +++ b/yudao-ui-admin/src/utils/ruoyi.js @@ -222,3 +222,17 @@ export function getPath(path) { } return basePath + path; } + +/** + * 除法保留两位小数 + * + * @param {*} divisor 除数 + * @param {*} dividend 被除数 + * @returns + */ + export function divide(divisor, dividend) { + if(divisor == null || dividend == null || dividend == 0){ + return null; + } + return Math.floor(divisor/dividend*100)/100; +} 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 801f7870f..4cac422a1 100644 --- a/yudao-ui-admin/src/views/mall/product/spu/index.vue +++ b/yudao-ui-admin/src/views/mall/product/spu/index.vue @@ -17,14 +17,6 @@ @keyup.enter.native="handleQuery" /> - - - - - - - - - - - - - - - + + + + + + import { - createSpu, - updateSpu, deleteSpu, - getSpu, getSpuPage, exportSpuExcel, } from "@/api/mall/product/spu"; -import { - createProductCategory, - deleteProductCategory, - exportCategoryExcel, - getProductCategory, - getProductCategoryList, - updateProductCategory, -} from "@/api/mall/product/category"; -import { - createProperty, - updateProperty, - deleteProperty, - getProperty, - getPropertyPage, - exportPropertyExcel, -} from "@/api/mall/product/property"; import Editor from "@/components/Editor"; import ImageUpload from "@/components/ImageUpload"; @@ -237,11 +196,6 @@ export default { selectObect: [], }, skuTags: [], - propName: { - checkStrictly: true, - label: "name", - value: "id", - }, categoryList: [], // 遮罩层 loading: true, @@ -277,251 +231,13 @@ export default { quantity: null, status: null, }, - // 表单参数 - 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" }, - ], - description: [ - { required: true, message: "描述不能为空", trigger: "blur" }, - ], - 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.getPropertyPageList(); - this.getListCategory(); }, methods: { - getTableSpecData() { - return this.value; - }, - tableSpanMethod({ row, column, rowIndex, columnIndex }) {}, - changeSkuStatus(tagIndex) { - if (this.form.skus[tagIndex].status == 0) { - this.form.skus[tagIndex].status = 1; - } else { - this.form.skus[tagIndex].status = 0; - } - }, - 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) {}, - //确定添加sku规格 - addTag() { - let skus = this.unUseTags.map(function (item, index) { - return item.name; - }); - let index = skus.indexOf(this.addTagInput.name); - - 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 - ); - this.addTagInput.selectObect.push({ - id: this.unUseTags[index].propertyValueList[j].id, - name: this.unUseTags[index].propertyValueList[j].name, - }); - } - } - } - let addTagInput = JSON.parse(JSON.stringify(this.addTagInput)); - this.skuTags.push(addTagInput); - - // if (this.skuTags.length > 1) { - this.skuTags = this.skuTags.sort((a, b) => a.propertyId - b.propertyId); - this.skuTags.forEach(function (item, index) { - item.selectObect = item.selectObect.sort((a, b) => a.id - b.id); - }); - - for (let i = 0; i < this.skuTags.length; i++) { - let selectValueIds = []; - let selectValues = []; - for (let j = 0; j < this.skuTags[i].selectObect.length; j++) { - selectValueIds.push(this.skuTags[i].selectObect[j].id); - selectValues.push(this.skuTags[i].selectObect[j].name); - } - this.skuTags[i].selectValues = selectValues; - this.skuTags[i].selectValueIds = selectValueIds; - } - - this.unUseTags.splice(index, 1); - this.isShowTagInput = false; - this.getTable(); - }, - 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; - }, - [[]] - ); - - let skuIdAll = skuIds.reduce( - (x, y) => { - let arr = []; - x.forEach((m) => y.forEach((y) => arr.push(m.concat([y])))); - return arr; - }, - [[]] - ); - - 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 < x.propertyIds.length; i++) { - x.properties.push({ - propertyId: x.propertyIds[i], - valueId: x.propertyChildIds[i], - }); - } - }); - }, - hideTagInput() { - this.isShowTagInput = false; - this.addTagInput = { - name: "", - propertyId: "", - selectValues: [], - selectValueIds: [], - selectObect: [], - }; - }, - shopTagInput() { - if (this.unUseTags.length <= 0) { - return this.$message.error("规格已经添加完毕"); - } - this.isShowTagInput = true; - this.addTagInput = { - name: "", - propertyId: "", - selectValues: [], - selectValueIds: [], - selectObect: [], - }; - }, - //删除已选的规格 - removeTag(row) { - let skus = this.allhistoryTags.map(function (item, index) { - return item.name; - }); - let index = skus.indexOf(this.skuTags[row].name); - this.unUseTags.push(this.allhistoryTags[index]); - this.skuTags.splice(row, 1); - this.getTable(); - }, - handleTagClick(row) { - for (let i = 0; i < this.propertyPageList.length; i++) { - if (row == this.propertyPageList[i].name) { - this.dbTagValues = this.propertyPageList[i].propertyValueList; - } - } - }, - /** 查询规格 */ - getPropertyPageList() { - // 执行查询 - getPropertyPage().then((response) => { - this.propertyPageList = response.data.list; - - this.unUseTags = this.propertyPageList.map(function (item, index) { - return item; - }); - this.allhistoryTags = JSON.parse(JSON.stringify(this.unUseTags)); - }); - }, - /** 查询分类 */ - getListCategory() { - // 执行查询 - getProductCategoryList().then((response) => { - this.categoryList = this.handleTree(response.data, "id", "parentId"); - }); - }, /** 查询列表 */ getList() { this.loading = true; @@ -530,37 +246,20 @@ export default { this.addBeginAndEndTime(params, this.dateRangeCreateTime, "createTime"); // 执行查询 getSpuPage(params).then((response) => { + response.data.list.forEach(element => { + element.price = this.divide(element.minPrice, 100)+"~"+this.divide(element.maxPrice, 100) + }); this.list = response.data.list; this.total = response.data.total; this.loading = false; }); }, + /** 取消按钮 */ cancel() { this.open = false; this.reset(); }, - /** 表单重置 */ - reset() { - this.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: [], - }; - this.skuTags = []; - this.resetForm("form"); - }, /** 搜索按钮操作 */ handleQuery() { this.queryParams.pageNo = 1; @@ -594,65 +293,6 @@ export default { this.open = false; this.getList() }, - getHandleTable() { - 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; - }, - [[]] - ); - - let skuIdAll = skuIds.reduce( - (x, y) => { - let arr = []; - x.forEach((m) => y.forEach((y) => arr.push(m.concat([y])))); - return arr; - }, - [[]] - ); - - for (let i = 0; i < skuAll.length; i++) { - let han = { - propertyNames: propertyNames, - propertyIds: propertyIds, - propertyChildNames: skuAll[i], - propertyChildIds: skuIdAll[i], - properties: this.form.skusList[i].properties, - picUrl: this.form.skusList[i].picUrl, - costPrice: this.form.skusList[i].costPrice, - originalPrice: this.form.skusList[i].originalPrice, - spuId: this.form.skusList[i].spuId, - prodName: this.form.skusList[i].prodName, - price: this.form.skusList[i].price, - barCode: this.form.skusList[i].barCode, - status: this.form.skusList[i].status, - }; - this.form.skus.push(han); - } - this.form.skus.forEach((x) => { - x.properties = []; - for (let i = 0; i < x.propertyIds.length; i++) { - x.properties.push({ - propertyId: x.propertyIds[i], - valueId: x.propertyChildIds[i], - }); - } - }); - }, /** 删除按钮操作 */ handleDelete(row) { const id = row.id; diff --git a/yudao-ui-admin/src/views/mall/product/spu/save.vue b/yudao-ui-admin/src/views/mall/product/spu/save.vue index 9c619be3e..a8ce18852 100644 --- a/yudao-ui-admin/src/views/mall/product/spu/save.vue +++ b/yudao-ui-admin/src/views/mall/product/spu/save.vue @@ -234,7 +234,7 @@ import {getBrandList} from "@/api/mall/product/brand"; import {getProductCategoryList} from "@/api/mall/product/category"; -import {createSpu, getSpu} from "@/api/mall/product/spu"; +import {createSpu, updateSpu, getSpu} from "@/api/mall/product/spu"; import {getPropertyPage,} from "@/api/mall/product/property"; import Editor from "@/components/Editor"; import ImageUpload from "@/components/ImageUpload"; @@ -261,6 +261,7 @@ export default { }, // 基础设置 baseForm: { + id: null, name: null, sellPoint: null, categoryIds: null, @@ -391,6 +392,14 @@ export default { return; } let rates = this.ratesForm.rates; + + // 价格元转分 + rates.forEach(r=>{ + r.marketPrice = r.marketPrice*100; + r.price = r.price*100; + r.costPrice = r.costPrice*100; + }) + // 动态规格调整字段 if (this.ratesForm.spec == 2) { rates.forEach(r => { @@ -403,9 +412,7 @@ export default { obj = Array.of(s); } obj.forEach((v, i) => { - console.log(this.dynamicSpec, r, s, v, i) let specValue = this.dynamicSpec[i].specValue.find(o => o.name == v); - console.log(specValue) let propertie = {}; propertie.propertyId = this.dynamicSpec[i].specId; propertie.valueId = specValue.id; @@ -419,6 +426,7 @@ export default { rates[0].status = this.baseForm.status; } let form = this.baseForm + if(form.picUrls instanceof Array){ form.picUrls = form.picUrls.flatMap(m=>m.split(',')) }else if(form.picUrls.split(',') instanceof Array){ @@ -426,18 +434,23 @@ export default { }else{ form.picUrls = Array.of(form.picUrls) } - + console.log(rates) form.skus = rates; form.specType = this.ratesForm.spec; form.categoryId = form.categoryIds[this.baseForm.categoryIds.length - 1]; - createSpu(form).then((response) => { - console.log(response) - this.$modal.msgSuccess("新增成功"); - this.$emit("closeDialog"); - }).catch((err) => { - console.log(this.baseForm.picUrls) - }); + + + if(form.id == null){ + createSpu(form).then((response) => { + this.$modal.msgSuccess("新增成功"); + }) + }else{ + updateSpu(form).then((response) => { + this.$modal.msgSuccess("修改成功"); + }) + } }); + this.$emit("closeDialog"); }, /** 查询规格 */ getPropertyPageList() { @@ -458,8 +471,8 @@ export default { }, updateType(id){ getSpu(id).then((response) =>{ - console.log(response) let data = response.data; + this.baseForm.id=data.id; this.baseForm.name=data.name; this.baseForm.sellPoint=data.sellPoint; this.baseForm.categoryIds=data.categoryIds; @@ -471,6 +484,11 @@ export default { this.baseForm.showStock=data.showStock; this.baseForm.brandId=data.brandId; this.ratesForm.spec=data.specType; + data.skus.forEach(r=>{ + r.marketPrice = this.divide(r.marketPrice, 100) + r.price = this.divide(r.price, 100) + r.costPrice = this.divide(r.costPrice, 100) + }) if(this.ratesForm.spec == 2){ data.productPropertyViews.forEach(p=>{ let obj = {}; @@ -487,7 +505,6 @@ export default { }) }) } - console.log(data.skus); this.ratesForm.rates=data.skus }) }