This commit is contained in:
shilixia 2020-07-08 16:00:08 +08:00
parent b6034728fd
commit 400fbf6a56
11 changed files with 1041 additions and 735 deletions

View File

@ -7,7 +7,12 @@ export function getEnterpriseList(query) {
params: query params: query
}) })
} }
export function getEnterprise(id) {
return request({
url: `/crm/enterprise/${id}/`,
method: 'get'
})
}
export function createEnterprise(data) { export function createEnterprise(data) {
return request({ return request({
url: '/crm/enterprise/', url: '/crm/enterprise/',
@ -30,3 +35,34 @@ export function deleteEnterprise(id) {
method: 'delete' method: 'delete'
}) })
} }
export function getAddressList(query) {
return request({
url: '/crm/enterpriseaddress/',
method: 'get',
params: query
})
}
export function createAddress(data) {
return request({
url: '/crm/enterpriseaddress/',
method: 'post',
data
})
}
export function updateAddress(id, data) {
return request({
url: `/crm/enterpriseaddress/${id}/`,
method: 'put',
data
})
}
export function deleteAddress(id) {
return request({
url: `/certset/enterpriseaddress/${id}/`,
method: 'delete'
})
}

View File

@ -0,0 +1,237 @@
<template>
<div class="app-container">
<div>
<el-button type="primary" icon="el-icon-plus" @click="handleCreate">新增</el-button>
</div>
<el-table v-loading="listLoading"
:data="addressList"
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 align="center" label="中文地址">
<template slot-scope="scope">
{{ scope.row.address }}
</template>
</el-table-column>
<el-table-column align="center" label="英文地址">
<template slot-scope="scope">
{{ scope.row.eaddress }}
</template>
</el-table-column>
<el-table-column align="center" label="邮编">
<template slot-scope="scope">
{{ scope.row.code }}
</template>
</el-table-column>
<el-table-column align="center" label="地址类型">
<template slot-scope="scope">
{{ scope.row.type }}
</template>
</el-table-column>
</el-table>
<el-dialog :visible.sync="dialogVisible" :title="dialogType==='update'?'编辑':'新增'">
<el-form ref="Form"
:model="addressData"
label-width="80px"
label-position="right"
:rules="rule1">
<el-form-item label="中文地址:" prop="address">
<el-input v-model="addressData.address" placeholder="中文地址" />
</el-form-item>
<el-form-item label="英文地址:" prop="eadress">
<el-input v-model="addressData.eaddress" placeholder="英文地址" />
</el-form-item>
<el-form-item label="地址邮编:" prop="code">
<el-input v-model="addressData.code" placeholder="邮编" />
</el-form-item>
<el-form-item label="地址类型:" prop="type">
<el-select v-model="addressData.type" placeholder="请选择地址类型" clearable :style="{width: '100%'}">
<el-option v-for="(item, index) in typeOptions" :key="index" :label="item.label"
:value="item.value" :disabled="item.disabled"></el-option>
</el-select>
</el-form-item>
<el-form-item label="级联选择" prop="county_code">
<el-select filterable v-model="addressData.country_code" @change='getValue'
placeholder="请选择国家"
clearable
:style="{width: '35%'}">
<el-option v-for="(item, index) in country_Options"
:key="index"
:label="item.name"
:value="item.id"
:disabled="item.disabled">
</el-option>
</el-select>
<el-cascader v-model="addressData.county_code" :options="countyOptions" :props="county_prosecode"
:style="{width: '60%'}" filterable placeholder="请选择地区"></el-cascader>
</el-form-item>
</el-form>
<div style="text-align:right;">
<el-button type="danger" @click="dialogVisible=false">取消</el-button>
<el-button type="primary" @click="confirm('Form')">确认</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { getAddressList, createAddress, updateAddress, deleteAddress} from "@/api/enterprise"
import Pagination from "@/components/Pagination"
import checkPermission from '@/utils/permission'
import { genTree } from "@/utils";
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import { getDictList } from "@/api/dict";
export default {
name:'AddressData',
components: {Treeselect, Pagination},
props:['enterprise'],
data() {
return {
addressData: {
id: null,
address: null,
eaddress: null,
code: null,
type: null,
county_code: null,
enterprise:this.enterprise
},
addressList: [],
listLoading: true,
listQuery: {
enterprise:this.enterprise
},
rule1: {
},
country_Options: [],
countyOptions:[],
field101Options: [],
county_prosecode: {
"multiple": false,
"label": "name",
"value": "value",
"children": "children"
},
typeOptions: [
{
label: "生产地址",
value: "生产地址"
},
{
label: "通信地址",
value: "通信地址"
},
{
label: "注册地址",
value: "注册地址"
}
],
dialogVisible:false,
dialogType:'create',
};
},
created() {
this.getList(),
this. getcountrytype()
},
methods: {
checkPermission,
getList() {
this.listLoading = true;
getAddressList(this.listQuery).then(response => {
if (response.data) {
this.addressList = response.data.results
}
this.listLoading = false
});
},
getcountrytype() {
getDictList({ type__code: "world_regions" }).then(response => {
this.country_Options = genTree(response.data);
});
this.getValue()
},
getValue() {
console.log(this.addressData.country_code)
if (this.addressData.country_code == 69) {
getDictList({ type__code: "china_regions" }).then(response => {
this.countyOptions = genTree(response.data);
});
}
else
this.countyOptions = '';
},
handleCreate() {
this.dialogType = 'create'
this.dialogVisible = true
this.$nextTick(() => {
this.$refs['Form'].clearValidate()
})
},
handleUpdate(scope) {
this.addressData = Object.assign({}, scope.row) // copy obj
this.dialogType = 'update'
this.dialogVisible = true
this.$nextTick(() => {
this.$refs['Form'].clearValidate()
})
},
handleDelete(scope){
deleteAddress(scope.row.id).then(res=>{
this.$notify({
title: '成功',
type: 'success',
duration: 2000
})
this.getList()
})
},
async confirm(form) {
this.$refs[form].validate(valid => {
if (valid) {
const isEdit = this.dialogType === 'update'
if (isEdit) {
updateAddress(this.addressData.id, this.addressData).then(() => {
this.getList()
this.dialogVisible = false
this.$notify({
title: '成功',
type: 'success',
duration: 2000
})
})
} else {
this.addressData.county_code=this.addressData.county_code[2]
console.log(this.addressData)
createAddress(this.addressData).then(res => {
this.getList()
this.dialogVisible = false
this.$notify({
title: '成功',
type: 'success',
duration: 2000
})
})
}
} else {
return false
}
})
}
}
};
</script>

View File

@ -29,18 +29,14 @@
fit fit
stripe stripe
highlight-current-row highlight-current-row
max-height="800"> max-height="1000">
<el-table-column fixed="left" type="index" width="50" /> <el-table-column fixed="left" type="index" width="50" />
<el-table-column fixed="left" width="150" label="组织查询码"> <el-table-column fixed="left" width="150" label="组织查询码">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.query_code }} {{ scope.row.query_code }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="150" label="编号">
<template slot-scope="scope">
{{ scope.row.fid }}
</template>
</el-table-column>
<el-table-column width="150" label="工厂编号"> <el-table-column width="150" label="工厂编号">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.code }} {{ scope.row.code }}
@ -62,7 +58,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="150" label="机构类型"> <el-table-column width="150" label="机构类型">
<template slot-scope="scope"> <template slot-scope="scope" v-if="scope.row.type">
{{ scope.row.type.name }} {{ scope.row.type.name }}
</template> </template>
</el-table-column> </el-table-column>
@ -78,7 +74,7 @@
</el-table-column> </el-table-column>
<el-table-column width="150" label="经济行业"> <el-table-column width="150" label="经济行业">
<template slot-scope="scope"> <template slot-scope="scope" v-if="scope.row.economy_class">
{{ scope.row.economy_class.name }} {{ scope.row.economy_class.name }}
</template> </template>
</el-table-column> </el-table-column>
@ -128,12 +124,12 @@
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="primary" <el-button type="primary"
size="small" size="small"
:disabled="!checkPermission(['implementrule_update'])" :disabled="!checkPermission(['enterprise_update'])"
@click="handleUpdate(scope)">编辑</el-button> @click="handleUpdate(scope)">编辑</el-button>
<el-button type="danger" <el-button type="danger"
size="small" size="small"
:disabled="!checkPermission(['implementrule_delete'])" :disabled="!checkPermission(['enterprise_delete'])"
@click="handleDelete(scope)">删除</el-button> @click="handleDelete(scope)">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -147,7 +143,7 @@
</div> </div>
</template> </template>
<script> <script>
import { getEnterpriseList } from "@/api/enterprise" import { getEnterpriseList,deleteEnterprise } from "@/api/enterprise"
import Pagination from "@/components/Pagination" import Pagination from "@/components/Pagination"
import checkPermission from '@/utils/permission' import checkPermission from '@/utils/permission'
export default { export default {
@ -191,7 +187,25 @@ export default {
handleCreate() { handleCreate() {
this.$router.push({path:"/crm/enterprise/create"}) this.$router.push({path:"/crm/enterprise/create"})
}, },
handleDelete(scope) {
} this.$confirm('确定删除本条数据吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteEnterprise(scope.row.id).then(res=>{
this.$message.success('删除成功')
this.getList()
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
},
},
}; };
</script> </script>

