From d5bc101d0a9704ab1fabef1b36d234f659e92866 Mon Sep 17 00:00:00 2001
From: shilixia <2309368887@qq.com>
Date: Thu, 13 Aug 2020 15:59:59 +0800
Subject: [PATCH] xialashengqing
---
client/src/api/laboratory.js | 73 ++++
client/src/router/index.js | 23 ++
client/src/views/detectorg/detectorg.vue | 269 ++++++++++++++
.../src/views/detectorg/detectorgnotice.vue | 335 ++++++++++++++++++
client/src/views/employee/trainupdate.vue | 2 +-
client/src/views/employee/userselet.vue | 2 +-
.../laboratory/migrations/0001_initial.py | 45 +++
.../migrations/0002_auto_20200811_1024.py | 23 ++
.../migrations/0003_detectorgnotice.py | 41 +++
.../migrations/0004_auto_20200812_1516.py | 18 +
server/apps/laboratory/models.py | 19 +-
server/apps/laboratory/serializers.py | 14 +-
server/apps/laboratory/urls.py | 5 +-
server/apps/laboratory/views.py | 18 +-
server/server/settings.py | 3 +-
server/server/urls.py | 1 +
16 files changed, 877 insertions(+), 14 deletions(-)
create mode 100644 client/src/api/laboratory.js
create mode 100644 client/src/views/detectorg/detectorg.vue
create mode 100644 client/src/views/detectorg/detectorgnotice.vue
create mode 100644 server/apps/laboratory/migrations/0001_initial.py
create mode 100644 server/apps/laboratory/migrations/0002_auto_20200811_1024.py
create mode 100644 server/apps/laboratory/migrations/0003_detectorgnotice.py
create mode 100644 server/apps/laboratory/migrations/0004_auto_20200812_1516.py
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 77fb73f..cd62237 100644
--- a/client/src/router/index.js
+++ b/client/src/router/index.js
@@ -235,6 +235,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 @@
+
+
+
+
+ 新增
+
+
+
+
+
+ {{ scope.row.code }}
+
+
+
+
+ {{ scope.row.name }}
+
+
+
+
+ {{ scope.row.address }}
+
+
+
+
+ {{ scope.row.contactman }}
+
+
+
+
+ {{ scope.row.ontactManTel }}
+
+
+
+
+ {{ scope.row.contactmanmoblie }}
+
+
+
+
+ {{ scope.row.loginname }}
+
+
+
+
+ {{ scope.row.password }}
+
+
+
+
+ {{ scope.row.iszy==true?'是':'否' }}
+
+
+
+
+ {{ scope.row.note }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 确认
+
+
+
+
+
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 @@
+
+
+
+
+ 新增
+
+
+
+
+
+
+ {{ scope.row.name }}
+
+
+
+
+ {{ scope.row.publishdate }}
+
+
+
+
+ {{ scope.row.note }}
+
+
+
+
+ {{ scope.row.ismportant==true?'是':'否' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 点击上传
+
+
+
+
+ 选择实验室
+
+
+
+
+
+
+
+
+ {{ row.code }}
+
+
+
+
+
+ {{ row.name }}
+
+
+
+
+ 提交
+
+
+
+ 取消
+ 确认
+
+
+
+
+
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/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/models.py b/server/apps/laboratory/models.py
index f5d8266..2ea5c56 100644
--- a/server/apps/laboratory/models.py
+++ b/server/apps/laboratory/models.py
@@ -6,8 +6,8 @@ import uuid
# Create your models here.
class DetectOrg(CommonBModel):
- code = models.CharField('实验室编号',unique=True, max_length=100)
- name = models.CharField('实验室名称',null=True,unique=True, blank=True,max_length=200)
+ 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)
@@ -22,4 +22,19 @@ class DetectOrg(CommonBModel):
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
index 665aced..8109a72 100644
--- a/server/apps/laboratory/serializers.py
+++ b/server/apps/laboratory/serializers.py
@@ -1,6 +1,6 @@
from rest_framework import serializers
-from .models import DetectOrg
+from .models import DetectOrg,DetectOrgNotice
from apps.system.serializers import DictSerializer
@@ -8,6 +8,12 @@ class DetectOrgSerializer(serializers.ModelSerializer):
class Meta:
model = DetectOrg
fields = '__all__'
-
-
-
\ No newline at end of file
+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/urls.py b/server/apps/laboratory/urls.py
index 7954688..038a0e2 100644
--- a/server/apps/laboratory/urls.py
+++ b/server/apps/laboratory/urls.py
@@ -1,9 +1,10 @@
from django.urls import path, include
-from .views import DetectOrgViewSet
+from .views import DetectOrgViewSet,DetectOrgNoticeViewSet
from rest_framework import routers
router = routers.DefaultRouter()
-router.register('detectorg', DetectOrgViewSet, basename="enterprise")
+router.register('detectorg', DetectOrgViewSet, basename="detectorg")
+router.register('detectorgnotice', DetectOrgNoticeViewSet, basename="detectorgnotice")
urlpatterns = [
path('', include(router.urls))
diff --git a/server/apps/laboratory/views.py b/server/apps/laboratory/views.py
index 36ef520..aed05a7 100644
--- a/server/apps/laboratory/views.py
+++ b/server/apps/laboratory/views.py
@@ -1,9 +1,9 @@
from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet
-from .models import DetectOrg
+from .models import DetectOrg,DetectOrgNotice
from utils.queryset import get_child_queryset2
-from .serializers import DetectOrgSerializer
+from .serializers import DetectOrgSerializer,DetectOrgNoticeSerializer,DetectOrgNoticListSerializer
from apps.system.permission_data import RbacFilterSet
from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin
# Create your views here.
@@ -13,6 +13,18 @@ class DetectOrgViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelViewSet)
'put': 'DetectOrg_update', 'delete': 'DetectOrg_delete'}
queryset = DetectOrg.objects
serializer_class = DetectOrgSerializer
- search_fields = ['name','query_code', 'code']
+ 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'),