This commit is contained in:
caoqianming 2020-08-21 15:54:28 +08:00
parent 0487fac0c2
commit 125d22d7a2
10 changed files with 966 additions and 183 deletions

View File

@ -3,7 +3,9 @@
<router-view /> <router-view />
</div> </div>
</template> </template>
<style >
</style>
<script> <script>
export default { export default {
name: 'App' name: 'App'

View File

@ -32,6 +32,13 @@ export function updateCertapp(id, data) {
}) })
} }
export function completeCertapp(id) {
return request({
url: `/project/certapp/${id}/complete/`,
method: 'put',
})
}
export function getCertapp(id) { export function getCertapp(id) {
return request({ return request({
url: `/project/certapp/${id}/`, url: `/project/certapp/${id}/`,

48
client/src/api/project.js Normal file
View File

@ -0,0 +1,48 @@
import request from '@/utils/request'
export function getProjectList(query) {
return request({
url: '/project/project/',
method: 'get',
params: query
})
}
export function createProject(data) {
return request({
url: '/project/project/',
method: 'post',
data
})
}
export function deleteProject(id) {
return request({
url: `/project/project/${id}/`,
method: 'delete'
})
}
export function updateProject(id, data) {
return request({
url: `/project/project/${id}/`,
method: 'put',
data
})
}
export function getProject(id) {
return request({
url: `/project/project/${id}/`,
method: 'get',
})
}
export function assginProject(id, data) {
return request({
url: `/project/project/${id}/assgin/`,
method: 'put',
data
})
}

View File

@ -68,23 +68,29 @@ export const asyncRoutes = [
name: 'ProjectManage', name: 'ProjectManage',
meta: { title: '认证项目', icon: 'example'}, meta: { title: '认证项目', icon: 'example'},
children: [ children: [
// { {
// 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: '业务受理2', icon: 'example', perms: ['application_view'] }
// }, },
{ {
path: 'certapp', path: 'certapp',
name: 'Certapp', name: 'Certapp',
component: () => import('@/views/certapp/certapp'), component: () => import('@/views/certapp/certapp'),
meta: { title: '认证受理', icon: 'example', perms: ['certapp_view'] } meta: { title: '业务受理1', icon: 'example', perms: ['certapp_view'] }
}, },
{ // {
path: 'application2', // path: 'application2',
name: 'Applicaion2', // name: 'Applicaion2',
component: () => import('@/views/employee/train'), // component: () => import('@/views/employee/train'),
meta: { title: '客户申请受理', icon: 'example', perms: ['application_accept'] } // meta: { title: '客户申请受理', icon: 'example', perms: ['application_accept'] }
// },
{
path: 'project',
name: 'Project',
component: () => import('@/views/project/project'),
meta: { title: '项目制定', icon: 'example', perms: ['project_view'] }
}, },
{ {
path: 'application/applicationform/', path: 'application/applicationform/',
@ -97,11 +103,32 @@ export const asyncRoutes = [
path: 'certapp/:action/:kind/', path: 'certapp/:action/:kind/',
name: 'CertappForm', name: 'CertappForm',
component: () => import('@/views/certapp/certappform'), component: () => import('@/views/certapp/certappform'),
meta: { title: '认证受理单', icon: 'example', perms: ['certapp_create', 'certapp_update'] }, meta: { title: '申请受理单', icon: 'example', perms: ['certapp_create', 'certapp_update'] },
hidden: true hidden: true
}, },
] ]
}, },
{
path: '/plan',
component: Layout,
redirect: '/plan/plan',
name: 'PlanManage',
meta: { title: '审核策划', icon: 'example'},
children: [
{
path: 'plan',
name: 'plan',
component: () => import('@/views/certapp/certapp'),
meta: { title: '计划', icon: 'example', perms: ['certapp_view'] }
},
{
path: 'paichai',
name: 'paichai',
component: () => import('@/views/project/project'),
meta: { title: '派差', icon: 'example', perms: ['project_view'] }
},
]
},
{ {
path: '/employee', path: '/employee',
component: Layout, component: Layout,
@ -157,61 +184,6 @@ export const asyncRoutes = [
}, },
] ]
}, },
{
path: '/certset',
component: Layout,
redirect: '/certset/implementrule',
name: 'certset',
meta: { title: '认证配置', icon: 'example'},
children: [
{
path: 'implementrule',
name: 'ImplementRule',
component: () => import('@/views/implementrule/implementrule'),
meta: { title: '认证规则', icon: 'example', perms: ['implementrule_manage'] }
},
{
path: 'standard',
name: 'Standard',
component: () => import('@/views/standard/standard'),
meta: { title: '标准库', icon: 'example', perms: ['standard_manage'] }
},
{
path: 'implementrule/create',
name: 'ImplementRuleCreate',
component: () => import('@/views/implementrule/implementrulecreate.vue'),
meta: { title: '新增规则', noCache: true, icon: '', perms: ['implementrule_create']},
hidden: true
},
{
path: 'implementrule/update',
name: 'ImplementRuleUpdate',
component: () => import('@/views/implementrule/implementruleupdate.vue'),
meta: { title: '编辑规则', noCache: true, icon: '', perms: ['implementrule_update']},
hidden: true
},
{
path: 'evaluationitem',
name: 'evaluationitem',
component: () => import('@/views/evaluation/evaluationitem'),
meta: { title: '评审信息', icon: 'example', perms: ['evaluation_manage'] }
},
{
path: 'evaluationitem/create',
name: 'evaluationitemcreate',
component: () => import('@/views/evaluation/evaluationitemcreate.vue'),
meta: { title: '新增规则', noCache: true, icon: '', perms: ['evaluationitem_create'] },
hidden: true
},
{
path: 'evaluationitem/update',
name: 'evaluationitemupdate',
component: () => import('@/views/evaluation/evaluationitemupdate.vue'),
meta: { title: '新增规则', noCache: true, icon: '', perms: ['evaluationitem_update'] },
hidden: true
},
]
},
{ {
path: '/crm', path: '/crm',
component: Layout, component: Layout,
@ -271,6 +243,61 @@ export const asyncRoutes = [
] ]
}, },
{
path: '/certset',
component: Layout,
redirect: '/certset/implementrule',
name: 'certset',
meta: { title: '认证配置', icon: 'example'},
children: [
{
path: 'implementrule',
name: 'ImplementRule',
component: () => import('@/views/implementrule/implementrule'),
meta: { title: '认证规则', icon: 'example', perms: ['implementrule_manage'] }
},
{
path: 'standard',
name: 'Standard',
component: () => import('@/views/standard/standard'),
meta: { title: '标准库', icon: 'example', perms: ['standard_manage'] }
},
{
path: 'implementrule/create',
name: 'ImplementRuleCreate',
component: () => import('@/views/implementrule/implementrulecreate.vue'),
meta: { title: '新增规则', noCache: true, icon: '', perms: ['implementrule_create']},
hidden: true
},
{
path: 'implementrule/update',
name: 'ImplementRuleUpdate',
component: () => import('@/views/implementrule/implementruleupdate.vue'),
meta: { title: '编辑规则', noCache: true, icon: '', perms: ['implementrule_update']},
hidden: true
},
{
path: 'evaluationitem',
name: 'evaluationitem',
component: () => import('@/views/evaluation/evaluationitem'),
meta: { title: '评审信息', icon: 'example', perms: ['evaluation_manage'] }
},
{
path: 'evaluationitem/create',
name: 'evaluationitemcreate',
component: () => import('@/views/evaluation/evaluationitemcreate.vue'),
meta: { title: '新增规则', noCache: true, icon: '', perms: ['evaluationitem_create'] },
hidden: true
},
{
path: 'evaluationitem/update',
name: 'evaluationitemupdate',
component: () => import('@/views/evaluation/evaluationitemupdate.vue'),
meta: { title: '新增规则', noCache: true, icon: '', perms: ['evaluationitem_update'] },
hidden: true
},
]
},
{ {
path: '/system', path: '/system',
component: Layout, component: Layout,

View File

@ -226,7 +226,21 @@
<el-switch v-model="formData.is_approve"></el-switch> <el-switch v-model="formData.is_approve"></el-switch>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row>
<!-- <el-col :xs="24" :md="12">
<el-form-item label="认证范围" >
<el-input readonly placeholder="填写产品单元后自动生成"></el-input>
</el-form-item>
</el-col> -->
<el-col :xs="24" :md="12">
<el-form-item label="备注" >
<el-input v-model="formData.remark" type="textarea"
:autosize="{ minRows: 2, maxRows: 4}"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form> </el-form>
<div slot="footer" align="center"> <div slot="footer" align="center">
<el-button @click="close(false)">取消</el-button> <el-button @click="close(false)">取消</el-button>
@ -244,7 +258,7 @@
</div> </div>
</template> </template>
<script> <script>
import { createCertapp, updateCertapp, getCertapp } from "@/api/certapp"; import { createCertapp, updateCertapp } from "@/api/certapp";
import Enterprisechose from "@/views/enterprise/enterprisechoose"; import Enterprisechose from "@/views/enterprise/enterprisechoose";
import { getAddressList } from "@/api/enterprise"; import { getAddressList } from "@/api/enterprise";
import { genTree } from "../../utils"; import { genTree } from "../../utils";
@ -269,7 +283,8 @@ export default {
factory_v: {}, factory_v: {},
cccpv_class: null, cccpv_class: null,
pattern: "正常", pattern: "正常",
is_approve:true is_approve:true,
level:null
}, },
rules: { rules: {
apply_date: [ apply_date: [
@ -357,12 +372,13 @@ export default {
}, },
created() { created() {
console.log(this.certapp)
if(this.action!='create'){
this.formData = this.certapp
}
this.getCCCOptions(); this.getCCCOptions();
this.getlevelOptions(); this.getlevelOptions();
if(this.action!='create'){
this.formData.id = this.certapp
this.getCertapp_()
}
}, },
mounted() {}, mounted() {},
methods: { methods: {
@ -370,11 +386,6 @@ export default {
// this.$refs['elForm'].resetFields() // this.$refs['elForm'].resetFields()
this.$emit("closeDg", val); this.$emit("closeDg", val);
}, },
getCertapp_(){
getCertapp(this.formData.id).then(res=>{
this.formData = res.data
})
},
handelConfirm() { handelConfirm() {
this.$refs["elForm"].validate((valid) => { this.$refs["elForm"].validate((valid) => {
if (!valid) return; if (!valid) return;
@ -386,7 +397,7 @@ export default {
}else{ }else{
createCertapp(this.formData).then((res) => { createCertapp(this.formData).then((res) => {
this.$message.success('成功') this.$message.success('成功')
this.$emit("handleCommit", res.data); this.$router.replace({name:"CertappForm", params:{action:'update', kind:'CCC'}, query:{id:res.data.id}})
}); });
} }

View File

@ -54,7 +54,7 @@
</div> </div>
<div style="margin-top:6px"> <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="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> <el-button type="warning" size="mini" icon="el-icon-plus">批量多体系</el-button>
</div> </div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
@ -67,7 +67,7 @@
max-height="600" max-height="600"
> >
<el-table-column type="index" width="50" /> <el-table-column type="index" width="50" />
<el-table-column label="单号"> <el-table-column label="申请单号">
<template slot-scope="scope" v-if="scope.row.number">{{ scope.row.number }}</template> <template slot-scope="scope" v-if="scope.row.number">{{ scope.row.number }}</template>
</el-table-column> </el-table-column>
<el-table-column label="认证领域/分类"> <el-table-column label="认证领域/分类">
@ -84,7 +84,9 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="当前状态"> <el-table-column label="当前状态">
<template slot-scope="scope"><el-tag>{{ scope.row.status}}</el-tag></template> <template slot-scope="scope">
{{ scope.row.status}}
</template>
</el-table-column> </el-table-column>
<el-table-column label="创建人"> <el-table-column label="创建人">
<template slot-scope="scope">{{ scope.row.create_by_.name}}</template> <template slot-scope="scope">{{ scope.row.create_by_.name}}</template>
@ -96,6 +98,7 @@
</el-table-column> </el-table-column>
<el-table-column label="操作"> <el-table-column label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
type="primary" type="primary"
size="small" size="small"

View File

@ -1,22 +1,27 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-tabs > <el-tabs >
<el-tab-pane label="申请信息" style="height:700px;overflow-y:auto;overflow-x:hidden;"> <el-tab-pane label="申请信息" >
<div v-if="isLoad">
<CCCform :action="action" @handleCommit="save" :certapp="certapp" v-if="kind=='CCC'"></CCCform> <CCCform :action="action" @handleCommit="save" :certapp="certapp" v-if="kind=='CCC'"></CCCform>
</div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="产品单元" style="height:700px;overflow-y:auto;overflow-x:hidden;" v-if="certapp"> <el-tab-pane label="产品单元" v-if="certapp">
<Productunit :certapp="certapp"></Productunit> <Productunit :certapp="certapp"></Productunit>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="原材料供应商" style="height:700px;overflow-y:auto;overflow-x:hidden;" v-if="certapp"> <el-tab-pane label="原材料供应商" v-if="certapp">
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="检测设备" style="height:700px;overflow-y:auto;overflow-x:hidden;" v-if="certapp"> <el-tab-pane label="检测设备" v-if="certapp">
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="资料评审" style="height:700px;overflow-y:auto;overflow-x:hidden;" v-if="certapp"> <el-tab-pane label="资料评审" v-if="certapp">
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="收费信息" style="height:700px;overflow-y:auto;overflow-x:hidden;" v-if="certapp"> <el-tab-pane label="收费信息" v-if="certapp">
<el-button
type="primary"
@click="handleComplete()"
>完成受理</el-button>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
@ -24,14 +29,17 @@
<script> <script>
import CCCform from "@/views/certapp/cccform" import CCCform from "@/views/certapp/cccform"
import Productunit from "@/views/certapp/productunit" import Productunit from "@/views/certapp/productunit"
import { getCertapp, completeCertapp } from "@/api/certapp"
import router from '@/router';
export default { export default {
components: { CCCform, Productunit}, components: { CCCform, Productunit},
props: [], props: [],
data() { data() {
return { return {
action:null, action:'create',
certapp:null, certapp:null,
kind:null kind:'CCC',
isLoad:false
}; };
}, },
computed: {}, computed: {},
@ -49,11 +57,22 @@ export default {
this.action = action this.action = action
this.kind = kind this.kind = kind
if(action=='update'){ if(action=='update'){
this.certapp = this.$route.query.id getCertapp(this.$route.query.id).then(res=>{
this.certapp = res.data
this.isLoad = true
})
}else{
this.isLoad = true
} }
}, },
save(val){ save(val){
this.certapp=val.id this.certapp=val
},
handleComplete(){
completeCertapp(this.certapp.id).then(res=>{
this.$message.success('成功')
this.$router.go(-1)
})
} }
} }
}; };

View File

@ -1,136 +1,317 @@
<template> <template>
<div> <div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="tableData.results" :data="tableData.results"
style="width: 100%;margin-top:10px;" style="width: 100%;margin-top:10px;"
border border
fit fit
stripe stripe
highlight-current-row highlight-current-row
max-height="400" height="380"
> @row-click="rowClick"
<el-table-column type="index" width="50" /> >
<el-table-column label="单号"> <el-table-column type="index" width="50" />
<template slot-scope="scope" v-if="scope.row.number">{{ scope.row.number }}</template> <el-table-column label="单元名称">
</el-table-column> <template slot-scope="scope" >{{ scope.row.name }}</template>
<el-table-column label="认证领域/分类"> </el-table-column>
<template slot-scope="scope"> <el-table-column label="单元描述">
<el-tag >{{scope.row.cert_field_.name}}</el-tag> <template slot-scope="scope" >{{ scope.row.description }}</template>
<el-tag v-if="scope.row.cccpv_class_" type="warning" style="margin:2px">{{scope.row.cccpv_class_.name}}</el-tag> </el-table-column>
</template> <el-table-column label="采用标准">
</el-table-column> <template slot-scope="scope" >{{ scope.row.standard_.fullname }}</template>
<el-table-column label="申请信息" width="300px"> </el-table-column>
<template slot-scope="scope"> <el-table-column label="创建时间">
<div><span style="color:darkblue;font-weight:bold">申请方</span>:{{ scope.row.applicant_v.name }}</div> <template slot-scope="scope">
<div v-if="scope.row.manufacture"><span style="color:darkblue;font-weight:bold">制造商</span>:{{ scope.row.manufacture_v.name }}</div> <span>{{ scope.row.create_time }}</span>
<div v-if="scope.row.factory"><span style="color:darkblue;font-weight:bold">生产厂</span>:{{ scope.row.factory_v.name }}</div> </template>
</template> </el-table-column>
</el-table-column> <el-table-column label="操作">
<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"> <template slot-scope="scope">
<el-button
type="primary"
size="small"
:disabled="!checkPermission(['case_update'])"
@click="handleUpdate(scope)"
>编辑</el-button>
<el-button <el-button
type="danger" type="danger"
size="small" size="small"
:disabled="!checkPermission(['case_delete'])" :disabled="!checkPermission(['certapps_update'])"
@click="handleDelete(scope)" @click="handleDelete(scope)"
>删除</el-button> >删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination
v-show="tableData.count>0" v-show="tableData.count>0"
:total="tableData.count" :total="tableData.count"
:page.sync="listQuery.page" :page.sync="listQuery.page"
:limit.sync="listQuery.page_size" :limit.sync="listQuery.page_size"
@pagination="getList" @pagination="getList"
/> />
<el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="80px" style="margin-top:10px">
<el-col :xs="24" :md="12">
<el-form-item label="实施规则" prop="implementrule">
<el-select
v-model="formData.implementrule"
placeholder="请选择实施规则"
clearable
:style="{width: '100%'}"
@change="changeTypeOptions"
>
<el-option
v-for="(item, index) in implementruleOptions"
:key="index"
:label="item.fullname"
:value="item.id"
:disabled="item.disabled"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :md="12">
<el-form-item label="单元类型" prop="unittype">
<el-select
v-model="formData.unittype"
placeholder="请选择单元类型"
clearable
:style="{width: '100%'}"
@change="changeUnit"
>
<el-option
v-for="(item, index) in unittypeOptions"
: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="12">
<el-form-item label="采用标准" prop="standard">
<el-input
v-model="formData.standard_.fullname"
placeholder="请输入采用标准"
readonly
clearable
:style="{width: '100%'}"
></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :md="12">
<el-form-item label="检测机构" prop="testorg">
<el-select v-model="formData.testorg" placeholder="请选择检测机构" clearable :style="{width: '100%'}">
<el-option
v-for="(item, index) in testorgOptions"
: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="8">
<el-form-item label="单元名称" prop="name">
<el-input
v-model="formData.name"
placeholder="请输入单元名称"
clearable
:style="{width: '100%'}"
></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :md="16">
<el-form-item label="单元描述" prop="description">
<el-input
v-model="formData.description"
placeholder="请输入单元描述"
clearable
:style="{width: '100%'}"
></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item size="large">
<el-button type="primary" @click="createNew">创建新记录</el-button>
<el-button type="primary" @click="updateNow">保存</el-button>
<el-button @click="resetForm">重置</el-button>
</el-form-item>
</el-col>
</el-form>
</div> </div>
</template> </template>
<script> <script>
import { getUnitList, deleteUnit, createUnit, updateUnit } from "@/api/unit" import { getImplementRuleList, getUnitTypeList } from "@/api/implementrule"
import { getDictList } from "@/api/dict" import { getUnitList, deleteUnit, createUnit, updateUnit } from "@/api/unit";
import Pagination from "@/components/Pagination" import { getDictList } from "@/api/dict";
import checkPermission from '@/utils/permission' import Pagination from "@/components/Pagination";
import Treeselect from '@riophae/vue-treeselect' import checkPermission from "@/utils/permission";
import '@riophae/vue-treeselect/dist/vue-treeselect.css' import Treeselect from "@riophae/vue-treeselect";
import { genTree } from '../../utils' import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { genTree } from "../../utils";
export default { export default {
name:"Productunit", name: "Productunit",
components: { Pagination, Treeselect }, components: { Pagination, Treeselect },
props:['certapp'],
data() { data() {
return { return {
tableData: {count:0}, tableData: { count: 0 },
listLoading: true, listLoading: true,
listQuery: { listQuery: {
page: 1, page: 1,
page_size: 20 page_size: 20,
certapp:this.certapp.id
}, },
formData: {
certapp:this.certapp.id,
implementrule: undefined,
unittype: undefined,
standard: undefined,
standard_:{},
testorg: undefined,
name: undefined,
description: undefined,
},
rules: {
implementrule: [
{
required: true,
message: "请选择实施规则",
trigger: "change",
},
],
unittype: [
{
required: true,
message: "请选择单元类型",
trigger: "change",
},
],
standard: [],
testorg: [],
name: [
{
required: true,
message: "请输入单元名称",
trigger: "blur",
},
],
description: [
{
required: true,
message: "请输入单元描述",
trigger: "blur",
},
],
},
implementruleOptions: [
],
unittypeOptions: [
],
testorgOptions: [
],
}; };
}, },
watch:{
'formData.implementrule': function(val){
this.changeTypeOptions()
},
},
created() { created() {
this.getList() this.getList();
this.getImplementRuleOptions()
}, },
methods: { methods: {
checkPermission, checkPermission,
getList() { getList() {
this.listLoading = true; this.listLoading = true;
getUnitList(this.listQuery).then(response => { getUnitList(this.listQuery).then((response) => {
if (response.data) { if (response.data) {
this.tableData = response.data this.tableData = response.data;
} }
this.listLoading = false this.listLoading = false;
}); });
}, },
resetFilter() { resetFilter() {
this.listQuery = { this.listQuery = {
page: 1, page: 1,
page_size: 20 page_size: 20,
} };
this.getList() this.getList();
}, },
handleFilter() { handleFilter() {
this.listQuery.page = 1 this.listQuery.page = 1;
this.getList() this.getList();
}, },
handleCreate(item, index) { handleCreate(item, index) {
this.$router.push({name:"CertappForm", params:{kind:item.code, action:'create'}}) this.$router.push({
name: "CertappForm",
params: { kind: item.code, action: "create" },
});
}, },
handleUpdate(scope) { handleUpdate(scope) {
this.$router.push({name:"CertappForm", params:{action:'update', kind:scope.row.cert_field_.code}, query:{id:scope.row.id}}) this.$router.push({
name: "CertappForm",
params: { action: "update", kind: scope.row.cert_field_.code },
query: { id: scope.row.id },
});
}, },
handleDelete(scope) { handleDelete(scope) {
this.$confirm('确定删除?', '警告', { this.$confirm("确定删除?", "警告", {
// confirmButtonText: '确定', // confirmButtonText: '确定',
// cancelButtonText: '取消', // cancelButtonText: '取消',
type: 'warning' type: "warning",
}).then(()=>{ }).then(() => {
deleteUnit(scope.row.id).then(res=>{ deleteUnit(scope.row.id).then((res) => {
this.$message.success('成功') this.$message.success("成功");
this.getList() this.getList();
}) });
}) }).catch(()=>{});
}, },
} createNew() {
this.$refs['elForm'].validate(valid => {
if (!valid) return
// TODO 提交表单
createUnit(this.formData).then(res=>{
this.getList()
this.$message.success('成功')
})
})
},
updateNow(){
this.$refs['elForm'].validate(valid => {
if (!valid) return
// TODO 提交表单
updateUnit(this.formData.id, this.formData).then(res=>{
this.getList()
this.$message.success('成功')
})
})
},
resetForm() {
this.$refs['elForm'].resetFields()
},
getImplementRuleOptions(){
var query = {ccc_list:this.certapp.cccpv_class}
getImplementRuleList(query).then(res=>{
this.implementruleOptions = res.data.results
})
},
changeTypeOptions(){
getUnitTypeList({implementrule:this.formData.implementrule}).then(res=>{
this.unittypeOptions = genTree(res.data)
})
},
changeUnit(val){
let obj = {};
obj = this.unittypeOptions.find((item)=>{//这里的userList就是上面遍历的数据源
return item.id === val;//筛选出匹配数据
});
this.formData.name = obj.name
this.formData.standard = obj.standard
this.formData.standard_ = obj.standard_
},
rowClick(row, column, event){
this.formData = Object.assign({}, row);
}
},
}; };
</script> </script>

View File

@ -0,0 +1,178 @@
<template>
<div class="app-container">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>项目</span>
</div>
<el-table
v-loading="listLoading"
:data="tableData"
style="width: 100%;margin-top:10px;"
border
fit
stripe
highlight-current-row
height="300"
>
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column label="单号">
<template slot-scope="scope" v-if="scope.row.number">{{ scope.row.number }}</template>
</el-table-column>
<el-table-column label="认证领域/分类">
<template slot-scope="scope">
<el-tag>{{scope.row.cert_field_.name}}</el-tag>
<el-tag
v-if="scope.row.cccpv_class_"
type="warning"
style="margin:2px"
>{{scope.row.cccpv_class_.name}}</el-tag>
</template>
</el-table-column>
<el-table-column label="申请信息" width="300px">
<template slot-scope="scope">
<div>
<span style="color:darkblue;font-weight:bold">申请方</span>
:{{ scope.row.applicant_v.name }}
</div>
<div v-if="scope.row.manufacture">
<span style="color:darkblue;font-weight:bold">制造商</span>
:{{ scope.row.manufacture_v.name }}
</div>
<div v-if="scope.row.factory">
<span style="color:darkblue;font-weight:bold">生产厂</span>
:{{ scope.row.factory_v.name }}
</div>
</template>
</el-table-column>
<el-table-column label="当前状态">
<template slot-scope="scope">{{ scope.row.status}}</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>
</el-card>
<el-card class="box-card" style="margin-top:10px">
<div slot="header" class="clearfix">
<span>待处理申请</span>
</div>
<div>
<el-button type="primary">生成项目</el-button>
</div>
<el-table
v-loading="listLoading"
:data="tableData"
style="width: 100%;margin-top:10px;"
border
fit
stripe
highlight-current-row
height="300"
>
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column label="单号">
<template slot-scope="scope" v-if="scope.row.number">{{ scope.row.number }}</template>
</el-table-column>
<el-table-column label="认证领域/分类">
<template slot-scope="scope">
<el-tag>{{scope.row.cert_field_.name}}</el-tag>
<el-tag
v-if="scope.row.cccpv_class_"
type="warning"
style="margin:2px"
>{{scope.row.cccpv_class_.name}}</el-tag>
</template>
</el-table-column>
<el-table-column label="申请信息" width="300px">
<template slot-scope="scope">
<div>
<span style="color:darkblue;font-weight:bold">申请方</span>
:{{ scope.row.applicant_v.name }}
</div>
<div v-if="scope.row.manufacture">
<span style="color:darkblue;font-weight:bold">制造商</span>
:{{ scope.row.manufacture_v.name }}
</div>
<div v-if="scope.row.factory">
<span style="color:darkblue;font-weight:bold">生产厂</span>
:{{ scope.row.factory_v.name }}
</div>
</template>
</el-table-column>
<el-table-column label="当前状态">
<template slot-scope="scope">{{ scope.row.status}}</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>
</el-card>
</div>
</template>
<script>
import { getCertappList } from "@/api/certapp";
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: [],
listLoading: true,
listQuery: {
status: "已受理",
},
deptOptions: [],
field_list: [],
};
},
created() {
this.getList();
},
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 = {
status: "已受理",
};
this.getList();
},
handleFilter() {
this.getList();
},
},
};
</script>

View File

@ -0,0 +1,307 @@
<template>
<div class="app-container">
<el-tabs>
<el-tab-pane label="认证项目">
<div>
<el-button type="primary" @click="genProject0">新建项目</el-button>
</div>
<el-table
v-loading="listLoading"
:data="projectData.results"
style="width: 100%;margin-top:10px;"
border
fit
stripe
highlight-current-row
max-height="600"
>
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column label="项目号">
<template slot-scope="scope" v-if="scope.row.number">{{ scope.row.number }}</template>
</el-table-column>
<el-table-column label="受审核方" width="300px">
<template slot-scope="scope">
{{ scope.row.auditee_v.name }}
</template>
</el-table-column>
<el-table-column label="项目信息" width="300px" :show-overflow-tooltip="true" >
<template slot-scope="scope" v-if="scope.row.certapps">
<el-tag v-for="(item, index) in scope.row.certapps" :key="index" style="margin:2px" >{{item}}</el-tag>
</template>
</el-table-column>
<el-table-column label="当前状态" >
<template slot-scope="scope">{{ scope.row.status}}</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-group>
<el-button
v-if="scope.row.status == '待下达'"
type="warning"
size="small"
:disabled="!checkPermission(['project_assign'])"
@click="handleAssign(scope)"
>下达</el-button>
<el-button
type="primary"
size="small"
:disabled="!checkPermission(['project_update'])"
@click="handleUpdate(scope)"
>编辑</el-button>
<el-button
type="danger"
size="small"
:disabled="!checkPermission(['project_delete'])"
@click="handleDelete(scope)"
>删除</el-button>
</el-button-group>
</template>
</el-table-column>
</el-table>
<pagination
v-show="projectData.count>0"
:total="projectData.count"
:page.sync="listQuery_project.page"
:limit.sync="listQuery_project.page_size"
@pagination="getProjectList_"
/>
</el-tab-pane>
<el-tab-pane label="待处理业务">
<div>
<el-button type="primary" @click="genProject">生成项目</el-button>
</div>
<div style="margin-top:10px">
<template>
已选择<span style="color:red;font-weight:bold">{{certapps_data.length}}</span>条已受理业务
</template>
</div>
<el-table
ref="projectTable"
v-loading="listLoading"
:data="certappData"
style="width: 100%;margin-top:10px;"
border
fit
stripe
highlight-current-row
max-height="600"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column label="单号">
<template slot-scope="scope" v-if="scope.row.number">{{ scope.row.number }}</template>
</el-table-column>
<el-table-column label="认证领域/分类">
<template slot-scope="scope">
<el-tag>{{scope.row.cert_field_.name}}</el-tag>
<el-tag
v-if="scope.row.cccpv_class_"
type="warning"
style="margin:2px"
>{{scope.row.cccpv_class_.name}}</el-tag>
</template>
</el-table-column>
<el-table-column label="申请信息" width="300px">
<template slot-scope="scope">
<div>
<span style="color:darkblue;font-weight:bold">申请方</span>
:{{ scope.row.applicant_v.name }}
</div>
<div v-if="scope.row.manufacture">
<span style="color:darkblue;font-weight:bold">制造商</span>
:{{ scope.row.manufacture_v.name }}
</div>
<div v-if="scope.row.factory">
<span style="color:darkblue;font-weight:bold">生产厂</span>
:{{ scope.row.factory_v.name }}
</div>
</template>
</el-table-column>
<el-table-column label="当前状态">
<template slot-scope="scope">{{ scope.row.status}}</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>
</el-tab-pane>
</el-tabs>
<el-dialog :visible.sync="dialogvisible_project" title="创建项目">
<el-form ref="elForm" :model="formData" label-width="80px" label-position="right" :rules="rules">
<div v-if="certapps_data.length > 0">已选择<span style="color:red;font-weight:bold">{{certapps_data.length}}</span>条已受理业务</div>
<el-form-item label="受审核方" prop="auditee">
<el-input placeholder="请选择受审核方" readonly clearable v-model="formData.auditee_v.name">
<el-button slot="append" icon="el-icon-search" @click="choose(0)" v-if="certapps_data.length == 0"></el-button>
</el-input>
</el-form-item>
<el-form-item label="联系人" prop="auditee_v.linkman_name">
<el-input v-model="formData.auditee_v.linkman_name"></el-input>
</el-form-item>
<el-form-item label="联系方式" prop="auditee_v.linkman_mobile">
<el-input v-model="formData.auditee_v.linkman_mobile"></el-input>
</el-form-item>
<el-form-item label="备注" prop="username">
<el-input v-model="formData.remark" type="textarea"
:autosize="{ minRows: 6, maxRows: 10}"></el-input>
</el-form-item>
</el-form>
<div style="text-align:right;">
<el-button type="danger" @click="dialogvisible_project=false">取消</el-button>
<el-button type="primary" @click="confirm('Form')">确认</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { getCertappList } from "@/api/certapp";
import { getProjectList, createProject, assginProject } from "@/api/project"
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 {
certapps_data:[],
certappData: [],
listLoading: true,
listQuery: {
status: "已受理",
},
listQuery_project: {
page:1,
page_size:20
},
deptOptions: [],
field_list: [],
projectData:{count:0,results:[]},
formData:{
certapps:[],
auditee_v:{},
auditee:null
},
dialogvisible_project:false,
rules: {
auditee: [
{
required: true,
message: "请选择受审核方",
trigger: "change",
},
],
},
};
},
watch:{
certapps_data:function(val){
let certapps = []
for(let i=0;i<val.length;i++){
certapps.push(val[i].id)
}
this.formData.certapps = certapps
}
},
created() {
this.getCertappList_();
this.getProjectList_()
},
methods: {
checkPermission,
getCertappList_() {
this.listLoading = true;
getCertappList(this.listQuery).then((response) => {
if (response.data) {
this.certappData = response.data;
}
this.listLoading = false;
});
},
getProjectList_() {
this.listLoading = true;
getProjectList(this.listQuery_project).then((response) => {
if (response.data) {
this.projectData = response.data;
}
this.listLoading = false;
});
},
getdeptOptions() {
getOrgList().then((res) => {
this.deptOptions = genTree(res.data);
});
},
resetFilter() {
this.listQuery = {
status: "已受理",
};
this.getCertappList_();
},
handleFilter() {
this.getCertappList_();
},
genProject() {
if(this.certapps_data.length >0){
this.dialogvisible_project = true
this.formData.auditee = this.certapps_data[0].applicant
this.formData.auditee_v = this.certapps_data[0].applicant_v
}else{
this.$message.warning('请先选择已受理业务')
}
},
genProject0() {
this.$refs['projectTable'].clearSelection()
this.dialogvisible_project = true
},
handleSelectionChange(val){
this.certapps_data = val
},
confirm(){
this.$refs['elForm'].validate(valid => {
if (!valid) return
// TODO 提交表单
createProject(this.formData).then(res=>{
this.getCertappList_()
this.getProjectList_()
this.dialogvisible_project = false
this.$message.success('成功')
})
})
},
handleAssign(scope) {
if(scope.row.certapps.length == 0){
this.$message.error('该项目不包含业务,无法下达!')
}else{
this.$confirm("确定下达并转入策划派差吗?", "提示", {
type: "warning",
}).then(() => {
assginProject(scope.row.id, {}).then(res=>{
this.$message.success('下达成功')
this.getProjectList_()
})
}).catch(()=>{
});
}
}
},
};
</script>