File diff suppressed because it is too large Load Diff

View File

@ -79,6 +79,12 @@
:disabled="!checkPermission(['implementrule_update'])" :disabled="!checkPermission(['implementrule_update'])"
@click="handleUpdate(scope)" @click="handleUpdate(scope)"
>编辑</el-button> >编辑</el-button>
<el-button
type="primary"
size="small"
:disabled="!checkPermission(['implementrule_update'])"
@click="handleUpate(scope)"
>单元划分</el-button>
<el-button <el-button
type="danger" type="danger"
size="small" size="small"
@ -128,7 +134,7 @@ export default {
this.listLoading = true; this.listLoading = true;
getImplementRuleList(this.listQuery).then(response => { getImplementRuleList(this.listQuery).then(response => {
if (response.data) { if (response.data) {
this.ruleList = response.data this.ruleList = response.data.results
} }
this.listLoading = false this.listLoading = false
}); });

View File

@ -1,149 +1,144 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-tabs type="border-card"> <el-row :gutter="10">
<el-tab-pane label="规则信息"> <el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="100px">
<el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="100px"> <el-col :span="18">
<el-row> <el-form-item label="认证类型" prop="cert_type">
<el-col :span="8"> <el-select
<el-form-item label="认证类型" prop="cert_type"> v-model="formData.cert_type"
<el-select placeholder="请选择认证类型"
v-model="formData.cert_type" clearable
placeholder="请选择认证类型" :style="{width: '100%'}"
clearable >
:style="{width: '100%'}" <el-option
> v-for="(item, index) in cert_typeOptions"
<el-option :key="index"
v-for="(item, index) in cert_typeOptions" :label="item.label"
:key="index" :value="item.value"
:label="item.label" :disabled="item.disabled"
:value="item.value" ></el-option>
:disabled="item.disabled" </el-select>
></el-option> </el-form-item>
</el-select> </el-col>
</el-form-item> <el-col :span="18">
</el-col> <el-form-item label="规则编号" prop="code">
<el-col :span="8"> <el-input
<el-form-item label="规则编号" prop="code"> v-model="formData.code"
<el-input placeholder="请输入规则编号"
v-model="formData.code" clearable
placeholder="请输入规则编号" :style="{width: '100%'}"
clearable ></el-input>
:style="{width: '100%'}" </el-form-item>
></el-input> </el-col>
</el-form-item> <el-col :span="18">
</el-col> <el-form-item label="规则名称" prop="name">
<el-col :span="8"> <el-input
<el-form-item label="规则名称" prop="name"> v-model="formData.name"
<el-input placeholder="请输入规则名称"
v-model="formData.name" clearable
placeholder="请输入规则名称" :style="{width: '100%'}"
clearable ></el-input>
:style="{width: '100%'}" </el-form-item>
></el-input> </el-col>
</el-form-item> <el-col :span="18">
</el-col> <el-form-item label="认证模式" prop="cert_pattern">
</el-row> <el-select
v-model="formData.cert_pattern"
<el-col :span="24"> placeholder="请选择认证模式"
<el-form-item label="认证模式" prop="cert_pattern"> clearable
<el-select :style="{width: '100%'}"
v-model="formData.cert_pattern" :multiple="true"
placeholder="请选择认证模式" >
clearable <el-option
:style="{width: '100%'}" v-for="(item, index) in cert_patternOptions"
:multiple="true" :key="index"
> :label="item.fullname"
<el-option :value="item.value"
v-for="(item, index) in cert_patternOptions" :disabled="item.disabled"
:key="index" ></el-option>
:label="item.fullname" </el-select>
:value="item.value" </el-form-item>
:disabled="item.disabled" </el-col>
></el-option> <el-col :span="18" v-if="formData.cert_type =='pv'">
</el-select> <el-form-item label="产品领域" prop="pv_scope">
</el-form-item> <el-select
</el-col> v-model="formData.pv_scope"
<el-col :span="24" v-if="formData.cert_type =='pv'"> placeholder="请选择产品领域"
<el-form-item label="产品领域" prop="pv_scope"> clearable
<el-select :style="{width: '100%'}"
v-model="formData.pv_scope" >
placeholder="请选择产品领域" <el-option
clearable v-for="(item, index) in pv_scopeOptions"
:style="{width: '100%'}" :key="index"
> :label="item.fullname"
<el-option :value="item.value"
v-for="(item, index) in pv_scopeOptions" :disabled="item.disabled"
:key="index" ></el-option>
:label="item.fullname" </el-select>
:value="item.value" </el-form-item>
:disabled="item.disabled" </el-col>
></el-option> <el-col :span="18" v-if="formData.cert_type =='pv'">
</el-select> <el-form-item label="产品分类" prop="pv_class">
</el-form-item> <treeselect
</el-col> v-model="formData.pv_class"
<el-col :span="24" v-if="formData.cert_type =='pv'"> placeholder="请选择产品分类"
<el-form-item label="产品分类" prop="pv_class"> clearable
<treeselect :style="{width: '100%'}"
v-model="formData.pv_class" :options="pv_classOptions"
placeholder="请选择产品分类" :multiple="false"
clearable ></treeselect>
:style="{width: '100%'}" </el-form-item>
:options="pv_classOptions" </el-col>
:multiple="false" <el-col :span="18" v-if="formData.cert_type =='ccc'">
></treeselect> <el-form-item label="产品分类" prop="ccc_list">
</el-form-item> <treeselect
</el-col> v-model="formData.ccc_list"
<el-col :span="24" v-if="formData.cert_type =='ccc'"> placeholder="请选择产品分类"
<el-form-item label="产品分类" prop="ccc_list"> clearable
<treeselect :style="{width: '100%'}"
v-model="formData.ccc_list" :options="ccc_listOptions"
placeholder="请选择产品分类" :multiple="true"
clearable ></treeselect>
:style="{width: '100%'}" </el-form-item>
:options="ccc_listOptions" </el-col>
:multiple="true" <el-col :span="18">
></treeselect> <el-form-item label="文件" prop="path">
</el-form-item> <el-upload
</el-col> :on-preview="handlePreview"
<el-col :span="24"> :on-success="handleSuccess"
<el-form-item label="文件" prop="path"> :action="upUrl"
<el-upload :headers="upHeaders"
:on-preview="handlePreview" :limit="1"
:on-success="handleSuccess" :file-list="fileList"
:action="upUrl" >
:headers="upHeaders" <el-button size="small" type="primary">点击上传</el-button>
:limit="1" </el-upload>
:file-list="fileList" </el-form-item>
> </el-col>
<el-button size="small" type="primary">点击上传</el-button> <el-col :span="24">
</el-upload> <el-form-item size="large">
</el-form-item> <el-button type="primary" @click="submitForm">保存</el-button>
</el-col> <el-button
<el-col :span="24" style="margin-top:4px"> type="primary"
<el-form-item size="large"> @click="submitForm2"
<el-button type="primary" @click="submitForm">保存</el-button> v-if="formData.cert_type =='ccc'|| formData.cert_type == 'pv'"
<el-button @click="resetForm">重置</el-button> >保存并继续单元划分</el-button>
</el-form-item> <el-button @click="resetForm">重置</el-button>
</el-col> </el-form-item>
</el-form> </el-col>
</el-tab-pane> </el-form>
<el-tab-pane label="单元类型划分" v-if="(formData.cert_type =='ccc'|| formData.cert_type == 'pv')&&(formData.id)"> </el-row>
<Unittype :implementrule="formData.id"></Unittype>
</el-tab-pane>
</el-tabs>
</div> </div>
</template> </template>
<script> <script>
import { getDictList } from "@/api/dict"; import { getDictList } from "@/api/dict";
import { updateImplementRule, getImplementRule } from "@/api/implementrule"; import { createImplementRule, getImplementRule } from "@/api/implementrule";
import { genTree } from "@/utils"; import { genTree } from "@/utils";
import Treeselect from "@riophae/vue-treeselect"; import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css"; import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { upUrl, upHeaders } from "@/api/file"; import { upUrl, upHeaders } from "@/api/file";
import Unittype from "@/views/implementrule/unittype";
export default { export default {
components: { Treeselect, Unittype }, components: { Treeselect },
props: [], props: [],
data() { data() {
return { return {
@ -205,10 +200,18 @@ export default {
value: "sys" value: "sys"
} }
], ],
pv_scopeOptions: [], pv_scopeOptions: [
pv_classOptions: [],
ccc_listOptions: [], ],
cert_patternOptions: [] pv_classOptions: [
],
ccc_listOptions: [
],
cert_patternOptions: [
]
}; };
}, },
computed: {}, computed: {},
@ -216,12 +219,12 @@ export default {
"formData.cert_type": "changeRules" "formData.cert_type": "changeRules"
}, },
created() { created() {
this.formData.id = this.$route.query.id; //接收参数 this.formData.id = this.$route.query.id //接收参数
this.getRule(); this.getRule();
this.getPvscope(); this.getPvscope()
this.getPvclass(); this.getPvclass()
this.getCccList(); this.getCccList()
this.getCertpattern(); this.getCertpattern()
}, },
mounted() {}, mounted() {},
methods: { methods: {
@ -270,8 +273,8 @@ export default {
}, },
getRule() { getRule() {
getImplementRule(this.formData.id).then(response => { getImplementRule(this.formData.id).then(response => {
this.formData = response.data; this.formData = response.data
}); })
}, },
getPvscope() { getPvscope() {
getDictList({ type__code: "pv_scope" }).then(response => { getDictList({ type__code: "pv_scope" }).then(response => {
@ -305,11 +308,17 @@ export default {
this.$refs["elForm"].validate(valid => { this.$refs["elForm"].validate(valid => {
if (!valid) return; if (!valid) return;
// TODO 提交表单 // TODO 提交表单
updateImplementRule(this.formData.id, this.formData).then(response => { createImplementRule(this.formData).then(response => {
this.$message({ this.$router.go(-1);
type: 'success', });
message: '成功!' });
}) },
submitForm2() {
this.$refs["elForm"].validate(valid => {
if (!valid) return;
// TODO 提交表单
createImplementRule(this.formData).then(response => {
//this.$router.go(-1);
}); });
}); });
}, },
@ -318,4 +327,4 @@ export default {
} }
} }
}; };
</script> </script>

View File

@ -0,0 +1,76 @@
# Generated by Django 3.0.5 on 2020-07-06 02: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):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('system', '0021_auto_20200616_1722'),
('crm', '0005_auto_20200701_1505'),
]
operations = [
migrations.RemoveField(
model_name='enterprise',
name='mailing_address',
),
migrations.RemoveField(
model_name='enterprise',
name='mailing_code',
),
migrations.RemoveField(
model_name='enterprise',
name='mailing_eaddress',
),
migrations.RemoveField(
model_name='enterprise',
name='production_address',
),
migrations.RemoveField(
model_name='enterprise',
name='production_eaddress',
),
migrations.RemoveField(
model_name='enterprise',
name='production_postcode',
),
migrations.RemoveField(
model_name='enterprise',
name='registered_address',
),
migrations.RemoveField(
model_name='enterprise',
name='registered_code',
),
migrations.RemoveField(
model_name='enterprise',
name='registered_eaddress',
),
migrations.CreateModel(
name='EnterpriseAddress',
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='删除标记')),
('address', models.CharField(blank=True, max_length=1000, null=True, verbose_name='地址名称')),
('eaddress', models.CharField(blank=True, max_length=1000, null=True, verbose_name='地址英文名称')),
('code', models.CharField(blank=True, max_length=1000, null=True, verbose_name='地址邮编邮编')),
('type', models.CharField(choices=[('2', '注册地址'), ('1', '通信地址'), ('0', '生产地址')], default='生产地址', max_length=50, verbose_name='地址类型')),
('country_code', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='enterpriseaddress_country_code', to='system.Dict', verbose_name='国家代码')),
('county_code', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='enterpriseaddress_county_code', to='system.Dict', verbose_name='县/区代码')),
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='enterpriseaddress_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
('enterprise', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='enterpriseaddress_enterprise', to='crm.Enterprise', verbose_name='地址属性')),
('provinceCode', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='enterpriseaddress_provinceCode', to='system.Dict', verbose_name='省代码')),
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='enterpriseaddress_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
],
options={
'abstract': False,
},
),
]

