This commit is contained in:
shilixia 2020-06-24 14:24:03 +08:00
parent 35e3f4c77e
commit 074fb1e561
12 changed files with 381 additions and 19 deletions

View File

@ -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'
})
}

View File

@ -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'] }
}
]
},
{

View File

@ -0,0 +1,216 @@
<template>
<div class="app-container">
<div>
<el-select v-model="listQuery.type"
placeholder="标准状态"
clearable
style="width: 200px"
class="filter-item"
@change="handleFilter">
<el-option v-for="item in statusOptions"
:key="item.key"
:label="item.display_name"
:value="item.key" />
</el-select>
<el-input v-model="listQuery.search"
placeholder="编号/名称"
style="width: 300px;"
class="filter-item"
@keyup.enter.native="handleFilter" />
<el-button class="filter-item"
type="primary"
icon="el-icon-search"
@click="handleFilter">搜索</el-button>
<el-button class="filter-item"
style="margin-left: 10px;"
type="primary"
icon="el-icon-refresh-left"
@click="resetFilter">刷新重置</el-button>
</div>
<div style="margin-top:6px">
<el-button type="primary" icon="el-icon-plus" @click="handleCreate">新增</el-button>
</div>
<el-table v-loading="listLoading"
:data="enterpriseList.results"
style="width: 100%;margin-top:10px;"
border
fit
stripe
highlight-current-row
max-height="600">
<el-table-column type="index" width="50" />
<el-table-column label="组织查询码">
<template slot-scope="scope">
{{ scope.row.query_code }}
</template>
</el-table-column>
<el-table-column label="工厂编号">
<template slot-scope="scope">
{{ scope.row.code }}
</template>
</el-table-column>
<el-table-column label="组织名称">
<template slot-scope="scope">
{{ scope.row.name }}
</template>
</el-table-column>
<el-table-column label="英文名">
<template slot-scope="scope">
{{ scope.row.ename }}
</template>
</el-table-column>
<el-table-column label="法人">
<template slot-scope="scope">
{{ scope.row.legal }}
</template>
</el-table-column>
<el-table-column label="机构类型">
<template slot-scope="scope">
{{ scope.row.type }}
</template>
</el-table-column>
<el-table-column label="县/区">
<template slot-scope="scope">
{{ scope.row.region_code }}
</template>
</el-table-column>
<el-table-column label="组织机构代码">
<template slot-scope="scope">
{{ scope.row.credit_code }}
</template>
</el-table-column>
<el-table-column label="注册资本">
<template slot-scope="scope">
{{ scope.row.gassets }}
</template>
</el-table-column>
<el-table-column label="组织员工数">
<template slot-scope="scope">
{{ scope.row.person_count }}
</template>
</el-table-column>
<el-table-column label="建厂时间">
<template slot-scope="scope">
{{ scope.row.build_time }}
</template>
</el-table-column>
<el-table-column label="常用联系人">
<template slot-scope="scope">
{{ scope.row.name }}
</template>
</el-table-column>
<el-table-column label="常用联系人电话">
<template slot-scope="scope">
{{ scope.row.linkman1_tel }}
</template>
</el-table-column>
<el-table-column label="常用联系人手机">
<template slot-scope="scope">
{{ scope.row.linkman1_mobile }}
</template>
</el-table-column>
<el-table-column label="经济行业">
<template slot-scope="scope">
{{ scope.row.economy_class }}
</template>
</el-table-column>
<el-table-column label="经营范围">
<template slot-scope="scope">
{{ scope.row.business_type }}
</template>
</el-table-column>
<el-table-column label="常用联系人职务">
<template slot-scope="scope">
{{ scope.row.linkman1_duty }}
</template>
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button type="primary"
size="small"
icon="el-icon-edit"
:disabled="!checkPermission(['standard_update'])"
@click="handleUpdate(scope)" />
<el-button type="danger"
size="small"
icon="el-icon-delete"
:disabled="!checkPermission(['standard_delete'])"
@click="handleDelete(scope)" />
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
import { getEnterpriseList, createEnterprise, updateEnterprise, deleteEnterprise } from "@/api/enterprise"
import { upUrl, upHeaders} from "@/api/file"
import Pagination from "@/components/Pagination"
import checkPermission from '@/utils/permission'
const defaultEnterprise = {
id:null,
code:null,
name:null,
publish_date:null,
implement_date:null,
status:'现行'
}
export default {
components: { Pagination },
data() {
return {
upHeaders: upHeaders(),
upUrl: upUrl(),
enterpriseList: {count:0},
enterprise:Object.assign({}, defaultEnterprise),
listLoading: true,
listQuery: {
page: 1,
page_size: 20
},
statusOptions: [
{ key: "现行", display_name: "现行" },
{ key: "即将实施", display_name: "即将实施" },
{ key: "作废", display_name: "作废" },
{ key: "废止", display_name: "废止" }
],
fileList:[]
};
},
created() {
this.getList();
},
methods: {
checkPermission,
getList() {
this.listLoading = true;
getEnterpriseList(this.listQuery).then(response => {
if (response.data) {
this.enterpriseList = response.data
}
this.listLoading = false;
});
},
resetFilter() {
this.listQuery = {
page: 1,
page_size: 20
};
this.getList();
},
handleFilter() {
this.listQuery.page = 1;
this.getList();
},
}
};
</script>

BIN
docs/~$系统模块.docx Normal file

Binary file not shown.

View File

@ -1,3 +1,5 @@
from django.contrib import admin
from .models import Enterprise
# Register your models here.
admin.site.register(Enterprise)

View File

@ -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': '组织信息',
},
),
]

View File

View File

@ -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)

View File

@ -0,0 +1,9 @@
from rest_framework import serializers
from .models import Enterprise
class EnterpriseSerializer(serializers.ModelSerializer):
class Meta:
model = Enterprise
fields = '__all__'

View File

@ -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))

View File

@ -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']

View File

@ -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)),