From f0f55395b644a2f51f2cc36f25dd1c36ad909e8e Mon Sep 17 00:00:00 2001 From: vapao Date: Mon, 9 Nov 2020 14:07:01 +0800 Subject: [PATCH] A app list supports sorting --- spug_api/apps/app/models.py | 3 ++- spug_api/apps/app/views.py | 28 ++++++++++++++++++++++---- spug_web/src/pages/deploy/app/Table.js | 19 +++++++++++++++-- 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/spug_api/apps/app/models.py b/spug_api/apps/app/models.py index 09fbe37..696d962 100644 --- a/spug_api/apps/app/models.py +++ b/spug_api/apps/app/models.py @@ -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): diff --git a/spug_api/apps/app/views.py b/spug_api/apps/app/views.py index b0e3b26..1276e04 100644 --- a/spug_api/apps/app/views.py +++ b/spug_api/apps/app/views.py @@ -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): diff --git a/spug_web/src/pages/deploy/app/Table.js b/spug_web/src/pages/deploy/app/Table.js index 6261deb..5812aaf 100644 --- a/spug_web/src/pages/deploy/app/Table.js +++ b/spug_web/src/pages/deploy/app/Table.js @@ -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'] }}> - index + 1}/> + ( +
+ this.handleSort(e, info, 'up')} type="up-square" + style={{cursor: 'pointer', color: '#1890ff'}}/> + + this.handleSort(e, info, 'down')} type="down-square" + style={{cursor: 'pointer', color: '#1890ff'}}/> +
+ )}/>