通知公告页面开发
This commit is contained in:
parent
9a1675e59e
commit
79bd90c914
|
@ -0,0 +1,29 @@
|
|||
<template>
|
||||
<a-card :bordered="false">
|
||||
<div v-html="model.content"></div>
|
||||
</a-card>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { noticeGet } from '@/api/notice/notice'
|
||||
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
model: {}
|
||||
}
|
||||
},
|
||||
created () {
|
||||
const noticeId = this.$route.query.id
|
||||
console.log(noticeId)
|
||||
this.getDetail(noticeId)
|
||||
},
|
||||
methods: {
|
||||
getDetail (id) {
|
||||
noticeGet({ id: id }).then(res => {
|
||||
this.model = res.data
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -0,0 +1,216 @@
|
|||
<template>
|
||||
<a-card :bordered="false">
|
||||
<template slot="extra">
|
||||
<a-button size="small" @click="save" type="primary">保存</a-button>
|
||||
<a-button size="small" @click="close">返回</a-button>
|
||||
</template>
|
||||
|
||||
<a-form-model ref="ruleForm" :model="form" :rules="rules" :label-col="labelCol" :wrapper-col="wrapperCol">
|
||||
<a-row :gutter="16">
|
||||
<a-col :span="12">
|
||||
<a-form-model-item ref="title" label="公告标题" prop="title" :wrapper-col="{ span: 18 }">
|
||||
<a-input v-model="form.title" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="16">
|
||||
<a-col :span="12">
|
||||
<a-form-model-item ref="rangeName" label="发布范围" prop="rangeName" :wrapper-col="{ span: 18 }">
|
||||
<a-input v-model="form.rangeName" readOnly @click="openOrgTree" />
|
||||
</a-form-model-item>
|
||||
<a-form-model-item style="display: none;">
|
||||
<a-input v-model="form.rangeId" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="16">
|
||||
<a-col :span="12">
|
||||
<a-form-model-item ref="isTop" label="是否置顶" prop="isTop">
|
||||
<a-radio-group v-model="form.isTop" >
|
||||
<a-radio :value="1">是</a-radio>
|
||||
<a-radio :value="0">否</a-radio>
|
||||
</a-radio-group>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-model-item ref="isCalculate" label="是否计算学时" prop="isCalculate">
|
||||
<a-radio-group v-model="form.isCalculate" >
|
||||
<a-radio :value="1">是</a-radio>
|
||||
<a-radio :value="0">否</a-radio>
|
||||
</a-radio-group>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="16">
|
||||
<a-col :span="12">
|
||||
<a-form-model-item ref="isNowPublish" label="即时发布" prop="isNowPublish" >
|
||||
<a-switch v-model="form.isNowPublish" @change="onChangeNow" />
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<div v-if="timeShow" >
|
||||
<a-form-model-item ref="publishTime" label="发布时间" prop="publishTime">
|
||||
<a-date-picker
|
||||
v-model="form.publishTime"
|
||||
show-time
|
||||
type="date"
|
||||
placeholder="选择发布时间"
|
||||
style="width: 100%;"
|
||||
:format="'YYYY-MM-DD HH:mm:ss'"
|
||||
valueFormat="YYYY-MM-DD HH:mm:ss"
|
||||
/>
|
||||
</a-form-model-item>
|
||||
</div>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="16">
|
||||
<a-col :span="12">
|
||||
<a-form-model-item ref="type" label="发布类型" prop="type">
|
||||
<a-select v-model="form.type" >
|
||||
<a-select-option :value="1">新闻资讯</a-select-option>
|
||||
<a-select-option :value="2">公告详情</a-select-option>
|
||||
<a-select-option :value="3">通知</a-select-option>
|
||||
</a-select>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="16">
|
||||
<a-col>
|
||||
<a-form-model-item ref="content" label="详细内容" prop="content" :label-col="{ span: 3 }" :wrapper-col="{ span: 21 }">
|
||||
<!-- <wang-editor ref="wangEditor" groupName="notice" :value="form.content"></wang-editor> -->
|
||||
<a-textarea :autoSize="{ minRows: 3, maxRows: 10 }" v-model="form.content"/>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="16">
|
||||
<a-col :span="12">
|
||||
<a-form-model-item label="上传附件" >
|
||||
<db-upload v-model="fileList" type="file" accept="*"></db-upload>
|
||||
</a-form-model-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form-model>
|
||||
|
||||
<org-tree @selectOrg="selectOrg($event)" ref="orgModal"/>
|
||||
|
||||
</a-card>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { noticeGet, noticeAdd } from '@/api/notice/notice'
|
||||
import WangEditor from '@/components/Editor/WangEditor'
|
||||
import DbUpload from '@/components/DbUpload/DbUpload.vue'
|
||||
import OrgTree from '../org/OrgTree'
|
||||
// import moment from 'moment'
|
||||
export default {
|
||||
props: {
|
||||
id: {
|
||||
type: String,
|
||||
default: undefined
|
||||
}
|
||||
},
|
||||
components: {
|
||||
OrgTree,
|
||||
WangEditor,
|
||||
DbUpload
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
labelCol: {
|
||||
span: 6
|
||||
},
|
||||
wrapperCol: {
|
||||
span: 18
|
||||
},
|
||||
form: {
|
||||
id: '',
|
||||
title: '',
|
||||
rangeId: 0,
|
||||
rangeName: '',
|
||||
isTop: 0,
|
||||
isCalculate: 0,
|
||||
isNowPublish: false,
|
||||
publishTime: '',
|
||||
type: 1,
|
||||
content: ''
|
||||
},
|
||||
fileList: [],
|
||||
timeShow: true,
|
||||
rules: {
|
||||
title: [{ required: true, message: '请输入公告标题', trigger: 'blur' }],
|
||||
rangeName: [{ required: true, message: '请选择发布范围', trigger: 'blur' }],
|
||||
isTop: [{ required: true, message: '请选择是否置顶', trigger: 'change' }],
|
||||
isCalculate: [{ required: true, message: '请选择是否计算学时', trigger: 'change' }],
|
||||
isNowPublish: [{ required: true, message: '请选择即时发布', trigger: 'change' }],
|
||||
publishTime: [{ required: true, message: '请选择发布时间', trigger: 'change' }],
|
||||
type: [{ required: true, message: '请选择发布类型', trigger: 'change' }],
|
||||
content: [{ required: true, message: '请输入详细内容', trigger: 'change' }]
|
||||
}
|
||||
}
|
||||
},
|
||||
created () {
|
||||
console.log(!this.$route.query.id)
|
||||
if (!this.$route.query.id) return
|
||||
|
||||
this.edit(this.$route.query.id)
|
||||
},
|
||||
methods: {
|
||||
// 返回 按钮
|
||||
close () {
|
||||
this.$router.push({ path: '/notice/list', query: {} })
|
||||
},
|
||||
edit (id) {
|
||||
this.modalTitle = '修改'
|
||||
this.visible = true
|
||||
noticeGet({ id: id }).then(res => {
|
||||
console.log(res)
|
||||
const form = res.data
|
||||
form.isNowPublish = form.isNowPublish === 1
|
||||
// form.publishTime = moment(form.publishTime)
|
||||
this.form = form
|
||||
this.fileList = JSON.parse(res.data.file)
|
||||
})
|
||||
},
|
||||
save () {
|
||||
this.$refs.ruleForm.validate(valid => {
|
||||
if (valid) {
|
||||
const { form } = this
|
||||
// form.content = this.$refs.wangEditor.content()
|
||||
if (this.form.isNowPublish) {
|
||||
form.isNowPublish = 1
|
||||
form.publishTime = new Date().getTime()
|
||||
} else {
|
||||
form.isNowPublish = 0
|
||||
}
|
||||
form.file = JSON.stringify(this.fileList)
|
||||
console.log(form)
|
||||
noticeAdd(form).then((res) => {
|
||||
if (res.code === 200) {
|
||||
this.$message.success('操作成功')
|
||||
this.close()
|
||||
} else {
|
||||
this.$message.error('操作失败:' + res.msg)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
},
|
||||
openOrgTree () {
|
||||
this.$refs.orgModal.loadOrg()
|
||||
},
|
||||
selectOrg (orgData) {
|
||||
this.form.rangeId = orgData.id
|
||||
this.form.rangeName = orgData.name
|
||||
},
|
||||
onChangeNow (checked) {
|
||||
console.log(`a-switch to ${checked}`)
|
||||
this.timeShow = !checked
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
|
@ -0,0 +1,198 @@
|
|||
<template>
|
||||
<a-card :bordered="false">
|
||||
<a-tabs default-active-key="2" @change="tabsCallback">
|
||||
<a-tab-pane key="2" tab="我接收的">
|
||||
<div class="table-page-search-wrapper">
|
||||
<a-form layout="inline">
|
||||
<a-row :gutter="48">
|
||||
<a-col :md="6" :sm="24">
|
||||
<a-form-item label="公告标题"><a-input v-model="queryParam.title" placeholder="请输入公告标题" @pressEnter="loadData" /></a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
|
||||
<a-button style="margin-left: 8px" @click="() => {queryParam = {}, this.loadData()}">重置</a-button>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
<s-table
|
||||
ref="table"
|
||||
:columns="columns"
|
||||
:data="loadData"
|
||||
:rowKey="(record) => record.id"
|
||||
>
|
||||
<template slot="type" slot-scope="text, record">
|
||||
<a-tag>{{ record.type | typeFilter }}</a-tag>
|
||||
</template>
|
||||
<template slot="publishTime" slot-scope="text, record">
|
||||
{{ record.publishTime | moment('YYYY-MM-DD HH:mm:ss') }}
|
||||
</template>
|
||||
<span slot="action" slot-scope="text, record">
|
||||
<a v-if="hasPerm('notice:list')" @click="showGetPage(record.id)">查看</a>
|
||||
<a-divider type="vertical" />
|
||||
</span>
|
||||
</s-table>
|
||||
</a-tab-pane>
|
||||
<a-tab-pane key="1" tab="我发布的" v-if="hasPerm('notice:edit')" >
|
||||
<div class="table-page-search-wrapper">
|
||||
<a-form layout="inline">
|
||||
<a-row :gutter="48">
|
||||
<a-col :md="6" :sm="24">
|
||||
<a-form-item label="公告标题"><a-input v-model="queryParam.title" placeholder="请输入公告标题" @pressEnter="loadData" /></a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="8" :sm="24">
|
||||
<a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
|
||||
<a-button style="margin-left: 8px" @click="() => {queryParam = {}, this.loadData()}">重置</a-button>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-form>
|
||||
</div>
|
||||
|
||||
<div class="table-operator">
|
||||
<a-button @click="showAddPage()" icon="plus" type="primary" v-if="hasPerm('notice:edit')">发布</a-button>
|
||||
</div>
|
||||
|
||||
<s-table
|
||||
ref="table"
|
||||
:columns="columns"
|
||||
:data="loadData"
|
||||
:rowKey="(record) => record.id"
|
||||
>
|
||||
<template slot="type" slot-scope="text, record">
|
||||
|
||||
<a-tag>{{ record.type | typeFilter }}</a-tag>
|
||||
</template>
|
||||
<template slot="publishTime" slot-scope="text, record">
|
||||
{{ record.publishTime | moment('YYYY-MM-DD HH:mm:ss') }}
|
||||
</template>
|
||||
|
||||
<span slot="action" slot-scope="text, record">
|
||||
<a v-if="hasPerm('notice:edit')" @click="showAddPage(record.id)">编辑</a>
|
||||
<a-divider type="vertical" v-if="hasPerm('notice:edit')" />
|
||||
<a v-if="hasPerm('notice:list')" @click="showGetPage(record.id)">查看</a>
|
||||
<a-divider type="vertical" v-if="hasPerm('notice:list')"/>
|
||||
<a-popconfirm v-if="hasPerm('notice:del')" placement="topRight" title="确认删除?" @confirm="() => handleDel(record)">
|
||||
<a>删除</a>
|
||||
</a-popconfirm>
|
||||
</span>
|
||||
</s-table>
|
||||
</a-tab-pane>
|
||||
</a-tabs>
|
||||
</a-card>
|
||||
</template>
|
||||
<script>
|
||||
import { STable } from '@/components'
|
||||
import { noticePage, noticeDel } from '@/api/notice/notice'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
STable
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
// 查询参数
|
||||
queryParam: { noticeRange: 2 },
|
||||
// 表头
|
||||
columns: [
|
||||
{
|
||||
title: '公告标题',
|
||||
dataIndex: 'title'
|
||||
},
|
||||
{
|
||||
title: '发布单位/人',
|
||||
dataIndex: 'createOrgName'
|
||||
},
|
||||
{
|
||||
title: '发布时间',
|
||||
width: 200,
|
||||
dataIndex: 'publishTime',
|
||||
key: 'publishTime',
|
||||
scopedSlots: { customRender: 'publishTime' }
|
||||
},
|
||||
{
|
||||
title: '菜单类型',
|
||||
dataIndex: 'type',
|
||||
scopedSlots: { customRender: 'type' }
|
||||
}
|
||||
],
|
||||
// 加载数据方法 必须为 Promise 对象
|
||||
loadData: parameter => {
|
||||
return noticePage(Object.assign(parameter, this.queryParam)).then((res) => {
|
||||
console.log(res)
|
||||
return res
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
filters: {
|
||||
typeFilter (type) {
|
||||
const typeMap = {
|
||||
1: '新闻资讯',
|
||||
2: '公告详情',
|
||||
3: '通知'
|
||||
}
|
||||
return typeMap[type]
|
||||
}
|
||||
},
|
||||
created () {
|
||||
if (this.hasPerm('notice:edit') || this.hasPerm('notice:del') || this.hasPerm('notice:list')) {
|
||||
this.columns.push({
|
||||
title: '操作',
|
||||
width: '150px',
|
||||
dataIndex: 'action',
|
||||
scopedSlots: { customRender: 'action' }
|
||||
})
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
tabsCallback (key) {
|
||||
if (key === '1') {
|
||||
this.queryParam.noticeRange = 1
|
||||
this.$refs.table.refresh(true)
|
||||
}
|
||||
if (key === '2') {
|
||||
this.queryParam.noticeRange = 2
|
||||
this.$refs.table.refresh(true)
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
handleDel (record) {
|
||||
noticeDel({ id: record.id, deleteReason: '' }).then((res) => {
|
||||
if (res.code === 200) {
|
||||
this.$message.success('删除成功')
|
||||
this.$refs.table.refresh(true)
|
||||
} else {
|
||||
this.$message.error('删除失败:' + res.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
showAddPage (id) {
|
||||
console.log(id)
|
||||
this.$router.push({
|
||||
path: '/notice/add',
|
||||
query: {
|
||||
id: id
|
||||
}
|
||||
})
|
||||
},
|
||||
showGetPage (id) {
|
||||
this.$router.push({
|
||||
path: '/notice/detail',
|
||||
query: {
|
||||
id: id
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="less">
|
||||
.table-operator {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
button {
|
||||
margin-right: 8px;
|
||||
}
|
||||
</style>
|
|
@ -104,7 +104,7 @@ export default {
|
|||
})
|
||||
},
|
||||
loadOrg () {
|
||||
orgList().then(res => {
|
||||
orgList({ orgType: 1 }).then(res => {
|
||||
if (!res.code === 200 || !res.data.length) {
|
||||
return
|
||||
}
|
||||
|
|
|
@ -1,5 +1,12 @@
|
|||
<template>
|
||||
<a-modal :title="modalTitle" :width="1000" :visible="visible" :confirmLoading="confirmLoading" @ok="handleSubmit" @cancel="handleCancel" :destroyOnClose="true">
|
||||
<a-modal
|
||||
:title="modalTitle"
|
||||
:width="1000"
|
||||
:visible="visible"
|
||||
:confirmLoading="confirmLoading"
|
||||
@ok="handleSubmit"
|
||||
@cancel="handleCancel"
|
||||
:destroyOnClose="true">
|
||||
<a-spin :spinning="formLoading">
|
||||
<a-form :form="form">
|
||||
|
||||
|
@ -33,7 +40,13 @@
|
|||
<a-col :md="12" :sm="24">
|
||||
<div v-show="pidShow">
|
||||
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="父级菜单" has-feedback>
|
||||
<a-tree-select v-decorator="['pid', {initialValue: treeSelDefaultValue},{rules: [{ required: true, message: '请选择父级菜单!' }]}]" style="width: 100%" :dropdownStyle="{ maxHeight: '300px', overflow: 'auto' }" :treeData="menuTreeData" placeholder="请选择父级菜单" :replaceFields="{
|
||||
<a-tree-select
|
||||
v-decorator="['pid', {initialValue: treeSelDefaultValue},{rules: [{ required: true, message: '请选择父级菜单!' }]}]"
|
||||
style="width: 100%"
|
||||
:dropdownStyle="{ maxHeight: '300px', overflow: 'auto' }"
|
||||
:treeData="menuTreeData"
|
||||
placeholder="请选择父级菜单"
|
||||
:replaceFields="{
|
||||
children:'children',
|
||||
title:'name',
|
||||
key:'id',
|
||||
|
@ -122,7 +135,7 @@ export default {
|
|||
xs: { span: 24 },
|
||||
sm: { span: 16 }
|
||||
},
|
||||
modalTitle: "新增菜单",
|
||||
modalTitle: '新增菜单',
|
||||
visible: false,
|
||||
confirmLoading: false,
|
||||
menuTreeData: [],
|
||||
|
@ -137,14 +150,14 @@ export default {
|
|||
formLoading: true,
|
||||
type: '',
|
||||
form: this.$form.createForm(this),
|
||||
treeSelDefaultValue: 1,
|
||||
treeSelDefaultValue: 1
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
// 新增打开页面初始化
|
||||
add (type) {
|
||||
this.modalTitle = "新增菜单"
|
||||
this.modalTitle = '新增菜单'
|
||||
this.visible = true
|
||||
|
||||
// 默认选中菜单项,并初始化
|
||||
|
@ -153,7 +166,7 @@ export default {
|
|||
|
||||
// 默认选中的单选框
|
||||
this.form.getFieldDecorator('visible', { initialValue: true })
|
||||
this.treeSelDefaultValue = type;
|
||||
this.treeSelDefaultValue = type
|
||||
|
||||
// 默认加载菜单树
|
||||
this.getMenuTree()
|
||||
|
@ -162,7 +175,7 @@ export default {
|
|||
},
|
||||
// 编辑打开页面初始化
|
||||
edit (record) {
|
||||
this.modalTitle = "编辑菜单"
|
||||
this.modalTitle = '编辑菜单'
|
||||
this.visible = true
|
||||
|
||||
// 默认选中菜单项,并初始化
|
||||
|
@ -175,7 +188,7 @@ export default {
|
|||
this.visibleDef = true
|
||||
}
|
||||
this.form.getFieldDecorator('visible', { valuePropName: 'checked', initialValue: this.visibleDef })
|
||||
this.treeSelDefaultValue = record.id;
|
||||
this.treeSelDefaultValue = record.id
|
||||
|
||||
setTimeout(() => {
|
||||
this.setMenuItem(record)
|
||||
|
@ -221,6 +234,7 @@ export default {
|
|||
}
|
||||
// eslint-disable-next-line eqeqeq
|
||||
if (type == '0') {
|
||||
console.log(type)
|
||||
// 组件默认为显示,设置可输入,给默认组件 PageView,验证必填
|
||||
this.componentShow = true
|
||||
this.componentDisabled = false
|
||||
|
@ -228,6 +242,7 @@ export default {
|
|||
this.componentRequired = true
|
||||
// 父级初始化顶级,并将其隐藏
|
||||
this.form.getFieldDecorator('pid', { initialValue: '0' })
|
||||
this.treeSelDefaultValue = 0
|
||||
this.pidShow = false
|
||||
} else {
|
||||
// eslint-disable-next-line eqeqeq
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
<template>
|
||||
<div class="main">
|
||||
<a-form-model ref="ruleForm" class="user-layout-login" :model="form" :rules="rules" @submit.prevent="handleSubmit">
|
||||
<a-form-model-item>
|
||||
<a-select v-model="form.roleCode" placeholder="请选择">
|
||||
<a-select-option value="student">学员</a-select-option>
|
||||
<a-select-option value="platform_manager">管理员</a-select-option>
|
||||
</a-select>
|
||||
</a-form-model-item>
|
||||
<a-form-model-item>
|
||||
<a-input size="large" v-model="form.username" placeholder="请输入用户名">
|
||||
<a-icon slot="prefix" type="user" style="color:rgba(0,0,0,.25)" />
|
||||
|
@ -27,11 +33,13 @@ export default {
|
|||
return {
|
||||
form: {
|
||||
username: '',
|
||||
password: ''
|
||||
password: '',
|
||||
roleCode: 'student'
|
||||
},
|
||||
rules: {
|
||||
username: [{ required: true, message: '请输入用户名' }],
|
||||
password: [{ required: true, message: '请输入密码', trigger: 'blur' }]
|
||||
password: [{ required: true, message: '请输入密码', trigger: 'blur' }],
|
||||
roleCode: [{ required: true, message: '请输入密码', trigger: 'change' }]
|
||||
},
|
||||
loading: false
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue