xiongzhu 4 년 전
부모
커밋
4f0dfc3371

+ 6 - 0
src/main/java/com/izouma/nineth/domain/Asset.java

@@ -2,6 +2,7 @@ package com.izouma.nineth.domain;
 
 import com.izouma.nineth.annotations.Searchable;
 import com.izouma.nineth.converter.FileObjectListConverter;
+import com.izouma.nineth.converter.PrivilegeListConverter;
 import com.izouma.nineth.converter.PropertyListConverter;
 import com.izouma.nineth.enums.AssetStatus;
 import io.swagger.annotations.ApiModel;
@@ -53,6 +54,11 @@ public class Asset extends BaseEntity {
     @ApiModelProperty("特性")
     private List<CollectionProperty> properties;
 
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = PrivilegeListConverter.class)
+    @ApiModelProperty("特权")
+    private List<Privilege> privileges;
+
     @ApiModelProperty("分类")
     private String category;
 

+ 6 - 0
src/main/java/com/izouma/nineth/domain/Order.java

@@ -2,6 +2,7 @@ package com.izouma.nineth.domain;
 
 import com.izouma.nineth.annotations.Searchable;
 import com.izouma.nineth.converter.FileObjectListConverter;
+import com.izouma.nineth.converter.PrivilegeListConverter;
 import com.izouma.nineth.converter.PropertyListConverter;
 import com.izouma.nineth.enums.CollectionType;
 import com.izouma.nineth.enums.OrderStatus;
@@ -57,6 +58,11 @@ public class Order extends BaseEntity {
     @ApiModelProperty("特性")
     private List<CollectionProperty> properties;
 
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = PrivilegeListConverter.class)
+    @ApiModelProperty("特权")
+    private List<Privilege> privileges;
+
     @ApiModelProperty("分类")
     private String category;
 

+ 5 - 2
src/main/java/com/izouma/nineth/domain/Privilege.java

@@ -16,6 +16,7 @@ import java.util.List;
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @JsonIgnoreProperties(value = {"hibernateLazyInitializer"}, ignoreUnknown = true)
 public class Privilege {
+    private Long   id;
 
     @ApiModelProperty("特权名称")
     private String name;
@@ -23,8 +24,8 @@ public class Privilege {
     @ApiModelProperty("特权描述")
     private String description;
 
-    @ApiModelProperty("简介")
-    private String intro;
+    @ApiModelProperty("简介说明")
+    private String remark;
 
     @ApiModelProperty("详情")
     private String detail;
@@ -49,4 +50,6 @@ public class Privilege {
 
     @ApiModelProperty("结束时间")
     private LocalDateTime endTime;
+
+    private Long openedBy;
 }

+ 1 - 8
src/main/java/com/izouma/nineth/domain/PrivilegeOption.java

@@ -20,20 +20,13 @@ public class PrivilegeOption extends BaseEntity {
 
     private String description;
 
-    private String intro;
-
-    private String detail;
-
     private String type;
 
     @Convert(converter = StringArrayConverter.class)
     private List<String> icon;
 
-    private boolean opened;
-
-    private LocalDateTime openTime;
-
     private boolean once;
 
     private boolean refreshOnTransfer;
+
 }

+ 12 - 0
src/main/java/com/izouma/nineth/service/AssetService.java

@@ -12,6 +12,7 @@ import com.izouma.nineth.event.CreateAssetEvent;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.*;
 import com.izouma.nineth.utils.JpaUtils;
+import com.izouma.nineth.utils.SecurityUtils;
 import io.ipfs.api.IPFS;
 import io.ipfs.api.MerkleNode;
 import io.ipfs.api.NamedStreamable;
@@ -28,6 +29,7 @@ import org.springframework.stereotype.Service;
 
 import java.io.File;
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 
 @Service
 @AllArgsConstructor
@@ -243,4 +245,14 @@ public class AssetService {
         asset.setCollectionId(null);
         assetRepo.save(asset);
     }
+
+    public void usePrivilege(Long assetId, Long privilegeId) {
+        Asset asset = assetRepo.findById(assetId).orElseThrow(new BusinessException("无记录"));
+        asset.getPrivileges().stream().filter(p -> p.getId().equals(privilegeId)).forEach(p -> {
+            p.setOpened(true);
+            p.setOpenTime(LocalDateTime.now());
+            p.setOpenedBy(SecurityUtils.getAuthenticatedUser().getId());
+        });
+        assetRepo.save(asset);
+    }
 }

+ 1 - 1
src/main/vue/src/views/BlindBoxEdit.vue

@@ -17,7 +17,7 @@
                     style="max-width: 500px"
                 >
                     <el-form-item prop="name" label="名称">
-                        <el-input v-model="formData.name" :disabled="!canEdit"></el-input>
+                        <el-input v-model="formData.name" :disabled="!canEdit" :maxlength="16"></el-input>
                     </el-form-item>
                     <el-form-item prop="pic" label="图片">
                         <object-upload

+ 51 - 14
src/main/vue/src/views/CollectionEdit.vue

@@ -17,7 +17,7 @@
                     style="max-width: 500px"
                 >
                     <el-form-item prop="name" label="名称">
-                        <el-input v-model="formData.name" :disabled="!canEdit"></el-input>
+                        <el-input v-model="formData.name" :disabled="!canEdit" :maxlength="16"></el-input>
                     </el-form-item>
                     <el-form-item prop="pic" label="图片">
                         <object-upload
@@ -86,11 +86,11 @@
                             <el-table-column prop="name" label="可选特权" width="150"></el-table-column>
                             <el-table-column prop="description"></el-table-column>
                             <el-table-column width="155" align="right">
-                                <template v-slot="{ row }">
-                                    <el-button size="mini" v-if="!row.added" @click="addPrivilege(row)">
+                                <template v-slot="{ row, $index }">
+                                    <el-button size="mini" v-if="!row.added" @click="addPrivilege(row, $index)">
                                         添加
                                     </el-button>
-                                    <el-button size="mini" v-if="!!row.added" plain @click="editPrivilege(row)">
+                                    <el-button size="mini" v-if="!!row.added" plain @click="editPrivilege(row, $index)">
                                         编辑
                                     </el-button>
                                     <el-button
@@ -98,7 +98,7 @@
                                         v-if="!!row.added"
                                         type="danger"
                                         plain
-                                        @click="delPrivilege(row)"
+                                        @click="delPrivilege(row, $index)"
                                     >
                                         删除
                                     </el-button>
@@ -188,19 +188,29 @@
         </div>
 
         <el-dialog :visible.sync="showPrivilegeEditDialog" width="600px" :title="privilegeForm.name">
-            <el-form ref="privilegeForm" :model="privilegeForm" label-position="right" label-width="80px">
+            <el-form
+                ref="privilegeForm"
+                :model="privilegeForm"
+                label-position="right"
+                label-width="80px"
+                :rules="privelegeRules"
+            >
                 <el-form-item
-                    prop="name"
+                    prop="detail"
                     label="详细内容"
                     v-if="privilegeForm.type === 'text' || privilegeForm.type === 'exchange'"
                 >
                     <el-input type="textarea" :autosize="{ minRows: 3 }" v-model="privilegeForm.detail"></el-input>
                 </el-form-item>
-                <el-form-item prop="name" label="二维码" v-if="privilegeForm.type === 'qrcode'">
+                <el-form-item prop="detail" label="二维码" v-if="privilegeForm.type === 'qrcode'">
                     <single-upload v-model="privilegeForm.detail"></single-upload>
                 </el-form-item>
-                <el-form-item prop="intro" label="说明" v-if="privilegeForm.type === 'qrcode'">
-                    <el-input type="textarea" :autosize="{ minRows: 3 }" v-model="privilegeForm.intro"></el-input>
+                <el-form-item
+                    prop="remark"
+                    label="说明"
+                    v-if="privilegeForm.type === 'qrcode' || privilegeForm.type === 'code'"
+                >
+                    <el-input type="textarea" :autosize="{ minRows: 3 }" v-model="privilegeForm.remark"></el-input>
                 </el-form-item>
             </el-form>
             <div slot="footer">
@@ -241,6 +251,12 @@ export default {
                 })
         ]).then(() => {
             console.log(this.formData, this.privilegeOptions);
+            this.formData.privileges.forEach(p => {
+                let idx = this.privilegeOptions.findIndex(i => i.name === p.name);
+                if (idx > -1) {
+                    this.$set(this.privilegeOptions[idx], 'added', true);
+                }
+            });
         });
     },
     computed: {
@@ -398,7 +414,11 @@ export default {
             cateogories: ['收藏品', '数字艺术', '门票', '游戏', '音乐', '使用', '其他'],
             privilegeOptions: [],
             showPrivilegeEditDialog: false,
-            privilegeForm: {}
+            privilegeForm: {},
+            privelegeRules: {
+                detail: [{ required: true, message: '请填写内容' }],
+                remark: [{ required: true, message: '请填写说明' }]
+            }
         };
     },
     methods: {
@@ -458,13 +478,30 @@ export default {
         delProperty(i) {
             this.formData.properties.splice(i, 1);
         },
-        addPrivilege(row) {
+        addPrivilege(row, i) {
             this.privilegeForm = { ...row };
             this.showPrivilegeEditDialog = true;
+            if (this.$refs.privilegeForm) {
+                this.$nextTick(() => {
+                    this.$refs.privilegeForm.clearValidate();
+                });
+            }
         },
-        editPrivilege(row) {
-            this.privilegeForm = { ...(this.formData.privileges.find(i => i.name === row.name) || {}) };
+        editPrivilege(row, i) {
+            this.privilegeForm = { ...(this.formData.privileges.find(e => e.name === row.name) || {}) };
             this.showPrivilegeEditDialog = true;
+            if (this.$refs.privilegeForm) {
+                this.$nextTick(() => {
+                    this.$refs.privilegeForm.clearValidate();
+                });
+            }
+        },
+        delPrivilege(row, i) {
+            let idx = this.formData.privileges.find(e => e.name === row.name);
+            if (idx > -1) {
+                this.formData.privileges.splice(idx, 1);
+            }
+            this.$set(this.privilegeOptions[i], 'added', false);
         },
         savePrivilege() {
             this.$refs.privilegeForm