cert
This commit is contained in:
parent
b160e93cb5
commit
2a317a1806
|
@ -1,7 +1,7 @@
|
||||||
import { getToken } from "@/utils/auth"
|
import { getToken } from "@/utils/auth"
|
||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
export function uploadUrl() {
|
export function upUrl() {
|
||||||
return process.env.VUE_APP_BASE_API + '/file/'
|
return process.env.VUE_APP_BASE_API + '/file/'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
export function getImplementRuleList(query) {
|
||||||
|
return request({
|
||||||
|
url: '/certset/implementrule/',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createImplementRule(data) {
|
||||||
|
return request({
|
||||||
|
url: '/certset/implementrule/',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function updateImplementRule(id, data) {
|
||||||
|
return request({
|
||||||
|
url: `/certset/implementrule/${id}/`,
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function deleteImplementRule(id) {
|
||||||
|
return request({
|
||||||
|
url: `/certset/implementrule/${id}/`,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
export function getStandardList(query) {
|
||||||
|
return request({
|
||||||
|
url: '/certset/standard/',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createStandard(data) {
|
||||||
|
return request({
|
||||||
|
url: '/certset/standard/',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function updateStandard(id, data) {
|
||||||
|
return request({
|
||||||
|
url: `/certset/standard/${id}/`,
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function deleteStandard(id) {
|
||||||
|
return request({
|
||||||
|
url: `/certset/standard/${id}/`,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
|
@ -61,6 +61,27 @@ export const constantRoutes = [
|
||||||
* the routes that need to be dynamically loaded based on user perms
|
* the routes that need to be dynamically loaded based on user perms
|
||||||
*/
|
*/
|
||||||
export const asyncRoutes = [
|
export const asyncRoutes = [
|
||||||
|
{
|
||||||
|
path: '/certset',
|
||||||
|
component: Layout,
|
||||||
|
redirect: '/certset/implementrule',
|
||||||
|
name: 'certset',
|
||||||
|
meta: { title: '认证配置', icon: 'example'},
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: 'implementrule',
|
||||||
|
name: 'ImplementRule',
|
||||||
|
component: () => import('@/views/implementrule/implementrule'),
|
||||||
|
meta: { title: '认证规则', icon: 'example', perms: ['implementrule_manage'] }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'standard',
|
||||||
|
name: 'Standard',
|
||||||
|
component: () => import('@/views/standard/standard'),
|
||||||
|
meta: { title: '标准库', icon: 'example', perms: ['standard_manage'] }
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: '/system',
|
path: '/system',
|
||||||
component: Layout,
|
component: Layout,
|
||||||
|
@ -71,7 +92,7 @@ export const asyncRoutes = [
|
||||||
{
|
{
|
||||||
path: 'user',
|
path: 'user',
|
||||||
name: 'User',
|
name: 'User',
|
||||||
component: () => import('@/views/system/user.vue'),
|
component: () => import('@/views/system/user'),
|
||||||
meta: { title: '用户管理', icon: 'user', perms: ['user_manage'] }
|
meta: { title: '用户管理', icon: 'user', perms: ['user_manage'] }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,132 @@
|
||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<div>
|
||||||
|
<el-select
|
||||||
|
v-model="listQuery.type"
|
||||||
|
placeholder="文件类型"
|
||||||
|
clearable
|
||||||
|
style="width: 200px"
|
||||||
|
class="filter-item"
|
||||||
|
@change="handleFilter"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in enabledOptions"
|
||||||
|
:key="item.key"
|
||||||
|
:label="item.display_name"
|
||||||
|
:value="item.key"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
<el-input
|
||||||
|
v-model="listQuery.search"
|
||||||
|
placeholder="文件名"
|
||||||
|
style="width: 300px;"
|
||||||
|
class="filter-item"
|
||||||
|
@keyup.enter.native="handleFilter"
|
||||||
|
/>
|
||||||
|
<el-button
|
||||||
|
class="filter-item"
|
||||||
|
type="primary"
|
||||||
|
icon="el-icon-search"
|
||||||
|
@click="handleFilter"
|
||||||
|
>搜索</el-button>
|
||||||
|
<el-button
|
||||||
|
class="filter-item"
|
||||||
|
style="margin-left: 10px;"
|
||||||
|
type="primary"
|
||||||
|
icon="el-icon-refresh-left"
|
||||||
|
@click="resetFilter"
|
||||||
|
>刷新重置</el-button>
|
||||||
|
</div>
|
||||||
|
<el-table
|
||||||
|
v-loading="listLoading"
|
||||||
|
:data="fileList.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 align="center" label="名称">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-link type="primary" :href="scope.row.file" target="_blank">{{ scope.row.name }}</el-link>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="header-center" label="类型">
|
||||||
|
<template slot-scope="scope">{{ scope.row.type }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="header-center" label="格式">
|
||||||
|
<template slot-scope="scope">{{ scope.row.mime }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="header-center" label="大小(B)">
|
||||||
|
<template slot-scope="scope">{{ scope.row.size }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="header-center" label="地址">
|
||||||
|
<template slot-scope="scope">{{ scope.row.path }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="上传日期">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ scope.row.create_time }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination
|
||||||
|
v-show="fileList.count>0"
|
||||||
|
:total="fileList.count"
|
||||||
|
:page.sync="listQuery.page"
|
||||||
|
:limit.sync="listQuery.page_size"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { getFileList } from "@/api/file"
|
||||||
|
import Pagination from "@/components/Pagination"
|
||||||
|
export default {
|
||||||
|
components: { Pagination },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
fileList: {count:0},
|
||||||
|
listLoading: true,
|
||||||
|
listQuery: {
|
||||||
|
page: 1,
|
||||||
|
page_size: 20
|
||||||
|
},
|
||||||
|
enabledOptions: [
|
||||||
|
{ key: "文档", display_name: "文档" },
|
||||||
|
{ key: "图片", display_name: "图片" },
|
||||||
|
{ key: "音频", display_name: "音频" },
|
||||||
|
{ key: "视频", display_name: "视频" },
|
||||||
|
{ key: "其它", display_name: "其它" }
|
||||||
|
],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getList() {
|
||||||
|
this.listLoading = true;
|
||||||
|
getFileList(this.listQuery).then(response => {
|
||||||
|
if (response.data) {
|
||||||
|
this.fileList = response.data
|
||||||
|
}
|
||||||
|
this.listLoading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
resetFilter() {
|
||||||
|
this.listQuery = {
|
||||||
|
page: 1,
|
||||||
|
page_size: 20
|
||||||
|
};
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
handleFilter() {
|
||||||
|
this.listQuery.page = 1;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
|
@ -0,0 +1,215 @@
|
||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<div>
|
||||||
|
<el-select
|
||||||
|
v-model="listQuery.type"
|
||||||
|
placeholder="标准状态"
|
||||||
|
clearable
|
||||||
|
style="width: 200px"
|
||||||
|
class="filter-item"
|
||||||
|
@change="handleFilter"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in statusOptions"
|
||||||
|
:key="item.key"
|
||||||
|
:label="item.display_name"
|
||||||
|
:value="item.key"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
<el-input
|
||||||
|
v-model="listQuery.search"
|
||||||
|
placeholder="编号/名称"
|
||||||
|
style="width: 300px;"
|
||||||
|
class="filter-item"
|
||||||
|
@keyup.enter.native="handleFilter"
|
||||||
|
/>
|
||||||
|
<el-button
|
||||||
|
class="filter-item"
|
||||||
|
type="primary"
|
||||||
|
icon="el-icon-search"
|
||||||
|
@click="handleFilter"
|
||||||
|
>搜索</el-button>
|
||||||
|
<el-button
|
||||||
|
class="filter-item"
|
||||||
|
style="margin-left: 10px;"
|
||||||
|
type="primary"
|
||||||
|
icon="el-icon-refresh-left"
|
||||||
|
@click="resetFilter"
|
||||||
|
>刷新重置</el-button>
|
||||||
|
</div>
|
||||||
|
<div style="margin-top:6px">
|
||||||
|
<el-button type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
|
||||||
|
</div>
|
||||||
|
<el-table
|
||||||
|
v-loading="listLoading"
|
||||||
|
:data="standardList.results"
|
||||||
|
style="width: 100%;margin-top:10px;"
|
||||||
|
border
|
||||||
|
fit
|
||||||
|
stripe
|
||||||
|
highlight-current-row
|
||||||
|
max-height="600"
|
||||||
|
>
|
||||||
|
<el-table-column type="index" width="50" />
|
||||||
|
<el-table-column label="标准编号">
|
||||||
|
<template slot-scope="scope">{{ scope.row.code }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="标准名称">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-link type="primary" :href="scope.row.path" target="_blank" v-if="scope.row.path">{{ scope.row.name }}</el-link>
|
||||||
|
<span v-else>{{ scope.row.name }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="header-center" label="发布日期">
|
||||||
|
<template slot-scope="scope">{{ scope.row.publish_date }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="header-center" label="实施日期">
|
||||||
|
<template slot-scope="scope">{{ scope.row.implement_date }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="header-center" label="状态">
|
||||||
|
<template slot-scope="scope">{{ scope.row.status }}</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<pagination
|
||||||
|
v-show="standardList.count>0"
|
||||||
|
:total="standardList.count"
|
||||||
|
:page.sync="listQuery.page"
|
||||||
|
:limit.sync="listQuery.page_size"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
<el-dialog :visible.sync="dialogVisible" :title="dialogType==='update'?'编辑标准':'新增标准'">
|
||||||
|
<el-form
|
||||||
|
ref="Form"
|
||||||
|
:model="standard"
|
||||||
|
label-width="80px"
|
||||||
|
label-position="right"
|
||||||
|
:rules="rule1"
|
||||||
|
>
|
||||||
|
<el-form-item label="状态" prop="status">
|
||||||
|
<el-select
|
||||||
|
v-model="standard.status"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in statusOptions"
|
||||||
|
:key="item.key"
|
||||||
|
:label="item.display_name"
|
||||||
|
:value="item.key"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="编号" prop="code">
|
||||||
|
<el-input v-model="standard.code" placeholder="编号" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="名称" prop="name">
|
||||||
|
<el-input v-model="standard.name" placeholder="名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="发布日期" prop="publish_date">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="standard.publish_date"
|
||||||
|
type="date"
|
||||||
|
placeholder="选择日期">
|
||||||
|
</el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="实施日期" prop="implement_date">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="standard.implement_date"
|
||||||
|
type="date"
|
||||||
|
placeholder="选择日期">
|
||||||
|
</el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<el-form-item label="文件" prop="path">
|
||||||
|
<el-upload
|
||||||
|
v-if="standard.path"
|
||||||
|
:action="upUrl"
|
||||||
|
:headers="upHeaders"
|
||||||
|
:show-file-list="false"
|
||||||
|
:limit="1"
|
||||||
|
>
|
||||||
|
<el-button size="small" type="primary">点击上传</el-button>
|
||||||
|
</el-upload>
|
||||||
|
</el-form-item>
|
||||||
|
<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 { getStandardList } from "@/api/standard"
|
||||||
|
import { upUrl, upHeaders} from "@/api/file"
|
||||||
|
import Pagination from "@/components/Pagination"
|
||||||
|
const defaultStandard = {
|
||||||
|
id:null,
|
||||||
|
code:null,
|
||||||
|
name:null,
|
||||||
|
publish_date:null,
|
||||||
|
implement_date:null,
|
||||||
|
status:'现行'
|
||||||
|
}
|
||||||
|
export default {
|
||||||
|
components: { Pagination },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
upHeaders: upHeaders(),
|
||||||
|
upUrl: upUrl(),
|
||||||
|
standardList: {count:0},
|
||||||
|
standard:Object.assign({}, defaultStandard),
|
||||||
|
listLoading: true,
|
||||||
|
listQuery: {
|
||||||
|
page: 1,
|
||||||
|
page_size: 20
|
||||||
|
},
|
||||||
|
statusOptions: [
|
||||||
|
{ key: "现行", display_name: "现行" },
|
||||||
|
{ key: "即将实施", display_name: "即将实施" },
|
||||||
|
{ key: "作废", display_name: "作废" },
|
||||||
|
{ key: "废止", display_name: "废止" }
|
||||||
|
],
|
||||||
|
dialogVisible:false,
|
||||||
|
dialogType:'create',
|
||||||
|
rule1:{
|
||||||
|
code: [{ required: true, message: "请输入编号", trigger: "blur" }],
|
||||||
|
name: [{ required: true, message: "请输入姓名", trigger: "blur" }],
|
||||||
|
publish_date: [{ required: true, message: "请输入发布日期", trigger: "change" }],
|
||||||
|
implement_date: [{ required: true, message: "请输入实施日期", trigger: "change" }],
|
||||||
|
status: [{ required: true, message: "请选择状态", trigger: "change" }]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getList() {
|
||||||
|
this.listLoading = true;
|
||||||
|
getStandardList(this.listQuery).then(response => {
|
||||||
|
if (response.data) {
|
||||||
|
this.standardList = response.data
|
||||||
|
}
|
||||||
|
this.listLoading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
resetFilter() {
|
||||||
|
this.listQuery = {
|
||||||
|
page: 1,
|
||||||
|
page_size: 20
|
||||||
|
};
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
handleFilter() {
|
||||||
|
this.listQuery.page = 1;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
handleAdd() {
|
||||||
|
this.standard = Object.assign({}, defaultStandard);
|
||||||
|
this.dialogType = "create";
|
||||||
|
this.dialogVisible = true;
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs["Form"].clearValidate();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
|
@ -143,7 +143,7 @@
|
||||||
<el-form-item label="头像" prop="dept">
|
<el-form-item label="头像" prop="dept">
|
||||||
<el-upload
|
<el-upload
|
||||||
class="avatar-uploader"
|
class="avatar-uploader"
|
||||||
:action="uploadUrl"
|
:action="upUrl"
|
||||||
accept="image/jpeg, image/gif, image/png, image/bmp"
|
accept="image/jpeg, image/gif, image/png, image/bmp"
|
||||||
:show-file-list="false"
|
:show-file-list="false"
|
||||||
:on-success="handleAvatarSuccess"
|
:on-success="handleAvatarSuccess"
|
||||||
|
@ -193,7 +193,7 @@ import { getOrgAll } from "@/api/org"
|
||||||
import { getRoleAll } from "@/api/role"
|
import { getRoleAll } from "@/api/role"
|
||||||
import { genTree } from "@/utils"
|
import { genTree } from "@/utils"
|
||||||
import checkPermission from "@/utils/permission"
|
import checkPermission from "@/utils/permission"
|
||||||
import { uploadUrl, upHeaders } from "@/api/file"
|
import { upUrl, upHeaders } from "@/api/file"
|
||||||
import Pagination from "@/components/Pagination" // secondary package based on el-pagination
|
import Pagination from "@/components/Pagination" // secondary package based on el-pagination
|
||||||
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'
|
||||||
|
@ -210,7 +210,7 @@ export default {
|
||||||
return {
|
return {
|
||||||
user: defaultUser,
|
user: defaultUser,
|
||||||
upHeaders: upHeaders(),
|
upHeaders: upHeaders(),
|
||||||
uploadUrl: uploadUrl(),
|
upUrl: upUrl(),
|
||||||
userList: {count:0},
|
userList: {count:0},
|
||||||
roles: [],
|
roles: [],
|
||||||
listLoading: true,
|
listLoading: true,
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
# Generated by Django 3.0.7 on 2020-06-16 03: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', '0019_auto_20200612_1448'),
|
||||||
|
('certset', '0002_auto_20200615_1707'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='UnitType',
|
||||||
|
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(max_length=1000, verbose_name='单元类型名')),
|
||||||
|
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='unittype_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': '单元类型',
|
||||||
|
'verbose_name_plural': '单元类型',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='implementrule',
|
||||||
|
name='units',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='implementrule',
|
||||||
|
name='ccc_list',
|
||||||
|
field=models.ManyToManyField(blank=True, related_name='implementrule_ccc_list', to='system.Dict', verbose_name='CCC产品认证目录'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='implementrule',
|
||||||
|
name='pv_scope',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='implementrule_pv_scope', to='system.Dict', verbose_name='自愿性产品认证领域'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='implementrule',
|
||||||
|
name='standards',
|
||||||
|
field=models.ManyToManyField(blank=True, related_name='implementrules_standards', to='certset.Standard', verbose_name='依据标准'),
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='Unit',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='unittype',
|
||||||
|
name='implementrule',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='unittype_implementrule', to='certset.ImplementRule', verbose_name='所属规则'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='unittype',
|
||||||
|
name='standard',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='unittype_standard', to='certset.Standard', verbose_name='采用标准'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='unittype',
|
||||||
|
name='update_by',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='unittype_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -24,23 +24,14 @@ class Standard(CommonAModel):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
class Unit(CommonAModel):
|
|
||||||
name = models.CharField('单元名称', max_length=1000)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
verbose_name = '产品单元'
|
|
||||||
verbose_name_plural = verbose_name
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.name
|
|
||||||
|
|
||||||
class ImplementRule(CommonAModel):
|
class ImplementRule(CommonAModel):
|
||||||
|
|
||||||
name = models.CharField('规则名称', max_length=1000)
|
name = models.CharField('规则名称', max_length=1000)
|
||||||
code = models.CharField('编号', max_length=30, unique=True)
|
code = models.CharField('编号', max_length=30, unique=True)
|
||||||
units = models.ManyToManyField(Unit, blank=True, verbose_name='单元划分', related_name='implementrule_units')
|
standards = models.ManyToManyField(Standard, blank=True, verbose_name='依据标准', related_name='implementrules_standards')
|
||||||
standards = models.ManyToManyField(Standard, blank=True, verbose_name='依据标准', related_name='implementrule_standards')
|
ccc_list = models.ManyToManyField(Dict, blank=True, verbose_name='CCC产品认证目录', related_name= 'implementrule_ccc_list')
|
||||||
pv_scope = models.ForeignKey(Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='认证领域', related_name= 'implementrule_pv_scope')
|
pv_scope = models.ForeignKey(Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='自愿性产品认证领域', related_name= 'implementrule_pv_scope')
|
||||||
pv_class = models.ForeignKey(Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='自愿性产品认证产品', related_name= 'implementrule_pv_class')
|
pv_class = models.ForeignKey(Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='自愿性产品认证产品', related_name= 'implementrule_pv_class')
|
||||||
cnas_scope = models.ManyToManyField(Dict, blank=True, verbose_name='CNAS业务范围', related_name= 'implementrule_cnas_scope')
|
cnas_scope = models.ManyToManyField(Dict, blank=True, verbose_name='CNAS业务范围', related_name= 'implementrule_cnas_scope')
|
||||||
economy_class = models.ManyToManyField(Dict, blank=True, verbose_name='国民经济分类', related_name= 'implementrule_economy_class')
|
economy_class = models.ManyToManyField(Dict, blank=True, verbose_name='国民经济分类', related_name= 'implementrule_economy_class')
|
||||||
|
@ -54,5 +45,16 @@ class ImplementRule(CommonAModel):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
|
class UnitType(CommonAModel):
|
||||||
|
name = models.CharField('单元类型名', max_length=1000)
|
||||||
|
standard = models.ForeignKey(Standard, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='采用标准', related_name='unittype_standard')
|
||||||
|
implementrule = models.ForeignKey(ImplementRule, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='所属规则', related_name='unittype_implementrule')
|
||||||
|
description = models.TextField('描述', null=True, blank=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = '单元类型'
|
||||||
|
verbose_name_plural = verbose_name
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from .models import Standard, Unit, ImplementRule
|
from .models import Standard, UnitType, ImplementRule
|
||||||
|
|
||||||
|
|
||||||
class StandardSerializer(serializers.ModelSerializer):
|
class StandardSerializer(serializers.ModelSerializer):
|
||||||
|
@ -13,7 +13,7 @@ class ImplementRuleSerializer(serializers.ModelSerializer):
|
||||||
model = ImplementRule
|
model = ImplementRule
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
class UnitSerializer(serializers.ModelSerializer):
|
class UnitTypeSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Unit
|
model = UnitType
|
||||||
fields = '__all__'
|
fields = '__all__'
|
|
@ -1,10 +1,10 @@
|
||||||
from django.urls import path, include
|
from django.urls import path, include
|
||||||
from .views import StandardViewSet, UnitdViewSet, ImplementRuleViewSet
|
from .views import StandardViewSet, UnitTypedViewSet, ImplementRuleViewSet
|
||||||
from rest_framework import routers
|
from rest_framework import routers
|
||||||
|
|
||||||
router = routers.DefaultRouter()
|
router = routers.DefaultRouter()
|
||||||
router.register('standard', StandardViewSet, basename="standard")
|
router.register('standard', StandardViewSet, basename="standard")
|
||||||
router.register('unit', UnitdViewSet, basename="unit")
|
router.register('unittype', UnitTypedViewSet, basename="unittype")
|
||||||
router.register('implementrule', ImplementRuleViewSet, basename="implementrule")
|
router.register('implementrule', ImplementRuleViewSet, basename="implementrule")
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
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 Standard, Unit, ImplementRule
|
from .models import Standard, UnitType, ImplementRule
|
||||||
from .serializers import StandardSerializer, ImplementRuleSerializer, UnitSerializer
|
from .serializers import StandardSerializer, ImplementRuleSerializer, UnitTypeSerializer
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
|
|
||||||
class StandardViewSet(ModelViewSet):
|
class StandardViewSet(ModelViewSet):
|
||||||
|
@ -22,11 +22,11 @@ class ImplementRuleViewSet(ModelViewSet):
|
||||||
filterset_fields = ['pv_scope']
|
filterset_fields = ['pv_scope']
|
||||||
ordering = ['-create_time']
|
ordering = ['-create_time']
|
||||||
|
|
||||||
class UnitdViewSet(ModelViewSet):
|
class UnitTypedViewSet(ModelViewSet):
|
||||||
perms_map = {'get': '*', 'post': 'unit_create',
|
perms_map = {'get': '*', 'post': 'unittype_create',
|
||||||
'put': 'unit_update', 'delete': 'unit_delete'}
|
'put': 'unittype_update', 'delete': 'unittype_delete'}
|
||||||
queryset = Unit.objects
|
queryset = UnitType.objects
|
||||||
serializer_class = UnitSerializer
|
serializer_class = UnitTypeSerializer
|
||||||
search_fields = ['name']
|
search_fields = ['name']
|
||||||
filterset_fields = ['name']
|
filterset_fields = ['name']
|
||||||
ordering = ['-create_time']
|
ordering = ['-create_time']
|
||||||
|
|
Loading…
Reference in New Issue