jiancharenwu

This commit is contained in:
shilixia 2020-09-29 16:49:12 +08:00
parent 89399f537b
commit eaf6d0a8bc
14 changed files with 408 additions and 228 deletions

View File

@ -71,3 +71,40 @@ export function deleteTestOrgNotice(id) {
method: 'delete'
})
}
export function getDetectionTaskList(query) {
return request({
url: '/laboratory/detectiontask/',
method: 'get',
params: query
})
}
export function getDetectionTask(id) {
return request({
url: `/laboratory/detectiontask/${id}/`,
method: 'get'
})
}
export function createDetectionTask(data) {
return request({
url: '/laboratory/detectiontask/',
method: 'post',
data
})
}
export function updateDetectionTask(id, data) {
return request({
url: `/laboratory/detectiontask/${id}/`,
method: 'put',
data
})
}
export function deleteDetectionTask(id) {
return request({
url: `/laboratory/detectiontask/${id}/`,
method: 'delete'
})
}

View File

@ -85,7 +85,7 @@ import access from "@/views/accessment/access"
import Detectiontask from "@/views/certapp/detectiontask"
export default {
components: { CCCform, Certunit, QMSform, Conclusion, Member, access, CHARGE, REVIEW},
components: { CCCform,Detectiontask, Certunit, QMSform, Conclusion, Member, access, CHARGE, REVIEW},
props: [],
data() {

View File

@ -12,14 +12,11 @@
@row-click="rowClick"
>
<el-table-column type="index" width="50" />
<el-table-column label="单元名称">
<template slot-scope="scope" >{{ scope.row.name }}</template>
<el-table-column label="检测任务号">
<template slot-scope="scope" >{{ scope.row.detnumber }}</template>
</el-table-column>
<el-table-column label="单元描述">
<template slot-scope="scope" >{{ scope.row.description }}</template>
</el-table-column>
<el-table-column label="采用标准">
<template slot-scope="scope" >{{ scope.row.standard_.fullname }}</template>
<el-table-column label="被委托检测机构">
<template slot-scope="scope" >{{ scope.row.testorg}}</template>
</el-table-column>
<el-table-column label="创建时间">
<template slot-scope="scope">
@ -45,37 +42,12 @@
:limit.sync="listQuery.page_size"
@pagination="getList"
/>
<el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="80px" style="margin-top:10px">
<el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="150px" style="margin-top:10px">
<el-col :xs="24" :md="12">
<el-form-item label="实施规则" prop="implementrule">
<el-select
v-model="formData.implementrule"
placeholder="请选择实施规则"
clearable
:style="{width: '100%'}"
@change="changeTypeOptions"
>
<el-form-item label="被委托检测机构" prop="testorg">
<el-select v-model="formData.testorg" placeholder="请选择检测机构" clearable :style="{width: '100%'}">
<el-option
v-for="(item, index) in implementruleOptions"
:key="index"
:label="item.fullname"
:value="item.id"
:disabled="item.disabled"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :md="12">
<el-form-item label="单元类型" prop="unittype">
<el-select
v-model="formData.unittype"
placeholder="请选择单元类型"
clearable
:style="{width: '100%'}"
@change="changeUnit"
>
<el-option
v-for="(item, index) in unittypeOptions"
v-for="(item, index) in TestOptions"
:key="index"
:label="item.label"
:value="item.value"
@ -84,20 +56,10 @@
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :md="12">
<el-form-item label="采用标准" prop="standard">
<el-input
v-model="formData.standard_.fullname"
placeholder="请输入采用标准"
readonly
clearable
:style="{width: '100%'}"
></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :md="12">
<el-form-item label="检测机构" prop="testorg">
<el-select v-model="formData.testorg" placeholder="请选择检测机构" clearable :style="{width: '100%'}">
<el-form-item label="认证性质" prop="testorg">
<el-select placeholder="请选择认证性质" clearable :style="{width: '100%'}">
<el-option
v-for="(item, index) in testorgOptions"
:key="index"
@ -109,37 +71,77 @@
</el-form-item>
</el-col>
<el-col :xs="24" :md="8">
<el-form-item label="单元名称" prop="name">
<el-input
v-model="formData.name"
placeholder="请输入单元名称"
<el-form-item label="检验项目" prop="testitem">
<el-select placeholder="请选择检验项目" v-model="formData.testitem" filterable allow-create :style="{width: '100%'}"
>
<el-option
v-for="(item, index) in patternOptions"
:key="index"
:label="item.label"
:value="item.value"
:disabled="item.disabled"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :md="8">
<el-form-item label="收费方式" prop="charge">
<el-select placeholder="请选择收费方式" v-model="formData.charge" filterable allow-create :style="{width: '100%'}"
>
<el-option
v-for="(item, index) in chargeOptions"
:key="index"
:label="item.label"
:value="item.value"
:disabled="item.disabled"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :md="12">
<el-form-item label="检测任务号" prop="detnumber">
<el-input v-model="formData.detnumber"
placeholder="请输入检测任务号"
readonly
clearable
:style="{width: '100%'}"
></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :md="16">
<el-form-item label="单元描述" prop="description">
<el-input
v-model="formData.description"
placeholder="请输入单元描述"
clearable
:style="{width: '100%'}"
></el-input>
<el-col :xs="24" :md="12">
<el-form-item label="检测单元" prop="testorg">
<el-select v-model="formData.testorg" placeholder="请选择检测单元" clearable :style="{width: '100%'}">
<el-option
v-for="(item, index) in TestOptions"
:key="index"
:label="item.label"
:value="item.value"
:disabled="item.disabled"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item size="large">
<el-button type="primary" @click="createNew">创建新记录</el-button>
<el-button type="primary" @click="updateNow">保存</el-button>
<el-button @click="resetForm">重置</el-button>
<el-col :xs="24" :md="12">
<el-form-item label="样品描述" prop="standard">
<el-input type="textarea" :rows="5"
clearable
:style="{width: '100%'}"></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :md="12">
<el-form-item label="备注" prop="remark">
<el-input type="textarea" :rows="5" v-model="formData.remark"
clearable
:style="{width: '100%'}"></el-input>
</el-form-item>
</el-col>
</el-form>
</div>
</template>
<script>
import { getImplementRuleList, getUnitTypeList } from "@/api/implementrule"
import { getDetectionTaskList} from "@/api/laboratory"
import { getTestOrgList} from "@/api/laboratory"
import { getDictList } from "@/api/dict";
import Pagination from "@/components/Pagination";
import checkPermission from "@/utils/permission";
@ -147,7 +149,7 @@ import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { genTree } from "../../utils";
export default {
name: "Productunit",
name: "Detectform",
components: { Pagination, Treeselect },
props:['certapp'],
data() {
@ -156,73 +158,52 @@ export default {
listLoading: true,
listQuery: {
page: 1,
page_size: 20,
certapp:this.certapp
page_size: 20
},
formData: {
certapp:this.certapp,
implementrule: undefined,
unittype: undefined,
standard: undefined,
standard_:{},
testorg: undefined,
name: undefined,
description: undefined,
testitem:undefined,
detnumber:undefined,
remark:undefined
},
rules: {
implementrule: [
TestOptions:[],
patternOptions: [
{
required: true,
message: "请选择实施规则",
trigger: "change",
label: "规则规定的项目",
value: "规则规定的项目",
},
],
unittype: [
{
required: true,
message: "请选择单元类型",
trigger: "change",
},
label: "特定项目见备注",
value: "特定项目见备注",
}
],
standard: [],
testorg: [],
name: [
chargeOptions:[
{
required: true,
message: "请输入单元名称",
trigger: "blur",
label: "CTC代收",
value: "CTC代收",
},
],
description: [
{
required: true,
message: "请输入单元描述",
trigger: "blur",
},
],
},
implementruleOptions: [
],
unittypeOptions: [
],
testorgOptions: [
],
label: "自收",
value: "自收",
}
]
};
},
watch:{
'formData.implementrule': function(val){
this.changeTypeOptions()
},
},
created() {
this.getList();
this.getImplementRuleOptions()
this.getTestOptions()
},
methods: {
checkPermission,
getList() {
this.listLoading = true;
getUnitList(this.listQuery).then((response) => {
getDetectionTaskList(this.listQuery).then((response) => {
if (response.data) {
@ -232,87 +213,17 @@ export default {
this.listLoading = false;
});
},
resetFilter() {
this.listQuery = {
page: 1,
page_size: 20,
};
this.getList();
},
handleFilter() {
this.listQuery.page = 1;
this.getList();
},
handleCreate(item, index) {
this.$router.push({
name: "CertappForm",
params: { kind: item.code, action: "create" },
});
},
handleUpdate(scope) {
this.$router.push({
name: "CertappForm",
params: { action: "update", kind: scope.row.cert_field_.code },
query: { id: scope.row.id },
});
},
handleDelete(scope) {
this.$confirm("确定删除?", "警告", {
// confirmButtonText: '确定',
// cancelButtonText: '取消',
type: "warning",
}).then(() => {
deleteUnit(scope.row.id).then((res) => {
this.$message.success("成功");
this.getList();
});
}).catch(()=>{});
},
createNew() {
this.$refs['elForm'].validate(valid => {
if (!valid) return
// TODO 提交表单
createUnit(this.formData).then(res=>{
this.getList()
this.$message.success('成功')
})
getTestOptions(){
getTestOrgList().then(res=>{
this.TestOptions = genTree(res.data.results)
})
},
updateNow(){
this.$refs['elForm'].validate(valid => {
if (!valid) return
// TODO 提交表单
updateUnit(this.formData.id, this.formData).then(res=>{
this.getList()
this.$message.success('成功')
})
})
},
resetForm() {
this.$refs['elForm'].resetFields()
},
getImplementRuleOptions(){
var query = {ccc_list:this.certapp.cccpv_class}
getImplementRuleList(query).then(res=>{
this.implementruleOptions = res.data.results
})
},
changeTypeOptions(){
getUnitTypeList({implementrule:this.formData.implementrule}).then(res=>{
this.unittypeOptions = genTree(res.data)
})
},
changeUnit(val){
let obj = {};
obj = this.unittypeOptions.find((item)=>{//这里的userList就是上面遍历的数据源
return item.id === val;//筛选出匹配数据
});
this.formData.name = obj.name
this.formData.standard = obj.standard
this.formData.standard_ = obj.standard_
},
rowClick(row, column, event){
this.formData = Object.assign({}, row);
getDataList(){
}
},
};

View File

@ -0,0 +1,37 @@
# Generated by Django 3.0.5 on 2020-09-24 01:50
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', '0031_delete_bscodeset'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('project', '0039_merge_20200924_0950'),
('laboratory', '0005_auto_20200824_1649'),
]
operations = [
migrations.CreateModel(
name='DetectionTask',
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='删除标记')),
('remark', models.TextField(blank=True, null=True, verbose_name='备注')),
('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='detectiontask_belong_dept', to='system.Organization', verbose_name='所属部门')),
('certappunit', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='detectionTask_certappunit', to='project.Certappunit', verbose_name='认证单元')),
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='detectiontask_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
('testorg', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='detectionTask_testorg', to='laboratory.TestOrg', verbose_name='检测机构')),
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='detectiontask_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
],
options={
'abstract': False,
},
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 3.0.5 on 2020-09-24 03:12
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('laboratory', '0006_detectiontask'),
]
operations = [
migrations.AddField(
model_name='detectiontask',
name='detnumber',
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='检测任务号'),
),
]

View File

@ -0,0 +1,23 @@
# Generated by Django 3.0.5 on 2020-09-24 04:03
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('laboratory', '0007_detectiontask_detnumber'),
]
operations = [
migrations.AddField(
model_name='detectiontask',
name='charge',
field=models.CharField(choices=[('CTC代收', 'CTC代收'), ('自收', '自收')], default='CTC代收', max_length=50, verbose_name='收费方式'),
),
migrations.AddField(
model_name='detectiontask',
name='testitem',
field=models.CharField(choices=[('规则规定的项目', '规则规定的项目'), ('特定的项目见备注', '特定的项目见备注')], default='规则规定的项目', max_length=50, verbose_name='检测项目'),
),
]

View File

@ -46,8 +46,22 @@ class DetectionTask(CommonBModel):
"""
检测任务
"""
item_choices = (
('规则规定的项目', '规则规定的项目'),
('特定的项目见备注', '特定的项目见备注'),
)
charge_choices = (
('CTC代收', 'CTC代收'),
('自收', '自收'),
)
testorg = models.ForeignKey(TestOrg,verbose_name='检测机构', related_name='detectionTask_testorg', on_delete=models.DO_NOTHING)
certappunit = models.ForeignKey(Certappunit,verbose_name='认证单元', related_name='detectionTask_certappunit', on_delete=models.DO_NOTHING)
remark = models.TextField('备注', null=True, blank=True)
detnumber = models.CharField('检测任务号', max_length = 100, null=True, blank=True)
testitem = models.CharField('检测项目', choices=item_choices, default='规则规定的项目', max_length=50)
charge = models.CharField('收费方式', choices=charge_choices, default='CTC代收', max_length=50)

View File

@ -1,6 +1,6 @@
from rest_framework import serializers
from .models import TestOrg,TestOrgNotice
from .models import TestOrg,TestOrgNotice,DetectionTask
from apps.system.serializers import DictSerializer
@ -17,3 +17,7 @@ class TestOrgNoticListSerializer(serializers.ModelSerializer):
class Meta:
model = TestOrgNotice
fields = ['id','name','publishdate','ismportant','note','dettonotice','path']
class DetectionTaskSerializer(serializers.ModelSerializer):
class Meta:
model = DetectionTask
fields = '__all__'

View File

@ -1,7 +1,7 @@
from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet
from .models import TestOrg,TestOrgNotice
from .models import TestOrg,TestOrgNotice,DetectionTask
from utils.queryset import get_child_queryset2
from .serializers import TestOrgSerializer,TestOrgNoticeSerializer,TestOrgNoticListSerializer,DetectionTaskSerializer
from apps.system.permission_data import RbacFilterSet
@ -27,10 +27,10 @@ class TestOrgNoticeViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelView
if self.action == 'list':
return TestOrgNoticListSerializer
return TestOrgNoticeSerializer
class DetectionTasViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelViewSet):
perms_map = {'get': '*', 'post': 'DetectionTas_create',
'put': 'DetectionTas_update', 'delete': 'DetectionTas_delete'}
queryset = DetectionTas.objects
class DetectionTaskViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelViewSet):
perms_map = {'get': '*', 'post': 'DetectionTask_create',
'put': 'DetectionTask_update', 'delete': 'DetectionTask_delete'}
queryset = DetectionTask.objects
serializer_class = DetectionTaskSerializer
ordering = ['-create_time']

View File

@ -0,0 +1,14 @@
# Generated by Django 3.0.5 on 2020-09-24 01:50
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('project', '0034_evaluationdetail_result'),
('project', '0038_certappunit_testorg'),
]
operations = [
]

