xiongzhu 5 ani în urmă
părinte
comite
e039de44ad

+ 2 - 0
src/main/java/com/izouma/jiashanxia/domain/GoodsInfo.java

@@ -35,4 +35,6 @@ public class GoodsInfo {
     @Builder.Default
     @Column(nullable = false)
     private Boolean del = false;
+
+    private String img;
 }

+ 13 - 0
src/main/java/com/izouma/jiashanxia/dto/UserPackageDTO.java

@@ -0,0 +1,13 @@
+package com.izouma.jiashanxia.dto;
+
+public interface UserPackageDTO {
+    Long getId();
+
+    String getName();
+
+    String getUnit();
+
+    String getImg();
+
+    long getNum();
+}

+ 7 - 0
src/main/java/com/izouma/jiashanxia/repo/UserPackageRepo.java

@@ -1,6 +1,7 @@
 package com.izouma.jiashanxia.repo;
 
 import com.izouma.jiashanxia.domain.UserPackage;
+import com.izouma.jiashanxia.dto.UserPackageDTO;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
@@ -16,4 +17,10 @@ public interface UserPackageRepo extends JpaRepository<UserPackage, Long>, JpaSp
     void softDelete(Long id);
 
     List<UserPackage> findAllByUserId(Long userId);
+
+    @Query(value = "select goods_info.*, ifnull(user_package.num, 0) as num " +
+            "from goods_info " +
+            "left join user_package on goods_info.id = user_package.goods_info_id and user_package.user_id = ?1 " +
+            "where goods_info.del = 0", nativeQuery = true)
+    List<UserPackageDTO> userPackage(Long userId);
 }

+ 3 - 2
src/main/java/com/izouma/jiashanxia/web/UserPackageController.java

@@ -1,6 +1,7 @@
 package com.izouma.jiashanxia.web;
 
 import com.izouma.jiashanxia.domain.UserPackage;
+import com.izouma.jiashanxia.dto.UserPackageDTO;
 import com.izouma.jiashanxia.service.UserPackageService;
 import com.izouma.jiashanxia.dto.PageQuery;
 import com.izouma.jiashanxia.exception.BusinessException;
@@ -59,8 +60,8 @@ public class UserPackageController extends BaseController {
     }
 
     @GetMapping("/my")
-    public List<UserPackage> my() {
-        return userPackageRepo.findAllByUserId(SecurityUtils.getAuthenticatedUser().getId());
+    public List<UserPackageDTO> my() {
+        return userPackageRepo.userPackage(SecurityUtils.getAuthenticatedUser().getId());
     }
 }
 

+ 8 - 8
src/main/vue/src/components/PackageEdit.vue

@@ -20,11 +20,11 @@
             </el-form-item>
             <el-form-item prop="tag" label="套餐标签">
                 <el-tag
-                    :key="tag"
-                    v-for="tag in dynamicTags"
+                    :key="i"
+                    v-for="(tag, i) in formData.tag"
                     closable
                     :disable-transitions="false"
-                    @close="handleClose(tag)"
+                    @close="removeTag(i)"
                     size="medium"
                 >
                     {{ tag }}
@@ -81,7 +81,8 @@ export default {
         return {
             saving: false,
             formData: {
-                img: []
+                img: [],
+                tag: []
             },
             rules: {
                 name: [
@@ -110,7 +111,6 @@ export default {
                 { label: '团队', value: 'TEAM' },
                 { label: '个人', value: 'PERSONAL' }
             ],
-            dynamicTags: [],
             inputVisible: false,
             inputValue: ''
         };
@@ -157,8 +157,8 @@ export default {
                     }
                 });
         },
-        handleClose(tag) {
-            this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
+        removeTag(i) {
+            this.formData.tag.splice(i, 1);
         },
         showInput() {
             this.inputVisible = true;
@@ -169,7 +169,7 @@ export default {
         handleInputConfirm() {
             let inputValue = this.inputValue;
             if (inputValue) {
-                this.dynamicTags.push(inputValue);
+                this.formData.tag.push(inputValue);
             }
             this.inputVisible = false;
             this.inputValue = '';

+ 4 - 0
src/main/vue/src/views/GoodsInfoList.vue

@@ -59,6 +59,9 @@
 
         <el-dialog :visible.sync="showDialog" width="460px" title="编辑商品" :close-on-click-modal="false">
             <el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right" size="small">
+                <el-form-item prop="img" label="图片">
+                    <single-upload v-model="formData.img"></single-upload>
+                </el-form-item>
                 <el-form-item prop="name" label="名称">
                     <el-input v-model="formData.name" class="cl-input"></el-input>
                 </el-form-item>
@@ -93,6 +96,7 @@ export default {
             edit: false,
             saving: false,
             rules: {
+                img: { required: true, message: '请上传图片', trigger: 'blur' },
                 name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
                 unit: [{ required: true, message: '请输入单位', trigger: 'blur' }]
             }