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 @@
+
+
+
+
+
+
+
+ 搜索
+ 刷新重置
+
+
+ 新增
+
+
+
+
+
+
+
+
+ {{ scope.row.query_code }}
+
+
+
+
+ {{ scope.row.code }}
+
+
+
+
+ {{ scope.row.name }}
+
+
+
+
+ {{ scope.row.ename }}
+
+
+
+
+ {{ scope.row.legal }}
+
+
+
+
+ {{ scope.row.type }}
+
+
+
+
+ {{ scope.row.region_code }}
+
+
+
+
+ {{ scope.row.credit_code }}
+
+
+
+
+ {{ scope.row.gassets }}
+
+
+
+
+ {{ scope.row.person_count }}
+
+
+
+
+ {{ scope.row.build_time }}
+
+
+
+
+ {{ scope.row.name }}
+
+
+
+
+ {{ scope.row.linkman1_tel }}
+
+
+
+
+ {{ scope.row.linkman1_mobile }}
+
+
+
+
+ {{ scope.row.economy_class }}
+
+
+
+
+ {{ scope.row.business_type }}
+
+
+
+
+ {{ scope.row.linkman1_duty }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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)),