View File

@ -1,5 +1,5 @@
from django.db import models from django.db import models
from apps.system.models import CommonBModel, Dict from apps.system.models import CommonBModel,CommonAModel,Dict
from simple_history.models import HistoricalRecords from simple_history.models import HistoricalRecords
import uuid import uuid
# Create your models here. # Create your models here.
@ -27,20 +27,7 @@ class Enterprise(CommonBModel):
linkman2_fax = models.CharField('备用联系人传真',max_length=300,null=True, blank=True) linkman2_fax = models.CharField('备用联系人传真',max_length=300,null=True, blank=True)
country_code = models.ForeignKey(Dict, on_delete=models.SET_NULL,null=True, blank=True,verbose_name='生产企业所在国家地区代码', related_name= 'enterprise_country_code') country_code = models.ForeignKey(Dict, on_delete=models.SET_NULL,null=True, blank=True,verbose_name='生产企业所在国家地区代码', related_name= 'enterprise_country_code')
credit_code = models.CharField('统一社会信用代码',max_length=300,null=True, blank=True) credit_code = models.CharField('统一社会信用代码',max_length=300,null=True, blank=True)
registered_address = models.CharField('注册地址',max_length=1000,null=True, blank=True)
registered_eaddress = models.CharField('注册地址英文',max_length=1000,null=True, blank=True)
registered_code = models.CharField('注册地址邮编',max_length=1000,null=True, blank=True)
production_address = models.CharField('生产地址',null=True, blank=True,max_length=1000)
production_eaddress = models.CharField('生产英文地址',null=True, blank=True,max_length=1000)
production_postcode = models.CharField('生产地址邮编',null=True, blank=True,max_length=100)
mailing_address = models.CharField('通信地址',max_length=1000,null=True, blank=True)
mailing_eaddress = models.CharField('通信英文地址',max_length=1000,null=True, blank=True)
mailing_code = models.CharField('地址邮编',max_length=300,null=True, blank=True)
region_code = models.ForeignKey(Dict, on_delete=models.SET_NULL,verbose_name='县/区',null=True, blank=True, related_name= 'enterprise_region_code1') region_code = models.ForeignKey(Dict, on_delete=models.SET_NULL,verbose_name='县/区',null=True, blank=True, related_name= 'enterprise_region_code1')
# status = models.CharField('是否受理',null=True, blank=True, max_length=1000)
# bak1 = models.CharField('',null=True, blank=True, max_length=1000)
# bak2 = models.CharField('',null=True, blank=True, max_length=1000)
# bak3 = models.CharField('',null=True, blank=True, max_length=1000)
professional = models.ForeignKey(Dict, on_delete=models.SET_NULL,verbose_name='所属专业',null=True, blank=True, related_name= 'enterprise_professional') professional = models.ForeignKey(Dict, on_delete=models.SET_NULL,verbose_name='所属专业',null=True, blank=True, related_name= 'enterprise_professional')
qms_person = models.IntegerField('QMS人数',null=True, blank=True) qms_person = models.IntegerField('QMS人数',null=True, blank=True)
ems_person = models.IntegerField('EMS人数',null=True, blank=True) ems_person = models.IntegerField('EMS人数',null=True, blank=True)
@ -69,12 +56,23 @@ class Enterprise(CommonBModel):
def __str__(self): def __str__(self):
return self.name return self.name
class EnterpriseAddress(CommonAModel): class EnterpriseAddress(CommonAModel):
EnterpriseFid = models.ForeignKey(Enterprise, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='地址属性', related_name='enterpriseaddress_ enterpriseFid') type_choices = (
('注册地址', '注册地址'),
('通信地址', '通信地址'),
('生产地址', '生产地址')
)
enterprise= models.ForeignKey(Enterprise, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='地址属性', related_name='enterpriseaddress_enterprise')
address = models.CharField('地址名称',max_length=1000,null=True, blank=True) address = models.CharField('地址名称',max_length=1000,null=True, blank=True)
eaddress = models.CharField('地址英文名称',max_length=1000,null=True, blank=True) eaddress = models.CharField('地址英文名称',max_length=1000,null=True, blank=True)
code = models.CharField('地址邮编邮编',max_length=1000,null=True, blank=True) code = models.CharField('地址邮编',max_length=1000,null=True, blank=True)
type = models.CharField('地址属性',max_length=1000,null=True, blank=True) type = models.CharField('地址类型', max_length=50,choices=type_choices, default='生产地址')
county_code = models.ForeignKey(Dict, on_delete=models.SET_NULL,verbose_name='县/区代码',null=True, blank=True, related_name= 'enterpriseaddress_county_code') county_code = models.ForeignKey(Dict, on_delete=models.SET_NULL,verbose_name='县/区代码',null=True, blank=True, related_name= 'enterpriseaddress_county_code')
country_code = models.ForeignKey(Dict, on_delete=models.SET_NULL,verbose_name='国家代码',null=True, blank=True, related_name= 'enterpriseaddress_country_code') country_code = models.ForeignKey(Dict, on_delete=models.SET_NULL,verbose_name='国家代码',null=True, blank=True, related_name= 'enterpriseaddress_country_code')
provinceCode = models.ForeignKey(Dict, on_delete=models.SET_NULL,verbose_name='省代码',null=True, blank=True, related_name= 'enterpriseaddress_provinceCode') provinceCode = models.ForeignKey(Dict, on_delete=models.SET_NULL,verbose_name='省代码',null=True, blank=True, related_name= 'enterpriseaddress_provinceCode')
class Meta:
verbose_name = '组织地址'
verbose_name_plural = verbose_name
def __str__(self):
return self.name

