Browse Source

v0.2 文章管理

master
DESKTOP-00SUCB6\Administrator 5 years ago
parent
commit
17f1943be3
  1. 15
      public/config.js
  2. 107
      src/api/company.js
  3. 71
      src/api/notice.js
  4. 5
      src/api/public.js
  5. 2
      src/main.ts
  6. 34
      src/utils/request.js
  7. 31
      src/views/layout/components/Sidebar/index.vue
  8. 16
      src/views/systemManage/company/company.vue
  9. 127
      src/views/systemManage/company/companyDetail.vue
  10. 98
      src/views/systemManage/notice/notice.vue
  11. 227
      src/views/systemManage/notice/noticeDetail.vue

15
public/config.js

@ -1,6 +1,13 @@
config = { // config = {
API_URL: 'http://www.fatoaniic.com/api', // API_URL: 'http://www.fatoaniic.com/api',
UPLOAD_URL: "http://www.fatoaniic.com/api/api-ftp/ftp/upload", // UPLOAD_URL: "http://www.fatoaniic.com/api/api-ftp/ftp/upload",
DOWNLOAD_URL: "http://www.fatoaniic.com/api/api-ftp/ftp/download?filename=", // DOWNLOAD_URL: "http://www.fatoaniic.com/api/api-ftp/ftp/download?filename=",
// SHOW_URL: "http://www.fatoaniic.com/ftpfile/",
// }
config = {
API_URL: 'http://172.119.51.18:8082',
UPLOAD_URL: "http://172.119.51.18:8082/attachment/uploadOne",
DOWNLOAD_URL: "http://172.119.51.18:8082/api-ftp/ftp/download?filename=",
SHOW_URL: "http://www.fatoaniic.com/ftpfile/", SHOW_URL: "http://www.fatoaniic.com/ftpfile/",
} }

107
src/api/company.js

