Browse Source

分享背景/优惠券显示

licailing 4 years ago
parent
commit
3dcbde10e1

+ 4 - 0
src/main/java/com/izouma/nineth/domain/Coupon.java

@@ -1,6 +1,7 @@
 package com.izouma.nineth.domain;
 
 import com.izouma.nineth.converter.LongArrayConverter;
+import com.izouma.nineth.dto.GeneralDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -11,6 +12,7 @@ import lombok.NoArgsConstructor;
 import javax.persistence.Column;
 import javax.persistence.Convert;
 import javax.persistence.Entity;
+import javax.persistence.Transient;
 import java.time.LocalDateTime;
 import java.util.List;
 
@@ -40,4 +42,6 @@ public class Coupon extends BaseEntity {
 
     private LocalDateTime expiration;
 
+    @Transient
+    private List<GeneralDTO> collections;
 }

+ 10 - 0
src/main/java/com/izouma/nineth/dto/GeneralDTO.java

@@ -0,0 +1,10 @@
+package com.izouma.nineth.dto;
+
+import lombok.Data;
+
+@Data
+public class GeneralDTO {
+    private Long id;
+
+    private String name;
+}

+ 2 - 0
src/main/java/com/izouma/nineth/repo/CollectionRepo.java

@@ -113,4 +113,6 @@ public interface CollectionRepo extends JpaRepository<Collection, Long>, JpaSpec
 
     @Query("select new com.izouma.nineth.dto.CollectionStockAndSale(c.id, c.stock, c.sale) from Collection c where c.stock > 0")
     List<CollectionStockAndSale> getStockAndSale();
+
+    List<Collection> findAllByIdIn(java.util.Collection<Long> ids);
 }

+ 23 - 5
src/main/java/com/izouma/nineth/web/CouponController.java

@@ -1,26 +1,31 @@
 package com.izouma.nineth.web;
+
 import com.izouma.nineth.domain.Coupon;
-import com.izouma.nineth.service.CouponService;
+import com.izouma.nineth.dto.GeneralDTO;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.exception.BusinessException;
+import com.izouma.nineth.repo.CollectionRepo;
 import com.izouma.nineth.repo.CouponRepo;