View File

@ -1,6 +1,6 @@
from rest_framework import serializers from rest_framework import serializers
from .models import Enterprise from .models import Enterprise,EnterpriseAddress
from apps.system.serializers import DictSerializer from apps.system.serializers import DictSerializer
@ -13,7 +13,7 @@ class EnterpriseListSerializer(serializers.ModelSerializer):
economy_class = DictSerializer() economy_class = DictSerializer()
class Meta: class Meta:
model = Enterprise model = Enterprise
fields = ['id','query_code', 'code','fid', 'name','ename','type','legal','production_address','production_eaddress','production_postcode','build_time','person_count','ceramics_output','gassets','linkman1_name','linkman1_tel','linkman1_mobile','country_code','credit_code','professional','all_person','economy_class','economy_type','linkman1_duty','business_type'] fields = ['id','query_code', 'code', 'name','ename','type','legal','build_time','person_count','ceramics_output','gassets','linkman1_name','linkman1_tel','linkman1_mobile','country_code','credit_code','professional','all_person','economy_class','economy_type','linkman1_duty','business_type']
@staticmethod @staticmethod
def setup_eager_loading(queryset): def setup_eager_loading(queryset):
""" Perform necessary eager loading of data. """ """ Perform necessary eager loading of data. """
@ -21,4 +21,11 @@ class EnterpriseListSerializer(serializers.ModelSerializer):
return queryset return queryset
def get_cert_type(self, obj): def get_cert_type(self, obj):
return obj.get_cert_type_display() return obj.get_cert_type_display()
class EnterpriseAddressSerializer(serializers.ModelSerializer):
class Meta:
model = EnterpriseAddress
fields = '__all__'

