cert
This commit is contained in:
parent
b160e93cb5
commit
2a317a1806
|
@ -1,7 +1,7 @@
|
|||
import { getToken } from "@/utils/auth"
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function uploadUrl() {
|
||||
export function upUrl() {
|
||||
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
|
||||
*/
|
||||
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',
|
||||
component: Layout,
|
||||
|
@ -71,7 +92,7 @@ export const asyncRoutes = [
|
|||
{
|
||||
path: 'user',
|
||||
name: 'User',
|
||||
component: () => import('@/views/system/user.vue'),
|
||||
component: () => import('@/views/system/user'),
|
||||
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-upload
|
||||
class="avatar-uploader"
|
||||
:action="uploadUrl"
|
||||
:action="upUrl"
|
||||
accept="image/jpeg, image/gif, image/png, image/bmp"
|
||||
:show-file-list="false"
|
||||
:on-success="handleAvatarSuccess"
|
||||
|
@ -193,7 +193,7 @@ import { getOrgAll } from "@/api/org"
|
|||
import { getRoleAll } from "@/api/role"
|
||||
import { genTree } from "@/utils"
|
||||
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 Treeselect from '@riophae/vue-treeselect'
|
||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||
|
@ -210,7 +210,7 @@ export default {
|
|||
return {
|
||||
user: defaultUser,
|
||||
upHeaders: upHeaders(),
|
||||
uploadUrl: uploadUrl(),
|
||||
upUrl: upUrl(),
|
||||
userList: {count:0},
|
||||
roles: [],
|
||||
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):
|
||||
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):
|
||||
|
||||
name = models.CharField('规则名称', max_length=1000)
|
||||
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='implementrule_standards')
|
||||
pv_scope = models.ForeignKey(Dict, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='认证领域', related_name= 'implementrule_pv_scope')
|
||||
standards = models.ManyToManyField(Standard, blank=True, verbose_name='依据标准', related_name='implementrules_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_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')
|
||||
economy_class = models.ManyToManyField(Dict, blank=True, verbose_name='国民经济分类', related_name= 'implementrule_economy_class')
|
||||
|
@ -54,5 +45,16 @@ class ImplementRule(CommonAModel):
|
|||
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 .models import Standard, Unit, ImplementRule
|
||||
from .models import Standard, UnitType, ImplementRule
|
||||
|
||||
|
||||
class StandardSerializer(serializers.ModelSerializer):
|
||||
|
@ -13,7 +13,7 @@ class ImplementRuleSerializer(serializers.ModelSerializer):
|
|||
model = ImplementRule
|
||||
fields = '__all__'
|
||||
|
||||
class UnitSerializer(serializers.ModelSerializer):
|
||||
class UnitTypeSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Unit
|
||||
model = UnitType
|
||||
fields = '__all__'
|
|
@ -1,10 +1,10 @@
|
|||
from django.urls import path, include
|
||||
from .views import StandardViewSet, UnitdViewSet, ImplementRuleViewSet
|
||||
from .views import StandardViewSet, UnitTypedViewSet, ImplementRuleViewSet
|
||||
from rest_framework import routers
|
||||
|
||||
router = routers.DefaultRouter()
|
||||
router.register('standard', StandardViewSet, basename="standard")
|
||||
router.register('unit', UnitdViewSet, basename="unit")
|
||||
router.register('unittype', UnitTypedViewSet, basename="unittype")
|
||||
router.register('implementrule', ImplementRuleViewSet, basename="implementrule")
|
||||
|
||||
urlpatterns = [
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from django.shortcuts import render
|
||||
from rest_framework.viewsets import ModelViewSet
|
||||
from .models import Standard, Unit, ImplementRule
|
||||
from .serializers import StandardSerializer, ImplementRuleSerializer, UnitSerializer
|
||||
from .models import Standard, UnitType, ImplementRule
|
||||
from .serializers import StandardSerializer, ImplementRuleSerializer, UnitTypeSerializer
|
||||
# Create your views here.
|
||||
|
||||
class StandardViewSet(ModelViewSet):
|
||||
|
@ -22,11 +22,11 @@ class ImplementRuleViewSet(ModelViewSet):
|
|||
filterset_fields = ['pv_scope']
|
||||
ordering = ['-create_time']
|
||||
|
||||
class UnitdViewSet(ModelViewSet):
|
||||
perms_map = {'get': '*', 'post': 'unit_create',
|
||||
'put': 'unit_update', 'delete': 'unit_delete'}
|
||||
queryset = Unit.objects
|
||||
serializer_class = UnitSerializer
|
||||
class UnitTypedViewSet(ModelViewSet):
|
||||
perms_map = {'get': '*', 'post': 'unittype_create',
|
||||
'put': 'unittype_update', 'delete': 'unittype_delete'}
|
||||
queryset = UnitType.objects
|
||||
serializer_class = UnitTypeSerializer
|
||||
search_fields = ['name']
|
||||
filterset_fields = ['name']
|
||||
ordering = ['-create_time']
|
||||
|
|
Loading…
Reference in New Issue