View File

@ -0,0 +1,33 @@
# Generated by Django 3.0.5 on 2020-09-29 02:10
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('project', '0039_merge_20200924_0950'),
]
operations = [
migrations.AddField(
model_name='certappunit',
name='charge',
field=models.CharField(choices=[('CTC代收', 'CTC代收'), ('自收', '自收')], default='CTC代收', max_length=50, verbose_name='收费方式'),
),
migrations.AddField(
model_name='certappunit',
name='detnumber',
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='检测任务号'),
),
migrations.AddField(
model_name='certappunit',
name='remark',
field=models.TextField(blank=True, null=True, verbose_name='备注'),
),
migrations.AddField(
model_name='certappunit',
name='testitem',
field=models.CharField(choices=[('规则规定的项目', '规则规定的项目'), ('特定的项目见备注', '特定的项目见备注')], default='规则规定的项目', max_length=50, verbose_name='检测项目'),
),
]

View File

@ -0,0 +1,29 @@
# Generated by Django 3.0.5 on 2020-09-29 02:17
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('project', '0040_auto_20200929_1010'),
]
operations = [
migrations.RemoveField(
model_name='certappunit',
name='charge',
),
migrations.RemoveField(
model_name='certappunit',
name='detnumber',
),
migrations.RemoveField(
model_name='certappunit',
name='remark',
),
migrations.RemoveField(
model_name='certappunit',
name='testitem',
),
]

