diff --git a/client/src/api/evaluationitem.js b/client/src/api/evaluationitem.js new file mode 100644 index 0000000..4f68365 --- /dev/null +++ b/client/src/api/evaluationitem.js @@ -0,0 +1,69 @@ +import request from '@/utils/request' + + +export function getEvaluationItemList(query) { + return request({ + url: '/certset/evaluationitem/', + method: 'get', + params: query + }) +} +export function getEvaluationItem(id) { + return request({ + url: `/certset/evaluationitem/${id}/`, + method: 'get' + }) +} +export function createEvaluationItem(data) { + return request({ + url: '/certset/evaluationitem/', + method: 'post', + data + }) +} + +export function updateEvaluationItem(id, data) { + return request({ + url: `/certset/evaluationitem/${id}/`, + method: 'put', + data + }) +} + +export function deleteEvaluationItem(id) { + return request({ + url: `/certset/evaluationitem/${id}/`, + method: 'delete' + }) +} + +export function getEvaluationsList(query) { + return request({ + url: '/certset/evaluations/', + method: 'get', + params: query + }) +} + +export function createEvaluations(data) { + return request({ + url: '/certset/evaluations/', + method: 'post', + data + }) +} + +export function updateEvaluations(id, data) { + return request({ + url: `/certset/evaluations/${id}/`, + method: 'put', + data + }) +} + +export function deleteEvaluations(id) { + return request({ + url: `/certset/evaluations/${id}/`, + method: 'delete' + }) +} diff --git a/client/src/api/laboratory.js b/client/src/api/laboratory.js new file mode 100644 index 0000000..f2dafa4 --- /dev/null +++ b/client/src/api/laboratory.js @@ -0,0 +1,73 @@ +import request from '@/utils/request' + +export function getDetectOrgList(query) { + return request({ + url: '/laboratory/detectorg/', + method: 'get', + params: query + }) +} +export function getDetectOrg(id) { + return request({ + url: `/laboratory/detectorg/${id}/`, + method: 'get' + }) +} +export function createDetectOrg(data) { + return request({ + url: '/laboratory/detectorg/', + method: 'post', + data + }) +} + +export function updateDetectOrg(id, data) { + return request({ + url: `/laboratory/detectorg/${id}/`, + method: 'put', + data + }) +} + +export function deleteDetectOrg(id) { + return request({ + url: `/laboratory/detectorg/${id}/`, + method: 'delete' + }) +} + +export function getDetectOrgNoticeList(query) { + return request({ + url: '/laboratory/detectorgnotice/', + method: 'get', + params: query + }) +} +export function getDetectOrgNotice(id) { + return request({ + url: `/laboratory/detectorgnotice/${id}/`, + method: 'get' + }) +} +export function createDetectOrgNotice(data) { + return request({ + url: '/laboratory/detectorgnotice/', + method: 'post', + data + }) +} + +export function updateDetectOrgNotice(id, data) { + return request({ + url: `/laboratory/detectorgnotice/${id}/`, + method: 'put', + data + }) +} + +export function deleteDetectOrgNotice(id) { + return request({ + url: `/laboratory/detectorgnotice/${id}/`, + method: 'delete' + }) +} diff --git a/client/src/router/index.js b/client/src/router/index.js index 83c039b..07a0aaa 100644 --- a/client/src/router/index.js +++ b/client/src/router/index.js @@ -189,8 +189,27 @@ export const asyncRoutes = [ component: () => import('@/views/implementrule/implementruleupdate.vue'), meta: { title: '编辑规则', noCache: true, icon: '', perms: ['implementrule_update']}, hidden: true - } - + }, + { + path: 'evaluationitem', + name: 'evaluationitem', + component: () => import('@/views/evaluation/evaluationitem'), + meta: { title: '评审信息', icon: 'example', perms: ['evaluation_manage'] } + }, + { + path: 'evaluationitem/create', + name: 'evaluationitemcreate', + component: () => import('@/views/evaluation/evaluationitemcreate.vue'), + meta: { title: '新增规则', noCache: true, icon: '', perms: ['evaluationitem_create'] }, + hidden: true + }, + { + path: 'evaluationitem/update', + name: 'evaluationitemupdate', + component: () => import('@/views/evaluation/evaluationitemupdate.vue'), + meta: { title: '新增规则', noCache: true, icon: '', perms: ['evaluationitem_update'] }, + hidden: true + }, ] }, { @@ -229,6 +248,29 @@ export const asyncRoutes = [ }, ] }, + { + path: '/detectorg', + component: Layout, + redirect: '/detectorg/detectorg', + name: 'detectorg', + meta: { title: '实验室管理', icon: 'example' }, + children: [ + + { + path: 'detectorg', + name: 'DetectOrg', + component: () => import('@/views/detectorg/detectorg'), + meta: { title: '实验室信息', icon: 'example', perms: ['detectorg_manage'] } + }, + { + path: 'detectorgnotice', + name: 'DetectOrgNotice', + component: () => import('@/views/detectorg/detectorgnotice'), + meta: { title: '实验室通知公告', icon: 'example', perms: ['detectorg_manage'] } + }, + + ] + }, { path: '/system', component: Layout, diff --git a/client/src/views/detectorg/detectorg.vue b/client/src/views/detectorg/detectorg.vue new file mode 100644 index 0000000..23dcbc8 --- /dev/null +++ b/client/src/views/detectorg/detectorg.vue @@ -0,0 +1,269 @@ + + diff --git a/client/src/views/detectorg/detectorgnotice.vue b/client/src/views/detectorg/detectorgnotice.vue new file mode 100644 index 0000000..757b615 --- /dev/null +++ b/client/src/views/detectorg/detectorgnotice.vue @@ -0,0 +1,335 @@ + + diff --git a/client/src/views/employee/trainupdate.vue b/client/src/views/employee/trainupdate.vue index 1eaea28..07c95c3 100644 --- a/client/src/views/employee/trainupdate.vue +++ b/client/src/views/employee/trainupdate.vue @@ -55,7 +55,7 @@ - + 选择 diff --git a/client/src/views/employee/userselet.vue b/client/src/views/employee/userselet.vue index 68d910d..6883129 100644 --- a/client/src/views/employee/userselet.vue +++ b/client/src/views/employee/userselet.vue @@ -166,7 +166,7 @@ methods: { , handleOrgClick(obj, node, vue) { this.listQuery.page = 1; - this.listQuery.dept = obj.id; + this.listQuery.user__dept = obj.id; this.getStaffList(); }, getStaffList() { diff --git a/client/src/views/enterprise/enterprisecreate.vue b/client/src/views/enterprise/enterprisecreate.vue index 4880999..cbcae10 100644 --- a/client/src/views/enterprise/enterprisecreate.vue +++ b/client/src/views/enterprise/enterprisecreate.vue @@ -464,20 +464,13 @@ this.listLoading = true getEnterpriseList().then(response => { this.tableData = genTree(response.data.results) - console.log(this.tableData) + }) this.listLoading = false }, - handlePreview(file) { - if ("url" in file) { - window.open(file.url); - } else { - window.open(file.response.data.path); - } - }, - + getPfclass() { diff --git a/client/src/views/enterprise/enterpriseupdate.vue b/client/src/views/enterprise/enterpriseupdate.vue index fd131b6..0917565 100644 --- a/client/src/views/enterprise/enterpriseupdate.vue +++ b/client/src/views/enterprise/enterpriseupdate.vue @@ -344,7 +344,7 @@ - + @@ -420,7 +420,7 @@ linkman3_mobile: undefined, linkman3_tel: undefined, linkman3_fax: undefined, - linkman3_email: undefined, + linkman3_email: undefined, parent:undefined }, tableData:[], @@ -467,18 +467,12 @@ this.listLoading = true getEnterpriseList().then(response => { this.tableData = genTree(response.data.results) - console.log(this.tableData) + }) this.listLoading = false }, - handlePreview(file) { - if ("url" in file) { - window.open(file.url); - } else { - window.open(file.response.data.path); - } - }, + getData() { getEnterprise(this.formData.id).then(response => { diff --git a/client/src/views/evaluation/evaluationitem.vue b/client/src/views/evaluation/evaluationitem.vue new file mode 100644 index 0000000..7512fa8 --- /dev/null +++ b/client/src/views/evaluation/evaluationitem.vue @@ -0,0 +1,139 @@ + + diff --git a/client/src/views/evaluation/evaluationitemcreate.vue b/client/src/views/evaluation/evaluationitemcreate.vue new file mode 100644 index 0000000..4282eda --- /dev/null +++ b/client/src/views/evaluation/evaluationitemcreate.vue @@ -0,0 +1,89 @@ + + diff --git a/client/src/views/evaluation/evaluationitemupdate.vue b/client/src/views/evaluation/evaluationitemupdate.vue new file mode 100644 index 0000000..dc0c204 --- /dev/null +++ b/client/src/views/evaluation/evaluationitemupdate.vue @@ -0,0 +1,94 @@ + + diff --git a/client/src/views/evaluation/evaluations.vue b/client/src/views/evaluation/evaluations.vue new file mode 100644 index 0000000..46d9351 --- /dev/null +++ b/client/src/views/evaluation/evaluations.vue @@ -0,0 +1,193 @@ + + diff --git a/server/apps/certset/migrations/0015_auto_20200805_0916.py b/server/apps/certset/migrations/0015_auto_20200805_0916.py new file mode 100644 index 0000000..b6e409d --- /dev/null +++ b/server/apps/certset/migrations/0015_auto_20200805_0916.py @@ -0,0 +1,23 @@ +# Generated by Django 3.0.5 on 2020-08-05 01:16 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('certset', '0014_auto_20200804_1558'), + ] + + operations = [ + migrations.RemoveField( + model_name='evaluationitem', + name='ccc_list', + ), + migrations.AddField( + model_name='evaluations', + name='evItem', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='Evaluations_evItem', to='certset.EvaluationItem', verbose_name='评审标准'), + ), + ] diff --git a/server/apps/certset/migrations/0016_auto_20200805_1435.py b/server/apps/certset/migrations/0016_auto_20200805_1435.py new file mode 100644 index 0000000..a080797 --- /dev/null +++ b/server/apps/certset/migrations/0016_auto_20200805_1435.py @@ -0,0 +1,23 @@ +# Generated by Django 3.0.5 on 2020-08-05 06:35 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('certset', '0015_auto_20200805_0916'), + ] + + operations = [ + migrations.AddField( + model_name='evaluationitem', + name='name', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='评审表名称'), + ), + migrations.AlterField( + model_name='evaluationitem', + name='cert_field', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='所属认证领域分类'), + ), + ] diff --git a/server/apps/certset/models.py b/server/apps/certset/models.py index 6727f84..70b68ce 100644 --- a/server/apps/certset/models.py +++ b/server/apps/certset/models.py @@ -61,8 +61,8 @@ class UnitType(CommonAModel): return self.name class EvaluationItem(CommonAModel): - cert_field = models.CharField('所属认证领域分类',max_length=1000,blank=True) - ccc_list = models.ManyToManyField(Dict,blank=True, verbose_name='CCC产品认证分类', related_name= 'EvaluationItem_ccc_list') + name = models.CharField('评审表名称',null=True, blank=True, max_length=1000) + cert_field = models.CharField('所属认证领域分类',max_length=1000,null=True, blank=True,) class Meta: verbose_name = '评审表项目' verbose_name_plural = verbose_name @@ -71,6 +71,7 @@ class EvaluationItem(CommonAModel): return self.cert_field class Evaluations(CommonAModel): content = models.TextField('内容', blank=True) + evItem = models.ForeignKey(EvaluationItem, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='评审标准', related_name='Evaluations_evItem') class Meta: verbose_name = '评审列' verbose_name_plural = verbose_name diff --git a/server/apps/certset/serializers.py b/server/apps/certset/serializers.py index 265e277..7f8d725 100644 --- a/server/apps/certset/serializers.py +++ b/server/apps/certset/serializers.py @@ -1,6 +1,6 @@ from rest_framework import serializers -from .models import Standard, UnitType, ImplementRule +from .models import Standard, UnitType, ImplementRule,EvaluationItem,Evaluations from apps.system.serializers import DictSerializer @@ -44,4 +44,12 @@ class UnitTypeSerializer(serializers.ModelSerializer): def setup_eager_loading(queryset): """ Perform necessary eager loading of data. """ queryset = queryset.select_related('standard','implementrule') - return queryset \ No newline at end of file + return queryset +class EvaluationItemSerializer(serializers.ModelSerializer): + class Meta: + model = EvaluationItem + fields = '__all__' +class EvaluationsSerializer(serializers.ModelSerializer): + class Meta: + model = Evaluations + fields = '__all__' \ No newline at end of file diff --git a/server/apps/certset/urls.py b/server/apps/certset/urls.py index cab2934..4777387 100644 --- a/server/apps/certset/urls.py +++ b/server/apps/certset/urls.py @@ -1,11 +1,13 @@ from django.urls import path, include -from .views import StandardViewSet, UnitTypedViewSet, ImplementRuleViewSet +from .views import StandardViewSet, UnitTypedViewSet, ImplementRuleViewSet,EvaluationItemViewSet,EvaluationsViewSet from rest_framework import routers router = routers.DefaultRouter() router.register('standard', StandardViewSet, basename="standard") router.register('unittype', UnitTypedViewSet, basename="unittype") router.register('implementrule', ImplementRuleViewSet, basename="implementrule") +router.register('evaluationitem', EvaluationItemViewSet, basename="evaluationitem") +router.register('evaluations', EvaluationsViewSet, basename="evaluations") urlpatterns = [ path('', include(router.urls)) diff --git a/server/apps/certset/views.py b/server/apps/certset/views.py index c2b00e0..81f99f4 100644 --- a/server/apps/certset/views.py +++ b/server/apps/certset/views.py @@ -1,7 +1,7 @@ from django.shortcuts import render from rest_framework.viewsets import ModelViewSet -from .models import Standard, UnitType, ImplementRule -from .serializers import StandardSerializer, ImplementRuleSerializer, UnitTypeSerializer, ImplementRuleListSerializer +from .models import Standard, UnitType, ImplementRule,EvaluationItem,Evaluations +from .serializers import StandardSerializer, ImplementRuleSerializer, UnitTypeSerializer, ImplementRuleListSerializer,EvaluationItemSerializer,EvaluationsSerializer from apps.system.permission_data import RbacFilterSet from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin # Create your views here. @@ -45,4 +45,21 @@ class UnitTypedViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelViewSet) """ if ((not self.request.query_params.get('page', None)) and (self.request.query_params.get('implementrule', None))) or (self.paginator is None): return None - return self.paginator.paginate_queryset(queryset, self.request, view=self) \ No newline at end of file + return self.paginator.paginate_queryset(queryset, self.request, view=self) +class EvaluationItemViewSet(CreateUpdateCustomMixin, ModelViewSet): + perms_map = {'get': '*', 'post': 'evaluationitem_create', + 'put': 'evaluationitem_update', 'delete': 'evaluationitem_delete'} + queryset = EvaluationItem.objects.all() + serializer_class = EvaluationItemSerializer + search_fields = ['cert_field'] + ordering = ['-create_time'] +class EvaluationsViewSet(CreateUpdateCustomMixin, ModelViewSet): + """ + 培训记录-增删改查 + """ + perms_map = {'get': '*', 'post': 'evaluations_create', + 'put': 'evaluations_update', 'delete': 'evaluations_delete'} + queryset = Evaluations.objects.all() + serializer_class = EvaluationsSerializer + search_fields = ['content'] + ordering = ['-create_time'] \ No newline at end of file diff --git a/server/apps/laboratory/__init__.py b/server/apps/laboratory/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/server/apps/laboratory/admin.py b/server/apps/laboratory/admin.py new file mode 100644 index 0000000..c6fe108 --- /dev/null +++ b/server/apps/laboratory/admin.py @@ -0,0 +1,2 @@ +from django.contrib import admin + diff --git a/server/apps/laboratory/apps.py b/server/apps/laboratory/apps.py new file mode 100644 index 0000000..6fad704 --- /dev/null +++ b/server/apps/laboratory/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class LaboratoryConfig(AppConfig): + name = 'laboratory' + verbose_name = '实验室管理' diff --git a/server/apps/laboratory/migrations/0001_initial.py b/server/apps/laboratory/migrations/0001_initial.py new file mode 100644 index 0000000..da4c9e2 --- /dev/null +++ b/server/apps/laboratory/migrations/0001_initial.py @@ -0,0 +1,45 @@ +# Generated by Django 3.0.5 on 2020-08-10 06:57 + +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 = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('system', '0028_auto_20200807_1018'), + ] + + operations = [ + migrations.CreateModel( + name='DetectOrg', + 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=100, unique=True, verbose_name='实验室编号')), + ('name', models.CharField(blank=True, max_length=200, null=True, unique=True, verbose_name='实验室名称')), + ('address', models.CharField(blank=True, max_length=500, null=True, verbose_name='通讯地址')), + ('contactman', models.CharField(blank=True, max_length=50, null=True, verbose_name='联系人')), + ('contactmanmoblie', models.CharField(blank=True, max_length=50, null=True, verbose_name='联系人手机')), + ('ontactManTel', models.CharField(blank=True, max_length=50, null=True, verbose_name='联系人电话')), + ('loginname', models.CharField(blank=True, max_length=50, null=True, verbose_name='登录名')), + ('password', models.CharField(blank=True, max_length=50, null=True, verbose_name='登录密码')), + ('note', models.CharField(blank=True, max_length=200, null=True, verbose_name='备注')), + ('iszy', models.BooleanField(default=True, verbose_name='是否自有')), + ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='detectorg_belong_dept', to='system.Organization', verbose_name='所属部门')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='detectorg_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='detectorg_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'verbose_name': '实验室信息', + 'verbose_name_plural': '实验室信息', + }, + ), + ] diff --git a/server/apps/laboratory/migrations/0002_auto_20200811_1024.py b/server/apps/laboratory/migrations/0002_auto_20200811_1024.py new file mode 100644 index 0000000..261ae34 --- /dev/null +++ b/server/apps/laboratory/migrations/0002_auto_20200811_1024.py @@ -0,0 +1,23 @@ +# Generated by Django 3.0.5 on 2020-08-11 02:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('laboratory', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='detectorg', + name='code', + field=models.CharField(max_length=100, verbose_name='实验室编号'), + ), + migrations.AlterField( + model_name='detectorg', + name='name', + field=models.CharField(blank=True, max_length=200, null=True, verbose_name='实验室名称'), + ), + ] diff --git a/server/apps/laboratory/migrations/0003_detectorgnotice.py b/server/apps/laboratory/migrations/0003_detectorgnotice.py new file mode 100644 index 0000000..41c9046 --- /dev/null +++ b/server/apps/laboratory/migrations/0003_detectorgnotice.py @@ -0,0 +1,41 @@ +# Generated by Django 3.0.5 on 2020-08-12 00:59 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0028_auto_20200807_1018'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('laboratory', '0002_auto_20200811_1024'), + ] + + operations = [ + migrations.CreateModel( + name='DetectOrgNotice', + 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='删除标记')), + ('name', models.CharField(blank=True, max_length=500, null=True, verbose_name='公告标题')), + ('publishdate', models.DateField(verbose_name='发布时间')), + ('ismportant', models.BooleanField(default=True, verbose_name='是否重要公告')), + ('note', models.CharField(blank=True, max_length=6000, null=True, verbose_name='公告内容')), + ('isalluser', models.BooleanField(default=True, verbose_name='是否通知全员')), + ('path', models.CharField(blank=True, max_length=1000, null=True, verbose_name='文件地址')), + ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='detectorgnotice_belong_dept', to='system.Organization', verbose_name='所属部门')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='detectorgnotice_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('dettonotice', models.ManyToManyField(blank=True, related_name='detectorgnotice_dettonotice', to='laboratory.DetectOrg', verbose_name='选择的实验室')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='detectorgnotice_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'verbose_name': '实验室通知公告', + 'verbose_name_plural': '实验室通知公告', + }, + ), + ] diff --git a/server/apps/laboratory/migrations/0004_auto_20200812_1516.py b/server/apps/laboratory/migrations/0004_auto_20200812_1516.py new file mode 100644 index 0000000..4b13de4 --- /dev/null +++ b/server/apps/laboratory/migrations/0004_auto_20200812_1516.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.5 on 2020-08-12 07:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('laboratory', '0003_detectorgnotice'), + ] + + operations = [ + migrations.AlterField( + model_name='detectorgnotice', + name='publishdate', + field=models.DateTimeField(verbose_name='发布时间'), + ), + ] diff --git a/server/apps/laboratory/migrations/__init__.py b/server/apps/laboratory/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/server/apps/laboratory/models.py b/server/apps/laboratory/models.py new file mode 100644 index 0000000..2ea5c56 --- /dev/null +++ b/server/apps/laboratory/models.py @@ -0,0 +1,40 @@ +from django.db import models +from apps.system.models import CommonBModel,CommonAModel,Dict +from simple_history.models import HistoricalRecords +from django.contrib.postgres.fields import ArrayField +import uuid +# Create your models here. +class DetectOrg(CommonBModel): + + code = models.CharField('实验室编号', max_length=100) + name = models.CharField('实验室名称',null=True, blank=True,max_length=200) + address = models.CharField('通讯地址',null=True, blank=True,max_length=500) + contactman = models.CharField('联系人',null=True, blank=True,max_length=50) + contactmanmoblie = models.CharField('联系人手机',null=True, blank=True,max_length=50) + ontactManTel = models.CharField('联系人电话',null=True, blank=True,max_length=50) + loginname = models.CharField('登录名',null=True, blank=True,max_length=50) + password = models.CharField('登录密码',null=True, blank=True,max_length=50) + note = models.CharField('备注',null=True, blank=True,max_length=200) + iszy = models.BooleanField('是否自有', default=True) + class Meta: + verbose_name = '实验室信息' + verbose_name_plural = verbose_name + + def __str__(self): + return self.name +class DetectOrgNotice(CommonBModel): + + name = models.CharField('公告标题',null=True, blank=True,max_length=500) + publishdate = models.DateTimeField('发布时间') + ismportant = models.BooleanField('是否重要公告', default=True) + note = models.CharField('公告内容',null=True, blank=True,max_length=6000) + isalluser = models.BooleanField('是否通知全员', default=True) + path = models.CharField('文件地址', max_length=1000, null=True, blank=True) + dettonotice = models.ManyToManyField(DetectOrg, blank=True, verbose_name='选择的实验室', related_name= 'detectorgnotice_dettonotice') + class Meta: + verbose_name = '实验室通知公告' + verbose_name_plural = verbose_name + + def __str__(self): + return self.name + diff --git a/server/apps/laboratory/serializers.py b/server/apps/laboratory/serializers.py new file mode 100644 index 0000000..8109a72 --- /dev/null +++ b/server/apps/laboratory/serializers.py @@ -0,0 +1,19 @@ +from rest_framework import serializers + +from .models import DetectOrg,DetectOrgNotice +from apps.system.serializers import DictSerializer + + +class DetectOrgSerializer(serializers.ModelSerializer): + class Meta: + model = DetectOrg + fields = '__all__' +class DetectOrgNoticeSerializer(serializers.ModelSerializer): + class Meta: + model = DetectOrgNotice + fields = '__all__' +class DetectOrgNoticListSerializer(serializers.ModelSerializer): + dettonotice = DetectOrgSerializer(many=True) + class Meta: + model = DetectOrgNotice + fields = ['id','name','publishdate','ismportant','note','dettonotice','path'] diff --git a/server/apps/laboratory/tests.py b/server/apps/laboratory/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/server/apps/laboratory/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/server/apps/laboratory/urls.py b/server/apps/laboratory/urls.py new file mode 100644 index 0000000..038a0e2 --- /dev/null +++ b/server/apps/laboratory/urls.py @@ -0,0 +1,11 @@ +from django.urls import path, include +from .views import DetectOrgViewSet,DetectOrgNoticeViewSet +from rest_framework import routers + +router = routers.DefaultRouter() +router.register('detectorg', DetectOrgViewSet, basename="detectorg") +router.register('detectorgnotice', DetectOrgNoticeViewSet, basename="detectorgnotice") + +urlpatterns = [ + path('', include(router.urls)) +] \ No newline at end of file diff --git a/server/apps/laboratory/views.py b/server/apps/laboratory/views.py new file mode 100644 index 0000000..aed05a7 --- /dev/null +++ b/server/apps/laboratory/views.py @@ -0,0 +1,30 @@ +from django.shortcuts import render + +from rest_framework.viewsets import ModelViewSet +from .models import DetectOrg,DetectOrgNotice +from utils.queryset import get_child_queryset2 +from .serializers import DetectOrgSerializer,DetectOrgNoticeSerializer,DetectOrgNoticListSerializer +from apps.system.permission_data import RbacFilterSet +from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin +# Create your views here. + +class DetectOrgViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelViewSet): + perms_map = {'get': '*', 'post': 'DetectOrg_create', + 'put': 'DetectOrg_update', 'delete': 'DetectOrg_delete'} + queryset = DetectOrg.objects + serializer_class = DetectOrgSerializer + search_fields = ['name', 'code'] + ordering = ['-create_time'] +class DetectOrgNoticeViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelViewSet): + perms_map = {'get': '*', 'post': 'DetectOrgNotice_create', + 'put': 'DetectOrgNotice_update', 'delete': 'DetectOrgNotice_delete'} + queryset = DetectOrgNotice.objects + serializer_class = DetectOrgNoticeSerializer + search_fields = ['name'] + ordering = ['-create_time'] + def get_serializer_class(self): + # 根据请求类型动态变更serializer + if self.action == 'list': + return DetectOrgNoticListSerializer + return DetectOrgNoticeSerializer + diff --git a/server/server/settings.py b/server/server/settings.py index 29989cc..b7c853e 100644 --- a/server/server/settings.py +++ b/server/server/settings.py @@ -48,7 +48,8 @@ INSTALLED_APPS = [ 'apps.crm', 'apps.certset', 'apps.employee', - 'apps.project' + 'apps.project', + 'apps.laboratory' ] MIDDLEWARE = [ diff --git a/server/server/urls.py b/server/server/urls.py index 0f91123..35ecda9 100644 --- a/server/server/urls.py +++ b/server/server/urls.py @@ -36,6 +36,7 @@ urlpatterns = [ path('crm/', include('apps.crm.urls')), path('employee/', include('apps.employee.urls')), path('project/', include('apps.project.urls')), + path('laboratory/', include('apps.laboratory.urls')), path('docs/', include_docs_urls(title="接口文档", authentication_classes=[], permission_classes=[])), path('signature/', GenSignature.as_view(), name='gen_signature'),