Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
仟微科技
Link Wechat
提交
5e820a92
Link Wechat
项目概览
仟微科技
/
Link Wechat
通知
48
Star
3
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Link Wechat
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5e820a92
编写于
12月 27, 2020
作者:
1
18356073052
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/master'
上级
024c06e0
071aaeb1
变更
10
显示空白变更内容
内联
并排
Showing
10 changed file
with
909 addition
and
253 deletion
+909
-253
README.md
README.md
+1
-1
linkwe-ui/src/api/groupMessage.js
linkwe-ui/src/api/groupMessage.js
+18
-0
linkwe-ui/src/api/material/index.js
linkwe-ui/src/api/material/index.js
+15
-0
linkwe-ui/src/views/conversation/content.vue
linkwe-ui/src/views/conversation/content.vue
+35
-0
linkwe-ui/src/views/conversation/page/employeeTest.vue
linkwe-ui/src/views/conversation/page/employeeTest.vue
+243
-0
linkwe-ui/src/views/conversation/page/roleTest.vue
linkwe-ui/src/views/conversation/page/roleTest.vue
+123
-0
linkwe-ui/src/views/conversation/page/userTest.vue
linkwe-ui/src/views/conversation/page/userTest.vue
+241
-0
linkwe-ui/src/views/drainageCode/staff/list.vue
linkwe-ui/src/views/drainageCode/staff/list.vue
+43
-41
linkwe-ui/src/views/groupMessage/add.vue
linkwe-ui/src/views/groupMessage/add.vue
+24
-6
linkwe-ui/src/views/groupMessage/record.vue
linkwe-ui/src/views/groupMessage/record.vue
+166
-205
未找到文件。
README.md
浏览文件 @
5e820a92
...
...
@@ -210,7 +210,7 @@ com.linkwechat
### 联系作者加入群
![
输入图片说明
](
https://images.gitee.com/uploads/images/2020/12
17/152441_79fbd2f6
_409467.png
"屏幕截图.png"
)
![
输入图片说明
](
https://images.gitee.com/uploads/images/2020/12
26/183631_251ea80c
_409467.png
"屏幕截图.png"
)
### 特别鸣谢
...
...
linkwe-ui/src/api/groupMessage.js
浏览文件 @
5e820a92
...
...
@@ -40,3 +40,21 @@ export function add(data) {
data
,
})
}
/**
*
* @param {*} data
* {
* sender:创建人
content:内容
pushType:群发类型 0 发给客户 1 发给客户群
beginTime:开始时间
endTime:结束时间}
*/
export
function
getList
(
data
)
{
return
request
({
url
:
service
+
'
/list
'
,
method
:
'
get
'
,
data
,
})
}
linkwe-ui/src/api/material/index.js
浏览文件 @
5e820a92
...
...
@@ -149,3 +149,18 @@ export function removeTree(ids) {
method
:
'
DELETE
'
,
})
}
/**
* 获取素材media_id
* @param {*} data
* url [string] 是 素材路径
type [string] 是 素材类型
name [string] 是 文件名称
*/
export
function
getMaterialMediaId
(
data
)
{
return
request
({
url
:
service
+
'
/temporaryMaterialMediaId
'
,
method
:
'
POST
'
,
data
,
})
}
linkwe-ui/src/views/conversation/content.vue
0 → 100644
浏览文件 @
5e820a92
<
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
>
linkwe-ui/src/views/conversation/page/employeeTest.vue
0 → 100644
浏览文件 @
5e820a92
<
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
linkwe-ui/src/views/conversation/page/roleTest.vue
0 → 100644
浏览文件 @
5e820a92
<
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
linkwe-ui/src/views/conversation/page/userTest.vue
0 → 100644
浏览文件 @
5e820a92
<
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
linkwe-ui/src/views/drainageCode/staff/list.vue
浏览文件 @
5e820a92
...
...
@@ -78,7 +78,7 @@ export default {
this
.
list
=
rows
this
.
total
=
+
total
this
.
loading
=
false
this
.
multipleSelection
=
[]
this
.
ids
=
[]
})
.
catch
(()
=>
{
this
.
loading
=
false
...
...
@@ -129,17 +129,17 @@ export default {
this
.
getList
(
1
)
})
},
download
(
id
,
userName
,
activityScene
)
{
let
name
=
userName
+
"
-
"
+
activityScene
+
"
.png
"
download
(
id
).
then
((
res
)
=>
{
if
(
res
!=
null
)
{
let
blob
=
new
Blob
([
res
],
{
type
:
'
application/zip
'
});
let
url
=
window
.
URL
.
createObjectURL
(
blob
)
;
const
link
=
document
.
createElement
(
'
a
'
)
;
// 创建a标签
link
.
href
=
url
;
link
.
download
=
name
;
// 重命名文件
link
.
click
()
;
URL
.
revokeObjectURL
(
url
)
;
// 释放内存
download
(
id
,
userName
,
activityScene
)
{
let
name
=
userName
+
'
-
'
+
activityScene
+
'
.png
'
download
(
id
).
then
((
res
)
=>
{
if
(
res
!=
null
)
{
let
blob
=
new
Blob
([
res
],
{
type
:
'
application/zip
'
})
let
url
=
window
.
URL
.
createObjectURL
(
blob
)
const
link
=
document
.
createElement
(
'
a
'
)
// 创建a标签
link
.
href
=
url
link
.
download
=
name
// 重命名文件
link
.
click
()
URL
.
revokeObjectURL
(
url
)
// 释放内存
}
})
},
...
...
@@ -153,17 +153,19 @@ export default {
.
then
(()
=>
{
return
downloadBatch
(
this
.
ids
+
''
)
// window.open(downloadBatch(this.ids))
}).
then
((
res
)
=>
{
if
(
res
!=
null
)
{
let
blob
=
new
Blob
([
res
],
{
type
:
'
application/zip
'
});
let
url
=
window
.
URL
.
createObjectURL
(
blob
);
const
link
=
document
.
createElement
(
'
a
'
);
// 创建a标签
link
.
href
=
url
;
link
.
download
=
'
批量员工活码.zip
'
;
// 重命名文件
link
.
click
();
URL
.
revokeObjectURL
(
url
);
// 释放内存
})
.
then
((
res
)
=>
{
if
(
res
!=
null
)
{
let
blob
=
new
Blob
([
res
],
{
type
:
'
application/zip
'
})
let
url
=
window
.
URL
.
createObjectURL
(
blob
)
const
link
=
document
.
createElement
(
'
a
'
)
// 创建a标签
link
.
href
=
url
link
.
download
=
'
批量员工活码.zip
'
// 重命名文件
link
.
click
()
URL
.
revokeObjectURL
(
url
)
// 释放内存
}
}).
catch
(
function
()
{})
})
.
catch
(
function
()
{})
},
},
}
...
...
@@ -171,14 +173,19 @@ export default {
<
template
>
<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-input
v-model=
"query.useUserName"
placeholder=
"请输入"
clearable
style=
"width: 240px;"
@
keyup.enter.native=
"handleQuery"
@
keyup.enter.native=
"getList(1)"
/>
</el-form-item>
<!--
<el-form-item
label=
"姓名"
>
...
...
@@ -186,8 +193,7 @@ export default {
v-model=
"query.operName"
placeholder=
"请输入"
clearable
style=
"width: 240px;"
@
keyup.enter.native=
"handleQuery"
@
keyup.enter.native=
"getList(1)"
/>
</el-form-item>
-->
<el-form-item
label=
"手机号"
>
...
...
@@ -195,8 +201,7 @@ export default {
v-model=
"query.mobile"
placeholder=
"请输入"
clearable
style=
"width: 240px;"
@
keyup.enter.native=
"handleQuery"
@
keyup.enter.native=
"getList(1)"
/>
</el-form-item>
<el-form-item
label=
"活动场景"
>
...
...
@@ -204,8 +209,7 @@ export default {
v-model=
"query.activityScene"
placeholder=
"请输入"
clearable
style=
"width: 240px;"
@
keyup.enter.native=
"handleQuery"
@
keyup.enter.native=
"getList(1)"
/>
</el-form-item>
<el-form-item
label=
"创建人"
>
...
...
@@ -213,14 +217,12 @@ export default {
v-model=
"query.createBy"
placeholder=
"请输入"
clearable
style=
"width: 240px;"
@
keyup.enter.native=
"handleQuery"
@
keyup.enter.native=
"getList(1)"
/>
</el-form-item>
<el-form-item
label=
"创建日期"
>
<el-date-picker
v-model=
"dateRange"
style=
"width: 240px"
value-format=
"yyyy-MM-dd"
type=
"daterange"
range-separator=
"-"
...
...
@@ -307,7 +309,7 @@ export default {
<
template
slot-scope=
"{ row }"
>
<el-button
type=
"text"
@
click=
"download(row.id,
row.useUserName,
row.activityScene)"
@
click=
"download(row.id,
row.useUserName,
row.activityScene)"
v-hasPermi=
"['monitor:operlog:query']"
>
下载
</el-button
>
...
...
linkwe-ui/src/views/groupMessage/add.vue
浏览文件 @
5e820a92
<
script
>
import
{
add
}
from
'
@/api/groupMessage
'
import
{
getMaterialMediaId
}
from
'
@/api/material
'
import
PhoneDialog
from
'
@/components/PhoneDialog
'
import
SelectUser
from
'
@/components/SelectUser
'
import
SelectTag
from
'
@/components/SelectTag
'
...
...
@@ -103,19 +104,36 @@ export default {
// 选择素材确认按钮
submitSelectMaterial
(
text
,
image
,
file
)
{
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
.
_materialName
=
image
.
materialName
},
submit
()
{
let
form
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
form
))
Promise
.
resolve
(()
=>
{
if
(
form
.
messageType
==
1
)
{
// debugger
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
+=
''
add
(
form
)
return
add
(
form
)
})
.
then
(({
data
})
=>
{
this
.
msgSuccess
(
'
操作成功
'
)
this
.
loading
=
false
this
.
$router
.
back
(
)
this
.
$router
.
push
(
'
/groupMessage/record
'
)
})
.
catch
(()
=>
{
this
.
loading
=
false
...
...
linkwe-ui/src/views/groupMessage/record.vue
浏览文件 @
5e820a92
<
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
;
<
script
>
import
{
getList
}
from
'
@/api/groupMessage
'
export
default
{
name
:
'
Operlog
'
,
data
()
{
return
{
// 遮罩层
loading
:
false
,
// 选中数组
ids
:
[],
// 总条数
total
:
0
,
// 表格数据
list
:
[],
// 日期范围
dateRange
:
[],
// 查询参数
query
:
{
pageNum
:
1
,
pageSize
:
10
,
sender
:
undefined
,
content
:
undefined
,
pushType
:
undefined
,
beginTime
:
undefined
,
endTime
:
undefined
,
},
pushType
:
{
0
:
'
发给客户
'
,
1
:
'
发给客户群
'
,
},
pickerOptions
:
{
disabledDate
(
time
)
{
return
time
.
getTime
()
>
Date
.
now
()
// 选当前时间之前的时间
},
},
}
.num
{
color
:
#00f
;
},
created
()
{
this
.
getList
()
},
methods
:
{
getList
(
page
)
{
if
(
this
.
dateRange
[
0
])
{
this
.
query
.
beginTime
=
this
.
dateRange
[
0
]
this
.
query
.
endTime
=
this
.
dateRange
[
1
]
}
else
{
this
.
query
.
beginTime
=
''
this
.
query
.
endTime
=
''
}
page
&&
(
this
.
query
.
pageNum
=
page
)
this
.
loading
=
true
getList
(
this
.
query
)
.
then
(({
rows
,
total
})
=>
{
this
.
list
=
rows
this
.
total
=
+
total
this
.
loading
=
false
this
.
ids
=
[]
})
.
catch
(()
=>
{
this
.
loading
=
false
})
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
dateRange
=
[]
this
.
resetForm
(
'
queryForm
'
)
this
.
getList
(
1
)
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
ids
=
selection
.
map
((
item
)
=>
item
.
id
)
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
operIds
=
row
.
operId
||
this
.
ids
this
.
$confirm
(
'
是否确认删除日志编号为"
'
+
operIds
+
'
"的数据项?
'
,
'
警告
'
,
{
confirmButtonText
:
'
确定
'
,
cancelButtonText
:
'
取消
'
,
type
:
'
warning
'
,
}
)
.
then
(
function
()
{})
.
then
(()
=>
{
this
.
getList
()
this
.
msgSuccess
(
'
删除成功
'
)
})
.
catch
(
function
()
{})
},
},
}
</
s
tyle
>
</
s
cript
>
<
template
>
<div
class=
"app-container"
>
<el-card
shadow=
"never"
:body-style=
"
{padding: '20px 0 0'}">
<div>
<el-form
:model=
"queryParams
"
:model=
"query
"
ref=
"queryForm"
:inline=
"true"
v-show=
"showS
earch"
class=
"top-s
earch"
label-width=
"100px"
>
<el-form-item
label=
"创建人"
prop=
"title
"
>
<el-form-item
label=
"创建人
"
>
<el-input
v-model=
"queryParams.title
"
v-model=
"query.sender
"
placeholder=
"请输入"
clearable
style=
"width: 240px;"
size=
"small"
@
keyup.enter.native=
"handleQuery"
@
keyup.enter.native=
"getList(1)"
/>
</el-form-item>
<el-form-item
label=
"内容消息"
prop=
"operName
"
>
<el-form-item
label=
"内容消息
"
>
<el-input
v-model=
"queryParams.operName
"
v-model=
"query.content
"
placeholder=
"请输入"
clearable
style=
"width: 240px;"
size=
"small"
@
keyup.enter.native=
"handleQuery"
@
keyup.enter.native=
"getList(1)"
/>
</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
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"
size=
"small"
style=
"width: 240px"
value-format=
"yyyy-MM-dd"
type=
"daterange"
range-separator=
"-"
...
...
@@ -68,178 +139,68 @@
></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-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-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"
>
<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"
>
<span>
{{
parseTime
(
scope
.
row
.
operTime
)
}}
</span>
{{
pushType
[
scope
.
row
.
pushType
]
}}
</
template
>
</el-table-column>
<el-table-column
label=
"发送情况"
align=
"center"
prop=
"operId"
>
<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"
v-show=
"total
>
0"
:total=
"total"
:page.sync=
"query
Params
.pageNum"
:limit.sync=
"query
Params
.pageSize"
@
pagination=
"getList"
:page.sync=
"query.pageNum"
:limit.sync=
"query.pageSize"
@
pagination=
"getList
()
"
/>
</div>
</template>
<
script
>
export
default
{
name
:
"
Operlog
"
,
data
()
{
return
{
// 遮罩层
loading
:
false
,
// 选中数组
ids
:
[],
// 非多个禁用
multiple
:
true
,
// 显示搜索条件
showSearch
:
true
,
// 总条数
total
:
0
,
// 表格数据
list
:
[],
// 是否显示弹出层
open
:
false
,
// 类型数据字典
typeOptions
:
[],
// 类型数据字典
statusOptions
:
[],
// 日期范围
dateRange
:
[],
// 表单参数
form
:
{},
// 查询参数
queryParams
:
{
pageNum
:
1
,
pageSize
:
10
,
title
:
undefined
,
operName
:
undefined
,
businessType
:
undefined
,
status
:
undefined
,
},
};
},
created
()
{
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
:
{
/** 查询登录日志 */
getList
()
{
this
.
loading
=
false
;
list
(
this
.
addDateRange
(
this
.
queryParams
,
this
.
dateRange
)).
then
(
(
response
)
=>
{
this
.
list
=
response
.
rows
;
this
.
total
=
response
.
total
;
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
;
}
);
},
// 操作日志状态字典翻译
statusFormat
(
row
,
column
)
{
return
this
.
selectDictLabel
(
this
.
statusOptions
,
row
.
status
);
},
// 操作日志类型字典翻译
typeFormat
(
row
,
column
)
{
return
this
.
selectDictLabel
(
this
.
typeOptions
,
row
.
businessType
);
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
();
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
dateRange
=
[];
this
.
resetForm
(
"
queryForm
"
);
this
.
handleQuery
();
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
ids
=
selection
.
map
((
item
)
=>
item
.
operId
);
this
.
multiple
=
!
selection
.
length
;
},
/** 详细按钮操作 */
handleView
(
row
)
{
this
.
open
=
true
;
this
.
form
=
row
;
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
operIds
=
row
.
operId
||
this
.
ids
;
this
.
$confirm
(
'
是否确认删除日志编号为"
'
+
operIds
+
'
"的数据项?
'
,
"
警告
"
,
{
confirmButtonText
:
"
确定
"
,
cancelButtonText
:
"
取消
"
,
type
:
"
warning
"
,
.num
{
color
:
#00f
;
}
)
.
then
(
function
()
{
return
delOperlog
(
operIds
);
})
.
then
(()
=>
{
this
.
getList
();
this
.
msgSuccess
(
"
删除成功
"
);
})
.
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
>
\ No newline at end of file
}
</
style
>
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录