View File

@ -0,0 +1,45 @@
# Generated by Django 3.0.5 on 2020-09-29 08:18
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('laboratory', '0008_auto_20200924_1203'),
('project', '0041_auto_20200929_1017'),
]
operations = [
migrations.AddField(
model_name='certappunit',
name='charge',
field=models.CharField(blank=True, choices=[('CTC代收', 'CTC代收'), ('自收', '自收')], max_length=50, null=True, verbose_name='收费方式'),
),
migrations.AddField(
model_name='certappunit',
name='detnumber',
field=models.CharField(blank=True, max_length=100, null=True, verbose_name='检测任务号'),
),
migrations.AddField(
model_name='certappunit',
name='remark',
field=models.TextField(blank=True, null=True, verbose_name='备注'),
),
migrations.AddField(
model_name='certappunit',
name='sampledec',
field=models.TextField(blank=True, null=True, verbose_name='样品描述'),
),
migrations.AddField(
model_name='certappunit',
name='testitem',
field=models.CharField(blank=True, choices=[('规则规定的项目', '规则规定的项目'), ('特定的项目见备注', '特定的项目见备注')], max_length=50, null=True, verbose_name='检测项目'),
),
migrations.AlterField(
model_name='certappunit',
name='testorg',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='certappunit_testorg', to='laboratory.TestOrg', verbose_name='检测机构'),
),
]

