xialaneirong
This commit is contained in:
commit
2e4834afab
|
@ -54,3 +54,11 @@ export function getCertapp(id) {
|
||||||
method: 'get',
|
method: 'get',
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function accessCertapp(id, data) {
|
||||||
|
return request({
|
||||||
|
url: `/project/certapp/${id}/access/`,
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
export function getCertappunitList(query) {
|
||||||
|
return request({
|
||||||
|
url: '/project/certappunit/',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// export function createAccess(data) {
|
||||||
|
// return request({
|
||||||
|
// url: '/accessment/certass/',
|
||||||
|
// method: 'post',
|
||||||
|
// data
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
|
||||||
|
// export function updateAccess(id, data) {
|
||||||
|
// return request({
|
||||||
|
// url: `/accessment/certass/${id}/`,
|
||||||
|
// method: 'put',
|
||||||
|
// data
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
|
||||||
|
// export function deleteAccess(id) {
|
||||||
|
// return request({
|
||||||
|
// url: `/accessment/certass/${id}/`,
|
||||||
|
// method: 'delete'
|
||||||
|
// })
|
||||||
|
// }
|
|
@ -73,38 +73,4 @@ export function deleteTestOrgNotice(id) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
|
@ -98,6 +98,6 @@ div:focus {
|
||||||
.el-button+.el-button {
|
.el-button+.el-button {
|
||||||
margin-left: 1px;
|
margin-left: 1px;
|
||||||
}
|
}
|
||||||
.el-button {
|
// .el-button {
|
||||||
border-radius: 0px;
|
// border-radius: 0px;
|
||||||
}
|
// }
|
|
@ -3,64 +3,197 @@
|
||||||
<el-card>
|
<el-card>
|
||||||
<div slot="header" class="clearfix">
|
<div slot="header" class="clearfix">
|
||||||
<span>评定结论</span>
|
<span>评定结论</span>
|
||||||
|
</div>
|
||||||
|
<el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="120px" style="margin-top:10px">
|
||||||
|
<el-col :xs="24" :md="12">
|
||||||
|
<el-form-item label="工厂检查结论" prop="conclusion">
|
||||||
|
<el-select
|
||||||
|
v-model="formData.conclusion"
|
||||||
|
placeholder="请选择工厂检查结论"
|
||||||
|
clearable
|
||||||
|
:style="{width: '100%'}"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="(item, index) in conclusionOptions"
|
||||||
|
:key="index"
|
||||||
|
:label="item.name"
|
||||||
|
: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="nonitems" >
|
||||||
|
<el-select
|
||||||
|
v-model="formData.nonitems"
|
||||||
|
placeholder="请选择不符合项"
|
||||||
|
clearable
|
||||||
|
multiple
|
||||||
|
collapse-tags
|
||||||
|
:style="{width: '100%'}"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="(item, index) in nonOptions"
|
||||||
|
:key="index"
|
||||||
|
:label="item.name"
|
||||||
|
: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="score" >
|
||||||
|
<el-input-number v-model="formData.score" :min="1" :max="100" style="width:100%"></el-input-number>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<div style="text-align:center">
|
||||||
|
<el-button type="primary" @click="save">保存</el-button>
|
||||||
|
</div>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
<el-card style="margin-top:6px">
|
||||||
|
<div slot="header" class="clearfix">
|
||||||
|
<span>业务涉及的认证单元</span>
|
||||||
</div>
|
</div>
|
||||||
<el-table
|
<el-table
|
||||||
ref="elTable"
|
|
||||||
v-loading="listLoading"
|
v-loading="listLoading"
|
||||||
:data="tableData"
|
:data="tableUnitData"
|
||||||
style="width: 100%;"
|
style="width: 100%;"
|
||||||
border
|
border
|
||||||
fit
|
fit
|
||||||
stripe
|
stripe
|
||||||
highlight-current-row
|
highlight-current-row
|
||||||
|
height="380"
|
||||||
>
|
>
|
||||||
<el-table-column label="评定表编号">
|
<el-table-column type="index" width="50" />
|
||||||
<template slot-scope="scope">{{ scope.row.number }}</template>
|
<el-table-column label="单元名称">
|
||||||
|
<template slot-scope="scope" >{{ scope.row.name }}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="工厂检查结论">
|
<el-table-column label="证书信息">
|
||||||
<template slot-scope="scope">{{ scope.row.conclusion }}</template>
|
<template slot-scope="scope">
|
||||||
|
<!-- <el-button
|
||||||
|
type="danger"
|
||||||
|
size="small"
|
||||||
|
:disabled="!checkPermission(['certapps_update'])"
|
||||||
|
@click="handleDelete(scope)"
|
||||||
|
>删除</el-button> -->
|
||||||
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="不符合项分类">
|
<el-table-column label="认证决定">
|
||||||
<template slot-scope="scope">{{ scope.row.create_time }}</template>
|
<template slot-scope="scope">
|
||||||
|
<!-- <el-button
|
||||||
|
type="danger"
|
||||||
|
size="small"
|
||||||
|
:disabled="!checkPermission(['certapps_update'])"
|
||||||
|
@click="handleDelete(scope)"
|
||||||
|
>删除</el-button> -->
|
||||||
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="创建时间">
|
<el-table-column label="操作">
|
||||||
<template slot-scope="scope">{{ scope.row.create_time }}</template>
|
<template slot-scope="scope">
|
||||||
|
<!-- <el-button
|
||||||
|
type="danger"
|
||||||
|
size="small"
|
||||||
|
:disabled="!checkPermission(['certapps_update'])"
|
||||||
|
@click="handleDelete(scope)"
|
||||||
|
>删除</el-button> -->
|
||||||
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<!-- <el-table
|
|
||||||
ref="elTable"
|
|
||||||
v-loading="listLoading"
|
|
||||||
:data="tableData"
|
|
||||||
style="width: 100%;"
|
|
||||||
border
|
|
||||||
fit
|
|
||||||
stripe
|
|
||||||
highlight-current-row
|
|
||||||
>
|
|
||||||
<el-table-column label="评定表编号">
|
|
||||||
<template slot-scope="scope">{{ scope.row.number }}</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="工厂检查结论">
|
|
||||||
<template slot-scope="scope">{{ scope.row.conclusion }}</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="不符合项分类">
|
|
||||||
<template slot-scope="scope">{{ scope.row.create_time }}</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="创建时间">
|
|
||||||
<template slot-scope="scope">{{ scope.row.create_time }}</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table> -->
|
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
import { getDictList } from "@/api/dict"
|
||||||
|
import { accessCertapp, getCertapp } from "@/api/certapp"
|
||||||
|
import { getCertappunitList } from "@/api/certappunit"
|
||||||
|
import { getCertunitList } from "@/api/certunit";
|
||||||
export default {
|
export default {
|
||||||
name: "access",
|
name: "access",
|
||||||
|
props:['certapp'],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
listLoading: false,
|
listLoading: false,
|
||||||
tableData: [],
|
tableData: [],
|
||||||
|
formData:{},
|
||||||
|
rules:{
|
||||||
|
conclusion: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "请选择",
|
||||||
|
trigger: "blur",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
nonitems: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "请选择",
|
||||||
|
trigger: "blur",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
score: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "请输入",
|
||||||
|
trigger: "blur",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
conclusionOptions:[],
|
||||||
|
nonOptions:[],
|
||||||
|
tableUnitData: [],
|
||||||
|
listQuery:{
|
||||||
|
pageoff:true,
|
||||||
|
certapp:this.certapp
|
||||||
|
}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
created() {
|
||||||
|
this.getConclusion()
|
||||||
|
this.getOptions1()
|
||||||
|
this.getOptions2()
|
||||||
|
this.getUnitList();
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
getConclusion() {
|
||||||
|
getCertapp(this.certapp).then(res=>{
|
||||||
|
if(res.data){
|
||||||
|
this.formData = res.data
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getOptions1() {
|
||||||
|
getDictList({type__code:'factory_check_conclusion', pageoff:true}).then(res=>{
|
||||||
|
this.conclusionOptions = res.data
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getOptions2() {
|
||||||
|
getDictList({type__code:'factory_check_noitem', pageoff:true}).then(res=>{
|
||||||
|
this.nonOptions = res.data
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getUnitList() {
|
||||||
|
this.listLoading = true;
|
||||||
|
getCertappunitList(this.listQuery).then((response) => {
|
||||||
|
|
||||||
|
if (response.data) {
|
||||||
|
|
||||||
|
this.tableUnitData = response.data;
|
||||||
|
|
||||||
|
}
|
||||||
|
this.listLoading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
save() {
|
||||||
|
this.$refs["elForm"].validate((valid) => {
|
||||||
|
if (!valid) return;
|
||||||
|
accessCertapp(this.certapp, this.formData).then((res) => {
|
||||||
|
this.$message.success('成功')
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
|
@ -1,6 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<div style="display:flex">
|
<el-row :gutter="6">
|
||||||
|
<el-col :xs="24" :md="4">
|
||||||
<treeselect
|
<treeselect
|
||||||
v-model="listQuery.user__dept"
|
v-model="listQuery.user__dept"
|
||||||
:multiple="false"
|
:multiple="false"
|
||||||
|
@ -8,15 +9,18 @@
|
||||||
placeholder="所属组织"
|
placeholder="所属组织"
|
||||||
:disable-branch-nodes="true"
|
:disable-branch-nodes="true"
|
||||||
@input="handleFilter"
|
@input="handleFilter"
|
||||||
style="width: 280px" clearable/>
|
style="width: 100%" clearable/>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :md="4">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="listQuery.search"
|
v-model="listQuery.search"
|
||||||
placeholder="姓名/易记码/编号/注册领域"
|
placeholder="姓名/易记码/编号/注册领域"
|
||||||
style="width: 300px;margin-left:10px"
|
style="width: 100%"
|
||||||
class="filter-item"
|
class="filter-item"
|
||||||
@keyup.enter.native="handleFilter"
|
@keyup.enter.native="handleFilter"
|
||||||
/>
|
/>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :md="4">
|
||||||
<el-button
|
<el-button
|
||||||
class="filter-item"
|
class="filter-item"
|
||||||
type="primary"
|
type="primary"
|
||||||
|
@ -28,8 +32,9 @@
|
||||||
type="primary"
|
type="primary"
|
||||||
icon="el-icon-refresh-left"
|
icon="el-icon-refresh-left"
|
||||||
@click="resetFilter"
|
@click="resetFilter"
|
||||||
>刷新重置</el-button>
|
>刷新</el-button>
|
||||||
</div>
|
</el-col>
|
||||||
|
</el-row>
|
||||||
<el-table
|
<el-table
|
||||||
v-loading="listLoading"
|
v-loading="listLoading"
|
||||||
:data="tableData.results"
|
:data="tableData.results"
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<div>
|
<div>
|
||||||
<el-table
|
<el-table
|
||||||
v-loading="listLoading"
|
v-loading="listLoading"
|
||||||
:data="tableData.results"
|
:data="tableData"
|
||||||
style="width: 100%;"
|
style="width: 100%;"
|
||||||
border
|
border
|
||||||
fit
|
fit
|
||||||
|
@ -37,14 +37,6 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<pagination
|
|
||||||
v-show="tableData.count>0"
|
|
||||||
:total="tableData.count"
|
|
||||||
:page.sync="listQuery.page"
|
|
||||||
: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="80px" style="margin-top:10px">
|
||||||
<el-col :xs="24" :md="12">
|
<el-col :xs="24" :md="12">
|
||||||
<el-form-item label="实施规则" prop="implementrule">
|
<el-form-item label="实施规则" prop="implementrule">
|
||||||
|
@ -154,11 +146,10 @@ export default {
|
||||||
props:['certapp'],
|
props:['certapp'],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
tableData: { count: 0 },
|
tableData: [],
|
||||||
listLoading: true,
|
listLoading: true,
|
||||||
listQuery: {
|
listQuery: {
|
||||||
page: 1,
|
pageoff:true,
|
||||||
page_size: 20,
|
|
||||||
certappunit_certunit__certapp:this.certapp
|
certappunit_certunit__certapp:this.certapp
|
||||||
},
|
},
|
||||||
formData: {
|
formData: {
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<div>
|
<div>
|
||||||
<el-table
|
<el-table
|
||||||
v-loading="listLoading"
|
v-loading="listLoading"
|
||||||
:data="tableData.results"
|
:data="tableData"
|
||||||
style="width: 100%;"
|
style="width: 100%;"
|
||||||
border
|
border
|
||||||
fit
|
fit
|
||||||
|
@ -11,6 +11,7 @@
|
||||||
height="380"
|
height="380"
|
||||||
@row-click="rowClick"
|
@row-click="rowClick"
|
||||||
>
|
>
|
||||||
|
|
||||||
<el-table-column type="index" width="50" />
|
<el-table-column type="index" width="50" />
|
||||||
<el-table-column label="检测任务号">
|
<el-table-column label="检测任务号">
|
||||||
<template slot-scope="scope" >{{ scope.row.detnumber }}</template>
|
<template slot-scope="scope" >{{ scope.row.detnumber }}</template>
|
||||||
|
@ -35,13 +36,7 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<pagination
|
|
||||||
v-show="tableData.count>0"
|
|
||||||
:total="tableData.count"
|
|
||||||
:page.sync="listQuery.page"
|
|
||||||
:limit.sync="listQuery.page_size"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
<el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="150px" 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-col :xs="24" :md="12">
|
||||||
<el-form-item label="被委托检测机构" prop="testorg">
|
<el-form-item label="被委托检测机构" prop="testorg">
|
||||||
|
@ -109,10 +104,10 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xs="24" :md="12">
|
<el-col :xs="24" :md="12">
|
||||||
<el-form-item label="检测单元" prop="testorg">
|
<el-form-item label="检测单元" prop="testunity">
|
||||||
<el-select v-model="formData.testorg" placeholder="请选择检测单元" clearable :style="{width: '100%'}">
|
<el-select v-model="formData.testunity" placeholder="请选择检测单元" clearable :style="{width: '100%'}">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="(item, index) in TestOptions"
|
v-for="(item, index) in unitOptions"
|
||||||
:key="index"
|
:key="index"
|
||||||
:label="item.label"
|
:label="item.label"
|
||||||
:value="item.value"
|
:value="item.value"
|
||||||
|
@ -136,13 +131,19 @@
|
||||||
:style="{width: '100%'}"></el-input>
|
:style="{width: '100%'}"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item size="large">
|
||||||
|
<el-button type="primary" @click="createNew">保存</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { getDetectionTaskList} from "@/api/laboratory"
|
|
||||||
import { getTestOrgList} from "@/api/laboratory"
|
import { getTestOrgList} from "@/api/laboratory"
|
||||||
import { getDictList } from "@/api/dict";
|
import { getDictList } from "@/api/dict";
|
||||||
|
import { getCertunitList } from "@/api/certunit";
|
||||||
|
import {getCertappunitList} from "@/api/certappunit";
|
||||||
import Pagination from "@/components/Pagination";
|
import Pagination from "@/components/Pagination";
|
||||||
import checkPermission from "@/utils/permission";
|
import checkPermission from "@/utils/permission";
|
||||||
import Treeselect from "@riophae/vue-treeselect";
|
import Treeselect from "@riophae/vue-treeselect";
|
||||||
|
@ -154,8 +155,13 @@ export default {
|
||||||
props:['certapp'],
|
props:['certapp'],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
tableData: { count: 0 },
|
tableData: [],
|
||||||
|
|
||||||
listLoading: true,
|
listLoading: true,
|
||||||
|
listQuery1:{
|
||||||
|
pageoff:true,
|
||||||
|
certappunit_certunit__certapp:this.certapp
|
||||||
|
},
|
||||||
listQuery: {
|
listQuery: {
|
||||||
page: 1,
|
page: 1,
|
||||||
page_size: 20
|
page_size: 20
|
||||||
|
@ -164,9 +170,11 @@ export default {
|
||||||
testorg: undefined,
|
testorg: undefined,
|
||||||
testitem:undefined,
|
testitem:undefined,
|
||||||
detnumber:undefined,
|
detnumber:undefined,
|
||||||
remark:undefined
|
remark:undefined,
|
||||||
|
testunity:undefined
|
||||||
},
|
},
|
||||||
TestOptions:[],
|
TestOptions:[],
|
||||||
|
unitOptions:[],
|
||||||
patternOptions: [
|
patternOptions: [
|
||||||
{
|
{
|
||||||
label: "规则规定的项目",
|
label: "规则规定的项目",
|
||||||
|
@ -196,14 +204,17 @@ export default {
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.getList();
|
this.getList();
|
||||||
this.getTestOptions()
|
this.getTestOptions();
|
||||||
|
this.gettunitList()
|
||||||
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
checkPermission,
|
checkPermission,
|
||||||
getList() {
|
getList() {
|
||||||
this.listLoading = true;
|
this.listLoading = true;
|
||||||
getDetectionTaskList(this.listQuery).then((response) => {
|
|
||||||
|
getCertappunitList({ pageoff:true,
|
||||||
|
certappunit_certunit__certapp:this.certapp}).then((response) => {
|
||||||
|
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
|
|
||||||
|
@ -213,6 +224,16 @@ export default {
|
||||||
this.listLoading = false;
|
this.listLoading = false;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
gettunitList() {
|
||||||
|
this.listLoading = true;
|
||||||
|
getCertunitList(this.listQuery1).then(res=>{
|
||||||
|
|
||||||
|
|
||||||
|
this.unitOptions = genTree(res.data);
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
},
|
||||||
getTestOptions(){
|
getTestOptions(){
|
||||||
getTestOrgList().then(res=>{
|
getTestOrgList().then(res=>{
|
||||||
this.TestOptions = genTree(res.data.results)
|
this.TestOptions = genTree(res.data.results)
|
||||||
|
|
|
@ -121,7 +121,7 @@
|
||||||
<el-input v-model="dicttype.code" placeholder="代号" />
|
<el-input v-model="dicttype.code" placeholder="代号" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="父级" prop="parent">
|
<el-form-item label="父级" prop="parent">
|
||||||
<treeselect v-model="dicttype.parent" :multiple="false" :options="dictTypeData" placeholder="父级"/>
|
<treeselect v-model="dicttype.parent" :multiple="false" :options="dictTypeData" placeholder="父级" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<div style="text-align:right;">
|
<div style="text-align:right;">
|
||||||
|
@ -309,6 +309,9 @@ export default {
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
async confirm1(form) {
|
async confirm1(form) {
|
||||||
|
if(this.dicttype.parent==undefined){
|
||||||
|
this.dicttype.parent = null
|
||||||
|
}
|
||||||
this.$refs[form].validate(valid => {
|
this.$refs[form].validate(valid => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
const isEdit = this.dgT1 === 'edit'
|
const isEdit = this.dgT1 === 'edit'
|
||||||
|
@ -363,7 +366,7 @@ export default {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
# Generated by Django 3.0.7 on 2020-09-29 07:44
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('system', '0031_delete_bscodeset'),
|
||||||
|
('project', '0038_certappunit_testorg'),
|
||||||
|
('accessment', '0002_auto_20200921_1444'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='unitaccess',
|
||||||
|
name='certaccess',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='unitaccess',
|
||||||
|
name='certificate',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='unitaccess',
|
||||||
|
name='certunit',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='unitaccess',
|
||||||
|
name='certappunit',
|
||||||
|
field=models.OneToOneField(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='unitaccess_certappunit', to='project.Certappunit'),
|
||||||
|
preserve_default=False,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='certaccess',
|
||||||
|
name='certapp',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='certaccess_certapp', to='project.CertApp'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='unitaccess',
|
||||||
|
name='decision',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='unitaccess_decision', to='system.Dict', verbose_name='认证决定'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,35 @@
|
||||||
|
# Generated by Django 3.0.7 on 2020-09-29 08:05
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('accessment', '0003_auto_20200929_1544'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='unitaccess',
|
||||||
|
name='certappunit',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='unitaccess',
|
||||||
|
name='create_by',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='unitaccess',
|
||||||
|
name='decision',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='unitaccess',
|
||||||
|
name='update_by',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='Certaccess',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='Unitaccess',
|
||||||
|
),
|
||||||
|
]
|
|
@ -5,38 +5,36 @@ from rest_framework.exceptions import ParseError
|
||||||
from simple_history.models import HistoricalRecords
|
from simple_history.models import HistoricalRecords
|
||||||
|
|
||||||
from apps.certset.models import ImplementRule, UnitType, EvaluationItem, Standard
|
from apps.certset.models import ImplementRule, UnitType, EvaluationItem, Standard
|
||||||
from apps.crm.models import Enterprise
|
# from apps.crm.models import Enterprise
|
||||||
from apps.project.models import CertApp
|
# from apps.project.models import CertApp
|
||||||
from apps.system.models import CommonAModel, CommonBModel, Dict, User
|
# from apps.system.models import CommonAModel, CommonBModel, Dict, User
|
||||||
|
|
||||||
class Certaccess(CommonAModel):
|
# class Certaccess(CommonAModel):
|
||||||
"""
|
# """
|
||||||
业务评定
|
# 业务评定
|
||||||
"""
|
# """
|
||||||
certapp = models.ForeignKey('project.certapp', on_delete=models.CASCADE, related_name='unitaccess_certapp')
|
# certapp = models.ForeignKey('project.certapp', on_delete=models.CASCADE, related_name='certaccess_certapp')
|
||||||
conclusion = models.ForeignKey(Dict, verbose_name='工厂检查结论', on_delete=models.CASCADE, related_name='certaccess_conclusion')
|
# conclusion = models.ForeignKey(Dict, verbose_name='工厂检查结论', on_delete=models.CASCADE, related_name='certaccess_conclusion')
|
||||||
nonitems = models.ManyToManyField(Dict, verbose_name='不符合项目', related_name='certaccess_nonitems')
|
# nonitems = models.ManyToManyField(Dict, verbose_name='不符合项目', related_name='certaccess_nonitems')
|
||||||
score = models.IntegerField('审核质量评分', default=0)
|
# score = models.IntegerField('审核质量评分', default=0)
|
||||||
|
|
||||||
class Meta:
|
# class Meta:
|
||||||
verbose_name = '业务评定'
|
# verbose_name = '业务评定'
|
||||||
verbose_name_plural = verbose_name
|
# verbose_name_plural = verbose_name
|
||||||
|
|
||||||
def __str__(self):
|
# def __str__(self):
|
||||||
return self.certapp.number
|
# return self.certapp.number
|
||||||
|
|
||||||
class Unitaccess(CommonAModel):
|
# class Unitaccess(CommonAModel):
|
||||||
"""
|
# """
|
||||||
单元评定
|
# 单元评定
|
||||||
"""
|
# """
|
||||||
certunit = models.ForeignKey('crm.Certunit', on_delete=models.CASCADE, related_name='unitaccess_certunit')
|
# certappunit = models.OneToOneField('project.Certappunit', on_delete=models.CASCADE, related_name='unitaccess_certappunit')
|
||||||
certificate = models.ForeignKey('certificate.Certificate', on_delete=models.CASCADE, null=True, blank=True, related_name='unitaccess_certificate')
|
# decision = models.ForeignKey(Dict,verbose_name='认证决定', on_delete=models.CASCADE, related_name='unitaccess_decision')
|
||||||
decision = models.ForeignKey(Dict,verbose_name='认证决定', on_delete=models.CASCADE)
|
|
||||||
certaccess = models.ForeignKey('accessment.Certaccess', on_delete=models.CASCADE, related_name='unitaccess_certaccess')
|
|
||||||
|
|
||||||
class Meta:
|
# class Meta:
|
||||||
verbose_name = '认证单元评定'
|
# verbose_name = '认证单元评定'
|
||||||
verbose_name_plural = verbose_name
|
# verbose_name_plural = verbose_name
|
||||||
|
|
||||||
def __str__(self):
|
# def __str__(self):
|
||||||
return self.decision
|
# return self.decision
|
|
@ -1,26 +1,26 @@
|
||||||
from apps.system.models import Dict
|
# from apps.system.models import Dict
|
||||||
from rest_framework import serializers
|
# from rest_framework import serializers
|
||||||
|
|
||||||
from .models import Certaccess, Unitaccess
|
# from .models import Certaccess, Unitaccess
|
||||||
|
|
||||||
from apps.system.serializers import DictSerializer
|
# from apps.system.serializers import DictSerializer
|
||||||
|
|
||||||
class CertaccessSerializer(serializers.ModelSerializer):
|
# class CertaccessSerializer(serializers.ModelSerializer):
|
||||||
conclusion_ = DictSerializer(source='conclusion', read_only=True)
|
# conclusion_ = DictSerializer(source='conclusion', read_only=True)
|
||||||
nonitems = DictSerializer(source='nonitems', read_only=True)
|
# nonitems_ = DictSerializer(source='nonitems', read_only=True, many=True)
|
||||||
|
|
||||||
class Meta:
|
# class Meta:
|
||||||
model = Certaccess
|
# model = Certaccess
|
||||||
fields = '__all__'
|
# fields = '__all__'
|
||||||
|
|
||||||
@staticmethod
|
# @staticmethod
|
||||||
def setup_eager_loading(queryset):
|
# def setup_eager_loading(queryset):
|
||||||
""" Perform necessary eager loading of data. """
|
# """ Perform necessary eager loading of data. """
|
||||||
queryset = queryset.select_related('conclusion',)
|
# queryset = queryset.select_related('conclusion',)
|
||||||
queryset = queryset.prefetch_related('nonitems',)
|
# queryset = queryset.prefetch_related('nonitems',)
|
||||||
return queryset
|
# return queryset
|
||||||
|
|
||||||
class UnitaccessSerializer(serializers.ModelSerializer):
|
# class UnitaccessSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
# class Meta:
|
||||||
model = Unitaccess
|
# model = Unitaccess
|
||||||
fields = '__all__'
|
# fields = '__all__'
|
|
@ -1,10 +1,10 @@
|
||||||
from django.urls import path, include
|
# from django.urls import path, include
|
||||||
from .views import CertaccessViewSet
|
# from .views import CertaccessViewSet
|
||||||
from rest_framework import routers
|
# from rest_framework import routers
|
||||||
|
|
||||||
router = routers.DefaultRouter()
|
# router = routers.DefaultRouter()
|
||||||
router.register('certaccess', CertaccessViewSet, basename="certaccess")
|
# router.register('certaccess', CertaccessViewSet, basename="certaccess")
|
||||||
|
|
||||||
urlpatterns = [
|
# urlpatterns = [
|
||||||
path('', include(router.urls))
|
# path('', include(router.urls))
|
||||||
]
|
# ]
|
|
@ -1,29 +1,30 @@
|
||||||
import random
|
# import random
|
||||||
|
|
||||||
from django.shortcuts import render
|
# from django.shortcuts import render
|
||||||
from django.utils import timezone
|
# from django.utils import timezone
|
||||||
from rest_framework import status
|
# from rest_framework import status
|
||||||
from rest_framework.decorators import action
|
# from rest_framework.decorators import action
|
||||||
from rest_framework.exceptions import NotAuthenticated, ParseError
|
# from rest_framework.exceptions import NotAuthenticated, ParseError
|
||||||
from rest_framework.response import Response
|
# from rest_framework.response import Response
|
||||||
from rest_framework.serializers import ModelSerializer
|
# from rest_framework.serializers import ModelSerializer
|
||||||
from rest_framework.views import APIView
|
# from rest_framework.views import APIView
|
||||||
from rest_framework.viewsets import GenericViewSet, ModelViewSet
|
# from rest_framework.viewsets import GenericViewSet, ModelViewSet
|
||||||
|
|
||||||
from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin
|
# from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin
|
||||||
from apps.system.models import Dict
|
# from apps.system.models import Dict
|
||||||
from apps.system.permission_data import RbacFilterSet
|
# from apps.system.permission_data import RbacFilterSet
|
||||||
from utils.pagination import PageOrNot
|
# from utils.pagination import PageOrNot
|
||||||
|
|
||||||
from .models import *
|
# from .models import *
|
||||||
from .serializers import *
|
# from .serializers import *
|
||||||
|
|
||||||
# Create your views here.
|
# # Create your views here.
|
||||||
class CertaccessViewSet(CreateUpdateCustomMixin, ModelViewSet):
|
# class CertaccessViewSet(PageOrNot, CreateUpdateCustomMixin, ModelViewSet):
|
||||||
"""
|
# """
|
||||||
业务评定
|
# 业务评定
|
||||||
"""
|
# """
|
||||||
perms_map = {'get': 'certapp_view', 'post':'certaccess_create', 'put':'certaccess_update','delete': 'certaccess_delete'}
|
# perms_map = {'get': 'certapp_view', 'post':'certaccess_create', 'put':'certaccess_update','delete': 'certaccess_delete'}
|
||||||
queryset = Certaccess.objects.all()
|
# queryset = Certaccess.objects.all()
|
||||||
serializer_class = CertaccessSerializer
|
# serializer_class = CertaccessSerializer
|
||||||
ordering = ['-create_time']
|
# filterset_fields = ['certapp']
|
||||||
|
# ordering = ['-create_time']
|
|
@ -42,26 +42,4 @@ class TestOrgNotice(CommonBModel):
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
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)
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from .models import TestOrg,TestOrgNotice,DetectionTask
|
from .models import TestOrg,TestOrgNotice
|
||||||
from apps.system.serializers import DictSerializer
|
from apps.system.serializers import DictSerializer
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,7 +17,4 @@ class TestOrgNoticListSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = TestOrgNotice
|
model = TestOrgNotice
|
||||||
fields = ['id','name','publishdate','ismportant','note','dettonotice','path']
|
fields = ['id','name','publishdate','ismportant','note','dettonotice','path']
|
||||||
class DetectionTaskSerializer(serializers.ModelSerializer):
|
|
||||||
class Meta:
|
|
||||||
model = DetectionTask
|
|
||||||
fields = '__all__'
|
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
from django.urls import path, include
|
from django.urls import path, include
|
||||||
from .views import TestOrgViewSet,TestOrgNoticeViewSet,DetectionTaskViewSet
|
from .views import TestOrgViewSet,TestOrgNoticeViewSet
|
||||||
from rest_framework import routers
|
from rest_framework import routers
|
||||||
|
|
||||||
router = routers.DefaultRouter()
|
router = routers.DefaultRouter()
|
||||||
router.register('testorg', TestOrgViewSet, basename="TestOrg")
|
router.register('testorg', TestOrgViewSet, basename="TestOrg")
|
||||||
router.register('testnotice', TestOrgNoticeViewSet, basename="TestOrgnotice")
|
router.register('testnotice', TestOrgNoticeViewSet, basename="TestOrgnotice")
|
||||||
router.register('detectiontask', DetectionTaskViewSet, basename="DetectionTask")
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', include(router.urls))
|
path('', include(router.urls))
|
||||||
]
|
]
|
|
@ -1,9 +1,9 @@
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
|
|
||||||
from rest_framework.viewsets import ModelViewSet
|
from rest_framework.viewsets import ModelViewSet
|
||||||
from .models import TestOrg,TestOrgNotice,DetectionTask
|
from .models import TestOrg,TestOrgNotice
|
||||||
from utils.queryset import get_child_queryset2
|
from utils.queryset import get_child_queryset2
|
||||||
from .serializers import TestOrgSerializer,TestOrgNoticeSerializer,TestOrgNoticListSerializer,DetectionTaskSerializer
|
from .serializers import TestOrgSerializer,TestOrgNoticeSerializer,TestOrgNoticListSerializer
|
||||||
from apps.system.permission_data import RbacFilterSet
|
from apps.system.permission_data import RbacFilterSet
|
||||||
from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin
|
from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
|
@ -27,10 +27,5 @@ class TestOrgNoticeViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelView
|
||||||
if self.action == 'list':
|
if self.action == 'list':
|
||||||
return TestOrgNoticListSerializer
|
return TestOrgNoticListSerializer
|
||||||
return TestOrgNoticeSerializer
|
return TestOrgNoticeSerializer
|
||||||
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']
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
# Generated by Django 3.0.7 on 2020-09-29 08:05
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('system', '0031_delete_bscodeset'),
|
||||||
|
('project', '0038_certappunit_testorg'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='certapp',
|
||||||
|
name='conclusion',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='certaccess_conclusion', to='system.Dict', verbose_name='工厂检查结论'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='certapp',
|
||||||
|
name='nonitems',
|
||||||
|
field=models.ManyToManyField(related_name='certaccess_nonitems', to='system.Dict', verbose_name='不符合项目'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='certapp',
|
||||||
|
name='score',
|
||||||
|
field=models.IntegerField(default=0, verbose_name='审核质量评分'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='certappunit',
|
||||||
|
name='decision',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='unitaccess_decision', to='system.Dict', verbose_name='认证决定'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -104,6 +104,12 @@ class CertApp(CommonBModel):
|
||||||
review_amount = models.FloatField('复评金额',null=True, blank=True, default=0)
|
review_amount = models.FloatField('复评金额',null=True, blank=True, default=0)
|
||||||
system_standard = models.ForeignKey(Dict, verbose_name='依据的体系标准',null=True, blank=True, related_name='certapp_system_standard', on_delete=models.DO_NOTHING)
|
system_standard = models.ForeignKey(Dict, verbose_name='依据的体系标准',null=True, blank=True, related_name='certapp_system_standard', on_delete=models.DO_NOTHING)
|
||||||
risk = models.CharField('风险系数', choices=risk_choices, max_length=50, null=True, blank=True)
|
risk = models.CharField('风险系数', choices=risk_choices, max_length=50, null=True, blank=True)
|
||||||
|
|
||||||
|
# 认证评定字段
|
||||||
|
conclusion = models.ForeignKey(Dict, verbose_name='工厂检查结论', on_delete=models.CASCADE, related_name='certaccess_conclusion', null=True, blank=True)
|
||||||
|
nonitems = models.ManyToManyField(Dict, verbose_name='不符合项目', related_name='certaccess_nonitems')
|
||||||
|
score = models.IntegerField('审核质量评分', default=0)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = '认证受理'
|
verbose_name = '认证受理'
|
||||||
verbose_name_plural = verbose_name
|
verbose_name_plural = verbose_name
|
||||||
|
|
|
@ -3,7 +3,7 @@ from rest_framework import serializers
|
||||||
|
|
||||||
from .models import *
|
from .models import *
|
||||||
|
|
||||||
from apps.system.serializers import DictSerializer, UserListSerializer
|
from apps.system.serializers import DictSerializer, UserSimpleSerializer
|
||||||
from apps.certset.serializers import StandardSerializer
|
from apps.certset.serializers import StandardSerializer
|
||||||
from apps.plan.serializers import PlanSerializer
|
from apps.plan.serializers import PlanSerializer
|
||||||
|
|
||||||
|
@ -42,12 +42,24 @@ class CertappSerializer(serializers.ModelSerializer):
|
||||||
cert_field_ = DictSerializer(source='cert_field', read_only=True)
|
cert_field_ = DictSerializer(source='cert_field', read_only=True)
|
||||||
cccpv_class_ = DictSerializer(source='cccpv_class' , read_only=True)
|
cccpv_class_ = DictSerializer(source='cccpv_class' , read_only=True)
|
||||||
cnas_scopes_ = DictSerializer(source='cnas_scopes', many=True , read_only=True)
|
cnas_scopes_ = DictSerializer(source='cnas_scopes', many=True , read_only=True)
|
||||||
create_by_ = UserListSerializer(source='create_by', read_only=True)
|
create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
|
||||||
accept_by_ = UserListSerializer(source='accept_by', read_only=True)
|
accept_by_ = UserSimpleSerializer(source='accept_by', read_only=True)
|
||||||
class Meta:
|
class Meta:
|
||||||
model = CertApp
|
model = CertApp
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def setup_eager_loading(queryset):
|
||||||
|
""" Perform necessary eager loading of data. """
|
||||||
|
queryset = queryset.select_related('cert_field','cccpv_class', 'create_by', 'accept_by')
|
||||||
|
queryset = queryset.prefetch_related('cnas_scopes',)
|
||||||
|
return queryset
|
||||||
|
|
||||||
|
class CertappunitSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Certappunit
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
class EvaluationDetailSerializer(serializers.ModelSerializer):
|
class EvaluationDetailSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = EvaluationDetail
|
model = EvaluationDetail
|
||||||
|
@ -65,8 +77,8 @@ class EvaluationDetailSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
|
|
||||||
class ProjectSerializer(serializers.ModelSerializer):
|
class ProjectSerializer(serializers.ModelSerializer):
|
||||||
create_by_ = UserListSerializer(source='create_by', read_only=True)
|
create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
|
||||||
assign_by_ = UserListSerializer(source='assign_by', read_only=True)
|
assign_by_ = UserSimpleSerializer(source='assign_by', read_only=True)
|
||||||
certapps = serializers.SerializerMethodField()
|
certapps = serializers.SerializerMethodField()
|
||||||
plan_ = PlanSerializer(source='plan', read_only=True)
|
plan_ = PlanSerializer(source='plan', read_only=True)
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ router = routers.DefaultRouter()
|
||||||
router.register('application', ApplicationViewSet, basename="application")
|
router.register('application', ApplicationViewSet, basename="application")
|
||||||
router.register('subapplication', SubApplicationViewSet, basename="subapplication")
|
router.register('subapplication', SubApplicationViewSet, basename="subapplication")
|
||||||
router.register('certapp', CertappViewset, basename="certapp")
|
router.register('certapp', CertappViewset, basename="certapp")
|
||||||
|
router.register('certappunit', CertappunitViewset, basename="certappunit")
|
||||||
router.register('evaluationdetail', EvaluationDetailViewset, basename="evaluationdetail")
|
router.register('evaluationdetail', EvaluationDetailViewset, basename="evaluationdetail")
|
||||||
router.register('project', ProjectViewSet, basename="project")
|
router.register('project', ProjectViewSet, basename="project")
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import re
|
||||||
|
from django.http import request
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
from apps import project
|
from apps import project
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
|
@ -16,6 +18,7 @@ from .filters import *
|
||||||
from utils.pagination import PageOrNot
|
from utils.pagination import PageOrNot
|
||||||
from rest_framework.exceptions import ParseError, NotAuthenticated
|
from rest_framework.exceptions import ParseError, NotAuthenticated
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
class ApplicationViewSet(RbacFilterSet, ModelViewSet):
|
class ApplicationViewSet(RbacFilterSet, ModelViewSet):
|
||||||
"""
|
"""
|
||||||
|
@ -89,7 +92,7 @@ class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet):
|
||||||
headers = self.get_success_headers(serializer.data)
|
headers = self.get_success_headers(serializer.data)
|
||||||
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
||||||
|
|
||||||
@action(methods=['put'], detail=True, perms_map={'put':'complete_certapp'},
|
@action(methods=['put'], detail=True, perms_map={'put':'certapp_complete'},
|
||||||
url_name='complete_certapp')
|
url_name='complete_certapp')
|
||||||
def complete(self, request, pk=None):
|
def complete(self, request, pk=None):
|
||||||
"""
|
"""
|
||||||
|
@ -100,7 +103,7 @@ class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet):
|
||||||
obj.save()
|
obj.save()
|
||||||
return Response(status=status.HTTP_200_OK)
|
return Response(status=status.HTTP_200_OK)
|
||||||
|
|
||||||
@action(methods=['put'], detail=False, perms_map={'put':'review_certapp'},
|
@action(methods=['put'], detail=False, perms_map={'put':'certapp_review'},
|
||||||
url_name='review_certapp')
|
url_name='review_certapp')
|
||||||
def review(self, request, pk=None):
|
def review(self, request, pk=None):
|
||||||
"""
|
"""
|
||||||
|
@ -113,6 +116,23 @@ class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet):
|
||||||
instance.cert_app.add(*certapps)
|
instance.cert_app.add(*certapps)
|
||||||
return Response(status=status.HTTP_200_OK)
|
return Response(status=status.HTTP_200_OK)
|
||||||
|
|
||||||
|
@action(methods=['put'], detail=True, perms_map={'put':'certapp_access'}, url_name='certapp_access')
|
||||||
|
def access(self, request, pk=None):
|
||||||
|
"""
|
||||||
|
认证评定
|
||||||
|
"""
|
||||||
|
# instance, ok = Certaccess.objects.get_or_create(certapp=self.get_object(), defaults={'certapp':self.get_object()
|
||||||
|
# , 'conclusion':Dict.objects.get(pk=request.data['conclusion']), 'score':request.data['score']})
|
||||||
|
# if not ok:
|
||||||
|
instance = self.get_object()
|
||||||
|
instance.conclusion = Dict.objects.get(pk=request.data['conclusion'])
|
||||||
|
instance.score = request.data['score']
|
||||||
|
instance.save()
|
||||||
|
instance.nonitems.clear()
|
||||||
|
instance.nonitems.add(*request.data['nonitems'])
|
||||||
|
return Response(status=status.HTTP_200_OK)
|
||||||
|
|
||||||
|
|
||||||
class EvaluationDetailViewset(CreateUpdateCustomMixin, PageOrNot,ModelViewSet):
|
class EvaluationDetailViewset(CreateUpdateCustomMixin, PageOrNot,ModelViewSet):
|
||||||
"""
|
"""
|
||||||
受理信息
|
受理信息
|
||||||
|
@ -135,7 +155,22 @@ class EvaluationDetailViewset(CreateUpdateCustomMixin, PageOrNot,ModelViewSet):
|
||||||
return Response(status=status.HTTP_200_OK)
|
return Response(status=status.HTTP_200_OK)
|
||||||
|
|
||||||
|
|
||||||
|
from rest_framework.mixins import ListModelMixin
|
||||||
|
class CertappunitViewset(PageOrNot, ListModelMixin, GenericViewSet):
|
||||||
|
perms_map={'*':'certapp_view'}
|
||||||
|
queryset = Certappunit.objects.all()
|
||||||
|
serializer_class = CertappunitSerializer
|
||||||
|
ordering= ['-id']
|
||||||
|
|
||||||
|
@action(methods=['put'], detail=True, perms_map={'put':'certapp_access'}, url_name='certappunit_access')
|
||||||
|
def access(self, request, pk=None):
|
||||||
|
"""
|
||||||
|
单元评定
|
||||||
|
"""
|
||||||
|
obj = self.get_object()
|
||||||
|
obj.decision = Dict.objects.get(pk=request.data['decision'])
|
||||||
|
obj.save()
|
||||||
|
return Response(status=status.HTTP_200_OK)
|
||||||
|
|
||||||
class ProjectViewSet(RbacFilterSet, ModelViewSet):
|
class ProjectViewSet(RbacFilterSet, ModelViewSet):
|
||||||
perms_map = {'get': 'project_view', 'post':'project_create', 'put':'project_update','delete': 'project_delete'}
|
perms_map = {'get': 'project_view', 'post':'project_create', 'put':'project_update','delete': 'project_delete'}
|
||||||
|
|
|
@ -78,6 +78,10 @@ class OrganizationSerializer(serializers.ModelSerializer):
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
class UserSimpleSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = User
|
||||||
|
fields = ['id', 'name', 'username']
|
||||||
class UserListSerializer(serializers.ModelSerializer):
|
class UserListSerializer(serializers.ModelSerializer):
|
||||||
"""
|
"""
|
||||||
用户列表序列化
|
用户列表序列化
|
||||||
|
|
|
@ -40,7 +40,7 @@ urlpatterns = [
|
||||||
path('plan/', include('apps.plan.urls')),
|
path('plan/', include('apps.plan.urls')),
|
||||||
path('audit/', include('apps.audit.urls')),
|
path('audit/', include('apps.audit.urls')),
|
||||||
path('laboratory/', include('apps.laboratory.urls')),
|
path('laboratory/', include('apps.laboratory.urls')),
|
||||||
path('accessment/', include('apps.accessment.urls')),
|
# path('accessment/', include('apps.accessment.urls')),
|
||||||
path('docs/', include_docs_urls(title="接口文档",
|
path('docs/', include_docs_urls(title="接口文档",
|
||||||
authentication_classes=[], permission_classes=[])),
|
authentication_classes=[], permission_classes=[])),
|
||||||
path('signature/', GenSignature.as_view(), name='gen_signature'),
|
path('signature/', GenSignature.as_view(), name='gen_signature'),
|
||||||
|
|
Loading…
Reference in New Issue