certapp流程状态设置
This commit is contained in:
parent
b3b30cd67c
commit
cb734240e2
|
@ -61,4 +61,19 @@ export function accessCertapp(id, data) {
|
||||||
method: 'put',
|
method: 'put',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function feedbackCertapp(id, data) {
|
||||||
|
return request({
|
||||||
|
url: `/project/certapp/${id}/feedback/`,
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function flowCertapp(id) {
|
||||||
|
return request({
|
||||||
|
url: `/project/certapp/${id}/flow/`,
|
||||||
|
method: 'get',
|
||||||
|
})
|
||||||
}
|
}
|
|
@ -67,4 +67,20 @@ export function acceptAudit(id) {
|
||||||
url: `/project/project/${id}/accept/`,
|
url: `/project/project/${id}/accept/`,
|
||||||
method: 'put',
|
method: 'put',
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function startProject(id, data) {
|
||||||
|
return request({
|
||||||
|
url: `/project/project/${id}/start/`,
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function feedbackProject(id, data) {
|
||||||
|
return request({
|
||||||
|
url: `/project/project/${id}/feedback/`,
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
}
|
}
|
|
@ -184,10 +184,17 @@ export const asyncRoutes = [
|
||||||
hidden: true
|
hidden: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'certapp/:id/:action/',
|
path: 'certapp/:id/feedback/',
|
||||||
name: 'Certappfeedback',
|
name: 'Certappfeedback',
|
||||||
component: () => import('@/views/certapp/certapphandle'),
|
component: () => import('@/views/certapp/certapphandle'),
|
||||||
meta: { title: '业务审核反馈', icon: 'example', perms: ['certapp_feedback'] },
|
meta: { title: '审核反馈', icon: 'example', perms: ['certapp_feedback'] },
|
||||||
|
hidden: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'certapp/:id/test/',
|
||||||
|
name: 'Certapptest',
|
||||||
|
component: () => import('@/views/certapp/certapphandle'),
|
||||||
|
meta: { title: '检测任务', icon: 'example', perms: ['certapp_test'] },
|
||||||
hidden: true
|
hidden: true
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
@ -232,7 +239,6 @@ export const asyncRoutes = [
|
||||||
meta: { title: '任务反馈', noCache: true, icon: '', perms: ['feedbacks_create']},
|
meta: { title: '任务反馈', noCache: true, icon: '', perms: ['feedbacks_create']},
|
||||||
hidden: true
|
hidden: true
|
||||||
},
|
},
|
||||||
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -103,4 +103,8 @@ div:focus {
|
||||||
// }
|
// }
|
||||||
.el-tabs__header {
|
.el-tabs__header {
|
||||||
margin: 0 0 6px;
|
margin: 0 0 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
padding-inline-start: 6px;
|
||||||
}
|
}
|
|
@ -49,7 +49,7 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<div style="text-align:center">
|
<div style="text-align:center">
|
||||||
<el-button type="primary" @click="save">保存</el-button>
|
<el-button type="primary" @click="save" v-if="formData.state=='产品检测'||formData.state=='评定'">保存</el-button>
|
||||||
</div>
|
</div>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
@ -71,9 +71,15 @@
|
||||||
<el-table-column label="单元名称">
|
<el-table-column label="单元名称">
|
||||||
<template slot-scope="scope" v-if="scope.row.certunit_">{{ scope.row.certunit_.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" v-if="scope.row.certificate_">
|
<template slot-scope="scope" >
|
||||||
{{ scope.row.certificate_.number }}
|
{{ scope.row.teststate }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="证书信息">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.certificate_">{{ scope.row.certificate_.number }}</span>
|
||||||
|
<span v-else>暂无</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="认证决定">
|
<el-table-column label="认证决定">
|
||||||
|
@ -218,6 +224,9 @@ getDictList({type__code:'cert_decision', pageoff:true}).then(res=>{
|
||||||
handleAcessunit(val,id){
|
handleAcessunit(val,id){
|
||||||
accessCertappunit(id, {'decision':val}).then(res=>{
|
accessCertappunit(id, {'decision':val}).then(res=>{
|
||||||
this.$message.success('成功')
|
this.$message.success('成功')
|
||||||
|
this.formData.state = res.data.state
|
||||||
|
this.$emit("stateChange", res.data.state);
|
||||||
|
this.$emit("flowChange");
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
|
<el-button type="primary" @click="handleConfirm" v-if="$route.name=='Certappfeedback'||$route.name=='Certapptest'">提交反馈</el-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
|
import { feedbackCertapp } from "@/api/certapp"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Conclusion",
|
name: "Conclusion",
|
||||||
|
@ -18,7 +20,13 @@ export default {
|
||||||
created() {
|
created() {
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
handleConfirm() {
|
||||||
|
feedbackCertapp(this.certapp, this.formData).then(res=>{
|
||||||
|
this.$message.success('成功')
|
||||||
|
this.$emit("stateChange", res.data.state);
|
||||||
|
this.$emit("flowChange");
|
||||||
|
})
|
||||||
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -99,7 +99,7 @@
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xs="24" :md="12">
|
<el-col :xs="24" :md="12">
|
||||||
<el-card style="margin-top:6px" v-if="$route.params.action=='feedback'">
|
<el-card style="margin-top:6px" v-if="this.$route.name=='Certappfeedback' || this.$route.name=='Certapptest'">
|
||||||
<div slot="header" class="clearfix">
|
<div slot="header" class="clearfix">
|
||||||
<span>审核员参与天数/人日数</span>
|
<span>审核员参与天数/人日数</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-card >
|
<el-card>
|
||||||
<el-row :gutter="6">
|
<el-row :gutter="6">
|
||||||
<el-col :xs="24" :md="3">
|
<el-col :xs="24" :md="3">
|
||||||
<el-select
|
<el-select
|
||||||
|
@ -10,8 +10,8 @@
|
||||||
class="filter-item"
|
class="filter-item"
|
||||||
@change="handleFilter"
|
@change="handleFilter"
|
||||||
>
|
>
|
||||||
<el-option label="全部" value=""/>
|
<el-option label="全部" value="" />
|
||||||
<el-option label="待接受" value="审核任务已下达"/>
|
<el-option label="待接受" value="审核任务已下达" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xs="24" :md="6">
|
<el-col :xs="24" :md="6">
|
||||||
|
@ -23,20 +23,20 @@
|
||||||
/>
|
/>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xs="24" :md="6">
|
<el-col :xs="24" :md="6">
|
||||||
<el-button
|
<el-button
|
||||||
class="filter-item"
|
class="filter-item"
|
||||||
type="primary"
|
type="primary"
|
||||||
icon="el-icon-search"
|
icon="el-icon-search"
|
||||||
@click="handleFilter"
|
@click="handleFilter"
|
||||||
>搜索</el-button
|
>搜索</el-button
|
||||||
>
|
>
|
||||||
<el-button
|
<el-button
|
||||||
class="filter-item"
|
class="filter-item"
|
||||||
type="primary"
|
type="primary"
|
||||||
icon="el-icon-refresh-left"
|
icon="el-icon-refresh-left"
|
||||||
@click="resetFilter"
|
@click="resetFilter"
|
||||||
>重置</el-button
|
>重置</el-button
|
||||||
>
|
>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-table
|
<el-table
|
||||||
|
@ -99,20 +99,39 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" width="300" fixed="right">
|
<el-table-column label="操作" width="300" fixed="right">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button
|
<el-button
|
||||||
v-if="scope.row.state=='审核任务已下达'"
|
v-if="scope.row.state == '审核任务已接受'"
|
||||||
type="primary"
|
type="primary"
|
||||||
size="small"
|
size="small"
|
||||||
:disabled="!checkPermission(['audit_accept'])"
|
:disabled="!checkPermission(['audit_edate'])"
|
||||||
@click="handleAccept(scope)"
|
@click="handleEdate(scope)"
|
||||||
>接受任务</el-button
|
>安排时间</el-button>
|
||||||
>
|
<el-button
|
||||||
<el-button
|
v-if="scope.row.state == '待现场审核'"
|
||||||
size="small"
|
type="primary"
|
||||||
:disabled="!checkPermission(['project_delete'])"
|
size="small"
|
||||||
@click="handleDetailProject(scope)"
|
:disabled="!checkPermission(['audit_edate'])"
|
||||||
>详情</el-button
|
@click="handleStart(scope)"
|
||||||
>
|
>开始审核</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="scope.row.state == '审核任务已下达'"
|
||||||
|
type="primary"
|
||||||
|
size="small"
|
||||||
|
:disabled="!checkPermission(['audit_accept'])"
|
||||||
|
@click="handleAccept(scope)"
|
||||||
|
>接受任务</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="scope.row.state == '现场审核中'"
|
||||||
|
type="primary"
|
||||||
|
size="small"
|
||||||
|
:disabled="!checkPermission(['project_feedback'])"
|
||||||
|
@click="handleFeedbackp(scope)"
|
||||||
|
>反馈</el-button>
|
||||||
|
<el-button
|
||||||
|
size="small"
|
||||||
|
:disabled="!checkPermission(['project_delete'])"
|
||||||
|
@click="handleDetailProject(scope)"
|
||||||
|
>详情</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
@ -205,20 +224,29 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" width="300" fixed="right">
|
<el-table-column label="操作" width="300" fixed="right">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
type="primary"
|
||||||
size="small"
|
size="small"
|
||||||
:disabled="!checkPermission(['certapp_feedback']) || projectstate != '现场审核中'"
|
:disabled="
|
||||||
@click="handleCertappFeedback(scope)"
|
!checkPermission(['certapp_feedback'])
|
||||||
>反馈</el-button
|
"
|
||||||
>
|
@click="handleCertappFeedback(scope)"
|
||||||
<el-button
|
>反馈</el-button
|
||||||
type="danger"
|
>
|
||||||
size="small"
|
<el-button
|
||||||
:disabled="!checkPermission(['certapp_detail'])"
|
size="small"
|
||||||
@click="handleCertappDetail(scope)"
|
:disabled="
|
||||||
>详情</el-button
|
!checkPermission(['certapp_test'])
|
||||||
>
|
"
|
||||||
|
@click="handleCertappTest(scope)"
|
||||||
|
>安排检测</el-button
|
||||||
|
>
|
||||||
|
<el-button
|
||||||
|
size="small"
|
||||||
|
:disabled="!checkPermission(['certapp_detail'])"
|
||||||
|
@click="handleCertappDetail(scope)"
|
||||||
|
>详情</el-button
|
||||||
|
>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
@ -239,7 +267,7 @@ export default {
|
||||||
components: { Pagination, Treeselect },
|
components: { Pagination, Treeselect },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
projectstate:'',
|
projectstate: "",
|
||||||
listLoading: false,
|
listLoading: false,
|
||||||
listLoading2: false,
|
listLoading2: false,
|
||||||
listQuery: {
|
listQuery: {
|
||||||
|
@ -281,9 +309,27 @@ export default {
|
||||||
params: { id: scope.row.id },
|
params: { id: scope.row.id },
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
handleEdate(scope) {
|
||||||
|
this.$router.push({
|
||||||
|
name: "AuditProject",
|
||||||
|
params: { id: scope.row.id },
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleFeedbackp(scope){
|
||||||
|
this.$router.push({
|
||||||
|
name: "AuditProject",
|
||||||
|
params: { id: scope.row.id },
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleStart(scope) {
|
||||||
|
this.$router.push({
|
||||||
|
name: "AuditProject",
|
||||||
|
params: { id: scope.row.id },
|
||||||
|
});
|
||||||
|
},
|
||||||
handleRclick(row, column, event) {
|
handleRclick(row, column, event) {
|
||||||
this.listLoading2 = true;
|
this.listLoading2 = true;
|
||||||
this.projectstate = row.state
|
this.projectstate = row.state;
|
||||||
getAuditCertappList({ project: row.id, pageoff: true })
|
getAuditCertappList({ project: row.id, pageoff: true })
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
this.certappData = res.data;
|
this.certappData = res.data;
|
||||||
|
@ -294,17 +340,26 @@ export default {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
handleAccept(scope) {
|
handleAccept(scope) {
|
||||||
acceptAudit(scope.row.id).then(res=>{
|
this.$confirm("确认接受该项目吗?", "", {
|
||||||
this.getProjectList_()
|
confirmButtonText: "确认",
|
||||||
this.$message.success('成功')
|
cancelButtonText: "取消",
|
||||||
}).catch(e=>{})
|
type: "warning",
|
||||||
},
|
}).then(() => {
|
||||||
handleCertappFeedback(scope) {
|
acceptAudit(scope.row.id)
|
||||||
this.$router.push({
|
.then((res) => {
|
||||||
name: "Certappfeedback",
|
this.getProjectList_();
|
||||||
params: { id: scope.row.id },
|
this.$message.success("成功");
|
||||||
|
})
|
||||||
|
.catch((e) => {});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
handleCertappFeedback(scope) {
|
||||||
|
this.$router.push({name:"Certappfeedback", params:{action:'feedback', id:scope.row.id}})
|
||||||
|
},
|
||||||
|
handleCertappTest(scope) {
|
||||||
|
this.$router.push({name:"Certapptest", params:{action:'test', id:scope.row.id}})
|
||||||
|
},
|
||||||
handleCertappDetail(scope) {
|
handleCertappDetail(scope) {
|
||||||
this.$router.push({
|
this.$router.push({
|
||||||
name: "Certappdetail",
|
name: "Certappdetail",
|
||||||
|
@ -316,7 +371,7 @@ export default {
|
||||||
name: "AuditProject",
|
name: "AuditProject",
|
||||||
params: { id: scope.row.id },
|
params: { id: scope.row.id },
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -243,8 +243,8 @@
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
<div slot="footer" align="center">
|
<div slot="footer" align="center">
|
||||||
<el-button @click="cancel()">返回列表</el-button>
|
<el-button @click="cancel()">返回</el-button>
|
||||||
<el-button type="primary" @click="handelConfirm">保存</el-button>
|
<el-button type="primary" @click="handelConfirm" v-if="$route.name=='Certappupdate' || $route.name =='Certappcreate'">保存</el-button>
|
||||||
</div>
|
</div>
|
||||||
<el-dialog
|
<el-dialog
|
||||||
title="选择企业"
|
title="选择企业"
|
||||||
|
|
|
@ -101,7 +101,6 @@
|
||||||
</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="primary"
|
type="primary"
|
||||||
size="small"
|
size="small"
|
||||||
|
@ -114,7 +113,6 @@
|
||||||
:disabled="!checkPermission(['case_delete'])"
|
:disabled="!checkPermission(['case_delete'])"
|
||||||
@click="handleDelete(scope)"
|
@click="handleDelete(scope)"
|
||||||
>删除</el-button>
|
>删除</el-button>
|
||||||
</el-button-group>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
@ -190,10 +188,17 @@ export default {
|
||||||
this.$router.push({name:"Certappupdate", params:{ id:scope.row.id}})
|
this.$router.push({name:"Certappupdate", params:{ id:scope.row.id}})
|
||||||
},
|
},
|
||||||
handleDelete(scope) {
|
handleDelete(scope) {
|
||||||
deleteCertapp(scope.row.id).then(res=>{
|
this.$confirm('确认删除?', '警告', {
|
||||||
|
confirmButtonText: '确认',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'error'
|
||||||
|
}).then(()=>{
|
||||||
|
deleteCertapp(scope.row.id).then(res=>{
|
||||||
this.$message.success('成功')
|
this.$message.success('成功')
|
||||||
this.getList()
|
this.getList()
|
||||||
})
|
})
|
||||||
|
}).catch(e=>{})
|
||||||
|
|
||||||
},
|
},
|
||||||
getfields(){
|
getfields(){
|
||||||
getDictList({type__code:'cert_field'}).then(res=>{
|
getDictList({type__code:'cert_field'}).then(res=>{
|
||||||
|
|
|
@ -35,14 +35,14 @@
|
||||||
<el-tab-pane label="审核成员" name="Certappmember" v-if="certapp" lazy>
|
<el-tab-pane label="审核成员" name="Certappmember" v-if="certapp" lazy>
|
||||||
<Member :certapp="certapp"></Member>
|
<Member :certapp="certapp"></Member>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<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" @stateChange="stateChange" @flowChange="flowChange"></Conclusion>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="安排检测任务" name="Certapptask" v-if="certapp" lazy>
|
<el-tab-pane label="检测任务" name="Certapptest" v-if="certapp" lazy>
|
||||||
<Detectiontask :certapp="certapp"></Detectiontask>
|
<Detectiontask :certapp="certapp"></Detectiontask>
|
||||||
</el-tab-pane>
|
</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" :key="Certappaccesskey"></access>
|
<access :certapp="certapp" :key="Certappaccesskey" @stateChange="stateChange" @flowChange="flowChange"></access>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="证书颁发/通知" name="Certissue" v-if="certapp" lazy>
|
<el-tab-pane label="证书颁发/通知" name="Certissue" v-if="certapp" lazy>
|
||||||
<issue :certapp="certapp"></issue>
|
<issue :certapp="certapp"></issue>
|
||||||
|
@ -56,10 +56,12 @@
|
||||||
</div>
|
</div>
|
||||||
<el-timeline style="margin-top:6px">
|
<el-timeline style="margin-top:6px">
|
||||||
<el-timeline-item
|
<el-timeline-item
|
||||||
v-for="(activity, index) in activities"
|
v-for="(item, index) in activities"
|
||||||
:key="index"
|
:key="index"
|
||||||
:timestamp="activity.timestamp">
|
:timestamp="item.create_time"
|
||||||
{{activity.content}}
|
placement="top">
|
||||||
|
<span>{{item.handler_.name}}</span>
|
||||||
|
<span>{{item.operation}}</span>
|
||||||
</el-timeline-item>
|
</el-timeline-item>
|
||||||
</el-timeline>
|
</el-timeline>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
@ -73,7 +75,7 @@
|
||||||
import CCCform from "@/views/certapp/cccform"
|
import CCCform from "@/views/certapp/cccform"
|
||||||
import Certunit from "@/views/certapp/certunit"
|
import Certunit from "@/views/certapp/certunit"
|
||||||
import CHARGE from "@/views/certapp/charge"
|
import CHARGE from "@/views/certapp/charge"
|
||||||
import { getCertapp, completeCertapp } from "@/api/certapp"
|
import { getCertapp, completeCertapp, flowCertapp } from "@/api/certapp"
|
||||||
import router from '@/router';
|
import router from '@/router';
|
||||||
import QMSform from "@/views/certapp/qmsform"
|
import QMSform from "@/views/certapp/qmsform"
|
||||||
import Conclusion from "@/views/audit/conclusion"
|
import Conclusion from "@/views/audit/conclusion"
|
||||||
|
@ -90,24 +92,16 @@ export default {
|
||||||
props: [],
|
props: [],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
states:['申请', '受理', '策划', '现场审核', '产品检测', '评定', '出证', '归档'],
|
states:['申请', '受理', '策划', '现场审核', '产品检测', '评定', '出证', '完成'],
|
||||||
stateIndex:1,
|
stateIndex:1,
|
||||||
activeName:'Basic',
|
activeName:'Basic',
|
||||||
certapp:null,
|
certapp:null,
|
||||||
certappdata:null,
|
certappdata:null,
|
||||||
kind:'CCC',
|
kind:'CCC',
|
||||||
isLoad:false,
|
isLoad:false,
|
||||||
activities: [{
|
activities: [ ],
|
||||||
content: '活动按期开始',
|
|
||||||
timestamp: '2018-04-15'
|
|
||||||
}, {
|
|
||||||
content: '通过审核',
|
|
||||||
timestamp: '2018-04-13'
|
|
||||||
}, {
|
|
||||||
content: '创建成功',
|
|
||||||
timestamp: '2018-04-11'
|
|
||||||
}],
|
|
||||||
Certunitkey:'',
|
Certunitkey:'',
|
||||||
|
Certappaccesskey:''
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {},
|
computed: {},
|
||||||
|
@ -128,6 +122,7 @@ export default {
|
||||||
},
|
},
|
||||||
getParams(){
|
getParams(){
|
||||||
var id = this.$route.params.id
|
var id = this.$route.params.id
|
||||||
|
this.getFlow(id)
|
||||||
this.certapp = id
|
this.certapp = id
|
||||||
getCertapp(id).then(res=>{
|
getCertapp(id).then(res=>{
|
||||||
this.certappdata = res.data
|
this.certappdata = res.data
|
||||||
|
@ -150,6 +145,17 @@ export default {
|
||||||
this.$message.success('成功')
|
this.$message.success('成功')
|
||||||
this.$router.go(-1)
|
this.$router.go(-1)
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
stateChange(val){
|
||||||
|
this.stateIndex = this.states.indexOf(val)
|
||||||
|
},
|
||||||
|
getFlow(val){
|
||||||
|
flowCertapp(val).then(res=>{
|
||||||
|
this.activities = res.data
|
||||||
|
})
|
||||||
|
},
|
||||||
|
flowChange(){
|
||||||
|
this.getFlow(this.certapp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
<span>{{ scope.row.create_time }}</span>
|
<span>{{ scope.row.create_time }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作">
|
<el-table-column label="操作" v-if="$route.name=='Certappupdate'">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button
|
<el-button
|
||||||
type="danger"
|
type="danger"
|
||||||
|
@ -120,7 +120,7 @@
|
||||||
></el-input>
|
></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="24">
|
<el-col :span="24" v-if="this.$route.name=='Certappupdate'">
|
||||||
<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="updateNow">保存</el-button>
|
<el-button type="primary" @click="updateNow">保存</el-button>
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
<template slot-scope="scope" >{{ scope.row.charge }}</template>
|
<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_.name}}</template>
|
<template slot-scope="scope" v-if="scope.row.testorg_">{{ scope.row.testorg_.name}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="检验项目">
|
<el-table-column label="检验项目">
|
||||||
<template slot-scope="scope" >{{ scope.row.testitem}}</template>
|
<template slot-scope="scope" >{{ scope.row.testitem}}</template>
|
||||||
|
@ -39,22 +39,14 @@
|
||||||
<span>{{ scope.row.create_time }}</span>
|
<span>{{ scope.row.create_time }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作">
|
<el-table-column label="操作" width="200">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button-group>
|
|
||||||
<el-button
|
|
||||||
type="danger"
|
|
||||||
size="small"
|
|
||||||
:disabled="!checkPermission(['certapps_update'])"
|
|
||||||
@click="handleDelete(scope)"
|
|
||||||
>删除</el-button>
|
|
||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
type="primary"
|
||||||
size="small"
|
size="small"
|
||||||
:disabled="!checkPermission(['certapps_update'])"
|
:disabled="!checkPermission(['certapps_update'])"
|
||||||
@click="handlestate(scope.row.id)"
|
@click="handlestate(scope.row.id)"
|
||||||
>下达实验室</el-button>
|
>下达实验室</el-button>
|
||||||
</el-button-group>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
|
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
<div slot="footer" align="center" style="margin-top:6px">
|
<div slot="footer" align="center" style="margin-top:6px" v-if="$route.name=='Certappupdate'">
|
||||||
<el-button type="primary" @click="handelConfirm">保存</el-button>
|
<el-button type="primary" @click="handelConfirm">保存</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<div slot="header" class="clearfix">
|
<div slot="header" class="clearfix">
|
||||||
<span>项目信息</span>
|
<span>项目信息</span>
|
||||||
</div>
|
</div>
|
||||||
<el-col :xs="24" :md="8" >
|
<el-col :xs="24" :md="10" >
|
||||||
<el-card shadow="hover" style="height:150px">
|
<el-card shadow="hover" style="height:150px">
|
||||||
<div class="text item">
|
<div class="text item">
|
||||||
<span class="span">项目号</span>
|
<span class="span">项目号</span>
|
||||||
|
@ -31,27 +31,29 @@
|
||||||
<span class="span">任务下达人</span>
|
<span class="span">任务下达人</span>
|
||||||
{{project.assign_by_.name}}
|
{{project.assign_by_.name}}
|
||||||
</div>
|
</div>
|
||||||
<div class="text item" v-if="edate_.length">
|
<div class="text item" v-if="project.edate0">
|
||||||
<span class="span">预计审核时间</span>
|
<span class="span">预计审核时间</span>
|
||||||
{{edate_[0].substring(0,16)}}-{{edate_[1].substring(0,16)}}
|
{{edate_[0].substring(0,16)}} -{{edate_[1].substring(0,16)}}
|
||||||
</div>
|
</div>
|
||||||
<div class="text2 item" v-if="$route.name=='PlanProject'">
|
<div class="text item" v-if="project.start_date">
|
||||||
|
<span class="span">实际审核时间</span>
|
||||||
|
{{project.start_date.substring(0,16)}}
|
||||||
|
<span v-if="project.end_date">-{{project.end_date.substring(0,16)}}</span>
|
||||||
|
</div>
|
||||||
|
<div class="text2 item" v-if="$route.name=='PlanProject' && project.state == '策划中'">
|
||||||
<el-checkbox v-model="can_paichai" border @change="handlePaichai">可派差</el-checkbox>
|
<el-checkbox v-model="can_paichai" border @change="handlePaichai">可派差</el-checkbox>
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :xs="24" :md="16" v-if="$route.name=='AuditProject'">
|
<el-col :xs="24" :md="14" v-if="$route.name=='AuditProject'">
|
||||||
<el-card shadow="hover" style="height:150px">
|
<el-card shadow="hover" style="height:150px">
|
||||||
<el-form
|
<el-form
|
||||||
ref="elForm"
|
v-if="project.state=='审核任务已接受'"
|
||||||
size="medium"
|
ref="edateForm"
|
||||||
label-width="120px"
|
|
||||||
style="margin-top:2px"
|
style="margin-top:2px"
|
||||||
label-position="left"
|
:inline="true"
|
||||||
>
|
>
|
||||||
<el-row :gutter="6">
|
<el-form-item label="预计审核">
|
||||||
<el-col :span="16">
|
|
||||||
<el-form-item label="预计审核时间">
|
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="edate"
|
v-model="edate"
|
||||||
type="datetimerange"
|
type="datetimerange"
|
||||||
|
@ -64,11 +66,28 @@
|
||||||
:default-time="['08:00:00', '17:00:00']"
|
:default-time="['08:00:00', '17:00:00']"
|
||||||
></el-date-picker>
|
></el-date-picker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
<el-form-item>
|
||||||
<el-col :span="8">
|
<el-button type="primary" @click="handleEdate">保存</el-button>
|
||||||
<el-button type="primary" @click="eDate">保存</el-button>
|
</el-form-item>
|
||||||
</el-col>
|
</el-form>
|
||||||
</el-row>
|
<el-form
|
||||||
|
v-if="project.state=='待现场审核'"
|
||||||
|
ref="sdateForm"
|
||||||
|
style="margin-top:2px"
|
||||||
|
:inline="true"
|
||||||
|
>
|
||||||
|
<el-form-item label="开始时间">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="start_date"
|
||||||
|
placeholder="开始审核"
|
||||||
|
format="yyyy-MM-dd HH:mm"
|
||||||
|
:style="{width: '100%'}"
|
||||||
|
value-format="yyyy-MM-dd HH:mm"
|
||||||
|
></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" @click="handleStart">开始审核</el-button>
|
||||||
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
@ -98,6 +117,16 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
</el-row>
|
</el-row>
|
||||||
|
<el-card style="margin-top:6px">
|
||||||
|
<div slot="header" class="clearfix">
|
||||||
|
<span>项目进度</span>
|
||||||
|
</div>
|
||||||
|
<el-steps :active="states.indexOf(project.state)" finish-status="success">
|
||||||
|
<el-step v-for="item in states" :title="item"
|
||||||
|
:key="item"
|
||||||
|
></el-step>
|
||||||
|
</el-steps>
|
||||||
|
</el-card>
|
||||||
<el-row style="margin-top:6px">
|
<el-row style="margin-top:6px">
|
||||||
<el-col>
|
<el-col>
|
||||||
<el-card class="box-card">
|
<el-card class="box-card">
|
||||||
|
@ -164,14 +193,20 @@
|
||||||
v-if="$route.name == 'AuditProject'"
|
v-if="$route.name == 'AuditProject'"
|
||||||
type="primary"
|
type="primary"
|
||||||
size="small"
|
size="small"
|
||||||
:disabled="!checkPermission(['certapp_detail']) || project.state != '现场审核中'"
|
:disabled="!checkPermission(['certapp_detail'])"
|
||||||
@click="handleFeedback(scope)"
|
@click="handleFeedback(scope)"
|
||||||
>反馈</el-button>
|
>反馈</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="$route.name == 'AuditProject'"
|
||||||
|
size="small"
|
||||||
|
:disabled="!checkPermission(['certapp_detail'])"
|
||||||
|
@click="handleCertappTest(scope)"
|
||||||
|
>安排检测</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
v-if="$route.name == 'PlanProject'"
|
v-if="$route.name == 'PlanProject'"
|
||||||
type="primary"
|
type="primary"
|
||||||
size="small"
|
size="small"
|
||||||
:disabled="!checkPermission(['certapp_detail']) || project.state != '策划中'"
|
:disabled="!checkPermission(['certapp_detail'])"
|
||||||
@click="handlePlan(scope)"
|
@click="handlePlan(scope)"
|
||||||
>派人</el-button>
|
>派人</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
|
@ -280,7 +315,7 @@
|
||||||
<el-col :xs="24" :md="8">
|
<el-col :xs="24" :md="8">
|
||||||
<el-card class="box-card" style="overflow-y:auto;overflow-x:hidden;height:380px">
|
<el-card class="box-card" style="overflow-y:auto;overflow-x:hidden;height:380px">
|
||||||
<div slot="header" class="clearfix">
|
<div slot="header" class="clearfix">
|
||||||
<span>审核组成员</span>
|
<span>项目成员</span>
|
||||||
</div>
|
</div>
|
||||||
<el-table
|
<el-table
|
||||||
ref="memberTable"
|
ref="memberTable"
|
||||||
|
@ -369,8 +404,9 @@
|
||||||
<span>审核总反馈</span>
|
<span>审核总反馈</span>
|
||||||
</div>
|
</div>
|
||||||
<el-form
|
<el-form
|
||||||
ref="elForm"
|
ref="backform"
|
||||||
:model="backformData"
|
:model="backformData"
|
||||||
|
:rules="backrules"
|
||||||
size="medium"
|
size="medium"
|
||||||
label-width="80px"
|
label-width="80px"
|
||||||
style="margin-top:2px"
|
style="margin-top:2px"
|
||||||
|
@ -378,9 +414,9 @@
|
||||||
>
|
>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col>
|
<el-col>
|
||||||
<el-form-item label="实际实施时间">
|
<el-form-item label="实际实施时间" prop="backdate">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="rdate"
|
v-model="backformData.backdate"
|
||||||
type="datetimerange"
|
type="datetimerange"
|
||||||
range-separator="至"
|
range-separator="至"
|
||||||
start-placeholder="开始日期"
|
start-placeholder="开始日期"
|
||||||
|
@ -393,19 +429,19 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<!-- <el-row>
|
||||||
<el-col>
|
<el-col>
|
||||||
<el-form-item label="法律法规合规性">
|
<el-form-item label="法律法规合规性">
|
||||||
<el-radio v-model="backformData.is_legal" label=true>合规</el-radio>
|
<el-radio v-model="backformData.is_legal" label=true>合规</el-radio>
|
||||||
<el-radio v-model="backformData.is_legal" label=false>存在问题</el-radio>
|
<el-radio v-model="backformData.is_legal" label=false>存在问题</el-radio>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row> -->
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col>
|
<el-col>
|
||||||
<el-form-item label="备注">
|
<el-form-item label="备注" prop="feedback_remark">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="backformData.content"
|
v-model="backformData.feedback_remark"
|
||||||
type="textarea"
|
type="textarea"
|
||||||
:autosize="{ minRows: 2, maxRows: 4}"
|
:autosize="{ minRows: 2, maxRows: 4}"
|
||||||
></el-input>
|
></el-input>
|
||||||
|
@ -415,7 +451,7 @@
|
||||||
<el-row>
|
<el-row>
|
||||||
<div style="text-align:center;" v-if="$route.name=='AuditProject'">
|
<div style="text-align:center;" v-if="$route.name=='AuditProject'">
|
||||||
<el-button-group>
|
<el-button-group>
|
||||||
<el-button type="primary" @click="createNewRecord" :disabled="project.state != '现场审核中'">提交反馈</el-button>
|
<el-button type="primary" @click="handlePback" :disabled="project.state != '现场审核中'">提交反馈</el-button>
|
||||||
</el-button-group>
|
</el-button-group>
|
||||||
</div>
|
</div>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
@ -453,7 +489,7 @@
|
||||||
import { getDictList } from "@/api/dict";
|
import { getDictList } from "@/api/dict";
|
||||||
import { getCertappList } from "@/api/certapp";
|
import { getCertappList } from "@/api/certapp";
|
||||||
import { getEnterprise } from "@/api/enterprise";
|
import { getEnterprise } from "@/api/enterprise";
|
||||||
import { getProject, updateProject, edateProject } from "@/api/project";
|
import { getProject, updateProject, edateProject, startProject, feedbackProject } from "@/api/project";
|
||||||
import { getContactRecordList, createContactRecord } from "@/api/plan";
|
import { getContactRecordList, createContactRecord } from "@/api/plan";
|
||||||
import Pagination from "@/components/Pagination";
|
import Pagination from "@/components/Pagination";
|
||||||
import checkPermission from "@/utils/permission";
|
import checkPermission from "@/utils/permission";
|
||||||
|
@ -470,6 +506,8 @@ export default {
|
||||||
props: [],
|
props: [],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
states:['创建中', '待策划', '策划中', '审核任务已下达', '审核任务已接受', '待现场审核', '现场审核中', '任务已反馈', '检测评定出证', '完成'],
|
||||||
|
stateIndex:1,
|
||||||
auditee: {},
|
auditee: {},
|
||||||
project: { assign_by_: null },
|
project: { assign_by_: null },
|
||||||
certappData: [],
|
certappData: [],
|
||||||
|
@ -522,14 +560,26 @@ export default {
|
||||||
identityOptions: [],
|
identityOptions: [],
|
||||||
edate:[],
|
edate:[],
|
||||||
edate_:[],
|
edate_:[],
|
||||||
|
start_date:null,
|
||||||
rdate:[],
|
rdate:[],
|
||||||
backformData:{
|
backformData:{
|
||||||
|
backdate:null,
|
||||||
|
feedback_remark:''
|
||||||
|
},
|
||||||
|
backrules:{
|
||||||
|
backdate: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "请选择日期",
|
||||||
|
trigger: "change",
|
||||||
|
},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {},
|
computed: {},
|
||||||
watch: {},
|
watch: {
|
||||||
|
},
|
||||||
created() {
|
created() {
|
||||||
this.getParams();
|
this.getParams();
|
||||||
this.getMemberList_();
|
this.getMemberList_();
|
||||||
|
@ -549,6 +599,10 @@ export default {
|
||||||
this.edate = [this.project.edate0, this.project.edate1]
|
this.edate = [this.project.edate0, this.project.edate1]
|
||||||
this.edate_ = [this.project.edate0, this.project.edate1]
|
this.edate_ = [this.project.edate0, this.project.edate1]
|
||||||
}
|
}
|
||||||
|
if(this.project.end_date){
|
||||||
|
this.backformData.backdate = [this.project.start_date, this.project.end_date]
|
||||||
|
this.backformData.feedback_remark = this.project.feedback_remark
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
getEnterprise(this.project.auditee).then((res) => {
|
getEnterprise(this.project.auditee).then((res) => {
|
||||||
|
@ -673,23 +727,50 @@ export default {
|
||||||
handleMClick(row, c, e) {
|
handleMClick(row, c, e) {
|
||||||
this.formDataMember = deepClone(row);
|
this.formDataMember = deepClone(row);
|
||||||
},
|
},
|
||||||
eDate(){
|
handleEdate(){
|
||||||
if(this.edate.length){
|
if(this.edate.length){
|
||||||
edateProject(this.project.id, {edate0:this.edate[0], edate1:this.edate[1]}).then(res=>{
|
edateProject(this.project.id, {edate0:this.edate[0], edate1:this.edate[1]}).then(res=>{
|
||||||
this.$message.success('成功')
|
this.$message.success('成功')
|
||||||
this.edate_ = this.edate
|
this.edate_ = this.edate
|
||||||
|
this.project.state = res.data.state
|
||||||
|
this.project.edate0 = res.data.edate0
|
||||||
|
this.project.edate1 = res.data.edate1
|
||||||
}).catch(e=>{})
|
}).catch(e=>{})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
handleStart(scope){
|
||||||
|
startProject(this.project.id, {start_date:this.start_date}).then(res=>{
|
||||||
|
this.$message.success('成功')
|
||||||
|
this.project.state = res.data.state
|
||||||
|
this.project.start_date = res.data.start_date
|
||||||
|
}).catch(e=>{})
|
||||||
|
},
|
||||||
|
handlePback(){
|
||||||
|
this.$refs['backform'].validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
feedbackProject(this.project.id, {start_date:this.backformData.backdate[0], end_date:this.backformData.backdate[1], feedback_remark:this.backformData.feedback_remark}).then(res=>{
|
||||||
|
this.$message.success('成功')
|
||||||
|
this.project.state = res.data.state
|
||||||
|
this.project.start_date = res.data.start_date
|
||||||
|
this.project.end_date = res.data.end_date
|
||||||
|
}).catch(e=>{})}
|
||||||
|
else{
|
||||||
|
return false
|
||||||
|
}})
|
||||||
|
},
|
||||||
handleFeedback(scope){
|
handleFeedback(scope){
|
||||||
this.$router.push({name:"Certappfeedback", params:{action:'feedback', id:scope.row.id}})
|
this.$router.push({name:"Certappfeedback", params:{action:'feedback', id:scope.row.id}})
|
||||||
},
|
},
|
||||||
|
handleCertappTest(scope) {
|
||||||
|
this.$router.push({name:"Certapptest", params:{action:'test', id:scope.row.id}})
|
||||||
|
},
|
||||||
handlePlan(scope){
|
handlePlan(scope){
|
||||||
this.$router.push({name:"Certappmember", params:{action:'member', id:scope.row.id}})
|
this.$router.push({name:"Certappmember", params:{action:'member', id:scope.row.id}})
|
||||||
},
|
},
|
||||||
handleDetail(scope){
|
handleDetail(scope){
|
||||||
this.$router.push({name:"Certappdetail", params:{id:scope.row.id}})
|
this.$router.push({name:"Certappdetail", params:{id:scope.row.id}})
|
||||||
}
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
|
@ -1,26 +1,61 @@
|
||||||
# from apps.system.models import Dict
|
from utils import serializer
|
||||||
# from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
# from .models import Certaccess, Unitaccess
|
from .models import *
|
||||||
|
|
||||||
# from apps.system.serializers import DictSerializer
|
from apps.system.serializers import DictSimpleSerializer, UserListSerializer, UserSimpleSerializer
|
||||||
|
from apps.project.models import Project
|
||||||
# class CertaccessSerializer(serializers.ModelSerializer):
|
from apps.plan.models import Member
|
||||||
# conclusion_ = DictSerializer(source='conclusion', read_only=True)
|
from apps.project.serializers import PlanSerializer
|
||||||
# nonitems_ = DictSerializer(source='nonitems', read_only=True, many=True)
|
from apps.plan.serializers import MemberSerializer
|
||||||
|
class ProjectSerializerX(serializers.ModelSerializer):
|
||||||
# class Meta:
|
create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
|
||||||
# model = Certaccess
|
certapps = serializers.SerializerMethodField()
|
||||||
# fields = '__all__'
|
plan_ = PlanSerializer(source='plan', read_only=True)
|
||||||
|
members = serializers.SerializerMethodField()
|
||||||
|
class Meta:
|
||||||
|
model = Project
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
# @staticmethod
|
def get_certapps(self, obj):
|
||||||
# def setup_eager_loading(queryset):
|
certapps = []
|
||||||
# """ Perform necessary eager loading of data. """
|
for i in obj.certapp_project.filter(is_deleted=False):
|
||||||
# queryset = queryset.select_related('conclusion',)
|
certapps.append(i.cert_field.code +'(' + i.cccpv_class.name +')')
|
||||||
# queryset = queryset.prefetch_related('nonitems',)
|
return certapps
|
||||||
# return queryset
|
|
||||||
|
def get_members(self, obj):
|
||||||
|
queryset = obj.certapp_project.all()
|
||||||
|
members = Member.objects.filter(certapp__in=queryset, is_deleted=False).distinct('is_leader','user').order_by('-is_leader')
|
||||||
|
serializer = MemberSerializer(members, many=True)
|
||||||
|
return serializer.data
|
||||||
|
|
||||||
|
|
||||||
# class UnitaccessSerializer(serializers.ModelSerializer):
|
@staticmethod
|
||||||
# class Meta:
|
def setup_eager_loading(queryset):
|
||||||
# model = Unitaccess
|
""" Perform necessary eager loading of data. """
|
||||||
# fields = '__all__'
|
queryset = queryset.select_related('create_by', 'plan')
|
||||||
|
queryset = queryset.prefetch_related('certapp_project',)
|
||||||
|
return queryset
|
||||||
|
|
||||||
|
class CertappSerializerX(serializers.ModelSerializer):
|
||||||
|
cert_field_ = DictSimpleSerializer(source='cert_field', read_only=True)
|
||||||
|
cccpv_class_ = DictSimpleSerializer(source='cccpv_class' , read_only=True)
|
||||||
|
cnas_scopes_ = DictSimpleSerializer(source='cnas_scopes', many=True , read_only=True)
|
||||||
|
create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
|
||||||
|
accept_by_ = UserSimpleSerializer(source='accept_by', read_only=True)
|
||||||
|
members = serializers.SerializerMethodField()
|
||||||
|
class Meta:
|
||||||
|
model = CertApp
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def setup_eager_loading(queryset):
|
||||||
|
""" Perform necessary eager loading of data. """
|
||||||
|
queryset = queryset.select_related('cert_field', 'cccpv_class', 'create_by', 'accept_by')
|
||||||
|
queryset = queryset.prefetch_related('cnas_scopes', 'member_certapp')
|
||||||
|
return queryset
|
||||||
|
|
||||||
|
def get_members(self, obj):
|
||||||
|
members = Member.objects.filter(certapp=obj, is_deleted=False).order_by('-is_leader')
|
||||||
|
serializer = MemberSerializer(members, many=True)
|
||||||
|
return serializer.data
|
|
@ -1,30 +1,17 @@
|
||||||
# import random
|
from rest_framework.viewsets import GenericViewSet
|
||||||
|
from utils.pagination import PageOrNot
|
||||||
|
from rest_framework.mixins import ListModelMixin
|
||||||
|
from .models import *
|
||||||
|
from .serializers import *
|
||||||
|
|
||||||
# from django.shortcuts import render
|
from apps.project.models import *
|
||||||
# from django.utils import timezone
|
# Create your views here.
|
||||||
# from rest_framework import status
|
class CertaccessViewSet(PageOrNot, ListModelMixin, GenericViewSet):
|
||||||
# from rest_framework.decorators import action
|
"""
|
||||||
# from rest_framework.exceptions import NotAuthenticated, ParseError
|
业务评定
|
||||||
# from rest_framework.response import Response
|
"""
|
||||||
# from rest_framework.serializers import ModelSerializer
|
perms_map = {'get': 'access_view'}
|
||||||
# from rest_framework.views import APIView
|
queryset = CertApp.objects.all()
|
||||||
# from rest_framework.viewsets import GenericViewSet, ModelViewSet
|
serializer_class = CertappSerializerX
|
||||||
|
filterset_fields = []
|
||||||
# from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin
|
ordering = ['-create_time']
|
||||||
# from apps.system.models import Dict
|
|
||||||
# from apps.system.permission_data import RbacFilterSet
|
|
||||||
# from utils.pagination import PageOrNot
|
|
||||||
|
|
||||||
# from .models import *
|
|
||||||
# from .serializers import *
|
|
||||||
|
|
||||||
# # Create your views here.
|
|
||||||
# class CertaccessViewSet(PageOrNot, CreateUpdateCustomMixin, ModelViewSet):
|
|
||||||
# """
|
|
||||||
# 业务评定
|
|
||||||
# """
|
|
||||||
# perms_map = {'get': 'certapp_view', 'post':'certaccess_create', 'put':'certaccess_update','delete': 'certaccess_delete'}
|
|
||||||
# queryset = Certaccess.objects.all()
|
|
||||||
# serializer_class = CertaccessSerializer
|
|
||||||
# filterset_fields = ['certapp']
|
|
||||||
# ordering = ['-create_time']
|
|
|
@ -3,13 +3,13 @@ from rest_framework import serializers
|
||||||
|
|
||||||
from .models import *
|
from .models import *
|
||||||
|
|
||||||
from apps.system.serializers import DictSimpleSerializer, UserListSerializer
|
from apps.system.serializers import DictSimpleSerializer, UserListSerializer, UserSimpleSerializer
|
||||||
from apps.project.models import Project
|
from apps.project.models import Project
|
||||||
from apps.plan.models import Member
|
from apps.plan.models import Member
|
||||||
from apps.project.serializers import PlanSerializer
|
from apps.project.serializers import PlanSerializer
|
||||||
from apps.plan.serializers import MemberSerializer
|
from apps.plan.serializers import MemberSerializer
|
||||||
class ProjectSerializerX(serializers.ModelSerializer):
|
class ProjectSerializerX(serializers.ModelSerializer):
|
||||||
create_by_ = UserListSerializer(source='create_by', read_only=True)
|
create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
|
||||||
certapps = serializers.SerializerMethodField()
|
certapps = serializers.SerializerMethodField()
|
||||||
plan_ = PlanSerializer(source='plan', read_only=True)
|
plan_ = PlanSerializer(source='plan', read_only=True)
|
||||||
members = serializers.SerializerMethodField()
|
members = serializers.SerializerMethodField()
|
||||||
|
@ -41,8 +41,8 @@ class CertappSerializerX(serializers.ModelSerializer):
|
||||||
cert_field_ = DictSimpleSerializer(source='cert_field', read_only=True)
|
cert_field_ = DictSimpleSerializer(source='cert_field', read_only=True)
|
||||||
cccpv_class_ = DictSimpleSerializer(source='cccpv_class' , read_only=True)
|
cccpv_class_ = DictSimpleSerializer(source='cccpv_class' , read_only=True)
|
||||||
cnas_scopes_ = DictSimpleSerializer(source='cnas_scopes', many=True , read_only=True)
|
cnas_scopes_ = DictSimpleSerializer(source='cnas_scopes', many=True , read_only=True)
|
||||||
create_by_ = UserListSerializer(source='create_by', read_only=True)
|
create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
|
||||||
accept_by_ = UserListSerializer(source='accept_by', read_only=True)
|
accept_by_ = UserSimpleSerializer(source='accept_by', read_only=True)
|
||||||
members = serializers.SerializerMethodField()
|
members = serializers.SerializerMethodField()
|
||||||
class Meta:
|
class Meta:
|
||||||
model = CertApp
|
model = CertApp
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Generated by Django 3.0.7 on 2020-10-21 05:45
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('crm', '0015_certunit_testorgs'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='certunit',
|
||||||
|
name='testorgs',
|
||||||
|
),
|
||||||
|
]
|
|
@ -91,4 +91,4 @@ class Certunit(CommonAModel):
|
||||||
unittype = models.ForeignKey(UnitType, verbose_name='单元类型', on_delete = models.DO_NOTHING, related_name='certunit_unittype')
|
unittype = models.ForeignKey(UnitType, verbose_name='单元类型', on_delete = models.DO_NOTHING, related_name='certunit_unittype')
|
||||||
standard = models.ForeignKey(Standard, verbose_name='采用标准', on_delete = models.DO_NOTHING, related_name='certunit_standard')
|
standard = models.ForeignKey(Standard, verbose_name='采用标准', on_delete = models.DO_NOTHING, related_name='certunit_standard')
|
||||||
enterprise = models.ForeignKey(Enterprise, verbose_name='所属公司', on_delete = models.DO_NOTHING, related_name='certunit_enterprise')
|
enterprise = models.ForeignKey(Enterprise, verbose_name='所属公司', on_delete = models.DO_NOTHING, related_name='certunit_enterprise')
|
||||||
testorgs = models.ManyToManyField(TestOrg, verbose_name='检测机构')
|
# testorgs = models.ManyToManyField(TestOrg, verbose_name='检测机构')
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
# Generated by Django 3.0.7 on 2020-10-20 06:02
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('project', '0044_auto_20201014_1412'),
|
||||||
|
('project', '0049_certappunit_inspectionstate'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
]
|
|
@ -0,0 +1,28 @@
|
||||||
|
# Generated by Django 3.0.7 on 2020-10-20 06:02
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('project', '0050_merge_20201020_1402'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='project',
|
||||||
|
name='start_date',
|
||||||
|
field=models.DateTimeField(blank=True, null=True, verbose_name='现场审核开始时间'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='certapp',
|
||||||
|
name='state',
|
||||||
|
field=models.CharField(choices=[('申请', '申请'), ('受理', '受理'), ('策划', '策划'), ('现场审核', '现场审核'), ('产品检测', '产品检测'), ('评定', '评定'), ('出证', '出证'), ('完成', '完成')], default='申请', max_length=50, verbose_name='申请状态'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='project',
|
||||||
|
name='state',
|
||||||
|
field=models.CharField(choices=[('创建中', '创建中'), ('待策划', '待策划'), ('策划中', '策划中'), ('审核任务已下达', '审核任务已下达'), ('审核任务已接受', '审核任务已接受'), ('待现场审核', '待现场审核'), ('现场审核中', '现场审核中'), ('任务已反馈', '任务已反馈'), ('检测评定', '检测评定'), ('完成', '完成')], default='创建中', max_length=50, verbose_name='项目状态'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Generated by Django 3.0.7 on 2020-10-20 07:00
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('project', '0051_auto_20201020_1402'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='project',
|
||||||
|
name='end_date',
|
||||||
|
field=models.DateTimeField(blank=True, null=True, verbose_name='实际现场审核结束时间'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='project',
|
||||||
|
name='start_date',
|
||||||
|
field=models.DateTimeField(blank=True, null=True, verbose_name='实际现场审核开始时间'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 3.0.7 on 2020-10-20 08:30
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('project', '0052_auto_20201020_1500'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='project',
|
||||||
|
name='feedback_remark',
|
||||||
|
field=models.TextField(blank=True, null=True, verbose_name='反馈备注'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -94,7 +94,8 @@ class Project(CommonBModel):
|
||||||
('待现场审核', '待现场审核'),
|
('待现场审核', '待现场审核'),
|
||||||
('现场审核中', '现场审核中'),
|
('现场审核中', '现场审核中'),
|
||||||
('任务已反馈', '任务已反馈'),
|
('任务已反馈', '任务已反馈'),
|
||||||
('归档', '归档')
|
('检测评定', '检测评定'),
|
||||||
|
('完成', '完成')
|
||||||
)
|
)
|
||||||
state = models.CharField('项目状态', choices=state_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)
|
||||||
|
@ -107,6 +108,9 @@ class Project(CommonBModel):
|
||||||
assgin_by = models.ForeignKey(User, on_delete=models.SET_NULL, verbose_name='审核任务下达人', null=True, blank=True)
|
assgin_by = models.ForeignKey(User, on_delete=models.SET_NULL, verbose_name='审核任务下达人', null=True, blank=True)
|
||||||
edate0 = models.DateTimeField('预计审核开始时间', null=True, blank=True)
|
edate0 = models.DateTimeField('预计审核开始时间', null=True, blank=True)
|
||||||
edate1 = models.DateTimeField('预计审核结束时间', null=True, blank=True)
|
edate1 = models.DateTimeField('预计审核结束时间', null=True, blank=True)
|
||||||
|
start_date = models.DateTimeField('实际现场审核开始时间', null=True, blank=True)
|
||||||
|
end_date = models.DateTimeField('实际现场审核结束时间', null=True, blank=True)
|
||||||
|
feedback_remark = models.TextField('反馈备注', null=True, blank=True)
|
||||||
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -129,7 +133,7 @@ class CertApp(CommonBModel):
|
||||||
('产品检测', '产品检测'),
|
('产品检测', '产品检测'),
|
||||||
('评定', '评定'),
|
('评定', '评定'),
|
||||||
('出证', '出证'),
|
('出证', '出证'),
|
||||||
('归档', '归档'),
|
('完成', '完成'),
|
||||||
)
|
)
|
||||||
result_choices = (
|
result_choices = (
|
||||||
('未评审', '未评审'),
|
('未评审', '未评审'),
|
||||||
|
|
|
@ -39,6 +39,12 @@ from apps.laboratory.serializers import TestOrgSerializer
|
||||||
# class Meta:
|
# class Meta:
|
||||||
# model = SubApplication
|
# model = SubApplication
|
||||||
# fields = '__all__'
|
# fields = '__all__'
|
||||||
|
class CertappflowSerializer(serializers.ModelSerializer):
|
||||||
|
handler_ = UserSimpleSerializer(source='handler', read_only=True)
|
||||||
|
class Meta:
|
||||||
|
model = CertAppFlow
|
||||||
|
fields = ['handler_', 'create_time', 'operation', 'state']
|
||||||
|
|
||||||
|
|
||||||
class CertappSerializer(serializers.ModelSerializer):
|
class CertappSerializer(serializers.ModelSerializer):
|
||||||
cert_field_ = DictSerializer(source='cert_field', read_only=True)
|
cert_field_ = DictSerializer(source='cert_field', read_only=True)
|
||||||
|
|
|
@ -19,7 +19,7 @@ from .filters import *
|
||||||
from utils.pagination import PageOrNot
|
from utils.pagination import PageOrNot
|
||||||
from rest_framework.exceptions import ParseError, NotAuthenticated
|
from rest_framework.exceptions import ParseError, NotAuthenticated
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
from rest_framework.mixins import ListModelMixin
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
# class ApplicationViewSet(RbacFilterSet, ModelViewSet):
|
# class ApplicationViewSet(RbacFilterSet, ModelViewSet):
|
||||||
# """
|
# """
|
||||||
|
@ -90,8 +90,8 @@ class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet):
|
||||||
serializer = self.get_serializer(data=postdata)
|
serializer = self.get_serializer(data=postdata)
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
# self.perform_create(serializer)
|
# self.perform_create(serializer)
|
||||||
instance = serializer.save(create_by = self.request.user, belong_dept=self.request.user.dept, state='受理')
|
obj = serializer.save(create_by = self.request.user, belong_dept=self.request.user.dept, state='受理')
|
||||||
CertAppFlow.objects.create(certapp = instance, handler=self.request.user, data=serializer.data, operation='创建申请', state='申请')
|
CertAppFlow.objects.create(certapp = obj, handler=self.request.user, data=serializer.data, operation='创建申请', 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)
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet):
|
||||||
obj = self.get_object()
|
obj = self.get_object()
|
||||||
obj.state = '策划'
|
obj.state = '策划'
|
||||||
obj.save()
|
obj.save()
|
||||||
CertAppFlow.objects.create(certapp = obj, handler=self.request.user, data=self.get_serializer(obj), operation='完成受理', state='受理')
|
CertAppFlow.objects.create(certapp = obj, handler=self.request.user, operation='完成受理', state='受理')
|
||||||
return Response(status=status.HTTP_200_OK)
|
return Response(status=status.HTTP_200_OK)
|
||||||
|
|
||||||
@action(methods=['put'], detail=False, perms_map={'put':'certapp_review'},
|
@action(methods=['put'], detail=False, perms_map={'put':'certapp_review'},
|
||||||
|
@ -116,8 +116,8 @@ class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet):
|
||||||
certapps = request.data['certapps']
|
certapps = request.data['certapps']
|
||||||
rlist = request.data['rlist']
|
rlist = request.data['rlist']
|
||||||
for i in rlist:
|
for i in rlist:
|
||||||
instance = EvaluationDetail.objects.create(item=Evaluations.objects.get(id=i['id']),item_v=i['content'], create_by=request.user, result=i['result'] if 'result' in i and i['result'] else None)
|
obj = EvaluationDetail.objects.create(item=Evaluations.objects.get(id=i['id']),item_v=i['content'], create_by=request.user, result=i['result'] if 'result' in i and i['result'] else None)
|
||||||
instance.cert_app.add(*certapps)
|
obj.cert_app.add(*certapps)
|
||||||
return Response(status=status.HTTP_200_OK)
|
return Response(status=status.HTTP_200_OK)
|
||||||
|
|
||||||
@action(methods=['put'], detail=True, perms_map={'put':'certapp_access'}, url_name='certapp_access')
|
@action(methods=['put'], detail=True, perms_map={'put':'certapp_access'}, url_name='certapp_access')
|
||||||
|
@ -125,18 +125,50 @@ class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet):
|
||||||
"""
|
"""
|
||||||
评定
|
评定
|
||||||
"""
|
"""
|
||||||
# instance, ok = Certaccess.objects.get_or_create(certapp=self.get_object(), defaults={'certapp':self.get_object()
|
# obj, ok = Certaccess.objects.get_or_create(certapp=self.get_object(), defaults={'certapp':self.get_object()
|
||||||
# , 'conclusion':Dict.objects.get(pk=request.data['conclusion']), 'score':request.data['score']})
|
# , 'conclusion':Dict.objects.get(pk=request.data['conclusion']), 'score':request.data['score']})
|
||||||
# if not ok:
|
# if not ok:
|
||||||
instance = self.get_object()
|
obj = self.get_object()
|
||||||
instance.conclusion = Dict.objects.get(pk=request.data['conclusion'])
|
oldstate = obj.state
|
||||||
instance.score = request.data['score']
|
obj.conclusion = Dict.objects.get(pk=request.data['conclusion'])
|
||||||
instance.state = '出证'
|
obj.score = request.data['score']
|
||||||
instance.save()
|
obj.state = '出证'
|
||||||
instance.nonitems.clear()
|
obj.save()
|
||||||
instance.nonitems.add(*request.data['nonitems'])
|
obj.nonitems.clear()
|
||||||
return Response(status=status.HTTP_200_OK)
|
obj.nonitems.add(*request.data['nonitems'])
|
||||||
|
CertAppFlow.objects.create(certapp = obj, handler=self.request.user, operation='提交评定结论', state=oldstate)
|
||||||
|
return Response({'state':obj.state}, status=status.HTTP_200_OK)
|
||||||
|
|
||||||
|
@action(methods=['put'], detail=True, perms_map={'put':'certapp_feedback'},
|
||||||
|
url_name='certapp_feedback')
|
||||||
|
def feedback(self, request, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
业务反馈
|
||||||
|
"""
|
||||||
|
obj = self.get_object()
|
||||||
|
if obj.state in ['现场审核', '产品检测']:
|
||||||
|
oldstate = obj.state
|
||||||
|
if obj.cert_field.parent.code == 'PRO':
|
||||||
|
obj.state = '产品检测'
|
||||||
|
else:
|
||||||
|
obj.state = '评定'
|
||||||
|
obj.save()
|
||||||
|
CertAppFlow.objects.create(certapp = obj, handler=self.request.user, operation='提交现场审核反馈', state=oldstate)
|
||||||
|
return Response({'state':obj.state}, status=status.HTTP_200_OK)
|
||||||
|
else:
|
||||||
|
return Response('项目状态异常,操作失败', status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
|
@action(methods=['get'], detail=True, perms_map={'get':'*'},
|
||||||
|
url_name='certapp_flow')
|
||||||
|
def flow(self, request, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
业务流程进度
|
||||||
|
"""
|
||||||
|
objs = CertAppFlow.objects.filter(certapp__pk=kwargs['pk'])
|
||||||
|
serializer = CertappflowSerializer(objs, many=True)
|
||||||
|
return Response(serializer.data)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class EvaluationDetailViewset(CreateUpdateCustomMixin, PageOrNot,ModelViewSet):
|
class EvaluationDetailViewset(CreateUpdateCustomMixin, PageOrNot,ModelViewSet):
|
||||||
"""
|
"""
|
||||||
|
@ -155,7 +187,7 @@ class EvaluationDetailViewset(CreateUpdateCustomMixin, PageOrNot,ModelViewSet):
|
||||||
|
|
||||||
rlist = request.data['rlist']
|
rlist = request.data['rlist']
|
||||||
for i in rlist:
|
for i in rlist:
|
||||||
instance = EvaluationDetail.objects.update(item=Evaluations.objects.get(id=i['id']),item_v=i['content'], update_by=request.user, result=i['result'] )
|
obj = EvaluationDetail.objects.update(item=Evaluations.objects.get(id=i['id']),item_v=i['content'], update_by=request.user, result=i['result'] )
|
||||||
|
|
||||||
return Response(status=status.HTTP_200_OK)
|
return Response(status=status.HTTP_200_OK)
|
||||||
|
|
||||||
|
@ -255,11 +287,11 @@ class ProjectViewSet(RbacFilterSet, ModelViewSet):
|
||||||
postdata['number'] = random.randrange(8000,9000)
|
postdata['number'] = random.randrange(8000,9000)
|
||||||
serializer = self.get_serializer(data=postdata)
|
serializer = self.get_serializer(data=postdata)
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
instance = serializer.save(create_by = self.request.user, belong_dept=self.request.user.dept)
|
obj = 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)
|
CertApp.objects.filter(pk__in = postdata['certapps']).update(project=obj)
|
||||||
instance.state = '待策划'
|
obj.state = '待策划'
|
||||||
instance.save()
|
obj.save()
|
||||||
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)
|
||||||
|
|
||||||
|
@ -302,10 +334,33 @@ class ProjectViewSet(RbacFilterSet, ModelViewSet):
|
||||||
制定预期审核时间
|
制定预期审核时间
|
||||||
"""
|
"""
|
||||||
obj = self.get_object()
|
obj = self.get_object()
|
||||||
obj.edate0 = request.data['edate0']
|
if obj.state == '审核任务已接受':
|
||||||
obj.edate1 = request.data['edate1']
|
obj.edate0 = request.data['edate0']
|
||||||
obj.save()
|
obj.edate1 = request.data['edate1']
|
||||||
return Response(status=status.HTTP_200_OK)
|
obj.state = '待现场审核'
|
||||||
|
obj.save()
|
||||||
|
for i in obj.certapp_project.all():
|
||||||
|
CertAppFlow.objects.create(certapp = i, handler=self.request.user, operation='已安排现场审核时间', state='现场审核')
|
||||||
|
return Response({'edate0':obj.edate0, 'edate1':obj.edate1, 'state':obj.state}, status=status.HTTP_200_OK)
|
||||||
|
else:
|
||||||
|
return Response('项目状态异常,操作失败', status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
|
@action(methods=['put'], detail=True, perms_map={'put':'project_start'},
|
||||||
|
url_name='project_start')
|
||||||
|
def start(self, request, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
开始审核
|
||||||
|
"""
|
||||||
|
obj = self.get_object()
|
||||||
|
if obj.state == '待现场审核':
|
||||||
|
obj.start_date = request.data['start_date']
|
||||||
|
obj.state = '现场审核中'
|
||||||
|
obj.save()
|
||||||
|
for i in obj.certapp_project.all():
|
||||||
|
CertAppFlow.objects.create(certapp = i, handler=self.request.user, operation='现场审核中', state='现场审核')
|
||||||
|
return Response({'start_date':obj.start_date,'state':obj.state}, status=status.HTTP_200_OK)
|
||||||
|
else:
|
||||||
|
return Response('项目状态异常,操作失败', status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
@action(methods=['put'], detail=True, perms_map={'put':'audit_accept'},url_name='audit_accept')
|
@action(methods=['put'], detail=True, perms_map={'put':'audit_accept'},url_name='audit_accept')
|
||||||
def accept(self, request, *args, **kwargs):
|
def accept(self, request, *args, **kwargs):
|
||||||
|
@ -317,9 +372,26 @@ class ProjectViewSet(RbacFilterSet, ModelViewSet):
|
||||||
obj.state = '审核任务已接受'
|
obj.state = '审核任务已接受'
|
||||||
obj.save()
|
obj.save()
|
||||||
Member.objects.filter(certapp__project=obj).update(is_accepted=True)
|
Member.objects.filter(certapp__project=obj).update(is_accepted=True)
|
||||||
obj.certapp_project.all().update(state='审核')
|
obj.certapp_project.all().update(state='现场审核')
|
||||||
for i in obj.certapp_project.all():
|
for i in obj.certapp_project.all():
|
||||||
CertAppFlow.objects.create(certapp = i, handler=self.request.user, operation='审核任务已接受', state='策划')
|
CertAppFlow.objects.create(certapp = i, handler=self.request.user, operation='审核任务已接受', state='策划')
|
||||||
return Response(status=status.HTTP_200_OK)
|
return Response(status=status.HTTP_200_OK)
|
||||||
return Response('项目状态异常,操作失败', status=status.HTTP_400_BAD_REQUEST)
|
return Response('项目状态异常,操作失败', status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
|
@action(methods=['put'], detail=True, perms_map={'put':'project_feedback'},
|
||||||
|
url_name='project_feedback')
|
||||||
|
def feedback(self, request, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
项目反馈
|
||||||
|
"""
|
||||||
|
obj = self.get_object()
|
||||||
|
if obj.state == '现场审核中':
|
||||||
|
obj.start_date = request.data['start_date']
|
||||||
|
obj.end_date = request.data['end_date']
|
||||||
|
obj.feedback_remark = request.data['feedback_remark']
|
||||||
|
obj.state = '任务已反馈'
|
||||||
|
obj.save()
|
||||||
|
return Response({'start_date':obj.start_date, 'end_date':obj.end_date,'state':obj.state}, status=status.HTTP_200_OK)
|
||||||
|
else:
|
||||||
|
return Response('项目状态异常,操作失败', status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Generated by Django 3.0.7 on 2020-10-22 07:04
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('system', '0031_delete_bscodeset'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='dict',
|
||||||
|
name='code',
|
||||||
|
field=models.CharField(db_index=True, max_length=30, unique=True, verbose_name='编号'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='dicttype',
|
||||||
|
name='code',
|
||||||
|
field=models.CharField(db_index=True, max_length=30, unique=True, verbose_name='代号'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -131,7 +131,7 @@ class DictType(SoftModel):
|
||||||
数据字典类型
|
数据字典类型
|
||||||
"""
|
"""
|
||||||
name = models.CharField('名称', max_length=30)
|
name = models.CharField('名称', max_length=30)
|
||||||
code = models.CharField('代号', unique=True, max_length=30)
|
code = models.CharField('代号', unique=True, max_length=30, db_index=True)
|
||||||
parent = models.ForeignKey('self', null=True, blank=True,
|
parent = models.ForeignKey('self', null=True, blank=True,
|
||||||
on_delete=models.SET_NULL, verbose_name='父')
|
on_delete=models.SET_NULL, verbose_name='父')
|
||||||
|
|
||||||
|
@ -148,7 +148,7 @@ class Dict(SoftModel):
|
||||||
数据字典
|
数据字典
|
||||||
"""
|
"""
|
||||||
name = models.CharField('名称', max_length=1000)
|
name = models.CharField('名称', max_length=1000)
|
||||||
code = models.CharField('编号', max_length=30, unique=True)
|
code = models.CharField('编号', max_length=30, unique=True, db_index=True)
|
||||||
description = models.TextField('描述', blank=True, null=True)
|
description = models.TextField('描述', blank=True, null=True)
|
||||||
other = JSONField('其它信息', blank=True, null=True)
|
other = JSONField('其它信息', blank=True, null=True)
|
||||||
type = models.ForeignKey(
|
type = models.ForeignKey(
|
||||||
|
|
Loading…
Reference in New Issue