View File

@ -3,9 +3,8 @@ from django.contrib.postgres.fields import JSONField
from django.db import models
from rest_framework.exceptions import ParseError
from simple_history.models import HistoricalRecords
from apps.certset.models import ImplementRule, UnitType, Evaluations, Standard
from apps.crm.models import Certunit, Enterprise
from apps.crm.models import Enterprise
from apps.system.models import CommonAModel, CommonBModel, Dict, User
# from apps.plan.models import Plan
@ -200,7 +199,23 @@ class Certappunit(CommonBModel):
"""
certunit = models.ForeignKey('crm.Certunit', verbose_name='单元', on_delete=models.CASCADE, related_name='certappunit_certunit')
certapp = models.ForeignKey(CertApp, verbose_name='所属业务', on_delete = models.CASCADE, related_name='certappunit_certapp')
testorg = models.ForeignKey('laboratory.TestOrg', verbose_name='检测机构', on_delete=models.SET_NULL, null=True, blank=True)
#检测任务
item_choices = (
('规则规定的项目', '规则规定的项目'),
('特定的项目见备注', '特定的项目见备注'),
)
charge_choices = (
('CTC代收', 'CTC代收'),
('自收', '自收'),
)
testorg = models.ForeignKey('laboratory.TestOrg',verbose_name='检测机构',null=True, blank=True, related_name='certappunit_testorg', on_delete=models.DO_NOTHING)
remark = models.TextField('备注', null=True, blank=True)
sampledec = models.TextField('样品描述', null=True, blank=True)
detnumber = models.CharField('检测任务号', max_length = 100,null=True, blank=True)
testitem = models.CharField('检测项目', choices=item_choices,null=True, blank=True, max_length=50)
charge = models.CharField('收费方式', choices=charge_choices,null=True, blank=True, max_length=50)
class Meta:
verbose_name = '认证单元'
verbose_name_plural = verbose_name