+import com.izouma.nineth.service.CouponService;
 import com.izouma.nineth.utils.ObjUtils;
 import com.izouma.nineth.utils.excel.ExcelUtils;
 import lombok.AllArgsConstructor;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.data.domain.Page;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("/coupon")
 @AllArgsConstructor
 public class CouponController extends BaseController {
-    private CouponService couponService;
-    private CouponRepo couponRepo;
+    private CouponService  couponService;
+    private CouponRepo     couponRepo;
+    private CollectionRepo collectionRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
@@ -42,7 +47,20 @@ public class CouponController extends BaseController {
 
     @GetMapping("/get/{id}")
     public Coupon get(@PathVariable Long id) {
-        return couponRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        Coupon coupon = couponRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        if (CollectionUtils.isNotEmpty(coupon.getCollectionIds())) {
+            List<GeneralDTO> dtos = collectionRepo.findAllByIdIn(coupon.getCollectionIds())
+                    .stream()
+                    .map(collection -> {
+                        GeneralDTO dto = new GeneralDTO();
+                        dto.setId(collection.getId());
+                        dto.setName(collection.getName());
+                        return dto;
+                    })
+                    .collect(Collectors.toList());
+            coupon.setCollections(dtos);
+        }
+        return coupon;
     }
 
     @PostMapping("/del/{id}")

+ 42 - 19
src/main/vue/src/views/CollectionEdit.vue

@@ -173,18 +173,25 @@
                         <el-radio v-model="formData.onShelf" :label="true">是</el-radio>
                         <el-radio v-model="formData.onShelf" :label="false">否</el-radio>
                     </el-form-item>
-                    <el-form-item prop="startTime" label="定时发布">
-                        <el-radio v-model="formData.scheduleSale" :label="true">是</el-radio>
-                        <el-radio v-model="formData.scheduleSale" :label="false">否</el-radio>
-                        <div style="margin-top: 10px" v-if="formData.scheduleSale">
+                    <div class="inline-wrapper">
+                        <el-form-item prop="startTime" label="定时发布">
+                            <el-radio v-model="formData.scheduleSale" :label="true">是</el-radio>
+                            <el-radio v-model="formData.scheduleSale" :label="false">否</el-radio>
+                        </el-form-item>
+                        <el-form-item
+                            prop="startTime"
+                            label="发布时间"
+                            v-if="formData.scheduleSale"
+                            style="margin-left: 22px"
+                        >
                             <el-date-picker
                                 v-model="formData.startTime"
                                 type="datetime"
                                 value-format="yyyy-MM-dd HH:mm:ss"
                                 placeholder="发布时间"
                             ></el-date-picker>
-                        </div>
-                    </el-form-item>
+                        </el-form-item>
+                    </div>
                     <el-form-item
                         prop="salable"
                         label="可售"
@@ -195,32 +202,47 @@
                         <el-radio v-model="formData.salable" :label="true">是</el-radio>
                         <el-radio v-model="formData.salable" :label="false">仅展示</el-radio>
                     </el-form-item>
+
                     <el-form-item prop="sort" label="排序">
                         <el-input-number v-model="formData.sort" :min="0"></el-input-number>
                         <div class="tip">数字越大排序越靠前,相同数值按创建时间倒序排列</div>
                     </el-form-item>
-                    <el-form-item prop="maxCount" label="限购">
-                        <el-input-number v-model="formData.maxCount" :min="0" :step="1"></el-input-number>
-                        <div class="tip">0表示不限购</div>
-                    </el-form-item>
-                    <el-form-item prop="countId" label="限购识别码" v-if="formData.maxCount > 0">
-                        <el-input v-model="formData.countId"></el-input>
-                        <div class="tip">相同识别码的藏品共享限购数量</div>
-                    </el-form-item>
+
+                    <div class="inline-wrapper">
+                        <el-form-item prop="maxCount" label="限购">
+                            <el-input-number v-model="formData.maxCount" :min="0" :step="1"></el-input-number>
+                            <div class="tip">0表示不限购</div>
+                        </el-form-item>
+                        <el-form-item prop="countId" label="限购识别码" v-if="formData.maxCount > 0">
+                            <el-input v-model="formData.countId" style="width: 300px"></el-input>
+                            <div class="tip">相同识别码的藏品共享限购数量</div>
+                        </el-form-item>
+                    </div>
                     <!-- <el-form-item prop="noSoldOut" label="手动售罄">
                         <el-radio v-model="formData.noSoldOut" :label="false">是</el-radio>
                         <el-radio v-model="formData.noSoldOut" :label="true">否</el-radio>
                     </el-form-item> -->
-                    <el-form-item prop="assignment" label="拉新任务指标">
-                        <el-input-number type="number" :min="0" :step="1" v-model="formData.assignment"></el-input-number>
-                        <div class="tip">0表示无拉新任务限制</div>
-                    </el-form-item>
                     <el-form-item prop="couponPayment" label="支付方式">
                         <el-radio-group v-model="formData.couponPayment">
                             <el-radio :label="true">优惠券</el-radio>
                             <el-radio :label="false">支付宝/微信</el-radio>
                         </el-radio-group>
                     </el-form-item>
+                    <el-form-item prop="assignment" label="拉新任务指标">
+                        <el-input-number
+                            type="number"
+                            :min="0"
+                            :step="1"
+                            v-model="formData.assignment"
+                        ></el-input-number>
+                        <div class="tip">0表示无拉新任务限制</div>
+                    </el-form-item>
+                    <el-form-item label="分享海报" v-if="formData.assignment > 0">
+                        <single-upload v-model="formData.shareBg"></single-upload>
+                    </el-form-item>
+                    <el-form-item label="注册海报" v-if="formData.assignment > 0">
+                        <single-upload v-model="formData.registerBg"></single-upload>
+                    </el-form-item>
                     <el-form-item class="form-submit">
                         <el-button @click="onSave" :loading="saving" type="primary"> 保存 </el-button>
                         <!-- <el-button @click="onDelete" :disabled="saving" type="danger" v-if="formData.id">
@@ -269,9 +291,10 @@
 import resolveUrl from 'resolve-url';
 import ModelUpload from '../components/ModelUpload.vue';
 import { format, parse, isBefore } from 'date-fns';
+import SingleUpload from '../components/SingleUpload.vue';
 export default {
     name: 'CollectionEdit',
-    components: { ModelUpload },
+    components: { ModelUpload, SingleUpload },
     created() {
         Promise.all([
             new Promise((resolve, reject) => {

+ 8 - 4
src/main/vue/src/views/CouponEdit.vue

@@ -31,10 +31,10 @@
                     <el-form-item prop="collectionIds" label="藏品" v-if="formData.limited">
                         <el-table :data="collections">
                             <el-table-column type="index" label="#"></el-table-column>
-                            <el-table-column prop="id" label="ID"></el-table-column>
+                            <el-table-column prop="id" label="ID" width="80"></el-table-column>
                             <el-table-column prop="name" label="名称"></el-table-column>
                             <el-table-column width="80" align="center">
-                                <template v-slot="{ row, $index }">
+                                <template v-slot="{ $index }">
                                     <el-button type="danger" plain @click="delCollection($index)" size="mini">
                                         删除
                                     </el-button>
@@ -64,7 +64,7 @@
             <el-dialog title="添加藏品" :visible.sync="showCollectionDialog" width="500px">
                 <el-form :model="{ collectionId }" ref="collectionForm" inline>
                     <el-form-item prop="collectionId" :rules="{ required: true, message: '请选择藏品' }">
-                        <collection-search ref="collectionSearch" v-model="collectionId"> </collection-search>
+                        <collection-search ref="collectionSearch" v-model="collectionId" style="width: 300px"> </collection-search>
                     </el-form-item>
                 </el-form>
                 <div slot="footer">
@@ -84,6 +84,9 @@ export default {
                 .get('coupon/get/' + this.$route.query.id)
                 .then(res => {
                     this.formData = res;
+                    if (res.collectionIds) {
+                        this.collections = res.collections;
+                    }
                 })
                 .catch(e => {
                     console.log(e);
@@ -157,7 +160,8 @@ export default {
         },
         submit() {
             let data = { ...this.formData };
-
+            data.collections = null;
+            
             this.saving = true;
             this.$http
                 .post('/coupon/save', data, { body: 'json' })

+ 4 - 2
src/main/vue/src/views/CouponList.vue

@@ -49,12 +49,14 @@
             <el-table-column prop="remark" label="备注" show-overflow-tooltip> </el-table-column>
             <el-table-column prop="limited" label="指定藏品">
                 <template slot-scope="{ row }">
-                    <el-tag :type="row.limited ? '' : 'info'">{{ row.limited }}</el-tag>
+                    <el-tag type="success" v-if="row.limited">是</el-tag>
+                    <el-tag type="info" v-else>否</el-tag>
                 </template>
             </el-table-column>
             <el-table-column prop="needGas" label="需要支付GAS">
                 <template slot-scope="{ row }">
-                    <el-tag :type="row.needGas ? '' : 'info'">{{ row.needGas }}</el-tag>
+                       <el-tag type="success" v-if="row.needGas">是</el-tag>
+                    <el-tag type="info" v-else>否</el-tag>
                 </template>
             </el-table-column>
             <el-table-column prop="expiration" label="到期时间"> </el-table-column>