feat[litemall-admin, litemall-admin-api]: 专题支持批量删除
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
package org.linlinjava.litemall.admin.web;
|
||||
|
||||
import io.swagger.models.auth.In;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.linlinjava.litemall.admin.annotation.RequiresPermissionsDesc;
|
||||
import org.linlinjava.litemall.core.util.JacksonUtil;
|
||||
import org.linlinjava.litemall.core.util.ResponseUtil;
|
||||
import org.linlinjava.litemall.core.validator.Order;
|
||||
import org.linlinjava.litemall.core.validator.Sort;
|
||||
@@ -114,4 +116,12 @@ public class AdminTopicController {
|
||||
return ResponseUtil.ok();
|
||||
}
|
||||
|
||||
@RequiresPermissions("admin:topic:batch-delete")
|
||||
@RequiresPermissionsDesc(menu = {"推广管理", "专题管理"}, button = "批量删除")
|
||||
@PostMapping("/batch-delete")
|
||||
public Object batchDelete(@RequestBody String body) {
|
||||
List<Integer> ids = JacksonUtil.parseIntegerList(body, "ids");
|
||||
topicService.deleteByIds(ids);
|
||||
return ResponseUtil.ok();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@tinymce/tinymce-vue": "3.0.1",
|
||||
"lodash": "^4.17.11",
|
||||
"v-charts": "1.19.0",
|
||||
"axios": "0.18.1",
|
||||
"clipboard": "2.0.4",
|
||||
@@ -83,9 +84,7 @@
|
||||
"html-webpack-plugin": "3.2.0",
|
||||
"husky": "1.3.1",
|
||||
"lint-staged": "8.1.5",
|
||||
"mockjs": "1.0.1-beta3",
|
||||
"node-sass": "^4.9.0",
|
||||
"plop": "2.3.0",
|
||||
"runjs": "^4.3.2",
|
||||
"sass-loader": "^7.1.0",
|
||||
"script-ext-html-webpack-plugin": "2.1.3",
|
||||
|
||||
@@ -39,3 +39,11 @@ export function deleteTopic(data) {
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function batchDeleteTopic(data) {
|
||||
return request({
|
||||
url: '/topic/batch-delete',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
@@ -181,6 +181,12 @@ aside {
|
||||
}
|
||||
}
|
||||
|
||||
.operator-container {
|
||||
padding-bottom: 10px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
//refine vue-multiselect plugin
|
||||
.multiselect {
|
||||
line-height: 16px;
|
||||
|
||||
@@ -3,18 +3,24 @@
|
||||
|
||||
<!-- 查询和其他操作 -->
|
||||
<div class="filter-container">
|
||||
<el-input v-model="listQuery.title" clearable class="filter-item" style="width: 200px;" placeholder="请输入专题标题"/>
|
||||
<el-input v-model="listQuery.subtitle" clearable class="filter-item" style="width: 200px;" placeholder="请输入专题子标题"/>
|
||||
<el-input v-model="listQuery.title" clearable class="filter-item" style="width: 200px;" placeholder="请输入专题标题" />
|
||||
<el-input v-model="listQuery.subtitle" clearable class="filter-item" style="width: 200px;" placeholder="请输入专题子标题" />
|
||||
<el-button v-permission="['GET /admin/topic/list']" class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter">查找</el-button>
|
||||
<el-button v-permission="['POST /admin/topic/create']" class="filter-item" type="primary" icon="el-icon-edit" @click="handleCreate">添加</el-button>
|
||||
<el-button :loading="downloadLoading" class="filter-item" type="primary" icon="el-icon-download" @click="handleDownload">导出</el-button>
|
||||
</div>
|
||||
|
||||
<!-- 查询结果 -->
|
||||
<el-table v-loading="listLoading" :data="list" element-loading-text="正在查询中。。。" border fit highlight-current-row>
|
||||
<el-table-column align="center" label="专题标题" prop="title"/>
|
||||
<div class="operator-container">
|
||||
<el-button v-permission="['GET /admin/topic/list']" class="filter-item" type="danger" icon="el-icon-delete" @click="handleBatchDelete">批量删除</el-button>
|
||||
</div>
|
||||
|
||||
<el-table-column align="center" label="专题子标题" min-width="200" prop="subtitle"/>
|
||||
<!-- 查询结果 -->
|
||||
<el-table v-loading="listLoading" :data="list" element-loading-text="正在查询中。。。" border fit highlight-current-row @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
|
||||
<el-table-column align="center" label="专题标题" prop="title" />
|
||||
|
||||
<el-table-column align="center" label="专题子标题" min-width="200" prop="subtitle" />
|
||||
|
||||
<el-table-column align="center" property="picUrl" label="图片">
|
||||
<template slot-scope="scope">
|
||||
@@ -25,15 +31,15 @@
|
||||
<el-table-column align="center" label="专题详情" prop="content">
|
||||
<template slot-scope="scope">
|
||||
<el-dialog :visible.sync="contentDialogVisible" title="专题详情">
|
||||
<div v-html="contentDetail"/>
|
||||
<div v-html="contentDetail" />
|
||||
</el-dialog>
|
||||
<el-button type="primary" size="mini" @click="showContent(scope.row.content)">查看</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" label="底价" prop="price"/>
|
||||
<el-table-column align="center" label="底价" prop="price" />
|
||||
|
||||
<el-table-column align="center" label="阅读数量" prop="readCount"/>
|
||||
<el-table-column align="center" label="阅读数量" prop="readCount" />
|
||||
|
||||
<el-table-column align="center" label="操作" min-width="100" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
@@ -82,9 +88,10 @@
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import { listTopic, deleteTopic } from '@/api/topic'
|
||||
import { listTopic, deleteTopic, batchDeleteTopic } from '@/api/topic'
|
||||
import BackToTop from '@/components/BackToTop'
|
||||
import Pagination from '@/components/Pagination' // Secondary package based on el-pagination
|
||||
import _ from 'lodash'
|
||||
|
||||
export default {
|
||||
name: 'Topic',
|
||||
@@ -102,6 +109,7 @@ export default {
|
||||
sort: 'add_time',
|
||||
order: 'desc'
|
||||
},
|
||||
multipleSelection: [],
|
||||
contentDetail: '',
|
||||
contentDialogVisible: false,
|
||||
downloadLoading: false
|
||||
@@ -152,10 +160,37 @@ export default {
|
||||
})
|
||||
})
|
||||
},
|
||||
handleSelectionChange(val) {
|
||||
this.multipleSelection = val
|
||||
},
|
||||
showContent(content) {
|
||||
this.contentDetail = content
|
||||
this.contentDialogVisible = true
|
||||
},
|
||||
handleBatchDelete() {
|
||||
if (this.multipleSelection.length === 0) {
|
||||
this.$message.error('请选择至少一条记录')
|
||||
return
|
||||
}
|
||||
const ids = []
|
||||
_.forEach(this.multipleSelection, function(item) {
|
||||
ids.push(item.id)
|
||||
})
|
||||
batchDeleteTopic({ ids: ids })
|
||||
.then(response => {
|
||||
this.$notify.success({
|
||||
title: '成功',
|
||||
message: '批量删除专题成功'
|
||||
})
|
||||
this.getList()
|
||||
})
|
||||
.catch(response => {
|
||||
this.$notify.error({
|
||||
title: '失败',
|
||||
message: response.data.errmsg
|
||||
})
|
||||
})
|
||||
},
|
||||
handleDownload() {
|
||||
this.downloadLoading = true
|
||||
import('@/vendor/Export2Excel').then(excel => {
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.linlinjava.litemall.db.service;
|
||||
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import org.linlinjava.litemall.db.dao.LitemallTopicMapper;
|
||||
import org.linlinjava.litemall.db.domain.LitemallGroupon;
|
||||
import org.linlinjava.litemall.db.domain.LitemallTopic;
|
||||
import org.linlinjava.litemall.db.domain.LitemallTopic.Column;
|
||||
import org.linlinjava.litemall.db.domain.LitemallTopicExample;
|
||||
@@ -100,4 +101,12 @@ public class LitemallTopicService {
|
||||
}
|
||||
|
||||
|
||||
public void deleteByIds(List<Integer> ids) {
|
||||
LitemallTopicExample example = new LitemallTopicExample();
|
||||
example.or().andIdIn(ids).andDeletedEqualTo(false);
|
||||
LitemallTopic topic = new LitemallTopic();
|
||||
topic.setUpdateTime(LocalDateTime.now());
|
||||
topic.setDeleted(true);
|
||||
topicMapper.updateByExampleSelective(topic, example);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user