A 发布申请批量删除支持按保留数量删除

pull/103/head
vapao 2020-05-28 11:00:44 +08:00
parent 122188c35e
commit 41dc95ad4d
2 changed files with 34 additions and 11 deletions

View File

@ -10,6 +10,7 @@ from apps.deploy.models import DeployRequest
from apps.app.models import Deploy from apps.app.models import Deploy
from apps.deploy.utils import deploy_dispatch from apps.deploy.utils import deploy_dispatch
from apps.host.models import Host from apps.host.models import Host
from collections import defaultdict
from threading import Thread from threading import Thread
from datetime import datetime from datetime import datetime
import json import json
@ -109,14 +110,29 @@ class RequestView(View):
def delete(self, request): def delete(self, request):
form, error = JsonParser( form, error = JsonParser(
Argument('id', type=int, required=False), Argument('id', type=int, required=False),
Argument('expire', required=False) Argument('expire', required=False),
Argument('count', type=int, required=False, help='请输入数字')
).parse(request.GET) ).parse(request.GET)
if error is None: if error is None:
if form.id: if form.id:
DeployRequest.objects.filter(pk=form.id, status__in=('0', '1', '-1')).delete() DeployRequest.objects.filter(pk=form.id, status__in=('0', '1', '-1')).delete()
if form.expire: return json_response()
elif form.count:
if form.count < 1:
return json_response(error='请输入正确的保留数量')
counter, ids = defaultdict(int), []
for item in DeployRequest.objects.all():
if counter[item.deploy_id] == form.count:
ids.append(item.id)
else:
counter[item.deploy_id] += 1
count, _ = DeployRequest.objects.filter(id__in=ids).delete()
return json_response(count)
elif form.expire:
count, _ = DeployRequest.objects.filter(created_at__lt=form.expire).delete() count, _ = DeployRequest.objects.filter(created_at__lt=form.expire).delete()
return json_response(count) return json_response(count)
else:
return json_response(error='请至少使用一个删除条件')
return json_response(error=error) return json_response(error=error)

View File

@ -5,7 +5,7 @@
*/ */
import React from 'react'; import React from 'react';
import { observer } from 'mobx-react'; import { observer } from 'mobx-react';
import { Button, Select, DatePicker, Radio, Row, Col, Modal, Form, message } from 'antd'; import { Button, Select, DatePicker, Radio, Row, Col, Modal, Form, Input, message } from 'antd';
import { SearchForm, AuthFragment, AuthCard } from 'components'; import { SearchForm, AuthFragment, AuthCard } from 'components';
import SelectApp from './SelectApp'; import SelectApp from './SelectApp';
import Ext1Form from './Ext1Form'; import Ext1Form from './Ext1Form';
@ -22,7 +22,8 @@ class Index extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
this.state = { this.state = {
expire: undefined expire: undefined,
count: ''
} }
} }
@ -41,16 +42,22 @@ class Index extends React.Component {
title: '批量删除发布申请', title: '批量删除发布申请',
content: ( content: (
<Form> <Form>
<Form.Item required label="截止日期" help={<div>将删除截止日期<span style={{color: 'red'}}>之前</span></div>}> <Form.Item label="截止日期" help={<div>将删除截止日期<span style={{color: 'red'}}>之前</span></div>}>
<DatePicker placeholder="请输入" onChange={val => this.setState({expire: val.format('YYYY-MM-DD')})}/> <DatePicker style={{width: 200}} placeholder="请输入" onChange={val => this.setState({expire: val.format('YYYY-MM-DD')})}/>
</Form.Item>
<Form.Item label="保留记录" help="每个应用每个环境仅保留最新的N条发布申请优先级高于截止日期">
<Input allowClear style={{width: 200}} placeholder="请输入保留个数" onChange={e => this.setState({count: e.target.value})} />
</Form.Item> </Form.Item>
</Form> </Form>
), ),
onOk: () => http.delete(`/api/deploy/request/?expire=${this.state.expire}`) onOk: () => {
const {expire, count} = this.state;
return http.delete('/api/deploy/request/', {params: {expire, count}})
.then(res => { .then(res => {
message.success(`成功删除${res}条记录`); message.success(`成功删除${res}条记录`);
store.fetchRecords() store.fetchRecords()
}), })
},
}) })
}; };