Browse Source

Merge branch 'dev-meta' of xiongzhu/raex_back into master

sunkean 3 years ago
parent
commit
0d0da31a55

+ 3 - 1
src/main/java/com/izouma/nineth/config/CacheConfig.java

@@ -142,7 +142,9 @@ public class CacheConfig {
         cacheNamesConfigurationMap.put("blindBoxRare", RedisCacheConfiguration.defaultCacheConfig()
         cacheNamesConfigurationMap.put("blindBoxRare", RedisCacheConfiguration.defaultCacheConfig()
                 .entryTtl(Duration.ofSeconds(2))
                 .entryTtl(Duration.ofSeconds(2))
                 .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer())));
                 .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer())));
-
+        cacheNamesConfigurationMap.put("transactionTopTen", RedisCacheConfiguration.defaultCacheConfig()
+                .entryTtl(Duration.ofDays(1))
+                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer())));
         RedisCacheManager redisCacheManager = RedisCacheManager.builder()
         RedisCacheManager redisCacheManager = RedisCacheManager.builder()
                 .cacheWriter(RedisCacheWriter.nonLockingRedisCacheWriter(redisTemplate.getConnectionFactory()))
                 .cacheWriter(RedisCacheWriter.nonLockingRedisCacheWriter(redisTemplate.getConnectionFactory()))
                 .withInitialCacheConfigurations(cacheNamesConfigurationMap)
                 .withInitialCacheConfigurations(cacheNamesConfigurationMap)

+ 38 - 0
src/main/java/com/izouma/nineth/dto/TransactionTopTenDTO.java

@@ -0,0 +1,38 @@
+package com.izouma.nineth.dto;
+
+import com.izouma.nineth.converter.FileObjectListConverter;
+import com.izouma.nineth.domain.FileObject;
+import com.izouma.nineth.enums.CollectionSource;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Convert;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class TransactionTopTenDTO {
+
+    private Long id;
+
+    private String name;
+
+    private String prefixName;
+
+    @ApiModelProperty("来源")
+    @Enumerated(EnumType.STRING)
+    private CollectionSource source;
+
+    @ApiModelProperty("图片")
+    @Convert(converter = FileObjectListConverter.class)
+    @Column(columnDefinition = "TEXT")
+    private List<FileObject> pic;
+
+    private int num;
+}

+ 8 - 0
src/main/java/com/izouma/nineth/repo/OrderRepo.java

@@ -16,6 +16,7 @@ import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.util.Collection;
 import java.util.Collection;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.Optional;
 
 
 public interface OrderRepo extends JpaRepository<Order, Long>, JpaSpecificationExecutor<Order> {
 public interface OrderRepo extends JpaRepository<Order, Long>, JpaSpecificationExecutor<Order> {
@@ -110,4 +111,11 @@ public interface OrderRepo extends JpaRepository<Order, Long>, JpaSpecificationE
     int countAllByUserIdAndCollectionIdAndStatusIn(Long userId, Long collectionId, Collection<OrderStatus> status);
     int countAllByUserIdAndCollectionIdAndStatusIn(Long userId, Long collectionId, Collection<OrderStatus> status);
 
 
     Order findFirstByCollectionIdOrderByCreatedAtDesc(Long collectionId);
     Order findFirstByCollectionIdOrderByCreatedAtDesc(Long collectionId);
+
+    @Query(value = "SELECT a.id id, a.name name ,a.prefixName prefixName, a.source source, SUM(a.num) num FROM " +
+            "(SELECT a.id id, o.name name,a.prefix_name prefixName, o.source source,COUNT(*) num FROM order_info o LEFT JOIN asset a ON o.asset_id = a.id WHERE o.`status` = 'FINISH' AND o.source = 'TRANSFER' AND o.pay_time > ?1 GROUP BY a.prefix_name " +
+            "UNION ALL" +
+            " SELECT a.id id, o.name name,a.prefix_name prefixName, o.source source,COUNT(*) num FROM order_info o LEFT JOIN collection_info a ON o.collection_id = a.id WHERE o.`status` = 'FINISH' and o.source = 'OFFICIAL' AND o.pay_time > ?1 GROUP BY a.prefix_name) a " +
+            "GROUP BY a.prefixName ORDER BY (SUM(a.num)) DESC LIMIT 10", nativeQuery = true)
+    List<Map<String, String>> transactionTopTen(LocalDateTime payTime);
 }
 }

