Skip to content

Commit

Permalink
Merge pull request #3 from dev-backend
Browse files Browse the repository at this point in the history
  • Loading branch information
zxh326 authored Jan 31, 2019
1 parent 1b112f3 commit dedbab0
Show file tree
Hide file tree
Showing 46 changed files with 2,486 additions and 716 deletions.
2 changes: 2 additions & 0 deletions Subway/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('member.urls')),
path('schedule/',include('schedule.urls')),
path('device',include('device.urls')),
path('material/', include('material.urls')),
path('technology/', include('technology.urls')),
path('safety/', include('safety.urls'))
Expand Down
9 changes: 9 additions & 0 deletions core/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,12 @@ def permission(request):
res[item['permissions__code']] = True
print(res)
return res


def validate_file_extension(value):
import os
from django.core.exceptions import ValidationError
ext = os.path.splitext(value.name)[1] # [0] returns path+filename
valid_extensions = ['.pdf', '.doc', '.docx', '.jpg', '.png', '.xlsx', '.xls']
if not ext.lower() in valid_extensions:
raise ValidationError(u'不支持此类型的文件')
10 changes: 10 additions & 0 deletions device/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from django.urls import path
from .views import *

app_name = "device"
urlpatterns = [
path('list', DeviceFileListView.as_view(), name='list'), # TODO
path('add', DeviceFileCreateView.as_view(), name='add'),
path('update/<int:pk>', DeviceFileUpdatView.as_view(), name='update'),
path('delete/<int:pk>', DeviceFileDetailView.as_view(), name='delete'),
]
21 changes: 20 additions & 1 deletion device/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,22 @@
from django.shortcuts import render
from django.views.generic import ListView, CreateView, UpdateView, DeleteView, DetailView, TemplateView

# Create your views here.

class DeviceFileListView(TemplateView):
template_name = "device/device.html"


class DeviceFileCreateView(CreateView):
template_name = "TEMPLATE_NAME"


class DeviceFileUpdatView(UpdateView):
template_name = "TEMPLATE_NAME"


class DeviceFileDeleteView(DeleteView):
template_name = "TEMPLATE_NAME"


class DeviceFileDetailView(DetailView):
template_name = "TEMPLATE_NAME"
21 changes: 0 additions & 21 deletions material/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,27 +14,6 @@ class Material(models.Model):
def __str__(self):
return self.name

def in_stock(self, user, num):
try:
with transaction.atomic():
self.objects.material_set.create(num=num, create_user=user, operation_type=0)
self.num += num
self.save()
return True
except:
return False

def out_stock(self, user, num):
try:
with transaction.atomic():
self.objects.material_set.create(num=num, create_user=user, operation_type=1)
self.num -= num
self.save()
return True
except Exception as e:
print(e)
return False


class MaterialStock(models.Model):

Expand Down
7 changes: 4 additions & 3 deletions material/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import django_excel as excel

from .models import *
from .forms import MaterialForm
from .forms import MaterialForm


class MaterialAddView(PassRequestMixin, SuccessMessageMixin, CreateView):
Expand Down Expand Up @@ -53,7 +53,7 @@ def get_queryset(self):
if self.pk:
queryset = queryset.filter(material_id=self.pk)
return queryset

def get_context_data(self, **kwargs):
context = super(MaterialStockRecordView, self).get_context_data(**kwargs)
context['material_list'] = Material.objects.all()
Expand All @@ -62,7 +62,8 @@ def get_context_data(self, **kwargs):
else:
context['select_material'] = '全部'
return context



def material_in_out_stock(request, **kwargs):
material = get_object_or_404(Material, pk=kwargs.get('pk'))
in_or_out = int(request.POST.get('type_id')) # 0 in 1 out
Expand Down
6 changes: 1 addition & 5 deletions member/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,6 @@ class RoleAdmin(admin.ModelAdmin):
filter_horizontal = ('permissions',)


class PermissionAdmin(admin.ModelAdmin):
list_display = ('title', 'url', 'code')


admin.site.register(Role, RoleAdmin)
admin.site.register(Account, AccountAdmin)
admin.site.register(Permission, PermissionAdmin)
admin.site.register(Permission)
2 changes: 1 addition & 1 deletion member/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ class Meta:
fields = ['username', 'enp', 'last_name', 'position', 'roles']


class MemberForm(forms.ModelForm):
class MemberForm(PopRequestMixin, CreateUpdateAjaxMixin, forms.ModelForm):
class Meta:
model = Member
fields = '__all__'
Expand Down
3 changes: 2 additions & 1 deletion member/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Generated by Django 2.1.3 on 2019-01-22 05:52
# Generated by Django 2.1.3 on 2019-01-11 08:56


import django.contrib.auth.models
import django.contrib.auth.validators
Expand Down
18 changes: 10 additions & 8 deletions member/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,8 @@ def post(self, request, *args, **kwargs):

def form_valid(self, form):
self.object = form.save()
self.object.enp = form.cleaned_data.get('password1')
self.object.enp = en_password(form.cleaned_data.get('password1'))
print(self.object.enp, form.cleaned_data.get('password1'))
self.object.user_dept = self.dept
self.object.roles.add(*list(form.cleaned_data.get('roles')))
return super(AssignAccountView, self).form_valid(form)
Expand All @@ -85,8 +86,8 @@ class AssignAccountUpdateView(PassRequestMixin, SuccessMessageMixin, UpdateView)

def form_valid(self, form):
self.object = form.save()
self.object.enp = form.cleaned_data.get('enp')
self.object.set_password(self.object.enp)
self.object.enp = en_password(form.cleaned_data.get('enp'))
self.object.set_password(form.cleaned_data.get('enp'))
self.object.roles.clear()
self.object.roles.add(*list(form.cleaned_data.get('roles')))
return super(AssignAccountUpdateView, self).form_valid(form)
Expand Down Expand Up @@ -177,10 +178,11 @@ class DeptDeleteView(DeleteAjaxMixin, DeleteView):
success_url = reverse_lazy("member:dept_list")


class MemberAddView(CreateView):
class MemberAddView(PassRequestMixin, SuccessMessageMixin, CreateView):
model = Member
template_name = "member/member_add_update_form.html"
form_class = MemberForm
template_name = "member/member_add_update_form.html"
success_message = '添加成功'
success_url = reverse_lazy('member:member_list')


Expand Down Expand Up @@ -251,7 +253,7 @@ class MemberListDetailView(MemberListView):

class MemberUpdateView(UpdateView):
model = Member
template_name = "member/member_add_update_form.html"
template_name = "member/member_add_update_form2.html"
form_class = MemberForm
success_message = '%s 更新成功'
success_url = reverse_lazy('member:member_list')
Expand Down Expand Up @@ -355,5 +357,5 @@ def depass_view(request):
try:
depass = de_password(salt)
return JsonResponse({'msg': 'ok', 'pass': depass})
except Exception as e:
return JsonResponse({'msg': str(e)})
except Exception as e:
return JsonResponse({'msg': str(e)})
19 changes: 19 additions & 0 deletions safety/migrations/0002_auto_20190124_1615.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 2.1.3 on 2019-01-24 08:15

import core.utils
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('safety', '0001_initial'),
]

operations = [
migrations.AlterField(
model_name='safetyfile',
name='file_s',
field=models.FileField(blank=True, null=True, upload_to='safety/%Y/%m/%d/', validators=[core.utils.validate_file_extension], verbose_name='文件'),
),
]
3 changes: 2 additions & 1 deletion safety/models.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from django.db import models
from core.utils import validate_file_extension


class SafetyFile(models.Model):
Expand All @@ -16,5 +17,5 @@ class SafetyFile(models.Model):
file_type = models.IntegerField(
verbose_name='文件类型', choices=file_type_choiced, default=0)
file_s = models.FileField(
verbose_name='文件', upload_to='Safety_file', max_length=100)
verbose_name='文件', upload_to='safety/%Y/%m/%d/', null=True, blank=True, validators=[validate_file_extension])
upload_date = models.DateTimeField(auto_now_add=True)
2 changes: 1 addition & 1 deletion safety/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

class SafetyFileListView(ListView):
model = SafetyFile
template_name = "TEMPLATE_NAME"
template_name = "safe/safe.html"

def get_queryset(self):
queryset = super(SafetyFileListView, self).get_queryset()
Expand Down
13 changes: 13 additions & 0 deletions schedule/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from django.urls import path
from .views import *

app_name = "schedule"
urlpatterns = [
path('list', ScheduleListView.as_view(), name='list'),
path('detail', ScheduleDetailView.as_view(), name='detail'),
path('chart', ScheduleChartView.as_view(), name='chart'),
path('item', ScheduleItemChartView.as_view(), name='item'),
path('add', ScheduleFileCreateView.as_view(), name='add'),
path('update/<int:pk>', ScheduleFileUpdatView.as_view(), name='update'),
path('delete/<int:pk>', ScheduleFileDetailView.as_view(), name='delete'),
]
35 changes: 35 additions & 0 deletions schedule/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,38 @@
from django.shortcuts import render
from django.views.generic import ListView, CreateView, UpdateView, DeleteView, DetailView, TemplateView


# Create your views here.


class ScheduleListView(TemplateView):
template_name = "schedule/schedule.html"


class ScheduleDetailView(TemplateView):
template_name = "schedule/schedule_detail.html"


class ScheduleChartView(TemplateView):
template_name = "schedule/schedule_chart.html"


class ScheduleItemChartView(TemplateView):
template_name = "schedule/schedule_item.html"


class ScheduleFileCreateView(CreateView):
template_name = "TEMPLATE_NAME"


class ScheduleFileUpdatView(UpdateView):
template_name = "TEMPLATE_NAME"


class ScheduleFileDeleteView(DeleteView):
template_name = "TEMPLATE_NAME"


class ScheduleFileDetailView(DetailView):
template_name = "TEMPLATE_NAME"

1 change: 1 addition & 0 deletions static/javascript/g2/data-set.min.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions static/javascript/g2/g2.min.js

Large diffs are not rendered by default.

89 changes: 89 additions & 0 deletions static/javascript/jquery.bootstrap.modal.forms.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
/*
django-bootstrap-modal-forms
version : 1.3.1
Copyright (c) 2018 Uros Trstenjak
https://github.com/trco/django-bootstrap-modal-forms
*/

(function ($) {

// Open modal & load the form at formURL to the modalContent element
var newForm = function (modalID, modalContent, modalForm, formURL, errorClass, submitBtn) {
$(modalContent).load(formURL, function () {
$(modalID).modal("show");
$(modalForm).attr("action", formURL);
// Add click listener to the submitBtn
ajaxSubmit(modalID, modalContent, modalForm, formURL, errorClass, submitBtn);
});
};

// Add click listener to the submitBtn
var ajaxSubmit = function (modalID, modalContent, modalForm, formURL, errorClass, submitBtn) {
$(submitBtn).on("click", function () {
// Check if form.is_valid() via ajax request
var formIsValid = isFormValid(modalID, modalContent, modalForm, formURL, errorClass);
if (formIsValid) {
// Submit form if form.is_valid()
$(modalForm).submit();
} else {
// Reinstantiate click listener on submitBtn
// Form is updated with errors in isFormValid(...) call
ajaxSubmit(modalID, modalContent, modalForm, formURL, errorClass, submitBtn);
}
});
};

// Check if form.is_valid()
var isFormValid = function (modalID, modalContent, modalForm, formURL, errorClass) {
var formIsValid = true;
$.ajax({
type: $(modalForm).attr("method"),
url: $(modalForm).attr("action"),
async: false,
// Serialize form data
data: new FormData($(modalForm)[0]),
cache: false,
contentType: false,
processData: false,
success: function (response) {
if ($(response).find(errorClass).length > 0) {
formIsValid = false;
// Update form with errors if not form.is_valid()
$(modalID).find(modalContent).html(response);
$(modalForm).attr("action", formURL);
}
}
});
return formIsValid;
};


$.fn.modalForm = function (options) {
// Default settings
var defaults = {
modalID: "#modal",
modalContent: ".modal-content",
modalForm: ".modal-content form",
formURL: null,
errorClass: ".invalid",
submitBtn: ".submit-btn"
};

// Extend default settings with provided options
var settings = $.extend(defaults, options);

return this.each(function () {
// Add click listener to the element with attached modalForm
$(this).click(function (event) {
// Instantiate new modalForm in modal
newForm(settings.modalID,
settings.modalContent,
settings.modalForm,
settings.formURL,
settings.errorClass,
settings.submitBtn);
});
});
};

}(jQuery));
2 changes: 2 additions & 0 deletions static/javascript/laydate/laydate.js

Large diffs are not rendered by default.

Binary file not shown.
Loading

0 comments on commit dedbab0

Please sign in to comment.