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

View File

@ -69,7 +69,7 @@
</el-card>
<el-dialog
:visible.sync="dialogVisible"
:title="dialogType === 'edit' ? '编辑政策咨询' : '新增政策咨询'"
:title="dialogType === 'edit' ? '编辑政策资讯' : '新增政策资讯'"
>
<el-form
ref="Form"
@ -101,7 +101,7 @@
:headers="upHeaders"
:file-list="fileList"
: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-upload>

View File

@ -1,11 +1,13 @@
<template>
<div class="app-container">
<el-card>
<el-button type="primary" icon="el-icon-plus" @click="handleAddContent" v-if="checkPermission(['professional_create'])"
<el-button
type="primary"
icon="el-icon-plus"
@click="handleAddContent"
v-if="checkPermission(['professional_create'])"
>新增</el-button
>
</el-card>
<el-card style="margin-top: 10px">
<el-table
@ -22,15 +24,23 @@
<template slot-scope="scope">{{ scope.row.name }}</template>
</el-table-column>
<el-table-column align="center" label="文件下载">
<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>
</el-table-column>
<el-table-column label="文件描述">
<template slot-scope="scope">{{ scope.row.description }}</template>
</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="创建时间">
<template slot-scope="scope">{{ scope.row.create_time }}</template>
</el-table-column>
@ -80,7 +90,21 @@
<el-form-item label="名称" prop="name">
<el-input v-model="Content.name" placeholder="文档名称" />
</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-input
@ -100,12 +124,11 @@
:headers="upHeaders"
:file-list="fileList"
: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-upload>
</el-form-item>
</el-form>
<div style="text-align: right">
<el-button type="danger" @click="dialogVisible = false">取消</el-button>
@ -131,7 +154,7 @@ import { upUrl, upHeaders } from "@/api/file";
const defaultContent = {
name: "",
description: "",
file:null
file: null,
};
export default {
components: { Pagination, Treeselect },
@ -141,18 +164,54 @@ export default {
upUrl: upUrl(),
fileList: [],
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,
listQuery: {
page: 1,
page_size: 20,
},
contentList: {
count:0
count: 0,
},
dialogType: "new",
rule1: {
name: [{ required: true, message: "请输入名称", trigger: "blur" }],
professionalfield: [
{ type: 'array', required: true, message: '请至少选择一个', trigger: 'change' }
],
},
};
},
@ -164,7 +223,6 @@ export default {
},
created() {
this.getList();
},
methods: {
handlePreview(file) {
@ -176,7 +234,6 @@ export default {
},
handleUpSuccess(res, file, filelist) {
this.Content.file = res.data.id;
},
handleRemove(file, filelist) {
this.Content.file = null;
@ -188,21 +245,20 @@ export default {
return data.label.indexOf(value) !== -1;
},
getList() {
getProfessionalList(this.listQuery).then((response) => {
if (response.data) {
this.contentList = response.data;
}
});
},
filterTag(value, row) {
return row.professionalfield === value;
},
handleAddContent() {
this.Content = Object.assign({}, defaultContent);
this.dialogType = "new";
this.dialogVisible = true;
this.fileList=[]
this.fileList = [];
this.$nextTick(() => {
this.$refs["Form"].clearValidate();
});
@ -243,7 +299,7 @@ export default {
if (valid) {
const isEdit = this.dialogType === "edit";
if (isEdit) {
console.log(this.Content)
console.log(this.Content);
updateProfessional(this.Content.id, this.Content).then((res) => {
if (res.code >= 200) {
this.getList();

View File

@ -40,7 +40,7 @@
<template slot-scope="scope">{{ scope.row.name }}</template>
</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">
<template slot-scope="scope">
{{ type_[scope.row.type] }}</template>
@ -140,7 +140,7 @@
:headers="upHeaders"
:file-list="fileList"
: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-upload>
@ -162,7 +162,7 @@ import {
updateRegulatory,
} from "@/api/consulting";
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 Pagination from "@/components/Pagination"; // secondary package based on el-pagination
import Treeselect from "@riophae/vue-treeselect";
@ -193,7 +193,43 @@ export default {
},
type_:{1:"通知",2:"结果"},
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: {
name: [{ required: true, message: "请输入名称", trigger: "blur" }],
},

View File

@ -1,11 +1,29 @@
<template>
<div class="app-container">
<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
>
</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 style="margin-top: 10px">
<el-table
@ -21,8 +39,22 @@
<el-table-column label="名称">
<template slot-scope="scope">{{ scope.row.name }}</template>
</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="文件下载">
<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>
@ -81,7 +113,29 @@
<el-input v-model="Content.name" placeholder="文档名称" />
</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-input
type="textarea"
@ -100,7 +154,7 @@
:headers="upHeaders"
:file-list="fileList"
: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-upload>
@ -141,7 +195,45 @@ export default {
upUrl: upUrl(),
fileList:[],
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,
listQuery: {
page: 1,
@ -167,6 +259,12 @@ export default {
},
methods: {
filterTag(value, row) {
return row.type === value;
},
filterTag1(value, row) {
return row.filetype === value;
},
handlePreview(file) {
if ("url" in file) {
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() {
this.Content = Object.assign({}, defaultContent);
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
class Professional(CommonAModel):
field_choices = (
(1, '环保领域'),
(2, '建工建材'),
(3, '食品领域'),
(4, '水利工程'),
(5, '检定校准'),
(6, '其他领域'),
)
name = models.CharField('名称', max_length=100)
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)
class Meta:
@ -37,11 +47,22 @@ class Policy(CommonAModel):
verbose_name = '政策咨询'
verbose_name_plural = verbose_name
class Validation(CommonAModel):
type_choices = (
(1, '通知'),
(2, '结果')
)
filetype_choices = (
(1, '征集通知'),
(2, '结果通报')
)
name = models.CharField('名称', max_length=100)
description = models.TextField('描述', default="", blank=True)
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:
verbose_name = '政策咨询'
verbose_name = '能力验证'
verbose_name_plural = verbose_name

View File

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