提交 5e820a92 编写于 作者: 1 18356073052

Merge remote-tracking branch 'origin/master'

...@@ -210,7 +210,7 @@ com.linkwechat ...@@ -210,7 +210,7 @@ com.linkwechat
### 联系作者加入群 ### 联系作者加入群
![输入图片说明](https://images.gitee.com/uploads/images/2020/1217/152441_79fbd2f6_409467.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2020/1226/183631_251ea80c_409467.png "屏幕截图.png")
### 特别鸣谢 ### 特别鸣谢
......
...@@ -40,3 +40,21 @@ export function add(data) { ...@@ -40,3 +40,21 @@ export function add(data) {
data, data,
}) })
} }
/**
*
* @param {*} data
* {
* sender:创建人
content:内容
pushType:群发类型 0 发给客户 1 发给客户群
beginTime:开始时间
endTime:结束时间}
*/
export function getList(data) {
return request({
url: service + '/list',
method: 'get',
data,
})
}
...@@ -149,3 +149,18 @@ export function removeTree(ids) { ...@@ -149,3 +149,18 @@ export function removeTree(ids) {
method: 'DELETE', method: 'DELETE',
}) })
} }
/**
* 获取素材media_id
* @param {*} data
* url [string] 是 素材路径
type [string] 是 素材类型
name [string] 是 文件名称
*/
export function getMaterialMediaId(data) {
return request({
url: service + '/temporaryMaterialMediaId',
method: 'POST',
data,
})
}
<template>
<div class="content">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="根据员工检测" name="1">
<employee></employee>
</el-tab-pane>
<el-tab-pane label="根据用户检测" name="2">
<user></user>
</el-tab-pane>
<el-tab-pane label="全局检测" name="3">
<role></role>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import employee from './page/employeeTest.vue'
import user from './page/userTest.vue'
import role from './page/roleTest.vue'
export default {
components:{employee,user,role},
data() {
return {
activeName: '1',
}
},
methods: {
handleClick(tab, event) {
console.log(tab, event);
}
}
}
</script>
<template>
<div class="employ">
<el-row>
<el-col :span="6" class="borderR">
<div class="hd_box">
<div class="hd_name">成员({{employAmount}}</div>
<div class="paddingT10">
<el-input placeholder="请输入内容" prefix-icon="el-icon-search" v-model="employName">
</el-input>
</div>
</div>
<div class="ct_box ct_boxFirst">
<el-tree class="filter-tree" :data="data" :filter-node-method="filterNode" ref="tree"
@node-click="handleNodeClick">
</el-tree>
</div>
</el-col>
<el-col :span="6" class="borderR">
<div class="hd_box">
<div class="hd_name">{{talkName}}</div>
</div>
<div class="hd_tabs">
<el-tabs v-model="activeName">
<el-tab-pane label="内部联系人" name="0">
<div class="ct_box">
<!-- 应该是类似聊天记录的 后期弄成组件 看 -->
暂无联系人
</div>
</el-tab-pane>
<el-tab-pane label="外部联系人" name="1">
<div class="ct_box">
<!-- ! -->
暂无联系人
</div>
</el-tab-pane>
<el-tab-pane label="群聊" name="2">
<div class="ct_box">
<!-- ! -->
暂无联系人
</div>
</el-tab-pane>
</el-tabs>
</div>
</el-col>
<el-col :span="12">
<div class="hd_box">
<div class="hd_name hd_nameRi">下载会话</div>
</div>
<div class=" hd_tabthree">
<el-tabs v-model="activeNameThree">
<el-tab-pane label="全部" name="0">
<div class="ct_box">
<div class="hds_time">
<el-date-picker v-model="takeTime" type="date" placeholder="选择日期">
</el-date-picker>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="图片及视频" name="1">
<div class="ct_box">
<div class="hds_time">
<el-date-picker v-model="takeTime" type="date" placeholder="选择日期">
</el-date-picker>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="文件" name="3">
<div class="ct_box">
<div class="hds_time">
<el-date-picker v-model="takeTime" type="date" placeholder="选择日期">
</el-date-picker>
</div>
<el-table :data="fileData" stripe style="width: 100%" :header-cell-style="{background:'#fff'}">
<el-table-column prop="date" label="类型">
</el-table-column>
<el-table-column prop="name" label="名称">
</el-table-column>
<el-table-column prop="address" label="大小">
</el-table-column>
<el-table-column prop="address" label="来源">
</el-table-column>
<el-table-column prop="address" label="操作">
</el-table-column>
</el-table>
</div>
</el-tab-pane>
<el-tab-pane label="链接" name="4">
<div class="ct_box">
<div class="hds_time">
<el-date-picker v-model="takeTime" type="date" placeholder="选择日期">
</el-date-picker>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="语音通话" name="5">
<div class="ct_box">
<div class="hds_time">
<el-date-picker v-model="takeTime" type="date" placeholder="选择日期">
</el-date-picker>
</div>
<el-table :data="fileData" stripe style="width: 100%" :header-cell-style="{background:'#fff'}">
<el-table-column prop="date" label="发起人">
</el-table-column>
<el-table-column prop="name" label="通话时间">
</el-table-column>
<el-table-column prop="address" label="时长">
</el-table-column>
<el-table-column prop="address" label="操作">
</el-table-column>
</el-table>
</div>
</el-tab-pane>
</el-tabs>
</div>
</el-col>
</el-row>
</div>
</template>
<script>
export default {
data() {
return {
employAmount: 1,
employName: '',
talkName: '',
data: [{
id: 1,
label: '一级 1',
children: [{
id: 4,
label: '二级 1-1',
children: [{
id: 9,
label: '三级 1-1-1'
}, {
id: 10,
label: '三级 1-1-2'
}]
}]
}, {
id: 3,
label: '一级 3',
children: [{
id: 7,
label: '二级 3-1'
}, {
id: 8,
label: '二级 3-2'
}]
}],
activeName: "1",
activeNameThree: '1',
takeTime: '',
fileData: []
};
},
watch: {
employName(val) {
this.$refs.tree.filter(val);
}
},
methods: {
filterNode(value, data) {
if (!value) return true;
return data.label.indexOf(value) !== -1;
},
handleNodeClick(data) {
if (!data.children) {
console.log(data.label)
this.talkName = data.label
}
}
}
}
</script>
<style lang="scss" scoped>
/deep/ #tab-0 {
text-indent: 15px;
}
.borderR {
border-right: 2px solid #ccc;
}
.paddingT10 {
padding-top: 10px
}
.employ {
background: #f6f6f9;
min-height: 800px;
.hd_tabs {
background: #fff;
}
.hd_tabthree {
/deep/ .el-tabs__header {
margin: 0;
}
}
.hd_box {
padding: 15px;
}
.hd_name {
font-size: 18px;
min-height: 20px;
}
.hd_nameRi {
color: #199ed8;
text-align: right;
font-size: 16px;
cursor: pointer;
}
.ct_boxFirst {
height: 720px;
}
.ct_box {
background: white;
min-height: 710px;
padding: 10px;
overflow-y: scroll;
color: #999;
text-align: center;
::-webkit-scrollbar {
display: none;
}
.hds_time {
float: left;
padding: 10px 0;
}
}
}
</style>
\ No newline at end of file
<template>
<div>
<el-form :inline="true" :model="form" class="demo-form-inline">
<el-row>
<el-form-item label="员工名称">
<el-select v-model="form.Ename" placeholder="员工名称" style="width:300px">
</el-select>
</el-form-item>
<el-form-item label="客户名称">
<el-input v-model="form.Cname" placeholder="客户名称" style="width:300px"></el-input>
</el-form-item>
</el-row>
<el-row>
<el-form-item label="查找内容">
<el-input v-model="form.Scontent" placeholder="查找内容" style="width:300px"></el-input>
</el-form-item>
<el-form-item label="时间范围">
<el-time-picker is-range v-model="form.Stime" range-separator="至" start-placeholder="开始时间"
end-placeholder="结束时间" placeholder="选择时间范围">
</el-time-picker>
</el-form-item>
</el-row>
<el-row>
<el-form-item>
<el-button type="primary">查询</el-button>
</el-form-item>
<el-form-item>
<el-button>导出列表</el-button>
</el-form-item>
</el-row>
</el-form>
<div class="content">
<el-table :data="fileData" stripe style="width: 100%" :header-cell-style="{background:'#fff'}">
<el-table-column prop="date" label="发送者" width="200">
</el-table-column>
<el-table-column prop="name" label=" 内容">
</el-table-column>
<el-table-column label="消息状态" width="200">
<template slot="header" >
{{floorRange}}
<el-select size="mini" v-model="floorRange" class="noborder" @change="chechName(floorRange)">
<el-option v-for="item in displayOptions" :key="item.value" :label="item.label"
:value="item.value">
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="address" label="发送时间" width="200">
</el-table-column>
</el-table>
<el-pagination
:page-size="20"
style="padding:10px"
:pager-count="11"
layout="prev, pager, next"
:total="1000">
</el-pagination>
</div>
</div>
</template>
<script>
export default {
data() {
return {
form: {
Ename: "",
Cname: '',
Scontent: '',
Stime: ''
},
fileData: [],
floorRange:'全部',
displayOptions: [{
value: "0",
label: "全部"
},
{
value: "1",
label: "已发送"
},
{
value: "2",
label: "已撤回"
},
{
value: "3",
label: "切回企业日志"
}
]
}
},
methods:{
chechName(e){
if(e==0){
this.floorRange='全部'
}
else if(e==1){
this.floorRange='已发送'
}else if(e==2){
this.floorRange='已撤回'
}else{
this.floorRange='切回企业日志'
}
}
}
}
</script>
<style lang="scss" scoped>
.demo-form-inline {
background: #efefef;
padding: 18px 10px 0 10px;
}
.content {
margin-top: 15px;
padding: 10px;
}
.noborder {
/deep/ .el-input--mini .el-input__inner{width: 2px;border:none}
}
</style>
\ No newline at end of file
<template>
<div class="employ">
<el-row>
<el-col :span="6" class="borderR">
<div class="hd_box">
<div class="hd_name">客户列表({{employAmount}}</div>
<div class="paddingT10">
<el-input placeholder="搜索客户" prefix-icon="el-icon-search" v-model="employName">
</el-input>
</div>
</div>
<div class="ct_box ct_boxFirst">
<ul>
<li v-for="(i,t) in 49" :key="t" @click="personCheck(i,t)" :class="{'liActive':t==personIndex}">
<el-row :gutter="20">
<el-col :span="4"> <img
src="http://wx.qlogo.cn/mmhead/pburdzLK7PV4ZRaUcsb0X4ssicO9TqpQHZa26oHRvb1ONZT1r3dI0Aw/0"
alt=""></el-col>
<el-col :span="16"><span style="line-height:40px">{{i}}</span></el-col>
</el-row>
</li>
</ul>
</div>
</el-col>
<el-col :span="6" class="borderR">
<div class="hd_box">
<div class="hd_name">{{talkName}}</div>
<div class="paddingT10">
<el-input placeholder="搜索聊天记录" prefix-icon="el-icon-search" v-model="employName">
</el-input>
</div>
</div>
<div class="ct_box
"> <div class="hd_tabs">
<el-tabs v-model="activeName">
<el-tab-pane label="单聊" name="0">
<div class="ct_box">
暂无联系人
</div>
</el-tab-pane>
<el-tab-pane label="群聊" name="1">
<div class="ct_box">
暂无群聊记录
</div>
</el-tab-pane>
</el-tabs>
</div></div>
</el-col>
<el-col :span="12">
<div class="hd_box">
<div class="hd_name hd_nameRi">下载会话</div>
</div>
<div class=" hd_tabthree">
<el-tabs v-model="activeNameThree">
<el-tab-pane label="全部" name="0">
<div class="ct_box">
<div class="hds_time">
<el-date-picker v-model="takeTime" type="date" placeholder="选择日期">
</el-date-picker>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="图片及视频" name="1">
<div class="ct_box">
<div class="hds_time">
<el-date-picker v-model="takeTime" type="date" placeholder="选择日期">
</el-date-picker>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="文件" name="3">
<div class="ct_box">
<div class="hds_time">
<el-date-picker v-model="takeTime" type="date" placeholder="选择日期">
</el-date-picker>
</div>
<el-table :data="fileData" stripe style="width: 100%"
:header-cell-style="{background:'#fff'}">
<el-table-column prop="date" label="类型">
</el-table-column>
<el-table-column prop="name" label="名称">
</el-table-column>
<el-table-column prop="address" label="大小">
</el-table-column>
<el-table-column prop="address" label="来源">
</el-table-column>
<el-table-column prop="address" label="操作">
</el-table-column>
</el-table>
</div>
</el-tab-pane>
<el-tab-pane label="链接" name="4">
<div class="ct_box">
<div class="hds_time">
<el-date-picker v-model="takeTime" type="date" placeholder="选择日期">
</el-date-picker>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="语音通话" name="5">
<div class="ct_box">
<div class="hds_time">
<el-date-picker v-model="takeTime" type="date" placeholder="选择日期">
</el-date-picker>
</div>
<el-table :data="fileData" stripe style="width: 100%"
:header-cell-style="{background:'#fff'}">
<el-table-column prop="date" label="发起人">
</el-table-column>
<el-table-column prop="name" label="通话时间">
</el-table-column>
<el-table-column prop="address" label="时长">
</el-table-column>
<el-table-column prop="address" label="操作">
</el-table-column>
</el-table>
</div>
</el-tab-pane>
</el-tabs>
</div>
</el-col>
</el-row>
</div>
</template>
<script>
export default {
data() {
return {
employAmount: 1,
employName: '',
talkName: '',
personIndex: '-1',
activeName: "1",
activeNameThree: '1',
takeTime: '',
fileData: []
};
},
methods: {
personCheck(name, e) {
this.personIndex = e
this.talkName = name
}
}
}
</script>
<style lang="scss" scoped>
/deep/ #tab-0 {
text-indent: 15px;
}
.borderR {
border-right: 2px solid #ccc;
}
.paddingT10 {
padding-top: 10px
}
.employ {
background: #f6f6f9;
min-height: 800px;
.hd_tabs {
background: #fff;
}
.hd_tabthree {
/deep/ .el-tabs__header {
margin: 0;
}
}
.hd_box {
padding: 15px;
}
.hd_name {
font-size: 18px;
min-height: 20px;
}
.hd_nameRi {
color: #199ed8;
text-align: right;
font-size: 16px;
cursor: pointer;
}
.ct_boxFirst {
height: 720px;
}
.ct_box {
background: white;
min-height: 710px;
padding: 10px;
overflow-y: scroll;
color: #999;
text-align: center;
::-webkit-scrollbar {
display: none;
}
ul {
margin: 0;
padding: 0;
}
ul li {
margin-bottom: 3px;
padding: 10px 20px;
text-align: left;
cursor: pointer;
border-bottom: 1px solid #efefef;
img {
width: 40px;
}
;
}
.liActive {
background: lightblue !important;
color: #fff;
}
.hds_time {
float: left;
padding: 10px 0;
}
}
}
</style>
\ No newline at end of file
...@@ -78,7 +78,7 @@ export default { ...@@ -78,7 +78,7 @@ export default {
this.list = rows this.list = rows
this.total = +total this.total = +total
this.loading = false this.loading = false
this.multipleSelection = [] this.ids = []
}) })
.catch(() => { .catch(() => {
this.loading = false this.loading = false
...@@ -129,41 +129,43 @@ export default { ...@@ -129,41 +129,43 @@ export default {
this.getList(1) this.getList(1)
}) })
}, },
download(id,userName,activityScene){ download(id, userName, activityScene) {
let name = userName+"-"+activityScene+".png" let name = userName + '-' + activityScene + '.png'
download(id).then((res) =>{ download(id).then((res) => {
if (res!=null) { if (res != null) {
let blob = new Blob([res], {type: 'application/zip'}); let blob = new Blob([res], { type: 'application/zip' })
let url = window.URL.createObjectURL(blob); let url = window.URL.createObjectURL(blob)
const link = document.createElement('a'); // 创建a标签 const link = document.createElement('a') // 创建a标签
link.href = url; link.href = url
link.download = name; // 重命名文件 link.download = name // 重命名文件
link.click(); link.click()
URL.revokeObjectURL(url); // 释放内存 URL.revokeObjectURL(url) // 释放内存
} }
}) })
}, },
/** 下载 */ /** 下载 */
downloadBatch(qrCode) { downloadBatch(qrCode) {
this.$confirm('是否确认下载所有图片吗?', '警告', { this.$confirm('是否确认下载所有图片吗?', '警告', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning', type: 'warning',
})
.then(() => {
return downloadBatch(this.ids + '')
// window.open(downloadBatch(this.ids))
}) })
.then(() => { .then((res) => {
return downloadBatch(this.ids + '') if (res != null) {
// window.open(downloadBatch(this.ids)) let blob = new Blob([res], { type: 'application/zip' })
}).then((res) =>{ let url = window.URL.createObjectURL(blob)
if (res!=null) { const link = document.createElement('a') // 创建a标签
let blob = new Blob([res], {type: 'application/zip'}); link.href = url
let url = window.URL.createObjectURL(blob); link.download = '批量员工活码.zip' // 重命名文件
const link = document.createElement('a'); // 创建a标签 link.click()
link.href = url; URL.revokeObjectURL(url) // 释放内存
link.download = '批量员工活码.zip'; // 重命名文件
link.click();
URL.revokeObjectURL(url); // 释放内存
} }
}).catch(function() {}) })
.catch(function() {})
}, },
}, },
} }
...@@ -171,14 +173,19 @@ export default { ...@@ -171,14 +173,19 @@ export default {
<template> <template>
<div> <div>
<el-form :model="query" ref="queryForm" :inline="true" label-width="100px"> <el-form
:model="query"
ref="queryForm"
:inline="true"
label-width="100px"
class="top-search"
>
<el-form-item label="使用员工"> <el-form-item label="使用员工">
<el-input <el-input
v-model="query.useUserName" v-model="query.useUserName"
placeholder="请输入" placeholder="请输入"
clearable clearable
style="width: 240px;" @keyup.enter.native="getList(1)"
@keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<!-- <el-form-item label="姓名"> <!-- <el-form-item label="姓名">
...@@ -186,8 +193,7 @@ export default { ...@@ -186,8 +193,7 @@ export default {
v-model="query.operName" v-model="query.operName"
placeholder="请输入" placeholder="请输入"
clearable clearable
style="width: 240px;" @keyup.enter.native="getList(1)"
@keyup.enter.native="handleQuery"
/> />
</el-form-item> --> </el-form-item> -->
<el-form-item label="手机号"> <el-form-item label="手机号">
...@@ -195,8 +201,7 @@ export default { ...@@ -195,8 +201,7 @@ export default {
v-model="query.mobile" v-model="query.mobile"
placeholder="请输入" placeholder="请输入"
clearable clearable
style="width: 240px;" @keyup.enter.native="getList(1)"
@keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="活动场景"> <el-form-item label="活动场景">
...@@ -204,8 +209,7 @@ export default { ...@@ -204,8 +209,7 @@ export default {
v-model="query.activityScene" v-model="query.activityScene"
placeholder="请输入" placeholder="请输入"
clearable clearable
style="width: 240px;" @keyup.enter.native="getList(1)"
@keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="创建人"> <el-form-item label="创建人">
...@@ -213,14 +217,12 @@ export default { ...@@ -213,14 +217,12 @@ export default {
v-model="query.createBy" v-model="query.createBy"
placeholder="请输入" placeholder="请输入"
clearable clearable
style="width: 240px;" @keyup.enter.native="getList(1)"
@keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="创建日期"> <el-form-item label="创建日期">
<el-date-picker <el-date-picker
v-model="dateRange" v-model="dateRange"
style="width: 240px"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd"
type="daterange" type="daterange"
range-separator="-" range-separator="-"
...@@ -307,7 +309,7 @@ export default { ...@@ -307,7 +309,7 @@ export default {
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<el-button <el-button
type="text" type="text"
@click="download(row.id,row.useUserName,row.activityScene)" @click="download(row.id, row.useUserName, row.activityScene)"
v-hasPermi="['monitor:operlog:query']" v-hasPermi="['monitor:operlog:query']"
>下载</el-button >下载</el-button
> >
......
<script> <script>
import { add } from '@/api/groupMessage' import { add } from '@/api/groupMessage'
import { getMaterialMediaId } from '@/api/material'
import PhoneDialog from '@/components/PhoneDialog' import PhoneDialog from '@/components/PhoneDialog'
import SelectUser from '@/components/SelectUser' import SelectUser from '@/components/SelectUser'
import SelectTag from '@/components/SelectTag' import SelectTag from '@/components/SelectTag'
...@@ -103,19 +104,36 @@ export default { ...@@ -103,19 +104,36 @@ export default {
// 选择素材确认按钮 // 选择素材确认按钮
submitSelectMaterial(text, image, file) { submitSelectMaterial(text, image, file) {
this.form.textMessage.content = text.content this.form.textMessage.content = text.content
this.form.imageMessage.media_id = image.id // this.form.imageMessage.media_id = image.id
this.form.imageMessage.pic_url = image.materialUrl this.form.imageMessage.pic_url = image.materialUrl
this.form.imageMessage._materialName = image.materialName
}, },
submit() { submit() {
let form = JSON.parse(JSON.stringify(this.form)) let form = JSON.parse(JSON.stringify(this.form))
form.tag = form.tag.map((d) => d.tagId) + '' Promise.resolve(() => {
form.department += '' if (form.messageType == 1) {
form.staffId += '' // debugger
add(form) let dataMediaId = {
url: form.imageMessage.pic_url,
type: '0',
name: form.imageMessage._materialName,
}
return getMaterialMediaId(dataMediaId).then((res) => {
form.imageMessage.media_id = res.data
})
}
})
.then(() => {
form.messageType = this.activeName
form.tag = form.tag.map((d) => d.tagId) + ''
form.department += ''
form.staffId += ''
return add(form)
})
.then(({ data }) => { .then(({ data }) => {
this.msgSuccess('操作成功') this.msgSuccess('操作成功')
this.loading = false this.loading = false
this.$router.back() this.$router.push('/groupMessage/record')
}) })
.catch(() => { .catch(() => {
this.loading = false this.loading = false
......
<style lang="scss" scoped>
.mid-action {
display: flex;
justify-content: space-between;
margin: 10px 0;
align-items: center;
.total {
background-color: rgba(65, 133, 244, 0.1);
border: 1px solid rgba(65, 133, 244, 0.2);
border-radius: 3px;
font-size: 14px;
min-height: 32px;
line-height: 32px;
padding: 0 12px;
color: #606266;
}
.num {
color: #00f;
}
}
</style>
<template>
<div class="app-container">
<el-card shadow="never" :body-style="{padding: '20px 0 0'}">
<el-form
:model="queryParams"
ref="queryForm"
:inline="true"
v-show="showSearch"
label-width="100px"
>
<el-form-item label="创建人" prop="title">
<el-input
v-model="queryParams.title"
placeholder="请输入"
clearable
style="width: 240px;"
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="内容消息" prop="operName">
<el-input
v-model="queryParams.operName"
placeholder="请输入"
clearable
style="width: 240px;"
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="群发类型">
<el-select v-model="form.region" placeholder="请选择" size="small" style="width: 240px;">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
</el-select>
</el-form-item>
<el-form-item label="创建日期">
<el-date-picker
v-model="dateRange"
size="small"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item label=" ">
<el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">查询</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="消息内容" align="center" prop="operId" />
<el-table-column label="群发类型" align="center" prop="title" />
<el-table-column label="创建人" align="center" prop="businessType" :formatter="typeFormat" />
<el-table-column label="创建时间" align="center" prop="operTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.operTime) }}</span>
</template>
</el-table-column>
<el-table-column label="发送情况" align="center" prop="operId">
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</div>
</template>
<script> <script>
import { getList } from '@/api/groupMessage'
export default { export default {
name: "Operlog", name: 'Operlog',
data() { data() {
return { return {
// 遮罩层 // 遮罩层
loading: false, loading: false,
// 选中数组 // 选中数组
ids: [], ids: [],
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数 // 总条数
total: 0, total: 0,
// 表格数据 // 表格数据
list: [], list: [],
// 是否显示弹出层
open: false,
// 类型数据字典
typeOptions: [],
// 类型数据字典
statusOptions: [],
// 日期范围 // 日期范围
dateRange: [], dateRange: [],
// 表单参数
form: {},
// 查询参数 // 查询参数
queryParams: { query: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
title: undefined, sender: undefined,
operName: undefined, content: undefined,
businessType: undefined, pushType: undefined,
status: undefined, beginTime: undefined,
endTime: undefined,
}, },
}; pushType: {
0: '发给客户',
1: '发给客户群',
},
pickerOptions: {
disabledDate(time) {
return time.getTime() > Date.now() // 选当前时间之前的时间
},
},
}
}, },
created() { created() {
this.getList(); this.getList()
this.getDicts("sys_oper_type").then((response) => {
this.typeOptions = response.data;
});
this.getDicts("sys_common_status").then((response) => {
this.statusOptions = response.data;
});
}, },
methods: { methods: {
/** 查询登录日志 */ getList(page) {
getList() { if (this.dateRange[0]) {
this.loading = false; this.query.beginTime = this.dateRange[0]
list(this.addDateRange(this.queryParams, this.dateRange)).then( this.query.endTime = this.dateRange[1]
(response) => { } else {
this.list = response.rows; this.query.beginTime = ''
this.total = response.total; this.query.endTime = ''
this.loading = false; }
} page && (this.query.pageNum = page)
); this.loading = true
}, getList(this.query)
// 操作日志状态字典翻译 .then(({ rows, total }) => {
statusFormat(row, column) { this.list = rows
return this.selectDictLabel(this.statusOptions, row.status); this.total = +total
}, this.loading = false
// 操作日志类型字典翻译 this.ids = []
typeFormat(row, column) { })
return this.selectDictLabel(this.typeOptions, row.businessType); .catch(() => {
}, this.loading = false
/** 搜索按钮操作 */ })
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
}, },
/** 重置按钮操作 */ /** 重置按钮操作 */
resetQuery() { resetQuery() {
this.dateRange = []; this.dateRange = []
this.resetForm("queryForm"); this.resetForm('queryForm')
this.handleQuery(); this.getList(1)
}, },
// 多选框选中数据 // 多选框选中数据
handleSelectionChange(selection) { handleSelectionChange(selection) {
this.ids = selection.map((item) => item.operId); this.ids = selection.map((item) => item.id)
this.multiple = !selection.length;
},
/** 详细按钮操作 */
handleView(row) {
this.open = true;
this.form = row;
}, },
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
const operIds = row.operId || this.ids; const operIds = row.operId || this.ids
this.$confirm( this.$confirm(
'是否确认删除日志编号为"' + operIds + '"的数据项?', '是否确认删除日志编号为"' + operIds + '"的数据项?',
"警告", '警告',
{ {
confirmButtonText: "确定", confirmButtonText: '确定',
cancelButtonText: "取消", cancelButtonText: '取消',
type: "warning", type: 'warning',
} }
) )
.then(function () { .then(function() {})
return delOperlog(operIds);
})
.then(() => { .then(() => {
this.getList(); this.getList()
this.msgSuccess("删除成功"); this.msgSuccess('删除成功')
}) })
.catch(function () {}); .catch(function() {})
},
/** 清空按钮操作 */
handleClean() {
this.$confirm("是否确认清空所有操作日志数据项?", "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(function () {
return cleanOperlog();
})
.then(() => {
this.getList();
this.msgSuccess("清空成功");
})
.catch(function () {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$confirm("是否确认导出所有操作日志数据项?", "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(function () {
return exportOperlog(queryParams);
})
.then((response) => {
this.download(response.msg);
})
.catch(function () {});
}, },
}, },
}; }
</script> </script>
\ No newline at end of file <template>
<div>
<el-form
:model="query"
ref="queryForm"
:inline="true"
class="top-search"
label-width="100px"
>
<el-form-item label="创建人">
<el-input
v-model="query.sender"
placeholder="请输入"
clearable
@keyup.enter.native="getList(1)"
/>
</el-form-item>
<el-form-item label="内容消息">
<el-input
v-model="query.content"
placeholder="请输入"
clearable
@keyup.enter.native="getList(1)"
/>
</el-form-item>
<el-form-item label="群发类型">
<el-select v-model="query.pushType" placeholder="请选择" size="small">
<el-option
v-for="(value, key, index) in pushType"
:label="value"
:value="key"
:key="index"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="创建日期">
<el-date-picker
:picker-options="pickerOptions"
v-model="dateRange"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item label=" ">
<el-button type="cyan" icon="el-icon-search" @click="getList(1)"
>查询</el-button
>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table
v-loading="loading"
:data="list"
@selection-change="handleSelectionChange"
>
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column label="消息内容" align="center" prop="content" />
<el-table-column label="群发类型" align="center">
<template slot-scope="scope">
{{ pushType[scope.row.pushType] }}
</template>
</el-table-column>
<el-table-column label="创建人" align="center" prop="businessType" />
<el-table-column
label="创建时间"
align="center"
prop="sendTime"
width="180"
>
</el-table-column>
<el-table-column label="发送情况" align="center" prop="sendInfo">
<template slot-scope="scope">
{{ pushType[scope.row.sendInfo] }}
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="query.pageNum"
:limit.sync="query.pageSize"
@pagination="getList()"
/>
</div>
</template>
<style lang="scss" scoped>
.mid-action {
display: flex;
justify-content: space-between;
margin: 10px 0;
align-items: center;
.total {
background-color: rgba(65, 133, 244, 0.1);
border: 1px solid rgba(65, 133, 244, 0.2);
border-radius: 3px;
font-size: 14px;
min-height: 32px;
line-height: 32px;
padding: 0 12px;
color: #606266;
}
.num {
color: #00f;
}
}
</style>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册