Commit d4e3df1d authored by guoyou's avatar guoyou

推送

parent c2419f8f
...@@ -9,23 +9,29 @@ ...@@ -9,23 +9,29 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4">
<el-select class="filter-item" v-model="listQuery.type" placeholder="请选择推送方式" @change="handleTypeChange"> <el-select
class="filter-item"
v-model="listQuery.type"
placeholder="请选择推送方式"
@change="handleTypeChange"
>
<el-option :key="null" label="全部" :value="null"></el-option> <el-option :key="null" label="全部" :value="null"></el-option>
<el-option :key="1" label="手动推送" :value="1"></el-option> <el-option :key="1" label="手动推送" :value="1"></el-option>
<el-option :key="2" label="系统自动推送" :value="2"></el-option> <el-option :key="2" label="系统自动推送" :value="2"></el-option>
</el-select> </el-select>
</el-col> </el-col>
<el-button class="filter-item" type="primary" v-waves icon="search" @click="handleFilter">搜索</el-button> <el-button class="filter-item" type="primary" v-waves icon="search" @click="handleFilter">搜索</el-button>
<el-button class="filter-item" type="primary" style="float: right;" @click="handleCreate">+ 添加通知</el-button> <el-button
class="filter-item"
type="primary"
style="float: right;"
@click="handleCreate"
>+ 添加通知</el-button>
</el-row> </el-row>
</el-form> </el-form>
</div> </div>
<el-table :key='tableKey' :data="list" border fit highlight-current-row <el-table :key="tableKey" :data="list" border fit highlight-current-row style="width: 100%">
style="width: 100%"> <el-table-column type="index" align="center" label="序号" width="98"></el-table-column>
<el-table-column
type="index"
align="center" label="序号" width="98">
</el-table-column>
<el-table-column width="200" align="center" label="标题"> <el-table-column width="200" align="center" label="标题">
<template scope="scope"> <template scope="scope">
<span>{{scope.row.title}}</span> <span>{{scope.row.title}}</span>
...@@ -49,52 +55,97 @@ ...@@ -49,52 +55,97 @@
</el-table-column> </el-table-column>
<el-table-column align="center" width="150" label="操作" fixed="right"> <el-table-column align="center" width="150" label="操作" fixed="right">
<template scope="scope"> <template scope="scope">
<el-button size="small" class="el-button el-button--text el-button--small" @click="handleDown(scope.row)" v-show="scope.row.type==1">立即推送</el-button> <el-button
<el-button size="small" class="el-button el-button--text el-button--small" @click="handleUpdate(scope.row)">编辑</el-button> size="small"
<el-button class="el-button el-button--text el-button--small" size="small" @click="deleteHandler(scope.row)" style="color:red;">删除</el-button> class="el-button el-button--text el-button--small"
@click="handleDown(scope.row)"
v-show="scope.row.type==1"
>立即推送</el-button>
<el-button
size="small"
class="el-button el-button--text el-button--small"
@click="handleUpdate(scope.row)"
>编辑</el-button>
<el-button
class="el-button el-button--text el-button--small"
size="small"
@click="deleteHandler(scope.row)"
style="color:red;"
>删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div v-show="!listLoading" class="pagination-container"> <div v-show="!listLoading" class="pagination-container">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" <el-pagination
:current-page.sync="listQuery.page" :page-sizes="[10,20,30,40,50]" :page-size="listQuery.limit" @size-change="handleSizeChange"
layout="total, sizes, prev, pager, next, jumper" :total="total"></el-pagination> @current-change="handleCurrentChange"
:current-page.sync="listQuery.page"
:page-sizes="[10,20,30,40,50]"
:page-size="listQuery.limit"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
></el-pagination>
</div> </div>
<!-- banner modal弹窗 --> <!-- banner modal弹窗 -->
<el-dialog :title="modalTitle" :visible.sync="bannerDialogVisible"> <el-dialog :title="modalTitle" :visible.sync="bannerDialogVisible">
<el-form :model="form" :rules="rules" ref="form" label-width="90px"> <el-form :model="form" :rules="rules" ref="form" label-width="90px">
<el-form-item label="推送方式" > <el-form-item label="推送方式">
<!--<el-radio-group size="large" v-model="form.type">--> <!--<el-radio-group size="large" v-model="form.type">-->
<!--<el-radio-button style="margin-bottom: 10px;" label="0">安卓</el-radio-button>--> <!--<el-radio-button style="margin-bottom: 10px;" label="0">安卓</el-radio-button>-->
<!--<el-radio-button style="margin-bottom: 10px;" label="1">iOS</el-radio-button>--> <!--<el-radio-button style="margin-bottom: 10px;" label="1">iOS</el-radio-button>-->
<!--</el-radio-group>--> <!--</el-radio-group>-->
<el-radio-group v-model="form.type" size="medium"> <el-radio-group v-model="form.type" size="medium">
<el-radio-button label="1" >手工推送</el-radio-button> <el-radio-button label="1">手工推送</el-radio-button>
<el-radio-button label="2">系统自动推送</el-radio-button> <el-radio-button label="2">系统自动推送</el-radio-button>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="发送类型"> <el-form-item label="发送类型" v-show="form.type == 2">
<el-select class="filter-item" v-model="form.sendType" placeholder="请选择发送类型" @change="handleSendType"> <el-select
<el-option v-for="(val, key, index) in sendList " :key="val.code" :label="val.value" :value="val.code" class="filter-item"
v-model="form.sendType"
placeholder="请选择发送类型"
@change="handleSendType"
>
<el-option
v-for="(val, key, index) in sendList "
:key="val.code"
:label="val.value"
:value="val.code"
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="跳转页面"> <el-form-item label="跳转页面">
<el-select class="filter-item" v-model="form.jumpType" placeholder="请选择跳转类型" @change="handleJumpType"> <el-select
<el-option v-for="(val, key, index) in jumpList " :key="val.code" :label="val.value" :value="val.code" class="filter-item"
v-model="form.jumpType"
placeholder="请选择跳转类型"
@change="handleJumpType"
>
<el-option
v-for="(val, key, index) in jumpList "
:key="val.code"
:label="val.value"
:value="val.code"
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="外链地址" :prop="isUrl == true ? 'url' : ''" v-show="isUrl">
<el-input v-model="form.url" placeholder="请输入标题"></el-input>
</el-form-item>
<el-form-item label="外链描述" :prop="isUrl==true ? 'info' : ''" v-show="isUrl">
<el-input v-model="form.info" placeholder="请输入标题"></el-input>
</el-form-item>
<el-form-item label="标题" prop="title"> <el-form-item label="标题" prop="title">
<el-input v-model="form.title" placeholder="请输入标题"></el-input> <el-input v-model="form.title" placeholder="请输入标题"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="描述" prop="alert"> <el-form-item label="描述" prop="alert">
<el-input v-model="form.alert" placeholder="请输入描述"></el-input> <el-input v-model="form.alert" placeholder="请输入描述"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="样式" > <el-form-item label="样式">
<el-radio-group v-model="form.style" size="medium" @change="handleRadio"> <el-radio-group v-model="form.style" size="medium" @change="handleRadio">
<el-radio-button label="1">标准样式</el-radio-button> <el-radio-button label="1">标准样式</el-radio-button>
<el-radio-button label="3" >大图</el-radio-button> <el-radio-button label="3">大图</el-radio-button>
<el-radio-button label="2">自定义样式</el-radio-button> <el-radio-button label="2">自定义样式</el-radio-button>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
...@@ -104,9 +155,18 @@ ...@@ -104,9 +155,18 @@
:action="BASE_API+'/api/universal/file/app/unauth/admin/upload'" :action="BASE_API+'/api/universal/file/app/unauth/admin/upload'"
:show-file-list="false" :show-file-list="false"
:headers="getHeaderWithToken" :headers="getHeaderWithToken"
:on-success="handleAvatarSuccess"> :on-success="handleAvatarSuccess"
<img v-if="$utils.isString(form.bigPicPath) && !$utils.isEmpty(form.bigPicPath)" :src="form.bigPicPath" style="width:200px;max-height:200px;"> >
<i v-else class="el-icon-plus avatar-uploader-icon" style="lineHeight:100px;width:100px;height: 100px;vertical-align: middle;"></i> <img
v-if="$utils.isString(form.bigPicPath) && !$utils.isEmpty(form.bigPicPath)"
:src="form.bigPicPath"
style="width:200px;max-height:200px;"
/>
<i
v-else
class="el-icon-plus avatar-uploader-icon"
style="lineHeight:100px;width:100px;height: 100px;vertical-align: middle;"
></i>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -120,22 +180,20 @@ ...@@ -120,22 +180,20 @@
</template> </template>
<script> <script>
import 'static/css/uploadImg.css';// 引入图片上传组件对话框 import 'static/css/uploadImg.css' // 引入图片上传组件对话框
import { import { formatDate } from 'utils/dateFormattor'
formatDate
} from 'utils/dateFormattor';
import { import {
toEast8Date, toEast8Date,
deepCopyDate, deepCopyDate,
newEast8Date, newEast8Date,
convertDate2Str, convertDate2Str,
timestamp2Date, timestamp2Date,
getYMD_hm getYMD_hm
} from 'utils/dateUtils'; } from 'utils/dateUtils'
import { import {
getPushList, getPushList,
getSendTypeList, getSendTypeList,
getJumpTypeList, getJumpTypeList,
...@@ -144,20 +202,18 @@ ...@@ -144,20 +202,18 @@
editObj, editObj,
delObj, delObj,
pushStype pushStype
} from 'src/api/appManagement/pushManagement'; } from 'src/api/appManagement/pushManagement'
import rsCode from '../../../utils/rsCode'; import rsCode from '../../../utils/rsCode'
import {mapGetters} from 'vuex'; import { mapGetters } from 'vuex'
import { import { getToken } from '../../../utils/auth'
getToken
} from '../../../utils/auth';
import Element1 from "../../admin/menu/components/element"; import Element1 from '../../admin/menu/components/element'
import ElRow from "element-ui/packages/row/src/row"; import ElRow from 'element-ui/packages/row/src/row'
import ElCol from "element-ui/packages/col/src/col"; import ElCol from 'element-ui/packages/col/src/col'
export default { export default {
name: 'pushManagement', name: 'pushManagement',
components: { components: {
ElCol, ElCol,
...@@ -166,32 +222,36 @@ ...@@ -166,32 +222,36 @@
}, },
data() { data() {
return { return {
showPic:false, showPic: false,
tableKey:0, tableKey: 0,
jumpList:undefined, jumpList: undefined,
sendList:undefined, sendList: undefined,
modalTitle: "创建", modalTitle: '创建',
BASE_API: process.env.BASE_API, BASE_API: process.env.BASE_API,
bannerDialogVisible: false,//添加、编辑弹框 bannerDialogVisible: false, //添加、编辑弹框
showLoadingBody: false, showLoadingBody: false,
isUrl: false,
form: { form: {
type:1, type: 1,
title:'', title: '',
alert:'', alert: '',
style:1, style: 1,
bigPicPath:'', bigPicPath: '',
sendType:0, sendType: 0,
jumpType:0, jumpType: 0,
url: '',
info: '',
urlJson: {}
}, },
listQuery: { listQuery: {
page: 1, page: 1,
limit: 10, limit: 10,
title: '',//标题 title: '', //标题
type:undefined type: undefined
}, },
pushQuery: { pushQuery: {
id: 0, id: 0,
userIds: '', userIds: ''
}, },
rules: { rules: {
title: { title: {
...@@ -203,17 +263,29 @@ ...@@ -203,17 +263,29 @@
alert: { alert: {
type: 'string', type: 'string',
required: true, required: true,
message: '请输入描述', message: '请输入描述'
}, },
url: {
type: 'string',
required: true,
message: '请输入外链地址'
},
info: {
type: 'string',
required: true,
message: '请输入外链描述'
}
}, },
pickerOptionsStart: { pickerOptionsStart: {
disabledDate(time) { disabledDate(time) {
return time.getTime() < Date.now() - 8.64e7; return time.getTime() < Date.now() - 8.64e7
} }
}, },
pickerOptionsEnd: { pickerOptionsEnd: {
disabledDate: time => { disabledDate: time => {
const beginDateVal = new Date(this.form.starTimeStr).getTime() const beginDateVal = new Date(
this.form.starTimeStr
).getTime()
if (beginDateVal) { if (beginDateVal) {
return time.getTime() < beginDateVal - 8.64e7 return time.getTime() < beginDateVal - 8.64e7
} }
...@@ -222,208 +294,238 @@ ...@@ -222,208 +294,238 @@
list: null, list: null,
total: null, total: null,
listLoading: true, listLoading: true,
inline: true, inline: true
} }
}, },
created() { created() {
this.getList(); this.getList()
this.getSendTypeList(); this.getSendTypeList()
this.getJumpTypeList(); this.getJumpTypeList()
}, },
computed: { computed: {
...mapGetters([ ...mapGetters(['elements', 'belong2Type']),
'elements',
'belong2Type'
]),
getHeaderWithToken() { getHeaderWithToken() {
return {Authorization: getToken()}; return { Authorization: getToken() }
}, }
}, },
methods: { methods: {
handleFilter() { handleFilter() {
this.listQuery.page = 1; this.listQuery.page = 1
this.$refs.queryForm.validate(valid => { this.$refs.queryForm.validate(valid => {
if (valid) { if (valid) {
this.getList(); this.getList()
} else { } else {
return false; return false
} }
}); })
}, },
getSendTypeList(){ getSendTypeList() {
getSendTypeList().then(response => { getSendTypeList().then(response => {
this.sendList = response.data this.sendList = response.data
}); })
}, },
getJumpTypeList(){ getJumpTypeList() {
getJumpTypeList().then(response => { getJumpTypeList().then(response => {
this.jumpList = response.data this.jumpList = response.data
}); })
}, },
handleSendType(item) { handleSendType(item) {
this.form.sendType = item; this.form.sendType = item
}, },
handleJumpType(item) { handleJumpType(item) {
this.form.jumpType = item; this.form.jumpType = item
this.isUrl = item == 6 ? true : false
}, },
handleRadio(item) { handleRadio(item) {
if(item == 3) { if (item == 3) {
this.showPic = true; this.showPic = true
} else { } else {
this.showPic = false; this.showPic = false
} }
}, },
handleTypeChange(item) { handleTypeChange(item) {
this.listQuery.type = item; this.listQuery.type = item
}, },
handleSizeChange(val) { handleSizeChange(val) {
this.listQuery.limit = val; this.listQuery.limit = val
this.getList(); this.getList()
}, },
handleCurrentChange(val) { handleCurrentChange(val) {
this.listQuery.page = val; this.listQuery.page = val
this.getList(); this.getList()
}, },
/** /**
* 添加 * 添加
* */ * */
handleCreate() { handleCreate() {
this.cleanForm(); this.cleanForm()
this.modalTitle = '创建'; this.modalTitle = '创建'
this.bannerDialogVisible = true; this.bannerDialogVisible = true
}, },
/** /**
* 操作-编辑 * 操作-编辑
* */ * */
handleUpdate(row) { handleUpdate(row) {
this.modalTitle = '编辑'; this.modalTitle = '编辑'
this.cleanForm(); this.cleanForm()
getObj(row.id).then(response => { getObj(row.id).then(response => {
var item = response.data; var item = response.data
item.up_name = item.timeType==0?'不限':item.timeType==1?'自定义':''; item.up_name =
if(item.startTime>0&&item.timeType==1){ item.timeType == 0
item.starTimeStr = getYMD_hm(item.startTime); ? '不限'
}else{ : item.timeType == 1
item.starTimeStr = ''; ? '自定义'
: ''
if (item.startTime > 0 && item.timeType == 1) {
item.starTimeStr = getYMD_hm(item.startTime)
} else {
item.starTimeStr = ''
} }
if(item.endTime>0&&item.timeType==1){ if (item.endTime > 0 && item.timeType == 1) {
item.endTimeStr = getYMD_hm(item.endTime); item.endTimeStr = getYMD_hm(item.endTime)
} else {
item.endTimeStr = ''
}
this.form = item
if(item.jumpType == 6){
this.isUrl = true
}else{ }else{
item.endTimeStr = ''; this.isUrl = false
}
if (!!item.urlJson) {
this.form.url = JSON.parse(item.urlJson).url
this.form.info = JSON.parse(item.urlJson).title
} }
this.form = item;
this.bannerDialogVisible = true;
})
this.bannerDialogVisible = true
})
}, },
/** /**
* 弹框-取消 * 弹框-取消
* */ * */
cancelHandel(){ cancelHandel() {
this.cleanForm(); this.cleanForm()
this.bannerDialogVisible = false; this.bannerDialogVisible = false
}, },
/** /**
* 清空表单 * 清空表单
* */ * */
cleanForm() { cleanForm() {
this.form = { this.form = {
type:1, type: 1,
title:'', title: '',
alert:'', alert: '',
style:1, style: 1,
bigPicPath:'', bigPicPath: '',
sendType:0, sendType: 0,
jumpType:0, jumpType: 0,
url: '',
info: '',
urlJson: {}
} }
}, },
/** /**
* 获取banner列表数据 * 获取banner列表数据
* */ * */
getList() { getList() {
this.listLoading = true; this.listLoading = true
getPushList(this.listQuery).then(response => { getPushList(this.listQuery).then(response => {
let totalCountRs = undefined; let totalCountRs = undefined
let listRs = undefined; let listRs = undefined
if (!this.$utils.isEmpty(response.data.data) && this.$utils.isInteger(response.data.totalCount)) { if (
listRs = response.data.data; !this.$utils.isEmpty(response.data.data) &&
response.data.data.map(function(item){ this.$utils.isInteger(response.data.totalCount)
item.crtTimeStr = timestamp2Date(item.crtTime); ) {
item.alerts = item.alert; listRs = response.data.data
item.visible2 = false; response.data.data.map(function(item) {
}); item.crtTimeStr = timestamp2Date(item.crtTime)
totalCountRs = response.data.totalCount; item.alerts = item.alert
item.visible2 = false
})
totalCountRs = response.data.totalCount
} }
this.listLoading = false; this.listLoading = false
this.list = listRs; this.list = listRs
this.total = totalCountRs; this.total = totalCountRs
}); })
}, },
/** /**
* 创建 * 创建
* */ * */
create(formName) { create(formName) {
let that = this; let that = this
const set = this.$refs; const set = this.$refs
set[formName].validate(valid => { set[formName].validate(valid => {
if (valid) { if (valid) {
this.form.urlJson = {
url: this.form.url,
title: this.form.title
}
this.form.urlJson = JSON.stringify(this.form.urlJson)
addObj(this.form).then(response => { addObj(this.form).then(response => {
if (response.status === 200) { if (response.status === 200) {
this.bannerDialogVisible = false; this.bannerDialogVisible = false
this.$notify({ this.$notify({
title: '成功', title: '成功',
message: '创建成功', message: '创建成功',
type: 'success', type: 'success',
duration: 2000 duration: 2000
}); })
this.getList(); this.getList()
} else { } else {
this.$notify({ this.$notify({
title: '失败', title: '失败',
message: rsCode.msg[response.code] ? rsCode.msg[response.code] : '操作失败!', message: rsCode.msg[response.code]
? rsCode.msg[response.code]
: '操作失败!',
type: 'error', type: 'error',
duration: 2000 duration: 2000
}); })
} }
}); })
} else { } else {
return false; return false
} }
}); })
}, },
/** /**
* 编辑-更新 * 编辑-更新
* */ * */
update(formName) { update(formName) {
let that = this; let that = this
const set = this.$refs; const set = this.$refs
set[formName].validate(valid => { set[formName].validate(valid => {
if (valid) { if (valid) {
console.log(this.form); this.form.urlJson = {
url: this.form.url,
title: this.form.title
}
this.form.urlJson = JSON.stringify(this.form.urlJson)
editObj(this.form).then(response => { editObj(this.form).then(response => {
if (response.status === 200) { if (response.status === 200) {
this.bannerDialogVisible = false; this.bannerDialogVisible = false
this.$notify({ this.$notify({
title: '成功', title: '成功',
message: '编辑成功', message: '编辑成功',
type: 'success', type: 'success',
duration: 2000 duration: 2000
}); })
this.getList(); this.getList()
} else { } else {
this.$notify({ this.$notify({
title: '失败', title: '失败',
message: rsCode.msg[response.code] ? rsCode.msg[response.code] : '操作失败!', message: rsCode.msg[response.code]
? rsCode.msg[response.code]
: '操作失败!',
type: 'error', type: 'error',
duration: 2000 duration: 2000
}); })
} }
}); })
} else { } else {
return false; return false
} }
}); })
}, },
/** /**
* 上传图片 * 上传图片
...@@ -431,21 +533,22 @@ ...@@ -431,21 +533,22 @@
* @returns {boolean} * @returns {boolean}
*/ */
beforeAvatarUpload(file) { beforeAvatarUpload(file) {
const isJPG = file.type === 'image/jpeg' || file.type === 'image/gif'; const isJPG =
const isLt2M = file.size / 1024 / 1024 < 10; file.type === 'image/jpeg' || file.type === 'image/gif'
const isLt2M = file.size / 1024 / 1024 < 10
if (!isJPG) { if (!isJPG) {
this.$message.error('上传图片只能是 JPG/GIF 格式!'); this.$message.error('上传图片只能是 JPG/GIF 格式!')
} }
if (!isLt2M) { if (!isLt2M) {
this.$message.error('上传图片大小不能超过 10MB!'); this.$message.error('上传图片大小不能超过 10MB!')
} }
this.showLoadingBody = true; this.showLoadingBody = true
return isJPG && isLt2M; return isJPG && isLt2M
}, },
handleAvatarSuccess(res, file) { handleAvatarSuccess(res, file) {
this.form.bigPicPath = res.data; this.form.bigPicPath = res.data
this.showLoadingBody = false; this.showLoadingBody = false
}, },
/** /**
* 操作-删除 * 操作-删除
...@@ -463,19 +566,20 @@ ...@@ -463,19 +566,20 @@
message: '删除成功', message: '删除成功',
type: 'success', type: 'success',
duration: 2000 duration: 2000
}); })
this.getList(); this.getList()
} else { } else {
this.$notify({ this.$notify({
title: '删除失败', title: '删除失败',
message: rsCode.msg[response.code] ? rsCode.msg[response.code] : '操作失败!', message: rsCode.msg[response.code]
? rsCode.msg[response.code]
: '操作失败!',
type: 'error', type: 'error',
duration: 2000 duration: 2000
}); })
} }
});
}) })
})
}, },
/** /**
* 操作-推送 * 操作-推送
...@@ -486,7 +590,7 @@ ...@@ -486,7 +590,7 @@
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
this.pushQuery.id=row.id this.pushQuery.id = row.id
pushStype(this.pushQuery).then(response => { pushStype(this.pushQuery).then(response => {
if (response.status === 200) { if (response.status === 200) {
this.$notify({ this.$notify({
...@@ -494,20 +598,21 @@ ...@@ -494,20 +598,21 @@
message: '推送成功', message: '推送成功',
type: 'success', type: 'success',
duration: 2000 duration: 2000
}); })
this.getList(); this.getList()
} else { } else {
this.$notify({ this.$notify({
title: '推送失败', title: '推送失败',
message: rsCode.msg[response.code] ? rsCode.msg[response.code] : '操作失败!', message: rsCode.msg[response.code]
? rsCode.msg[response.code]
: '操作失败!',
type: 'error', type: 'error',
duration: 2000 duration: 2000
}); })
} }
});
}) })
})
},
} }
} }
}
</script> </script>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment