diff --git a/client/src/api/enterprise.js b/client/src/api/enterprise.js new file mode 100644 index 0000000..7aa060c --- /dev/null +++ b/client/src/api/enterprise.js @@ -0,0 +1,32 @@ +import request from '@/utils/request' + +export function getEnterpriseList(query) { + return request({ + url: '/crm/enterprise/', + method: 'get', + params: query + }) +} + +export function createEnterprise(data) { + return request({ + url: '/crm/enterprise/', + method: 'post', + data + }) +} + +export function updateEnterprise(id, data) { + return request({ + url: `/crm/enterprise/${id}/`, + method: 'put', + data + }) +} + +export function deleteEnterprise(id) { + return request({ + url: `/crm/enterprise/${id}/`, + method: 'delete' + }) +} diff --git a/client/src/router/index.js b/client/src/router/index.js index 5ace654..16b9c51 100644 --- a/client/src/router/index.js +++ b/client/src/router/index.js @@ -80,6 +80,24 @@ export const asyncRoutes = [ component: () => import('@/views/standard/standard'), meta: { title: '标准库', icon: 'example', perms: ['standard_manage'] } } + + ] + }, + { + path: '/crm', + component: Layout, + redirect: '/crm/enterprise', + name: 'crm', + meta: { title: '客户企业', icon: 'example' }, + children: [ + + { + path: 'enterprise', + name: 'enterprise', + component: () => import('@/views/enterprise/enterprise'), + meta: { title: '组织信息', icon: 'example', perms: ['enterprise_manage'] } + } + ] }, { diff --git a/client/src/views/enterprise/enterprise.vue b/client/src/views/enterprise/enterprise.vue new file mode 100644 index 0000000..b6d1b4a --- /dev/null +++ b/client/src/views/enterprise/enterprise.vue @@ -0,0 +1,216 @@ + + diff --git a/docs/~$系统模块.docx b/docs/~$系统模块.docx new file mode 100644 index 0000000..3b8327d Binary files /dev/null and b/docs/~$系统模块.docx differ diff --git a/server/apps/crm/admin.py b/server/apps/crm/admin.py index 8c38f3f..e49fd90 100644 --- a/server/apps/crm/admin.py +++ b/server/apps/crm/admin.py @@ -1,3 +1,5 @@ from django.contrib import admin +from .models import Enterprise # Register your models here. +admin.site.register(Enterprise) \ No newline at end of file diff --git a/server/apps/crm/migrations/0001_initial.py b/server/apps/crm/migrations/0001_initial.py new file mode 100644 index 0000000..7e452fd --- /dev/null +++ b/server/apps/crm/migrations/0001_initial.py @@ -0,0 +1,86 @@ +# Generated by Django 3.0.5 on 2020-06-24 01:05 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('system', '0021_auto_20200616_1722'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Enterprise', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('code', models.CharField(max_length=300, verbose_name='工厂编号')), + ('name', models.CharField(max_length=1000, verbose_name='工厂名称')), + ('ename', models.CharField(max_length=1000, verbose_name='工厂英文名称')), + ('legal', models.CharField(max_length=300, verbose_name='申请单位法人代表')), + ('production_address', models.CharField(max_length=1000, verbose_name='生产地址')), + ('production_eaddress', models.CharField(max_length=1000, verbose_name='生产英文地址')), + ('production_postcode', models.CharField(max_length=100, verbose_name='生产地址邮编')), + ('build_time', models.DateField(max_length=200, verbose_name='建厂时间')), + ('person_count', models.IntegerField(verbose_name='工厂人数')), + ('ceramics_output', models.IntegerField(verbose_name='陶瓷年产量')), + ('gassets', models.CharField(max_length=100, verbose_name='固定资产')), + ('linkman1_name', models.CharField(max_length=300, verbose_name='第1联系人')), + ('linkman1_duty', models.CharField(max_length=300, verbose_name='第1联系人职务')), + ('linkman1_email', models.EmailField(max_length=300, verbose_name='第1联系人邮箱')), + ('linkman1_tel', models.CharField(max_length=300, verbose_name='第1联系人电话')), + ('linkman1_mobile', models.CharField(max_length=300, verbose_name='第1联系人手机')), + ('linkman1_fax', models.CharField(max_length=300, verbose_name='第1联系人传真')), + ('linkman2_name', models.CharField(max_length=300, verbose_name='备用联系人')), + ('linkman2_email', models.EmailField(max_length=300, verbose_name='备用联系人邮箱')), + ('linkman2_tel', models.CharField(max_length=300, verbose_name='备用联系人电话')), + ('linkman2_duty', models.CharField(max_length=300, verbose_name='备用联系人职务')), + ('linkman2_mobile', models.CharField(max_length=300, verbose_name='备用联系人手机')), + ('linkman2_fax', models.CharField(max_length=300, verbose_name='备用联系人传真')), + ('credit_code', models.CharField(max_length=300, verbose_name='统一社会信用代码')), + ('registered_address', models.CharField(max_length=1000, verbose_name='注册地址')), + ('registered_eaddress', models.CharField(max_length=1000, verbose_name='注册地址英文')), + ('registered_code', models.CharField(max_length=1000, verbose_name='注册地址邮编')), + ('mailing_address', models.CharField(max_length=1000, verbose_name='通信地址')), + ('mailing_eaddress', models.CharField(max_length=1000, verbose_name='通信英文地址')), + ('mailing_code', models.CharField(max_length=300, verbose_name='地址邮编')), + ('qms_person', models.IntegerField(verbose_name='QMS人数')), + ('ems_person', models.IntegerField(verbose_name='EMS人数')), + ('pcv_person', models.IntegerField(verbose_name='PCV人数')), + ('ohs_person', models.IntegerField(verbose_name='OHS人数')), + ('all_person', models.IntegerField(verbose_name='组织员工数')), + ('business_type', models.CharField(max_length=1000, verbose_name='经营范围')), + ('credit_rate', models.CharField(max_length=300, verbose_name='企业信誉级别')), + ('credit_remark', models.CharField(max_length=1000, verbose_name='企业信誉级别备注')), + ('query_code', models.CharField(max_length=1000, verbose_name='组织查询码')), + ('linkman3_name', models.CharField(max_length=300, verbose_name='ES联系人')), + ('linkman3_duty', models.CharField(max_length=300, verbose_name='ES联系人职务')), + ('linkman3_email', models.EmailField(max_length=300, verbose_name='ES联系人邮箱')), + ('linkman3_tel', models.CharField(max_length=300, verbose_name='ES联系人电话')), + ('linkman3_mobile', models.CharField(max_length=300, verbose_name='ES联系人手机')), + ('linkman3_fax', models.CharField(max_length=300, verbose_name='ES联系人传真')), + ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='enterprise_belong_dept', to='system.Organization', verbose_name='所属部门')), + ('country_code', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='enterprise_country_code', to='system.Dict', verbose_name='生产企业所在国家地区代码')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='enterprise_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('economy_class', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='enterprise_economy_class', to='system.Dict', verbose_name='经济行业')), + ('economy_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='enterprise_economy_type', to='system.Dict', verbose_name='经济类型')), + ('professional', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='enterprise_professional', to='system.Dict', verbose_name='所属专业')), + ('region_code', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='enterprise_region_code1', to='system.Dict', verbose_name='县/区')), + ('type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='enterprise_type', to='system.Dict', verbose_name='机构类型')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='enterprise_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'verbose_name': '组织信息', + 'verbose_name_plural': '组织信息', + }, + ), + ] diff --git a/server/apps/crm/migrations/__init__.py b/server/apps/crm/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/server/apps/crm/models.py b/server/apps/crm/models.py index 7136678..200864a 100644 --- a/server/apps/crm/models.py +++ b/server/apps/crm/models.py @@ -6,13 +6,13 @@ class Enterprise(CommonBModel): code = models.CharField('工厂编号', max_length=300) name = models.CharField('工厂名称',max_length=1000) ename = models.CharField('工厂英文名称',max_length=1000) - type = models.ForeignKey(Dict, on_delete=models.SET_NULL,verbose_name='工厂类型', related_name= 'enterprise_type') + 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('工厂人数',max_length=100) + person_count = models.IntegerField('工厂人数') ceramics_output = models.IntegerField('陶瓷年产量') gassets = models.CharField('固定资产',max_length=100) linkman1_name = models.CharField('第1联系人',max_length=300) @@ -27,7 +27,7 @@ class Enterprise(CommonBModel): linkman2_duty = models.CharField('备用联系人职务',max_length=300) linkman2_mobile = models.CharField('备用联系人手机',max_length=300) linkman2_fax = models.CharField('备用联系人传真',max_length=300) - country_code = models.ForeignKey(Dict, on_delete=models.SET_NULL,verbose_name='生产企业所在国家地区代码', related_name= 'enterprise_country_code') + 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) @@ -37,20 +37,19 @@ class Enterprise(CommonBModel): mailing_address = models.CharField('通信地址',max_length=1000) mailing_eaddress = models.CharField('通信英文地址',max_length=1000) mailing_code = models.CharField('地址邮编',max_length=300) - region = models.CharField('地区',max_length=300) - region_code = models.ForeignKey(Dict, on_delete=models.SET_NULL,verbose_name='地区代码', related_name= 'enterprise_region_code') + 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='所属专业', related_name= 'enterprise_professional') + 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('组织员工数') - economy_class = models.ForeignKey(Dict, on_delete=models.SET_NULL,verbose_name='经济行业', related_name= 'enterprise_economy_class') - economy_type =models.ForeignKey(Dict, on_delete=models.SET_NULL,verbose_name='经济类型', related_name= 'enterprise_economy_type') + 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) diff --git a/server/apps/crm/serializers.py b/server/apps/crm/serializers.py new file mode 100644 index 0000000..36a043c --- /dev/null +++ b/server/apps/crm/serializers.py @@ -0,0 +1,9 @@ +from rest_framework import serializers + +from .models import Enterprise + + +class EnterpriseSerializer(serializers.ModelSerializer): + class Meta: + model = Enterprise + fields = '__all__' \ No newline at end of file diff --git a/server/apps/crm/urls.py b/server/apps/crm/urls.py index 6abad42..69648e6 100644 --- a/server/apps/crm/urls.py +++ b/server/apps/crm/urls.py @@ -1,9 +1,9 @@ from django.urls import path, include -from .views import EntBaseInfoViewSet +from .views import EnterpriseViewSet from rest_framework import routers router = routers.DefaultRouter() -router.register('EntBaseInfo', EntBaseInfoViewSet, basename="EntBaseInfo") +router.register('enterprise', EnterpriseViewSet, basename="enterprise") urlpatterns = [ path('', include(router.urls)) diff --git a/server/apps/crm/views.py b/server/apps/crm/views.py index e294013..88c33c0 100644 --- a/server/apps/crm/views.py +++ b/server/apps/crm/views.py @@ -1,14 +1,13 @@ from django.shortcuts import render from rest_framework.viewsets import ModelViewSet -from .models import TEntBaseInfo -from .serializers import StandardSerializer, ImplementRuleSerializer, UnitTypeSerializer +from .models import Enterprise +from .serializers import EnterpriseSerializer # Create your views here. -class EntBaseInfoViewSet(ModelViewSet): - perms_map = {'get': '*', 'post': 'standard_create', - 'put': 'standard_update', 'delete': 'standard_delete'} - queryset = Standard.objects - serializer_class = StandardSerializer - search_fields = ['name', 'code', 'status', 'implement_date'] - filterset_fields = ['status'] +class EnterpriseViewSet(ModelViewSet): + perms_map = {'get': '*', 'post': 'Enterprise_create', + 'put': 'Enterprise_update', 'delete': 'Enterprise_delete'} + queryset = Enterprise.objects + serializer_class = EnterpriseSerializer + search_fields = ['name', 'query_code'] ordering = ['-create_time'] diff --git a/server/server/urls.py b/server/server/urls.py index e40f99f..40d5a68 100644 --- a/server/server/urls.py +++ b/server/server/urls.py @@ -33,6 +33,7 @@ urlpatterns = [ path('token/black/', LogoutView.as_view(), name='token_black'), path('system/', include('apps.system.urls')), path('certset/', include('apps.certset.urls')), + path('crm/', include('apps.crm.urls')), path('docs/', include_docs_urls(title="接口文档", authentication_classes=[], permission_classes=[])), path('', include(router.urls)),