fix conflict
This commit is contained in:
commit
a95dcdc77c
|
@ -7,6 +7,14 @@
|
|||
|
||||
|
||||
|
||||
.el-table--medium td, .el-table--medium th {
|
||||
padding: 5px 0;
|
||||
}
|
||||
.el-form-item {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
<script>
|
||||
export default {
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
|
||||
export function getEvaluationDetailList(query) {
|
||||
return request({
|
||||
url: '/project/evaluationdetail/',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
export function getEvaluationDetail(id) {
|
||||
return request({
|
||||
url: `/project/evaluationdetail/${id}/`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
export function createEvaluationDetail(data) {
|
||||
return request({
|
||||
url: '/project/evaluationdetail/',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateEvaluationDetail(id, data) {
|
||||
return request({
|
||||
url: `/project/evaluationdetail/${id}/`,
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteEvaluationDetail(id) {
|
||||
return request({
|
||||
url: `/project/evaluationdetail/ ${id}/`,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
|
||||
export function getBillList(query) {
|
||||
return request({
|
||||
url: '/financial/bill/',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
export function getBill(id) {
|
||||
return request({
|
||||
url: `/financial/bill/${id}/`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
export function createBill(data) {
|
||||
return request({
|
||||
url: '/financial/bill/',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateBill(id, data) {
|
||||
return request({
|
||||
url: `/financial/bill/${id}/`,
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteBill(id) {
|
||||
return request({
|
||||
url: `/financial/bill/${id}/`,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function getChargeitemList(query) {
|
||||
return request({
|
||||
url: '/financial/chargeitem/',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function createChargeitem(data) {
|
||||
return request({
|
||||
url: '/financial/chargeitem/',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateChargeitem(id, data) {
|
||||
return request({
|
||||
url: `/financial/chargeitem/${id}/`,
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteChargeitem(id) {
|
||||
return request({
|
||||
url: `/financial/chargeitem/${id}/`,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
|
@ -1,73 +1,73 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
export function getDetectOrgList(query) {
|
||||
export function getTestOrgList(query) {
|
||||
return request({
|
||||
url: '/laboratory/detectorg/',
|
||||
url: '/laboratory/testorg/',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
export function getDetectOrg(id) {
|
||||
export function getTestOrg(id) {
|
||||
return request({
|
||||
url: `/laboratory/detectorg/${id}/`,
|
||||
url: `/laboratory/testorg/${id}/`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
export function createDetectOrg(data) {
|
||||
export function createTestOrg(data) {
|
||||
return request({
|
||||
url: '/laboratory/detectorg/',
|
||||
url: '/laboratory/testorg/',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateDetectOrg(id, data) {
|
||||
export function updateTestOrg(id, data) {
|
||||
return request({
|
||||
url: `/laboratory/detectorg/${id}/`,
|
||||
url: `/laboratory/testorg/${id}/`,
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteDetectOrg(id) {
|
||||
export function deleteTestOrg(id) {
|
||||
return request({
|
||||
url: `/laboratory/detectorg/${id}/`,
|
||||
url: `/laboratory/testorg/${id}/`,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function getDetectOrgNoticeList(query) {
|
||||
export function getTestOrgNoticeList(query) {
|
||||
return request({
|
||||
url: '/laboratory/detectorgnotice/',
|
||||
url: '/laboratory/testnotice/',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
export function getDetectOrgNotice(id) {
|
||||
export function getTestOrgNotice(id) {
|
||||
return request({
|
||||
url: `/laboratory/detectorgnotice/${id}/`,
|
||||
url: `/laboratory/testnotice/${id}/`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
export function createDetectOrgNotice(data) {
|
||||
export function createTestOrgNotice(data) {
|
||||
return request({
|
||||
url: '/laboratory/detectorgnotice/',
|
||||
url: '/laboratory/testnotice/',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateDetectOrgNotice(id, data) {
|
||||
export function updateTestOrgNotice(id, data) {
|
||||
return request({
|
||||
url: `/laboratory/detectorgnotice/${id}/`,
|
||||
url: `/laboratory/testnotice/${id}/`,
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteDetectOrgNotice(id) {
|
||||
export function deleteTestOrgNotice(id) {
|
||||
return request({
|
||||
url: `/laboratory/detectorgnotice/${id}/`,
|
||||
url: `/laboratory/testnotice/${id}/`,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
|
|
@ -192,29 +192,7 @@ export const asyncRoutes = [
|
|||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/detectorg',
|
||||
component: Layout,
|
||||
redirect: '/detectorg/detectorg',
|
||||
name: 'detectorg',
|
||||
meta: { title: '产品检测', icon: 'example' },
|
||||
children: [
|
||||
|
||||
{
|
||||
path: 'detectorg',
|
||||
name: 'DetectOrg',
|
||||
component: () => import('@/views/detectorg/detectorg'),
|
||||
meta: { title: '实验室信息', icon: 'example', perms: ['detectorg_manage'] }
|
||||
},
|
||||
{
|
||||
path: 'detectorgnotice',
|
||||
name: 'DetectOrgNotice',
|
||||
component: () => import('@/views/detectorg/detectorgnotice'),
|
||||
meta: { title: '实验室通知公告', icon: 'example', perms: ['detectorg_manage'] }
|
||||
},
|
||||
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
path: '/accessment',
|
||||
component: Layout,
|
||||
|
@ -292,42 +270,7 @@ export const asyncRoutes = [
|
|||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/crm',
|
||||
component: Layout,
|
||||
redirect: '/crm/enterprise',
|
||||
name: 'crm',
|
||||
meta: { title: '客户企业', icon: 'example' },
|
||||
children: [
|
||||
|
||||
{
|
||||
path: 'enterprise',
|
||||
name: 'Enterprise',
|
||||
component: () => import('@/views/enterprise/enterprise'),
|
||||
meta: { title: '组织信息', icon: 'example', perms: ['enterprise_manage'] }
|
||||
},
|
||||
{
|
||||
path: 'enterprise2',
|
||||
name: 'Enterprise2',
|
||||
component: () => import('@/views/enterprise/enterprise'),
|
||||
meta: { title: '组织信息2', icon: 'example', perms: ['enterprise_manage'] }
|
||||
},
|
||||
{
|
||||
path: 'enterprise/create',
|
||||
name: 'EnterpriseCreate',
|
||||
component: () => import('@/views/enterprise/enterprisecreate.vue'),
|
||||
meta: { title: '新增组织信息', noCache: true, icon: '', perms: ['enterprise_create']},
|
||||
hidden: true
|
||||
},
|
||||
{
|
||||
path: 'enterprise/update',
|
||||
name: 'EnterpriseUpdate',
|
||||
component: () => import('@/views/enterprise/enterpriseupdate.vue'),
|
||||
meta: { title: '修改组织信息', noCache: true, icon: '', perms: ['enterprise_update'] },
|
||||
hidden: true
|
||||
},
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
path: '/certset',
|
||||
component: Layout,
|
||||
|
@ -384,6 +327,67 @@ export const asyncRoutes = [
|
|||
]
|
||||
},
|
||||
{
|
||||
|
||||
path: '/crm',
|
||||
component: Layout,
|
||||
redirect: '/crm/enterprise',
|
||||
name: 'crm',
|
||||
meta: { title: '客户企业', icon: 'example' },
|
||||
children: [
|
||||
|
||||
{
|
||||
path: 'enterprise',
|
||||
name: 'Enterprise',
|
||||
component: () => import('@/views/enterprise/enterprise'),
|
||||
meta: { title: '组织信息', icon: 'example', perms: ['enterprise_manage'] }
|
||||
},
|
||||
{
|
||||
path: 'enterprise2',
|
||||
name: 'Enterprise2',
|
||||
component: () => import('@/views/enterprise/enterprise'),
|
||||
meta: { title: '组织信息2', icon: 'example', perms: ['enterprise_manage'] }
|
||||
},
|
||||
{
|
||||
path: 'enterprise/create',
|
||||
name: 'EnterpriseCreate',
|
||||
component: () => import('@/views/enterprise/enterprisecreate.vue'),
|
||||
meta: { title: '新增组织信息', noCache: true, icon: '', perms: ['enterprise_create']},
|
||||
hidden: true
|
||||
},
|
||||
{
|
||||
path: 'enterprise/update',
|
||||
name: 'EnterpriseUpdate',
|
||||
component: () => import('@/views/enterprise/enterpriseupdate.vue'),
|
||||
meta: { title: '修改组织信息', noCache: true, icon: '', perms: ['enterprise_update'] },
|
||||
hidden: true
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/testorg',
|
||||
component: Layout,
|
||||
redirect: '/testorg/testorg',
|
||||
name: 'testorg',
|
||||
meta: { title: '产品检测', icon: 'example' },
|
||||
children: [
|
||||
|
||||
{
|
||||
path: 'testorg',
|
||||
name: 'TestOrg',
|
||||
component: () => import('@/views/testorg/testorg'),
|
||||
meta: { title: '实验室信息', icon: 'example', perms: ['testorg_manage'] }
|
||||
},
|
||||
{
|
||||
path: 'testorgnotice',
|
||||
name: 'TextOrgNotice',
|
||||
component: () => import('@/views/testorg/testorgnotice'),
|
||||
meta: { title: '实验室通知公告', icon: 'example', perms: ['testorg_manage'] }
|
||||
},
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
path: '/system',
|
||||
component: Layout,
|
||||
redirect: '/system/user',
|
||||
|
|
|
@ -371,8 +371,10 @@ export default {
|
|||
|
||||
},
|
||||
created() {
|
||||
|
||||
if(this.certapp!=null){
|
||||
this.formData = this.certapp
|
||||
|
||||
}
|
||||
|
||||
this.getCCCOptions();
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
|
||||
<el-tabs type="border-card">
|
||||
<el-tab-pane label="申请信息" style="overflow-y:auto;overflow-x:hidden;">
|
||||
<CCCform :action="action" @handleCommit="save" :certapp="certapp" v-if="kind=='CCC'&isLoad"></CCCform>
|
||||
<QMSform :action="action" @handleCommit="save" :certapp="certapp" v-if="kind=='QMS'&isLoad"></QMSform>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="产品单元" v-if="certapp">
|
||||
<Productunit :certapp="certapp"></Productunit>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="原材料供应商" v-if="certapp">
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="检测设备" v-if="certapp">
|
||||
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="资料评审" v-if="certapp">
|
||||
<REVIEW :certapp="certapp"></REVIEW>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="收费信息" v-if="certapp">
|
||||
<CHARGE :certapp="certapp"></CHARGE>
|
||||
<!--<el-button type="primary"
|
||||
@click="handleComplete()">完成受理</el-button>-->
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import CCCform from "@/views/certapp/cccform"
|
||||
import REVIEW from "@/views/certapp/review"
|
||||
|
||||
import CHARGE from "@/views/certapp/charge"
|
||||
import Productunit from "@/views/certapp/productunit"
|
||||
import { getCertapp, completeCertapp } from "@/api/certapp"
|
||||
import router from '@/router';
|
||||
import QMSform from "@/views/certapp/qmsform"
|
||||
export default {
|
||||
components: { CCCform, Productunit, QMSform,REVIEW,CHARGE},
|
||||
props: [],
|
||||
data() {
|
||||
return {
|
||||
action:'create',
|
||||
certapp:null,
|
||||
kind:'CCC',
|
||||
isLoad:false
|
||||
};
|
||||
},
|
||||
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'){
|
||||
getCertapp(this.$route.query.id).then(res=>{
|
||||
this.certapp = res.data
|
||||
this.isLoad = true
|
||||
})
|
||||
}else{
|
||||
this.isLoad = true
|
||||
}
|
||||
},
|
||||
save(val){
|
||||
this.certapp=val
|
||||
},
|
||||
handleComplete(){
|
||||
completeCertapp(this.certapp.id).then(res=>{
|
||||
this.$message.success('成功')
|
||||
this.$router.go(-1)
|
||||
})
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
|
@ -31,10 +31,9 @@
|
|||
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="收费信息" name="Productunit4" v-if="certapp" lazy>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="handleComplete()"
|
||||
>完成受理</el-button>
|
||||
|
||||
<CHARGE :certapp="certapp"></CHARGE>
|
||||
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="审核成员" name="Certappmember" v-if="certapp" lazy>
|
||||
<Member :certapp="certapp" ></Member>
|
||||
|
@ -69,7 +68,8 @@
|
|||
</template>
|
||||
<script>
|
||||
import CCCform from "@/views/certapp/cccform"
|
||||
import Productunit from "@/views/certapp/productunit"
|
||||
import Productunit from "@/views/certapp/productunit"
|
||||
import CHARGE from "@/views/certapp/charge"
|
||||
import { getCertapp, completeCertapp } from "@/api/certapp"
|
||||
import router from '@/router';
|
||||
import QMSform from "@/views/certapp/qmsform"
|
||||
|
@ -77,7 +77,7 @@ import Conclusion from "@/views/audit/conclusion"
|
|||
import Member from "@/views/audit/member"
|
||||
import access from "@/views/accessment/access"
|
||||
export default {
|
||||
components: { CCCform, Productunit, QMSform, Conclusion, Member, access},
|
||||
components: { CCCform, Productunit, QMSform, Conclusion, Member, access, CHARGE},
|
||||
props: [],
|
||||
data() {
|
||||
return {
|
||||
|
|
|
@ -0,0 +1,343 @@
|
|||
<template>
|
||||
<div>
|
||||
|
||||
<div class="tableDate">
|
||||
<div class="button" style="width:6%;float:right;">
|
||||
<P><el-button class="el-icon-plus" @click.prevent="addRow()"></el-button></P>
|
||||
<p><el-button class="el-icon-minus" @click.prevent="delData()"></el-button></p>
|
||||
</div>
|
||||
<div class="table">
|
||||
<el-table :data="tableData"
|
||||
ref="table"
|
||||
tooltip-effect="dark"
|
||||
border
|
||||
stripe
|
||||
style="width: 93%"
|
||||
@selection-change='selectRow'>
|
||||
<el-table-column type="selection" width="45" align="center"></el-table-column>
|
||||
<el-table-column label="序号" type="index" width="60" align="center"></el-table-column>
|
||||
<el-table-column label="收费项目" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-input v-model="scope.row.itemkind"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单元数量" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-input v-model="scope.row.unitcount"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单价" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-input v-model="scope.row.perfee"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="小计" align="center">
|
||||
<template slot-scope="scope">
|
||||
|
||||
{{ (scope.row.pertotal = scope.row.unitcount *scope.row.perfee) | keepTwoNum}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
</div>
|
||||
</div>
|
||||
<div style="padding-top:20px">
|
||||
<el-form ref="elForm" :model="formData" size="medium" label-width="100px">
|
||||
<el-row :gutter="24">
|
||||
|
||||
<el-row>
|
||||
<el-col :xs="24" :md="11" font="left">
|
||||
<el-form-item label="收费单号" prop="feecode">
|
||||
<el-input placeholder="请输入收费单号" v-model="formData.feecode"
|
||||
clearable
|
||||
:style="{width: '100%'}"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :md="11" font="left">
|
||||
<el-form-item label="费用性质" prop="feecharacter">
|
||||
<el-select filterable v-model="formData.feecharacter"
|
||||
placeholder="请输入费用性质"
|
||||
clearable
|
||||
:style="{width: '100%'}">
|
||||
<el-option v-for="(item, index) in feeOptions"
|
||||
:key="index"
|
||||
:label="item.name"
|
||||
:value="item.value"
|
||||
:disabled="item.disabled">
|
||||
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :xs="24" :md="11" font="left">
|
||||
<el-form-item label="总计" prop="totalfee">
|
||||
<el-input placeholder="请输入总计"
|
||||
v-model="formData.totalfee"
|
||||
clearable
|
||||
:style="{width: '100%'}"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :md="11" font="left">
|
||||
<el-form-item label="扣减额" prop="deductions">
|
||||
<el-input placeholder="请输入扣减额"
|
||||
v-model="formData.deductions"
|
||||
clearable
|
||||
:style="{width: '100%'}"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :xs="24" :md="11" font="left">
|
||||
<el-form-item label="外汇类型" prop="exchangetype">
|
||||
<el-select v-model="formData.exchangetype"
|
||||
placeholder="请选择外汇类型"
|
||||
filterable
|
||||
allow-create
|
||||
:style="{width: '100%'}">
|
||||
<el-option v-for="(item, index) in exchangetypeOptions"
|
||||
: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="11" font="left">
|
||||
|
||||
<el-form-item label="外币汇率" prop="exchangerate">
|
||||
<el-input placeholder="请输入外币汇率"
|
||||
v-model="formData.exchangerate"
|
||||
clearable
|
||||
:style="{width: '100%'}"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :xs="24" :md="11" font="left">
|
||||
<el-form-item label="实收人名币" prop="paidrmb">
|
||||
<el-input placeholder="请输入金额"
|
||||
v-model="formData.paidrmb"
|
||||
clearable
|
||||
:style="{width: '100%'}"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :md="11" font="left">
|
||||
<el-form-item label="实收外币" prop="paidwb">
|
||||
<el-input placeholder="请输入金额"
|
||||
v-model="formData.paidwb"
|
||||
clearable
|
||||
:style="{width: '100%'}"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :xs="24" :md="22" font="left">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
|
||||
<el-input type="textarea" :rows="2" v-model="formData.remark"
|
||||
clearable
|
||||
:style="{width: '100%'}"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col font="right">
|
||||
<el-button style="float: right;" type="primary" @click="submitForm">保存</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { getChargeitemList,getBillList,getBill,createChargeitem,createBill,updateChargeitem} from "@/api/finanacial";
|
||||
|
||||
import { getDictList } from "@/api/dict";
|
||||
import { genTree } from "@/utils";
|
||||
import checkPermission from '@/utils/permission'
|
||||
import Treeselect from "@riophae/vue-treeselect";
|
||||
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
||||
export default {
|
||||
|
||||
inheritAttrs: false,
|
||||
components: { Treeselect },
|
||||
props: ["certapp"],
|
||||
data() {
|
||||
return {
|
||||
tableData: [],
|
||||
selectlistRow: [],
|
||||
rowNum:1,
|
||||
formData: {
|
||||
number:this.certapp,
|
||||
totalfee: null,
|
||||
deductions:null,
|
||||
exchangetype: "人名币-RMB-¥",
|
||||
exchangerate: null,
|
||||
paidrmb: null,
|
||||
paidwb: null,
|
||||
remark: null,
|
||||
feecode:null
|
||||
},
|
||||
|
||||
feeOptions:[],
|
||||
listLoading: true,
|
||||
dialogVisible:false,
|
||||
dialogType: 'create',
|
||||
exchangetypeOptions: [
|
||||
{
|
||||
label: "人民币-RMB-¥",
|
||||
value: "人民币-RMB-¥",
|
||||
},
|
||||
{
|
||||
label: "欧元-EURO-€",
|
||||
value: "欧元-EURO-€",
|
||||
},
|
||||
{
|
||||
label: "美元-USD—$",
|
||||
value: "美元-USD—$",
|
||||
},
|
||||
],
|
||||
dgVisiable: false,
|
||||
|
||||
};
|
||||
},
|
||||
computed: {},
|
||||
watch: {
|
||||
|
||||
},
|
||||
created() {
|
||||
|
||||
this.getDiclist();
|
||||
|
||||
|
||||
if(this.certapp!=null){
|
||||
this.getChareList();
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
mounted() {},
|
||||
methods: {
|
||||
checkPermission,
|
||||
// 获取表格选中时的数据
|
||||
selectRow (val) {
|
||||
this.selectlistRow = val
|
||||
console.log(this.selectlistRow)
|
||||
},
|
||||
// 增加行
|
||||
addRow () {
|
||||
var list = {
|
||||
rowNum:this.rowNum,
|
||||
itemkind:'',
|
||||
unitcount: '',
|
||||
perfee: '',
|
||||
pertotal:''
|
||||
};
|
||||
this.tableData.unshift(list)
|
||||
this.rowNum += 1;
|
||||
},
|
||||
// 删除方法
|
||||
// 删除选中行
|
||||
delData () {
|
||||
for (let i = 0; i < this.selectlistRow.length; i++) {
|
||||
let val = this.selectlistRow
|
||||
val.forEach((val, index) => {
|
||||
this.tableData.forEach((v, i) => {
|
||||
if (val.rowNum === v.rowNum) {
|
||||
// i 为选中的索引
|
||||
this.tableData.splice(i, 1)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
// 删除完数据之后清除勾选框
|
||||
this.$refs.table.clearSelection()
|
||||
}
|
||||
,
|
||||
|
||||
getChareList() {
|
||||
|
||||
getBillList({ number:this.certapp }).then((response) => {
|
||||
this.listLoading = true;
|
||||
|
||||
if (response.data.length) {
|
||||
this.formData = response.data[0];
|
||||
|
||||
getChargeitemList({ bills:response.data[0].feecode }).then((response) => {
|
||||
|
||||
if (response.data) {
|
||||
|
||||
this.tableData = response.data;
|
||||
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
this.listLoading = false;
|
||||
});
|
||||
|
||||
|
||||
},
|
||||
|
||||
|
||||
|
||||
//费用性质
|
||||
getDiclist() {
|
||||
getDictList({ type__code: "cost_nature" }).then(response => {
|
||||
this.feeOptions = genTree(response.data);
|
||||
});
|
||||
}
|
||||
,
|
||||
|
||||
submitForm() {
|
||||
let val = this.selectlistRow
|
||||
this.$refs["elForm"].validate(valid => {
|
||||
if (!valid) return;
|
||||
// TODO 提交表单
|
||||
|
||||
createBill(this.formData).then(response => {
|
||||
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '成功!'
|
||||
|
||||
})
|
||||
|
||||
for (var i=0; i < val.length; i++) {
|
||||
this.chargeIetm = val[i]
|
||||
this.chargeIetm.bills = this.formData.feecode;
|
||||
createChargeitem(this.chargeIetm).then(response => {
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '成功!'
|
||||
|
||||
})
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
</script>
|
||||
|
|
@ -0,0 +1,430 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-form ref="elForm" :model="formData" size="medium" label-width="150px">
|
||||
<el-collapse v-model="activeNames" @change="handleChange">
|
||||
<el-collapse-item title="申请信息" name="1">
|
||||
<el-row>
|
||||
|
||||
<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-collapse-item>
|
||||
<el-collapse-item title="申请方" name="2">
|
||||
<el-row>
|
||||
<el-col :xs="24" :md="8">
|
||||
<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="8">
|
||||
<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="8">
|
||||
<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="8">
|
||||
<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="8">
|
||||
<el-form-item label="职务">
|
||||
<el-input v-model="formData.applicant_v.linkman_duty"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="质量管理体系信息" name="3">
|
||||
|
||||
<el-row>
|
||||
<el-col :xs="24" :md="5">
|
||||
<el-form-item label="体系相关人数">
|
||||
<el-input v-model="formData.system_people"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :md="5">
|
||||
<el-form-item label="初始人数">
|
||||
<el-input v-model="formData.initial_people"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :md="5">
|
||||
<el-form-item label="监督人日">
|
||||
<el-input v-model="formData.supervision_people"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :md="5">
|
||||
<el-form-item label="认可情况" prop="is_approve">
|
||||
<el-switch v-model="formData.is_approve"
|
||||
active-color="#13ce66"
|
||||
inactive-color="#8C969D">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
|
||||
<el-col :xs="24" :md="5">
|
||||
<el-form-item label="初次认证费">
|
||||
<el-input v-model="formData.Initial_certification"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :md="5">
|
||||
<el-form-item label="年金">
|
||||
<el-input v-model="formData.annuity"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :md="5">
|
||||
<el-form-item label="监督金额">
|
||||
<el-input v-model="formData.supervise_amount"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :md="5">
|
||||
<el-form-item label="复评金额">
|
||||
<el-input v-model="formData.review_amount"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :xs="24" :md="8">
|
||||
|
||||
<el-form-item label="依据的体系标准" prop="system_standard">
|
||||
<el-select v-model="formData.system_standard"
|
||||
placeholder="请选择"
|
||||
clearable
|
||||
:style="{width: '100%'}">
|
||||
<el-option v-for="(item, index) in type_Options"
|
||||
:key="index"
|
||||
:label="item.name"
|
||||
: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="产品生产依据的国家/行业标准代号">
|
||||
<el-input v-model="formData.factory_v.linkman_mobile"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>-->
|
||||
|
||||
|
||||
<el-col :xs="24" :md="12">
|
||||
<el-form-item label="专业代码">
|
||||
<el-select v-model="formData.professional_code"
|
||||
multiple
|
||||
filterable
|
||||
allow-create
|
||||
default-first-option
|
||||
:style="{width: '100%'}"
|
||||
placeholder="请选择专业代码">
|
||||
<el-option v-for="item in professionaloptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-row>
|
||||
<el-col :xs="24">
|
||||
<el-form-item label="认证范围">
|
||||
<el-input type="textarea" :rows="2" v-model="formData.certification"
|
||||
clearable
|
||||
:style="{width: '100%'}"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
|
||||
</el-collapse-item>
|
||||
<!--<el-collapse-item title="机构转换" name="4">
|
||||
<el-row>
|
||||
<el-col :xs="24" :md="8">
|
||||
<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="8">
|
||||
<el-form-item label="原(已)获认证的认证注册号">
|
||||
<el-input v-model="formData.factory_v.linkman_mobile"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="申请性质" name="5">
|
||||
<el-row>
|
||||
|
||||
<el-col :xs="24" :md="5">
|
||||
<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="5">
|
||||
<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="5">
|
||||
<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="5">
|
||||
<el-form-item label="专业范围">
|
||||
<el-input v-model="formData.factory_v.linkman_mobile"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
|
||||
<el-col :xs="24" :md="11">
|
||||
<el-form-item label="认证范围">
|
||||
<el-input type="textarea" :rows="2" v-model="formData.remarks"
|
||||
clearable
|
||||
:style="{width: '100%'}"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :md="11">
|
||||
<el-form-item label="特殊要求">
|
||||
<el-input type="textarea" :rows="2" v-model="formData.remarks"
|
||||
clearable
|
||||
:style="{width: '100%'}"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
<el-row>
|
||||
|
||||
<el-col :xs="24" :md="8">
|
||||
<el-form-item label="申请认证范围涉及的产品是否获得其它认证">
|
||||
<el-input type="textarea" :rows="5" v-model="formData.remarks"
|
||||
clearable
|
||||
:style="{width: '100%'}"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :md="8">
|
||||
<el-form-item label="如获得过其他机构颁发的质量体系证书,该证书是否仍然有效?">
|
||||
<el-input type="textarea" :rows="5" v-model="formData.remarks"
|
||||
clearable
|
||||
:style="{width: '100%'}"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :md="8">
|
||||
<el-form-item label="备注">
|
||||
<el-input type="textarea" :rows="5" v-model="formData.remarks"
|
||||
clearable
|
||||
:style="{width: '100%'}"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-collapse-item>-->
|
||||
</el-collapse>
|
||||
</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: "DTXform",
|
||||
inheritAttrs: false,
|
||||
components: { Enterprisechose, Treeselect },
|
||||
props: ["action", "certapp"],
|
||||
data() {
|
||||
return {
|
||||
activeNames: ['1', '2', '3', '4','5'],
|
||||
formData: {
|
||||
field_code: 'DTX',
|
||||
applicant: null,
|
||||
applicant_v: {},
|
||||
factory: null,
|
||||
factory_v: {},
|
||||
cccpv_class: null,
|
||||
pattern: "正常",
|
||||
is_approve: true,
|
||||
|
||||
|
||||
|
||||
|
||||
},
|
||||
dgType: 0,
|
||||
dgVisiable: false,
|
||||
addressOptions0: [],
|
||||
type_Options: [],
|
||||
professionaloptions:[],
|
||||
};
|
||||
},
|
||||
computed: {},
|
||||
watch: {
|
||||
|
||||
},
|
||||
created() {
|
||||
if(this.action!='create'){
|
||||
this.formData.id = this.certapp
|
||||
this.getCertapp_()
|
||||
}
|
||||
this.getTypeOptions();
|
||||
this.getProfOptions()
|
||||
},
|
||||
mounted() {},
|
||||
methods: {
|
||||
handleChange(val) {
|
||||
console.log(val);
|
||||
},
|
||||
getTypeOptions() {
|
||||
getDictList({ type__code: "system_standards" }).then(response => {
|
||||
this.type_Options = genTree(response.data);
|
||||
});
|
||||
|
||||
},
|
||||
getProfOptions() {
|
||||
getDictList({ type__code: "cnas_scope" }).then(response => {
|
||||
this.professionaloptions = genTree(response.data);
|
||||
});
|
||||
|
||||
},
|
||||
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;
|
||||
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style>
|
||||
</style>
|
|
@ -224,8 +224,11 @@ export default {
|
|||
getList() {
|
||||
this.listLoading = true;
|
||||
getUnitList(this.listQuery).then((response) => {
|
||||
|
||||
if (response.data) {
|
||||
|
||||
this.tableData = response.data;
|
||||
|
||||
}
|
||||
this.listLoading = false;
|
||||
});
|
||||
|
|
|
@ -328,12 +328,12 @@ export default {
|
|||
|
||||
},
|
||||
created() {
|
||||
if(this.action!='create'){
|
||||
this.formData.id = this.certapp
|
||||
this.getCertapp_()
|
||||
if(this.certapp!=null){
|
||||
this.formData = this.certapp
|
||||
|
||||
}
|
||||
this.getTypeOptions();
|
||||
this.getProfOptions()
|
||||
this.getProfOptions();
|
||||
},
|
||||
mounted() {},
|
||||
methods: {
|
||||
|
@ -347,16 +347,12 @@ export default {
|
|||
|
||||
},
|
||||
getProfOptions() {
|
||||
getDictList({ type__code: "industry_classification" }).then(response => {
|
||||
getDictList({ type__code: "cnas_scope" }).then(response => {
|
||||
this.professionaloptions = genTree(response.data);
|
||||
});
|
||||
|
||||
},
|
||||
getCertapp_(){
|
||||
getCertapp(this.formData.id).then(res=>{
|
||||
this.formData = res.data
|
||||
})
|
||||
},
|
||||
|
||||
handelConfirm() {
|
||||
this.$refs["elForm"].validate((valid) => {
|
||||
if (!valid) return;
|
||||
|
@ -368,7 +364,7 @@ export default {
|
|||
}else{
|
||||
createCertapp(this.formData).then((res) => {
|
||||
this.$message.success('成功')
|
||||
this.$emit("handleCommit", res.data);
|
||||
this.$router.replace({name:"Certappupdate", params:{id:res.data.id}})
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,153 @@
|
|||
<template>
|
||||
<div id="print">
|
||||
<el-form ref="elForm" :model="formData" size="medium" label-width="70px">
|
||||
<el-row :gutter="12">
|
||||
|
||||
<el-col>
|
||||
<el-card shadow="always">
|
||||
<el-table id="evl"
|
||||
ref="multipleTable"
|
||||
:data="eltList"
|
||||
style="width: 100%;margin-top:10px;"
|
||||
border
|
||||
fit
|
||||
highlight-current-row
|
||||
|
||||
@selection-change='selectRow'
|
||||
max-height="600">
|
||||
<el-table-column type="selection" label="选择" align="center" width="55"></el-table-column>
|
||||
|
||||
<el-table-column align="center" label="项目内容" width="750">
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.content }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="符合">
|
||||
<template slot-scope="scope">
|
||||
<el-radio-group v-model="radio[scope.$index]" @change="changeHandler">
|
||||
<el-radio :label="item.id" :key="item.id" v-for="item in scope.row.options ">{{item.name}}</el-radio>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
</el-card>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div slot="footer" align="center">
|
||||
<el-button @click="close(false)">取消</el-button>
|
||||
<el-button type="primary" @click="dialogFormAdd">保存</el-button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
<script type="text/javascript">
|
||||
import { createEvaluationDetail, updateEvaluationDetail, getEvaluationDetailList } from "@/api/evaluationdetail";
|
||||
import { getEvaluationsList } from "@/api/evaluationitem";
|
||||
import Treeselect from "@riophae/vue-treeselect";
|
||||
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
||||
import { options } from "runjs";
|
||||
export default {
|
||||
|
||||
inheritAttrs: false,
|
||||
components: { Treeselect },
|
||||
props: ["action", "certapp"],
|
||||
data() {
|
||||
return {
|
||||
|
||||
formData: {
|
||||
field_code: 'QMS',
|
||||
result:null,
|
||||
is_approve: true,
|
||||
remark:null,
|
||||
cert_app:this.certapp
|
||||
|
||||
|
||||
},
|
||||
radio: [],
|
||||
review_options:[
|
||||
{
|
||||
id : "1",
|
||||
name : "符合"
|
||||
},
|
||||
{
|
||||
id : "2",
|
||||
name : "不符合"
|
||||
}
|
||||
,
|
||||
{
|
||||
id : "3",
|
||||
name : "不适用"
|
||||
}
|
||||
,
|
||||
{
|
||||
id : "4",
|
||||
name : "需说明"
|
||||
}
|
||||
],
|
||||
|
||||
eltList: [],
|
||||
|
||||
dgType: 0,
|
||||
dgVisiable: false,
|
||||
|
||||
};
|
||||
},
|
||||
computed: {},
|
||||
watch: {
|
||||
|
||||
},
|
||||
created() {
|
||||
|
||||
this.getList()
|
||||
},
|
||||
mounted() {},
|
||||
methods: {
|
||||
getList() {
|
||||
|
||||
getEvaluationsList().then(response => {
|
||||
|
||||
this.eltList = response.data.results
|
||||
for (var i = 0; i < this.eltList.length; i++) {
|
||||
this.eltList[i].options = this.review_options;
|
||||
}
|
||||
|
||||
});
|
||||
},
|
||||
// 获取表格选中时的数据
|
||||
selectRow (val) {
|
||||
this.selectlistRow = val
|
||||
},
|
||||
changeHandler(value) {
|
||||
this.radioresult = value;
|
||||
}
|
||||
,
|
||||
handleSelectionChange(val) {
|
||||
this.multipleTable = val; // this.multipleTable 选中的值
|
||||
console.log(val);
|
||||
},
|
||||
dialogFormAdd() {
|
||||
//for (var i = 0; i < this.multipleTable.length; i++) {
|
||||
// var halo = this.multipleTable[i];
|
||||
// console.log(halo);
|
||||
|
||||
//}
|
||||
console.log(this.selectlistRow);
|
||||
},
|
||||
handelConfirm() {
|
||||
let val = this.selectlistRow
|
||||
console.log(this.selectlistRow);
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style>
|
||||
</style>
|
|
@ -494,7 +494,7 @@
|
|||
},
|
||||
getECtype() {
|
||||
getDictList({ type__code: "economy_type" }).then(response => {
|
||||
this. economy_typeOptions = genTree(response.data);
|
||||
this.economy_typeOptions = genTree(response.data);
|
||||
});
|
||||
|
||||
},
|
||||
|
|
|
@ -4,53 +4,50 @@
|
|||
<div style="margin-top:6px">
|
||||
<el-button type="primary" icon="el-icon-plus" @click="handleCreate">新增</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
v-loading="listLoading"
|
||||
:data="evaluationitem.results"
|
||||
style="width: 100%;margin-top:10px;"
|
||||
border
|
||||
fit
|
||||
stripe
|
||||
highlight-current-row
|
||||
max-height="600"
|
||||
>
|
||||
<el-table v-loading="listLoading"
|
||||
:data="evaluationitem.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="编号">
|
||||
<el-table-column label="名称">
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.cert_field }}
|
||||
{{ scope.row.name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="名称">
|
||||
<template slot-scope="scope">{{ scope.row.name }}</template>
|
||||
<el-table-column label="认证领域">
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.cert_field.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(['evaluationitem_update'])"
|
||||
@click="handleUpdate(scope)"
|
||||
>编辑</el-button>
|
||||
<!-- <el-button
|
||||
type="primary"
|
||||
size="small"
|
||||
:disabled="!checkPermission(['implementrule_update'])"
|
||||
@click="handleUpate(scope)"
|
||||
>单元划分</el-button> -->
|
||||
<el-button
|
||||
type="danger"
|
||||
size="small"
|
||||
:disabled="!checkPermission(['evaluationitem_delete'])"
|
||||
@click="handleDelete(scope)"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="primary"
|
||||
size="small"
|
||||
:disabled="!checkPermission(['evaluationitem_update'])"
|
||||
@click="handleUpdate(scope)">编辑</el-button>
|
||||
<!-- <el-button
|
||||
type="primary"
|
||||
size="small"
|
||||
:disabled="!checkPermission(['implementrule_update'])"
|
||||
@click="handleUpate(scope)"
|
||||
>单元划分</el-button> -->
|
||||
<el-button type="danger"
|
||||
size="small"
|
||||
:disabled="!checkPermission(['evaluationitem_delete'])"
|
||||
@click="handleDelete(scope)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
|
|
|
@ -5,54 +5,54 @@
|
|||
<el-tab-pane label="评审信息">
|
||||
<el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="100px">
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="认证类型" prop="cert_field">
|
||||
<treeselect v-model="formData.cert_field" :multiple="false" :options="cert_fieldOptions" placeholder="请选择认证类型" :style="{width: '100%'}" @select="typeChange"
|
||||
:clearable="false" :defaultExpandLevel='1' :disable-branch-nodes="true" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24" v-if="cert_field_code =='PV'">
|
||||
<el-form-item label="产品分类" prop="pv_class">
|
||||
<treeselect v-model="formData.pv_class"
|
||||
:disable-branch-nodes="true"
|
||||
placeholder="请选择产品分类"
|
||||
clearable
|
||||
:style="{width: '100%'}"
|
||||
:options="pv_classOptions"
|
||||
:multiple="false"></treeselect>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24" v-if="cert_field_code =='CCC'">
|
||||
<el-form-item label="产品分类" prop="ccc_list">
|
||||
<treeselect v-model="formData.ccc_list"
|
||||
:disable-branch-nodes="true"
|
||||
placeholder="请选择产品分类"
|
||||
clearable
|
||||
:style="{width: '100%'}"
|
||||
:options="ccc_listOptions"
|
||||
:multiple="true"></treeselect>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<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-row>
|
||||
<el-row>
|
||||
<el-col :span="12" v-if="cert_field_code =='PV'">
|
||||
<el-form-item label="产品分类" prop="pv_class">
|
||||
<treeselect v-model="formData.pv_class"
|
||||
:disable-branch-nodes="true"
|
||||
placeholder="请选择产品分类"
|
||||
clearable
|
||||
:style="{width: '100%'}"
|
||||
:options="pv_classOptions"></treeselect>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" v-if="cert_field_code =='CCC'">
|
||||
<el-form-item label="产品分类" prop="ccc_list">
|
||||
<treeselect v-model="formData.ccc_list"
|
||||
:disable-branch-nodes="true"
|
||||
placeholder="请选择产品分类"
|
||||
clearable
|
||||
:style="{width: '100%'}"
|
||||
:options="ccc_listOptions"></treeselect>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<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-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="24" style="margin-top:4px">
|
||||
<el-form-item size="large">
|
||||
<el-button type="primary" @click="submitForm">保存</el-button>
|
||||
<el-button @click="resetForm">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="24" style="margin-top:4px">
|
||||
<el-form-item size="large">
|
||||
<el-button type="primary" @click="submitForm">保存</el-button>
|
||||
<el-button @click="resetForm">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="评审项信息" v-if="formData.id">
|
||||
<Evaluations :evItem="formData.id"></Evaluations>
|
||||
|
@ -79,7 +79,7 @@ export default {
|
|||
id: null,
|
||||
name:undefined,
|
||||
cert_field: undefined,
|
||||
pv_scope: undefined,
|
||||
pv_scope: undefined,
|
||||
pv_class: undefined,
|
||||
ccc_list: undefined
|
||||
|
||||
|
@ -105,7 +105,44 @@ export default {
|
|||
this.getCerttype();
|
||||
},
|
||||
mounted() {},
|
||||
methods: {
|
||||
methods: {
|
||||
typeChange(node,id){
|
||||
this.cert_field_code = node.code
|
||||
this.changeRules(node.code)
|
||||
},
|
||||
changeRules(val) {
|
||||
if (val == "PV") {
|
||||
this.rules.pv_scope = [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择",
|
||||
trigger: "change"
|
||||
}
|
||||
];
|
||||
this.rules.pv_class = [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择",
|
||||
trigger: "change"
|
||||
}
|
||||
];
|
||||
this.rules.ccc_list = [];
|
||||
} else if (val == "CCC") {
|
||||
this.rules.ccc_list = [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择",
|
||||
trigger: "change"
|
||||
}
|
||||
];
|
||||
this.rules.pv_class = [];
|
||||
this.rules.pv_scope = [];
|
||||
} else {
|
||||
this.rules.pv_class = [];
|
||||
this.rules.pv_scope = [];
|
||||
this.rules.ccc_list = [];
|
||||
}
|
||||
},
|
||||
getCerttype() {
|
||||
getDictList({ type__code: "cert_field" }).then(response => {
|
||||
if (response.data) {
|
||||
|
|
|
@ -6,18 +6,37 @@
|
|||
<el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="100px">
|
||||
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="评审标题" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入评审标题" clearable :style="{width: '100%'}"></el-input>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="认证类型" prop="cert_field">
|
||||
<treeselect v-model="formData.cert_field" :multiple="false" :options="cert_fieldOptions" placeholder="请选择认证类型" :style="{width: '100%'}" @select="typeChange"
|
||||
:clearable="false" :defaultExpandLevel='1' :disable-branch-nodes="true" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8" v-if="cert_field_code =='PV'">
|
||||
<el-form-item label="产品分类" prop="pv_class">
|
||||
<treeselect v-model="formData.pv_class"
|
||||
:disable-branch-nodes="true"
|
||||
placeholder="请选择产品分类"
|
||||
clearable
|
||||
:style="{width: '100%'}"
|
||||
:options="pv_classOptions"></treeselect>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8" v-if="cert_field_code =='CCC'">
|
||||
<el-form-item label="产品分类" prop="ccc_list">
|
||||
<treeselect v-model="formData.ccc_list"
|
||||
:disable-branch-nodes="true"
|
||||
placeholder="请选择产品分类"
|
||||
clearable
|
||||
:style="{width: '100%'}"
|
||||
:options="ccc_listOptions"></treeselect>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="评审代号" prop="cert_field">
|
||||
<el-input v-model="formData.cert_field" placeholder="请输入评审代号" clearable :style="{width: '100%'}"></el-input>
|
||||
<el-form-item label="评审标题" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入评审标题" clearable :style="{width: '100%'}"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
@ -41,7 +60,9 @@
|
|||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { getDictList } from "@/api/dict";
|
||||
import { updateEvaluationItem,getEvaluationItem} from "@/api/evaluationitem";
|
||||
import { genTree } from "@/utils";
|
||||
import Treeselect from "@riophae/vue-treeselect";
|
||||
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
||||
|
||||
|
@ -53,29 +74,119 @@ export default {
|
|||
return {
|
||||
|
||||
formData: {
|
||||
id: null,
|
||||
id: null,
|
||||
name:undefined,
|
||||
cert_field: undefined,
|
||||
pv_scope: undefined,
|
||||
pv_class: undefined,
|
||||
ccc_list: undefined
|
||||
|
||||
|
||||
},
|
||||
rules: {
|
||||
|
||||
},
|
||||
|
||||
cert_fieldOptions: [],
|
||||
cert_field_code:null,
|
||||
pv_scopeOptions: [],
|
||||
pv_classOptions: [],
|
||||
ccc_listOptions: [],
|
||||
cert_patternOptions: []
|
||||
};
|
||||
},
|
||||
|
||||
created() {
|
||||
this.formData.id = this.$route.query.id;//接收参数
|
||||
this.getData();
|
||||
this.getPvscope();
|
||||
this.getPvclass();
|
||||
this.getCccList();
|
||||
this.getCertpattern();
|
||||
this.getCerttype();
|
||||
},
|
||||
mounted() {},
|
||||
methods: {
|
||||
getData() {
|
||||
methods: {
|
||||
|
||||
|
||||
typeChange(node,id){
|
||||
this.cert_field_code = node.code
|
||||
this.changeRules(node.code)
|
||||
},
|
||||
changeRules(val) {
|
||||
if (val == "PV") {
|
||||
this.rules.pv_scope = [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择",
|
||||
trigger: "change"
|
||||
}
|
||||
];
|
||||
this.rules.pv_class = [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择",
|
||||
trigger: "change"
|
||||
}
|
||||
];
|
||||
this.rules.ccc_list = [];
|
||||
} else if (val == "CCC") {
|
||||
this.rules.ccc_list = [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择",
|
||||
trigger: "change"
|
||||
}
|
||||
];
|
||||
this.rules.pv_class = [];
|
||||
this.rules.pv_scope = [];
|
||||
} else {
|
||||
this.rules.pv_class = [];
|
||||
this.rules.pv_scope = [];
|
||||
this.rules.ccc_list = [];
|
||||
}
|
||||
},
|
||||
getCerttype() {
|
||||
getDictList({ type__code: "cert_field" }).then(response => {
|
||||
if (response.data) {
|
||||
this.cert_fieldOptions = genTree(response.data);
|
||||
}
|
||||
});
|
||||
},
|
||||
getPvscope() {
|
||||
getDictList({ type__code: "pv_scope" }).then(response => {
|
||||
if (response.data) {
|
||||
this.pv_scopeOptions = genTree(response.data);
|
||||
}
|
||||
});
|
||||
},
|
||||
getPvclass() {
|
||||
getDictList({ type__code: "pv_class" }).then(response => {
|
||||
if (response.data) {
|
||||
this.pv_classOptions = genTree(response.data);
|
||||
}
|
||||
});
|
||||
},
|
||||
getCccList() {
|
||||
getDictList({ type__code: "ccc_list" }).then(response => {
|
||||
if (response.data) {
|
||||
this.ccc_listOptions = genTree(response.data);
|
||||
}
|
||||
});
|
||||
},
|
||||
getCertpattern() {
|
||||
getDictList({ type__code: "cert_pattern" }).then(response => {
|
||||
if (response.data) {
|
||||
this.cert_patternOptions = genTree(response.data);
|
||||
}
|
||||
});
|
||||
},
|
||||
getData() {
|
||||
getEvaluationItem(this.formData.id).then(response => {
|
||||
this.formData = response.data;
|
||||
this.cert_field_code = response.data.cert_field_.code
|
||||
|
||||
})
|
||||
},
|
||||
},
|
||||
submitForm() {
|
||||
this.$refs["elForm"].validate(valid => {
|
||||
if (!valid) return;
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
:model="evalutionsData"
|
||||
label-width="80px"
|
||||
label-position="right"
|
||||
:rules="rule1">
|
||||
>
|
||||
|
||||
<el-form-item label="评审项:" prop="content">
|
||||
<el-input type="textarea" :rows="2" v-model="evalutionsData.content"
|
||||
|
@ -70,20 +70,22 @@ export default {
|
|||
evalutionsData: {
|
||||
id: null,
|
||||
content: null,
|
||||
|
||||
},
|
||||
listQuery: {
|
||||
evItem: this.evItem,
|
||||
},
|
||||
|
||||
eltList: [],
|
||||
listLoading: true,
|
||||
dialogVisible:false,
|
||||
dialogType:'create',
|
||||
rule1: {
|
||||
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
},
|
||||
|
||||
created() {
|
||||
created() {
|
||||
|
||||
this.getList()
|
||||
},
|
||||
|
@ -92,10 +94,10 @@ export default {
|
|||
getList() {
|
||||
|
||||
this.listLoading = true;
|
||||
getEvaluationsList({ evItem:this.evItem }).then(response => {
|
||||
getEvaluationsList(this.listQuery).then(response => {
|
||||
if (response.data) {
|
||||
this.eltList = response.data.results;
|
||||
console.log(this.eltList)
|
||||
this.eltList = response.data
|
||||
console.log(this.listQuery)
|
||||
|
||||
}
|
||||
this.listLoading = false
|
||||
|
|
|
@ -68,12 +68,12 @@
|
|||
<el-button type="primary"
|
||||
size="small"
|
||||
icon="el-icon-edit"
|
||||
:disabled="!checkPermission(['detectorg_update'])"
|
||||
:disabled="!checkPermission(['testorg_update'])"
|
||||
@click="handleUpdate(scope)" />
|
||||
<el-button type="danger"
|
||||
size="small"
|
||||
icon="el-icon-delete"
|
||||
:disabled="!checkPermission(['detectorg_delete'])"
|
||||
:disabled="!checkPermission(['testorg_delete'])"
|
||||
@click="handleDelete(scope)" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
@ -137,7 +137,7 @@
|
|||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { getDetectOrgList, createDetectOrg, updateDetectOrg, deleteDetectOrg } from "@/api/laboratory"
|
||||
import { getTestOrgList, createTestOrg, updateTestOrg, deleteTestOrg } from "@/api/laboratory"
|
||||
|
||||
import Pagination from "@/components/Pagination"
|
||||
import checkPermission from '@/utils/permission'
|
||||
|
@ -181,7 +181,7 @@
|
|||
checkPermission,
|
||||
getList() {
|
||||
this.listLoading = true;
|
||||
getDetectOrgList(this.listQuery).then(response => {
|
||||
getTestOrgList(this.listQuery).then(response => {
|
||||
if (response.data) {
|
||||
this.detectoryList = response.data
|
||||
}
|
||||
|
@ -223,7 +223,7 @@
|
|||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
deleteDetectOrg(scope.row.id).then(res=>{
|
||||
deleteTestOrg(scope.row.id).then(res=>{
|
||||
this.$message.success('删除成功')
|
||||
this.getList()
|
||||
})
|
||||
|
@ -243,7 +243,7 @@
|
|||
if (valid) {
|
||||
const isEdit = this.dialogType === "update";
|
||||
if (isEdit) {
|
||||
updateDetectOrg(this.standard.id, this.standard).then(res => {
|
||||
updateTestOrg(this.standard.id, this.standard).then(res => {
|
||||
|
||||
this.getList();
|
||||
this.dialogVisible = false
|
||||
|
@ -251,7 +251,7 @@
|
|||
|
||||
});
|
||||
} else {
|
||||
createDetectOrg(this.standard).then(res => {
|
||||
createTestOrg(this.standard).then(res => {
|
||||
|
||||
this.getList();
|
||||
this.dialogVisible = false
|
|
@ -48,12 +48,12 @@
|
|||
<el-button type="primary"
|
||||
size="small"
|
||||
icon="el-icon-edit"
|
||||
:disabled="!checkPermission(['detectorg_update'])"
|
||||
:disabled="!checkPermission(['testorg_update'])"
|
||||
@click="handleUpdate(scope)" />
|
||||
<el-button type="danger"
|
||||
size="small"
|
||||
icon="el-icon-delete"
|
||||
:disabled="!checkPermission(['detectorg_delete'])"
|
||||
:disabled="!checkPermission(['testorg_delete'])"
|
||||
@click="handleDelete(scope)" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
@ -145,7 +145,7 @@
|
|||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { getDetectOrgNoticeList,getDetectOrgList, createDetectOrgNotice, updateDetectOrgNotice, deleteDetectOrgNotice } from "@/api/laboratory"
|
||||
import { getTestOrgNoticeList,getTestOrgList, createTestOrgNotice, updateTestOrgNotice, deleteTestOrgNotice } from "@/api/laboratory"
|
||||
import { upUrl, upHeaders} from "@/api/file"
|
||||
import Pagination from "@/components/Pagination"
|
||||
import checkPermission from '@/utils/permission'
|
||||
|
@ -201,7 +201,7 @@
|
|||
|
||||
},
|
||||
getStaffList() {
|
||||
getDetectOrgList().then(response => {
|
||||
getTestOrgList().then(response => {
|
||||
|
||||
this.staffList = response.data.results;
|
||||
|
||||
|
@ -210,7 +210,7 @@
|
|||
|
||||
getList() {
|
||||
this.listLoading = true;
|
||||
getDetectOrgNoticeList(this.listQuery).then(response => {
|
||||
getTestOrgNoticeList(this.listQuery).then(response => {
|
||||
if (response.data) {
|
||||
this.detectorynoticeList = response.data
|
||||
console.log(this.detectorynoticeList)
|
||||
|
@ -289,7 +289,7 @@
|
|||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
deleteDetectOrgNotice(scope.row.id).then(res=>{
|
||||
deleteTestOrgNotice(scope.row.id).then(res=>{
|
||||
this.$message.success('删除成功')
|
||||
this.getList()
|
||||
})
|
||||
|
@ -309,7 +309,7 @@
|
|||
if (valid) {
|
||||
const isEdit = this.dialogType === "update";
|
||||
if (isEdit) {
|
||||
updateDetectOrgNotice(this.standard.id, this.standard).then(res => {
|
||||
updateTestOrgNotice(this.standard.id, this.standard).then(res => {
|
||||
|
||||
this.getList();
|
||||
this.dialogVisible = false
|
||||
|
@ -317,7 +317,7 @@
|
|||
|
||||
});
|
||||
} else {
|
||||
createDetectOrgNotice(this.standard).then(res => {
|
||||
createTestOrgNotice(this.standard).then(res => {
|
||||
|
||||
this.getList();
|
||||
this.dialogVisible = false
|
|
@ -0,0 +1,29 @@
|
|||
# Generated by Django 3.0.5 on 2020-08-21 09:52
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('system', '0031_delete_bscodeset'),
|
||||
('certset', '0017_auto_20200821_1522'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='evaluationitem',
|
||||
name='cccpv_class',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='evaluationitem',
|
||||
name='ccc_list',
|
||||
field=models.ManyToManyField(blank=True, related_name='EvaluationItem_ccc_list', to='system.Dict', verbose_name='CCC产品分类'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='evaluationitem',
|
||||
name='pv_class',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='EvaluationItem_pv_class', to='system.Dict', verbose_name='自愿性产品认证产品分类'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,24 @@
|
|||
# Generated by Django 3.0.5 on 2020-08-21 09:55
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('system', '0031_delete_bscodeset'),
|
||||
('certset', '0018_auto_20200821_1752'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='evaluationitem',
|
||||
name='ccc_list',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='evaluationitem',
|
||||
name='ccc_list',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='EvaluationItem_ccc_list', to='system.Dict', verbose_name='CCC产品分类'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 3.0.5 on 2020-09-01 07:25
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('certset', '0019_auto_20200821_1755'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='evaluations',
|
||||
name='conform',
|
||||
field=models.TextField(default='符合', verbose_name='是否符合'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,17 @@
|
|||
# Generated by Django 3.0.5 on 2020-09-03 08:58
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('certset', '0020_evaluations_conform'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='evaluations',
|
||||
name='conform',
|
||||
),
|
||||
]
|
|
@ -63,8 +63,8 @@ class UnitType(CommonAModel):
|
|||
class EvaluationItem(CommonAModel):
|
||||
name = models.CharField('评审表名称',null=True, blank=True, max_length=1000)
|
||||
cert_field = models.ForeignKey(Dict, verbose_name='认证领域', related_name='Evaluations_cert_field', on_delete=models.DO_NOTHING)
|
||||
cccpv_class = models.ForeignKey(Dict, verbose_name='涉及CCC/PV分类', related_name='Evaluations_cccpv_class', on_delete=models.DO_NOTHING, null=True, blank=True)
|
||||
|
||||
ccc_list = models.ForeignKey(Dict,on_delete=models.SET_NULL, blank=True,null=True, verbose_name='CCC产品分类', related_name= 'EvaluationItem_ccc_list')
|
||||
pv_class = models.ForeignKey(Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='自愿性产品认证产品分类', related_name= 'EvaluationItem_pv_class')
|
||||
class Meta:
|
||||
verbose_name = '评审表项目'
|
||||
verbose_name_plural = verbose_name
|
||||
|
|
|
@ -65,9 +65,24 @@ class UnitTypeSerializer(serializers.ModelSerializer):
|
|||
queryset = queryset.select_related('standard','implementrule')
|
||||
return queryset
|
||||
class EvaluationItemSerializer(serializers.ModelSerializer):
|
||||
cert_field_ = DictSerializer(source='cert_field', read_only=True)
|
||||
class Meta:
|
||||
model = EvaluationItem
|
||||
fields = '__all__'
|
||||
class EvaluationItemListSerializer(serializers.ModelSerializer):
|
||||
pv_class = DictSerializer()
|
||||
cert_field = DictSerializer()
|
||||
ccc_list = DictSerializer()
|
||||
class Meta:
|
||||
model = EvaluationItem
|
||||
fields = ['id', 'name', 'cert_field', 'pv_class', 'create_time', 'ccc_list']
|
||||
@staticmethod
|
||||
def setup_eager_loading(queryset):
|
||||
""" Perform necessary eager loading of data. """
|
||||
queryset = queryset.select_related('pv_class', 'cert_field')
|
||||
queryset = queryset.prefetch_related('ccc_list',)
|
||||
return queryset
|
||||
|
||||
class EvaluationsSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Evaluations
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from django.shortcuts import render
|
||||
from rest_framework.viewsets import ModelViewSet
|
||||
from .models import Standard, UnitType, ImplementRule,EvaluationItem,Evaluations
|
||||
from .serializers import StandardSerializer, ImplementRuleSerializer, UnitTypeSerializer, ImplementRuleListSerializer,EvaluationItemSerializer,EvaluationsSerializer
|
||||
from .serializers import StandardSerializer, ImplementRuleSerializer, UnitTypeSerializer,EvaluationItemListSerializer, ImplementRuleListSerializer,EvaluationItemSerializer,EvaluationsSerializer
|
||||
from apps.system.permission_data import RbacFilterSet
|
||||
from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin
|
||||
# Create your views here.
|
||||
|
@ -53,13 +53,28 @@ class EvaluationItemViewSet(CreateUpdateCustomMixin, ModelViewSet):
|
|||
serializer_class = EvaluationItemSerializer
|
||||
search_fields = ['cert_field']
|
||||
ordering = ['-create_time']
|
||||
def get_serializer_class(self):
|
||||
# 根据请求类型动态变更serializer
|
||||
if self.action == 'list':
|
||||
return EvaluationItemListSerializer
|
||||
return EvaluationItemSerializer
|
||||
class EvaluationsViewSet(CreateUpdateCustomMixin, ModelViewSet):
|
||||
"""
|
||||
培训记录-增删改查
|
||||
"""
|
||||
|
||||
perms_map = {'get': '*', 'post': 'evaluations_create',
|
||||
'put': 'evaluations_update', 'delete': 'evaluations_delete'}
|
||||
queryset = Evaluations.objects.all()
|
||||
serializer_class = EvaluationsSerializer
|
||||
search_fields = ['content']
|
||||
ordering = ['-create_time']
|
||||
filterset_fields = ['evItem','content']
|
||||
ordering = ['-create_time']
|
||||
def paginate_queryset(self, queryset):
|
||||
|
||||
if ((not self.request.query_params.get('page', None)) and (self.request.query_params.get('evItem', None))) or (self.paginator is None):
|
||||
return None
|
||||
return self.paginator.paginate_queryset(queryset, self.request, view=self)
|
||||
|
||||
|
||||
|
|
@ -4,18 +4,13 @@ from .models import Enterprise,EnterpriseAddress
|
|||
from apps.system.serializers import DictSerializer
|
||||
|
||||
|
||||
|
||||
|
||||
class EnterpriseAddressSerializer(serializers.ModelSerializer):
|
||||
class EnterpriseSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = EnterpriseAddress
|
||||
model = Enterprise
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
class EnterpriseListSerializer(serializers.ModelSerializer):
|
||||
type = DictSerializer()
|
||||
economy_class = DictSerializer()
|
||||
|
||||
class Meta:
|
||||
model = Enterprise
|
||||
fields = ['id','query_code', 'code', 'name','ename','type','legal','build_time','person_count','ceramics_output','gassets','linkman1_name','linkman1_tel','linkman1_mobile','country_code','parent','credit_code','professional','all_person','economy_class','economy_type','linkman1_duty','business_type']
|
||||
|
@ -23,16 +18,14 @@ class EnterpriseListSerializer(serializers.ModelSerializer):
|
|||
def setup_eager_loading(queryset):
|
||||
""" Perform necessary eager loading of data. """
|
||||
queryset = queryset.select_related('type','economy_class')
|
||||
queryset = queryset.prefetch_related('enterpriseaddress_enterprise',)
|
||||
return queryset
|
||||
|
||||
class EnterpriseSerializer(serializers.ModelSerializer):
|
||||
address_ = EnterpriseAddressSerializer(source='enterpriseaddress_enterprise', many=True)
|
||||
|
||||
def get_cert_type(self, obj):
|
||||
return obj.get_cert_type_display()
|
||||
class EnterpriseAddressSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Enterprise
|
||||
model = EnterpriseAddress
|
||||
fields = '__all__'
|
||||
def setup_eager_loading(queryset):
|
||||
""" Perform necessary eager loading of data. """
|
||||
# queryset = queryset.select_related('type','economy_class')
|
||||
queryset = queryset.prefetch_related('enterpriseaddress_enterprise',)
|
||||
return queryset
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
from django.contrib import admin
|
||||
|
||||
from .models import *
|
||||
# Register your models here.
|
||||
admin.site.register(Bill)
|
|
@ -0,0 +1,6 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class CrmConfig(AppConfig):
|
||||
name = 'financial'
|
||||
verbose_name = '财务管理'
|
|
@ -0,0 +1,47 @@
|
|||
# Generated by Django 3.0.5 on 2020-08-27 03:48
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('system', '0031_delete_bscodeset'),
|
||||
('project', '0024_auto_20200827_1132'),
|
||||
('crm', '0011_enterprise_parent'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Bill',
|
||||
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='删除标记')),
|
||||
('feecode', models.CharField(max_length=300, verbose_name='收费单号')),
|
||||
('totalfee', models.FloatField(blank=True, default=0, null=True, verbose_name='总金额')),
|
||||
('deductions', models.FloatField(blank=True, default=0, null=True, verbose_name='扣减额')),
|
||||
('exchangetype', models.CharField(max_length=300, verbose_name='外汇类型')),
|
||||
('exchangerate', models.FloatField(blank=True, default=0, null=True, verbose_name='外币汇率')),
|
||||
('paidrmb', models.FloatField(blank=True, default=0, null=True, verbose_name='实收人名币')),
|
||||
('paidwb', models.FloatField(blank=True, default=0, null=True, verbose_name='实收外币')),
|
||||
('remark', models.CharField(max_length=300, verbose_name='备注')),
|
||||
('applicant', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='bill_applicant', to='crm.Enterprise')),
|
||||
('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='bill_belong_dept', to='system.Organization', verbose_name='所属部门')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='bill_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
('feecharacter', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='bill_feecharacter', to='system.Dict', verbose_name='费用性质')),
|
||||
('number', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='bill_number', to='project.CertApp')),
|
||||
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='bill_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
|
@ -0,0 +1,49 @@
|
|||
# Generated by Django 3.0.5 on 2020-09-03 08:58
|
||||
|
||||
from django.conf import settings
|
||||
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', '0031_delete_bscodeset'),
|
||||
('financial', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='bill',
|
||||
options={'verbose_name': '收费信息', 'verbose_name_plural': '收费信息'},
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='bill',
|
||||
name='applicant',
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Chargeitem',
|
||||
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='删除标记')),
|
||||
('itemkind', models.CharField(max_length=300, verbose_name='收费项目')),
|
||||
('eitemkind', models.CharField(max_length=300, verbose_name='收费英文项目')),
|
||||
('unitcount', models.FloatField(blank=True, default=0, null=True, verbose_name='单元数量')),
|
||||
('perfee', models.FloatField(blank=True, default=0, null=True, verbose_name='单价')),
|
||||
('pertotal', models.FloatField(blank=True, default=0, null=True, verbose_name='小计')),
|
||||
('remark', models.CharField(max_length=300, verbose_name='备注')),
|
||||
('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='chargeitem_belong_dept', to='system.Organization', verbose_name='所属部门')),
|
||||
('bills', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='chargeitem_bill', to='financial.Bill')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='chargeitem_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='chargeitem_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '收费项目',
|
||||
'verbose_name_plural': '收费项目',
|
||||
},
|
||||
),
|
||||
]
|
|
@ -0,0 +1,24 @@
|
|||
# Generated by Django 3.0.5 on 2020-09-07 01:56
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('financial', '0002_auto_20200903_1658'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='bill',
|
||||
name='feecode',
|
||||
field=models.CharField(max_length=300, unique=True, verbose_name='收费单号'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='chargeitem',
|
||||
name='bills',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='chargeitem_bill', to='financial.Bill', to_field='feecode'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,34 @@
|
|||
# Generated by Django 3.0.5 on 2020-09-07 07:51
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('financial', '0003_auto_20200907_0956'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='chargeitem',
|
||||
name='bills',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='chargeitem_bill', to='financial.Bill', to_field='feecode'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='chargeitem',
|
||||
name='eitemkind',
|
||||
field=models.CharField(blank=True, max_length=300, null=True, verbose_name='收费英文项目'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='chargeitem',
|
||||
name='itemkind',
|
||||
field=models.CharField(blank=True, max_length=300, null=True, verbose_name='收费项目'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='chargeitem',
|
||||
name='remark',
|
||||
field=models.CharField(blank=True, max_length=300, null=True, verbose_name='备注'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,17 @@
|
|||
# Generated by Django 3.0.5 on 2020-09-07 07:55
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('financial', '0004_auto_20200907_1551'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='chargeitem',
|
||||
name='eitemkind',
|
||||
),
|
||||
]
|
|
@ -0,0 +1,19 @@
|
|||
# Generated by Django 3.0.5 on 2020-09-08 03:43
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('financial', '0005_remove_chargeitem_eitemkind'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='chargeitem',
|
||||
name='bills',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='chargeitem_bill', to='financial.Bill'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,19 @@
|
|||
# Generated by Django 3.0.5 on 2020-09-08 03:46
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('financial', '0006_auto_20200908_1143'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='chargeitem',
|
||||
name='bills',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='chargeitem_bill', to='financial.Bill', to_field='feecode'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,43 @@
|
|||
from django.db import models
|
||||
from apps.system.models import CommonBModel,CommonAModel,Dict
|
||||
from simple_history.models import HistoricalRecords
|
||||
from django.contrib.postgres.fields import ArrayField
|
||||
from apps.project.models import CertApp
|
||||
from apps.crm.models import Enterprise
|
||||
import uuid
|
||||
# Create your models here.
|
||||
class Bill(CommonBModel):
|
||||
"""
|
||||
收费单表
|
||||
"""
|
||||
feecode = models.CharField('收费单号',unique=True, max_length=300)
|
||||
number = models.ForeignKey(CertApp, related_name='bill_number', on_delete=models.DO_NOTHING)
|
||||
feecharacter = models.ForeignKey(Dict, verbose_name='费用性质', related_name='bill_feecharacter', on_delete=models.DO_NOTHING)
|
||||
totalfee = models.FloatField('总金额',null=True, blank=True, default=0)
|
||||
deductions = models.FloatField('扣减额',null=True, blank=True, default=0)
|
||||
exchangetype = models.CharField('外汇类型', max_length=300)
|
||||
exchangerate = models.FloatField('外币汇率',null=True, blank=True, default=0)
|
||||
paidrmb = models.FloatField('实收人名币',null=True, blank=True, default=0)
|
||||
paidwb = models.FloatField('实收外币',null=True, blank=True, default=0)
|
||||
remark = models.CharField('备注', max_length=300)
|
||||
class Meta:
|
||||
verbose_name = '收费信息'
|
||||
verbose_name_plural = verbose_name
|
||||
def __str__(self):
|
||||
return self.feecode
|
||||
|
||||
class Chargeitem(CommonBModel):
|
||||
"""
|
||||
收费项目
|
||||
"""
|
||||
bills = models.ForeignKey(Bill, related_name='chargeitem_bill',to_field='feecode',null=True, blank=True, on_delete=models.DO_NOTHING)
|
||||
itemkind = models.CharField('收费项目',null=True, blank=True, max_length=300)
|
||||
unitcount = models.FloatField('单元数量',null=True, blank=True, default=0)
|
||||
perfee = models.FloatField('单价',null=True, blank=True, default=0)
|
||||
pertotal = models.FloatField('小计',null=True, blank=True, default=0)
|
||||
remark = models.CharField('备注',null=True, blank=True, max_length=300)
|
||||
class Meta:
|
||||
verbose_name = '收费项目'
|
||||
verbose_name_plural = verbose_name
|
||||
def __str__(self):
|
||||
return self.itemkind
|
|
@ -0,0 +1,24 @@
|
|||
from rest_framework import serializers
|
||||
from .models import Bill,Chargeitem
|
||||
|
||||
|
||||
class BillSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Bill
|
||||
fields = '__all__'
|
||||
class ChargeitemSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Chargeitem
|
||||
fields = '__all__'
|
||||
class BillsSerializer(serializers.ModelSerializer):
|
||||
number_=ChargeitemSerializer(source='chargeitem_number')
|
||||
class Meta:
|
||||
model = Bill
|
||||
fields = '__all__'
|
||||
def setup_eager_loading(queryset):
|
||||
""" Perform necessary eager loading of data. """
|
||||
# queryset = queryset.select_related('type','economy_class')
|
||||
queryset = queryset.prefetch_related('chargeitem_bill',)
|
||||
return queryset
|
||||
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
|
@ -0,0 +1,11 @@
|
|||
from django.urls import path, include
|
||||
from rest_framework import routers
|
||||
from .views import BillViewSet,ChargeitemViewSet
|
||||
|
||||
router = routers.DefaultRouter()
|
||||
router.register('bill', BillViewSet, basename="bill")
|
||||
router.register('chargeitem', ChargeitemViewSet, basename="chargeitem")
|
||||
|
||||
urlpatterns = [
|
||||
path('', include(router.urls))
|
||||
]
|
|
@ -0,0 +1,37 @@
|
|||
from django.shortcuts import render
|
||||
|
||||
from rest_framework.viewsets import ModelViewSet
|
||||
from .models import Bill,Chargeitem
|
||||
from utils.queryset import get_child_queryset2
|
||||
from .serializers import BillSerializer,ChargeitemSerializer
|
||||
from apps.system.permission_data import RbacFilterSet
|
||||
from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin
|
||||
# Create your views here.
|
||||
|
||||
class BillViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelViewSet):
|
||||
perms_map = {'get': '*', 'post': 'Bill_create',
|
||||
'put': 'Bill_update', 'delete': 'Bill_delete'}
|
||||
queryset = Bill.objects
|
||||
serializer_class = BillSerializer
|
||||
search_fields = ['feecode']
|
||||
ordering = ['-create_time']
|
||||
filterset_fields = ['number']
|
||||
ordering = ['-create_time']
|
||||
def paginate_queryset(self, queryset):
|
||||
|
||||
if ((not self.request.query_params.get('page', None)) and (self.request.query_params.get('number', None))) or (self.paginator is None):
|
||||
return None
|
||||
return self.paginator.paginate_queryset(queryset, self.request, view=self)
|
||||
class ChargeitemViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelViewSet):
|
||||
perms_map = {'get': '*', 'post': 'chargeitem_create',
|
||||
'put': 'chargeitem_update', 'delete': 'chargeitem_delete'}
|
||||
queryset = Chargeitem.objects
|
||||
serializer_class = ChargeitemSerializer
|
||||
search_fields = ['itemkind']
|
||||
filterset_fields = ['bills']
|
||||
ordering = ['-create_time']
|
||||
def paginate_queryset(self, queryset):
|
||||
|
||||
if ((not self.request.query_params.get('page', None)) and (self.request.query_params.get('bills', None))) or (self.paginator is None):
|
||||
return None
|
||||
return self.paginator.paginate_queryset(queryset, self.request, view=self)
|
|
@ -0,0 +1,89 @@
|
|||
# Generated by Django 3.0.5 on 2020-08-24 08:49
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('system', '0031_delete_bscodeset'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('laboratory', '0004_auto_20200812_1516'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='TestOrg',
|
||||
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='删除标记')),
|
||||
('code', models.CharField(max_length=100, verbose_name='实验室编号')),
|
||||
('name', models.CharField(blank=True, max_length=200, null=True, verbose_name='实验室名称')),
|
||||
('address', models.CharField(blank=True, max_length=500, null=True, verbose_name='通讯地址')),
|
||||
('contactman', models.CharField(blank=True, max_length=50, null=True, verbose_name='联系人')),
|
||||
('contactmanmoblie', models.CharField(blank=True, max_length=50, null=True, verbose_name='联系人手机')),
|
||||
('contactManTel', models.CharField(blank=True, max_length=50, null=True, verbose_name='联系人电话')),
|
||||
('loginname', models.CharField(blank=True, max_length=50, null=True, verbose_name='登录名')),
|
||||
('password', models.CharField(blank=True, max_length=50, null=True, verbose_name='登录密码')),
|
||||
('note', models.CharField(blank=True, max_length=200, null=True, verbose_name='备注')),
|
||||
('iszy', models.BooleanField(default=True, verbose_name='是否自有')),
|
||||
('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='testorg_belong_dept', to='system.Organization', verbose_name='所属部门')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='testorg_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='testorg_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '实验室信息',
|
||||
'verbose_name_plural': '实验室信息',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TestOrgNotice',
|
||||
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='删除标记')),
|
||||
('name', models.CharField(blank=True, max_length=500, null=True, verbose_name='公告标题')),
|
||||
('publishdate', models.DateTimeField(verbose_name='发布时间')),
|
||||
('ismportant', models.BooleanField(default=True, verbose_name='是否重要公告')),
|
||||
('note', models.CharField(blank=True, max_length=6000, null=True, verbose_name='公告内容')),
|
||||
('isalluser', models.BooleanField(default=True, verbose_name='是否通知全员')),
|
||||
('path', models.CharField(blank=True, max_length=1000, null=True, verbose_name='文件地址')),
|
||||
('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='testorgnotice_belong_dept', to='system.Organization', verbose_name='所属部门')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='testorgnotice_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
('dettonotice', models.ManyToManyField(blank=True, related_name='testorgnotice_dettonotice', to='laboratory.TestOrg', verbose_name='选择的实验室')),
|
||||
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='testorgnotice_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '实验室通知公告',
|
||||
'verbose_name_plural': '实验室通知公告',
|
||||
},
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='detectorgnotice',
|
||||
name='belong_dept',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='detectorgnotice',
|
||||
name='create_by',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='detectorgnotice',
|
||||
name='dettonotice',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='detectorgnotice',
|
||||
name='update_by',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='DetectOrg',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='DetectOrgNotice',
|
||||
),
|
||||
]
|
|
@ -4,14 +4,14 @@ from simple_history.models import HistoricalRecords
|
|||
from django.contrib.postgres.fields import ArrayField
|
||||
import uuid
|
||||
# Create your models here.
|
||||
class DetectOrg(CommonBModel):
|
||||
class TestOrg(CommonBModel):
|
||||
|
||||
code = models.CharField('实验室编号', max_length=100)
|
||||
name = models.CharField('实验室名称',null=True, blank=True,max_length=200)
|
||||
address = models.CharField('通讯地址',null=True, blank=True,max_length=500)
|
||||
contactman = models.CharField('联系人',null=True, blank=True,max_length=50)
|
||||
contactmanmoblie = models.CharField('联系人手机',null=True, blank=True,max_length=50)
|
||||
ontactManTel = models.CharField('联系人电话',null=True, blank=True,max_length=50)
|
||||
contactManTel = models.CharField('联系人电话',null=True, blank=True,max_length=50)
|
||||
loginname = models.CharField('登录名',null=True, blank=True,max_length=50)
|
||||
password = models.CharField('登录密码',null=True, blank=True,max_length=50)
|
||||
note = models.CharField('备注',null=True, blank=True,max_length=200)
|
||||
|
@ -22,7 +22,7 @@ class DetectOrg(CommonBModel):
|
|||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
class DetectOrgNotice(CommonBModel):
|
||||
class TestOrgNotice(CommonBModel):
|
||||
|
||||
name = models.CharField('公告标题',null=True, blank=True,max_length=500)
|
||||
publishdate = models.DateTimeField('发布时间')
|
||||
|
@ -30,7 +30,7 @@ class DetectOrgNotice(CommonBModel):
|
|||
note = models.CharField('公告内容',null=True, blank=True,max_length=6000)
|
||||
isalluser = models.BooleanField('是否通知全员', default=True)
|
||||
path = models.CharField('文件地址', max_length=1000, null=True, blank=True)
|
||||
dettonotice = models.ManyToManyField(DetectOrg, blank=True, verbose_name='选择的实验室', related_name= 'detectorgnotice_dettonotice')
|
||||
dettonotice = models.ManyToManyField(TestOrg, blank=True, verbose_name='选择的实验室', related_name= 'testorgnotice_dettonotice')
|
||||
class Meta:
|
||||
verbose_name = '实验室通知公告'
|
||||
verbose_name_plural = verbose_name
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
from rest_framework import serializers
|
||||
|
||||
from .models import DetectOrg,DetectOrgNotice
|
||||
from .models import TestOrg,TestOrgNotice
|
||||
from apps.system.serializers import DictSerializer
|
||||
|
||||
|
||||
class DetectOrgSerializer(serializers.ModelSerializer):
|
||||
class TestOrgSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = DetectOrg
|
||||
model = TestOrg
|
||||
fields = '__all__'
|
||||
class DetectOrgNoticeSerializer(serializers.ModelSerializer):
|
||||
class TestOrgNoticeSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = DetectOrgNotice
|
||||
model = TestOrgNotice
|
||||
fields = '__all__'
|
||||
class DetectOrgNoticListSerializer(serializers.ModelSerializer):
|
||||
dettonotice = DetectOrgSerializer(many=True)
|
||||
class TestOrgNoticListSerializer(serializers.ModelSerializer):
|
||||
dettonotice = TestOrgSerializer(many=True)
|
||||
class Meta:
|
||||
model = DetectOrgNotice
|
||||
model = TestOrgNotice
|
||||
fields = ['id','name','publishdate','ismportant','note','dettonotice','path']
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
from django.urls import path, include
|
||||
from .views import DetectOrgViewSet,DetectOrgNoticeViewSet
|
||||
from .views import TestOrgViewSet,TestOrgNoticeViewSet
|
||||
from rest_framework import routers
|
||||
|
||||
router = routers.DefaultRouter()
|
||||
router.register('detectorg', DetectOrgViewSet, basename="detectorg")
|
||||
router.register('detectorgnotice', DetectOrgNoticeViewSet, basename="detectorgnotice")
|
||||
router.register('testorg', TestOrgViewSet, basename="TestOrg")
|
||||
router.register('testnotice', TestOrgNoticeViewSet, basename="TestOrgnotice")
|
||||
|
||||
urlpatterns = [
|
||||
path('', include(router.urls))
|
||||
|
|
|
@ -1,30 +1,30 @@
|
|||
from django.shortcuts import render
|
||||
|
||||
from rest_framework.viewsets import ModelViewSet
|
||||
from .models import DetectOrg,DetectOrgNotice
|
||||
from .models import TestOrg,TestOrgNotice
|
||||
from utils.queryset import get_child_queryset2
|
||||
from .serializers import DetectOrgSerializer,DetectOrgNoticeSerializer,DetectOrgNoticListSerializer
|
||||
from .serializers import TestOrgSerializer,TestOrgNoticeSerializer,TestOrgNoticListSerializer
|
||||
from apps.system.permission_data import RbacFilterSet
|
||||
from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin
|
||||
# Create your views here.
|
||||
|
||||
class DetectOrgViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelViewSet):
|
||||
perms_map = {'get': '*', 'post': 'DetectOrg_create',
|
||||
'put': 'DetectOrg_update', 'delete': 'DetectOrg_delete'}
|
||||
queryset = DetectOrg.objects
|
||||
serializer_class = DetectOrgSerializer
|
||||
class TestOrgViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelViewSet):
|
||||
perms_map = {'get': '*', 'post': 'TestOrg_create',
|
||||
'put': 'TestOrg_update', 'delete': 'TestOrg_delete'}
|
||||
queryset = TestOrg.objects
|
||||
serializer_class = TestOrgSerializer
|
||||
search_fields = ['name', 'code']
|
||||
ordering = ['-create_time']
|
||||
class DetectOrgNoticeViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelViewSet):
|
||||
perms_map = {'get': '*', 'post': 'DetectOrgNotice_create',
|
||||
'put': 'DetectOrgNotice_update', 'delete': 'DetectOrgNotice_delete'}
|
||||
queryset = DetectOrgNotice.objects
|
||||
serializer_class = DetectOrgNoticeSerializer
|
||||
class TestOrgNoticeViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelViewSet):
|
||||
perms_map = {'get': '*', 'post': 'TestOrgNotice_create',
|
||||
'put': 'TestOrgNotice_update', 'delete': 'TestOrgNotice_delete'}
|
||||
queryset = TestOrgNotice.objects
|
||||
serializer_class = TestOrgNoticeSerializer
|
||||
search_fields = ['name']
|
||||
ordering = ['-create_time']
|
||||
def get_serializer_class(self):
|
||||
# 根据请求类型动态变更serializer
|
||||
if self.action == 'list':
|
||||
return DetectOrgNoticListSerializer
|
||||
return DetectOrgNoticeSerializer
|
||||
return TestOrgNoticListSerializer
|
||||
return TestOrgNoticeSerializer
|
||||
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
# Generated by Django 3.0.5 on 2020-08-25 07:50
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('project', '0022_auto_20200821_1435'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='evaluationdetail',
|
||||
name='application',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='project.CertApp'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,19 @@
|
|||
# Generated by Django 3.0.5 on 2020-08-27 03:32
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('system', '0031_delete_bscodeset'),
|
||||
('project', '0023_auto_20200825_1550'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='certapp',
|
||||
name='professional_code',
|
||||
field=models.ManyToManyField(related_name='certapp_professional_code', to='system.Dict', verbose_name='专业代码'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 3.0.5 on 2020-08-28 01:42
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('project', '0024_auto_20200827_1132'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='evaluationdetail',
|
||||
name='xmremark',
|
||||
field=models.TextField(blank=True, verbose_name='项目需说明备注'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,35 @@
|
|||
# Generated by Django 3.0.5 on 2020-08-31 03:08
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('certset', '0019_auto_20200821_1755'),
|
||||
('project', '0025_evaluationdetail_xmremark'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='evaluationdetail',
|
||||
name='item',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='certset.EvaluationItem', verbose_name='项目内容'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='evaluationdetail',
|
||||
name='remark',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='备注'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='evaluationdetail',
|
||||
name='result',
|
||||
field=models.CharField(blank=True, choices=[('合格', '合格'), ('不合格', '不合格'), ('有条件放行', '有条件放行')], default='符合', max_length=50, null=True, verbose_name='评审结果'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='evaluationdetail',
|
||||
name='xmremark',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='项目需说明备注'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 3.0.5 on 2020-08-31 03:30
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('project', '0026_auto_20200831_1108'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='evaluationdetail',
|
||||
old_name='application',
|
||||
new_name='cert_APP',
|
||||
),
|
||||
]
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 3.0.5 on 2020-08-31 03:33
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('project', '0027_auto_20200831_1130'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='evaluationdetail',
|
||||
old_name='cert_APP',
|
||||
new_name='cert_app',
|
||||
),
|
||||
]
|
|
@ -0,0 +1,19 @@
|
|||
# Generated by Django 3.0.5 on 2020-08-31 03:54
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('project', '0028_auto_20200831_1133'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='evaluationdetail',
|
||||
name='cert_app',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='evaluationdetail_cert_app', to='project.CertApp', verbose_name='关联受理'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,26 @@
|
|||
# Generated by Django 3.0.5 on 2020-08-31 08:53
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('project', '0029_auto_20200831_1154'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='evaluationdetail',
|
||||
name='result',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='evaluationdetail',
|
||||
name='xmremark',
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='evaluationdetail',
|
||||
name='item',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='项目明'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,35 @@
|
|||
# Generated by Django 3.0.5 on 2020-09-01 07:25
|
||||
|
||||
import django.contrib.postgres.fields.jsonb
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('certset', '0020_evaluations_conform'),
|
||||
('project', '0030_auto_20200831_1653'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='evaluationdetail',
|
||||
name='item_v',
|
||||
field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, null=True, verbose_name='评审项目'),
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='evaluationdetail',
|
||||
name='cert_app',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='evaluationdetail',
|
||||
name='cert_app',
|
||||
field=models.ManyToManyField(related_name='evaluationdetail_cert_app', to='project.CertApp', verbose_name='关联受理'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='evaluationdetail',
|
||||
name='item',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='evaluationdetail_item', to='certset.Evaluations', verbose_name='评审项'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,14 @@
|
|||
# Generated by Django 3.0.5 on 2020-09-03 03:42
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('project', '0031_auto_20200901_1525'),
|
||||
('project', '0027_auto_20200825_1636'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
]
|
|
@ -4,7 +4,7 @@ from django.db import models
|
|||
from rest_framework.exceptions import ParseError
|
||||
from simple_history.models import HistoricalRecords
|
||||
|
||||
from apps.certset.models import ImplementRule, UnitType, EvaluationItem, Standard
|
||||
from apps.certset.models import ImplementRule, UnitType, Evaluations, Standard
|
||||
from apps.crm.models import Enterprise
|
||||
from apps.system.models import CommonAModel, CommonBModel, Dict, User
|
||||
# from apps.plan.models import Plan
|
||||
|
@ -96,7 +96,6 @@ class CertApp(CommonBModel):
|
|||
factory = models.ForeignKey(Enterprise, on_delete=models.CASCADE, related_name='certapp_factory', null=True, blank=True)
|
||||
factory_v = JSONField(verbose_name='生产厂', null=True)
|
||||
scope = models.TextField('认证范围', null=True, blank=True)
|
||||
|
||||
system_people = models.FloatField('体系相关员工数',null=True, blank=True, default=0)
|
||||
initial_people = models.FloatField('初始人日数',null=True, blank=True, default=0)
|
||||
supervision_people = models.FloatField('监督人日数',null=True, blank=True, default=0)
|
||||
|
@ -105,7 +104,7 @@ class CertApp(CommonBModel):
|
|||
supervise_amount = models.FloatField('监督金额',null=True, blank=True, default=0)
|
||||
review_amount = models.FloatField('复评金额',null=True, blank=True, default=0)
|
||||
system_standard = models.ForeignKey(Dict, verbose_name='依据的体系标准',null=True, blank=True, related_name='certapp_system_standard', on_delete=models.DO_NOTHING)
|
||||
professional_code = models.ManyToManyField(Dict, verbose_name='专业代码',null=True, blank=True, related_name='certapp_professional_code')
|
||||
professional_code = models.ManyToManyField(Dict, verbose_name='专业代码', related_name='certapp_professional_code')
|
||||
certification = models.CharField('认证范围', max_length = 1000, null=True, blank=True)
|
||||
risk = models.CharField('风险系数', choices=risk_choices, max_length=50, null=True, blank=True)
|
||||
class Meta:
|
||||
|
@ -188,19 +187,18 @@ class EvaluationDetail(CommonBModel):
|
|||
('符合', '符合'),
|
||||
('不符合', '不符合'),
|
||||
('不适用', '不适用'),
|
||||
('需说明', '需说明')
|
||||
('需说明', '需说明'),
|
||||
)
|
||||
application = models.ForeignKey(Application, on_delete=models.CASCADE)
|
||||
item = models.ForeignKey(EvaluationItem, verbose_name='项目内容', on_delete=models.DO_NOTHING)
|
||||
result = models.CharField('评审结果',choices = result_choices, default='符合', max_length=50)
|
||||
remark = models.TextField('备注', blank=True)
|
||||
cert_app = models.ManyToManyField(CertApp, verbose_name='关联受理', related_name='evaluationdetail_cert_app')
|
||||
item = models.ForeignKey(Evaluations,on_delete=models.DO_NOTHING,verbose_name='评审项',null=True, blank=True, related_name='evaluationdetail_item')
|
||||
item_v = JSONField(verbose_name='评审项目',null=True, blank=True)
|
||||
remark = models.TextField('备注', null=True, blank=True)
|
||||
|
||||
class Meta:
|
||||
verbose_name = '评审记录详情'
|
||||
verbose_name_plural = verbose_name
|
||||
|
||||
def __str__(self):
|
||||
return self.application.number
|
||||
return self.name
|
||||
|
||||
class Unit(CommonBModel):
|
||||
"""
|
||||
|
@ -220,6 +218,7 @@ class Unit(CommonBModel):
|
|||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super().save(*args, **kwargs)
|
||||
obj = self.certapp
|
||||
|
|
|
@ -47,6 +47,13 @@ class CertappSerializer(serializers.ModelSerializer):
|
|||
class Meta:
|
||||
model = CertApp
|
||||
fields = '__all__'
|
||||
|
||||
class EvaluationDetailSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = EvaluationDetail
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
|
||||
@staticmethod
|
||||
def setup_eager_loading(queryset):
|
||||
|
@ -88,4 +95,4 @@ class ProjectUpdateSerializer(serializers.ModelSerializer):
|
|||
|
||||
class Meta:
|
||||
model = Project
|
||||
fields = ['remark', 'can_paichai']
|
||||
fields = ['remark', 'can_paichai']
|
||||
|
|
|
@ -6,8 +6,12 @@ router = routers.DefaultRouter()
|
|||
router.register('application', ApplicationViewSet, basename="application")
|
||||
router.register('subapplication', SubApplicationViewSet, basename="subapplication")
|
||||
router.register('certapp', CertappViewset, basename="certapp")
|
||||
|
||||
router.register('evaluationdetail', EvaluationDetailViewset, basename="evaluationdetail")
|
||||
|
||||
router.register('unit', UnitViewSet, basename="unit")
|
||||
router.register('project', ProjectViewSet, basename="project")
|
||||
urlpatterns = [
|
||||
|
||||
path('', include(router.urls))
|
||||
]
|
|
@ -89,6 +89,24 @@ class CertappViewset(PageOrNot, RbacFilterSet, ModelViewSet):
|
|||
headers = self.get_success_headers(serializer.data)
|
||||
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
||||
|
||||
class EvaluationDetailViewset(CreateUpdateCustomMixin, ModelViewSet):
|
||||
"""
|
||||
受理信息
|
||||
"""
|
||||
perms_map = {'get': '*', 'post': 'EvaluationDetail_create',
|
||||
'put': 'EvaluationDetail_update', 'delete': 'EvaluationDetail_delete'}
|
||||
queryset = EvaluationDetail.objects
|
||||
serializer_class = EvaluationDetailSerializer
|
||||
filterset_fields = ['cert_app']
|
||||
ordering = ['-create_time']
|
||||
def paginate_queryset(self, queryset):
|
||||
|
||||
if ((not self.request.query_params.get('page', None)) and (self.request.query_params.get('cert_app', None))) or (self.paginator is None):
|
||||
return None
|
||||
return self.paginator.paginate_queryset(queryset, self.request, view=self)
|
||||
|
||||
|
||||
|
||||
@action(methods=['put'], detail=True, perms_map={'put':'complete_certapp'},
|
||||
url_name='complete_certapp')
|
||||
def complete(self, request, pk=None):
|
||||
|
@ -185,4 +203,4 @@ class ProjectViewSet(RbacFilterSet, ModelViewSet):
|
|||
obj.edate0 = request.data['edate0']
|
||||
obj.edate1 = request.data['edate1']
|
||||
obj.save()
|
||||
return Response(status=status.HTTP_200_OK)
|
||||
return Response(status=status.HTTP_200_OK)
|
||||
|
|
|
@ -49,6 +49,7 @@ INSTALLED_APPS = [
|
|||
'apps.certset',
|
||||
'apps.employee',
|
||||
'apps.project',
|
||||
'apps.financial',
|
||||
'apps.laboratory',
|
||||
'apps.plan',
|
||||
'apps.audit'
|
||||
|
|
|
@ -36,6 +36,7 @@ urlpatterns = [
|
|||
path('crm/', include('apps.crm.urls')),
|
||||
path('employee/', include('apps.employee.urls')),
|
||||
path('project/', include('apps.project.urls')),
|
||||
path('financial/', include('apps.financial.urls')),
|
||||
path('plan/', include('apps.plan.urls')),
|
||||
path('audit/', include('apps.audit.urls')),
|
||||
path('laboratory/', include('apps.laboratory.urls')),
|
||||
|
|
Loading…
Reference in New Issue