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',
|
||||
component: Layout,
|
||||
redirect: '/project/application',
|
||||
redirect: '/project/case',
|
||||
name: 'ProjectManage',
|
||||
meta: { title: '认证项目', icon: 'example'},
|
||||
children: [
|
||||
|
@ -72,7 +72,13 @@ export const asyncRoutes = [
|
|||
path: 'application',
|
||||
name: 'Applicaion',
|
||||
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',
|
||||
|
@ -87,6 +93,13 @@ export const asyncRoutes = [
|
|||
meta: { title: '认证申请', icon: 'example', perms: ['application_create', 'application_update'] },
|
||||
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>
|
||||
<el-button size="mini" type="primary" style="margin-bottom:2px">操作按钮</el-button>
|
||||
<div>
|
||||
<label>申请领域:</label><span> {{item.cert_field_.name}}</span>
|
||||
<span>申请领域:</span><span> {{item.cert_field_.name}}</span>
|
||||
</div>
|
||||
<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 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 >
|
||||
<label>申请方:</label><span> {{formData.applicant_v.name}}</span>
|
||||
<span>申请方:</span><span> {{formData.applicant_v.name}}</span>
|
||||
</div>
|
||||
<div v-if="item.manufacture">
|
||||
<label>制造商:</label><span> {{item.manufacture_v.name}}</span>
|
||||
<span>制造商:</span><span> {{item.manufacture_v.name}}</span>
|
||||
</div>
|
||||
<div v-if="item.factory">
|
||||
<label>生产厂:</label><span> {{item.factory_v.name}}</span>
|
||||
<span>生产厂:</span><span> {{item.factory_v.name}}</span>
|
||||
</div>
|
||||
<div v-if="item.pattern">
|
||||
<label>申请模式:</label><span> {{item.pattern}}</span>
|
||||
<span>申请模式:</span><span> {{item.pattern}}</span>
|
||||
</div>
|
||||
|
||||
</el-card>
|
||||
|
@ -148,7 +148,11 @@
|
|||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style >
|
||||
.el-card__body{
|
||||
font-size:16px
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
import Enterprisechose from "@/views/enterprise/enterprisechoose"
|
||||
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
|
||||
|
||||
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):
|
||||
"""
|
||||
主申请
|
||||
|
|
|
@ -34,4 +34,13 @@ class SubApplicationUpdateSerializer(serializers.ModelSerializer):
|
|||
cnas_scopes_ = DictSerializer(source='cnas_scopes', many=True)
|
||||
class Meta:
|
||||
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__'
|
|
@ -5,6 +5,7 @@ from rest_framework import routers
|
|||
router = routers.DefaultRouter()
|
||||
router.register('application', ApplicationViewSet, basename="application")
|
||||
router.register('subapplication', SubApplicationViewSet, basename="subapplication")
|
||||
router.register('certapp', CertappViewset, basename="certapp")
|
||||
urlpatterns = [
|
||||
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):
|
||||
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