diff --git a/client/.env.production b/client/.env.production
index 48f348a..a6dc4c1 100644
--- a/client/.env.production
+++ b/client/.env.production
@@ -2,5 +2,5 @@
ENV = 'production'
# base api
-VUE_APP_BASE_API = 'http://116.63.176.211:8035'
+VUE_APP_BASE_API = 'http://116.63.176.211:8036/api'
diff --git a/client/src/api/qualification.js b/client/src/api/qualification.js
new file mode 100644
index 0000000..52df95b
--- /dev/null
+++ b/client/src/api/qualification.js
@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+export function getQualificationList(query) {
+ return request({
+ url: '/ability/qualification/',
+ method: 'get',
+ params: query
+ })
+}
+export function getQualificationGroup(query) {
+ return request({
+ url: '/ability/qualification/group/',
+ method: 'get',
+ params: query
+ })
+}
+
+export function getCNASList(query) {
+ return request({
+ url: '/ability/cnas/',
+ method: 'get',
+ params: query
+ })
+}
+
+export function createQualification(data) {
+ return request({
+ url: '/ability/qualification/',
+ method: 'post',
+ data
+ })
+}
+export function updateQualification(id, data) {
+ return request({
+ url: `/ability/qualification/${id}/`,
+ method: 'put',
+ data
+ })
+}
+export function deleteQualification(id) {
+ return request({
+ url: `/ability/qualification/${id}/`,
+ method: 'delete'
+ })
+}
+
+export function importQualification(data) {
+ return request({
+ url: `/ability/qualification/import/`,
+ method: 'post',
+ data
+ })
+}
\ No newline at end of file
diff --git a/client/src/router/index.js b/client/src/router/index.js
index fb66366..687313c 100644
--- a/client/src/router/index.js
+++ b/client/src/router/index.js
@@ -54,11 +54,22 @@ export const constantRoutes = [
}]
},
{
- path: '/',
+ path: '/qualification',
+ component: Layout,
+ redirect: '/qualification',
+ children: [{
+ path: '',
+ name: 'Qualification',
+ component: () => import('@/views/ability/qualification'),
+ meta: { title: '资质检索', icon: 'table' }
+ }]
+ },
+ {
+ path: '/cma2',
component: Layout,
redirect: '/cma2',
children: [{
- path: 'cma2',
+ path: '',
name: 'CMA2',
component: () => import('@/views/ability/cma2'),
meta: { title: '检测能力(分子公司)', icon: 'table' }
diff --git a/client/src/views/ability/cma.vue b/client/src/views/ability/cma.vue
index 65e251b..1c47532 100644
--- a/client/src/views/ability/cma.vue
+++ b/client/src/views/ability/cma.vue
@@ -209,6 +209,13 @@
+
diff --git a/client/src/views/login/index.vue b/client/src/views/login/index.vue
index 5be3575..b680fab 100644
--- a/client/src/views/login/index.vue
+++ b/client/src/views/login/index.vue
@@ -3,7 +3,7 @@
-
系统登陆
+ CTC能力检索
diff --git a/server/apps/ability/migrations/0009_qualification.py b/server/apps/ability/migrations/0009_qualification.py
new file mode 100644
index 0000000..b9e685a
--- /dev/null
+++ b/server/apps/ability/migrations/0009_qualification.py
@@ -0,0 +1,31 @@
+# Generated by Django 3.0.7 on 2020-08-17 06:14
+
+from django.db import migrations, models
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ability', '0008_auto_20200705_1222'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Qualification',
+ 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='删除标记')),
+ ('sszx', models.TextField(blank=True, null=True, verbose_name='所属中心')),
+ ('cma', models.TextField(blank=True, null=True, verbose_name='cma资质')),
+ ('cnas', models.TextField(blank=True, null=True, verbose_name='cnas资质')),
+ ('other', models.TextField(blank=True, null=True, verbose_name='检验检测相关其它资质')),
+ ('service', models.TextField(blank=True, null=True, verbose_name='主要检验检测服务')),
+ ],
+ options={
+ 'abstract': False,
+ },
+ ),
+ ]
diff --git a/server/apps/ability/migrations/0010_cma_glzz.py b/server/apps/ability/migrations/0010_cma_glzz.py
new file mode 100644
index 0000000..ebc947f
--- /dev/null
+++ b/server/apps/ability/migrations/0010_cma_glzz.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.0.7 on 2020-08-17 07:54
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ability', '0009_qualification'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='cma',
+ name='glzz',
+ field=models.TextField(blank=True, null=True, verbose_name='关联资质'),
+ ),
+ ]
diff --git a/server/apps/ability/models.py b/server/apps/ability/models.py
index 8ca19a1..2b258f0 100644
--- a/server/apps/ability/models.py
+++ b/server/apps/ability/models.py
@@ -23,6 +23,7 @@ class CMA(BaseModel):
sszx = models.TextField('所属中心',null=True,blank=True)
type = models.CharField('所属类型', max_length=50,
choices=type_choices, default='center')
+ glzz = models.TextField('关联资质', null=True, blank=True)
class CNAS(BaseModel):
"""
@@ -33,4 +34,11 @@ class CNAS(BaseModel):
bzmc = models.CharField('标准名称', max_length=400,null=True,blank=True)
bzbh = models.CharField('标准编号', max_length=400,null=True,blank=True)
bztk = models.CharField('标准条款', max_length=400,null=True,blank=True)
- sszx = models.TextField('所属中心',null=True,blank=True)
\ No newline at end of file
+ sszx = models.TextField('所属中心',null=True,blank=True)
+
+class Qualification(BaseModel):
+ sszx = models.TextField('所属中心', null=True, blank=True)
+ cma = models.TextField('cma资质', null=True, blank=True)
+ cnas = models.TextField('cnas资质', null=True, blank=True)
+ other = models.TextField('检验检测相关其它资质', null=True, blank=True)
+ service = models.TextField('主要检验检测服务', null=True, blank=True)
\ No newline at end of file
diff --git a/server/apps/ability/serializers.py b/server/apps/ability/serializers.py
index 3efb87f..f3721ce 100644
--- a/server/apps/ability/serializers.py
+++ b/server/apps/ability/serializers.py
@@ -1,5 +1,5 @@
from rest_framework import serializers
-from .models import CMA, CNAS
+from .models import *
class CMASerializer(serializers.ModelSerializer):
"""
@@ -15,4 +15,12 @@ class CNASSerializer(serializers.ModelSerializer):
"""
class Meta:
model = CNAS
+ fields = '__all__'
+
+class QualificationSerializer(serializers.ModelSerializer):
+ """
+ 资质能力序列化
+ """
+ class Meta:
+ model = Qualification
fields = '__all__'
\ No newline at end of file
diff --git a/server/apps/ability/urls.py b/server/apps/ability/urls.py
index b3ad105..2fbd263 100644
--- a/server/apps/ability/urls.py
+++ b/server/apps/ability/urls.py
@@ -1,10 +1,11 @@
from django.urls import path, include
from rest_framework import routers
-from .views import CMAViewSet, CNASViewSet
+from .views import CMAViewSet, CNASViewSet, QualificationViewSet
router = routers.DefaultRouter()
router.register('cma', CMAViewSet, basename="cma")
router.register('cnas', CNASViewSet, basename="cnas")
+router.register('qualification', QualificationViewSet, basename="qualification")
urlpatterns = [
path('', include(router.urls))
]
\ No newline at end of file
diff --git a/server/apps/ability/views.py b/server/apps/ability/views.py
index 5d4b806..9fd66d4 100644
--- a/server/apps/ability/views.py
+++ b/server/apps/ability/views.py
@@ -1,7 +1,7 @@
from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet
-from .models import CMA, CNAS
-from .serializers import CMASerializer, CNASSerializer
+from .models import *
+from .serializers import *
from rest_framework.decorators import action
from django.conf import settings
from rest_framework import status
@@ -19,8 +19,8 @@ class CMAViewSet(ModelViewSet):
'put': 'cma_update', 'delete': 'cma_delete'}
queryset = CMA.objects.all()
serializer_class = CMASerializer
- search_fields = ['bzbh', 'bzmc', 'sszx', 'xmmc']
- filterset_fields = ['sszx', 'type']
+ search_fields = ['bzbh', 'bzmc', 'sszx', 'xmmc', 'glzz']
+ filterset_fields = ['sszx', 'type', 'glzz']
ordering_fields = ['xmxh']
ordering = 'sszx'
@@ -35,7 +35,8 @@ class CMAViewSet(ModelViewSet):
group_by = request.query_params.get('group_by')
group_by_data = list(queryset.values(group_by).annotate(count=Count(group_by)).order_by(group_by))
for i in group_by_data:
- ret.append({'text':i[group_by]+'('+str(i['count'])+')','value':i[group_by]})
+ if i[group_by] and i['count']:
+ ret.append({'text':i[group_by]+'('+ str(i['count']) +')','value':i[group_by]})
return Response(ret)
@action(methods=['post'], detail=False, url_path='import', url_name='cma_import', perms_map = {'post':'cma_import'})
@@ -108,6 +109,33 @@ class CMAViewSet(ModelViewSet):
import_cma2(f.encode('cp437').decode('gbk'), os.path.join(root,f))
return Response(status = status.HTTP_200_OK)
+class QualificationViewSet(ModelViewSet):
+ """
+ 资质能力:增删改查
+ """
+ perms_map = {'get': '*', 'post': 'qualificaiton_create',
+ 'put': 'qualification_update', 'delete': 'qualification_delete'}
+ queryset = Qualification.objects.all()
+ serializer_class = QualificationSerializer
+ search_fields = ['cma', 'cnas', 'sszx', 'other', 'service']
+ # ordering_fields = ['sszx']
+ ordering = 'sszx'
+
+ @action(methods=['get'], detail=False,url_name='qualification_group_by', perms_map = {'*':'*'})
+ def group(self, request, pk=None):
+ """
+ 聚合查询列
+ """
+ queryset = self.filter_queryset(self.get_queryset())
+ ret = []
+ if request.query_params.get('group_by', None):
+ group_by = request.query_params.get('group_by')
+ group_by_data = list(queryset.values(group_by).annotate(count=Count(group_by)).order_by(group_by))
+ for i in group_by_data:
+ if i[group_by] and i['count']:
+ ret.append({'text':i[group_by]+'('+ str(i['count']) +')','value':i[group_by]})
+ return Response(ret)
+
class CNASViewSet(ModelViewSet):
"""
CNAS检测能力:增删改查
@@ -224,6 +252,7 @@ def import_cma2(filename, path):
CMA.objects.filter(sszx=sszx, type='sub').delete()
i = 3
max_row = sheet.max_row
+ print(max_row)
while i