diff --git a/client/src/router/index.js b/client/src/router/index.js index e2b998c..2ada0a3 100644 --- a/client/src/router/index.js +++ b/client/src/router/index.js @@ -110,7 +110,14 @@ export const asyncRoutes = [ name: 'enterprise', component: () => import('@/views/enterprise/enterprise'), meta: { title: '组织信息', icon: 'example', perms: ['enterprise_manage'] } - } + }, + { + path: 'enterprise/create', + name: 'EnterpriseCreate', + component: () => import('@/views/enterprise/enterprisecreate.vue'), + meta: { title: '新增组织信息', noCache: true, icon: '', perms: ['enterprise_create']}, + hidden: true + }, ] }, diff --git a/client/src/views/enterprise/enterprise.vue b/client/src/views/enterprise/enterprise.vue index b6d1b4a..2e916ad 100644 --- a/client/src/views/enterprise/enterprise.vue +++ b/client/src/views/enterprise/enterprise.vue @@ -1,19 +1,9 @@ diff --git a/client/src/views/implementrule/implementrulecreate.vue b/client/src/views/implementrule/implementrulecreate.vue index 914d124..bb3091e 100644 --- a/client/src/views/implementrule/implementrulecreate.vue +++ b/client/src/views/implementrule/implementrulecreate.vue @@ -326,4 +326,4 @@ export default { } } }; - \ No newline at end of file + diff --git a/docs/~$系统模块.docx b/docs/~$系统模块.docx deleted file mode 100644 index 3b8327d..0000000 Binary files a/docs/~$系统模块.docx and /dev/null differ diff --git a/server/apps/crm/migrations/0002_auto_20200629_1012.py b/server/apps/crm/migrations/0002_auto_20200629_1012.py new file mode 100644 index 0000000..c88c44a --- /dev/null +++ b/server/apps/crm/migrations/0002_auto_20200629_1012.py @@ -0,0 +1,238 @@ +# Generated by Django 3.0.5 on 2020-06-29 02:12 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='enterprise', + name='remarks', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='备注'), + ), + migrations.AlterField( + model_name='enterprise', + name='all_person', + field=models.IntegerField(blank=True, null=True, verbose_name='组织员工数'), + ), + migrations.AlterField( + model_name='enterprise', + name='build_time', + field=models.DateField(blank=True, null=True, verbose_name='建厂时间'), + ), + migrations.AlterField( + model_name='enterprise', + name='business_type', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='经营范围'), + ), + migrations.AlterField( + model_name='enterprise', + name='ceramics_output', + field=models.IntegerField(blank=True, null=True, verbose_name='陶瓷年产量'), + ), + migrations.AlterField( + model_name='enterprise', + name='credit_code', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='统一社会信用代码'), + ), + migrations.AlterField( + model_name='enterprise', + name='credit_rate', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='企业信誉级别'), + ), + migrations.AlterField( + model_name='enterprise', + name='credit_remark', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='企业信誉级别备注'), + ), + migrations.AlterField( + model_name='enterprise', + name='ems_person', + field=models.IntegerField(blank=True, null=True, verbose_name='EMS人数'), + ), + migrations.AlterField( + model_name='enterprise', + name='ename', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='工厂英文名称'), + ), + migrations.AlterField( + model_name='enterprise', + name='gassets', + field=models.CharField(blank=True, max_length=100, null=True, verbose_name='固定资产'), + ), + migrations.AlterField( + model_name='enterprise', + name='legal', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='申请单位法人代表'), + ), + migrations.AlterField( + model_name='enterprise', + name='linkman1_duty', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='第1联系人职务'), + ), + migrations.AlterField( + model_name='enterprise', + name='linkman1_email', + field=models.EmailField(blank=True, max_length=300, null=True, verbose_name='第1联系人邮箱'), + ), + migrations.AlterField( + model_name='enterprise', + name='linkman1_fax', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='第1联系人传真'), + ), + migrations.AlterField( + model_name='enterprise', + name='linkman1_mobile', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='第1联系人手机'), + ), + migrations.AlterField( + model_name='enterprise', + name='linkman1_name', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='第1联系人'), + ), + migrations.AlterField( + model_name='enterprise', + name='linkman1_tel', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='第1联系人电话'), + ), + migrations.AlterField( + model_name='enterprise', + name='linkman2_duty', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='备用联系人职务'), + ), + migrations.AlterField( + model_name='enterprise', + name='linkman2_email', + field=models.EmailField(blank=True, max_length=300, null=True, verbose_name='备用联系人邮箱'), + ), + migrations.AlterField( + model_name='enterprise', + name='linkman2_fax', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='备用联系人传真'), + ), + migrations.AlterField( + model_name='enterprise', + name='linkman2_mobile', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='备用联系人手机'), + ), + migrations.AlterField( + model_name='enterprise', + name='linkman2_name', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='备用联系人'), + ), + migrations.AlterField( + model_name='enterprise', + name='linkman2_tel', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='备用联系人电话'), + ), + migrations.AlterField( + model_name='enterprise', + name='linkman3_duty', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='ES联系人职务'), + ), + migrations.AlterField( + model_name='enterprise', + name='linkman3_email', + field=models.EmailField(blank=True, max_length=300, null=True, verbose_name='ES联系人邮箱'), + ), + migrations.AlterField( + model_name='enterprise', + name='linkman3_fax', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='ES联系人传真'), + ), + migrations.AlterField( + model_name='enterprise', + name='linkman3_mobile', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='ES联系人手机'), + ), + migrations.AlterField( + model_name='enterprise', + name='linkman3_name', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='ES联系人'), + ), + migrations.AlterField( + model_name='enterprise', + name='linkman3_tel', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='ES联系人电话'), + ), + migrations.AlterField( + model_name='enterprise', + name='mailing_address', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='通信地址'), + ), + migrations.AlterField( + model_name='enterprise', + name='mailing_code', + field=models.CharField(blank=True, max_length=300, null=True, verbose_name='地址邮编'), + ), + migrations.AlterField( + model_name='enterprise', + name='mailing_eaddress', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='通信英文地址'), + ), + migrations.AlterField( + model_name='enterprise', + name='name', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='工厂名称'), + ), + migrations.AlterField( + model_name='enterprise', + name='ohs_person', + field=models.IntegerField(blank=True, null=True, verbose_name='OHS人数'), + ), + migrations.AlterField( + model_name='enterprise', + name='pcv_person', + field=models.IntegerField(blank=True, null=True, verbose_name='PCV人数'), + ), + migrations.AlterField( + model_name='enterprise', + name='person_count', + field=models.IntegerField(blank=True, null=True, verbose_name='工厂人数'), + ), + migrations.AlterField( + model_name='enterprise', + name='production_address', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='生产地址'), + ), + migrations.AlterField( + model_name='enterprise', + name='production_eaddress', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='生产英文地址'), + ), + migrations.AlterField( + model_name='enterprise', + name='production_postcode', + field=models.CharField(blank=True, max_length=100, null=True, verbose_name='生产地址邮编'), + ), + migrations.AlterField( + model_name='enterprise', + name='qms_person', + field=models.IntegerField(blank=True, null=True, verbose_name='QMS人数'), + ), + migrations.AlterField( + model_name='enterprise', + name='query_code', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='组织查询码'), + ), + migrations.AlterField( + model_name='enterprise', + name='registered_address', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='注册地址'), + ), + migrations.AlterField( + model_name='enterprise', + name='registered_code', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='注册地址邮编'), + ), + migrations.AlterField( + model_name='enterprise', + name='registered_eaddress', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='注册地址英文'), + ), + ] diff --git a/server/apps/crm/migrations/0003_enterprise_fid.py b/server/apps/crm/migrations/0003_enterprise_fid.py new file mode 100644 index 0000000..3852029 --- /dev/null +++ b/server/apps/crm/migrations/0003_enterprise_fid.py @@ -0,0 +1,19 @@ +# Generated by Django 3.0.5 on 2020-06-29 09:07 + +from django.db import migrations, models +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0002_auto_20200629_1012'), + ] + + operations = [ + migrations.AddField( + model_name='enterprise', + name='fid', + field=models.UUIDField(default=uuid.uuid4, verbose_name='fid'), + ), + ] diff --git a/server/apps/crm/migrations/0004_auto_20200701_1457.py b/server/apps/crm/migrations/0004_auto_20200701_1457.py new file mode 100644 index 0000000..4106b83 --- /dev/null +++ b/server/apps/crm/migrations/0004_auto_20200701_1457.py @@ -0,0 +1,32 @@ +# Generated by Django 3.0.5 on 2020-07-01 06:57 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0003_enterprise_fid'), + ] + + operations = [ + migrations.RemoveField( + model_name='enterprise', + name='fid', + ), + migrations.AddField( + model_name='enterprise', + name='production_code', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='生产地址邮编'), + ), + migrations.AlterField( + model_name='enterprise', + name='code', + field=models.CharField(max_length=300, unique=True, verbose_name='工厂编号'), + ), + migrations.AlterField( + model_name='enterprise', + name='production_eaddress', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='生产地址英文'), + ), + ] diff --git a/server/apps/crm/migrations/0005_auto_20200701_1505.py b/server/apps/crm/migrations/0005_auto_20200701_1505.py new file mode 100644 index 0000000..79cbaa0 --- /dev/null +++ b/server/apps/crm/migrations/0005_auto_20200701_1505.py @@ -0,0 +1,22 @@ +# Generated by Django 3.0.5 on 2020-07-01 07:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0004_auto_20200701_1457'), + ] + + operations = [ + migrations.RemoveField( + model_name='enterprise', + name='production_code', + ), + migrations.AlterField( + model_name='enterprise', + name='production_eaddress', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='生产英文地址'), + ), + ] diff --git a/server/apps/crm/models.py b/server/apps/crm/models.py index 200864a..f8ffdb5 100644 --- a/server/apps/crm/models.py +++ b/server/apps/crm/models.py @@ -1,68 +1,67 @@ from django.db import models from apps.system.models import CommonBModel, Dict from simple_history.models import HistoricalRecords +import uuid # Create your models here. class Enterprise(CommonBModel): - code = models.CharField('工厂编号', max_length=300) - name = models.CharField('工厂名称',max_length=1000) - ename = models.CharField('工厂英文名称',max_length=1000) + code = models.CharField('工厂编号',unique=True, max_length=300) + name = models.CharField('工厂名称',null=True, blank=True,max_length=1000) + ename = models.CharField('工厂英文名称',null=True, blank=True,max_length=1000) type = models.ForeignKey(Dict, on_delete=models.SET_NULL,null=True, blank=True,verbose_name='机构类型', related_name= 'enterprise_type') - legal = models.CharField('申请单位法人代表',max_length=300) - production_address = models.CharField('生产地址',max_length=1000) - production_eaddress = models.CharField('生产英文地址',max_length=1000) - production_postcode = models.CharField('生产地址邮编',max_length=100) - build_time = models.DateField('建厂时间',max_length=200) - person_count = models.IntegerField('工厂人数') - ceramics_output = models.IntegerField('陶瓷年产量') - gassets = models.CharField('固定资产',max_length=100) - linkman1_name = models.CharField('第1联系人',max_length=300) - linkman1_duty = models.CharField('第1联系人职务',max_length=300) - linkman1_email = models.EmailField('第1联系人邮箱',max_length=300) - linkman1_tel = models.CharField('第1联系人电话',max_length=300) - linkman1_mobile = models.CharField('第1联系人手机',max_length=300) - linkman1_fax = models.CharField('第1联系人传真',max_length=300) - linkman2_name = models.CharField('备用联系人',max_length=300) - linkman2_email = models.EmailField('备用联系人邮箱',max_length=300) - linkman2_tel = models.CharField('备用联系人电话',max_length=300) - linkman2_duty = models.CharField('备用联系人职务',max_length=300) - linkman2_mobile = models.CharField('备用联系人手机',max_length=300) - linkman2_fax = models.CharField('备用联系人传真',max_length=300) + legal = models.CharField('申请单位法人代表',null=True, blank=True,max_length=300) + build_time = models.DateField('建厂时间',null=True, blank=True) + person_count = models.IntegerField('工厂人数',null=True, blank=True) + ceramics_output = models.IntegerField('陶瓷年产量',null=True, blank=True) + gassets = models.CharField('固定资产',max_length=100,null=True, blank=True) + linkman1_name = models.CharField('第1联系人',max_length=300,null=True, blank=True) + linkman1_duty = models.CharField('第1联系人职务',max_length=300,null=True, blank=True) + linkman1_email = models.EmailField('第1联系人邮箱',max_length=300,null=True, blank=True) + linkman1_tel = models.CharField('第1联系人电话',max_length=300,null=True, blank=True) + linkman1_mobile = models.CharField('第1联系人手机',max_length=300,null=True, blank=True) + linkman1_fax = models.CharField('第1联系人传真',max_length=300,null=True, blank=True) + linkman2_name = models.CharField('备用联系人',max_length=300,null=True, blank=True) + linkman2_email = models.EmailField('备用联系人邮箱',max_length=300,null=True, blank=True) + linkman2_tel = models.CharField('备用联系人电话',max_length=300,null=True, blank=True) + linkman2_duty = models.CharField('备用联系人职务',max_length=300,null=True, blank=True) + linkman2_mobile = models.CharField('备用联系人手机',max_length=300,null=True, blank=True) + linkman2_fax = models.CharField('备用联系人传真',max_length=300,null=True, blank=True) country_code = models.ForeignKey(Dict, on_delete=models.SET_NULL,null=True, blank=True,verbose_name='生产企业所在国家地区代码', related_name= 'enterprise_country_code') - credit_code = models.CharField('统一社会信用代码',max_length=300) - # post_name = models.CharField('通信公司',null=True, blank=True, max_length=1000) - # post_ename = models.CharField('通信公司(英)',null=True, blank=True, max_length=1000) - registered_address = models.CharField('注册地址',max_length=1000) - registered_eaddress = models.CharField('注册地址英文',max_length=1000) - registered_code = models.CharField('注册地址邮编',max_length=1000) - mailing_address = models.CharField('通信地址',max_length=1000) - mailing_eaddress = models.CharField('通信英文地址',max_length=1000) - mailing_code = models.CharField('地址邮编',max_length=300) + credit_code = models.CharField('统一社会信用代码',max_length=300,null=True, blank=True) + registered_address = models.CharField('注册地址',max_length=1000,null=True, blank=True) + registered_eaddress = models.CharField('注册地址英文',max_length=1000,null=True, blank=True) + registered_code = models.CharField('注册地址邮编',max_length=1000,null=True, blank=True) + production_address = models.CharField('生产地址',null=True, blank=True,max_length=1000) + production_eaddress = models.CharField('生产英文地址',null=True, blank=True,max_length=1000) + production_postcode = models.CharField('生产地址邮编',null=True, blank=True,max_length=100) + mailing_address = models.CharField('通信地址',max_length=1000,null=True, blank=True) + mailing_eaddress = models.CharField('通信英文地址',max_length=1000,null=True, blank=True) + mailing_code = models.CharField('地址邮编',max_length=300,null=True, blank=True) region_code = models.ForeignKey(Dict, on_delete=models.SET_NULL,verbose_name='县/区',null=True, blank=True, related_name= 'enterprise_region_code1') # status = models.CharField('是否受理',null=True, blank=True, max_length=1000) # bak1 = models.CharField('',null=True, blank=True, max_length=1000) # bak2 = models.CharField('',null=True, blank=True, max_length=1000) # bak3 = models.CharField('',null=True, blank=True, max_length=1000) professional = models.ForeignKey(Dict, on_delete=models.SET_NULL,verbose_name='所属专业',null=True, blank=True, related_name= 'enterprise_professional') - qms_person = models.IntegerField('QMS人数') - ems_person = models.IntegerField('EMS人数') - pcv_person = models.IntegerField('PCV人数') - ohs_person = models.IntegerField('OHS人数') - all_person = models.IntegerField('组织员工数') + qms_person = models.IntegerField('QMS人数',null=True, blank=True) + ems_person = models.IntegerField('EMS人数',null=True, blank=True) + pcv_person = models.IntegerField('PCV人数',null=True, blank=True) + ohs_person = models.IntegerField('OHS人数',null=True, blank=True) + all_person = models.IntegerField('组织员工数',null=True, blank=True) economy_class = models.ForeignKey(Dict, on_delete=models.SET_NULL,verbose_name='经济行业',null=True, blank=True, related_name= 'enterprise_economy_class') economy_type = models.ForeignKey(Dict, on_delete=models.SET_NULL,verbose_name='经济类型',null=True, blank=True, related_name= 'enterprise_economy_type') - business_type = models.CharField('经营范围',max_length=1000) - credit_rate = models.CharField('企业信誉级别',max_length=300) - credit_remark = models.CharField('企业信誉级别备注',max_length=1000) + business_type = models.CharField('经营范围',max_length=1000,null=True, blank=True) + credit_rate = models.CharField('企业信誉级别',max_length=300,null=True, blank=True) + credit_remark = models.CharField('企业信誉级别备注',max_length=1000,null=True, blank=True) # xinyu_oper = models.CharField('信誉法人',null=True, blank=True, max_length=1000) # xinyu_date = models.CharField('信誉时间',null=True, blank=True, max_length=1000) - query_code = models.CharField('组织查询码',max_length=1000) - linkman3_name = models.CharField('ES联系人',max_length=300) - linkman3_duty = models.CharField('ES联系人职务',max_length=300) - linkman3_email = models.EmailField('ES联系人邮箱',max_length=300) - linkman3_tel = models.CharField('ES联系人电话',max_length=300) - linkman3_mobile = models.CharField('ES联系人手机',max_length=300) - linkman3_fax = models.CharField('ES联系人传真',max_length=300) - + query_code = models.CharField('组织查询码',max_length=1000,null=True, blank=True) + linkman3_name = models.CharField('ES联系人',max_length=300,null=True, blank=True) + linkman3_duty = models.CharField('ES联系人职务',max_length=300,null=True, blank=True) + linkman3_email = models.EmailField('ES联系人邮箱',max_length=300,null=True, blank=True) + linkman3_tel = models.CharField('ES联系人电话',max_length=300,null=True, blank=True) + linkman3_mobile = models.CharField('ES联系人手机',max_length=300,null=True, blank=True) + linkman3_fax = models.CharField('ES联系人传真',max_length=300,null=True, blank=True) + remarks = models.CharField('备注',max_length=1000,null=True, blank=True) class Meta: verbose_name = '组织信息' verbose_name_plural = verbose_name diff --git a/server/apps/crm/serializers.py b/server/apps/crm/serializers.py index 36a043c..ece5c33 100644 --- a/server/apps/crm/serializers.py +++ b/server/apps/crm/serializers.py @@ -1,9 +1,24 @@ from rest_framework import serializers from .models import Enterprise +from apps.system.serializers import DictSerializer class EnterpriseSerializer(serializers.ModelSerializer): class Meta: model = Enterprise - fields = '__all__' \ No newline at end of file + fields = '__all__' +class EnterpriseListSerializer(serializers.ModelSerializer): + type = DictSerializer() + economy_class = DictSerializer() + class Meta: + model = Enterprise + fields = ['id','query_code', 'code','fid', 'name','ename','type','legal','production_address','production_eaddress','production_postcode','build_time','person_count','ceramics_output','gassets','linkman1_name','linkman1_tel','linkman1_mobile','country_code','credit_code','professional','all_person','economy_class','economy_type','linkman1_duty','business_type'] + @staticmethod + def setup_eager_loading(queryset): + """ Perform necessary eager loading of data. """ + queryset = queryset.select_related('type','economy_class') + return queryset + + def get_cert_type(self, obj): + return obj.get_cert_type_display() \ No newline at end of file diff --git a/server/apps/crm/views.py b/server/apps/crm/views.py index 88c33c0..ab34d89 100644 --- a/server/apps/crm/views.py +++ b/server/apps/crm/views.py @@ -2,12 +2,25 @@ from django.shortcuts import render from rest_framework.viewsets import ModelViewSet from .models import Enterprise -from .serializers import EnterpriseSerializer +from utils.queryset import get_child_queryset2 +from .serializers import EnterpriseSerializer,EnterpriseListSerializer +from apps.system.permission_data import RbacFilterSet # Create your views here. -class EnterpriseViewSet(ModelViewSet): +class EnterpriseViewSet(RbacFilterSet, ModelViewSet): perms_map = {'get': '*', 'post': 'Enterprise_create', 'put': 'Enterprise_update', 'delete': 'Enterprise_delete'} queryset = Enterprise.objects serializer_class = EnterpriseSerializer - search_fields = ['name', 'query_code'] + search_fields = ['name','query_code', 'code'] ordering = ['-create_time'] + def get_serializer_class(self): + # 根据请求类型动态变更serializer + if self.action == 'list': + return EnterpriseListSerializer + return EnterpriseSerializer + + def get_queryset(self): + queryset = self.queryset + if hasattr(self.get_serializer_class(), 'setup_eager_loading'): + queryset = self.get_serializer_class().setup_eager_loading(queryset) # 性能优化 + return queryset \ No newline at end of file diff --git a/server/apps/system/permission_data.py b/server/apps/system/permission_data.py index f5f8d5e..c51341c 100644 --- a/server/apps/system/permission_data.py +++ b/server/apps/system/permission_data.py @@ -19,6 +19,8 @@ class RbacFilterSet(GenericAPIView): ) queryset = self.queryset + if hasattr(self.get_serializer_class(), 'setup_eager_loading'): + queryset = self.get_serializer_class().setup_eager_loading(queryset) # 性能优化 if isinstance(queryset, QuerySet): # Ensure queryset is re-evaluated on each request. queryset = queryset.all()