reslove conflict

pull/530/head
ibuler 2016-08-18 14:43:10 +08:00
commit 342298ad3e
16 changed files with 356 additions and 311 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -2,9 +2,9 @@
Chosen, a Select Box Enhancer for jQuery and Prototype Chosen, a Select Box Enhancer for jQuery and Prototype
by Patrick Filler for Harvest, http://getharvest.com by Patrick Filler for Harvest, http://getharvest.com
Version 1.6.2 Version 1.1.0
Full source at https://github.com/harvesthq/chosen Full source at https://github.com/harvesthq/chosen
Copyright (c) 2011-2016 Harvest http://getharvest.com Copyright (c) 2011 Harvest http://getharvest.com
MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
This file is generated by `grunt build`, do not edit it by hand. This file is generated by `grunt build`, do not edit it by hand.
@ -16,20 +16,20 @@ This file is generated by `grunt build`, do not edit it by hand.
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
font-size: 13px; font-size: 13px;
zoom: 1;
*display: inline;
-webkit-user-select: none; -webkit-user-select: none;
-moz-user-select: none; -moz-user-select: none;
user-select: none; user-select: none;
} }
.chosen-container * {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.chosen-container .chosen-drop { .chosen-container .chosen-drop {
position: absolute; position: absolute;
top: 100%; top: 100%;
left: -9999px; left: -9999px;
z-index: 1010; z-index: 1010;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
width: 100%; width: 100%;
border: 1px solid #aaa; border: 1px solid #aaa;
border-top: 0; border-top: 0;
@ -42,19 +42,6 @@ This file is generated by `grunt build`, do not edit it by hand.
.chosen-container a { .chosen-container a {
cursor: pointer; cursor: pointer;
} }
.chosen-container .search-choice .group-name, .chosen-container .chosen-single .group-name {
margin-right: 4px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
font-weight: normal;
color: #999999;
}
.chosen-container .search-choice .group-name:after, .chosen-container .chosen-single .group-name:after {
content: ":";
padding-left: 2px;
vertical-align: top;
}
/* @end */ /* @end */
/* @group Single Chosen */ /* @group Single Chosen */
@ -63,15 +50,15 @@ This file is generated by `grunt build`, do not edit it by hand.
display: block; display: block;
overflow: hidden; overflow: hidden;
padding: 0 0 0 8px; padding: 0 0 0 8px;
height: 25px; height: 23px;
border: 1px solid #aaa; border: 1px solid #aaa;
border-radius: 5px; border-radius: 5px;
background-color: #fff; background-color: #fff;
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4)); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4));
background: -webkit-linear-gradient(#ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); background: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
background: -moz-linear-gradient(#ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); background: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
background: -o-linear-gradient(#ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); background: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
background: linear-gradient(#ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); background: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
background-clip: padding-box; background-clip: padding-box;
box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 0, 0, 0.1); box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 0, 0, 0.1);
color: #444; color: #444;
@ -99,7 +86,7 @@ This file is generated by `grunt build`, do not edit it by hand.
display: block; display: block;
width: 12px; width: 12px;
height: 12px; height: 12px;
background: url('../../../../../../../Downloads/chosen_v1.6.2/chosen-sprite.png') -42px 1px no-repeat; background: url('chosen-sprite.png') -42px 1px no-repeat;
font-size: 1px; font-size: 1px;
} }
.chosen-container-single .chosen-single abbr:hover { .chosen-container-single .chosen-single abbr:hover {
@ -120,7 +107,7 @@ This file is generated by `grunt build`, do not edit it by hand.
display: block; display: block;
width: 100%; width: 100%;
height: 100%; height: 100%;
background: url('../../../../../../../Downloads/chosen_v1.6.2/chosen-sprite.png') no-repeat 0px 2px; background: url('chosen-sprite.png') no-repeat 0px 2px;
} }
.chosen-container-single .chosen-search { .chosen-container-single .chosen-search {
position: relative; position: relative;
@ -130,14 +117,17 @@ This file is generated by `grunt build`, do not edit it by hand.
white-space: nowrap; white-space: nowrap;
} }
.chosen-container-single .chosen-search input[type="text"] { .chosen-container-single .chosen-search input[type="text"] {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
margin: 1px 0; margin: 1px 0;
padding: 4px 20px 4px 5px; padding: 4px 20px 4px 5px;
width: 100%; width: 100%;
height: auto; height: auto;
outline: 0; outline: 0;
border: 1px solid #aaa; border: 1px solid #aaa;
background: white url('../../../../../../../Downloads/chosen_v1.6.2/chosen-sprite.png') no-repeat 100% -20px; background: white url('chosen-sprite.png') no-repeat 100% -20px;
background: url('../../../../../../../Downloads/chosen_v1.6.2/chosen-sprite.png') no-repeat 100% -20px; background: url('chosen-sprite.png') no-repeat 100% -20px;
font-size: 1em; font-size: 1em;
font-family: sans-serif; font-family: sans-serif;
line-height: normal; line-height: normal;
@ -156,7 +146,6 @@ This file is generated by `grunt build`, do not edit it by hand.
/* @end */ /* @end */
/* @group Results */ /* @group Results */
.chosen-container .chosen-results { .chosen-container .chosen-results {
color: #444;
position: relative; position: relative;
overflow-x: hidden; overflow-x: hidden;
overflow-y: auto; overflow-y: auto;
@ -171,7 +160,6 @@ This file is generated by `grunt build`, do not edit it by hand.
padding: 5px 6px; padding: 5px 6px;
list-style: none; list-style: none;
line-height: 15px; line-height: 15px;
word-wrap: break-word;
-webkit-touch-callout: none; -webkit-touch-callout: none;
} }
.chosen-container .chosen-results li.active-result { .chosen-container .chosen-results li.active-result {
@ -193,7 +181,6 @@ This file is generated by `grunt build`, do not edit it by hand.
color: #fff; color: #fff;
} }
.chosen-container .chosen-results li.no-results { .chosen-container .chosen-results li.no-results {
color: #777;
display: list-item; display: list-item;
background: #f4f4f4; background: #f4f4f4;
} }
@ -213,20 +200,18 @@ This file is generated by `grunt build`, do not edit it by hand.
/* @end */ /* @end */
/* @group Multi Chosen */ /* @group Multi Chosen */
.chosen-container-multi .chosen-choices { .chosen-container-multi .chosen-choices {
position: relative; -moz-box-sizing: border-box;
overflow: hidden; background-color: #FFFFFF;
margin: 0; border: 1px solid #CBD5DD;
padding: 0 5px; border-radius: 2px;
width: 100%;
height: auto;
border: 1px solid #aaa;
background-color: #fff;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
background-image: -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%);
background-image: -moz-linear-gradient(#eeeeee 1%, #ffffff 15%);
background-image: -o-linear-gradient(#eeeeee 1%, #ffffff 15%);
background-image: linear-gradient(#eeeeee 1%, #ffffff 15%);
cursor: text; cursor: text;
height: auto !important;
margin: 0;
min-height: 30px;
overflow: hidden;
padding: 2px;
position: relative;
width: 100%;
} }
.chosen-container-multi .chosen-choices li { .chosen-container-multi .chosen-choices li {
float: left; float: left;
@ -239,42 +224,39 @@ This file is generated by `grunt build`, do not edit it by hand.
} }
.chosen-container-multi .chosen-choices li.search-field input[type="text"] { .chosen-container-multi .chosen-choices li.search-field input[type="text"] {
margin: 1px 0; margin: 1px 0;
padding: 0; padding: 5px;
height: 25px; height: 25px;
outline: 0; outline: 0;
border: 0 !important; border: 0 !important;
background: transparent !important; background: transparent !important;
box-shadow: none; box-shadow: none;
color: #999; color: #666;
font-size: 100%; font-size: 100%;
font-family: sans-serif; font-family: sans-serif;
line-height: normal; line-height: normal;
border-radius: 0; border-radius: 0;
} }
.chosen-container-multi .chosen-choices li.search-field .default {
color: #999;
}
.chosen-container-multi .chosen-choices li.search-choice { .chosen-container-multi .chosen-choices li.search-choice {
position: relative; position: relative;
margin: 3px 5px 3px 0; margin: 3px 0 3px 5px;
padding: 3px 20px 3px 5px; padding: 3px 20px 3px 5px;
border: 1px solid #aaa; border: 1px solid #aaa;
max-width: 100%;
border-radius: 3px; border-radius: 3px;
background-color: #eeeeee; background-color: #e4e4e4;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee)); background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-size: 100% 19px;
background-repeat: repeat-x;
background-clip: padding-box; background-clip: padding-box;
box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05); box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05);
color: #333; color: #333;
line-height: 13px; line-height: 13px;
cursor: default; cursor: default;
} }
.chosen-container-multi .chosen-choices li.search-choice span {
word-wrap: break-word;
}
.chosen-container-multi .chosen-choices li.search-choice .search-choice-close { .chosen-container-multi .chosen-choices li.search-choice .search-choice-close {
position: absolute; position: absolute;
top: 4px; top: 4px;
@ -282,7 +264,7 @@ This file is generated by `grunt build`, do not edit it by hand.
display: block; display: block;
width: 12px; width: 12px;
height: 12px; height: 12px;
background: url('../../../../../../../Downloads/chosen_v1.6.2/chosen-sprite.png') -42px 1px no-repeat; background: url('chosen-sprite.png') -42px 1px no-repeat;
font-size: 1px; font-size: 1px;
} }
.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover { .chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover {
@ -293,10 +275,10 @@ This file is generated by `grunt build`, do not edit it by hand.
border: 1px solid #ccc; border: 1px solid #ccc;
background-color: #e4e4e4; background-color: #e4e4e4;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee)); background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
color: #666; color: #666;
} }
.chosen-container-multi .chosen-choices li.search-choice-focus { .chosen-container-multi .chosen-choices li.search-choice-focus {
@ -346,7 +328,7 @@ This file is generated by `grunt build`, do not edit it by hand.
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
} }
.chosen-container-active .chosen-choices li.search-field input[type="text"] { .chosen-container-active .chosen-choices li.search-field input[type="text"] {
color: #222 !important; color: #111 !important;
} }
/* @end */ /* @end */
@ -418,8 +400,8 @@ This file is generated by `grunt build`, do not edit it by hand.
} }
.chosen-rtl .chosen-search input[type="text"] { .chosen-rtl .chosen-search input[type="text"] {
padding: 4px 5px 4px 20px; padding: 4px 5px 4px 20px;
background: white url('../../../../../../../Downloads/chosen_v1.6.2/chosen-sprite.png') no-repeat -30px -20px; background: white url('chosen-sprite.png') no-repeat -30px -20px;
background: url('../../../../../../../Downloads/chosen_v1.6.2/chosen-sprite.png') no-repeat -30px -20px; background: url('chosen-sprite.png') no-repeat -30px -20px;
direction: rtl; direction: rtl;
} }
.chosen-rtl.chosen-container-single .chosen-single div b { .chosen-rtl.chosen-container-single .chosen-single div b {
@ -431,7 +413,7 @@ This file is generated by `grunt build`, do not edit it by hand.
/* @end */ /* @end */
/* @group Retina compatibility */ /* @group Retina compatibility */
@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi), only screen and (min-resolution: 1.5dppx) { @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-resolution: 144dpi) {
.chosen-rtl .chosen-search input[type="text"], .chosen-rtl .chosen-search input[type="text"],
.chosen-container-single .chosen-single abbr, .chosen-container-single .chosen-single abbr,
.chosen-container-single .chosen-single div b, .chosen-container-single .chosen-single div b,
@ -439,7 +421,7 @@ This file is generated by `grunt build`, do not edit it by hand.
.chosen-container-multi .chosen-choices .search-choice .search-choice-close, .chosen-container-multi .chosen-choices .search-choice .search-choice-close,
.chosen-container .chosen-results-scroll-down span, .chosen-container .chosen-results-scroll-down span,
.chosen-container .chosen-results-scroll-up span { .chosen-container .chosen-results-scroll-up span {
background-image: url('../../../../../../../Downloads/chosen_v1.6.2/chosen-sprite@2x.png') !important; background-image: url('chosen-sprite@2x.png') !important;
background-size: 52px 37px !important; background-size: 52px 37px !important;
background-repeat: no-repeat !important; background-repeat: no-repeat !important;
} }

View File

@ -981,6 +981,22 @@ button.dim:active:before {
padding: 3px 20px 3px 5px; padding: 3px 20px 3px 5px;
position: relative; position: relative;
} }
.chosen-container .chosen-results li.highlighted {
background-color: #1ab394;
background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #1ab394), color-stop(90%, #1ab394));
/*background-image: -webkit-linear-gradient(#1ab394 20%, #2a62bc 100%);*/
/*background-image: -moz-linear-gradient(#1ab394 20%, #2a62bc 100%);*/
/*background-image: -o-linear-gradient(#1ab394 20%, #2a62bc 100%);*/
/*background-image: linear-gradient(#1ab394 20%, #2a62bc 100%);*/
color: #fff;
}
.chosen-container-active .chosen-choices {
border: 1px solid #1ab394;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
}
/* PAGINATIN */ /* PAGINATIN */
.pagination > .active > a, .pagination > .active > a,
.pagination > .active > span, .pagination > .active > span,

View File

@ -5,7 +5,7 @@
<link href="{% static "css/font-awesome.css" %}" rel="stylesheet"> <link href="{% static "css/font-awesome.css" %}" rel="stylesheet">
{#<link href="{% static "css/plugins/iCheck/custom.css" %}" rel="stylesheet">#} {#<link href="{% static "css/plugins/iCheck/custom.css" %}" rel="stylesheet">#}
{#<link href="{% static "css/animate.css" %}" rel="stylesheet">#} {#<link href="{% static "css/animate.css" %}" rel="stylesheet">#}
<link href="{% static "css/style.css" %}" rel="stylesheet">
{#<link href="{% static "css/colorbox.css" %}" rel="stylesheet">#} {#<link href="{% static "css/colorbox.css" %}" rel="stylesheet">#}
<link href="{% static "css/plugins/vaildator/jquery.validator.css" %}" rel="stylesheet"> <link href="{% static "css/plugins/vaildator/jquery.validator.css" %}" rel="stylesheet">
{#<link href="{% static "css/magnific/magnific-popup.css" %}" rel="stylesheet">#} {#<link href="{% static "css/magnific/magnific-popup.css" %}" rel="stylesheet">#}
@ -15,7 +15,6 @@
<!-- scripts --> <!-- scripts -->
<script src="{% static "js/jquery-2.1.1.js" %}"></script> <script src="{% static "js/jquery-2.1.1.js" %}"></script>
<script src="{% static "js/bootstrap.min.js" %}"></script> <script src="{% static "js/bootstrap.min.js" %}"></script>
<script src="{% static "js/base.js" %}"></script>
<!-- validator js --> <!-- validator js -->
{#<script src="{% static "js/validator/jquery.validator.js" %}"></script>#} {#<script src="{% static "js/validator/jquery.validator.js" %}"></script>#}

View File

@ -11,6 +11,8 @@
<link rel="shortcut icon" href={% static "img/facio.ico" %} type="image/x-icon"> <link rel="shortcut icon" href={% static "img/facio.ico" %} type="image/x-icon">
{% include '_head_css_js.html' %} {% include '_head_css_js.html' %}
{% block custom_head_css_js %} {% endblock %} {% block custom_head_css_js %} {% endblock %}
<link href="{% static "css/style.css" %}" rel="stylesheet">
<script src="{% static "js/base.js" %}"></script>
</head> </head>
<body> <body>
@ -25,5 +27,5 @@
</body> </body>
{% include '_foot_js.html' %} {% include '_foot_js.html' %}
{% block custom_footer_js %} {% endblock %} {% block custom_foot_js %} {% endblock %}
</html> </html>

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10 on 2016-08-17 15:03
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0007_auto_20160817_0032'),
]
operations = [
migrations.AlterField(
model_name='user',
name='avatar',
field=models.ImageField(upload_to='avatar', verbose_name='\u5934\u50cf'),
),
]

View File

@ -60,7 +60,7 @@ class User(AbstractUser):
username = models.CharField(max_length=20, unique=True, verbose_name='用户名', help_text='* required') username = models.CharField(max_length=20, unique=True, verbose_name='用户名', help_text='* required')
name = models.CharField(max_length=20, verbose_name='姓名', help_text='* required') name = models.CharField(max_length=20, verbose_name='姓名', help_text='* required')
email = models.EmailField(max_length=30, unique=True, verbose_name='邮件', help_text='* required') email = models.EmailField(max_length=30, unique=True, verbose_name='邮件', help_text='* required')
groups = models.ManyToManyField(UserGroup, verbose_name='用户组') groups = models.ManyToManyField(UserGroup, verbose_name='用户组', help_text='* required')
avatar = models.ImageField(upload_to="avatar", verbose_name='头像') avatar = models.ImageField(upload_to="avatar", verbose_name='头像')
wechat = models.CharField(max_length=30, blank=True, verbose_name='微信') wechat = models.CharField(max_length=30, blank=True, verbose_name='微信')
phone = models.CharField(max_length=20, blank=True, verbose_name='手机号') phone = models.CharField(max_length=20, blank=True, verbose_name='手机号')

View File

@ -49,7 +49,6 @@
</div> </div>
<div class="hr-line-dashed"></div> <div class="hr-line-dashed"></div>
<h3>信息</h3> <h3>信息</h3>
{{ form.avatar|bootstrap_horizontal }}
{{ form.phone|bootstrap_horizontal }} {{ form.phone|bootstrap_horizontal }}
{{ form.wechat|bootstrap_horizontal }} {{ form.wechat|bootstrap_horizontal }}
{{ form.comment|bootstrap_horizontal }} {{ form.comment|bootstrap_horizontal }}
@ -67,7 +66,7 @@
</div> </div>
</div> </div>
{% endblock %} {% endblock %}
{% block custom_footer_js %} {% block custom_foot_js %}
<script type="text/javascript"> <script type="text/javascript">
{#$(document).ready(function() {#} {#$(document).ready(function() {#}
{# var config = {#} {# var config = {#}

View File

@ -3,6 +3,10 @@
{% load users_tags %} {% load users_tags %}
{% load static %} {% load static %}
{% block custom_head_css_js %}
<link href="{% static "css/plugins/chosen/chosen.css" %}" rel="stylesheet">
<script src="{% static "js/plugins/chosen/chosen.jquery.min.js" %}"></script>
{% endblock %}
{% block content %} {% block content %}
<div class="wrapper wrapper-content animated fadeInRight"> <div class="wrapper wrapper-content animated fadeInRight">
<div class="row"> <div class="row">
@ -177,28 +181,37 @@
</div> </div>
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div class="ibox-title bg-primary" style="background: #23c6c8"> <div class="ibox-title bg-primary" style="background: #1ab394">
<span style="color: white">用户组</span> <span style="color: white">用户组</span>
<div class="ibox-tools"> <div class="ibox-tools">
</div> </div>
</div> </div>
<div class="ibox-content info-panel"> <div class="ibox-content primary-panel">
<table class="table"> <table class="table">
<tbody> <tbody>
<form>
<tr> <tr>
<td> <td colspan="2" class="no-borders">
<select data-placeholder="选择用户组" class="chosen-select" style="width: 100%" multiple="" tabindex="4">
{% for group in groups %}
<option value="{{ group.id }}">{{ group.name }}</option>
{% endfor %}
</select>
</td> </td>
</tr>
<tr>
<td colspan="2" class="no-borders">
<button type="button" class="btn btn-primary btn-small">添加到用户组</button>
</td>
</tr>
</form>
</tr> {% for group in user.groups.all %}
<tr> <tr>
<td width="20%">姓名:</td> <td width="40%"><b>{{ group.name }}</b></td>
<td>{{ user.name }}</td> <td></td>
</tr>
<tr>
<td>描述:</td>
<td>{{ user.comment }}</td>
</tr> </tr>
{% endfor %}
</tbody> </tbody>
</table> </table>
</div> </div>
@ -212,9 +225,19 @@
</div> </div>
{% endblock %} {% endblock %}
{% block custom_footer_js %} {% block custom_foot_js %}
<script> <script>
$(document).ready(function () { $(document).ready(function () {
var config = {
'.chosen-select' : {},
'.chosen-select-deselect' : {allow_single_deselect:true},
'.chosen-select-no-single' : {disable_search_threshold:10},
'.chosen-select-no-results': {no_results_text:'Oops, nothing found!'},
'.chosen-select-width' : {width:"95%"}
};
for (var selector in config) {
$(selector).chosen(config[selector]);
}
}) })
</script> </script>
{% endblock %} {% endblock %}

View File

@ -1,12 +1,12 @@
# ~*~ coding: utf-8 ~*~ # ~*~ coding: utf-8 ~*~
import os
import urllib import urllib
import hashlib import hashlib
from django import template from django import template
from django.utils import timezone from django.utils import timezone
from django.conf import settings from django.conf import settings
from django.conf.urls.static import static
register = template.Library() register = template.Library()
@ -26,13 +26,16 @@ def is_expired(datetime):
@register.filter @register.filter
def user_avatar_url(user, size=64): def user_avatar_url(user):
if user.avatar: if user.avatar:
return user.avatar.url return user.avatar.url
gravatar_url = "https://www.gravatar.com/avatar/" \ else:
+ hashlib.md5(user.email.lower()).hexdigest() + "?" default_dir = os.path.join(settings.MEDIA_ROOT, 'avatar', 'default')
gravatar_url += urllib.urlencode({'d': 'identicon', 's': str(size)}) if os.path.isdir(default_dir):
return gravatar_url default_avatar_list = os.listdir(default_dir)
default_avatar = default_avatar_list[len(user.username) % len(default_avatar_list)]
return os.path.join(settings.MEDIA_URL, 'avatar', 'default', default_avatar)
return 'https://www.gravatar.com/avatar/c6812ab450230979465d7bf288eadce2a?s=120&d=identicon'

View File

@ -87,5 +87,6 @@ class UserDetailView(DetailView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(UserDetailView, self).get_context_data(**kwargs) context = super(UserDetailView, self).get_context_data(**kwargs)
context.update({'path1': '用户管理', 'path2': '用户详情', 'title': '用户详情'}) groups = [group for group in UserGroup.objects.iterator() if group not in self.object.groups.iterator()]
context.update({'path1': '用户管理', 'path2': '用户详情', 'title': '用户详情', 'groups': groups})
return context return context