http 9 years ago
parent
commit
f367ceebfa
  1. 2
      abonapp/views.py
  2. 6
      static/css/bootstrap-select.min.css
  3. 5
      static/css/custom.css
  4. 9
      static/js/bootstrap-select.min.js
  5. 52
      static/js/my.js
  6. 3
      taskapp/forms.py
  7. 9
      taskapp/views.py
  8. 2
      templates/base.html
  9. 14
      templates/taskapp/add_edit_task.html

2
abonapp/views.py

@ -488,5 +488,5 @@ def abons(request):
def search_abon(request):
word = request.GET.get('s')
results = models.Abon.objects.filter(fio__icontains=word)[:8]
results = [{'id':usr.id, 'fio':usr.fio} for usr in results]
results = [{'id':usr.id, 'name':usr.username, 'fio':usr.fio} for usr in results]
return HttpResponse(dumps(results, ensure_ascii=False))

6
static/css/bootstrap-select.min.css
File diff suppressed because it is too large
View File

5
static/css/custom.css

@ -162,3 +162,8 @@ td.btn-group {
}
/* end */
/* в модуле для живого поиска надпись на кнопке выравнивается по левой стороне */
.selectajax button.selectajax-btn{
text-align: left;
}

9
static/js/bootstrap-select.min.js
File diff suppressed because it is too large
View File

52
static/js/my.js

@ -23,6 +23,54 @@ $(document).ajaxError(function (ev, jqXHR, ajaxSettings, thrownError) {
});
// SelectAjax
(function ($) {
$.fn.selectajax = function (opt) {
var settings = $.extend( {
url : '/api'
}, opt);
var selectbtn = this.children('button.selectajax-btn');
var selectinp = this.children('input[type=text].selectajax-inp');
var selecthid = this.children('input[type=hidden].selectajax-hid');
var selectul = this.children('ul.selectajax-ul');
var selectajax_click = function(){
var a = $(this).children('a');
var hr = a.attr('href');
var tx = a.text();
selecthid.val(hr.substr(1));
console.debug(tx);
selectbtn.text(tx).removeClass('hidden');
selectinp.addClass('hidden').val(tx);
};
var refresh = function(){
$.getJSON(settings.url, {'s': this.value}, function (r) {
selectul.empty();
r.forEach(function (o) {
var li = $('<li><a href="#' + o.id + '">' + o.name + ": " + o.fio + '</a></li>');
selectul.append(li);
li.on('click', selectajax_click)
});
});
};
selectinp.on('keyup', refresh).on('focusin',refresh);
selectbtn.on('click',function(){
selectinp.removeClass('hidden');
$(this).addClass('hidden');
selectinp.focus().trigger('click.bs.dropdown');
return false;
});
selectul.children().on('click', selectajax_click);
};
})(jQuery);
$(document).ready(function () {
// ajax tabs
@ -62,7 +110,11 @@ $(document).ready(function () {
pr.addClass('has-error');
$(this).after('<span class="glyphicon glyphicon-remove form-control-feedback"></span>');
}
});
$('div.selectajax').selectajax({
url: '/abons/api/abon_filter'
});
});

3
taskapp/forms.py

@ -26,8 +26,7 @@ class TaskFrm(forms.ModelForm):
'out_date': forms.DateInput(attrs={'class': 'form-control'}),
'attachment': forms.FileInput(attrs={'class': 'form-control'}),
'mode': forms.Select(attrs={'class': 'form-control'}),
'abon': forms.Select(attrs={'class': 'form-control selectpicker',
'data-live-search':'true'})
'abon': forms.Select(attrs={'class': 'form-control'})
}
initials = {
'out_date': datetime.now()+timedelta(days=3)

9
taskapp/views.py

@ -1,5 +1,6 @@
# coding=utf-8
from django.contrib.auth.decorators import login_required
from django.forms.boundfield import BoundField
from django.shortcuts import render, redirect, get_object_or_404
from abonapp.models import Abon
@ -81,6 +82,7 @@ def task_add_edit(request, task_id=0):
warntext = ''
uid = request.GET.get('uid')
selected_abon = None
# чтоб при добавлении сразу был выбран исполнитель
frm_recipient_id = safe_int(request.GET.get('rp'))
@ -101,9 +103,10 @@ def task_add_edit(request, task_id=0):
if task_id == 0:
try:
uid = int(uid or 0)
selected_abon = None if uid == 0 else get_object_or_404(Abon, username=str(uid))
frm = TaskFrm(initial={
'recipient': frm_recipient_id,
'abon': None if uid == 0 else get_object_or_404(Abon, username=str(uid))
'abon': selected_abon
})
except ValueError:
warntext=u'Передаваемый логин абонента должен состоять только из цифр'
@ -112,11 +115,13 @@ def task_add_edit(request, task_id=0):
})
else:
frm = TaskFrm(instance=tsk)
selected_abon = tsk.abon
return render(request, 'taskapp/add_edit_task.html', {
'warntext': warntext,
'form': frm,
'task_id': tsk.id
'task_id': tsk.id,
'selected_abon': selected_abon
})

2
templates/base.html

@ -8,13 +8,11 @@
<link rel="stylesheet" href="/static/css/bootstrap.min.css">
<link rel="stylesheet" href="/static/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="/static/css/bootstrap-datetimepicker.min.css">
<link rel="stylesheet" href="/static/css/bootstrap-select.min.css">
<link rel="stylesheet" href="/static/css/custom.css">
<script src="/static/js/jquery-2.2.4.min.js"></script>
<script src="/static/js/bootstrap.min.js"></script>
<script src="/static/js/moment-with-locales.min.js"></script>
<script src="/static/js/bootstrap-datetimepicker.min.js"></script>
<script src="/static/js/bootstrap-select.min.js"></script>
<script src="/static/js/my.js"></script>
<link rel="shortcut icon" href="/static/img/favicon_m.ico">
</head>

14
templates/taskapp/add_edit_task.html

@ -36,7 +36,7 @@
</div>
</div>
<div class="form-group">
<label for="id_recipient">Цель, на кого назначаем</label>
<label for="id_recipient">Ответственный за выполнение задачи</label>
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-user"></span></span>
@ -78,9 +78,17 @@
<div class="form-group">
<label for="id_abon">Абонент</label>
<div class="input-group">
<div class="input-group selectajax">
<span class="input-group-addon"><span class="glyphicon glyphicon-user"></span></span>
{{ form.abon }}{{ form.abon.errors }}
<input type="hidden" name="abon" class="selectajax-hid"{% if selected_abon %} value="{{ selected_abon.id }}"{% endif %}>
{% if selected_abon %}
<button class="selectajax-btn form-control btn btn-default">{{ selected_abon.fio }}</button>
<input type="text" class="form-control dropdown-toggle selectajax-inp hidden" data-toggle="dropdown" id="id_abon" placeholder="Найти абонента">
{% else %}
<button class="selectajax-btn form-control btn btn-default hidden"></button>
<input type="text" class="form-control dropdown-toggle selectajax-inp" data-toggle="dropdown" id="id_abon" placeholder="Найти абонента">
{% endif %}
<ul class="dropdown-menu selectajax-ul"></ul>{{ form.abon.errors }}
</div>
</div>
<div class="form-group">

Loading…
Cancel
Save