This commit is contained in:
shilixia 2021-12-14 17:01:21 +08:00
parent b7004e1a93
commit 73ba89f20f
10 changed files with 348 additions and 59 deletions

View File

@ -143,7 +143,7 @@ export const asyncRoutes = [
component: Layout, component: Layout,
redirect: '/consulting/', redirect: '/consulting/',
name: 'consulting', name: 'consulting',
meta: { title: '咨询资料分享', icon: 'guide', perms: ['regulatory_views'] }, meta: { title: '资讯资料分享', icon: 'guide', perms: ['consulting_views'] },
alwaysShow: true, alwaysShow: true,
children: [ children: [
{ {
@ -160,7 +160,7 @@ export const asyncRoutes = [
path: 'policy', path: 'policy',
name: 'policy', name: 'policy',
component: () => import('@/views/consulting/policy.vue'), component: () => import('@/views/consulting/policy.vue'),
meta: { title: '政策咨询', perms: ['policy_view'] } meta: { title: '政策资讯', perms: ['policy_view'] }
}, { }, {
path: 'validation', path: 'validation',
name: 'validation', name: 'validation',

View File

@ -69,7 +69,7 @@
</el-card> </el-card>
<el-dialog <el-dialog
:visible.sync="dialogVisible" :visible.sync="dialogVisible"
:title="dialogType === 'edit' ? '编辑政策咨询' : '新增政策咨询'" :title="dialogType === 'edit' ? '编辑政策资讯' : '新增政策资讯'"
> >
<el-form <el-form
ref="Form" ref="Form"
@ -101,7 +101,7 @@
:headers="upHeaders" :headers="upHeaders"
:file-list="fileList" :file-list="fileList"
:limit="1" :limit="1"
accept=".doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf" accept=".doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip"
> >
<el-button size="small" type="primary">上传文件</el-button> <el-button size="small" type="primary">上传文件</el-button>
</el-upload> </el-upload>

View File

@ -1,11 +1,13 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card> <el-card>
<el-button
<el-button type="primary" icon="el-icon-plus" @click="handleAddContent" v-if="checkPermission(['professional_create'])" type="primary"
icon="el-icon-plus"
@click="handleAddContent"
v-if="checkPermission(['professional_create'])"
>新增</el-button >新增</el-button
> >
</el-card> </el-card>
<el-card style="margin-top: 10px"> <el-card style="margin-top: 10px">
<el-table <el-table
@ -22,15 +24,23 @@
<template slot-scope="scope">{{ scope.row.name }}</template> <template slot-scope="scope">{{ scope.row.name }}</template>
</el-table-column> </el-table-column>
<el-table-column align="center" label="文件下载"> <el-table-column align="center" label="文件下载">
<template slot-scope="scope" v-if="scope.row.file_.file"> <template slot-scope="scope" v-if="scope.row.file_.file">
<el-link :href="scope.row.file_.file" type="primary">{{ scope.row.file_.name }}</el-link> <el-link :href="scope.row.file_.file" type="primary">{{
scope.row.file_.name
}}</el-link>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="文件描述"> <el-table-column label="文件描述">
<template slot-scope="scope">{{ scope.row.description }}</template> <template slot-scope="scope">{{ scope.row.description }}</template>
</el-table-column> </el-table-column>
<el-table-column label="领域" :filter-method="filterTag" :filters="[{ text: '环保领域', value: 1 }, { text: '建工建材', value: 2 },
{ text: '食品领域', value: 3 }, { text: '水利工程', value: 4 },{ text: '检定校准', value: 5 }, { text: '其他领域', value: 6 }]">
<template slot-scope="scope">{{
options_[scope.row.professionalfield]
}}</template>
</el-table-column>
<el-table-column label="创建时间"> <el-table-column label="创建时间">
<template slot-scope="scope">{{ scope.row.create_time }}</template> <template slot-scope="scope">{{ scope.row.create_time }}</template>
</el-table-column> </el-table-column>
@ -80,7 +90,21 @@
<el-form-item label="名称" prop="name"> <el-form-item label="名称" prop="name">
<el-input v-model="Content.name" placeholder="文档名称" /> <el-input v-model="Content.name" placeholder="文档名称" />
</el-form-item> </el-form-item>
<el-form-item label="领域" prop="professionalfield">
<el-select
style="width: 100%"
v-model="Content.professionalfield"
placeholder="请选择"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="文档描述" prop="description"> <el-form-item label="文档描述" prop="description">
<el-input <el-input
@ -100,12 +124,11 @@
:headers="upHeaders" :headers="upHeaders"
:file-list="fileList" :file-list="fileList"
:limit="1" :limit="1"
accept=".doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf" accept=".doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip"
> >
<el-button size="small" type="primary">上传文件</el-button> <el-button size="small" type="primary">上传文件</el-button>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div style="text-align: right"> <div style="text-align: right">
<el-button type="danger" @click="dialogVisible = false">取消</el-button> <el-button type="danger" @click="dialogVisible = false">取消</el-button>
@ -131,7 +154,7 @@ import { upUrl, upHeaders } from "@/api/file";
const defaultContent = { const defaultContent = {
name: "", name: "",
description: "", description: "",
file:null file: null,
}; };
export default { export default {
components: { Pagination, Treeselect }, components: { Pagination, Treeselect },
@ -141,18 +164,54 @@ export default {
upUrl: upUrl(), upUrl: upUrl(),
fileList: [], fileList: [],
Content: defaultContent, Content: defaultContent,
options_: {
1: "环保领域",
2: "建工建材",
3: "食品领域",
4: "水利工程",
5: "检定校准",
6: "其他领域",
},
options: [
{
value: 1,
label: "环保领域",
},
{
value: 2,
label: "建工建材",
},
{
value: 3,
label: "食品领域",
},
{
value: 4,
label: "水利工程",
},
{
value: 5,
label: "检定校准",
},
{
value: 6,
label: "其他领域",
},
],
dialogVisible: false, dialogVisible: false,
listQuery: { listQuery: {
page: 1, page: 1,
page_size: 20, page_size: 20,
}, },
contentList: { contentList: {
count:0 count: 0,
}, },
dialogType: "new", dialogType: "new",
rule1: { rule1: {
name: [{ required: true, message: "请输入名称", trigger: "blur" }], name: [{ required: true, message: "请输入名称", trigger: "blur" }],
professionalfield: [
{ type: 'array', required: true, message: '请至少选择一个', trigger: 'change' }
],
}, },
}; };
}, },
@ -164,7 +223,6 @@ export default {
}, },
created() { created() {
this.getList(); this.getList();
}, },
methods: { methods: {
handlePreview(file) { handlePreview(file) {
@ -176,7 +234,6 @@ export default {
}, },
handleUpSuccess(res, file, filelist) { handleUpSuccess(res, file, filelist) {
this.Content.file = res.data.id; this.Content.file = res.data.id;
}, },
handleRemove(file, filelist) { handleRemove(file, filelist) {
this.Content.file = null; this.Content.file = null;
@ -188,21 +245,20 @@ export default {
return data.label.indexOf(value) !== -1; return data.label.indexOf(value) !== -1;
}, },
getList() { getList() {
getProfessionalList(this.listQuery).then((response) => { getProfessionalList(this.listQuery).then((response) => {
if (response.data) { if (response.data) {
this.contentList = response.data; this.contentList = response.data;
} }
}); });
}, },
filterTag(value, row) {
return row.professionalfield === value;
},
handleAddContent() { handleAddContent() {
this.Content = Object.assign({}, defaultContent); this.Content = Object.assign({}, defaultContent);
this.dialogType = "new"; this.dialogType = "new";
this.dialogVisible = true; this.dialogVisible = true;
this.fileList=[] this.fileList = [];
this.$nextTick(() => { this.$nextTick(() => {
this.$refs["Form"].clearValidate(); this.$refs["Form"].clearValidate();
}); });
@ -243,7 +299,7 @@ export default {
if (valid) { if (valid) {
const isEdit = this.dialogType === "edit"; const isEdit = this.dialogType === "edit";
if (isEdit) { if (isEdit) {
console.log(this.Content) console.log(this.Content);
updateProfessional(this.Content.id, this.Content).then((res) => { updateProfessional(this.Content.id, this.Content).then((res) => {
if (res.code >= 200) { if (res.code >= 200) {
this.getList(); this.getList();

View File

@ -40,7 +40,7 @@
<template slot-scope="scope">{{ scope.row.name }}</template> <template slot-scope="scope">{{ scope.row.name }}</template>
</el-table-column> </el-table-column>
<el-table-column label="文件类型" :filters="[{ text: '通知', value: 1 }, { text: '结果', value: 2 }]" <el-table-column label="资料分类" :filters="[{ text: '通知', value: 1 }, { text: '结果', value: 2 }]"
:filter-method="filterTag"> :filter-method="filterTag">
<template slot-scope="scope"> <template slot-scope="scope">
{{ type_[scope.row.type] }}</template> {{ type_[scope.row.type] }}</template>
@ -140,7 +140,7 @@
:headers="upHeaders" :headers="upHeaders"
:file-list="fileList" :file-list="fileList"
:limit="1" :limit="1"
accept=".doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf" accept=".doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip"
> >
<el-button size="small" type="primary">上传文件</el-button> <el-button size="small" type="primary">上传文件</el-button>
</el-upload> </el-upload>
@ -162,7 +162,7 @@ import {
updateRegulatory, updateRegulatory,
} from "@/api/consulting"; } from "@/api/consulting";
import { genTree } from "@/utils"; import { genTree } from "@/utils";
import {provinceAndCityData,CodeToText} from "element-china-area-data"; import {provinceAndCityData,CodeToText} from "element-china-area-data";//省份
import checkPermission from "@/utils/permission"; import checkPermission from "@/utils/permission";
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";
@ -193,7 +193,43 @@ export default {
}, },
type_:{1:"通知",2:"结果"}, type_:{1:"通知",2:"结果"},
dialogType: "new", dialogType: "new",
options:provinceAndCityData, options:[
{value: "市场监管总局",label: "市场监管总局"},
{value: "北京市", label: "北京市"},
{value: "上海市",label: "上海市"},
{value: "天津市", label: "天津市"},
{value: "重庆市",label: "重庆市"},
{value: "黑龙江省", label: "黑龙江省"},
{value: "辽宁省",label: "辽宁省"},
{value: "吉林省", label: "吉林省"},
{value: "河北省",label: "河北省"},
{value: "河南省", label: "河南省"},
{value: "湖北省",label: "湖北省"},
{value: "湖南省", label: "湖南省"},
{value: "山东省",label: "山东省"},
{value: "山西省", label: "山西省"},
{value: "陕西省",label: "陕西省"},
{value: "安徽省", label: "安徽省"},
{value: "浙江省",label: "浙江省"},
{value: "江苏省", label: "江苏省"},
{value: "福建省",label: "福建省"},
{value: "广东省", label: "广东省"},
{value: "海南省",label: "海南省"},
{value: "四川省", label: "四川省"},
{value: "云南省",label: "云南省"},
{value: "贵州省", label: "贵州省"},
{value: "青海省",label: "青海省"},
{value: "甘肃省", label: "甘肃省"},
{value: "江西省",label: "江西省"},
{value: "台湾省", label: "台湾省"},
{value: "内蒙古自治区",label: "内蒙古自治区"},
{value: "宁夏回族自治区", label: "宁夏回族自治区"},
{value: "新疆维吾尔自治区",label: "新疆维吾尔自治区"},
{value: "西藏自治区", label: "西藏自治区"},
{value: "广西壮族自治区", label: "广西壮族自治区"},
{value: "香港特别行政区", label: "香港特别行政区"},
{value: "澳门特别行政区", label: "澳门特别行政区"},
],
rule1: { rule1: {
name: [{ required: true, message: "请输入名称", trigger: "blur" }], name: [{ required: true, message: "请输入名称", trigger: "blur" }],
}, },

View File

@ -1,11 +1,29 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card> <el-card>
<el-row :gutter="6">
<el-col :xs="12" :md="2">
<el-button type="primary" icon="el-icon-plus" @click="handleAddContent" v-if="checkPermission(['validation_create'])" <el-button type="primary" icon="el-icon-plus" @click="handleAddContent" v-if="checkPermission(['validation_create'])"
>新增</el-button >新增</el-button
> >
</el-col>
<el-col :xs="12" :md="4">
<el-select
v-model="listQuery.provinces"
placeholder="省份"
@change="handleFilter2"
clearable
style="width: 100%"
>
<el-option
v-for="item in options"
:key="item.label"
:label="item.label"
:value="item.label">
</el-option>
</el-select>
</el-col>
</el-row>
</el-card> </el-card>
<el-card style="margin-top: 10px"> <el-card style="margin-top: 10px">
<el-table <el-table
@ -21,8 +39,22 @@
<el-table-column label="名称"> <el-table-column label="名称">
<template slot-scope="scope">{{ scope.row.name }}</template> <template slot-scope="scope">{{ scope.row.name }}</template>
</el-table-column> </el-table-column>
<el-table-column label="资料分类" :filters="[{ text: '通知', value: 1 }, { text: '结果', value: 2 }]"
:filter-method="filterTag">
<template slot-scope="scope">
{{ type_[scope.row.type] }}</template>
</el-table-column>
<el-table-column label="文件类型" :filters="[{ text: '征集通知', value: 1 }, { text: '结果通报', value: 2 }]"
:filter-method="filterTag1">
<template slot-scope="scope">
{{filetype_[scope.row.filetype] }}</template>
</el-table-column>
<el-table-column label="省份">
<template slot-scope="scope">{{ scope.row.provinces }}</template>
</el-table-column>
<el-table-column align="center" label="文件下载"> <el-table-column align="center" label="文件下载">
<template slot-scope="scope" v-if="scope.row.file_.file"> <template slot-scope="scope" v-if="scope.row.file_.file">
<el-link :href="scope.row.file_.file" type="primary">{{ scope.row.file_.name }}</el-link> <el-link :href="scope.row.file_.file" type="primary">{{ scope.row.file_.name }}</el-link>
@ -81,7 +113,29 @@
<el-input v-model="Content.name" placeholder="文档名称" /> <el-input v-model="Content.name" placeholder="文档名称" />
</el-form-item> </el-form-item>
<el-form-item label="资料分类" prop="type">
<el-radio-group v-model="Content.type">
<el-radio :label="1">通知</el-radio>
<el-radio :label="2">结果</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="文件类型" prop="filetype">
<el-radio-group v-model="Content.filetype">
<el-radio :label="1">征集通知</el-radio>
<el-radio :label="2">结果通报</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="省份" prop="provinces">
<el-select v-model="Content.provinces" filterable placeholder="请选择">
<el-option
v-for="item in options"
:key="item.label"
:label="item.label"
:value="item.label">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="文档描述" prop="description"> <el-form-item label="文档描述" prop="description">
<el-input <el-input
type="textarea" type="textarea"
@ -100,7 +154,7 @@
:headers="upHeaders" :headers="upHeaders"
:file-list="fileList" :file-list="fileList"
:limit="1" :limit="1"
accept=".doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf" accept=".doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip"
> >
<el-button size="small" type="primary">上传文件</el-button> <el-button size="small" type="primary">上传文件</el-button>
</el-upload> </el-upload>
@ -141,7 +195,45 @@ export default {
upUrl: upUrl(), upUrl: upUrl(),
fileList:[], fileList:[],
Content: defaultContent, Content: defaultContent,
type_:{1:"通知",2:"结果"},
filetype_:{1:"征集通知",2:"结果通报"},
options:[
{value: "市场监管总局",label: "市场监管总局"},
{value: "北京市", label: "北京市"},
{value: "上海市",label: "上海市"},
{value: "天津市", label: "天津市"},
{value: "重庆市",label: "重庆市"},
{value: "黑龙江省", label: "黑龙江省"},
{value: "辽宁省",label: "辽宁省"},
{value: "吉林省", label: "吉林省"},
{value: "河北省",label: "河北省"},
{value: "河南省", label: "河南省"},
{value: "湖北省",label: "湖北省"},
{value: "湖南省", label: "湖南省"},
{value: "山东省",label: "山东省"},
{value: "山西省", label: "山西省"},
{value: "陕西省",label: "陕西省"},
{value: "安徽省", label: "安徽省"},
{value: "浙江省",label: "浙江省"},
{value: "江苏省", label: "江苏省"},
{value: "福建省",label: "福建省"},
{value: "广东省", label: "广东省"},
{value: "海南省",label: "海南省"},
{value: "四川省", label: "四川省"},
{value: "云南省",label: "云南省"},
{value: "贵州省", label: "贵州省"},
{value: "青海省",label: "青海省"},
{value: "甘肃省", label: "甘肃省"},
{value: "江西省",label: "江西省"},
{value: "台湾省", label: "台湾省"},
{value: "内蒙古自治区",label: "内蒙古自治区"},
{value: "宁夏回族自治区", label: "宁夏回族自治区"},
{value: "新疆维吾尔自治区",label: "新疆维吾尔自治区"},
{value: "西藏自治区", label: "西藏自治区"},
{value: "广西壮族自治区", label: "广西壮族自治区"},
{value: "香港特别行政区", label: "香港特别行政区"},
{value: "澳门特别行政区", label: "澳门特别行政区"},
],
dialogVisible: false, dialogVisible: false,
listQuery: { listQuery: {
page: 1, page: 1,
@ -167,6 +259,12 @@ export default {
}, },
methods: { methods: {
filterTag(value, row) {
return row.type === value;
},
filterTag1(value, row) {
return row.filetype === value;
},
handlePreview(file) { handlePreview(file) {
if ("url" in file) { if ("url" in file) {
window.open(file.url); window.open(file.url);
@ -197,7 +295,14 @@ export default {
}); });
}, },
handleFilter2() {
this.listQuery.page = 1;
this.getList();
},
handleFilter() {
this.listQuery.page = 1;
this.getList();
},
handleAddContent() { handleAddContent() {
this.Content = Object.assign({}, defaultContent); this.Content = Object.assign({}, defaultContent);
this.dialogType = "new"; this.dialogType = "new";

View File

@ -0,0 +1,18 @@
# Generated by Django 3.0.5 on 2021-12-14 05:20
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('consulting', '0003_policy_validation'),
]
operations = [
migrations.AddField(
model_name='professional',
name='professionalfield',
field=models.CharField(choices=[(1, '环保领域'), (2, '建工建材'), (1, '食品领域'), (2, '水利工程'), (1, '检定校准'), (2, '其他领域')], default=1, max_length=50, verbose_name='领域类别'),
),
]

View File

@ -0,0 +1,32 @@
# Generated by Django 3.0.5 on 2021-12-14 06:08
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('consulting', '0004_professional_professionalfield'),
]
operations = [
migrations.AlterModelOptions(
name='validation',
options={'verbose_name': '能力验证', 'verbose_name_plural': '能力验证'},
),
migrations.AddField(
model_name='validation',
name='filetype',
field=models.CharField(choices=[(1, '征集通知'), (2, '结果通报')], default=1, max_length=50, verbose_name='文件类型'),
),
migrations.AddField(
model_name='validation',
name='provinces',
field=models.CharField(default='', max_length=100, verbose_name='省份'),
),
migrations.AddField(
model_name='validation',
name='type',
field=models.CharField(choices=[(1, '通知'), (2, '结果')], default=1, max_length=50, verbose_name='材料类别'),
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 3.0.5 on 2021-12-14 07:52
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('consulting', '0005_auto_20211214_1408'),
]
operations = [
migrations.AlterField(
model_name='professional',
name='professionalfield',
field=models.CharField(choices=[(1, '环保领域'), (2, '建工建材'), (3, '食品领域'), (4, '水利工程'), (5, '检定校准'), (6, '其他领域')], default=1, max_length=50, verbose_name='领域类别'),
),
]

View File

@ -20,8 +20,18 @@ class Regulatory(CommonAModel):
verbose_name_plural = verbose_name verbose_name_plural = verbose_name
class Professional(CommonAModel): class Professional(CommonAModel):
field_choices = (
(1, '环保领域'),
(2, '建工建材'),
(3, '食品领域'),
(4, '水利工程'),
(5, '检定校准'),
(6, '其他领域'),
)
name = models.CharField('名称', max_length=100) name = models.CharField('名称', max_length=100)
description = models.TextField('描述', default="", blank=True) description = models.TextField('描述', default="", blank=True)
professionalfield = models.CharField('领域类别', max_length=50,choices=field_choices, default=1)
file = models.ForeignKey(File, on_delete=models.CASCADE) file = models.ForeignKey(File, on_delete=models.CASCADE)
class Meta: class Meta:
@ -37,11 +47,22 @@ class Policy(CommonAModel):
verbose_name = '政策咨询' verbose_name = '政策咨询'
verbose_name_plural = verbose_name verbose_name_plural = verbose_name
class Validation(CommonAModel): class Validation(CommonAModel):
type_choices = (
(1, '通知'),
(2, '结果')
)
filetype_choices = (
(1, '征集通知'),
(2, '结果通报')
)
name = models.CharField('名称', max_length=100) name = models.CharField('名称', max_length=100)
description = models.TextField('描述', default="", blank=True) description = models.TextField('描述', default="", blank=True)
file = models.ForeignKey(File, on_delete=models.CASCADE) file = models.ForeignKey(File, on_delete=models.CASCADE)
provinces=models.CharField('省份', max_length=100, default="",)
type = models.CharField('材料类别', max_length=50,
choices=type_choices, default=1)
filetype=models.CharField('文件类型', max_length=50,
choices=filetype_choices, default=1)
class Meta: class Meta:
verbose_name = '政策咨询' verbose_name = '能力验证'
verbose_name_plural = verbose_name verbose_name_plural = verbose_name

View File

@ -49,3 +49,6 @@ class ValidationViewSet(OptimizationMixin, PageOrNot, CreateUpdateModelAMixin, M
queryset = Validation.objects.all() queryset = Validation.objects.all()
serializer_class = ValidationSerializer serializer_class = ValidationSerializer
ordering = ['-id'] ordering = ['-id']
search_fields = ['provinces']
ordering_fields = ['provinces']
filterset_fields = ['provinces']