diff --git a/spug_api/apps/deploy/views.py b/spug_api/apps/deploy/views.py index 5a0024f..11be404 100644 --- a/spug_api/apps/deploy/views.py +++ b/spug_api/apps/deploy/views.py @@ -10,6 +10,7 @@ from apps.deploy.models import DeployRequest from apps.app.models import Deploy from apps.deploy.utils import deploy_dispatch from apps.host.models import Host +from collections import defaultdict from threading import Thread from datetime import datetime import json @@ -109,14 +110,29 @@ class RequestView(View): def delete(self, request): form, error = JsonParser( Argument('id', type=int, required=False), - Argument('expire', required=False) + Argument('expire', required=False), + Argument('count', type=int, required=False, help='请输入数字') ).parse(request.GET) if error is None: if form.id: 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() return json_response(count) + else: + return json_response(error='请至少使用一个删除条件') return json_response(error=error) diff --git a/spug_web/src/pages/deploy/request/index.js b/spug_web/src/pages/deploy/request/index.js index 988b99b..a2584a1 100644 --- a/spug_web/src/pages/deploy/request/index.js +++ b/spug_web/src/pages/deploy/request/index.js @@ -5,7 +5,7 @@ */ import React from '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 SelectApp from './SelectApp'; import Ext1Form from './Ext1Form'; @@ -22,7 +22,8 @@ class Index extends React.Component { constructor(props) { super(props); this.state = { - expire: undefined + expire: undefined, + count: '' } } @@ -41,16 +42,22 @@ class Index extends React.Component { title: '批量删除发布申请', content: (
- 将删除截止日期之前的所有发布申请记录。}> - this.setState({expire: val.format('YYYY-MM-DD')})}/> + 将删除截止日期之前的所有发布申请记录。}> + this.setState({expire: val.format('YYYY-MM-DD')})}/> + + + this.setState({count: e.target.value})} /> ), - onOk: () => http.delete(`/api/deploy/request/?expire=${this.state.expire}`) - .then(res => { - message.success(`成功删除${res}条记录`); - store.fetchRecords() - }), + onOk: () => { + const {expire, count} = this.state; + return http.delete('/api/deploy/request/', {params: {expire, count}}) + .then(res => { + message.success(`成功删除${res}条记录`); + store.fetchRecords() + }) + }, }) };