cccform
This commit is contained in:
parent
9c8ce37b46
commit
49c03ea4e7
|
@ -0,0 +1,40 @@
|
||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
export function getCertappList(query) {
|
||||||
|
return request({
|
||||||
|
url: '/project/certapp/',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createCertapp(data) {
|
||||||
|
return request({
|
||||||
|
url: '/project/certapp/',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function deleteCertapp(id) {
|
||||||
|
return request({
|
||||||
|
url: `/project/certapp/${id}/`,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export function updateCertapp(id, data) {
|
||||||
|
return request({
|
||||||
|
url: `/project/certapp/${id}/`,
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getCertapp(id) {
|
||||||
|
return request({
|
||||||
|
url: `/project/certapp/${id}/`,
|
||||||
|
method: 'get',
|
||||||
|
})
|
||||||
|
}
|
|
@ -64,7 +64,7 @@ export const asyncRoutes = [
|
||||||
{
|
{
|
||||||
path: '/project',
|
path: '/project',
|
||||||
component: Layout,
|
component: Layout,
|
||||||
redirect: '/project/application',
|
redirect: '/project/case',
|
||||||
name: 'ProjectManage',
|
name: 'ProjectManage',
|
||||||
meta: { title: '认证项目', icon: 'example'},
|
meta: { title: '认证项目', icon: 'example'},
|
||||||
children: [
|
children: [
|
||||||
|
@ -72,7 +72,13 @@ export const asyncRoutes = [
|
||||||
path: 'application',
|
path: 'application',
|
||||||
name: 'Applicaion',
|
name: 'Applicaion',
|
||||||
component: () => import('@/views/application/application'),
|
component: () => import('@/views/application/application'),
|
||||||
meta: { title: '认证申请', icon: 'example', perms: ['application_view'] }
|
meta: { title: '认证受理', icon: 'example', perms: ['application_view'] }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'certapp',
|
||||||
|
name: 'Certapp',
|
||||||
|
component: () => import('@/views/certapp/certapp'),
|
||||||
|
meta: { title: '认证受理', icon: 'example', perms: ['certapp_view'] }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'application2',
|
path: 'application2',
|
||||||
|
@ -87,6 +93,13 @@ export const asyncRoutes = [
|
||||||
meta: { title: '认证申请', icon: 'example', perms: ['application_create', 'application_update'] },
|
meta: { title: '认证申请', icon: 'example', perms: ['application_create', 'application_update'] },
|
||||||
hidden: true
|
hidden: true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'certapp/:action/:kind/',
|
||||||
|
name: 'CertappForm',
|
||||||
|
component: () => import('@/views/certapp/certappform'),
|
||||||
|
meta: { title: '认证受理单', icon: 'example', perms: ['certapp_create', 'certapp_update'] },
|
||||||
|
hidden: true
|
||||||
|
},
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -107,25 +107,25 @@
|
||||||
</div>
|
</div>
|
||||||
<el-button size="mini" type="primary" style="margin-bottom:2px">操作按钮</el-button>
|
<el-button size="mini" type="primary" style="margin-bottom:2px">操作按钮</el-button>
|
||||||
<div>
|
<div>
|
||||||
<label>申请领域:</label><span> {{item.cert_field_.name}}</span>
|
<span>申请领域:</span><span> {{item.cert_field_.name}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="item.cccpv_class">
|
<div v-if="item.cccpv_class">
|
||||||
<label>产品分类:</label><el-tag> {{item.cccpv_class_.name}}</el-tag>
|
<span>产品分类:</span><el-tag> {{item.cccpv_class_.name}}</el-tag>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="item.cnas_scopes.length">
|
<div v-if="item.cnas_scopes.length">
|
||||||
<label>CNAS分类:</label><el-tag v-for="(item, index) in item.cnas_scopes_" :key="'cnas_scope' + index"> {{item.name}}</el-tag>
|
<span>CNAS分类:</span><el-tag v-for="(item, index) in item.cnas_scopes_" :key="'cnas_scope' + index"> {{item.name}}</el-tag>
|
||||||
</div>
|
</div>
|
||||||
<div >
|
<div >
|
||||||
<label>申请方:</label><span> {{formData.applicant_v.name}}</span>
|
<span>申请方:</span><span> {{formData.applicant_v.name}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="item.manufacture">
|
<div v-if="item.manufacture">
|
||||||
<label>制造商:</label><span> {{item.manufacture_v.name}}</span>
|
<span>制造商:</span><span> {{item.manufacture_v.name}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="item.factory">
|
<div v-if="item.factory">
|
||||||
<label>生产厂:</label><span> {{item.factory_v.name}}</span>
|
<span>生产厂:</span><span> {{item.factory_v.name}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="item.pattern">
|
<div v-if="item.pattern">
|
||||||
<label>申请模式:</label><span> {{item.pattern}}</span>
|
<span>申请模式:</span><span> {{item.pattern}}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</el-card>
|
</el-card>
|
||||||
|
@ -148,7 +148,11 @@
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
<style >
|
||||||
|
.el-card__body{
|
||||||
|
font-size:16px
|
||||||
|
}
|
||||||
|
</style>
|
||||||
<script>
|
<script>
|
||||||
import Enterprisechose from "@/views/enterprise/enterprisechoose"
|
import Enterprisechose from "@/views/enterprise/enterprisechoose"
|
||||||
import CCCform from "@/views/application/cccform"
|
import CCCform from "@/views/application/cccform"
|
||||||
|
|
|
@ -0,0 +1,458 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="100px">
|
||||||
|
<el-row>
|
||||||
|
<el-col :xs="24" :md="8">
|
||||||
|
<el-form-item label="业务级别" prop="level">
|
||||||
|
<el-select
|
||||||
|
v-model="formData.level"
|
||||||
|
placeholder="请选择业务级别"
|
||||||
|
filterable
|
||||||
|
allow-create
|
||||||
|
:style="{width: '100%'}"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="(item, index) in levelOptions"
|
||||||
|
:key="index"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"
|
||||||
|
:disabled="item.disabled"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :md="8">
|
||||||
|
<el-form-item label="受理日期" prop="apply_date" >
|
||||||
|
<el-date-picker
|
||||||
|
v-model="formData.apply_date"
|
||||||
|
format="yyyy-MM-dd"
|
||||||
|
value-format="yyyy-MM-dd"
|
||||||
|
:style="{width: '100%'}"
|
||||||
|
placeholder="受理日期"
|
||||||
|
clearable
|
||||||
|
></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :md="8">
|
||||||
|
<el-form-item label="接收日期" prop="accept_date" >
|
||||||
|
<el-date-picker
|
||||||
|
v-model="formData.accept_date"
|
||||||
|
format="yyyy-MM-dd"
|
||||||
|
value-format="yyyy-MM-dd"
|
||||||
|
:style="{width: '100%'}"
|
||||||
|
placeholder="材料接收日期"
|
||||||
|
clearable
|
||||||
|
></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<!-- <el-divider content-position="left" style="margin-top:2px">申请方</el-divider> -->
|
||||||
|
<el-row>
|
||||||
|
<el-col :xs="24" :md="12">
|
||||||
|
<el-form-item label="申请方" prop="applicant">
|
||||||
|
<el-input placeholder="请选择申请方" readonly clearable v-model="formData.applicant_v.name">
|
||||||
|
<el-button slot="append" icon="el-icon-search" @click="choose(0)"></el-button>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :md="12">
|
||||||
|
<el-form-item label="地址" prop="applicant_v.address">
|
||||||
|
<el-select
|
||||||
|
v-model="formData.applicant_v.address"
|
||||||
|
placeholder="请选择地址"
|
||||||
|
filterable
|
||||||
|
allow-create
|
||||||
|
:style="{width: '100%'}"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="(item, index) in addressOptions0"
|
||||||
|
:key="index"
|
||||||
|
:label="item.address"
|
||||||
|
:value="item.address"
|
||||||
|
:disabled="item.disabled"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :xs="24" :md="4">
|
||||||
|
<el-form-item label="联系人">
|
||||||
|
<el-input v-model="formData.applicant_v.linkman_name"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :md="6">
|
||||||
|
<el-form-item label="手机">
|
||||||
|
<el-input v-model="formData.applicant_v.linkman_mobile"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :md="4">
|
||||||
|
<el-form-item label="职务">
|
||||||
|
<el-input v-model="formData.applicant_v.linkman_duty"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<!-- <el-divider content-position="left">制造商</el-divider> -->
|
||||||
|
<el-row>
|
||||||
|
<el-col :xs="24" :md="12">
|
||||||
|
<el-form-item label="制造商" prop="manufacture">
|
||||||
|
<el-input placeholder="请选择制造商" readonly clearable v-model="formData.manufacture_v.name">
|
||||||
|
<el-button slot="append" icon="el-icon-search" @click="choose(1)"></el-button>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :md="12">
|
||||||
|
<el-form-item label="地址" prop="manufacture_v.address">
|
||||||
|
<el-select
|
||||||
|
v-model="formData.manufacture_v.address"
|
||||||
|
placeholder="请选择地址"
|
||||||
|
filterable
|
||||||
|
allow-create
|
||||||
|
:style="{width: '100%'}"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="(item, index) in addressOptions1"
|
||||||
|
:key="index"
|
||||||
|
:label="item.address"
|
||||||
|
:value="item.address"
|
||||||
|
:disabled="item.disabled"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :xs="24" :md="4">
|
||||||
|
<el-form-item label="联系人">
|
||||||
|
<el-input v-model="formData.manufacture_v.linkman_name"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :md="6">
|
||||||
|
<el-form-item label="手机">
|
||||||
|
<el-input v-model="formData.manufacture_v.linkman_mobile"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :md="4">
|
||||||
|
<el-form-item label="职务">
|
||||||
|
<el-input v-model="formData.manufacture_v.linkman_duty"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :xs="24" :md="12">
|
||||||
|
<el-form-item label="生产厂" prop="factory">
|
||||||
|
<el-input placeholder="请选择生产厂" readonly clearable v-model="formData.factory_v.name">
|
||||||
|
<el-button slot="append" icon="el-icon-search" @click="choose(2)"></el-button>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :md="12">
|
||||||
|
<el-form-item label="地址" prop="factory_v.address">
|
||||||
|
<el-select
|
||||||
|
v-model="formData.factory_v.address"
|
||||||
|
placeholder="请选择地址"
|
||||||
|
filterable
|
||||||
|
allow-create
|
||||||
|
:style="{width: '100%'}"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="(item, index) in addressOptions2"
|
||||||
|
:key="index"
|
||||||
|
:label="item.address"
|
||||||
|
:value="item.address"
|
||||||
|
:disabled="item.disabled"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :xs="24" :md="4">
|
||||||
|
<el-form-item label="联系人">
|
||||||
|
<el-input v-model="formData.factory_v.linkman_name"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :md="6">
|
||||||
|
<el-form-item label="手机">
|
||||||
|
<el-input v-model="formData.factory_v.linkman_mobile"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :md="4">
|
||||||
|
<el-form-item label="职务">
|
||||||
|
<el-input v-model="formData.factory_v.linkman_duty"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :md="4">
|
||||||
|
<el-form-item label="工厂人数">
|
||||||
|
<el-input-number v-model="formData.factory_v.person_count"></el-input-number>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :xs="24" :md="8">
|
||||||
|
<el-form-item label="产品分类" prop="cccpv_class">
|
||||||
|
<treeselect
|
||||||
|
v-model="formData.cccpv_class"
|
||||||
|
:multiple="false"
|
||||||
|
:options="cccOptions"
|
||||||
|
:disable-branch-nodes="true"
|
||||||
|
placeholder="请选择产品分类"
|
||||||
|
:style="{width: '100%'}"
|
||||||
|
clearable
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :md="8">
|
||||||
|
<el-form-item label="申请模式" prop="pattern">
|
||||||
|
<el-select
|
||||||
|
v-model="formData.pattern"
|
||||||
|
placeholder="请选择模式"
|
||||||
|
filterable
|
||||||
|
allow-create
|
||||||
|
:style="{width: '100%'}"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="(item, index) in patternOptions"
|
||||||
|
:key="index"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
:disabled="item.disabled"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="24" :md="4">
|
||||||
|
<el-form-item label="是否认可" prop="is_approve">
|
||||||
|
<el-switch v-model="formData.is_approve"></el-switch>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" align="center">
|
||||||
|
<el-button @click="close(false)">取消</el-button>
|
||||||
|
<el-button type="primary" @click="handelConfirm">保存</el-button>
|
||||||
|
</div>
|
||||||
|
<el-dialog
|
||||||
|
title="选择企业"
|
||||||
|
:visible.sync="dgVisiable"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
width="80%"
|
||||||
|
:append-to-body="true"
|
||||||
|
>
|
||||||
|
<Enterprisechose ref="Enterprisechose" @handleChose="chooseComplete"></Enterprisechose>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { createCertapp, updateCertapp, getCertapp } from "@/api/certapp";
|
||||||
|
import Enterprisechose from "@/views/enterprise/enterprisechoose";
|
||||||
|
import { getAddressList } from "@/api/enterprise";
|
||||||
|
import { genTree } from "../../utils";
|
||||||
|
import { getDictList } from "../../api/dict";
|
||||||
|
import Treeselect from "@riophae/vue-treeselect";
|
||||||
|
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
||||||
|
export default {
|
||||||
|
name: "CCCform",
|
||||||
|
inheritAttrs: false,
|
||||||
|
components: { Enterprisechose, Treeselect },
|
||||||
|
props: ["action", "certapp"],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
// act:this.action,
|
||||||
|
formData: {
|
||||||
|
field_code: 'CCC',
|
||||||
|
applicant: null,
|
||||||
|
applicant_v: {},
|
||||||
|
manufacture_v: {},
|
||||||
|
manufacture: null,
|
||||||
|
factory: null,
|
||||||
|
factory_v: {},
|
||||||
|
cccpv_class: null,
|
||||||
|
pattern: "正常",
|
||||||
|
is_approve:true
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
apply_date: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "请选择日期",
|
||||||
|
trigger: "change",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
accept_date: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "请选择日期",
|
||||||
|
trigger: "change",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
applicant: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "请选择申请方",
|
||||||
|
trigger: "change",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
manufacture: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "请选择制造商",
|
||||||
|
trigger: "change",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
factory: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "请选择生产厂",
|
||||||
|
trigger: "change",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
cccpv_class: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "请选择产品分类",
|
||||||
|
trigger: "change",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
pattern: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "请选择申请模式",
|
||||||
|
trigger: "change",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
level: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "请选择级别",
|
||||||
|
trigger: "change",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
addressOptions0: [],
|
||||||
|
addressOptions1: [],
|
||||||
|
addressOptions2: [],
|
||||||
|
dgVisiable: false,
|
||||||
|
dgType: 1,
|
||||||
|
cccOptions: [],
|
||||||
|
levelOptions:[],
|
||||||
|
patternOptions: [
|
||||||
|
{
|
||||||
|
label: "正常",
|
||||||
|
value: "正常",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "ODM",
|
||||||
|
value: "ODM",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "OEM",
|
||||||
|
value: "OEM",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {},
|
||||||
|
watch: {
|
||||||
|
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getCCCOptions();
|
||||||
|
this.getlevelOptions();
|
||||||
|
if(this.action!='create'){
|
||||||
|
this.formData.id = this.certapp
|
||||||
|
this.getCertapp_()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {},
|
||||||
|
methods: {
|
||||||
|
close(val) {
|
||||||
|
// this.$refs['elForm'].resetFields()
|
||||||
|
this.$emit("closeDg", val);
|
||||||
|
},
|
||||||
|
getCertapp_(){
|
||||||
|
getCertapp(this.formData.id).then(res=>{
|
||||||
|
this.formData = res.data
|
||||||
|
})
|
||||||
|
},
|
||||||
|
handelConfirm() {
|
||||||
|
this.$refs["elForm"].validate((valid) => {
|
||||||
|
if (!valid) return;
|
||||||
|
if(this.formData.id){
|
||||||
|
updateCertapp(this.formData.id, this.formData).then((res) => {
|
||||||
|
this.$message.success('成功')
|
||||||
|
this.$emit("handleCommit", res.data);
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
createCertapp(this.formData).then((res) => {
|
||||||
|
this.$message.success('成功')
|
||||||
|
this.$emit("handleCommit", res.data);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
},
|
||||||
|
choose(val) {
|
||||||
|
this.dgType = val;
|
||||||
|
this.dgVisiable = true;
|
||||||
|
},
|
||||||
|
chooseComplete(val) {
|
||||||
|
this.dgVisiable = false;
|
||||||
|
if (val) {
|
||||||
|
if (this.dgType == 1) {
|
||||||
|
this.formData.manufacture = val.id;
|
||||||
|
this.formData.manufacture_v = {
|
||||||
|
name: val.name,
|
||||||
|
linkman_name: val.linkman1_name,
|
||||||
|
linkman_mobile: val.linkman1_mobile,
|
||||||
|
linkman_duty: val.linkman1_duty,
|
||||||
|
};
|
||||||
|
} else if (this.dgType == 2) {
|
||||||
|
this.formData.factory = val.id;
|
||||||
|
this.formData.factory_v = {
|
||||||
|
name: val.name,
|
||||||
|
linkman_name: val.linkman1_name,
|
||||||
|
linkman_mobile: val.linkman1_mobile,
|
||||||
|
linkman_duty: val.linkman1_duty,
|
||||||
|
person_count: val.person_count,
|
||||||
|
};
|
||||||
|
} else if (this.dgType == 0) {
|
||||||
|
this.formData.applicant = val.id;
|
||||||
|
this.formData.applicant_v = {
|
||||||
|
name: val.name,
|
||||||
|
linkman_name: val.linkman1_name,
|
||||||
|
linkman_mobile: val.linkman1_mobile,
|
||||||
|
linkman_duty: val.linkman1_duty,
|
||||||
|
person_count: val.person_count,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.getAddressList_(val.id);
|
||||||
|
},
|
||||||
|
getAddressList_(id) {
|
||||||
|
getAddressList({ enterprise: id }).then((res) => {
|
||||||
|
let data = genTree(res.data);
|
||||||
|
if(this.dgType==0){
|
||||||
|
this.addressOptions0 = data;
|
||||||
|
}else if(this.dgType==1){
|
||||||
|
this.addressOptions1 = data;
|
||||||
|
}else{
|
||||||
|
this.addressOptions2 = data;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
getCCCOptions() {
|
||||||
|
getDictList({ type__code: "ccc_list" }).then((res) => {
|
||||||
|
this.cccOptions = genTree(res.data);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
getlevelOptions(){
|
||||||
|
getDictList({ type__code: "certapp_level" }).then((res) => {
|
||||||
|
this.levelOptions = genTree(res.data);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
</style>
|
|
@ -0,0 +1,205 @@
|
||||||
|
<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-select
|
||||||
|
v-model="listQuery.is_onjob"
|
||||||
|
placeholder="是否在职"
|
||||||
|
clearable
|
||||||
|
class="filter-item"
|
||||||
|
style="margin-left:10px"
|
||||||
|
@change="handleFilter"
|
||||||
|
>
|
||||||
|
<el-option label="是" value="true"/>
|
||||||
|
<el-option label="否" value="false"/>
|
||||||
|
</el-select>
|
||||||
|
<el-select
|
||||||
|
v-model="listQuery.is_fulltime"
|
||||||
|
placeholder="是否全职"
|
||||||
|
clearable
|
||||||
|
class="filter-item"
|
||||||
|
style="margin-left:10px"
|
||||||
|
@change="handleFilter"
|
||||||
|
>
|
||||||
|
<el-option label="是" value="true"/>
|
||||||
|
<el-option label="否" value="false"/>
|
||||||
|
</el-select>
|
||||||
|
<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"
|
||||||
|
style="margin-left:10px"
|
||||||
|
>搜索</el-button>
|
||||||
|
<el-button
|
||||||
|
class="filter-item"
|
||||||
|
type="primary"
|
||||||
|
icon="el-icon-refresh-left"
|
||||||
|
@click="resetFilter"
|
||||||
|
>刷新重置</el-button>
|
||||||
|
</div>
|
||||||
|
<div style="margin-top:6px">
|
||||||
|
<el-button type="primary" icon="el-icon-plus" v-for="(item, index) in field_list" :key="'field_list' + index" @click="handleCreate(item,index)" size="mini">{{item.name}}</el-button>
|
||||||
|
<el-button type="warning" size="mini">+批量多体系</el-button>
|
||||||
|
</div>
|
||||||
|
<el-table
|
||||||
|
v-loading="listLoading"
|
||||||
|
:data="tableData.results"
|
||||||
|
style="width: 100%;margin-top:10px;"
|
||||||
|
border
|
||||||
|
fit
|
||||||
|
stripe
|
||||||
|
highlight-current-row
|
||||||
|
max-height="600"
|
||||||
|
>
|
||||||
|
<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"><el-tag>{{ scope.row.status}}</el-tag></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="操作">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="small"
|
||||||
|
:disabled="!checkPermission(['case_update'])"
|
||||||
|
@click="handleUpdate(scope)"
|
||||||
|
>编辑</el-button>
|
||||||
|
<el-button
|
||||||
|
type="danger"
|
||||||
|
size="small"
|
||||||
|
:disabled="!checkPermission(['case_delete'])"
|
||||||
|
@click="handleDelete(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()
|
||||||
|
},
|
||||||
|
handleCreate(item, index) {
|
||||||
|
this.$router.push({name:"CertappForm", params:{kind:item.code, action:'create'}})
|
||||||
|
},
|
||||||
|
handleUpdate(scope) {
|
||||||
|
this.$router.push({name:"CertappForm", params:{action:'update', kind:scope.row.cert_field_.code}, query:{id:scope.row.id}})
|
||||||
|
},
|
||||||
|
handleDelete(scope) {
|
||||||
|
deleteCertapp(scope.row.id).then(res=>{
|
||||||
|
this.$message.success('成功')
|
||||||
|
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
|
||||||
|
})
|
||||||
|
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
|
@ -0,0 +1,60 @@
|
||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<el-tabs type="border-card" >
|
||||||
|
<el-tab-pane label="申请信息" style="height:700px;overflow-y:auto;overflow-x:hidden;">
|
||||||
|
<CCCform :action="action" @handleCommit="save" :certapp="certapp" v-if="kind=='CCC'"></CCCform>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="产品单元" style="height:700px;overflow-y:auto;overflow-x:hidden;" v-if="certapp">
|
||||||
|
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="原材料供应商" style="height:700px;overflow-y:auto;overflow-x:hidden;" v-if="certapp">
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="检测设备" style="height:700px;overflow-y:auto;overflow-x:hidden;" v-if="certapp">
|
||||||
|
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="资料评审" style="height:700px;overflow-y:auto;overflow-x:hidden;" v-if="certapp">
|
||||||
|
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="收费信息" style="height:700px;overflow-y:auto;overflow-x:hidden;" v-if="certapp">
|
||||||
|
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import CCCform from "@/views/certapp/cccform"
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: { CCCform },
|
||||||
|
props: [],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
action:null,
|
||||||
|
certapp:null,
|
||||||
|
kind:null
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {},
|
||||||
|
watch: {
|
||||||
|
// "formData.cert_field": "changeRules"
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getParams()
|
||||||
|
},
|
||||||
|
mounted() {},
|
||||||
|
methods: {
|
||||||
|
getParams(){
|
||||||
|
var action = this.$route.params.action
|
||||||
|
var kind = this.$route.params.kind
|
||||||
|
this.action = action
|
||||||
|
this.kind = kind
|
||||||
|
if(action=='update'){
|
||||||
|
this.certapp = this.$route.query.id
|
||||||
|
}
|
||||||
|
},
|
||||||
|
save(val){
|
||||||
|
this.certapp=val.id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
|
@ -0,0 +1,54 @@
|
||||||
|
# Generated by Django 3.0.7 on 2020-08-12 06:54
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
import django.contrib.postgres.fields.jsonb
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
import django.utils.timezone
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('crm', '0011_enterprise_parent'),
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
('system', '0028_auto_20200807_1018'),
|
||||||
|
('project', '0015_auto_20200807_1753'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Case',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||||
|
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||||
|
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||||
|
('number', models.CharField(blank=True, max_length=100, null=True, verbose_name='受理编号')),
|
||||||
|
('apply_date', models.DateField(blank=True, null=True, verbose_name='申请日期')),
|
||||||
|
('accept_date', models.DateField(blank=True, null=True, verbose_name='受理日期')),
|
||||||
|
('applicant_v', django.contrib.postgres.fields.jsonb.JSONField(verbose_name='申请方')),
|
||||||
|
('status', models.CharField(choices=[('草稿', '草稿'), ('已申请', '已申请'), ('已受理', '已受理'), ('进行中', '进行中'), ('已中止', '已中止'), ('已完成', '已完成')], default='草稿', max_length=50, verbose_name='申请状态')),
|
||||||
|
('evresult', models.CharField(choices=[('未评审', '未评审'), ('合格', '合格'), ('不合格', '不合格'), ('有条件放行', '有条件放行')], default='未评审', max_length=50, verbose_name='评审结论')),
|
||||||
|
('evremark', models.TextField(blank=True, verbose_name='备注')),
|
||||||
|
('is_approve', models.BooleanField(default=True, verbose_name='是否认可')),
|
||||||
|
('pattern', models.CharField(blank=True, choices=[('正常', '正常'), ('ODM', 'ODM'), ('OEM', 'OEM')], max_length=50, null=True, verbose_name='申请模式')),
|
||||||
|
('manufacture_v', django.contrib.postgres.fields.jsonb.JSONField(null=True, verbose_name='制造商')),
|
||||||
|
('factory_v', django.contrib.postgres.fields.jsonb.JSONField(null=True, verbose_name='生产厂')),
|
||||||
|
('applicant', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='case_applicant', to='crm.Enterprise')),
|
||||||
|
('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='case_belong_dept', to='system.Organization', verbose_name='所属部门')),
|
||||||
|
('cccpv_class', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='case_cccpv_class', to='system.Dict', verbose_name='涉及CCC/PV分类')),
|
||||||
|
('cert_field', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='case_cert_field', to='system.Dict', verbose_name='认证领域')),
|
||||||
|
('cnas_scopes', models.ManyToManyField(blank=True, related_name='case_cnas_sopes', to='system.Dict', verbose_name='涉及cnas分类')),
|
||||||
|
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='case_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||||
|
('factory', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='case_factory', to='crm.Enterprise')),
|
||||||
|
('manufacture', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='case_manufacture', to='crm.Enterprise')),
|
||||||
|
('project', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='case_project', to='project.Project')),
|
||||||
|
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='case_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': '认证受理',
|
||||||
|
'verbose_name_plural': '认证受理',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,57 @@
|
||||||
|
# Generated by Django 3.0.7 on 2020-08-12 08:54
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
import django.contrib.postgres.fields.jsonb
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
import django.utils.timezone
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
('system', '0028_auto_20200807_1018'),
|
||||||
|
('crm', '0011_enterprise_parent'),
|
||||||
|
('project', '0016_case'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='CertApp',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||||
|
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||||
|
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||||
|
('number', models.CharField(blank=True, max_length=100, null=True, verbose_name='受理编号')),
|
||||||
|
('apply_date', models.DateField(blank=True, null=True, verbose_name='申请日期')),
|
||||||
|
('accept_date', models.DateField(blank=True, null=True, verbose_name='受理日期')),
|
||||||
|
('applicant_v', django.contrib.postgres.fields.jsonb.JSONField(verbose_name='申请方')),
|
||||||
|
('status', models.CharField(choices=[('草稿', '草稿'), ('已申请', '已申请'), ('已受理', '已受理'), ('进行中', '进行中'), ('已中止', '已中止'), ('已完成', '已完成')], default='草稿', max_length=50, verbose_name='申请状态')),
|
||||||
|
('evresult', models.CharField(choices=[('未评审', '未评审'), ('合格', '合格'), ('不合格', '不合格'), ('有条件放行', '有条件放行')], default='未评审', max_length=50, verbose_name='评审结论')),
|
||||||
|
('evremark', models.TextField(blank=True, verbose_name='备注')),
|
||||||
|
('is_approve', models.BooleanField(default=True, verbose_name='是否认可')),
|
||||||
|
('pattern', models.CharField(blank=True, choices=[('正常', '正常'), ('ODM', 'ODM'), ('OEM', 'OEM')], max_length=50, null=True, verbose_name='申请模式')),
|
||||||
|
('manufacture_v', django.contrib.postgres.fields.jsonb.JSONField(null=True, verbose_name='制造商')),
|
||||||
|
('factory_v', django.contrib.postgres.fields.jsonb.JSONField(null=True, verbose_name='生产厂')),
|
||||||
|
('applicant', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='certapp_applicant', to='crm.Enterprise')),
|
||||||
|
('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='certapp_belong_dept', to='system.Organization', verbose_name='所属部门')),
|
||||||
|
('cccpv_class', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='certapp_cccpv_class', to='system.Dict', verbose_name='涉及CCC/PV分类')),
|
||||||
|
('cert_field', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='certapp_cert_field', to='system.Dict', verbose_name='认证领域')),
|
||||||
|
('cnas_scopes', models.ManyToManyField(blank=True, related_name='certapp_cnas_sopes', to='system.Dict', verbose_name='涉及cnas分类')),
|
||||||
|
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='certapp_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||||
|
('factory', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='certapp_factory', to='crm.Enterprise')),
|
||||||
|
('manufacture', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='certapp_manufacture', to='crm.Enterprise')),
|
||||||
|
('project', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='certapp_project', to='project.Project')),
|
||||||
|
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='certapp_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': '认证受理',
|
||||||
|
'verbose_name_plural': '认证受理',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='Case',
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,20 @@
|
||||||
|
# Generated by Django 3.0.7 on 2020-08-13 06:39
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('system', '0028_auto_20200807_1018'),
|
||||||
|
('project', '0017_auto_20200812_1654'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='certapp',
|
||||||
|
name='level',
|
||||||
|
field=models.ForeignKey(default=111, on_delete=django.db.models.deletion.DO_NOTHING, related_name='certapp_level', to='system.Dict', verbose_name='业务级别'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -15,7 +15,56 @@ class Project(CommonBModel):
|
||||||
认证项目
|
认证项目
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class CertApp(CommonBModel):
|
||||||
|
"""
|
||||||
|
认证受理
|
||||||
|
"""
|
||||||
|
status_choices = (
|
||||||
|
('草稿', '草稿'),
|
||||||
|
('已申请', '已申请'),
|
||||||
|
('已受理', '已受理'),
|
||||||
|
('进行中', '进行中'),
|
||||||
|
('已中止', '已中止'),
|
||||||
|
('已完成', '已完成')
|
||||||
|
)
|
||||||
|
result_choices = (
|
||||||
|
('未评审', '未评审'),
|
||||||
|
('合格', '合格'),
|
||||||
|
('不合格', '不合格'),
|
||||||
|
('有条件放行', '有条件放行')
|
||||||
|
)
|
||||||
|
number = models.CharField('受理编号', max_length = 100, null=True, blank=True)
|
||||||
|
apply_date = models.DateField('申请日期', null=True, blank=True)
|
||||||
|
accept_date = models.DateField('受理日期', null=True, blank=True)
|
||||||
|
|
||||||
|
applicant_v = JSONField(verbose_name='申请方')
|
||||||
|
applicant = models.ForeignKey(Enterprise, related_name='certapp_applicant', on_delete=models.DO_NOTHING)
|
||||||
|
|
||||||
|
status = models.CharField('申请状态', choices=status_choices, default='草稿', max_length=50)
|
||||||
|
evresult = models.CharField('评审结论', choices = result_choices, default='未评审', max_length=50)
|
||||||
|
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)
|
||||||
|
pattern_choices = (
|
||||||
|
('正常', '正常'),
|
||||||
|
('ODM', 'ODM'),
|
||||||
|
('OEM', 'OEM')
|
||||||
|
)
|
||||||
|
cert_field = models.ForeignKey(Dict, verbose_name='认证领域', related_name='certapp_cert_field', on_delete=models.DO_NOTHING)
|
||||||
|
cccpv_class = models.ForeignKey(Dict, verbose_name='涉及CCC/PV分类', related_name='certapp_cccpv_class', on_delete=models.DO_NOTHING, null=True, blank=True)
|
||||||
|
cnas_scopes = models.ManyToManyField(Dict, verbose_name='涉及cnas分类', related_name='certapp_cnas_sopes', blank=True)
|
||||||
|
project = models.ForeignKey(Project, related_name='certapp_project', on_delete=models.SET_NULL, null=True)
|
||||||
|
is_approve = models.BooleanField('是否认可', default=True)
|
||||||
|
pattern = models.CharField('申请模式', choices=pattern_choices, max_length=50, null=True, blank=True)
|
||||||
|
manufacture = models.ForeignKey(Enterprise, on_delete=models.CASCADE, related_name='certapp_manufacture', null=True, blank=True)
|
||||||
|
manufacture_v = JSONField(verbose_name='制造商', null=True)
|
||||||
|
factory = models.ForeignKey(Enterprise, on_delete=models.CASCADE, related_name='certapp_factory', null=True, blank=True)
|
||||||
|
factory_v = JSONField(verbose_name='生产厂', null=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = '认证受理'
|
||||||
|
verbose_name_plural = verbose_name
|
||||||
|
|
||||||
class Application(CommonBModel):
|
class Application(CommonBModel):
|
||||||
"""
|
"""
|
||||||
主申请
|
主申请
|
||||||
|
|
|
@ -34,4 +34,13 @@ class SubApplicationUpdateSerializer(serializers.ModelSerializer):
|
||||||
cnas_scopes_ = DictSerializer(source='cnas_scopes', many=True)
|
cnas_scopes_ = DictSerializer(source='cnas_scopes', many=True)
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SubApplication
|
model = SubApplication
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
class CertappSerializer(serializers.ModelSerializer):
|
||||||
|
cert_field_ = DictSerializer(source='cert_field', read_only=True)
|
||||||
|
cccpv_class_ = DictSerializer(source='cccpv_class' , read_only=True)
|
||||||
|
cnas_scopes_ = DictSerializer(source='cnas_scopes', many=True , read_only=True)
|
||||||
|
create_by_ = UserListSerializer(source='create_by', read_only=True)
|
||||||
|
class Meta:
|
||||||
|
model = CertApp
|
||||||
fields = '__all__'
|
fields = '__all__'
|
|
@ -5,6 +5,7 @@ from rest_framework import routers
|
||||||
router = routers.DefaultRouter()
|
router = routers.DefaultRouter()
|
||||||
router.register('application', ApplicationViewSet, basename="application")
|
router.register('application', ApplicationViewSet, basename="application")
|
||||||
router.register('subapplication', SubApplicationViewSet, basename="subapplication")
|
router.register('subapplication', SubApplicationViewSet, basename="subapplication")
|
||||||
|
router.register('certapp', CertappViewset, basename="certapp")
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', include(router.urls))
|
path('', include(router.urls))
|
||||||
]
|
]
|
|
@ -58,4 +58,25 @@ class SubApplicationViewSet(CreateUpdateCustomMixin, ModelViewSet):
|
||||||
|
|
||||||
if ((not self.request.query_params.get('page', None)) and (self.request.query_params.get('application', None))) or (self.paginator is None):
|
if ((not self.request.query_params.get('page', None)) and (self.request.query_params.get('application', None))) or (self.paginator is None):
|
||||||
return None
|
return None
|
||||||
return self.paginator.paginate_queryset(queryset, self.request, view=self)
|
return self.paginator.paginate_queryset(queryset, self.request, view=self)
|
||||||
|
|
||||||
|
class CertappViewset(CreateUpdateCustomMixin, ModelViewSet):
|
||||||
|
"""
|
||||||
|
申请受理
|
||||||
|
"""
|
||||||
|
perms_map = {'get': 'certapp_view', 'post':'certapp_create', 'put':'certapp_update','delete': 'certapp_delete'}
|
||||||
|
queryset = CertApp.objects.all()
|
||||||
|
serializer_class = CertappSerializer
|
||||||
|
ordering = ['-create_time']
|
||||||
|
|
||||||
|
def create(self, request, *args, **kwargs):
|
||||||
|
postdata = request.data
|
||||||
|
postdata['number'] = random.randrange(1000,2000)
|
||||||
|
if postdata.get('field_code', None):
|
||||||
|
postdata['cert_field'] = Dict.objects.get(code=postdata['field_code']).id
|
||||||
|
print(postdata)
|
||||||
|
serializer = self.get_serializer(data=postdata)
|
||||||
|
serializer.is_valid(raise_exception=True)
|
||||||
|
self.perform_create(serializer)
|
||||||
|
headers = self.get_success_headers(serializer.data)
|
||||||
|
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
Loading…
Reference in New Issue