Commit 356642ecea9136ef0458085e84d17de352df8944
1 parent
7bf37fcb
review 商品的 save 界面
Showing
5 changed files
with
30 additions
and
39 deletions
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/category/ProductCategoryDO.java
yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImplTest.java
| @@ -29,9 +29,7 @@ import org.springframework.boot.test.mock.mockito.MockBean; | @@ -29,9 +29,7 @@ import org.springframework.boot.test.mock.mockito.MockBean; | ||
| 29 | import org.springframework.context.annotation.Import; | 29 | import org.springframework.context.annotation.Import; |
| 30 | 30 | ||
| 31 | import javax.annotation.Resource; | 31 | import javax.annotation.Resource; |
| 32 | -import java.util.ArrayList; | ||
| 33 | -import java.util.List; | ||
| 34 | -import java.util.Map; | 32 | +import java.util.*; |
| 35 | import java.util.stream.Collectors; | 33 | import java.util.stream.Collectors; |
| 36 | import java.util.stream.Stream; | 34 | import java.util.stream.Stream; |
| 37 | 35 | ||
| @@ -221,15 +219,15 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest { | @@ -221,15 +219,15 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest { | ||
| 221 | // randomPojo(ProductSkuDO.class, o -> o.setSpuId(createReqVO.getId())) | 219 | // randomPojo(ProductSkuDO.class, o -> o.setSpuId(createReqVO.getId())) |
| 222 | ); | 220 | ); |
| 223 | 221 | ||
| 224 | - Mockito.when(productSkuService.getRemindSpuIds()).thenReturn(remindSpuIds); | 222 | +// Mockito.when(productSkuService.getRemindSpuIds()).thenReturn(remindSpuIds); |
| 225 | 223 | ||
| 226 | // 调用 | 224 | // 调用 |
| 227 | ProductSpuPageReqVO productSpuPageReqVO = new ProductSpuPageReqVO(); | 225 | ProductSpuPageReqVO productSpuPageReqVO = new ProductSpuPageReqVO(); |
| 228 | - productSpuPageReqVO.setTabStatus(2); | 226 | +// productSpuPageReqVO.setTabStatus(2); |
| 229 | 227 | ||
| 230 | PageResult<ProductSpuRespVO> spuPage = productSpuService.getSpuPage(productSpuPageReqVO); | 228 | PageResult<ProductSpuRespVO> spuPage = productSpuService.getSpuPage(productSpuPageReqVO); |
| 231 | 229 | ||
| 232 | - ArrayList<Long> resultRemindSpuIds = new ArrayList<>(); | 230 | + Set<Long> resultRemindSpuIds = new HashSet<>(); |
| 233 | resultRemindSpuIds.add(null); | 231 | resultRemindSpuIds.add(null); |
| 234 | PageResult<ProductSpuRespVO> result = ProductSpuConvert.INSTANCE.convertPage(productSpuMapper.selectPage(productSpuPageReqVO, resultRemindSpuIds)); | 232 | PageResult<ProductSpuRespVO> result = ProductSpuConvert.INSTANCE.convertPage(productSpuMapper.selectPage(productSpuPageReqVO, resultRemindSpuIds)); |
| 235 | Assertions.assertIterableEquals(result.getList(), spuPage.getList()); | 233 | Assertions.assertIterableEquals(result.getList(), spuPage.getList()); |
| @@ -249,7 +247,7 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest { | @@ -249,7 +247,7 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest { | ||
| 249 | // randomPojo(ProductSkuDO.class, o -> o.setSpuId(createReqVO.getId())) | 247 | // randomPojo(ProductSkuDO.class, o -> o.setSpuId(createReqVO.getId())) |
| 250 | ); | 248 | ); |
| 251 | 249 | ||
| 252 | - Mockito.when(productSkuService.getRemindSpuIds()).thenReturn(remindSpuIds); | 250 | +// Mockito.when(productSkuService.getRemindSpuIds()).thenReturn(remindSpuIds); |
| 253 | 251 | ||
| 254 | // 调用 | 252 | // 调用 |
| 255 | AppSpuPageReqVO appSpuPageReqVO = new AppSpuPageReqVO(); | 253 | AppSpuPageReqVO appSpuPageReqVO = new AppSpuPageReqVO(); |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderDO.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderServiceImpl.java
| @@ -123,7 +123,7 @@ public class TradeOrderServiceImpl implements TradeOrderService { | @@ -123,7 +123,7 @@ public class TradeOrderServiceImpl implements TradeOrderService { | ||
| 123 | Long loginUserId, String clientIp) { | 123 | Long loginUserId, String clientIp) { |
| 124 | tradeOrderDO.setUserId(loginUserId); | 124 | tradeOrderDO.setUserId(loginUserId); |
| 125 | tradeOrderDO.setUserIp(clientIp); | 125 | tradeOrderDO.setUserIp(clientIp); |
| 126 | - tradeOrderDO.setSn(IdUtil.getSnowflakeNextId() + ""); // TODO @LeeYan9: 思考下, 怎么生成好点哈; 这个是会展示给用户的; | 126 | + tradeOrderDO.setNo(IdUtil.getSnowflakeNextId() + ""); // TODO @LeeYan9: 思考下, 怎么生成好点哈; 这个是会展示给用户的; |
| 127 | tradeOrderDO.setStatus(TradeOrderStatusEnum.WAITING_PAYMENT.getStatus()); | 127 | tradeOrderDO.setStatus(TradeOrderStatusEnum.WAITING_PAYMENT.getStatus()); |
| 128 | tradeOrderDO.setType(TradeOrderTypeEnum.NORMAL.getType()); | 128 | tradeOrderDO.setType(TradeOrderTypeEnum.NORMAL.getType()); |
| 129 | tradeOrderDO.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus()); | 129 | tradeOrderDO.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus()); |
yudao-ui-admin/src/views/mall/product/spu/save.vue
| 1 | <template> | 1 | <template> |
| 2 | <div class="container"> | 2 | <div class="container"> |
| 3 | + <!-- TODO 样式优化:表单宽度、表单项对齐、hr 粗细; --> | ||
| 3 | <el-tabs v-model="activeName" class="tabs"> | 4 | <el-tabs v-model="activeName" class="tabs"> |
| 4 | <!-- 基础设置 --> | 5 | <!-- 基础设置 --> |
| 6 | + <!-- TODO @luowenfeng:基础设置,分成商品类型、基础信息、配送信息 --> | ||
| 7 | + <!-- TODO @luowenfeng:base=》basic 会更好哈 --> | ||
| 5 | <el-tab-pane label="基础设置" name="base"> | 8 | <el-tab-pane label="基础设置" name="base"> |
| 6 | <el-form ref="base" :model="baseForm" :rules="rules" label-width="100px" style="width: 95%"> | 9 | <el-form ref="base" :model="baseForm" :rules="rules" label-width="100px" style="width: 95%"> |
| 7 | <el-form-item label="商品名称" prop="name"> | 10 | <el-form-item label="商品名称" prop="name"> |
| 8 | - <el-input v-model="baseForm.name" placeholder="请输入商品名称"/> | 11 | + <el-input v-model="baseForm.name" placeholder="请输入商品名称" /> |
| 9 | </el-form-item> | 12 | </el-form-item> |
| 10 | <el-form-item label="促销语"> | 13 | <el-form-item label="促销语"> |
| 11 | <el-input type="textarea" v-model="baseForm.sellPoint" placeholder="请输入促销语"/> | 14 | <el-input type="textarea" v-model="baseForm.sellPoint" placeholder="请输入促销语"/> |
| @@ -16,7 +19,6 @@ | @@ -16,7 +19,6 @@ | ||
| 16 | <el-form-item label="商品视频" prop="videoUrl"> | 19 | <el-form-item label="商品视频" prop="videoUrl"> |
| 17 | <VideoUpload v-model="baseForm.videoUrl" :value="baseForm.videoUrl"/> | 20 | <VideoUpload v-model="baseForm.videoUrl" :value="baseForm.videoUrl"/> |
| 18 | </el-form-item> | 21 | </el-form-item> |
| 19 | - | ||
| 20 | <el-form-item label="商品品牌" prop="brandId"> | 22 | <el-form-item label="商品品牌" prop="brandId"> |
| 21 | <el-select v-model="baseForm.brandId" placeholder="请选择商品品牌"> | 23 | <el-select v-model="baseForm.brandId" placeholder="请选择商品品牌"> |
| 22 | <el-option v-for="item in brandList" :key="item.id" :label="item.name" :value="item.id"/> | 24 | <el-option v-for="item in brandList" :key="item.id" :label="item.name" :value="item.id"/> |
| @@ -28,20 +30,20 @@ | @@ -28,20 +30,20 @@ | ||
| 28 | </el-form-item> | 30 | </el-form-item> |
| 29 | <el-form-item label="是否上架" prop="status"> | 31 | <el-form-item label="是否上架" prop="status"> |
| 30 | <el-radio-group v-model="baseForm.status"> | 32 | <el-radio-group v-model="baseForm.status"> |
| 31 | - <el-radio :label="0">立即上架</el-radio> | ||
| 32 | - <el-radio :label="1">放入仓库</el-radio> | 33 | + <el-radio :label="1">立即上架</el-radio> |
| 34 | + <el-radio :label="0">放入仓库</el-radio> | ||
| 33 | </el-radio-group> | 35 | </el-radio-group> |
| 34 | </el-form-item> | 36 | </el-form-item> |
| 35 | </el-form> | 37 | </el-form> |
| 36 | </el-tab-pane> | 38 | </el-tab-pane> |
| 37 | 39 | ||
| 38 | <!-- 价格库存 --> | 40 | <!-- 价格库存 --> |
| 41 | + <!-- TODO @luowenfeng:rates=》priceStack 会更好哈 --> | ||
| 39 | <el-tab-pane label="价格库存" name="rates" class="rates"> | 42 | <el-tab-pane label="价格库存" name="rates" class="rates"> |
| 40 | <el-form ref="rates" :model="ratesForm" :rules="rules"> | 43 | <el-form ref="rates" :model="ratesForm" :rules="rules"> |
| 41 | <el-form-item label="启用多规格"> | 44 | <el-form-item label="启用多规格"> |
| 42 | - <el-switch v-model="specSwitch" @change="changeSpecSwitch"></el-switch> | 45 | + <el-switch v-model="specSwitch" @change="changeSpecSwitch"/> |
| 43 | </el-form-item> | 46 | </el-form-item> |
| 44 | - | ||
| 45 | <!-- 动态添加规格属性 --> | 47 | <!-- 动态添加规格属性 --> |
| 46 | <div v-show="ratesForm.spec === 2"> | 48 | <div v-show="ratesForm.spec === 2"> |
| 47 | <div v-for="(specs, index) in dynamicSpec" :key="index" class="dynamic-spec"> | 49 | <div v-for="(specs, index) in dynamicSpec" :key="index" class="dynamic-spec"> |
| @@ -59,8 +61,7 @@ | @@ -59,8 +61,7 @@ | ||
| 59 | </template> | 61 | </template> |
| 60 | </div> | 62 | </div> |
| 61 | </div> | 63 | </div> |
| 62 | - <el-button type="primary" @click="dynamicSpec.push({specValue: []}); ratesForm.rates = []">添加规格项目 | ||
| 63 | - </el-button> | 64 | + <el-button type="primary" @click="dynamicSpec.push({specValue: []}); ratesForm.rates = []">添加规格项目</el-button> |
| 64 | </div> | 65 | </div> |
| 65 | 66 | ||
| 66 | <!-- 规格明细 --> | 67 | <!-- 规格明细 --> |
| @@ -76,15 +77,13 @@ | @@ -76,15 +77,13 @@ | ||
| 76 | </template> | 77 | </template> |
| 77 | <el-table-column label="规格图片" width="120px" :render-header="addRedStar" key="90"> | 78 | <el-table-column label="规格图片" width="120px" :render-header="addRedStar" key="90"> |
| 78 | <template slot-scope="scope"> | 79 | <template slot-scope="scope"> |
| 79 | - <ImageUpload v-model="scope.row.picUrl" :limit="1" :isShowTip="false" | ||
| 80 | - style="width: 100px; height: 50px"/> | 80 | + <ImageUpload v-model="scope.row.picUrl" :limit="1" :isShowTip="false" style="width: 100px; height: 50px"/> |
| 81 | </template> | 81 | </template> |
| 82 | </el-table-column> | 82 | </el-table-column> |
| 83 | <template v-if="this.specSwitch"> | 83 | <template v-if="this.specSwitch"> |
| 84 | <el-table-column label="sku名称" :render-header="addRedStar" key="91"> | 84 | <el-table-column label="sku名称" :render-header="addRedStar" key="91"> |
| 85 | <template slot-scope="scope"> | 85 | <template slot-scope="scope"> |
| 86 | - <el-form-item :prop="'rates.'+ scope.$index + '.name'" | ||
| 87 | - :rules="[{required: true, trigger: 'change'}]"> | 86 | + <el-form-item :prop="'rates.'+ scope.$index + '.name'" :rules="[{required: true, trigger: 'change'}]"> |
| 88 | <el-input v-model="scope.row.name"/> | 87 | <el-input v-model="scope.row.name"/> |
| 89 | </el-form-item> | 88 | </el-form-item> |
| 90 | </template> | 89 | </template> |
| @@ -92,8 +91,7 @@ | @@ -92,8 +91,7 @@ | ||
| 92 | </template> | 91 | </template> |
| 93 | <el-table-column label="市场价(元)" :render-header="addRedStar" key="92"> | 92 | <el-table-column label="市场价(元)" :render-header="addRedStar" key="92"> |
| 94 | <template slot-scope="scope"> | 93 | <template slot-scope="scope"> |
| 95 | - <el-form-item :prop="'rates.'+ scope.$index + '.marketPrice'" | ||
| 96 | - :rules="[{required: true, trigger: 'change'}]"> | 94 | + <el-form-item :prop="'rates.'+ scope.$index + '.marketPrice'" :rules="[{required: true, trigger: 'change'}]"> |
| 97 | <el-input v-model="scope.row.marketPrice" | 95 | <el-input v-model="scope.row.marketPrice" |
| 98 | oninput="value= value.match(/\d+(\.\d{0,2})?/) ? value.match(/\d+(\.\d{0,2})?/)[0] : ''"/> | 96 | oninput="value= value.match(/\d+(\.\d{0,2})?/) ? value.match(/\d+(\.\d{0,2})?/)[0] : ''"/> |
| 99 | </el-form-item> | 97 | </el-form-item> |
| @@ -104,7 +102,7 @@ | @@ -104,7 +102,7 @@ | ||
| 104 | <el-form-item :prop="'rates.'+ scope.$index + '.price'" | 102 | <el-form-item :prop="'rates.'+ scope.$index + '.price'" |
| 105 | :rules="[{required: true, trigger: 'change'}]"> | 103 | :rules="[{required: true, trigger: 'change'}]"> |
| 106 | <el-input v-model="scope.row.price" | 104 | <el-input v-model="scope.row.price" |
| 107 | - oninput="value= value.match(/\d+(\.\d{0,2})?/) ? value.match(/\d+(\.\d{0,2})?/)[0] : ''"></el-input> | 105 | + oninput="value= value.match(/\d+(\.\d{0,2})?/) ? value.match(/\d+(\.\d{0,2})?/)[0] : ''" /> |
| 108 | </el-form-item> | 106 | </el-form-item> |
| 109 | </template> | 107 | </template> |
| 110 | </el-table-column> | 108 | </el-table-column> |
| @@ -112,17 +110,14 @@ | @@ -112,17 +110,14 @@ | ||
| 112 | <template slot-scope="scope"> | 110 | <template slot-scope="scope"> |
| 113 | <el-form-item :prop="'rates.'+ scope.$index + '.costPrice'" | 111 | <el-form-item :prop="'rates.'+ scope.$index + '.costPrice'" |
| 114 | :rules="[{required: true, trigger: 'change'}]"> | 112 | :rules="[{required: true, trigger: 'change'}]"> |
| 115 | - <el-input | ||
| 116 | - v-model="scope.row.costPrice" | ||
| 117 | - oninput="value= value.match(/\d+(\.\d{0,2})?/) ? value.match(/\d+(\.\d{0,2})?/)[0] : ''" | ||
| 118 | - ></el-input> | 113 | + <el-input v-model="scope.row.costPrice" |
| 114 | + oninput="value= value.match(/\d+(\.\d{0,2})?/) ? value.match(/\d+(\.\d{0,2})?/)[0] : ''" /> | ||
| 119 | </el-form-item> | 115 | </el-form-item> |
| 120 | </template> | 116 | </template> |
| 121 | </el-table-column> | 117 | </el-table-column> |
| 122 | <el-table-column label="库存" :render-header="addRedStar" key="95"> | 118 | <el-table-column label="库存" :render-header="addRedStar" key="95"> |
| 123 | <template slot-scope="scope"> | 119 | <template slot-scope="scope"> |
| 124 | - <el-form-item :prop="'rates.'+ scope.$index + '.stock'" | ||
| 125 | - :rules="[{required: true, trigger: 'change'}]"> | 120 | + <el-form-item :prop="'rates.'+ scope.$index + '.stock'" :rules="[{required: true, trigger: 'change'}]"> |
| 126 | <el-input v-model="scope.row.stock" oninput="value=value.replace(/^(0+)|[^\d]+/g,'')"></el-input> | 121 | <el-input v-model="scope.row.stock" oninput="value=value.replace(/^(0+)|[^\d]+/g,'')"></el-input> |
| 127 | </el-form-item> | 122 | </el-form-item> |
| 128 | </template> | 123 | </template> |
| @@ -134,17 +129,17 @@ | @@ -134,17 +129,17 @@ | ||
| 134 | </el-table-column> | 129 | </el-table-column> |
| 135 | <el-table-column label="体积" key="97"> | 130 | <el-table-column label="体积" key="97"> |
| 136 | <template slot-scope="scope"> | 131 | <template slot-scope="scope"> |
| 137 | - <el-input v-model="scope.row.volume"></el-input> | 132 | + <el-input v-model="scope.row.volume" /> |
| 138 | </template> | 133 | </template> |
| 139 | </el-table-column> | 134 | </el-table-column> |
| 140 | <el-table-column label="重量" key="98"> | 135 | <el-table-column label="重量" key="98"> |
| 141 | <template slot-scope="scope"> | 136 | <template slot-scope="scope"> |
| 142 | - <el-input v-model="scope.row.weight"></el-input> | 137 | + <el-input v-model="scope.row.weight" /> |
| 143 | </template> | 138 | </template> |
| 144 | </el-table-column> | 139 | </el-table-column> |
| 145 | <el-table-column label="条码" key="99"> | 140 | <el-table-column label="条码" key="99"> |
| 146 | <template slot-scope="scope"> | 141 | <template slot-scope="scope"> |
| 147 | - <el-input v-model="scope.row.barCode"></el-input> | 142 | + <el-input v-model="scope.row.barCode" /> |
| 148 | </template> | 143 | </template> |
| 149 | </el-table-column> | 144 | </el-table-column> |
| 150 | <template v-if="this.specSwitch"> | 145 | <template v-if="this.specSwitch"> |
| @@ -169,6 +164,7 @@ | @@ -169,6 +164,7 @@ | ||
| 169 | </el-tab-pane> | 164 | </el-tab-pane> |
| 170 | 165 | ||
| 171 | <!-- 商品详情 --> | 166 | <!-- 商品详情 --> |
| 167 | + <!-- TODO @luowenfeng:third=》detail 会更好哈 --> | ||
| 172 | <el-tab-pane label="商品详情" name="third"> | 168 | <el-tab-pane label="商品详情" name="third"> |
| 173 | <el-form ref="third" :model="baseForm" :rules="rules"> | 169 | <el-form ref="third" :model="baseForm" :rules="rules"> |
| 174 | <el-form-item prop="description"> | 170 | <el-form-item prop="description"> |
| @@ -178,6 +174,7 @@ | @@ -178,6 +174,7 @@ | ||
| 178 | </el-tab-pane> | 174 | </el-tab-pane> |
| 179 | 175 | ||
| 180 | <!-- 销售设置 --> | 176 | <!-- 销售设置 --> |
| 177 | + <!-- TODO @luowenfeng:fourth=》senior 会更好哈 --> | ||
| 181 | <el-tab-pane label="高级设置" name="fourth"> | 178 | <el-tab-pane label="高级设置" name="fourth"> |
| 182 | <el-form ref="fourth" :model="baseForm" :rules="rules" label-width="100px" style="width: 95%"> | 179 | <el-form ref="fourth" :model="baseForm" :rules="rules" label-width="100px" style="width: 95%"> |
| 183 | <el-form-item label="排序字段"> | 180 | <el-form-item label="排序字段"> |
| @@ -421,15 +418,13 @@ export default { | @@ -421,15 +418,13 @@ export default { | ||
| 421 | if (form.id == null) { | 418 | if (form.id == null) { |
| 422 | createSpu(form).then(() => { | 419 | createSpu(form).then(() => { |
| 423 | this.$modal.msgSuccess("新增成功"); | 420 | this.$modal.msgSuccess("新增成功"); |
| 424 | - }) | ||
| 425 | - .then(()=>{ | 421 | + }).then(()=>{ |
| 426 | this.cancel(); | 422 | this.cancel(); |
| 427 | }) | 423 | }) |
| 428 | } else { | 424 | } else { |
| 429 | updateSpu(form).then(() => { | 425 | updateSpu(form).then(() => { |
| 430 | this.$modal.msgSuccess("修改成功"); | 426 | this.$modal.msgSuccess("修改成功"); |
| 431 | - }) | ||
| 432 | - .then(()=>{ | 427 | + }).then(()=>{ |
| 433 | this.cancel(); | 428 | this.cancel(); |
| 434 | }) | 429 | }) |
| 435 | } | 430 | } |