Procházet zdrojové kódy

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	apps/customer/views.py
wushaodong před 4 roky
rodič
revize
06c4919e6d

+ 3 - 3
apps/customer/filters.py

@@ -1,12 +1,12 @@
 # coding=utf-8
 import django_filters
 
-from .models import Customer
+from .models import ReportCustomer
 
-class CustomerFilter(django_filters.FilterSet):
+class ReportCustomerFilter(django_filters.FilterSet):
     name = django_filters.CharFilter(field_name='name', lookup_expr='icontains')
     tel = django_filters.CharFilter(field_name='tel', lookup_expr='icontains')
 
     class Meta:
-        model = Customer
+        model = ReportCustomer
         fields = '__all__'

+ 8 - 8
apps/customer/models.py

@@ -7,7 +7,7 @@ from utils.exceptions import CustomError
 from apps.option.models import Option
 
 
-class Customer(models.Model):
+class ReportCustomer(models.Model):
     NOT_CHECKED = 0
     CHECKED = 1
     REPEAT_REPORT = 2
@@ -24,9 +24,9 @@ class Customer(models.Model):
     village = models.CharField(max_length=100, verbose_name=u'小区')
     address = models.CharField(max_length=100, verbose_name=u'地址')
     source = models.ForeignKey(Option, max_length=100, verbose_name=u'来源', related_name='customer_source',
-                               on_delete=models.PROTECT, null=True)
+                               on_delete=models.PROTECT)
     project = models.ForeignKey(Option, max_length=100, verbose_name=u'项目', related_name='customer_category',
-                                on_delete=models.PROTECT, null=True)
+                                on_delete=models.PROTECT)
     notes = models.CharField(max_length=500, verbose_name=u"备注", null=True)
     report_status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'报备状态', default=NOT_CHECKED)
     check_user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'审核人', related_name='customer_check_user',
@@ -35,26 +35,26 @@ class Customer(models.Model):
 
 
     class Meta:
-        db_table = 'customer'
+        db_table = 'report_customer'
         verbose_name = u'客户报备'
         ordering = ['-id']
         default_permissions = ()
         permissions = [
             ('view_customer', u'查看'),
             ('add_customer', u'添加'),
-            ('update_customer',u'更新'),
+            ('update_customer', u'更新'),
             ('delete_customer', u'删除'),
             ('check_customer', u'审核'),
         ]
 
     def check_customer(self, user):
         # 审核
-        if self.report_status == Customer.REPEAT_REPORT:
+        if self.report_status == ReportCustomer.REPEAT_REPORT:
             raise CustomError('当前客户报备状态为重复报备!')
 
-        if self.report_status == Customer.NOT_CHECKED:
+        if self.report_status == ReportCustomer.NOT_CHECKED:
             self.check_user = user
-            self.report_status = Customer.CHECKED
+            self.report_status = ReportCustomer.CHECKED
             self.check_time = timezone.now()
             self.save()
         # if self.report_status == Customer.CHECKED:

+ 3 - 3
apps/customer/serializers.py

@@ -1,13 +1,13 @@
 # coding=utf-8
 from rest_framework import serializers
 
-from .models import Customer
+from .models import ReportCustomer
 
-class CustomerSerializer(serializers.ModelSerializer):
+class ReportCustomerSerializer(serializers.ModelSerializer):
     gender_text = serializers.CharField(source='get_gender_display', read_only=True)
     report_status_text = serializers.CharField(source='get_report_status_display', read_only=True)
     check_time= serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
 
     class Meta:
-        model = Customer
+        model = ReportCustomer
         fields = '__all__'

+ 3 - 4
apps/customer/urls.py

@@ -2,15 +2,14 @@
 from django.conf.urls import url, include
 from rest_framework.routers import SimpleRouter
 
-from .views import CustomerViewSet,SourceDictView,ProjectDictView
+from .views import ReportCustomerViewSet,ReportCustomerDictView
 
 
 urlpatterns = [
-    url(r'^source/dict/$', SourceDictView.as_view()),
-    url(r'^project/dict/$', ProjectDictView.as_view()),
+    url(r'^dict/$', ReportCustomerDictView.as_view()),
 
 ]
 
 router = SimpleRouter()
-router.register(r'', CustomerViewSet)
+router.register(r'reportcustomer', ReportCustomerViewSet)
 urlpatterns += router.urls

+ 20 - 21
apps/customer/views.py

