A app list supports sorting

pull/223/head
vapao 2020-11-09 14:07:01 +08:00
parent 573d6db725
commit f0f55395b6
3 changed files with 43 additions and 7 deletions

View File

@ -14,6 +14,7 @@ class App(models.Model, ModelMixin):
desc = models.CharField(max_length=255, null=True)
rel_apps = models.TextField(null=True)
rel_services = models.TextField(null=True)
sort_id = models.IntegerField(default=0, db_index=True)
created_at = models.CharField(max_length=20, default=human_datetime)
created_by = models.ForeignKey(User, on_delete=models.PROTECT)
@ -28,7 +29,7 @@ class App(models.Model, ModelMixin):
class Meta:
db_table = 'apps'
ordering = ('-id',)
ordering = ('-sort_id',)
class Deploy(models.Model, ModelMixin):

View File

@ -12,6 +12,13 @@ import subprocess
import json
import os
# v2.3.14 临时数据初始化
ap = App.objects.first()
if ap and ap.sort_id == 0:
for ap in App.objects.all():
ap.sort_id = ap.id
ap.save()
class AppView(View):
def get(self, request):
@ -37,6 +44,8 @@ class AppView(View):
App.objects.filter(pk=form.id).update(**form)
else:
app = App.objects.create(created_by=request.user, **form)
app.sort_id = app.id
app.save()
if request.user.role:
request.user.role.add_deploy_perm('apps', app.id)
return json_response(error=error)
@ -45,14 +54,25 @@ class AppView(View):
form, error = JsonParser(
Argument('id', type=int, help='参数错误'),
Argument('rel_apps', type=list, required=False),
Argument('rel_services', type=list, required=False)
Argument('rel_services', type=list, required=False),
Argument('sort', filter=lambda x: x in ('up', 'down'), required=False)
).parse(request.body)
if error is None:
app = App.objects.filter(pk=form.id).first()
if not app:
return json_response(error='未找到指定应用')
app.rel_apps = json.dumps(form.rel_apps)
app.rel_services = json.dumps(form.rel_services)
if form.rel_apps is not None:
app.rel_apps = json.dumps(form.rel_apps)
if form.rel_services is not None:
app.rel_services = json.dumps(form.rel_services)
if form.sort:
if form.sort == 'up':
tmp = App.objects.filter(sort_id__gt=app.sort_id).last()
else:
tmp = App.objects.filter(sort_id__lt=app.sort_id).first()
if tmp:
tmp.sort_id, app.sort_id = app.sort_id, tmp.sort_id
tmp.save()
app.save()
return json_response(error=error)
@ -78,7 +98,7 @@ class DeployView(View):
perms = request.user.deploy_perms
form.app_id__in = perms['apps']
form.env_id__in = perms['envs']
deploys = Deploy.objects.filter(**form).annotate(app_name=F('app__name'))
deploys = Deploy.objects.filter(**form).annotate(app_name=F('app__name')).order_by('-app__sort_id')
return json_response(deploys)
def post(self, request):

View File

@ -6,7 +6,7 @@
import React from 'react';
import { toJS } from 'mobx';
import { observer } from 'mobx-react';
import { Table, Modal, Tag, Icon, message } from 'antd';
import { Table, Modal, Tag, Icon, Divider, message } from 'antd';
import { http, hasPermission } from 'libs';
import store from './store';
import { Action } from "components";
@ -76,6 +76,13 @@ class ComTable extends React.Component {
})
};
handleSort = (e, info, sort) => {
e.stopPropagation();
store.fetching = true;
http.patch('/api/app/', {id: info.id, sort})
.then(store.fetchRecords, () => store.fetching = false)
};
expandedRowRender = (record) => {
if (record['deploys'] === undefined) {
store.loadDeploys(record.id)
@ -131,7 +138,15 @@ class ComTable extends React.Component {
showTotal: total => `${total}`,
pageSizeOptions: ['10', '20', '50', '100']
}}>
<Table.Column width={80} title="序号" key="series" render={(_, __, index) => index + 1}/>
<Table.Column width={80} title="排序" key="series" render={(info) => (
<div>
<Icon onClick={e => this.handleSort(e, info, 'up')} type="up-square"
style={{cursor: 'pointer', color: '#1890ff'}}/>
<Divider type="vertical"/>
<Icon onClick={e => this.handleSort(e, info, 'down')} type="down-square"
style={{cursor: 'pointer', color: '#1890ff'}}/>
</div>
)}/>
<Table.Column title="应用名称" dataIndex="name"/>
<Table.Column title="标识符" dataIndex="key"/>
<Table.Column ellipsis title="描述信息" dataIndex="desc"/>