View File

@ -1,9 +1,10 @@
from django.urls import path, include from django.urls import path, include
from .views import EnterpriseViewSet from .views import EnterpriseViewSet,EnterpriseAddressViewSet
from rest_framework import routers from rest_framework import routers
router = routers.DefaultRouter() router = routers.DefaultRouter()
router.register('enterprise', EnterpriseViewSet, basename="enterprise") router.register('enterprise', EnterpriseViewSet, basename="enterprise")
router.register('enterpriseaddress', EnterpriseAddressViewSet, basename="enterpriseaddress")
urlpatterns = [ urlpatterns = [
path('', include(router.urls)) path('', include(router.urls))

View File

@ -1,13 +1,14 @@
from django.shortcuts import render from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet from rest_framework.viewsets import ModelViewSet
from .models import Enterprise from .models import Enterprise,EnterpriseAddress
from utils.queryset import get_child_queryset2 from utils.queryset import get_child_queryset2
from .serializers import EnterpriseSerializer,EnterpriseListSerializer from .serializers import EnterpriseSerializer,EnterpriseListSerializer,EnterpriseAddressSerializer
from apps.system.permission_data import RbacFilterSet from apps.system.permission_data import RbacFilterSet
from apps.system.mixins import CreateUpdateCustomMixin, OptimizationMixin
# Create your views here. # Create your views here.
class EnterpriseViewSet(RbacFilterSet, ModelViewSet): class EnterpriseViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelViewSet):
perms_map = {'get': '*', 'post': 'Enterprise_create', perms_map = {'get': '*', 'post': 'Enterprise_create',
'put': 'Enterprise_update', 'delete': 'Enterprise_delete'} 'put': 'Enterprise_update', 'delete': 'Enterprise_delete'}
queryset = Enterprise.objects queryset = Enterprise.objects
@ -20,9 +21,13 @@ class EnterpriseViewSet(RbacFilterSet, ModelViewSet):
return EnterpriseListSerializer return EnterpriseListSerializer
return EnterpriseSerializer return EnterpriseSerializer
def get_queryset(self):
queryset = self.queryset class EnterpriseAddressViewSet(CreateUpdateCustomMixin, OptimizationMixin, ModelViewSet):
if hasattr(self.get_serializer_class(), 'setup_eager_loading'): perms_map = {'get': '*', 'post': 'enterpriseaddress_create',
queryset = self.get_serializer_class().setup_eager_loading(queryset) # 性能优化 'put': 'enterpriseaddress_update', 'delete': 'enterpriseaddress_delete'}
return queryset queryset = EnterpriseAddress.objects
serializer_class = EnterpriseAddressSerializer
search_fields = ['address']
ordering = ['-create_time']