Commit 1aa9f87d authored by Junling Bu's avatar Junling Bu
Browse files

feat[litemall-admin, litemall-admin-api]: 专题支持批量删除

parent ba34d881
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>
<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 v-loading="listLoading" :data="list" element-loading-text="正在查询中。。。" border fit highlight-current-row>
<el-table-column align="center" label="专题标题" prop="title"/>
<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" 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);
}
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment