parent
30e8873ca6
commit
0faa6f8bd5
3 changed files with 210 additions and 0 deletions
@ -0,0 +1,44 @@ |
||||
from django import forms |
||||
from django.core.exceptions import ValidationError |
||||
|
||||
from apps.goods.models import * |
||||
from apps.goods.views import * |
||||
|
||||
|
||||
class GoodsCateForm(forms.Form): |
||||
name = forms.CharField(label='分类名称', min_length=2, widget=forms.widgets.TextInput( |
||||
attrs={'class': 'form-control', 'placeholder': '请输入分类名称'}), |
||||
error_messages={'required': '分类名称不能为空!', 'min_length': '长度最小2位'}) |
||||
parent_id = forms.CharField(label='选择父类', max_length=20, required=True, |
||||
widget=forms.widgets.Select( |
||||
attrs={'class': 'form-control custom-select', 'placeholder': '选择父类'}), |
||||
error_messages={'required': '请选择父类'}) |
||||
sort = forms.CharField(label='排序', widget=forms.widgets.TextInput( |
||||
attrs={'class': 'form-control', 'placeholder': '请输入数字'}), error_messages={'required': '排序不能为空'}) |
||||
logo = forms.ImageField(label='分类图片', required=False, |
||||
widget=forms.widgets.FileInput(attrs={'class': 'custom-file-input'})) |
||||
|
||||
def __init__(self, *args, **kwargs): |
||||
super(GoodsCateForm, self).__init__(*args, **kwargs) |
||||
cate_all = GoodsCategory.objects.all() |
||||
self.alist = [('', '请选择...')] |
||||
self.fields['parent_id'].widget.choices = self.bind_data(cate_all, 0, 1) |
||||
|
||||
def bind_data(self, datas, _id, n): |
||||
if _id == 0: |
||||
datas = datas.filter(parent__isnull=True) |
||||
else: |
||||
datas = datas.filter(parent_id=id) |
||||
for data in datas: |
||||
self.alist.append((data.id, self.space_length(n) + data.name)) |
||||
|
||||
self.bind_data(datas, data.id, n+2) |
||||
print(self.alist) |
||||
return self.alist |
||||
|
||||
@staticmethod |
||||
def space_length(i): |
||||
space = '' |
||||
for j in range(1, i): |
||||
space += '--' |
||||
return space + '|--' |
@ -0,0 +1,7 @@ |
||||
{% extends 'shop/base.html' %} |
||||
{% load static %} |
||||
{% block ext_css %} |
||||
{% endblock %} |
||||
{% block content %} |
||||
|
||||
{% endblock %} |
@ -0,0 +1,159 @@ |
||||
{% extends 'shop/base.html' %} |
||||
{% load static %} |
||||
{% block ext_css %} |
||||
{% endblock %} |
||||
{% block content %} |
||||
<div class="content-wrapper"> |
||||
<div class="content-header"> |
||||
<div class="container-fluid"> |
||||
<div> |
||||
<div class="row"> |
||||
<div class="col-sm-12"> |
||||
<h1 class="m-0"> |
||||
商品分类模块 <small>列表</small> |
||||
</h1> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<section class="content"> |
||||
<div class="container-fluid"> |
||||
<div class="row"> |
||||
<div class="col-12 search-collapse"> |
||||
<form id="search_form"> |
||||
<div class="select-list"> |
||||
<ul> |
||||
<li> |
||||
<label>姓名: </label> |
||||
<label for="search_title"></label><input type="text" id="search_title" |
||||
name="title" value=""/> |
||||
</li> |
||||
<li> |
||||
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i |
||||
class="fa fa-search"></i> 搜索</a> |
||||
<input class="hide" type="submit" name="btnSave" value="提交" |
||||
onclick="$.table.search();return false;"> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
</form> |
||||
</div> |
||||
|
||||
<div class="col-sm-12 select-table table-striped"> |
||||
<div class="btn-group-sm" id="toolbar" role="group"> |
||||
<a class="btn btn-success" href="{% url 'cate_add' %}" target="_blank"> |
||||
<i class="fa fa-plus"></i> 新增 |
||||
</a> |
||||
<a class="btn btn-primary single disabled" onclick="$.operate.edit()"> |
||||
<i class="fa fa-edit"></i> 修改 |
||||
</a> |
||||
<a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()"> |
||||
<i class="fa fa-times"></i> 删除 |
||||
</a> |
||||
<a class="btn btn-warning" onclick="$.table.export()"> |
||||
<i class="fa fa-download"></i> 导出 |
||||
</a> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</section> |
||||
<div class="col-sm-12 main"> |
||||
<br> |
||||
<div class="panel panel-primary"> |
||||
<div class=panel-body> |
||||
<table class="table table-bordered table-condensed table-striped table-hover"> |
||||
<thead> |
||||
<tr> |
||||
<th>分类名称</th> |
||||
<th>父级分类</th> |
||||
<th>Logo</th> |
||||
<th>排序</th> |
||||
<th>创建时间</th> |
||||
<th>修改时间</th> |
||||
<th>功能操作</th> |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
{% for cate in cates %} |
||||
<tr> |
||||
<td>{{ cate.name }}</td> |
||||
<td>{{ cate.parent_id }}</td> |
||||
<td width="5%"><img src="/media/{{ cate.logo }}" width="100px" height="100px"></td> |
||||
<td>{{ cate.sort }}</td> |
||||
<td>{{ cate.create_time }}</td> |
||||
<td>{{ cate.update_time }}</td> |
||||
<td width="20%"> |
||||
<a class="btn btn-primary single disabled" onclick="$.operate.edit()"> |
||||
<i class="fa fa-edit"></i> 修改 |
||||
</a> |
||||
<a class="btn btn-danger multiple disabled" onclick="$.operae.removeAll()"> |
||||
<i class="fa fa-times"></i> 删除 |
||||
</a> |
||||
</td> |
||||
</tr> |
||||
{% empty %} |
||||
<tr> |
||||
<td colspan="7">无相关记录!</td> |
||||
</tr> |
||||
{% endfor %} |
||||
</tbody> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<nav aria-label="Contacts Page Navigation"> |
||||
<ul class="pagination justify-content-center m-2"> |
||||
{% if cates.has_previous %} |
||||
<li class="page-item"> |
||||
<a class="page-link" href="?/page={{ cates.previous_page_number }}"> |
||||
<span aria-hidden="true">«</span> |
||||
</a> |
||||
</li> |
||||
{% endif %} |
||||
|
||||
{% for pg in cates.paginator.page_range %} |
||||
{% if cates.number == pg %} |
||||
<li class="page-item active"> |
||||
<a class="page-link" href="?page={{ pg }}">{{ pg }}</a> |
||||
</li> |
||||
{% else %} |
||||
<li class="page-item"> |
||||
<a class="page-link" href="?page={{ pg }}">{{ pg }}</a> |
||||
</li> |
||||
{% endif %} |
||||
{% endfor %} |
||||
|
||||
{% if cates.has_next %} |
||||
<li class="page-item"> |
||||
<a class="page-link" href="?page={{ cates.next_page_number }}"> |
||||
<span aria-hidden="true">»</span> |
||||
</a> |
||||
</li> |
||||
{% endif %} |
||||
</ul> |
||||
</nav> |
||||
</div> |
||||
{# 删除信息 #} |
||||
<div class="modal fade" id="delcfmModel"> |
||||
<div class="modal-dialog"> |
||||
<div class="modal-content message_align"> |
||||
<div class="model-header"> |
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"> |
||||
<span aria-hidden="true">×</span> |
||||
</button> |
||||
<h4 class="modal-title">提示信息</h4> |
||||
</div> |
||||
<div class="modal-body"> |
||||
<p>您确认要删除吗?</p> |
||||
</div> |
||||
<div class="modal-footer"> |
||||
<input type="hidden" id="url"/> |
||||
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button> |
||||
<a onclick="urlSubmit()" class="btn btn-success" data-dismiss="modal">确定</a> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
{% endblock %} |
Loading…
Reference in new issue