+ 1 - 0
src/main/java/com/izouma/nineth/security/WebSecurityConfig.java

@@ -162,6 +162,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 .antMatchers("/metaAdvertRecord/**").permitAll()
                 .antMatchers("/metaAdvertRecord/**").permitAll()
                 .antMatchers("/metaDestroyActivity/metaQuery").permitAll()
                 .antMatchers("/metaDestroyActivity/metaQuery").permitAll()
                 .antMatchers("/metaResourceVersion/**").permitAll()
                 .antMatchers("/metaResourceVersion/**").permitAll()
+                .antMatchers("/asset/topTen").permitAll()
 
 
                 // all other requests need to be authenticated
                 // all other requests need to be authenticated
                 .anyRequest().authenticated().and()
                 .anyRequest().authenticated().and()

+ 10 - 0
src/main/java/com/izouma/nineth/service/MetaTaskToUserService.java

@@ -92,6 +92,16 @@ public class MetaTaskToUserService {
         return MetaRestResult.returnSuccess(metaTaskToUsers);
         return MetaRestResult.returnSuccess(metaTaskToUsers);
     }
     }
 
 
+    public MetaRestResult<MetaTaskToUser> findProgress(Long id) {
+        MetaTaskToUser metaTaskToUsers = metaTaskToUserRepo.findByIdAndDel(id, false);
+        if (Objects.isNull(metaTaskToUsers)) {
+            return MetaRestResult.returnError(String.format("根据id[%S]查询不到用户领取记录", id));
+        }
+        setProgress(metaTaskToUsers);
+        return MetaRestResult.returnSuccess(metaTaskToUsers);
+    }
+
+
     /**
     /**
      * 设置任务进度
      * 设置任务进度
      *
      *

+ 42 - 0
src/main/java/com/izouma/nineth/web/AssetController.java

@@ -1,13 +1,18 @@
 package com.izouma.nineth.web;
 package com.izouma.nineth.web;
 
 
+import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSONArray;
 import com.fasterxml.jackson.annotation.JsonView;
 import com.fasterxml.jackson.annotation.JsonView;
 import com.izouma.nineth.TokenHistory;
 import com.izouma.nineth.TokenHistory;
 import com.izouma.nineth.domain.Asset;
 import com.izouma.nineth.domain.Asset;
+import com.izouma.nineth.domain.Collection;
 import com.izouma.nineth.domain.GiftOrder;
 import com.izouma.nineth.domain.GiftOrder;
 import com.izouma.nineth.dto.*;
 import com.izouma.nineth.dto.*;
+import com.izouma.nineth.enums.CollectionSource;
 import com.izouma.nineth.enums.CollectionType;
 import com.izouma.nineth.enums.CollectionType;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.AssetRepo;
 import com.izouma.nineth.repo.AssetRepo;
+import com.izouma.nineth.repo.CollectionRepo;
 import com.izouma.nineth.repo.OrderRepo;
 import com.izouma.nineth.repo.OrderRepo;
 import com.izouma.nineth.service.AssetService;
 import com.izouma.nineth.service.AssetService;
 import com.izouma.nineth.service.CacheService;
 import com.izouma.nineth.service.CacheService;
@@ -21,6 +26,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Pageable;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.cache.annotation.Cacheable;
 
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.IOException;
@@ -42,6 +48,7 @@ public class AssetController extends BaseController {
     private OrderRepo               orderRepo;
     private OrderRepo               orderRepo;
     private CacheService            cacheService;
     private CacheService            cacheService;
     private UserAssetSummaryService userAssetSummaryService;
     private UserAssetSummaryService userAssetSummaryService;
+    private CollectionRepo collectionRepo;
 
 
     //@PreAuthorize("hasRole('ADMIN')")
     //@PreAuthorize("hasRole('ADMIN')")
 //    @PostMapping("/save")
 //    @PostMapping("/save")
@@ -240,6 +247,41 @@ public class AssetController extends BaseController {
     public void recal(@RequestParam Long userId) {
     public void recal(@RequestParam Long userId) {
         userAssetSummaryService.calculateNum(userId, 1L);
         userAssetSummaryService.calculateNum(userId, 1L);
     }
     }
+
+    @GetMapping("/topTen")
+    @Cacheable(value = "transactionTopTen")
+    public List<TransactionTopTenDTO> transactionTopTen() {
+        LocalDateTime localDateTime = LocalDateTime.now().plusDays(-7);
+        List<Map<String, String>> map = orderRepo.transactionTopTen(localDateTime);
+        JSONArray jsonArray = new JSONArray();
+        if (CollectionUtil.isEmpty(map)) {
+            return null;
+        }
+        jsonArray.addAll(map);
+        List<TransactionTopTenDTO> transactionTopTenDTOS = jsonArray.toJavaList(TransactionTopTenDTO.class);
+        if (CollectionUtil.isEmpty(transactionTopTenDTOS)) {
+            return null;
+        }
+        transactionTopTenDTOS.forEach(transactionTopTenDTO -> {
+            if (Objects.nonNull(transactionTopTenDTO.getId())) {
+                if (transactionTopTenDTO.getSource().equals(CollectionSource.OFFICIAL)) {
+                    Collection collection = collectionRepo.findById(transactionTopTenDTO.getId()).orElse(null);
+                    if (Objects.nonNull(collection)) {
+                        transactionTopTenDTO.setPic(collection.getPic());
+                    }
+                }
+                if (transactionTopTenDTO.getSource().equals(CollectionSource.TRANSFER)) {
+                    Asset asset = assetRepo.findById(transactionTopTenDTO.getId()).orElse(null);
+                    if (Objects.nonNull(asset)) {
+                        transactionTopTenDTO.setPic(asset.getPic());
+                    }
+                }
+            }
+            transactionTopTenDTO.setId(null);
+            transactionTopTenDTO.setSource(null);
+        });
+        return transactionTopTenDTOS;
+    }
 }
 }
 
 
 
 

+ 5 - 0
src/main/java/com/izouma/nineth/web/MetaTaskToUserController.java

@@ -74,4 +74,9 @@ public class MetaTaskToUserController {
     public MetaRestResult<List<MetaTaskToUser>> findByStatus(@PathVariable Long userId, @PathVariable MetaTaskStatus status) {
     public MetaRestResult<List<MetaTaskToUser>> findByStatus(@PathVariable Long userId, @PathVariable MetaTaskStatus status) {
         return metaTaskToUserService.findByStatus(userId, status);
         return metaTaskToUserService.findByStatus(userId, status);
     }
     }
+
+    @GetMapping("/{id}/findProgress")
+    public MetaRestResult<MetaTaskToUser> findProgress(@PathVariable Long id) {
+        return metaTaskToUserService.findProgress(id);
+    }
 }
 }

+ 189 - 191
src/main/vue/src/views/MetaTaskEdit.vue

@@ -1,205 +1,203 @@
 <template>
 <template>
-	<div class="edit-view">
-		<page-title>
-			<el-button @click="$router.go(-1)" :disabled="saving"> 取消 </el-button>
-			<el-button @click="onDelete" :disabled="saving" type="danger" v-if="formData.id"> 删除 </el-button>
-			<el-button @click="onSave" :loading="saving" type="primary"> 保存 </el-button>
-		</page-title>
-		<div class="edit-view__content-wrapper">
-			<div class="edit-view__content-section">
-				<el-form
-					:model="formData"
-					:rules="rules"
-					ref="form"
-					label-width="130px"
-					label-position="right"
-					size="small"
-					style="max-width: 500px"
-				>
-					<el-form-item prop="name" label="任务名称">
-						<el-input v-model="formData.name"> </el-input>
-					</el-form-item>
-					<el-form-item prop="detail" label="详情" style="width: calc(100vw - 450px)">
-						<rich-text v-model="formData.detail"> </rich-text>
-					</el-form-item>
-					<el-form-item prop="awardPic" label="奖励图片">
+    <div class="edit-view">
+        <page-title>
+            <el-button @click="$router.go(-1)" :disabled="saving"> 取消 </el-button>
+            <el-button @click="onDelete" :disabled="saving" type="danger" v-if="formData.id"> 删除 </el-button>
+            <el-button @click="onSave" :loading="saving" type="primary"> 保存 </el-button>
+        </page-title>
+        <div class="edit-view__content-wrapper">
+            <div class="edit-view__content-section">
+                <el-form
+                    :model="formData"
+                    :rules="rules"
+                    ref="form"
+                    label-width="130px"
+                    label-position="right"
+                    size="small"
+                    style="max-width: 500px"
+                >
+                    <el-form-item prop="name" label="任务名称">
+                        <el-input v-model="formData.name"> </el-input>
+                    </el-form-item>
+                    <el-form-item prop="detail" label="详情" style="width: calc(100vw - 450px)">
+                        <el-input
+                            v-model="formData.detail"
+                            type="textarea"
+                            :autosize="{ minRows: 3, maxRows: 20 }"
+                            placeholder="请输入任务详情"
+                        >
+                        </el-input>
+                    </el-form-item>
+                    <el-form-item prop="awardPic" label="奖励图片">
                         <single-upload v-model="formData.awardPic"> </single-upload>
                         <single-upload v-model="formData.awardPic"> </single-upload>
                     </el-form-item>
                     </el-form-item>
-					<el-form-item prop="type" label="任务类型">
-						<el-select v-model="formData.type" clearable filterable placeholder="请选择" @change="change">
-							<el-option
-								v-for="item in typeOptions"
-								:key="item.value"
-								:label="item.label"
-								:value="item.value"
-							>
-							</el-option>
-						</el-select>
-					</el-form-item>
-					<template v-if="formData.type">
-						<el-form-item
-							v-if="formData.type === 'SIGN_IN_SINGLE_DAY'"
-							prop="value"
-							label="签到日期"
-						>
-							<el-date-picker
-								v-model="formData.value"
-								type="date"
-								value-format="yyyy-MM-dd"
-								placeholder="指定签到日期"
-							>
-							</el-date-picker>
-						</el-form-item>
-						<el-form-item
-							v-if="formData.type === 'SIGN_IN_CONTINUOUS'"
-							prop="value"
-							label="开始日期"
-						>
-							<el-date-picker
-								v-model="formData.value"
-								type="date"
-								value-format="yyyy-MM-dd"
-								placeholder="指定开始日期"
-							>
-							</el-date-picker>
-						</el-form-item>
-						<el-form-item prop="value" label="藏品id" v-if="formData.type === 'COLLECT_COLLECTION'">
-							<el-input v-model="formData.value" placeholder="请输入定藏品id"> </el-input>
-							<div class="tip">多个藏品id请用空格隔开 例如 111 222 333</div>
-						</el-form-item>
-						<el-form-item prop="value" label="次数" v-if="formData.type === 'ACCUMULATE'">
-							<el-input-number v-model="formData.value" :min="0"> </el-input-number>
-						</el-form-item>
-						<el-form-item prop="value" label="在线时长(min)" v-if="formData.type === 'ON_LINE_TIME_DAILY'">
-							<el-input-number v-model="formData.value" :min="0"> </el-input-number>
-						</el-form-item>
-					</template>
-					<el-form-item prop="publish" label="是否发布">
-						<el-switch v-model="formData.publish"> </el-switch>
-					</el-form-item>
-					<el-form-item prop="mark" label="是否展示角标">
-						<el-switch v-model="formData.mark"> </el-switch>
-					</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">
-							删除
-						</el-button>
-						<el-button @click="$router.go(-1)" :disabled="saving"> 取消 </el-button>
-					</el-form-item>
-				</el-form>
-			</div>
-		</div>
-	</div>
+                    <el-form-item prop="type" label="任务类型">
+                        <el-select v-model="formData.type" clearable filterable placeholder="请选择" @change="change">
+                            <el-option
+                                v-for="item in typeOptions"
+                                :key="item.value"
+                                :label="item.label"
+                                :value="item.value"
+                            >
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <template v-if="formData.type">
+                        <el-form-item v-if="formData.type === 'SIGN_IN_SINGLE_DAY'" prop="value" label="签到日期">
+                            <el-date-picker
+                                v-model="formData.value"
+                                type="date"
+                                value-format="yyyy-MM-dd"
+                                placeholder="指定签到日期"
+                            >
+                            </el-date-picker>
+                        </el-form-item>
+                        <el-form-item v-if="formData.type === 'SIGN_IN_CONTINUOUS'" prop="value" label="开始日期">
+                            <el-date-picker
+                                v-model="formData.value"
+                                type="date"
+                                value-format="yyyy-MM-dd"
+                                placeholder="指定开始日期"
+                            >
+                            </el-date-picker>
+                        </el-form-item>
+                        <el-form-item prop="value" label="藏品id" v-if="formData.type === 'COLLECT_COLLECTION'">
+                            <el-input v-model="formData.value" placeholder="请输入定藏品id"> </el-input>
+                            <div class="tip">多个藏品id请用空格隔开 例如 111 222 333</div>
+                        </el-form-item>
+                        <el-form-item prop="value" label="次数" v-if="formData.type === 'ACCUMULATE'">
+                            <el-input-number v-model="formData.value" :min="0"> </el-input-number>
+                        </el-form-item>
+                        <el-form-item prop="value" label="在线时长(min)" v-if="formData.type === 'ON_LINE_TIME_DAILY'">
+                            <el-input-number v-model="formData.value" :min="0"> </el-input-number>
+                        </el-form-item>
+                    </template>
+                    <el-form-item prop="publish" label="是否发布">
+                        <el-switch v-model="formData.publish"> </el-switch>
+                    </el-form-item>
+                    <el-form-item prop="mark" label="是否展示角标">
+                        <el-switch v-model="formData.mark"> </el-switch>
+                    </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">
+                            删除
+                        </el-button>
+                        <el-button @click="$router.go(-1)" :disabled="saving"> 取消 </el-button>
+                    </el-form-item>
+                </el-form>
+            </div>
+        </div>
+    </div>
 </template>
 </template>
 <script>
 <script>
 export default {
 export default {
-	name: 'MetaTaskEdit',
-	created() {
-		if (this.$route.query.id) {
-			this.$http
-				.get('metaTask/get/' + this.$route.query.id)
-				.then(res => {
-					this.formData = res;
-				})
-				.catch(e => {
-					console.log(e);
-					this.$message.error(e.error);
-				});
-		}
-	},
-	data() {
-		return {
-			saving: false,
-			formData: {},
-			rules: {
-				name: [
-					{
-						required: true,
-						message: '请输入任务名称',
-						trigger: 'blur'
-					}
-				],
-				description: [
-					{
-						required: true,
-						message: '请输入任务详情',
-						trigger: 'blur'
-					}
-				],
-				type: [
-					{
-						required: true,
-						message: '请输入任务类型',
-						trigger: 'blur'
-					}
-				],
-				value: [
-					{
-						required: true,
-						message: '请指定参数配置',
-						trigger: 'blur'
-					}
-				]
-			},
-			typeOptions: [
-				{ label: '单日签到', value: 'SIGN_IN_SINGLE_DAY' },
-				{ label: '连续多日签到', value: 'SIGN_IN_CONTINUOUS' },
-				{ label: '收集藏品', value: 'COLLECT_COLLECTION' },
-				{ label: '每日在线时长', value: 'ON_LINE_TIME_DAILY' },
-				{ label: '累计', value: 'ACCUMULATE' }
-			]
-		};
-	},
-	methods: {
+    name: 'MetaTaskEdit',
+    created() {
+        if (this.$route.query.id) {
+            this.$http
+                .get('metaTask/get/' + this.$route.query.id)
+                .then(res => {
+                    this.formData = res;
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.$message.error(e.error);
+                });
+        }
+    },
+    data() {
+        return {
+            saving: false,
+            formData: {},
+            rules: {
+                name: [
+                    {
+                        required: true,
+                        message: '请输入任务名称',
+                        trigger: 'blur'
+                    }
+                ],
+                description: [
+                    {
+                        required: true,
+                        message: '请输入任务详情',
+                        trigger: 'blur'
+                    }
+                ],
+                type: [
+                    {
+                        required: true,
+                        message: '请输入任务类型',
+                        trigger: 'blur'
+                    }
+                ],
+                value: [
+                    {
+                        required: true,
+                        message: '请指定参数配置',
+                        trigger: 'blur'
+                    }
+                ]
+            },
+            typeOptions: [
+                { label: '单日签到', value: 'SIGN_IN_SINGLE_DAY' },
+                { label: '连续多日签到', value: 'SIGN_IN_CONTINUOUS' },
+                { label: '收集藏品', value: 'COLLECT_COLLECTION' },
+                { label: '每日在线时长', value: 'ON_LINE_TIME_DAILY' },
+                { label: '累计', value: 'ACCUMULATE' }
+            ]
+        };
+    },
+    methods: {
         change() {
         change() {
             if (this.formData.value) {
             if (this.formData.value) {
-                this.formData.value = undefined
+                this.formData.value = undefined;
             }
             }
         },
         },
-		onSave() {
-			this.$refs.form.validate(valid => {
-				if (valid) {
-					this.submit();
-				} else {
-					return false;
-				}
-			});
-		},
-		submit() {
-			let data = { ...this.formData };
+        onSave() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            let data = { ...this.formData };
 
 
-			this.saving = true;
-			this.$http
-				.post('/metaTask/save', data, { body: 'json' })
-				.then(res => {
-					this.saving = false;
-					this.$message.success('成功');
-					this.$router.go(-1);
-				})
-				.catch(e => {
-					console.log(e);
-					this.saving = false;
-					this.$message.error(e.error);
-				});
-		},
-		onDelete() {
-			this.$confirm('删除将无法恢复,确认要删除么?', '警告', { type: 'error' })
-				.then(() => {
-					return this.$http.post(`/metaTask/del/${this.formData.id}`);
-				})
-				.then(() => {
-					this.$message.success('删除成功');
-					this.$router.go(-1);
-				})
-				.catch(e => {
-					if (e !== 'cancel') {
-						console.log(e);
-						this.$message.error((e || {}).error || '删除失败');
-					}
-				});
-		}
-	}
+            this.saving = true;
+            this.$http
+                .post('/metaTask/save', data, { body: 'json' })
+                .then(res => {
+                    this.saving = false;
+                    this.$message.success('成功');
+                    this.$router.go(-1);
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.saving = false;
+                    this.$message.error(e.error);
+                });
+        },
+        onDelete() {
+            this.$confirm('删除将无法恢复,确认要删除么?', '警告', { type: 'error' })
+                .then(() => {
+                    return this.$http.post(`/metaTask/del/${this.formData.id}`);
+                })
+                .then(() => {
+                    this.$message.success('删除成功');
+                    this.$router.go(-1);
+                })
+                .catch(e => {
+                    if (e !== 'cancel') {
+                        console.log(e);
+                        this.$message.error((e || {}).error || '删除失败');
+                    }
+                });
+        }
+    }
 };
 };
 </script>
 </script>
 <style lang="less" scoped>
 <style lang="less" scoped>