下拉内容
This commit is contained in:
commit
0659467696
|
@ -7,7 +7,40 @@ export function getCertappunitList(query) {
|
||||||
params: query
|
params: query
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
export function getCertappunit(id) {
|
||||||
|
return request({
|
||||||
|
url: `/project/certappunit/${id}/`,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export function accessCertappunit(id,data) {
|
||||||
|
return request({
|
||||||
|
url: `/project/certappunit/${id}/access/`,
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export function testtaskCertappunit(id,data) {
|
||||||
|
return request({
|
||||||
|
url: `/project/certappunit/${id}/testtask/`,
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export function teststateCertappunit(id,data) {
|
||||||
|
return request({
|
||||||
|
url: `/project/certappunit/${id}/teststate/`,
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export function createsamplesCertappunit(id,data) {
|
||||||
|
return request({
|
||||||
|
url: `/project/certappunit/${id}/createsamples/`,
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
// export function createAccess(data) {
|
// export function createAccess(data) {
|
||||||
// return request({
|
// return request({
|
||||||
// url: '/accessment/certass/',
|
// url: '/accessment/certass/',
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
export function getCertificateList(query) {
|
||||||
|
return request({
|
||||||
|
url: '/certificate/certificate/',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createCertificate(data) {
|
||||||
|
return request({
|
||||||
|
url: '/certificate/certificate/',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -212,6 +212,19 @@ export const asyncRoutes = [
|
||||||
component: () => import('@/views/testorg/testorgnotice'),
|
component: () => import('@/views/testorg/testorgnotice'),
|
||||||
meta: { title: '实验室通知公告', icon: 'example', perms: ['testorg_manage'] }
|
meta: { title: '实验室通知公告', icon: 'example', perms: ['testorg_manage'] }
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'taskmanagement',
|
||||||
|
name: 'TaskManagement',
|
||||||
|
component: () => import('@/views/testorg/taskmanagement'),
|
||||||
|
meta: { title: '任务管理', icon: 'example', perms: ['testorg_manage'] }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'feedback/create',
|
||||||
|
name: 'FeedbackCreate',
|
||||||
|
component: () => import('@/views/testorg/feedback.vue'),
|
||||||
|
meta: { title: '任务反馈', noCache: true, icon: '', perms: ['feedback_create']},
|
||||||
|
hidden: true
|
||||||
|
},
|
||||||
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -244,12 +257,25 @@ export const asyncRoutes = [
|
||||||
name: 'CertificateManage',
|
name: 'CertificateManage',
|
||||||
meta: { title: '证书管理', icon: 'example'},
|
meta: { title: '证书管理', icon: 'example'},
|
||||||
children: [
|
children: [
|
||||||
|
{
|
||||||
|
path: 'issueindex',
|
||||||
|
name: 'issueindex',
|
||||||
|
component: () => import('@/views/certificate/issueindex'),
|
||||||
|
meta: { title: '证书颁发', icon: 'example', perms: ['certificate_issue'] }
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: 'index',
|
path: 'index',
|
||||||
name: 'Certificate',
|
name: 'Certificate',
|
||||||
component: () => import('@/views/certificate/index'),
|
component: () => import('@/views/certificate/index'),
|
||||||
meta: { title: '证书管理', icon: 'example', perms: ['certificate_view'] }
|
meta: { title: '证书管理', icon: 'example', perms: ['certificate_view'] }
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'certapp/:id/:action/',
|
||||||
|
name: 'Certissue',
|
||||||
|
component: () => import('@/views/certapp/certapphandle'),
|
||||||
|
meta: { title: '证书颁发', icon: 'example', perms: ['certificate_issue'] },
|
||||||
|
hidden: true
|
||||||
|
},
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
>
|
>
|
||||||
<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.name }}</template>
|
<template slot-scope="scope" v-if="scope.row.certunit_">{{ scope.row.certunit_.name }}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="证书信息">
|
<el-table-column label="证书信息">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
@ -83,38 +83,59 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="认证决定">
|
<el-table-column label="认证决定">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<!-- <el-button
|
<el-select
|
||||||
type="danger"
|
v-model="scope.row.decision"
|
||||||
size="small"
|
clearable
|
||||||
:disabled="!checkPermission(['certapps_update'])"
|
collapse-tags
|
||||||
@click="handleDelete(scope)"
|
:style="{width: '100%'}"
|
||||||
>删除</el-button> -->
|
@change="((val)=>{handleAcessunit(val, scope.row.id)})"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="(item, index) in decisionOptions"
|
||||||
|
:key="index"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"
|
||||||
|
:disabled="item.disabled"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作">
|
<!-- <el-table-column label="操作">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<!-- <el-button
|
<el-button
|
||||||
type="danger"
|
type="primary"
|
||||||
size="small"
|
size="small"
|
||||||
:disabled="!checkPermission(['certapps_update'])"
|
:disabled="!checkPermission(['certapp_access'])"
|
||||||
@click="handleDelete(scope)"
|
@click="handleAcessunit(scope)"
|
||||||
>删除</el-button> -->
|
>决定</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column> -->
|
||||||
</el-table>
|
</el-table>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
<!-- <el-dialog title="决定" :visible.sync="dialogVisible">
|
||||||
|
<el-select>
|
||||||
|
|
||||||
|
</el-select>
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||||
|
<el-button type="primary" @click="dialogVisible = false">确 定</el-button>
|
||||||
|
</span>
|
||||||
|
</el-dialog> -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { getDictList } from "@/api/dict"
|
import { getDictList } from "@/api/dict"
|
||||||
import { accessCertapp, getCertapp } from "@/api/certapp"
|
import { accessCertapp, getCertapp } from "@/api/certapp"
|
||||||
import { getCertappunitList } from "@/api/certappunit"
|
import { getCertappunitList, accessCertappunit } from "@/api/certappunit"
|
||||||
import { getCertunitList } from "@/api/certunit";
|
import { getCertunitList } from "@/api/certunit";
|
||||||
|
import checkPermission from "@/utils/permission";
|
||||||
export default {
|
export default {
|
||||||
name: "access",
|
name: "access",
|
||||||
props:['certapp'],
|
props:['certapp'],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
dialogVisible:false,
|
||||||
listLoading: false,
|
listLoading: false,
|
||||||
tableData: [],
|
tableData: [],
|
||||||
formData:{},
|
formData:{},
|
||||||
|
@ -143,6 +164,7 @@ export default {
|
||||||
},
|
},
|
||||||
conclusionOptions:[],
|
conclusionOptions:[],
|
||||||
nonOptions:[],
|
nonOptions:[],
|
||||||
|
decisionOptions:[],
|
||||||
tableUnitData: [],
|
tableUnitData: [],
|
||||||
listQuery:{
|
listQuery:{
|
||||||
pageoff:true,
|
pageoff:true,
|
||||||
|
@ -154,9 +176,16 @@ export default {
|
||||||
this.getConclusion()
|
this.getConclusion()
|
||||||
this.getOptions1()
|
this.getOptions1()
|
||||||
this.getOptions2()
|
this.getOptions2()
|
||||||
this.getUnitList();
|
this.getUnitList()
|
||||||
|
this.getDecisionOptions()
|
||||||
},
|
},
|
||||||
methods:{
|
methods:{
|
||||||
|
checkPermission,
|
||||||
|
getDecisionOptions() {
|
||||||
|
getDictList({type__code:'cert_decision', pageoff:true}).then(res=>{
|
||||||
|
this.decisionOptions = res.data
|
||||||
|
})
|
||||||
|
},
|
||||||
getConclusion() {
|
getConclusion() {
|
||||||
getCertapp(this.certapp).then(res=>{
|
getCertapp(this.certapp).then(res=>{
|
||||||
if(res.data){
|
if(res.data){
|
||||||
|
@ -176,12 +205,9 @@ export default {
|
||||||
},
|
},
|
||||||
getUnitList() {
|
getUnitList() {
|
||||||
this.listLoading = true;
|
this.listLoading = true;
|
||||||
getCertappunitList(this.listQuery).then((response) => {
|
getCertappunitList(this.listQuery).then(res => {
|
||||||
|
if (res.data) {
|
||||||
if (response.data) {
|
this.tableUnitData = res.data;
|
||||||
|
|
||||||
this.tableUnitData = response.data;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
this.listLoading = false;
|
this.listLoading = false;
|
||||||
});
|
});
|
||||||
|
@ -193,6 +219,12 @@ export default {
|
||||||
this.$message.success('成功')
|
this.$message.success('成功')
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
handleAcessunit(val,id){
|
||||||
|
accessCertappunit(id, {'decision':val}).then(res=>{
|
||||||
|
this.$message.success('成功')
|
||||||
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -64,7 +64,7 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="当前状态">
|
<el-table-column label="当前状态">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ scope.row.status}}
|
{{ scope.row.state}}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="创建人">
|
<el-table-column label="创建人">
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="当前状态">
|
<el-table-column label="当前状态">
|
||||||
<template slot-scope="scope">{{ scope.row.status}}</template>
|
<template slot-scope="scope">{{ scope.row.state}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="创建人">
|
<el-table-column label="创建人">
|
||||||
<template slot-scope="scope">{{ scope.row.create_by_.name}}</template>
|
<template slot-scope="scope">{{ scope.row.create_by_.name}}</template>
|
||||||
|
@ -105,7 +105,7 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="当前状态">
|
<el-table-column label="当前状态">
|
||||||
<template slot-scope="scope">{{ scope.row.status}}</template>
|
<template slot-scope="scope">{{ scope.row.state}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="是否可派差">
|
<el-table-column label="是否可派差">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
@ -165,12 +165,12 @@ export default {
|
||||||
return {
|
return {
|
||||||
listLoading: true,
|
listLoading: true,
|
||||||
listQuery: {
|
listQuery: {
|
||||||
status: "已受理",
|
state: "已受理",
|
||||||
},
|
},
|
||||||
listQuery_project: {
|
listQuery_project: {
|
||||||
page: 1,
|
page: 1,
|
||||||
page_size: 20,
|
page_size: 20,
|
||||||
status:"待策划"
|
state:"待策划"
|
||||||
},
|
},
|
||||||
projectData: { count: 0, results: [] },
|
projectData: { count: 0, results: [] },
|
||||||
};
|
};
|
||||||
|
@ -193,7 +193,7 @@ export default {
|
||||||
},
|
},
|
||||||
resetFilter() {
|
resetFilter() {
|
||||||
this.listQuery = {
|
this.listQuery = {
|
||||||
status: "已受理",
|
state: "已受理",
|
||||||
};
|
};
|
||||||
this.getCertappList_();
|
this.getCertappList_();
|
||||||
},
|
},
|
||||||
|
|
|
@ -62,7 +62,7 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="当前状态">
|
<el-table-column label="当前状态">
|
||||||
<template slot-scope="scope">{{ scope.row.status}}</template>
|
<template slot-scope="scope">{{ scope.row.state}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="审核组成员">
|
<el-table-column label="审核组成员">
|
||||||
<template slot-scope="scope" v-if="scope.row.members">
|
<template slot-scope="scope" v-if="scope.row.members">
|
||||||
|
@ -139,7 +139,7 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="当前状态">
|
<el-table-column label="当前状态">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ scope.row.status}}
|
{{ scope.row.state}}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="审核组成员">
|
<el-table-column label="审核组成员">
|
||||||
|
|
|
@ -88,7 +88,7 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="当前状态">
|
<el-table-column label="当前状态">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ scope.row.status}}
|
{{ scope.row.state}}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="创建人">
|
<el-table-column label="创建人">
|
||||||
|
|
|
@ -43,11 +43,14 @@
|
||||||
<el-tab-pane label="现场审核反馈" name="Certappfeedback" v-if="certapp" lazy>
|
<el-tab-pane label="现场审核反馈" name="Certappfeedback" v-if="certapp" lazy>
|
||||||
<Conclusion :certapp="certapp"></Conclusion>
|
<Conclusion :certapp="certapp"></Conclusion>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="安排检测任务" name="Certapptask" v-if="certapp" lazy>
|
||||||
|
<Detectiontask :certapp="certapp"></Detectiontask>
|
||||||
|
</el-tab-pane>
|
||||||
<el-tab-pane label="认证评定" name="Certappaccess" v-if="certapp" lazy>
|
<el-tab-pane label="认证评定" name="Certappaccess" v-if="certapp" lazy>
|
||||||
<access :certapp="certapp"></access>
|
<access :certapp="certapp"></access>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="安排检测任务" name="Certapptask" v-if="certapp" lazy>
|
<el-tab-pane label="证书颁发" name="Certissue" v-if="certapp" lazy>
|
||||||
<Detectiontask :certapp="certapp"></Detectiontask>
|
<issue :certapp="certapp"></issue>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
@ -82,14 +85,17 @@ import Conclusion from "@/views/audit/conclusion"
|
||||||
import Member from "@/views/audit/member"
|
import Member from "@/views/audit/member"
|
||||||
import access from "@/views/accessment/access"
|
import access from "@/views/accessment/access"
|
||||||
import REVIEW from "@/views/certapp/review"
|
import REVIEW from "@/views/certapp/review"
|
||||||
|
import issue from "@/views/certificate/issue"
|
||||||
import Detectiontask from "@/views/certapp/detectiontask"
|
import Detectiontask from "@/views/certapp/detectiontask"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|
||||||
components: { CCCform,Detectiontask, Certunit, QMSform, Conclusion, Member, access, CHARGE, REVIEW},
|
components: { CCCform,Detectiontask,Certunit, QMSform, Conclusion, Member, access, CHARGE, REVIEW, issue},
|
||||||
|
|
||||||
props: [],
|
props: [],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
// steps:['申请', '受理', ''],
|
||||||
activeName:'Basic',
|
activeName:'Basic',
|
||||||
certapp:null,
|
certapp:null,
|
||||||
certappdata:null,
|
certappdata:null,
|
||||||
|
|
|
@ -152,6 +152,7 @@ export default {
|
||||||
pageoff:true,
|
pageoff:true,
|
||||||
certappunit_certunit__certapp:this.certapp
|
certappunit_certunit__certapp:this.certapp
|
||||||
},
|
},
|
||||||
|
delarr: [],
|
||||||
formData: {
|
formData: {
|
||||||
certapp:this.certapp,
|
certapp:this.certapp,
|
||||||
implementrule: undefined,
|
implementrule: undefined,
|
||||||
|
|
|
@ -13,11 +13,26 @@
|
||||||
>
|
>
|
||||||
|
|
||||||
<el-table-column type="index" width="50" />
|
<el-table-column type="index" width="50" />
|
||||||
|
<el-table-column label="状态">
|
||||||
|
<template slot-scope="scope" >{{ scope.row.teststate }}</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column label="检测任务号">
|
<el-table-column label="检测任务号">
|
||||||
<template slot-scope="scope" >{{ scope.row.detnumber }}</template>
|
<template slot-scope="scope" >{{ scope.row.detnumber }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="检测单元">
|
||||||
|
<template slot-scope="scope" >{{ scope.row.certunit_.name }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="样品描述">
|
||||||
|
<template slot-scope="scope" >{{ scope.row.sampledec }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="收费方式">
|
||||||
|
<template slot-scope="scope" >{{ scope.row.charge }}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="被委托检测机构">
|
<el-table-column label="被委托检测机构">
|
||||||
<template slot-scope="scope" >{{ scope.row.testorg}}</template>
|
<template slot-scope="scope" >{{ scope.row.testorg_.name}}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="检验项目">
|
||||||
|
<template slot-scope="scope" >{{ scope.row.testitem}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="创建时间">
|
<el-table-column label="创建时间">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
@ -26,18 +41,26 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作">
|
<el-table-column label="操作">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
<el-button-group>
|
||||||
<el-button
|
<el-button
|
||||||
type="danger"
|
type="danger"
|
||||||
size="small"
|
size="small"
|
||||||
:disabled="!checkPermission(['certapps_update'])"
|
:disabled="!checkPermission(['certapps_update'])"
|
||||||
@click="handleDelete(scope)"
|
@click="handleDelete(scope)"
|
||||||
>删除</el-button>
|
>删除</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="small"
|
||||||
|
:disabled="!checkPermission(['certapps_update'])"
|
||||||
|
@click="handlestate(scope.row.id)"
|
||||||
|
>下达实验室</el-button>
|
||||||
|
</el-button-group>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
|
|
||||||
<el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="150px" style="margin-top:10px">
|
<el-form ref="elForm" :model="formData" 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">
|
||||||
<el-select v-model="formData.testorg" placeholder="请选择检测机构" clearable :style="{width: '100%'}">
|
<el-select v-model="formData.testorg" placeholder="请选择检测机构" clearable :style="{width: '100%'}">
|
||||||
|
@ -97,15 +120,14 @@
|
||||||
<el-form-item label="检测任务号" prop="detnumber">
|
<el-form-item label="检测任务号" prop="detnumber">
|
||||||
<el-input v-model="formData.detnumber"
|
<el-input v-model="formData.detnumber"
|
||||||
placeholder="请输入检测任务号"
|
placeholder="请输入检测任务号"
|
||||||
readonly
|
|
||||||
clearable
|
clearable
|
||||||
:style="{width: '100%'}"
|
:style="{width: '100%'}"
|
||||||
></el-input>
|
></el-input>
|
||||||
</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="testunity">
|
<el-form-item label="检测单元" prop="certunit">
|
||||||
<el-select v-model="formData.testunity" placeholder="请选择检测单元" clearable :style="{width: '100%'}">
|
<el-select v-model="formData.certunit" placeholder="请选择检测单元" clearable :style="{width: '100%'}">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="(item, index) in unitOptions"
|
v-for="(item, index) in unitOptions"
|
||||||
:key="index"
|
:key="index"
|
||||||
|
@ -118,8 +140,8 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
<el-col :xs="24" :md="12">
|
<el-col :xs="24" :md="12">
|
||||||
<el-form-item label="样品描述" prop="standard">
|
<el-form-item label="样品描述" prop="sampledec">
|
||||||
<el-input type="textarea" :rows="5"
|
<el-input v-model="formData.sampledec" type="textarea" :rows="5"
|
||||||
clearable
|
clearable
|
||||||
:style="{width: '100%'}"></el-input>
|
:style="{width: '100%'}"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
@ -134,6 +156,7 @@
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item size="large">
|
<el-form-item size="large">
|
||||||
<el-button type="primary" @click="createNew">保存</el-button>
|
<el-button type="primary" @click="createNew">保存</el-button>
|
||||||
|
<el-button type="primary" @click="updatestate">提交CTC</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
@ -143,7 +166,7 @@
|
||||||
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 { getCertunitList } from "@/api/certunit";
|
||||||
import {getCertappunitList} from "@/api/certappunit";
|
import { getCertappunitList, testtaskCertappunit,teststateCertappunit } 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";
|
||||||
|
@ -171,7 +194,7 @@ export default {
|
||||||
testitem:undefined,
|
testitem:undefined,
|
||||||
detnumber:undefined,
|
detnumber:undefined,
|
||||||
remark:undefined,
|
remark:undefined,
|
||||||
testunity:undefined
|
sampledec:undefined
|
||||||
},
|
},
|
||||||
TestOptions:[],
|
TestOptions:[],
|
||||||
unitOptions:[],
|
unitOptions:[],
|
||||||
|
@ -214,16 +237,16 @@ export default {
|
||||||
this.listLoading = true;
|
this.listLoading = true;
|
||||||
|
|
||||||
getCertappunitList({ pageoff:true,
|
getCertappunitList({ pageoff:true,
|
||||||
certappunit_certunit__certapp:this.certapp}).then((response) => {
|
certapp:this.certapp}).then((response) => {
|
||||||
|
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
|
this.tableData = response.data;
|
||||||
this.tableData = response.data;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
this.listLoading = false;
|
this.listLoading = false;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
gettunitList() {
|
gettunitList() {
|
||||||
this.listLoading = true;
|
this.listLoading = true;
|
||||||
getCertunitList(this.listQuery1).then(res=>{
|
getCertunitList(this.listQuery1).then(res=>{
|
||||||
|
@ -234,17 +257,36 @@ export default {
|
||||||
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
getTestOptions(){
|
getTestOptions(){
|
||||||
getTestOrgList().then(res=>{
|
getTestOrgList().then(res=>{
|
||||||
this.TestOptions = genTree(res.data.results)
|
this.TestOptions = genTree(res.data.results)
|
||||||
})
|
})
|
||||||
|
|
||||||
},
|
},
|
||||||
getDataList(){
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
handlestate(id){
|
||||||
|
var val='待实验室检验';
|
||||||
|
teststateCertappunit(id, {'teststate':val}).then(res=>{
|
||||||
|
this.$message.success('成功')
|
||||||
|
})
|
||||||
|
|
||||||
|
},
|
||||||
|
createNew() {
|
||||||
|
this.$refs["elForm"].validate((valid) => {
|
||||||
|
if (!valid) return;
|
||||||
|
testtaskCertappunit(this.formData.id, this.formData).then((res) => {
|
||||||
|
this.$message.success('成功')
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
updatestate()
|
||||||
|
{
|
||||||
|
alert(提交CTC还没有做)
|
||||||
|
},
|
||||||
|
rowClick(row, column, event){
|
||||||
|
this.formData = Object.assign({}, row);
|
||||||
|
console.log( this.formData)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
<template>
|
|
||||||
<div>
|
|
||||||
<el-card >
|
|
||||||
<div slot="header" class="clearfix">
|
|
||||||
<span>认证结果评价</span>
|
|
||||||
<el-button type="primary" >创建</el-button>
|
|
||||||
</div>
|
|
||||||
<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>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name:'access',
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
listLoading:false,
|
|
||||||
tableData:[]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
</script>
|
|
|
@ -59,7 +59,7 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="当前状态">
|
<el-table-column label="当前状态">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ scope.row.status}}
|
{{ scope.row.state}}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="创建人">
|
<el-table-column label="创建人">
|
||||||
|
|
|
@ -0,0 +1,136 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-table
|
||||||
|
v-loading="listLoading"
|
||||||
|
:data="tableUnitData"
|
||||||
|
style="width: 100%;"
|
||||||
|
border
|
||||||
|
fit
|
||||||
|
stripe
|
||||||
|
highlight-current-row
|
||||||
|
height="380"
|
||||||
|
>
|
||||||
|
<el-table-column type="index" width="50" />
|
||||||
|
<el-table-column label="单元名称">
|
||||||
|
<template slot-scope="scope" v-if="scope.row.certunit_">{{ scope.row.certunit_.name }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="证书信息">
|
||||||
|
<template slot-scope="scope" v-if="scope.row.certificate_">
|
||||||
|
{{scope.row.certificate_.number}}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="认证决定">
|
||||||
|
<template slot-scope="scope" v-if="scope.row.decision_">
|
||||||
|
{{ scope.row.decision_.name }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="small"
|
||||||
|
:disabled="!checkPermission(['certificate_issue'])"
|
||||||
|
@click="handleIssue(scope)"
|
||||||
|
>发证</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<el-drawer
|
||||||
|
title="发证"
|
||||||
|
:visible.sync="drawerVisible"
|
||||||
|
direction="rtl"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:with-header="false">
|
||||||
|
|
||||||
|
</el-drawer>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { getDictList } from "@/api/dict"
|
||||||
|
import { accessCertapp, getCertapp } from "@/api/certapp"
|
||||||
|
import { getCertappunitList, accessCertappunit } from "@/api/certappunit"
|
||||||
|
import { getCertunitList } from "@/api/certunit";
|
||||||
|
import checkPermission from "@/utils/permission";
|
||||||
|
import { createCertificate } from "@/api/certificate"
|
||||||
|
export default {
|
||||||
|
name: "issue",
|
||||||
|
props:['certapp'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
drawerVisible:false,
|
||||||
|
listLoading: false,
|
||||||
|
tableData: [],
|
||||||
|
formData:{},
|
||||||
|
rules:{
|
||||||
|
conclusion: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "请选择",
|
||||||
|
trigger: "blur",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
nonitems: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "请选择",
|
||||||
|
trigger: "blur",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
score: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "请输入",
|
||||||
|
trigger: "blur",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
conclusionOptions:[],
|
||||||
|
nonOptions:[],
|
||||||
|
decisionOptions:[],
|
||||||
|
tableUnitData: [],
|
||||||
|
listQuery:{
|
||||||
|
pageoff:true,
|
||||||
|
certapp:this.certapp
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getUnitList()
|
||||||
|
this.getDecisionOptions()
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
checkPermission,
|
||||||
|
getDecisionOptions() {
|
||||||
|
getDictList({type__code:'cert_decision', pageoff:true}).then(res=>{
|
||||||
|
this.decisionOptions = res.data
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getConclusion() {
|
||||||
|
getCertapp(this.certapp).then(res=>{
|
||||||
|
if(res.data){
|
||||||
|
this.formData = res.data
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getUnitList() {
|
||||||
|
this.listLoading = true;
|
||||||
|
getCertappunitList(this.listQuery).then(res => {
|
||||||
|
if (res.data) {
|
||||||
|
this.tableUnitData = res.data;
|
||||||
|
}
|
||||||
|
this.listLoading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleIssue(scope){
|
||||||
|
// this.drawerVisible = true
|
||||||
|
createCertificate({certunit:scope.row.certunit, first_send:'2020-06-19', used_start:'2020-06-19', used_end:'2021-11-11'}).then(res=>{
|
||||||
|
this.$message.success('成功')
|
||||||
|
this.getUnitList()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
|
@ -0,0 +1,180 @@
|
||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<div style="display:flex">
|
||||||
|
<treeselect
|
||||||
|
v-model="listQuery.user__dept"
|
||||||
|
:multiple="false"
|
||||||
|
:options="deptOptions"
|
||||||
|
placeholder="所属组织"
|
||||||
|
:disable-branch-nodes="true"
|
||||||
|
@input="handleFilter"
|
||||||
|
style="width: 280px" clearable/>
|
||||||
|
|
||||||
|
<el-input
|
||||||
|
v-model="listQuery.search"
|
||||||
|
placeholder="姓名/易记码/编号/注册领域"
|
||||||
|
style="width: 300px;margin-left:10px"
|
||||||
|
class="filter-item"
|
||||||
|
@keyup.enter.native="handleFilter"
|
||||||
|
/>
|
||||||
|
<el-button
|
||||||
|
class="filter-item"
|
||||||
|
type="primary"
|
||||||
|
icon="el-icon-search"
|
||||||
|
@click="handleFilter"
|
||||||
|
>搜索</el-button>
|
||||||
|
<el-button
|
||||||
|
class="filter-item"
|
||||||
|
type="primary"
|
||||||
|
icon="el-icon-refresh-left"
|
||||||
|
@click="resetFilter"
|
||||||
|
>刷新重置</el-button>
|
||||||
|
</div>
|
||||||
|
<el-table
|
||||||
|
v-loading="listLoading"
|
||||||
|
:data="tableData.results"
|
||||||
|
style="width: 100%;margin-top:10px;"
|
||||||
|
border
|
||||||
|
fit
|
||||||
|
stripe
|
||||||
|
highlight-current-row
|
||||||
|
|
||||||
|
>
|
||||||
|
<el-table-column type="index" width="50" />
|
||||||
|
<el-table-column label="申请单号">
|
||||||
|
<template slot-scope="scope" v-if="scope.row.number">{{ scope.row.number }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="认证领域/分类">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-tag >{{scope.row.cert_field_.name}}</el-tag>
|
||||||
|
<el-tag v-if="scope.row.cccpv_class_" type="warning" style="margin:2px">{{scope.row.cccpv_class_.name}}</el-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="申请信息" width="300px">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<div><span style="color:darkblue;font-weight:bold">申请方</span>:{{ scope.row.applicant_v.name }}</div>
|
||||||
|
<div v-if="scope.row.manufacture"><span style="color:darkblue;font-weight:bold">制造商</span>:{{ scope.row.manufacture_v.name }}</div>
|
||||||
|
<div v-if="scope.row.factory"><span style="color:darkblue;font-weight:bold">生产厂</span>:{{ scope.row.factory_v.name }}</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="当前状态">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.state}}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="创建人">
|
||||||
|
<template slot-scope="scope">{{ scope.row.create_by_.name}}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="创建日期">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ scope.row.create_time }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" fixed="right">
|
||||||
|
<template slot-scope="scope" >
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="small"
|
||||||
|
:disabled="!checkPermission(['certapp_accessment'])"
|
||||||
|
@click="handleIssue(scope)"
|
||||||
|
>颁发</el-button>
|
||||||
|
<el-button
|
||||||
|
size="small"
|
||||||
|
:disabled="!checkPermission(['certapp_detail'])"
|
||||||
|
@click="handleCertappDetail(scope)"
|
||||||
|
>详情</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination
|
||||||
|
v-show="tableData.count>0"
|
||||||
|
:total="tableData.count"
|
||||||
|
:page.sync="listQuery.page"
|
||||||
|
:limit.sync="listQuery.page_size"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { getCertappList, deleteCertapp } from "@/api/certapp"
|
||||||
|
import { getOrgList } from "@/api/org"
|
||||||
|
import { getDictList } from "@/api/dict"
|
||||||
|
import Pagination from "@/components/Pagination"
|
||||||
|
import checkPermission from '@/utils/permission'
|
||||||
|
import Treeselect from '@riophae/vue-treeselect'
|
||||||
|
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||||
|
import { genTree } from '../../utils'
|
||||||
|
export default {
|
||||||
|
components: { Pagination, Treeselect },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
tableData: {count:0},
|
||||||
|
listLoading: true,
|
||||||
|
listQuery: {
|
||||||
|
page: 1,
|
||||||
|
page_size: 20
|
||||||
|
},
|
||||||
|
deptOptions: [],
|
||||||
|
field_list:[]
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getList()
|
||||||
|
this.getdeptOptions()
|
||||||
|
this.getfields()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
checkPermission,
|
||||||
|
getList() {
|
||||||
|
this.listLoading = true;
|
||||||
|
getCertappList(this.listQuery).then(response => {
|
||||||
|
if (response.data) {
|
||||||
|
this.tableData = response.data
|
||||||
|
}
|
||||||
|
this.listLoading = false
|
||||||
|
});
|
||||||
|
},
|
||||||
|
getdeptOptions() {
|
||||||
|
getOrgList().then(res=>{
|
||||||
|
this.deptOptions = genTree(res.data)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
resetFilter() {
|
||||||
|
this.listQuery = {
|
||||||
|
page: 1,
|
||||||
|
page_size: 20
|
||||||
|
}
|
||||||
|
this.getList()
|
||||||
|
},
|
||||||
|
handleFilter() {
|
||||||
|
this.listQuery.page = 1
|
||||||
|
this.getList()
|
||||||
|
},
|
||||||
|
getfields(){
|
||||||
|
getDictList({type__code:'cert_field'}).then(res=>{
|
||||||
|
let fields = []
|
||||||
|
for(var i=0;i<res.data.length;i++){
|
||||||
|
if(res.data[i].parent!=null){
|
||||||
|
fields.push({id:res.data[i].id, name:res.data[i].name, code:res.data[i].code})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.field_list = fields
|
||||||
|
})
|
||||||
|
|
||||||
|
},
|
||||||
|
handleCertappDetail(scope) {
|
||||||
|
this.$router.push({
|
||||||
|
name: "Certappdetail",
|
||||||
|
params: { id: scope.row.id },
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleIssue(scope) {
|
||||||
|
this.$router.push({
|
||||||
|
name: "Certissue",
|
||||||
|
params: { id: scope.row.id, action:'issue' },
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
|
@ -45,7 +45,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="text item">
|
<div class="text item">
|
||||||
<span class="span">当前状态</span>
|
<span class="span">当前状态</span>
|
||||||
{{project.status}}
|
{{project.state}}
|
||||||
</div>
|
</div>
|
||||||
<div class="text item" v-if="project.assign_by_">
|
<div class="text item" v-if="project.assign_by_">
|
||||||
<span class="span">下达人</span>
|
<span class="span">下达人</span>
|
||||||
|
@ -111,7 +111,7 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>-->
|
</el-table-column>-->
|
||||||
<el-table-column label="当前状态">
|
<el-table-column label="当前状态">
|
||||||
<template slot-scope="scope">{{ scope.row.status}}</template>
|
<template slot-scope="scope">{{ scope.row.state}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="受理/确认人">
|
<el-table-column label="受理/确认人">
|
||||||
<template
|
<template
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="当前状态">
|
<el-table-column label="当前状态">
|
||||||
<template slot-scope="scope">{{ scope.row.status}}</template>
|
<template slot-scope="scope">{{ scope.row.state}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="创建人">
|
<el-table-column label="创建人">
|
||||||
<template slot-scope="scope">{{ scope.row.create_by_.name}}</template>
|
<template slot-scope="scope">{{ scope.row.create_by_.name}}</template>
|
||||||
|
@ -105,7 +105,7 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="当前状态">
|
<el-table-column label="当前状态">
|
||||||
<template slot-scope="scope">{{ scope.row.status}}</template>
|
<template slot-scope="scope">{{ scope.row.state}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="是否可派差">
|
<el-table-column label="是否可派差">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
@ -165,12 +165,12 @@ export default {
|
||||||
return {
|
return {
|
||||||
listLoading: true,
|
listLoading: true,
|
||||||
listQuery: {
|
listQuery: {
|
||||||
status: "已受理",
|
state: "已受理",
|
||||||
},
|
},
|
||||||
listQuery_project: {
|
listQuery_project: {
|
||||||
page: 1,
|
page: 1,
|
||||||
page_size: 20,
|
page_size: 20,
|
||||||
status:"待策划"
|
state:"待策划"
|
||||||
},
|
},
|
||||||
projectData: { count: 0, results: [] },
|
projectData: { count: 0, results: [] },
|
||||||
};
|
};
|
||||||
|
@ -193,7 +193,7 @@ export default {
|
||||||
},
|
},
|
||||||
resetFilter() {
|
resetFilter() {
|
||||||
this.listQuery = {
|
this.listQuery = {
|
||||||
status: "已受理",
|
state: "已受理",
|
||||||
};
|
};
|
||||||
this.getCertappList_();
|
this.getCertappList_();
|
||||||
},
|
},
|
||||||
|
|
|
@ -95,7 +95,7 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="当前状态">
|
<el-table-column label="当前状态">
|
||||||
<template slot-scope="scope">{{ scope.row.status}}</template>
|
<template slot-scope="scope">{{ scope.row.state}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="创建人">
|
<el-table-column label="创建人">
|
||||||
<template slot-scope="scope">{{ scope.row.create_by_.name}}</template>
|
<template slot-scope="scope">{{ scope.row.create_by_.name}}</template>
|
||||||
|
@ -170,7 +170,7 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="当前状态">
|
<el-table-column label="当前状态">
|
||||||
<template slot-scope="scope">{{ scope.row.status}}</template>
|
<template slot-scope="scope">{{ scope.row.state}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="是否可派差">
|
<el-table-column label="是否可派差">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
@ -195,7 +195,7 @@
|
||||||
@click="planProject(scope)"
|
@click="planProject(scope)"
|
||||||
>计划</el-button>
|
>计划</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
v-if="scope.row.status !='待现场审核'"
|
v-if="scope.row.state !='待现场审核'"
|
||||||
type="primary"
|
type="primary"
|
||||||
size="small"
|
size="small"
|
||||||
:disabled="!checkPermission(['project_assgin'])||!scope.row.can_paichai"
|
:disabled="!checkPermission(['project_assgin'])||!scope.row.can_paichai"
|
||||||
|
@ -270,7 +270,7 @@ export default {
|
||||||
listQuery_project: {
|
listQuery_project: {
|
||||||
page: 1,
|
page: 1,
|
||||||
page_size: 20,
|
page_size: 20,
|
||||||
status: "待策划",
|
state: "待策划",
|
||||||
planoff: true,
|
planoff: true,
|
||||||
},
|
},
|
||||||
listQuery2: {
|
listQuery2: {
|
||||||
|
@ -326,7 +326,7 @@ export default {
|
||||||
},
|
},
|
||||||
resetFilter() {
|
resetFilter() {
|
||||||
this.listQuery = {
|
this.listQuery = {
|
||||||
status: "已受理",
|
state: "已受理",
|
||||||
};
|
};
|
||||||
this.getCertappList_();
|
this.getCertappList_();
|
||||||
},
|
},
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="text item">
|
<div class="text item">
|
||||||
<span class="span">当前状态</span>
|
<span class="span">当前状态</span>
|
||||||
{{project.status}}
|
{{project.state}}
|
||||||
</div>
|
</div>
|
||||||
<div class="text item" v-if="project.assign_by_">
|
<div class="text item" v-if="project.assign_by_">
|
||||||
<span class="span">任务下达人</span>
|
<span class="span">任务下达人</span>
|
||||||
|
@ -145,7 +145,7 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>-->
|
</el-table-column>-->
|
||||||
<el-table-column label="当前状态">
|
<el-table-column label="当前状态">
|
||||||
<template slot-scope="scope">{{ scope.row.status}}</template>
|
<template slot-scope="scope">{{ scope.row.state}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="受理/确认人">
|
<el-table-column label="受理/确认人">
|
||||||
<template
|
<template
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="当前状态">
|
<el-table-column label="当前状态">
|
||||||
<template slot-scope="scope">{{ scope.row.status}}</template>
|
<template slot-scope="scope">{{ scope.row.state}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="创建人">
|
<el-table-column label="创建人">
|
||||||
<template slot-scope="scope">{{ scope.row.create_by_.name}}</template>
|
<template slot-scope="scope">{{ scope.row.create_by_.name}}</template>
|
||||||
|
@ -111,7 +111,7 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="当前状态">
|
<el-table-column label="当前状态">
|
||||||
<template slot-scope="scope">{{ scope.row.status}}</template>
|
<template slot-scope="scope">{{ scope.row.state}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="创建人">
|
<el-table-column label="创建人">
|
||||||
<template slot-scope="scope">{{ scope.row.create_by_.name}}</template>
|
<template slot-scope="scope">{{ scope.row.create_by_.name}}</template>
|
||||||
|
@ -139,7 +139,7 @@ export default {
|
||||||
tableData: [],
|
tableData: [],
|
||||||
listLoading: true,
|
listLoading: true,
|
||||||
listQuery: {
|
listQuery: {
|
||||||
status: "已受理",
|
state: "已受理",
|
||||||
},
|
},
|
||||||
deptOptions: [],
|
deptOptions: [],
|
||||||
field_list: [],
|
field_list: [],
|
||||||
|
@ -166,7 +166,7 @@ export default {
|
||||||
},
|
},
|
||||||
resetFilter() {
|
resetFilter() {
|
||||||
this.listQuery = {
|
this.listQuery = {
|
||||||
status: "已受理",
|
state: "已受理",
|
||||||
};
|
};
|
||||||
this.getList();
|
this.getList();
|
||||||
},
|
},
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="当前状态" >
|
<el-table-column label="当前状态" >
|
||||||
<template slot-scope="scope">{{ scope.row.status}}</template>
|
<template slot-scope="scope">{{ scope.row.state}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="创建人">
|
<el-table-column label="创建人">
|
||||||
<template slot-scope="scope">{{ scope.row.create_by_.name}}</template>
|
<template slot-scope="scope">{{ scope.row.create_by_.name}}</template>
|
||||||
|
@ -44,7 +44,7 @@
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button-group>
|
<el-button-group>
|
||||||
<el-button
|
<el-button
|
||||||
v-if="scope.row.status == '创建中'"
|
v-if="scope.row.state == '创建中'"
|
||||||
type="warning"
|
type="warning"
|
||||||
size="small"
|
size="small"
|
||||||
:disabled="!checkPermission(['project_assign'])"
|
:disabled="!checkPermission(['project_assign'])"
|
||||||
|
@ -127,7 +127,7 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="当前状态">
|
<el-table-column label="当前状态">
|
||||||
<template slot-scope="scope">{{ scope.row.status}}</template>
|
<template slot-scope="scope">{{ scope.row.state}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="创建人">
|
<el-table-column label="创建人">
|
||||||
<template slot-scope="scope">{{ scope.row.create_by_.name}}</template>
|
<template slot-scope="scope">{{ scope.row.create_by_.name}}</template>
|
||||||
|
@ -193,7 +193,7 @@ export default {
|
||||||
listQuery: {
|
listQuery: {
|
||||||
page:1,
|
page:1,
|
||||||
page_size:20,
|
page_size:20,
|
||||||
status: "已受理",
|
state: "已受理",
|
||||||
},
|
},
|
||||||
listQuery_project: {
|
listQuery_project: {
|
||||||
page:1,
|
page:1,
|
||||||
|
@ -262,7 +262,7 @@ export default {
|
||||||
},
|
},
|
||||||
resetFilter() {
|
resetFilter() {
|
||||||
this.listQuery = {
|
this.listQuery = {
|
||||||
status: "已受理",
|
state: "已受理",
|
||||||
};
|
};
|
||||||
this.getCertappList_();
|
this.getCertappList_();
|
||||||
},
|
},
|
||||||
|
|
|
@ -0,0 +1,273 @@
|
||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<el-tabs type="border-card" v-model="activeName" >
|
||||||
|
|
||||||
|
<el-form ref="Form"
|
||||||
|
:model="formData"
|
||||||
|
label-width="130px"
|
||||||
|
label-position="right"
|
||||||
|
:rules="rule1">
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="检测任务号" prop="detnumber">
|
||||||
|
<el-input v-model="formData.detnumber" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="认证性质" prop="name">
|
||||||
|
<el-input v-model="formData.name" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="生产企业" prop="">
|
||||||
|
<el-input v-model="formData.certunit_.enterprise_.name" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="生产单位地址" prop="contactman">
|
||||||
|
<el-input v-model="formData.contactman" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="单元描述" prop="ontactManTel">
|
||||||
|
<el-input v-model="formData.certunit_.description" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="样品描述" prop="sampledec">
|
||||||
|
<el-input v-model="formData.sampledec" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="到样日期" prop="sampledate">
|
||||||
|
|
||||||
|
<el-date-picker v-model="formData.sampledate"
|
||||||
|
type="date"
|
||||||
|
placeholder="选择日期"
|
||||||
|
format="yyyy 年 MM 月 dd 日"
|
||||||
|
value-format="yyyy-MM-dd":style="{width: '100%'}">
|
||||||
|
</el-date-picker>
|
||||||
|
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="完成日期" prop="completedate">
|
||||||
|
<el-date-picker v-model="formData.completedate"
|
||||||
|
type="date"
|
||||||
|
placeholder="选择日期"
|
||||||
|
format="yyyy 年 MM 月 dd 日"
|
||||||
|
value-format="yyyy-MM-dd":style="{width: '100%'}">
|
||||||
|
</el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="报告签发日期" prop="issuancedate">
|
||||||
|
<el-date-picker v-model="formData.issuancedate"
|
||||||
|
type="date"
|
||||||
|
placeholder="选择日期"
|
||||||
|
format="yyyy 年 MM 月 dd 日"
|
||||||
|
value-format="yyyy-MM-dd":style="{width: '100%'}">
|
||||||
|
</el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="检验结论" prop="conclusion">
|
||||||
|
<el-select placeholder="请选择检验结论" v-model="formData.conclusion" filterable allow-create :style="{width: '100%'}"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="(item, index) in conclusionOptions"
|
||||||
|
:key="index"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
:disabled="item.disabled"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="检测状态" prop="inspectionstate">
|
||||||
|
<el-select placeholder="请选择检测状态" v-model="formData.inspectionstate" filterable allow-create :style="{width: '100%'}"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="(item, index) in inspectionOptions"
|
||||||
|
:key="index"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
:disabled="item.disabled"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="确认的收费方式" prop="password">
|
||||||
|
<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 :span="24">
|
||||||
|
<el-form-item label="不符合项目描述" prop="resultremark">
|
||||||
|
<el-input type="textarea"
|
||||||
|
:rows="2"
|
||||||
|
v-model="formData.resultremark">
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="备注" prop="remarks">
|
||||||
|
<el-input type="textarea"
|
||||||
|
:rows="2"
|
||||||
|
v-model="formData.remarks">
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="相关文件资料" prop="path">
|
||||||
|
<el-upload
|
||||||
|
:on-preview="handlePreview"
|
||||||
|
:on-success="handleSuccess"
|
||||||
|
:action="upUrl"
|
||||||
|
:headers="upHeaders"
|
||||||
|
:limit="1"
|
||||||
|
:file-list="fileList"
|
||||||
|
>
|
||||||
|
<el-button size="small" type="primary">点击上传</el-button>
|
||||||
|
</el-upload>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24" style="margin-top:4px">
|
||||||
|
<el-form-item size="large">
|
||||||
|
<el-button type="danger" @click="resetForm">取消</el-button>
|
||||||
|
<el-button type="primary" @click="submitForm">确认</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { getTestOrgList, createTestOrg, updateTestOrg, deleteTestOrg } from "@/api/laboratory"
|
||||||
|
import { getCertappunitList,getCertappunit,testtaskCertappunit,createsamplesCertappunit,teststateCertappunit } from "@/api/certappunit";
|
||||||
|
import Pagination from "@/components/Pagination"
|
||||||
|
import checkPermission from '@/utils/permission'
|
||||||
|
|
||||||
|
import { upUrl, upHeaders } from "@/api/file";
|
||||||
|
export default {
|
||||||
|
components: { Pagination },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
fileList: [],
|
||||||
|
upUrl: upUrl(),
|
||||||
|
upHeaders: upHeaders(),
|
||||||
|
detectoryList: { count: 0 },
|
||||||
|
formData: {
|
||||||
|
detnumber: undefined,
|
||||||
|
testitem:undefined,
|
||||||
|
sampledate:undefined,
|
||||||
|
completedate:undefined,
|
||||||
|
issuancedate:undefined,
|
||||||
|
conclusion:undefined,
|
||||||
|
resultremark:undefined,
|
||||||
|
remarks:undefined
|
||||||
|
|
||||||
|
},
|
||||||
|
chargeOptions:[
|
||||||
|
{
|
||||||
|
label: "CTC代收",
|
||||||
|
value: "CTC代收",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "自收",
|
||||||
|
value: "自收",
|
||||||
|
}
|
||||||
|
|
||||||
|
],
|
||||||
|
inspectionOptions:[
|
||||||
|
{
|
||||||
|
label: "待检测",
|
||||||
|
value: "待检测",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "在检测",
|
||||||
|
value: "在检测",
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
label: "已检测",
|
||||||
|
value: "已检测",
|
||||||
|
}
|
||||||
|
],
|
||||||
|
conclusionOptions:[
|
||||||
|
{
|
||||||
|
label: "合格",
|
||||||
|
value: "合格",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "不合格",
|
||||||
|
value: "不合格",
|
||||||
|
}
|
||||||
|
|
||||||
|
],
|
||||||
|
listLoading: true,
|
||||||
|
listQuery: {
|
||||||
|
page: 1,
|
||||||
|
page_size: 20
|
||||||
|
},
|
||||||
|
|
||||||
|
dialogVisible: false,
|
||||||
|
dialogType: 'create',
|
||||||
|
rule1: {
|
||||||
|
|
||||||
|
},
|
||||||
|
fileList: []
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getData();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
checkPermission,
|
||||||
|
getData() {
|
||||||
|
console.log(this.$route.query.taskid)
|
||||||
|
getCertappunit(this.$route.query.taskid).then(response => {
|
||||||
|
this.formData = response.data
|
||||||
|
})
|
||||||
|
},
|
||||||
|
handlePreview(file) {
|
||||||
|
if ("url" in file) {
|
||||||
|
window.open(file.url);
|
||||||
|
} else {
|
||||||
|
window.open(file.response.data.path);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleSuccess(response, file, fileList) {
|
||||||
|
this.formData.path = response.data.path;
|
||||||
|
},
|
||||||
|
submitForm() {
|
||||||
|
this.$refs["Form"].validate(valid => {
|
||||||
|
if (!valid) return;
|
||||||
|
// TODO 提交表单
|
||||||
|
createsamplesCertappunit(this.$route.query.taskid,this.formData).then(response => {
|
||||||
|
this.$message.success('成功')
|
||||||
|
this.close(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
resetForm() {
|
||||||
|
this.$refs["Form"].resetFields();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
|
@ -0,0 +1,152 @@
|
||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<div style="display:flex">
|
||||||
|
<treeselect
|
||||||
|
v-model="listQuery.teststate"
|
||||||
|
:multiple="false"
|
||||||
|
:options="taskOptions"
|
||||||
|
placeholder="任务状态"
|
||||||
|
:disable-branch-nodes="true"
|
||||||
|
@input="handleFilter"
|
||||||
|
style="width: 280px" clearable/>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<el-table
|
||||||
|
v-loading="listLoading"
|
||||||
|
:data="tableData"
|
||||||
|
style="width: 100%;"
|
||||||
|
border
|
||||||
|
fit
|
||||||
|
stripe
|
||||||
|
highlight-current-row
|
||||||
|
height="380"
|
||||||
|
@row-click="rowClick"
|
||||||
|
>
|
||||||
|
|
||||||
|
<el-table-column type="index" width="50" />
|
||||||
|
<el-table-column label="状态">
|
||||||
|
<template slot-scope="scope" >{{ scope.row.teststate }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<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.certunit_.name }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="样品描述">
|
||||||
|
<template slot-scope="scope" >{{ scope.row.sampledec }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="收费方式">
|
||||||
|
<template slot-scope="scope" >{{ scope.row.charge }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="被委托检测机构">
|
||||||
|
<template slot-scope="scope" >{{ scope.row.testorg_.name}}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="检验项目">
|
||||||
|
<template slot-scope="scope" >{{ scope.row.testitem}}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="创建时间">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ scope.row.create_time }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" width="250">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button-group>
|
||||||
|
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="small"
|
||||||
|
:disabled="!checkPermission(['certapps_update'])"
|
||||||
|
@click="handleCreate(scope)"
|
||||||
|
>任务反馈</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="small"
|
||||||
|
:disabled="!checkPermission(['certapps_update'])"
|
||||||
|
@click="handlestate(scope.row.id)"
|
||||||
|
>查看任务</el-button>
|
||||||
|
</el-button-group>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { getTestOrgList} from "@/api/laboratory"
|
||||||
|
import { getDictList } from "@/api/dict";
|
||||||
|
import { getCertunitList } from "@/api/certunit";
|
||||||
|
import { getCertappunitList, testtaskCertappunit,teststateCertappunit } from "@/api/certappunit";
|
||||||
|
import Pagination from "@/components/Pagination";
|
||||||
|
import checkPermission from "@/utils/permission";
|
||||||
|
import Treeselect from "@riophae/vue-treeselect";
|
||||||
|
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
||||||
|
import { genTree } from "../../utils";
|
||||||
|
export default {
|
||||||
|
name: "Detectform",
|
||||||
|
components: { Pagination, Treeselect },
|
||||||
|
props:['certapp'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
tableData: [],
|
||||||
|
|
||||||
|
listLoading: true,
|
||||||
|
taskOptions:[
|
||||||
|
{
|
||||||
|
label: "待检任务",
|
||||||
|
value: "待检任务",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "在检任务",
|
||||||
|
value: "在检任务",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "已检任务",
|
||||||
|
value: "已检任务",
|
||||||
|
}],
|
||||||
|
listQuery: {
|
||||||
|
page: 1,
|
||||||
|
page_size: 20
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
},
|
||||||
|
watch:{
|
||||||
|
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getList();
|
||||||
|
this.getTestOptions();
|
||||||
|
this.gettunitList()
|
||||||
|
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
checkPermission,
|
||||||
|
getList() {
|
||||||
|
this.listLoading = true;
|
||||||
|
|
||||||
|
getCertappunitList({ pageoff:true,
|
||||||
|
certapp:this.certapp}).then((response) => {
|
||||||
|
|
||||||
|
if (response.data) {
|
||||||
|
this.tableData = response.data;
|
||||||
|
|
||||||
|
}
|
||||||
|
this.listLoading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleCreate(scope) {
|
||||||
|
this.$router.push({path:"/testorg/feedback/create",query:{taskid:scope.row.id}})
|
||||||
|
},
|
||||||
|
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
|
@ -0,0 +1,35 @@
|
||||||
|
# Generated by Django 3.0.7 on 2020-10-09 03:06
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('system', '0031_delete_bscodeset'),
|
||||||
|
('certificate', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='certificate',
|
||||||
|
options={'verbose_name': '证书', 'verbose_name_plural': '证书'},
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='certificate',
|
||||||
|
name='enterprise',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='certificate',
|
||||||
|
name='number',
|
||||||
|
field=models.CharField(default=1, max_length=100, verbose_name='证书编号'),
|
||||||
|
preserve_default=False,
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='certificate',
|
||||||
|
name='state',
|
||||||
|
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='system.Dict', verbose_name='证书状态'),
|
||||||
|
preserve_default=False,
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 3.0.7 on 2020-10-09 03:42
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('certificate', '0002_auto_20201009_1106'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RenameField(
|
||||||
|
model_name='certificate',
|
||||||
|
old_name='state',
|
||||||
|
new_name='status',
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,20 @@
|
||||||
|
# Generated by Django 3.0.7 on 2020-10-09 07:50
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('crm', '0015_certunit_testorgs'),
|
||||||
|
('certificate', '0003_auto_20201009_1142'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='certificate',
|
||||||
|
name='certunit',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='certificate_certunit', to='crm.Certunit', verbose_name='关联单元'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -8,8 +8,16 @@ class Certificate(CommonAModel):
|
||||||
"""
|
"""
|
||||||
证书表
|
证书表
|
||||||
"""
|
"""
|
||||||
certunit = models.ForeignKey('crm.Certunit', on_delete=models.CASCADE, null=True, blank=True, verbose_name='关联单元')
|
number = models.CharField('证书编号', max_length=100)
|
||||||
enterprise = models.ForeignKey('crm.Enterprise', on_delete=models.CASCADE, verbose_name='所属公司')
|
certunit = models.ForeignKey('crm.Certunit', on_delete=models.CASCADE, null=True, blank=True, verbose_name='关联单元', related_name='certificate_certunit')
|
||||||
first_send = models.DateField('证书首发时间')
|
first_send = models.DateField('证书首发时间')
|
||||||
used_start = models.DateField('有效期开始')
|
used_start = models.DateField('有效期开始')
|
||||||
used_end = models.DateField('有效期结束')
|
used_end = models.DateField('有效期结束')
|
||||||
|
status = models.ForeignKey(Dict, verbose_name='证书状态', on_delete=models.CASCADE)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = '证书'
|
||||||
|
verbose_name_plural = verbose_name
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.number
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
from rest_framework import serializers
|
||||||
|
|
||||||
|
from .models import *
|
||||||
|
from apps.system.serializers import DictSerializer
|
||||||
|
|
||||||
|
|
||||||
|
class CertificateSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Certificate
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
class CertificateCreateSerializer(serializers.ModelSerializer):
|
||||||
|
number = serializers.CharField(read_only = True)
|
||||||
|
status = serializers.CharField(read_only = True)
|
||||||
|
class Meta:
|
||||||
|
model = Certificate
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
class CertificateSimpleSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Certificate
|
||||||
|
fields = ['id', 'number']
|
|
@ -0,0 +1,10 @@
|
||||||
|
from django.urls import path, include
|
||||||
|
from .views import *
|
||||||
|
from rest_framework import routers
|
||||||
|
|
||||||
|
router = routers.DefaultRouter()
|
||||||
|
router.register('certificate', CertificateViewSet, basename="certificate")
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path('', include(router.urls))
|
||||||
|
]
|
|
@ -1,3 +1,38 @@
|
||||||
|
from apps.certificate.serializers import CertificateSerializer
|
||||||
|
import re
|
||||||
|
from django.http import request
|
||||||
|
from rest_framework.views import APIView
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
|
from rest_framework.serializers import ModelSerializer
|
||||||
|
from rest_framework.viewsets import ModelViewSet, GenericViewSet
|
||||||
|
from rest_framework.response import Response
|
||||||
|
from rest_framework import status
|
||||||
|
from .models import *
|
||||||
|
from apps.system.models import Dict
|
||||||
|
from apps.system.permission_data import RbacFilterSet
|
||||||
|
from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin
|
||||||
|
import random
|
||||||
|
from rest_framework.decorators import action
|
||||||
|
from utils.pagination import PageOrNot
|
||||||
|
from .serializers import *
|
||||||
|
from rest_framework.exceptions import ParseError, NotAuthenticated
|
||||||
|
from django.utils import timezone
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
|
|
||||||
|
class CertificateViewSet(PageOrNot, OptimizationMixin, ModelViewSet):
|
||||||
|
perms_map = {'get': 'certificate_view', 'post':'certificate_create', 'put':'certificate_update'}
|
||||||
|
queryset = Certificate.objects.all()
|
||||||
|
serializer_class = CertificateSerializer
|
||||||
|
ordering = ['-create_time']
|
||||||
|
|
||||||
|
def create(self, request, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
证书颁发
|
||||||
|
"""
|
||||||
|
serializer = CertificateCreateSerializer(data=request.data)
|
||||||
|
serializer.is_valid(raise_exception=True)
|
||||||
|
if Certificate.objects.filter(certunit__id=request.data['certunit']).exists():
|
||||||
|
return Response('该认证单元已存在证书', status = status.HTTP_400_BAD_REQUEST)
|
||||||
|
serializer.save(create_by = self.request.user, number = 'ZS' + str(random.randrange(2000,3000)), status = Dict.objects.get(code='validate_01'))
|
||||||
|
headers = self.get_success_headers(serializer.data)
|
||||||
|
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
|
@ -9,6 +9,7 @@ class EnterpriseSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Enterprise
|
model = Enterprise
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
class EnterpriseListSerializer(serializers.ModelSerializer):
|
class EnterpriseListSerializer(serializers.ModelSerializer):
|
||||||
type = DictSerializer()
|
type = DictSerializer()
|
||||||
economy_class = DictSerializer()
|
economy_class = DictSerializer()
|
||||||
|
@ -28,10 +29,19 @@ class EnterpriseAddressSerializer(serializers.ModelSerializer):
|
||||||
model = EnterpriseAddress
|
model = EnterpriseAddress
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
|
class SimpEnterpriseSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Enterprise
|
||||||
|
fields = ['name']
|
||||||
class CertunitSerializer(serializers.ModelSerializer):
|
class CertunitSerializer(serializers.ModelSerializer):
|
||||||
standard_ = StandardSerializer(source='standard', read_only=True)
|
standard_ = StandardSerializer(source='standard', read_only=True)
|
||||||
enterprise = serializers.CharField(read_only=True)
|
enterprise_ = serializers.CharField(source='enterprise',read_only=True)
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Certunit
|
model = Certunit
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
|
class CertunitSimpleSerializer(serializers.ModelSerializer):
|
||||||
|
enterprise_ = SimpEnterpriseSerializer(source='enterprise',read_only=True)
|
||||||
|
class Meta:
|
||||||
|
model = Certunit
|
||||||
|
fields = ['id', 'name','description','enterprise','enterprise_']
|
|
@ -9,6 +9,7 @@ from apps.system.permission_data import RbacFilterSet
|
||||||
from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin
|
from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
|
from rest_framework.decorators import action
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
|
|
||||||
class EnterpriseViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelViewSet):
|
class EnterpriseViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelViewSet):
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
# Generated by Django 3.0.5 on 2020-10-13 01:00
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('laboratory', '0008_auto_20200924_1203'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='DetectionTask',
|
||||||
|
),
|
||||||
|
]
|
|
@ -5,10 +5,10 @@ class CertAppFilter(filters.FilterSet):
|
||||||
noproject = filters.BooleanFilter(field_name='project', lookup_expr='isnull')
|
noproject = filters.BooleanFilter(field_name='project', lookup_expr='isnull')
|
||||||
class Meta:
|
class Meta:
|
||||||
model = CertApp
|
model = CertApp
|
||||||
fields = ['status', 'noproject']
|
fields = ['state', 'noproject']
|
||||||
|
|
||||||
class ProjectFilter(filters.FilterSet):
|
class ProjectFilter(filters.FilterSet):
|
||||||
planoff = filters.BooleanFilter(field_name='plan', lookup_expr='isnull')
|
planoff = filters.BooleanFilter(field_name='plan', lookup_expr='isnull')
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Project
|
model = Project
|
||||||
fields = ['plan', 'planoff', 'status', 'certapp_project__member_certapp__user']
|
fields = ['plan', 'planoff', 'state', 'certapp_project__member_certapp__user']
|
|
@ -0,0 +1,14 @@
|
||||||
|
# Generated by Django 3.0.7 on 2020-10-09 03:04
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('project', '0034_evaluationdetail_result'),
|
||||||
|
('project', '0039_auto_20200929_1605'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
]
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Generated by Django 3.0.7 on 2020-10-09 07:18
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('project', '0040_merge_20201009_1104'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='certapp',
|
||||||
|
name='status',
|
||||||
|
field=models.CharField(choices=[('申请', '申请'), ('受理', '受理'), ('策划', '策划'), ('现场审核', '现场审核'), ('产品检测', '产品检测'), ('评定', '评定'), ('出证', '出证'), ('归档', '归档')], default='申请', max_length=50, verbose_name='申请状态'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='project',
|
||||||
|
name='status',
|
||||||
|
field=models.CharField(choices=[('创建中', '创建中'), ('待策划', '待策划'), ('策划中', '策划中'), ('审核任务已下达', '审核任务已下达'), ('审核任务已接受', '审核任务已接受'), ('待现场审核', '待现场审核'), ('现场审核中', '现场审核中'), ('任务已反馈', '任务已反馈'), ('归档', '归档')], default='创建中', max_length=50, verbose_name='项目状态'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Generated by Django 3.0.7 on 2020-10-09 07:50
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('project', '0041_auto_20201009_1518'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RenameField(
|
||||||
|
model_name='certapp',
|
||||||
|
old_name='status',
|
||||||
|
new_name='state',
|
||||||
|
),
|
||||||
|
migrations.RenameField(
|
||||||
|
model_name='project',
|
||||||
|
old_name='status',
|
||||||
|
new_name='state',
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,14 @@
|
||||||
|
# Generated by Django 3.0.5 on 2020-10-13 01:00
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('project', '0042_auto_20201009_1550'),
|
||||||
|
('project', '0042_auto_20200929_1618'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
]
|
|
@ -0,0 +1,22 @@
|
||||||
|
# Generated by Django 3.0.5 on 2020-10-13 01:00
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('project', '0043_merge_20201013_0900'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='certappunit',
|
||||||
|
name='decision',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='certappunit',
|
||||||
|
name='teststate',
|
||||||
|
field=models.CharField(blank=True, choices=[('待提交CTC', '待提交CTC'), ('待CTC下达', '待CTC下达'), ('待实验室检验', '待实验室检验'), ('待提取报告', '待提取报告'), ('待实验室整改', '待实验室整改'), ('待评定', '待评定'), ('评定完成', '评定完成'), ('任务撤销', '任务撤销')], max_length=50, null=True, verbose_name='任务状态'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 3.0.5 on 2020-10-13 01:05
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('project', '0044_auto_20201013_0900'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='certappunit',
|
||||||
|
name='teststate',
|
||||||
|
field=models.CharField(blank=True, choices=[('待提交CTC', '待提交CTC'), ('待CTC下达', '待CTC下达'), ('待实验室检验', '待实验室检验'), ('待提取报告', '待提取报告'), ('待实验室整改', '待实验室整改'), ('待评定', '待评定'), ('评定完成', '评定完成'), ('任务撤销', '任务撤销')], default='待提交CTC', max_length=50, null=True, verbose_name='任务状态'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,20 @@
|
||||||
|
# Generated by Django 3.0.5 on 2020-10-13 03:53
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('system', '0031_delete_bscodeset'),
|
||||||
|
('project', '0045_auto_20201013_0905'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
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='认证决定'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,43 @@
|
||||||
|
# Generated by Django 3.0.5 on 2020-10-15 08:35
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('project', '0046_certappunit_decision'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='certappunit',
|
||||||
|
name='completedate',
|
||||||
|
field=models.DateField(blank=True, null=True, verbose_name='完成日期'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='certappunit',
|
||||||
|
name='conclusion',
|
||||||
|
field=models.CharField(blank=True, choices=[('合格', '合格'), ('不合格', '不合格')], max_length=50, null=True, verbose_name='检验结论'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='certappunit',
|
||||||
|
name='issuancedate',
|
||||||
|
field=models.DateField(blank=True, null=True, verbose_name='报告签发日期'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='certappunit',
|
||||||
|
name='remarks',
|
||||||
|
field=models.TextField(blank=True, null=True, verbose_name='检验反馈备注'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='certappunit',
|
||||||
|
name='resultremark',
|
||||||
|
field=models.TextField(blank=True, null=True, verbose_name='不符合项目描述'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='certappunit',
|
||||||
|
name='sampledate',
|
||||||
|
field=models.DateField(blank=True, null=True, verbose_name='到样日期'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Generated by Django 3.0.5 on 2020-10-19 01:37
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('project', '0047_auto_20201015_1635'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='certappunit',
|
||||||
|
name='path',
|
||||||
|
field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='文件地址'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='certappunit',
|
||||||
|
name='teststate',
|
||||||
|
field=models.CharField(blank=True, choices=[('待提交CTC', '待提交CTC'), ('待CTC下达', '待CTC下达'), ('待实验室检验', '待实验室检验'), ('到样检测中', '到样检测中'), ('待提取报告', '待提取报告'), ('待实验室整改', '待实验室整改'), ('待评定', '待评定'), ('评定完成', '评定完成'), ('任务撤销', '任务撤销')], default='待提交CTC', max_length=50, null=True, verbose_name='任务状态'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 3.0.5 on 2020-10-19 02:14
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('project', '0048_auto_20201019_0937'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='certappunit',
|
||||||
|
name='inspectionstate',
|
||||||
|
field=models.CharField(blank=True, choices=[('CTC代收', 'CTC代收'), ('自收', '自收')], max_length=50, null=True, verbose_name='实验室检验状态'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -14,7 +14,7 @@ class Project(CommonBModel):
|
||||||
"""
|
"""
|
||||||
认证项目
|
认证项目
|
||||||
"""
|
"""
|
||||||
status_choices = (
|
state_choices = (
|
||||||
('创建中', '创建中'),
|
('创建中', '创建中'),
|
||||||
('待策划', '待策划'),
|
('待策划', '待策划'),
|
||||||
('策划中', '策划中'),
|
('策划中', '策划中'),
|
||||||
|
@ -22,9 +22,10 @@ class Project(CommonBModel):
|
||||||
('审核任务已接受', '审核任务已接受'),
|
('审核任务已接受', '审核任务已接受'),
|
||||||
('待现场审核', '待现场审核'),
|
('待现场审核', '待现场审核'),
|
||||||
('现场审核中', '现场审核中'),
|
('现场审核中', '现场审核中'),
|
||||||
('任务已反馈', '任务已反馈')
|
('任务已反馈', '任务已反馈'),
|
||||||
|
('归档', '归档')
|
||||||
)
|
)
|
||||||
status = models.CharField('项目状态', choices=status_choices, default='创建中', max_length=50)
|
state = models.CharField('项目状态', choices=state_choices, default='创建中', max_length=50)
|
||||||
number = models.CharField('项目编号', max_length = 100, null=True, blank=True)
|
number = models.CharField('项目编号', max_length = 100, null=True, blank=True)
|
||||||
auditee = models.ForeignKey(Enterprise, related_name='project_auditee', on_delete=models.DO_NOTHING, verbose_name='受审核方')
|
auditee = models.ForeignKey(Enterprise, related_name='project_auditee', on_delete=models.DO_NOTHING, verbose_name='受审核方')
|
||||||
auditee_v = JSONField(verbose_name='受审核方', default=dict)
|
auditee_v = JSONField(verbose_name='受审核方', default=dict)
|
||||||
|
@ -49,13 +50,15 @@ class CertApp(CommonBModel):
|
||||||
"""
|
"""
|
||||||
认证受理
|
认证受理
|
||||||
"""
|
"""
|
||||||
status_choices = (
|
state_choices = (
|
||||||
('草稿', '草稿'),
|
('申请', '申请'),
|
||||||
('已申请', '已申请'),
|
('受理', '受理'),
|
||||||
('已受理', '已受理'),
|
('策划', '策划'),
|
||||||
('进行中', '进行中'),
|
('现场审核', '现场审核'),
|
||||||
('已中止', '已中止'),
|
('产品检测', '产品检测'),
|
||||||
('已完成', '已完成')
|
('评定', '评定'),
|
||||||
|
('出证', '出证'),
|
||||||
|
('归档', '归档'),
|
||||||
)
|
)
|
||||||
result_choices = (
|
result_choices = (
|
||||||
('未评审', '未评审'),
|
('未评审', '未评审'),
|
||||||
|
@ -70,7 +73,7 @@ class CertApp(CommonBModel):
|
||||||
applicant_v = JSONField(verbose_name='申请方')
|
applicant_v = JSONField(verbose_name='申请方')
|
||||||
applicant = models.ForeignKey(Enterprise, related_name='certapp_applicant', on_delete=models.DO_NOTHING)
|
applicant = models.ForeignKey(Enterprise, related_name='certapp_applicant', on_delete=models.DO_NOTHING)
|
||||||
|
|
||||||
status = models.CharField('申请状态', choices=status_choices, default='草稿', max_length=50)
|
state = models.CharField('申请状态', choices=state_choices, default='申请', max_length=50)
|
||||||
evresult = models.CharField('评审结论', choices = result_choices, default='未评审', max_length=50)
|
evresult = models.CharField('评审结论', choices = result_choices, default='未评审', max_length=50)
|
||||||
evremark = models.TextField('备注', blank=True)
|
evremark = models.TextField('备注', blank=True)
|
||||||
level = models.ForeignKey(Dict, verbose_name='业务级别', related_name='certapp_level', on_delete=models.DO_NOTHING, default=Dict.objects.get(code='ybxm').id)
|
level = models.ForeignKey(Dict, verbose_name='业务级别', related_name='certapp_level', on_delete=models.DO_NOTHING, default=Dict.objects.get(code='ybxm').id)
|
||||||
|
@ -205,6 +208,7 @@ class Certappunit(CommonBModel):
|
||||||
"""
|
"""
|
||||||
certunit = models.ForeignKey('crm.Certunit', verbose_name='单元', on_delete=models.CASCADE, related_name='certappunit_certunit')
|
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')
|
certapp = models.ForeignKey(CertApp, verbose_name='所属业务', on_delete = models.CASCADE, related_name='certappunit_certapp')
|
||||||
|
decision = models.ForeignKey(Dict,verbose_name='认证决定', on_delete = models.CASCADE, related_name='unitaccess_decision', null=True, blank=True)
|
||||||
#检测任务
|
#检测任务
|
||||||
item_choices = (
|
item_choices = (
|
||||||
('规则规定的项目', '规则规定的项目'),
|
('规则规定的项目', '规则规定的项目'),
|
||||||
|
@ -214,6 +218,28 @@ class Certappunit(CommonBModel):
|
||||||
('CTC代收', 'CTC代收'),
|
('CTC代收', 'CTC代收'),
|
||||||
('自收', '自收'),
|
('自收', '自收'),
|
||||||
|
|
||||||
|
)
|
||||||
|
teststate_choices = (
|
||||||
|
('待提交CTC', '待提交CTC'),
|
||||||
|
('待CTC下达', '待CTC下达'),
|
||||||
|
('待实验室检验', '待实验室检验'),
|
||||||
|
('到样检测中','到样检测中'),
|
||||||
|
('待提取报告', '待提取报告'),
|
||||||
|
('待实验室整改', '待实验室整改'),
|
||||||
|
('待评定', '待评定'),
|
||||||
|
('评定完成', '评定完成'),
|
||||||
|
('任务撤销', '任务撤销'),
|
||||||
|
|
||||||
|
)
|
||||||
|
inspectionstate_choices=(
|
||||||
|
('待检验', '待检验'),
|
||||||
|
('在检验', '在检验'),
|
||||||
|
('已检验', '已检验'),
|
||||||
|
)
|
||||||
|
conclusion_choices= (
|
||||||
|
('合格', '合格'),
|
||||||
|
('不合格', '不合格'),
|
||||||
|
|
||||||
)
|
)
|
||||||
testorg = models.ForeignKey('laboratory.TestOrg',verbose_name='检测机构',null=True, blank=True, related_name='certappunit_testorg', on_delete=models.DO_NOTHING)
|
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)
|
remark = models.TextField('备注', null=True, blank=True)
|
||||||
|
@ -221,7 +247,15 @@ class Certappunit(CommonBModel):
|
||||||
detnumber = models.CharField('检测任务号', max_length = 100,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)
|
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)
|
charge = models.CharField('收费方式', choices=charge_choices,null=True, blank=True, max_length=50)
|
||||||
|
teststate = models.CharField('任务状态',default='待提交CTC', choices=teststate_choices,null=True, blank=True, max_length=50)
|
||||||
|
sampledate = models.DateField('到样日期',null=True, blank=True)
|
||||||
|
conclusion = models.CharField('检验结论', choices=conclusion_choices,null=True, blank=True, max_length=50)
|
||||||
|
completedate = models.DateField('完成日期',null=True, blank=True)
|
||||||
|
issuancedate = models.DateField('报告签发日期',null=True, blank=True)
|
||||||
|
resultremark = models.TextField('不符合项目描述',null=True, blank=True)
|
||||||
|
remarks = models.TextField('检验反馈备注', null=True, blank=True)
|
||||||
|
path = models.CharField('文件地址', max_length=1000, null=True, blank=True)
|
||||||
|
inspectionstate = models.CharField('实验室检验状态', choices=charge_choices,null=True, blank=True, max_length=50)
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = '认证单元'
|
verbose_name = '认证单元'
|
||||||
verbose_name_plural = verbose_name
|
verbose_name_plural = verbose_name
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
|
from apps.project.filters import CertAppFilter
|
||||||
from apps.plan.models import Plan
|
from apps.plan.models import Plan
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from .models import *
|
from .models import *
|
||||||
|
|
||||||
from apps.system.serializers import DictSerializer, UserSimpleSerializer
|
from apps.system.serializers import DictSerializer, UserSimpleSerializer, DictSimpleSerializer
|
||||||
from apps.certset.serializers import StandardSerializer
|
from apps.certset.serializers import StandardSerializer
|
||||||
from apps.plan.serializers import PlanSerializer
|
from apps.plan.serializers import PlanSerializer
|
||||||
|
from apps.laboratory.serializers import TestOrgSerializer
|
||||||
|
|
||||||
class ApplicationCreateSerializer(serializers.ModelSerializer):
|
class ApplicationCreateSerializer(serializers.ModelSerializer):
|
||||||
number = serializers.CharField(required=False)
|
number = serializers.CharField(required=False)
|
||||||
|
@ -55,11 +57,30 @@ class CertappSerializer(serializers.ModelSerializer):
|
||||||
queryset = queryset.prefetch_related('cnas_scopes',)
|
queryset = queryset.prefetch_related('cnas_scopes',)
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
from apps.crm.serializers import CertunitSimpleSerializer
|
||||||
|
from apps.certificate.models import Certificate
|
||||||
class CertappunitSerializer(serializers.ModelSerializer):
|
class CertappunitSerializer(serializers.ModelSerializer):
|
||||||
|
certunit_ = CertunitSimpleSerializer(source = 'certunit', read_only=True)
|
||||||
|
decision_ = DictSimpleSerializer(source = 'decision', read_only=True)
|
||||||
|
testorg_ = TestOrgSerializer(source = 'testorg', read_only=True)
|
||||||
|
certificate_ = serializers.SerializerMethodField()
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Certappunit
|
model = Certappunit
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def setup_eager_loading(queryset):
|
||||||
|
""" Perform necessary eager loading of data. """
|
||||||
|
queryset = queryset.select_related('certunit','testorg','decision')
|
||||||
|
return queryset
|
||||||
|
|
||||||
|
def get_certificate_(self, obj):
|
||||||
|
certificates = Certificate.objects.filter(certunit = obj.certunit).order_by('-create_time')
|
||||||
|
if certificates.exists():
|
||||||
|
certificate = certificates[0]
|
||||||
|
return {'id':certificate.id,'number':certificate.number}
|
||||||
|
return None
|
||||||
|
|
||||||
class EvaluationDetailSerializer(serializers.ModelSerializer):
|
class EvaluationDetailSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = EvaluationDetail
|
model = EvaluationDetail
|
||||||
|
|
|
@ -10,6 +10,7 @@ from rest_framework import status
|
||||||
from .models import *
|
from .models import *
|
||||||
from .serializers import *
|
from .serializers import *
|
||||||
from apps.system.models import Dict
|
from apps.system.models import Dict
|
||||||
|
from apps.laboratory.models import TestOrg
|
||||||
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
|
||||||
import random
|
import random
|
||||||
|
@ -77,7 +78,7 @@ class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet):
|
||||||
queryset = CertApp.objects.all()
|
queryset = CertApp.objects.all()
|
||||||
serializer_class = CertappSerializer
|
serializer_class = CertappSerializer
|
||||||
ordering = ['-create_time']
|
ordering = ['-create_time']
|
||||||
filterset_fields = ['status', 'project']
|
filterset_fields = ['state', 'project']
|
||||||
# filterset_class = CertAppFilter
|
# filterset_class = CertAppFilter
|
||||||
|
|
||||||
|
|
||||||
|
@ -99,7 +100,7 @@ class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet):
|
||||||
完成受理
|
完成受理
|
||||||
"""
|
"""
|
||||||
obj = self.get_object()
|
obj = self.get_object()
|
||||||
obj.status = '已受理'
|
obj.state = '策划'
|
||||||
obj.save()
|
obj.save()
|
||||||
return Response(status=status.HTTP_200_OK)
|
return Response(status=status.HTTP_200_OK)
|
||||||
|
|
||||||
|
@ -127,6 +128,7 @@ class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet):
|
||||||
instance = self.get_object()
|
instance = self.get_object()
|
||||||
instance.conclusion = Dict.objects.get(pk=request.data['conclusion'])
|
instance.conclusion = Dict.objects.get(pk=request.data['conclusion'])
|
||||||
instance.score = request.data['score']
|
instance.score = request.data['score']
|
||||||
|
instance.state = '出证'
|
||||||
instance.save()
|
instance.save()
|
||||||
instance.nonitems.clear()
|
instance.nonitems.clear()
|
||||||
instance.nonitems.add(*request.data['nonitems'])
|
instance.nonitems.add(*request.data['nonitems'])
|
||||||
|
@ -155,11 +157,12 @@ 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):
|
class CertappunitViewset(PageOrNot, ModelViewSet):
|
||||||
perms_map={'*':'certapp_view'}
|
perms_map={'get': '*', '*':'certapp_view'}
|
||||||
queryset = Certappunit.objects.all()
|
queryset = Certappunit.objects.all()
|
||||||
serializer_class = CertappunitSerializer
|
serializer_class = CertappunitSerializer
|
||||||
|
filterset_fields = ['certapp']
|
||||||
ordering= ['-id']
|
ordering= ['-id']
|
||||||
|
|
||||||
@action(methods=['put'], detail=True, perms_map={'put':'certapp_access'}, url_name='certappunit_access')
|
@action(methods=['put'], detail=True, perms_map={'put':'certapp_access'}, url_name='certappunit_access')
|
||||||
|
@ -168,9 +171,64 @@ class CertappunitViewset(PageOrNot, ListModelMixin, GenericViewSet):
|
||||||
单元评定
|
单元评定
|
||||||
"""
|
"""
|
||||||
obj = self.get_object()
|
obj = self.get_object()
|
||||||
obj.decision = Dict.objects.get(pk=request.data['decision'])
|
if request.data['decision']:
|
||||||
|
obj.decision = Dict.objects.get(pk=request.data['decision'])
|
||||||
|
else:
|
||||||
|
obj.decision = None
|
||||||
obj.save()
|
obj.save()
|
||||||
return Response(status=status.HTTP_200_OK)
|
return Response(status=status.HTTP_200_OK)
|
||||||
|
@action(methods=['put'], detail=True, perms_map={'put':'certapp_testtask'}, url_name='certappunit_testtask')
|
||||||
|
def testtask(self, request, pk=None):
|
||||||
|
"""
|
||||||
|
检测任务
|
||||||
|
"""
|
||||||
|
obj = self.get_object()
|
||||||
|
obj.testorg = TestOrg.objects.get(pk=request.data['testorg'])
|
||||||
|
obj.remark = request.data['remark']
|
||||||
|
obj.sampledec = request.data['sampledec']
|
||||||
|
obj.detnumber = request.data['detnumber']
|
||||||
|
obj.testitem = request.data['testitem']
|
||||||
|
obj.charge = request.data['charge']
|
||||||
|
obj.save()
|
||||||
|
return Response(status=status.HTTP_200_OK)
|
||||||
|
@action(methods=['put'], detail=True, perms_map={'put':'certapp_teststate'}, url_name='certappunit_teststate')
|
||||||
|
def teststate(self, request, pk=None):
|
||||||
|
"""
|
||||||
|
修改检测任务状态
|
||||||
|
"""
|
||||||
|
obj = self.get_object()
|
||||||
|
if obj.teststate == "待CTC下达":
|
||||||
|
obj.teststate = request.data['teststate']
|
||||||
|
obj.inspectionstate = "待检验"
|
||||||
|
obj.save()
|
||||||
|
return Response(status=status.HTTP_200_OK)
|
||||||
|
else:
|
||||||
|
return Response('检测任务异常,操作失败', status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
|
@action(methods=['put'], detail=True, perms_map={'put':'certapp_createsamples'}, url_name='certappunit_createsamples')
|
||||||
|
def createsamples(self, request, pk=None):
|
||||||
|
"""
|
||||||
|
实验室任务反馈
|
||||||
|
"""
|
||||||
|
obj = self.get_object()
|
||||||
|
obj.sampledate = request.data['sampledate']
|
||||||
|
obj.inspectionstate = request.data['inspectionstate']
|
||||||
|
if request.data['inspectionstate']=="已检测":
|
||||||
|
obj.teststate = '待评定'
|
||||||
|
else:
|
||||||
|
obj.teststate = '到样检测中'
|
||||||
|
|
||||||
|
obj.path = request.data['path']
|
||||||
|
obj.conclusion = request.data['conclusion']
|
||||||
|
obj.completedate = request.data['completedate']
|
||||||
|
obj.issuancedate = request.data['issuancedate']
|
||||||
|
obj.resultremark = request.data['resultremark']
|
||||||
|
obj.remarks = request.data['remarks']
|
||||||
|
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'}
|
||||||
|
@ -193,7 +251,7 @@ class ProjectViewSet(RbacFilterSet, ModelViewSet):
|
||||||
if self.request.user is not None:
|
if self.request.user is not None:
|
||||||
instance = serializer.save(create_by = self.request.user, belong_dept=self.request.user.dept)
|
instance = serializer.save(create_by = self.request.user, belong_dept=self.request.user.dept)
|
||||||
if 'certapps' in postdata and postdata['certapps']:
|
if 'certapps' in postdata and postdata['certapps']:
|
||||||
CertApp.objects.filter(pk__in = postdata['certapps']).update(project=instance, status='进行中')
|
CertApp.objects.filter(pk__in = postdata['certapps']).update(project=instance, state='进行中')
|
||||||
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)
|
||||||
else:
|
else:
|
||||||
|
@ -206,12 +264,12 @@ class ProjectViewSet(RbacFilterSet, ModelViewSet):
|
||||||
项目流转
|
项目流转
|
||||||
"""
|
"""
|
||||||
obj = self.get_object()
|
obj = self.get_object()
|
||||||
if obj.status == '创建中':
|
if obj.state == '创建中':
|
||||||
obj.status = '待策划'
|
obj.state = '待策划'
|
||||||
obj.save()
|
obj.save()
|
||||||
return Response(status=status.HTTP_200_OK)
|
return Response(status=status.HTTP_200_OK)
|
||||||
elif obj.status == '策划中' and obj.can_paichai:
|
elif obj.state == '策划中' and obj.can_paichai:
|
||||||
obj.status = '待现场审核'
|
obj.state = '待现场审核'
|
||||||
obj.save()
|
obj.save()
|
||||||
return Response(status=status.HTTP_200_OK)
|
return Response(status=status.HTTP_200_OK)
|
||||||
else:
|
else:
|
||||||
|
@ -230,8 +288,8 @@ class ProjectViewSet(RbacFilterSet, ModelViewSet):
|
||||||
objs = Project.objects.filter(pk__in=projects)
|
objs = Project.objects.filter(pk__in=projects)
|
||||||
for i in objs:
|
for i in objs:
|
||||||
i.plan=plan
|
i.plan=plan
|
||||||
if i.status == '待策划':
|
if i.state == '待策划':
|
||||||
i.status == '策划中'
|
i.state == '策划中'
|
||||||
i.save()
|
i.save()
|
||||||
return Response(status=status.HTTP_200_OK)
|
return Response(status=status.HTTP_200_OK)
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,11 @@ class DictSerializer(serializers.ModelSerializer):
|
||||||
# return obj.code + obj.name
|
# return obj.code + obj.name
|
||||||
# return obj.name
|
# return obj.name
|
||||||
|
|
||||||
|
class DictSimpleSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Dict
|
||||||
|
fields = ['pk', 'name', 'code']
|
||||||
|
|
||||||
class PositionSerializer(serializers.ModelSerializer):
|
class PositionSerializer(serializers.ModelSerializer):
|
||||||
"""
|
"""
|
||||||
岗位序列化
|
岗位序列化
|
||||||
|
|
|
@ -40,6 +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('certificate/', include('apps.certificate.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=[])),
|
||||||
|
|
Loading…
Reference in New Issue