@ -1,48 +1,74 @@
import request from '@/utils/request'; import request from '@/utils/request';
import requestLoading from '@/utils/requestLoading';
//获取企业列表 //获取企业列表
export function getEnterpriseList(params) { export function getEnterpriseList(params) {
return requestLoading({ return request({
url: '/api-enterprise/enterprise/enterprises', url: '/company/search',
method: 'get', method: 'post',
params data:params
});
}
//删除企业
export function deleteEnterprise(params) {
return request({
url: '/company/delete',
method: 'post',
data:params
}); });
} }
//获取企业详情 //获取企业详情
export function getEnterpriseDetails(params) { export function getEnterpriseDetails(params) {
return requestLoading({ return request({
url: '/api-enterprise/enterprise/selectById', url: '/company/get/'+params,
method: 'get', method: 'get'
params });
}
//修改企业信息
export function editEnterprise(params) {
return request({
url: '/company/edit',
method: 'post',
data:params
}); });
} }
//添加企业 //添加企业
export function addEnterprise(params) { export function addEnterprise(params) {
return requestLoading({ return request({
url: '/api-enterprise/enterprise/enterprises', url: '/company/add',
method: 'post', method: 'post',
data:params data:params
}); });
} }
//删除企业 //区域查询接口
export function deleteEnterprise(params) { export function getArea(params) {
return requestLoading({ return request({
url: '/api-enterprise/enterprise/enterprises', url: '/common/getComboList_2/40010/'+params,
method: 'delete', method: 'get'
params
}); });
} }
//修改企业信息 //行业大类查询接口
export function editEnterprise(params) { export function getBigIndustryList() {
return requestLoading({ return request({
url: '/api-enterprise/enterprise/enterprises', url: '/common/getComboList_1/40008',
method: 'put', method: 'get'
data:params
}); });
} }
//行业小类查询接口
export function getSmallIndustryList(params) {
return request({
url: '/common/getComboList_2/40009/'+params,
method: 'get'
});
}
//启 //启
export function enableEnterprise(params) { export function enableEnterprise(params) {
return requestLoading({ return request({
url: '/api-enterprise/enterprise/enable', url: '/api-enterprise/enterprise/enable',
method: 'put', method: 'put',
data:params data:params
@ -50,40 +76,17 @@ export function enableEnterprise(params) {
} }
//停 //停
export function disableEnterprise(params) { export function disableEnterprise(params) {
return requestLoading({ return request({
url: '/api-enterprise/enterprise/disable', url: '/api-enterprise/enterprise/disable',
method: 'put', method: 'put',
data:params data:params
}); });
} }
//行业大类查询接口
export function getBigIndustryList(params) {
return requestLoading({
url: '/api-enterprise/industry/bigIndustry',
method: 'get',
params
});
}
//行业小类查询接口
export function getSmallIndustryList(params) {
return requestLoading({
url: '/api-enterprise/industry/smallIndustry',
method: 'get',
params
});
}
//区域查询接口
export function getArea(params) {
return requestLoading({
url: '/api-enterprise/area/getArea',
method: 'get',
params
});
}
//审核 //审核
export function approveEnterprise(params) { export function approveEnterprise(params) {
return requestLoading({ return request({
url: '/api-enterprise/enApply/approve', url: '/api-enterprise/enApply/approve',
method: 'put', method: 'put',
data:params data:params
@ -91,7 +94,7 @@ export function approveEnterprise(params) {
} }
//企业审核列表 //企业审核列表
export function enApplyList(params) { export function enApplyList(params) {
return requestLoading({ return request({
url: '/api-enterprise/enApply/page', url: '/api-enterprise/enApply/page',
method: 'get', method: 'get',
params params
@ -99,7 +102,7 @@ export function enApplyList(params) {
} }
//公司审核页面的详情 //公司审核页面的详情
export function enApplyDetail(params) { export function enApplyDetail(params) {
return requestLoading({ return request({
url: '/api-enterprise/enApply/detail', url: '/api-enterprise/enApply/detail',
method: 'get', method: 'get',
params params

71
src/api/notice.js

@ -1,53 +1,54 @@
import request from '@/utils/request'; import request from '@/utils/request';
import requestLoading from '@/utils/requestLoading'; import requestLoading from '@/utils/requestLoading';
//获取文章类型下拉列表
//获取公告列表 export function getNoticeTypeList(params) {
export function getNoticeList(params) { return request({
return requestLoading({ url: '/common/getComboList_1/40005',
url: '/api-login/ann/announcements',
method: 'get',
params
});
}
//获取公告详情
export function getNoticeInfo(params) {
return requestLoading({
url: '/api-login/ann/announcement',
method: 'get', method: 'get',
params params
}); });
} }
//获取文章列表
//更新公告详情 export function getNoticeList(params) {
export function editNoticeInfo(params) { return request({
return requestLoading({ url: '/content/search',
url: '/api-login/ann/announcement', method: 'post',
method: 'put',
data:params data:params
}); });
} }
//添加公告 //添加文章
export function addNoticeInfo(params) { export function addNoticeInfo(params) {
return requestLoading({ return request({
url: '/api-login/ann/announcement', url: '/content/add',
method: 'post', method: 'post',
data:params data:params
}); });
} }
//删除公告
export function deleteNoticeInfo(params) {
return requestLoading({
url: '/api-login/ann/announcement',
method: 'delete',
params //获取文章详情
export function getNoticeInfo(params) {
return request({
url: '/content/get/'+params,
method: 'get'
}); });
} }
//更新文章详情
//获取接收人列表 export function editNoticeInfo(params) {
export function identitytypeList(params) { return request({
return requestLoading({ url: '/content/edit',
url: '/api-login/ann/identitytype', method: 'post',
method: 'get', data:params
params });
}
//删除文章
export function deleteNoticeInfo(params) {
return request({
url: '/content/delete',
method: 'post',
data:params
}); });
} }

5
src/api/public.js

@ -0,0 +1,5 @@
import request from '@/utils/request';

2
src/main.ts

@ -14,7 +14,7 @@ import '@/icons' // icon
import echarts from 'echarts' //echarts import echarts from 'echarts' //echarts
import scroll from 'vue-seamless-scroll' //滚动插件 import scroll from 'vue-seamless-scroll' //滚动插件
import md5 from 'js-md5'; //md5 加密 import md5 from 'js-md5'; //md5 加密
import '@/permission' // 权限控制 // import '@/permission' // 权限控制
//判断浏览器,如果是IE11以下则不加载‘vue-quill-editor 富文本编辑器’并提示浏览器版本过低 //判断浏览器,如果是IE11以下则不加载‘vue-quill-editor 富文本编辑器’并提示浏览器版本过低
let userAgent = window.navigator.userAgent; let userAgent = window.navigator.userAgent;

34
src/utils/request.js

@ -23,24 +23,24 @@ service.interceptors.request.use((config) => {
if (store.getters.token &&  !config.isLogin) { if (store.getters.token &&  !config.isLogin) {
config.headers['token'] = getToken() config.headers['token'] = getToken()
} }
config.headers['token'] = '800580795f01449f9100c4d2983d13c9'
if (config.method == 'post' || config.method == 'put') { if (config.method == 'post' || config.method == 'put') {
// 校验发送的请求是否包含敏感字符 // 校验发送的请求是否包含敏感字符
//----------------start----------------------------- //----------------start-----------------------------
let sData = '' // let sData = ''
for (const i in config.data) { // for (const i in config.data) {
if (config.data.hasOwnProperty(i)) { // if (config.data.hasOwnProperty(i)) {
const item = config.data[i]; // const item = config.data[i];
sData += item + "," // sData += item + ","
} // }
} // }
store.getters.keys.forEach(item => { // store.getters.keys.forEach(item => {
if (sData.indexOf(item) != -1) { // if (sData.indexOf(item) != -1) {
isKey = true // isKey = true
} // }
}); // });
//----------------End--------------------------------- //----------------End---------------------------------
config.data = qs.stringify(config.data) // config.data = qs.stringify(config.data)
// qs.stringify(config.params, { indices: false }) // qs.stringify(config.params, { indices: false })
} else if (config.method == 'get') { } else if (config.method == 'get') {
config.paramsSerializer = params => { config.paramsSerializer = params => {
@ -73,10 +73,10 @@ service.interceptors.response.use(
*/ */
const res = response.data const res = response.data
// const res = JSON.parse(response.data) // const res = JSON.parse(response.data)
if (res.code !== 200) { if (res.status !== 200) {
// 511:失效的token;弹出弹框,返回登录页 // 511:失效的token;弹出弹框,返回登录页
if (res.code === 511) { if (res.status === 511) {
if (isToken) { if (isToken) {
isToken = false //防止下个一个token失效的请求在弹出第二个框 isToken = false //防止下个一个token失效的请求在弹出第二个框
MessageBox.alert('你已被登出,请重新登录', '确定登出', { MessageBox.alert('你已被登出,请重新登录', '确定登出', {
@ -94,7 +94,7 @@ service.interceptors.response.use(
} else { } else {
//接口失败统一报错 //接口失败统一报错
Message({ Message({
message: res.msg, message: res.message,
type: 'error', type: 'error',
duration: 5 * 1000 duration: 5 * 1000
}) })

31
src/views/layout/components/Sidebar/index.vue

@ -40,26 +40,31 @@
data(){ data(){
return { return {
routes:[ routes:[
// {
// path: 'menu',
// name: 'menuManage',
// meta: {title: '', icon: 'table', noCache: true},
// },
{ {
path: 'menu', path: 'company',
name: 'menuManage', name: 'companyManage',
meta: {title: '菜单管理', icon: 'table', noCache: true}, meta: {title: '公司管理', icon: 'dashboard', noCache: true},
}, },
{ {
path: 'user', path: 'user',
name: 'userManage', name: 'userManage',
meta: {title: '用户管理', icon: 'dashboard', noCache: true}, meta: {title: '用户管理', icon: 'dashboard', noCache: true},
}, },
{ // {
path: 'role', // path: 'role',
name: 'roleManage', // name: 'roleManage',
meta: {title: '角色管理', icon: 'eye', noCache: true}, // meta: {title: '', icon: 'eye', noCache: true},
}, // },
{ // {
path: 'permission', // path: 'permission',
name: 'permissionManage', // name: 'permissionManage',
meta: {title: '权限管理', icon: 'form', noCache: true}, // meta: {title: '', icon: 'form', noCache: true},
}, // },
{ {
path: 'notice', path: 'notice',
name: 'noticeManage', name: 'noticeManage',

16
src/views/systemManage/company/company.vue

@ -10,6 +10,7 @@
</el-form-item> </el-form-item>
<el-form-item class="float-right"> <el-form-item class="float-right">
<el-button type="danger" size="mini" icon="el-icon-refresh" @click="search">刷新</el-button> <el-button type="danger" size="mini" icon="el-icon-refresh" @click="search">刷新</el-button>
<el-button type="danger" size="mini" icon="el-icon-circle-plus-outline" @click="addComany">新增</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -128,12 +129,6 @@ export default {
}, },
mounted() { mounted() {
this.initData() this.initData()
//
/*if (this.identityId == '1' || this.identityId == '4') {
this.initData()
} else {
this.$router.push({name: "companyDetail"})
}*/
}, },
methods: { methods: {
// //
@ -144,9 +139,12 @@ export default {
// //
initData() { initData() {
const params = { const params = {
page: this.currentPage, pageNum: this.currentPage,
size: this.pageSize, pageSize: this.pageSize,
name: this.formSearch.name.trim(), search:{
name: this.formSearch.name.trim()
},
sort:''
} }
getEnterpriseList(params).then(res => { getEnterpriseList(params).then(res => {
if (res.data) { if (res.data) {

127
src/views/systemManage/company/companyDetail.vue

@ -29,13 +29,12 @@
<el-option label="护照" :value="6"></el-option> <el-option label="护照" :value="6"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="法人证件号码:" :label-width="formLabelWidth" prop="enCeNumber">
<el-input v-model="formData.enCeNumber" autocomplete="off"></el-input>
</el-form-item>
</el-col> </el-col>
<el-col :span="2" style="height:1px;"></el-col> <el-col :span="2" style="height:1px;"></el-col>
<el-col :span="11" style="padding-right:30px;"> <el-col :span="11" style="padding-right:30px;">
<el-form-item label="二级前缀:" :label-width="formLabelWidth" prop="enTwoPrefix">
<!-- <el-input v-model="formData.enTwoPrefix" autocomplete="off" :disabled="!isApply"></el-input> -->
<span>{{ formData.enTwoPrefix }}</span>
</el-form-item>
<el-form-item label="所属行业:" :label-width="formLabelWidth" prop="inBigId"> <el-form-item label="所属行业:" :label-width="formLabelWidth" prop="inBigId">
<!-- 行业大类的下拉菜单 --> <!-- 行业大类的下拉菜单 -->
<el-select <el-select
@ -48,7 +47,7 @@
v-for="(item,index) in bigIndustryType" v-for="(item,index) in bigIndustryType"
:key="index" :key="index"
:label="item.name" :label="item.name"
:value="item.id" :value="item.value"
></el-option> ></el-option>
</el-select> </el-select>
<!-- 行业小类的下拉菜单 --> <!-- 行业小类的下拉菜单 -->
@ -61,15 +60,37 @@
v-for="(item,index) in smallIndustryType" v-for="(item,index) in smallIndustryType"
:key="index" :key="index"
:label="item.name" :label="item.name"
:value="item.id" :value="item.value"
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="法人姓名:" :label-width="formLabelWidth" prop="enLegalName"> <el-form-item label="法人姓名:" :label-width="formLabelWidth" prop="enLegalName">
<el-input v-model="formData.enLegalName" autocomplete="off"></el-input> <el-input v-model="formData.enLegalName" autocomplete="off"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="法人证件号码:" :label-width="formLabelWidth" prop="enCeNumber"> <el-form-item label="法人证件:" :label-width="formLabelWidth" prop="enCeAddressZ">
<el-input v-model="formData.enCeNumber" autocomplete="off"></el-input> <div class="flex-box">
<el-upload
class="avatar-uploader flex-1"
:action="upload_file"
:show-file-list="false"
:on-success="handlePhotoSuccess"
:before-upload="beforeAvatarUpload"
>
<img v-if="photoUrl" :src="photoUrl" class="avatar"/>
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
<el-upload
class="avatar-uploader flex-1"
:action="upload_file"
:show-file-list="false"
:on-success="handleReverseSuccess"
:before-upload="beforeAvatarUpload"
>
<img v-if="reversePhotoUrl" :src="reversePhotoUrl" class="avatar"/>
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</div>
<el-form-item label-width="150px" prop="enCeAddressF"></el-form-item>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -95,7 +116,7 @@
v-for="(item,index) in provinces" v-for="(item,index) in provinces"
:key="index" :key="index"
:label="item.name" :label="item.name"
:value="item.id" :value="item.value"
></el-option> ></el-option>
</el-select> </el-select>
<el-select <el-select
@ -108,7 +129,7 @@
v-for="(item,index) in citys" v-for="(item,index) in citys"
:key="index" :key="index"
:label="item.name" :label="item.name"
:value="item.id" :value="item.value"
></el-option> ></el-option>
</el-select> </el-select>
<el-select v-model="formData.areaId" placeholder="区" style="width:calc(33.3% - 7px);"> <el-select v-model="formData.areaId" placeholder="区" style="width:calc(33.3% - 7px);">
@ -116,42 +137,21 @@
v-for="(item,index) in areas" v-for="(item,index) in areas"
:key="index" :key="index"
:label="item.name" :label="item.name"
:value="item.id" :value="item.value"
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="官方网址:" :label-width="formLabelWidth" prop="enOffWeb"> <el-form-item label="官方网址:" :label-width="formLabelWidth" prop="enOffWeb">
<el-input v-model="formData.enOffWeb" autocomplete="off"></el-input> <el-input v-model="formData.enOffWeb" autocomplete="off"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="法人证件:" :label-width="formLabelWidth" prop="enCeAddressZ">
<div class="flex-box">
<el-upload
class="avatar-uploader flex-1"
:action="upload_file"
:show-file-list="false"
:on-success="handlePhotoSuccess"
:before-upload="beforeAvatarUpload"
>
<img v-if="photoUrl" :src="photoUrl" class="avatar"/>
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
<el-upload
class="avatar-uploader flex-1"
:action="upload_file"
:show-file-list="false"
:on-success="handleReverseSuccess"
:before-upload="beforeAvatarUpload"
>
<img v-if="reversePhotoUrl" :src="reversePhotoUrl" class="avatar"/>
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</div>
<el-form-item label-width="150px" prop="enCeAddressF"></el-form-item>
</el-form-item>
<el-form-item label="联系人姓名:" :label-width="formLabelWidth" prop="conName"> <el-form-item label="联系人姓名:" :label-width="formLabelWidth" prop="conName">
<el-input v-model="formData.conName" autocomplete="off"></el-input> <el-input v-model="formData.conName" autocomplete="off"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="联系人电话:" :label-width="formLabelWidth" prop="telPhone">
<el-input v-model="formData.telPhone" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="联系人邮箱:" :label-width="formLabelWidth" prop="email"> <el-form-item label="联系人邮箱:" :label-width="formLabelWidth" prop="email">
<el-input v-model="formData.email" autocomplete="off"></el-input> <el-input v-model="formData.email" autocomplete="off"></el-input>
</el-form-item> </el-form-item>
@ -175,12 +175,6 @@
</el-upload> </el-upload>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="联系人电话:" :label-width="formLabelWidth" prop="telPhone">
<el-input v-model="formData.telPhone" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="企业前缀:" :label-width="formLabelWidth" prop="enOnePrefix">
<el-input v-model="formData.enOnePrefix" autocomplete="off" :disabled="!isApply"></el-input>
</el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<div class="form-footer"> <div class="form-footer">
@ -189,7 +183,6 @@
type="info" type="info"
size="mini" size="mini"
@click="resetForm('companyForm')" @click="resetForm('companyForm')"
v-if="identityId != '3'"
>返回 >返回
</el-button> </el-button>
</div> </div>
@ -259,15 +252,6 @@ export default {
}; };
// //
const checkURL = (rule, value, callback) => { const checkURL = (rule, value, callback) => {
// if (!value) {
// return callback(new Error(""));
// } else {
// if (!validateURL(value)) {
// return callback(new Error(""));
// } else {
// callback();
// }
// }
if (value && !validateURL(value)) { if (value && !validateURL(value)) {
return callback(new Error("请输入正确格式的网址")); return callback(new Error("请输入正确格式的网址"));
} else { } else {
@ -300,9 +284,7 @@ export default {
}; };
return { return {
upload_file: config.UPLOAD_URL, // upload_file: config.UPLOAD_URL, //
identityId: this.$store.getters.identity || "", //
param: this.$route.query.name ? this.$route.query : "", // param: this.$route.query.name ? this.$route.query : "", //
isApply: this.$route.query.apply || false, //
formLabelWidth: "180px", //formlable formLabelWidth: "180px", //formlable
photoUrl: "", // photoUrl: "", //
reversePhotoUrl: "", // reversePhotoUrl: "", //
@ -317,8 +299,6 @@ export default {
//form //form
code: "", // code: "", //
name: "", // name: "", //
enOnePrefix: "", //()
enTwoPrefix: "86.121", //
typeId: "", //id typeId: "", //id
inBigId: "", //id inBigId: "", //id
inSmallId: "", //id inSmallId: "", //id
@ -393,26 +373,11 @@ export default {
smallIndustryType: [] // smallIndustryType: [] //
}; };
}, },
created() {
//
if (this.isApply) {
this.rules.enOnePrefix = [
{required: true, message: "请输入一级(公司)前缀", trigger: "blur"}
];
// this.rules.enTwoPrefix = [
// { required: true, message: "", trigger: "blur" }
// ];
}
},
mounted() { mounted() {
// //
if (this.identityId == "3") { if (this.isEdit) {
this.getEnterpriseInfo(); this.getEnterpriseInfo();
} }
//
if (this.param.name) {
this.formateData(this.param);
}
this.initData(); this.initData();
}, },
methods: { methods: {
@ -426,7 +391,7 @@ export default {
}, },
// //
changeArea(pid, type, clean) { changeArea(pid, type, clean) {
getArea({pid: pid}).then(res => { getArea(pid).then(res => {
if (type == 0) { if (type == 0) {
this.provinces = res.data; this.provinces = res.data;
} else if (type == 1) { } else if (type == 1) {
@ -468,7 +433,7 @@ export default {
if (clean) { if (clean) {
this.formData.inSmallId = ""; this.formData.inSmallId = "";
} }
getSmallIndustryList({pid: this.formData.inBigId}).then(res => { getSmallIndustryList(this.formData.inBigId).then(res => {
this.smallIndustryType = res.data; this.smallIndustryType = res.data;
}); });
}, },
@ -517,23 +482,11 @@ export default {
this.$router.go(-1); this.$router.go(-1);
}); });
}, },
//
applyPrefixInfo() {
applyPrefix(this.formData).then(res => {
this.$message({
message: res.msg,
type: res.code == 200 ? "success" : "error"
});
this.$router.go(-1);
});
},
//form //form
submitForm(formName) { submitForm(formName) {
this.$refs[formName].validate(valid => { this.$refs[formName].validate(valid => {
if (valid) { if (valid) {
if (this.isApply) { // if (!this.isEdit) { //
this.applyPrefixInfo();
} else if (!this.isEdit) { //
this.addEnterpriseInfo(); this.addEnterpriseInfo();
} else { // } else { //
this.editEnterpriseInfo(); this.editEnterpriseInfo();

98
src/views/systemManage/notice/notice.vue

@ -1,28 +1,39 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="filter-container"> <div>
<el-form :inline="true" :model="formSearch" ref="ruleForm" class="demo-form-inline">
<el-form-item label="标题:">
<el-input v-model="formSearch.title" size="mini" placeholder="请输入标题" clearable maxlength="50"></el-input>
</el-form-item>
<el-form-item label="文章类型:">
<el-select v-model="formSearch.type" size="mini" placeholder="请选择文章类型">
<el-option
v-for="item in sortType"
:key="item.value"
:label="item.name"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="danger" size="mini" icon="el-icon-search" @click="search">查询</el-button>
</el-form-item>
<el-form-item class="float-right">
<el-button type="danger" size="mini" icon="el-icon-circle-plus-outline" @click="addNotice">新增</el-button> <el-button type="danger" size="mini" icon="el-icon-circle-plus-outline" @click="addNotice">新增</el-button>
<!-- <el-button type="info" size="mini" icon="el-icon-delete">删除</el-button> --> </el-form-item>
</el-form>
</div> </div>
<el-table :data="tableData" style="width: 100%" header-row-class-name=""> <el-table :data="tableData" style="width: 100%" header-row-class-name="">
<el-table-column type="selection" width="55"></el-table-column> <el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="title" label="标题"></el-table-column> <el-table-column prop="title" label="标题"></el-table-column>
<el-table-column prop="sender" label="作者"></el-table-column> <el-table-column prop="author" label="作者"></el-table-column>
<el-table-column prop="sort" label="公告类型"> <el-table-column prop="type" label="文章类型">
<template slot-scope="scope"> <template slot-scope="scope">
{{ sortType[scope.row.sort] }} {{ scope.row.type | filterAdd1(that) }}
</template>
</el-table-column>
<el-table-column prop="level" label="公告级别">
<template slot-scope="scope">
{{ levelType[scope.row.level] }}
</template>
</el-table-column>
<el-table-column prop="createTime" label="发布时间">
<template slot-scope="scope">
{{ scope.row.createTime }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="issueStartTime" label="发布开始时间"></el-table-column>
<el-table-column prop="issueEndTime" label="发布结束时间"></el-table-column>
<el-table-column label="操作" width="150"> <el-table-column label="操作" width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" size="small" @click="editNotice(scope.row.id)"><i class="el-icon-edit"></i>修改</el-button> <el-button type="text" size="small" @click="editNotice(scope.row.id)"><i class="el-icon-edit"></i>修改</el-button>
@ -43,7 +54,7 @@
</div> </div>
</template> </template>
<script> <script>
import {getNoticeList, deleteNoticeInfo} from "@/api/notice" import {getNoticeList, deleteNoticeInfo,getNoticeTypeList} from "@/api/notice"
export default { export default {
name: "noticeManage", name: "noticeManage",
@ -53,28 +64,44 @@ export default {
pageSize: 10, // pageSize: 10, //
total: 0, // total: 0, //
tableData: [], // tableData: [], //
sortType: { // sortType: {}, //
'0': '新闻', formSearch: { //
'1': '公告' title: '',
type:''
}, },
levelType: { // that:this
'0': '紧急',
'1': '高',
'2': '中',
'3': '低'
}
}; };
}, },
filters:{
filterAdd1(value,that) {
let name = ''
that.sortType.filter(item =>{
if(item.value == value)
name = item.name
})
return name
}
},
mounted() { mounted() {
this.getNoticeType()
this.initData() this.initData()
}, },
methods: { methods: {
//
search() {
this.currentPage = 1
this.initData()
},
// //
initData() { initData() {
const params = { const params = {
page: this.currentPage, pageNum: this.currentPage,
size: this.pageSize pageSize: this.pageSize,
search:{
title:this.formSearch.title,
type:this.formSearch.type
},
sort:''
} }
getNoticeList(params).then(res => { getNoticeList(params).then(res => {
if (res.data) { if (res.data) {
@ -83,14 +110,19 @@ export default {
} }
}) })
}, },
//ID getNoticeType(){
getNoticeTypeList().then(res => {
this.sortType = res.data
})
},
//ID
deleteNotice(id) { deleteNotice(id) {
this.$confirm('此操作将删除该公告, 是否继续?', '提示', { this.$confirm('此操作将删除该文章, 是否继续?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
deleteNoticeInfo({'id': id}).then(res => { deleteNoticeInfo([id]).then(res => {
this.$message({ this.$message({
message: '删除成功!', message: '删除成功!',
type: 'success' type: 'success'
@ -104,11 +136,11 @@ export default {
}); });
}); });
}, },
// //
addNotice() { addNotice() {
this.$router.push({name: 'noticeDetail'}) this.$router.push({name: 'noticeDetail'})
}, },
// //
editNotice(id) { editNotice(id) {
this.$router.push({name: 'noticeDetail', query: {id: id}}) this.$router.push({name: 'noticeDetail', query: {id: id}})
}, },

227
src/views/systemManage/notice/noticeDetail.vue

@ -3,33 +3,45 @@
<el-form :model="form" :rules="rules" ref="ruleForm"> <el-form :model="form" :rules="rules" ref="ruleForm">
<el-row> <el-row>
<el-col :span="11" style="padding-right:30px;"> <el-col :span="11" style="padding-right:30px;">
<el-form-item label="标题:" :label-width="formLabelWidth" prop="username"> <el-form-item label="标题:" :label-width="formLabelWidth" prop="title">
<el-input v-model="form.title" autocomplete="off" placeholder="请输入标题"></el-input> <el-input v-model="form.title" autocomplete="off" placeholder="请输入标题"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="公告类别:" :label-width="formLabelWidth" prop="sort"> <el-form-item label="标题图片:" :label-width="formLabelWidth" prop="imgUrl">
<el-select v-model="form.sort" placeholder="请选择公告类别"> <el-upload
<el-option label="新闻" :value="0"></el-option> class="avatar-uploader"
<el-option label="通告" :value="1"></el-option> :action="upload_action"
</el-select> :headers="upload_headers"
</el-form-item> :data="upload_data"
<el-form-item label="公告级别:" :label-width="formLabelWidth" prop="level"> :show-file-list="false"
<el-select v-model="form.level" placeholder="请选择公告级别"> :on-success="handleTitleSuccess"
<el-option label="紧急" :value="0"></el-option> :before-upload="beforeAvatarUpload"
<el-option label="高" :value="1"></el-option> >
<el-option label="中" :value="2"></el-option> <img v-if="titleUrl" :src="titleUrl" class="avatar"/>
<el-option label="低" :value="3"></el-option> <i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-select> </el-upload>
</el-form-item> </el-form-item>
<el-form-item label="接收人:" :label-width="formLabelWidth" prop="identityType"> <el-form-item label="文章类别:" :label-width="formLabelWidth" prop="type">
<el-select v-model="form.identityType" multiple placeholder="请选择接收人"> <el-select v-model="form.type" placeholder="请选择文章类型">
<el-option <el-option
v-for="item in sendUser" v-for="item in sortType"
:key="item" :key="item.value"
:label="userLevel.get(parseInt(item))" :label="item.name"
:value="item"> :value="parseInt(item.value)">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="优先级:" :label-width="formLabelWidth" prop="sort">
<el-input v-model.number="form.sort" autocomplete="off" placeholder="请输入优先级"></el-input>
</el-form-item>
<el-form-item label="是否发布:" :label-width="formLabelWidth" prop="isIssue">
<el-switch
v-model="form.isIssue"
active-color="#13ce66"
inactive-color="#ff4949"
:active-value="1"
:inactive-value="0">
</el-switch>
</el-form-item>
<el-form-item label="生效时间:" :label-width="formLabelWidth" prop="time"> <el-form-item label="生效时间:" :label-width="formLabelWidth" prop="time">
<el-date-picker <el-date-picker
v-model="form.time" v-model="form.time"
@ -40,18 +52,20 @@
end-placeholder="结束日期"> end-placeholder="结束日期">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="作者:" :label-width="formLabelWidth" prop="name"> <el-form-item label="作者:" :label-width="formLabelWidth" prop="author">
<el-input v-model="form.sender" autocomplete="off" placeholder="请输入作者"></el-input> <el-input v-model="form.author" autocomplete="off" placeholder="请输入作者"></el-input>
</el-form-item>
<el-form-item label="文章摘要:" :label-width="formLabelWidth" prop="description">
<el-input type="textarea" v-model="form.description" autocomplete="off" placeholder="请输入文章摘要"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-form-item label="内容:" :label-width="formLabelWidth" prop="name"> <el-form-item label="内容:" :label-width="formLabelWidth" prop="content">
<!-- <input type="file" id="quill-img" class="quill-img" @change="fileChange($event)"> -->
<el-upload <el-upload
id="quill-img" id="quill-img"
class="avatar-uploader" class="avatar-uploader"
:action="upload_file" :action="upload_action"
:show-file-list="false" :show-file-list="false"
:on-success="fileChange" :on-success="fileChange"
style="display: none;width:0"> style="display: none;width:0">
@ -63,7 +77,6 @@
:options="editorOption" :options="editorOption"
> >
</quill-editor> </quill-editor>
<!-- <vue-ueditor-wrap v-model="UEMsg" :config="UEConfig"></vue-ueditor-wrap> -->
</el-form-item> </el-form-item>
</el-row> </el-row>
<div class="form-footer"> <div class="form-footer">
@ -77,64 +90,66 @@
import {quillEditor} from 'vue-quill-editor'; import {quillEditor} from 'vue-quill-editor';
import * as Quill from 'quill' // import * as Quill from 'quill' //
// import {ImageExtend} from 'quill-image-extend-module'
// Quill.register('modules/ImageExtend', ImageExtend)
import {ImageDrop} from 'quill-image-drop-module'; // import {ImageDrop} from 'quill-image-drop-module'; //
import ImageResize from 'quill-image-resize-module'; // import ImageResize from 'quill-image-resize-module'; //
Quill.register('modules/imageDrop', ImageDrop); Quill.register('modules/imageDrop', ImageDrop);
Quill.register('modules/imageResize', ImageResize); Quill.register('modules/imageResize', ImageResize);
// import VueUeditorWrap from 'vue-ueditor-wrap' import {addNoticeInfo, getNoticeInfo, editNoticeInfo,getNoticeTypeList} from "@/api/notice"
import {addNoticeInfo, getNoticeInfo, editNoticeInfo, identitytypeList} from "@/api/notice" import { getToken } from '@/utils/auth'
export default { export default {
name: 'noticeDetail', name: 'noticeDetail',
// components: {
// VueUeditorWrap
// },
data() { data() {
return { return {
ID: this.$route.query.id || '', //id ID: this.$route.query.id || '', //id
isEdit: false, // or isEdit: false, // or
upload_file: config.UPLOAD_URL, // upload_action: config.UPLOAD_URL, //
upload_headers:{
token: '800580795f01449f9100c4d2983d13c9' || getToken()
},
upload_data:{
uploadType:'1',
suffixType:'8',
folder:'notice'
},
formLabelWidth: '180px', //formlable formLabelWidth: '180px', //formlable
userLevel: new Map([ // sortType:[],
[1, '系统用户'],
[2, '公众用户'],
[3, '企业用户'],
[4, '政府用户']
]),
sendUser: [], //
form: { //form form: { //form
title: '', title: '',
sort: '', imgUrl:'',
level: '', type: '',
identityType: '',
time: '', time: '',
sender: '', author: '',
content: '' description:'',
content: '',
isIssue:'1',
sort:''
}, },
rules: { //form rules: { //form
title: [ title: [
{required: true, message: '请输入标题', trigger: 'blur'} {required: true, message: '请输入标题', trigger: 'blur'}
], ],
sort: [ type: [
{required: true, message: '请选择公告类别', trigger: 'click'} {required: true, message: '请选择公告类别', trigger: 'click'}
], ],
level: [ isIssue: [
{required: true, message: '请选择公告级别', trigger: 'click'} {required: true}
],
identityType: [
{required: true, message: '请选择接收人', trigger: 'click'}
], ],
time: [ time: [
{required: true, message: '请选择生效日期', trigger: 'click'} {required: true, message: '请选择生效日期', trigger: 'click'}
], ],
sort: [
{required: true, message: '请输入数字类型优先级', trigger: 'blur'}
],
sender: [ sender: [
{required: true, message: '请输入作者'} {message: '请输入作者', trigger: 'blur'}
] ],
description: [
{required: true, message: '请输入文章摘要', trigger: 'blur'}
],
content: [
{required: true, message: '请输入内容', trigger: 'blur'}
],
}, },
editorOption: { //quillEditor editorOption: { //quillEditor
modules: { modules: {
@ -175,21 +190,7 @@ export default {
theme: 'snow', // snow/bubble theme: 'snow', // snow/bubble
syntax: true, // syntax: true, //
}, },
// //Ueditor titleUrl:''
// UEConfig: {
// //
// autoHeightEnabled: false,
// //
// initialFrameHeight: 240,
// //
// initialFrameWidth: '100%',
// // 便使
// // serverUrl: config.API_URL+config.UPLOAD_URL,
// // UEditor 使 vue-cli vue-ueditor-wrap 2
// UEDITOR_HOME_URL: '/UEditor/'
// },
// //Ueditor
// UEMsg:``
} }
}, },
computed: { computed: {
@ -198,7 +199,7 @@ export default {
} }
}, },
created() { created() {
this.getIdentitytypeList() this.getNoticeType()
}, },
mounted() { mounted() {
//id //id
@ -208,35 +209,20 @@ export default {
} }
}, },
methods: { methods: {
//
getNoticeType(){
getNoticeTypeList().then(res => {
this.sortType = res.data
})
},
//id //id
initData() { initData() {
getNoticeInfo({'id': this.ID}).then(res => { getNoticeInfo(this.ID).then(res => {
if (res.data) { if (res.data) {
this.form = res.data this.form = res.data
this.form.identityType = this.form.identityType.split(',').map((item) => { if(this.form.imgUrl) this.titleUrl = this.form.imgUrl
return +item this.form.time = [this.form.issueStartTime, this.form.issueEndTime]
})
this.form.time = [this.form.sendtime, this.form.endTime]
} }
// this.form = {
// title:res.data.title,
// sort:res.data.sort,
// level:res.data.level,
// identityType:res.data.identityType.split(',').map((item)=>{
// return +item
// }),
// time:[res.data.sendtime,res.data.endTime],
// sender:res.data.sender,
// content: res.data.content
// }
// this.UEMsg = res.data.content
})
},
//
getIdentitytypeList() {
identitytypeList().then(res => {
this.sendUser = res.data
}) })
}, },
//- //-
@ -257,23 +243,20 @@ export default {
vm.$Message.error('图片插入失败') vm.$Message.error('图片插入失败')
} }
}, },
// onEditorReady(editor) { // onEditorChange(){}, //
// },
// onEditorBlur(){}, //
// onEditorFocus(){}, //
// onEditorChange(){}, //
// //
addNotice() { addNotice() {
const param = { const param = {
title: this.form.title, title: this.form.title,
sort: this.form.sort, type: this.form.type,
level: this.form.level, issueStartTime: this.form.time[0],
identityType: this.form.identityType.join(','), // , issueEndTime: this.form.time[1],
sendtime: this.form.time[0], author: this.form.author,
endTime: this.form.time[1], imgUrl:this.form.imgUrl,
sender: this.form.sender, description: this.form.description,
content: this.form.content content: this.form.content,
isIssue:this.form.isIssue,
sort:this.form.sort
} }
addNoticeInfo(param).then(res => { addNoticeInfo(param).then(res => {
this.$message({ this.$message({
@ -285,12 +268,11 @@ export default {
}, },
// //
editNotice() { editNotice() {
delete (this.form.createTime) // this.form.issueStartTime = this.form.time[0]
delete (this.form.updateTime) // this.form.issueEndTime = this.form.time[1]
this.form.identityType = this.form.identityType.join(',') let params = JSON.parse(JSON.stringify(this.form))
this.form.sendtime = this.form.time[0] delete(params.time)
this.form.endTime = this.form.time[1] editNoticeInfo(params).then(res => {
editNoticeInfo(this.form).then(res => {
this.$message({ this.$message({
message: '修改成功!', message: '修改成功!',
type: 'success' type: 'success'
@ -319,6 +301,19 @@ export default {
this.$refs[formName].resetFields(); this.$refs[formName].resetFields();
this.$router.go(-1) this.$router.go(-1)
}, },
///
handleTitleSuccess(res, file) {
this.titleUrl = URL.createObjectURL(file.raw);
this.form.imgUrl = res.data;
},
//
beforeAvatarUpload(file) {
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isLt2M) {
this.$message.error("上传图片大小不能超过 2MB!");
}
return isLt2M;
},
} }
} }
</script> </script>

Loading…
Cancel
Save