@@ -1,31 +1,32 @@
 # coding=utf-8
 from rest_framework.views import APIView
+from django.db.models import Q
 
 from utils.custom_modelviewset import CustomModelViewSet
 from utils import response_ok, response_error
 from apps.option.models import Option
 from apps.option.serializers import OptionComboboxSerializer
-from .models import Customer
-from .serializers import CustomerSerializer
-from .filters import CustomerFilter
+from .models import ReportCustomer
+from .serializers import ReportCustomerSerializer
+from .filters import ReportCustomerFilter
 
 
-class CustomerViewSet(CustomModelViewSet):
+class ReportCustomerViewSet(CustomModelViewSet):
     permission_classes = []
-    queryset = Customer.objects.filter()
-    serializer_class = CustomerSerializer
+    queryset = ReportCustomer.objects.filter()
+    serializer_class = ReportCustomerSerializer
 
     def filter_queryset(self, queryset):
-        f = CustomerFilter(self.request.GET, queryset=queryset)
+        f = ReportCustomerFilter(self.request.GET, queryset=queryset)
         return f.qs
 
     def perform_create(self, serializer):
-        super(CustomerViewSet, self).perform_create(serializer)
+        super(ReportCustomerViewSet, self).perform_create(serializer)
         instance = serializer.instance
         validated_data = serializer.validated_data
 
     def perform_update(self, serializer):
-        super(CustomerViewSet, self).perform_update(serializer)
+        super(ReportCustomerViewSet, self).perform_update(serializer)
         instance = serializer.instance
         validated_data = serializer.validated_data
 
@@ -33,7 +34,7 @@ class CustomerViewSet(CustomModelViewSet):
         instance = self.get_object()
         # if instance.tenant != request.user.employee.tenant:
         #     raise CustomError(u'禁止跨企业操作!')
-        super(CustomerViewSet, self).destroy(self, request, *args, **kwargs)
+        super(ReportCustomerViewSet, self).destroy(self, request, *args, **kwargs)
         return response_ok()
 
     # @action(methods=['post'], detail=False)
@@ -56,19 +57,17 @@ class CustomerViewSet(CustomModelViewSet):
     #         return response_error(str(e))
     #     return response_ok('审核完成!')
 
-class SourceDictView(APIView):
+class ReportCustomerDictView(APIView):
     permission_classes = []
 
     def get(self, request):
-        rows = Option.objects.filter(type=Option.CUSTOMER_SOURCE,enable=True)
-        serializer = OptionComboboxSerializer(rows, many=True)
-        return response_ok(serializer.data)
+        scouce = Option.objects.filter(type=Option.CUSTOMER_SOURCE , enable=True)
+        project = Option.objects.filter(type=Option.CATEGORY, enable=True)
+        serializer_scouce = OptionComboboxSerializer(scouce, many=True)
+        serializer_project = OptionComboboxSerializer(project, many=True)
+        return response_ok({
+            'source': serializer_scouce.data,
+            'project': serializer_project.data,
+        })
 
 
-class ProjectDictView(APIView):
-    permission_classes = []
-
-    def get(self, request):
-        rows = Option.objects.filter(type=Option.CATEGORY, enable=True)
-        serializer = OptionComboboxSerializer(rows, many=True)
-        return response_ok(serializer.data)

+ 38 - 34
uis/views/customer/edit.html

@@ -68,18 +68,18 @@
                         </div>
 
                         <div>
-                            <label class="layui-form-label">来源:</label>
+                            <label class="layui-form-label"><font color='red' size="4">*</font>来源:</label>
                             <div class="layui-input-block">
-                                <select name="source" id="id_source">
+                                <select lay-verify="required" name="source" id="id_source">
                                     <option value="">请选择来源</option>
                                 </select>
                             </div>
                         </div>
 
                         <div>
-                            <label class="layui-form-label">项目:</label>
+                            <label class="layui-form-label"><font color='red' size="4">*</font>项目:</label>
                             <div class="layui-input-block">
-                                 <select name="project" id="tags" xm-select="tags" xm-select-skin="primary">
+                                 <select lay-verify="required" name="project" id="tags" xm-select="tags" xm-select-skin="primary">
                                      <option value="">请选择</option>
                                  </select>
                             </div>
@@ -115,42 +115,45 @@
             , formSelects = layui.formSelects
             , form = layui.form
         var id = layui.view.getParameterByName('id');
-
-        formSelects.data('tags', 'local', {
-            arr: [
-                {"name": "北京", "value": 1},
-                {"name": "上海", "value": 2},
-                {"name": "广州", "value": 3},
-                {"name": "深圳", "value": 4},
-                {"name": "天津", "value": 5}
-            ]
-        });
-
+        var editdata = {};
         if (id) {
-            var editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
+            editdata = JSON.parse(JSON.stringify(parent.layui.table.editdata)); // 框架有Bug所以这么转换
             editdata['gender'] = editdata['gender'].toString();
-            form.val("component-form-element", editdata);
         }
 
         admin.req({
-            url: '/customer/source/dict/',
+            url: '/customer/dict/',
             done: function (res) {
-                var data = res.data;
+                var data_source = res.data.source;
                 var source_node = $('#id_source');
-                for (var i in data) {
-                    var pid = data[i].id;
-                    var name = data[i].name;
+                for (var i in data_source) {
+                    var pid = data_source[i].id;
+                    var name = data_source[i].name;
                     source_node.append("<option value='" + pid + "'>" + name + "</option>");
                 }
-                form.render(); //更新form
-            }
-        });
-
-        admin.req({
-            url: '/customer/project/dict/',
-            done: function (res) {
-                var data = res.data;
-                console.log(res, "opppppppp")
+                var data_project = res.data.project;
+                let tempData = [];
+                if(data_project && data_project.length > 0){
+                    tempData =  data_project.map(item=>{
+                        if(id && editdata['project']){
+                           if(typeof editdata['project'] === 'number'){
+                               editdata['project'] = [editdata['project']]
+                           }
+                           editdata['project'].forEach(item1=>{
+                               if(item.id === item1){
+                                   item.selected = 'selected'
+                               }else{
+                                   item.selected = ''
+                               }
+                           })
+                        }
+                        return {value: item.id, name: item.name, selected: item.selected }
+                    });
+                }
+                formSelects.data('tags', 'local', {
+                    arr: tempData
+                });
+                form.val("component-form-element", editdata);
             }
         });
 
@@ -158,13 +161,14 @@
 
         form.on('submit(component-form-element)', function (data) {
             if (id) {
-                var url = '/customer/' + id + '/';
+                var url = '/customer/reportcustomer/' + id + '/';
                 var type = 'put';
             } else {
-                url = '/customer/';
+                url = '/customer/reportcustomer/';
                 type = 'post'
             }
-
+            if(data.field.source) data.field.source = parseInt(data.field.source);
+            console.log(data.field, "opopopopop")
             admin.req({
                 url: url
                 , data: data.field

+ 18 - 6
uis/views/customer/index.html

@@ -78,11 +78,8 @@
                                 </button>
                             </div>
                             <div class="seach_items">
-                                <select name="origin" style="width: 40px;">
+                                <select name="source" id="id_source" style="width: 40px;">
                                     <option value="">请选择来源</option>
-                                    <option value="1">自然进店</option>
-                                    <option value="2">电话邀约</option>
-                                    <option value="3">来电咨询</option>
                                 </select>
                             </div>
                             <div class="seach_items">
@@ -124,7 +121,7 @@
 
         table.render({
             elem: '#customer_datagrid'
-            , url: '/customer/'
+            , url: '/customer/reportcustomer/'
             , cols: [[
                 {field: 'name', title: '姓名', width: 200}
                 , {field: 'gender_text', title: "性别", width: 70}
@@ -142,6 +139,21 @@
             , page: true
             , height: 'full-108'
         });
+
+        admin.req({
+            url: '/customer/dict/',
+            done: function (res) {
+                var data = res.data.source;
+                var source_node = $('#id_source');
+                for (var i in data) {
+                    var pid = data[i].id;
+                    var name = data[i].name;
+                    source_node.append("<option value='" + pid + "'>" + name + "</option>");
+                }
+                form.render('select');
+            }
+        });
+
         $('#btn_download').on('click', function () {
             layui.view.download("/static/xls/设备信息导入模板.xlsx");
         });
@@ -170,7 +182,7 @@
                 layer.confirm('确定要删除吗?', function (index) {
                     layer.close(index);
                     admin.req({
-                        url: '/customer/' + data.id + '/'
+                        url: '/customer/reportcustomer/' + data.id + '/'
                         , type: 'delete'
                         , done: function (res) {
                             table.reload('customer_datagrid', {});