Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
仟微科技
Link Wechat
提交
bd8fb283
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,体验更适合开发者的 AI 搜索 >>
提交
bd8fb283
编写于
10月 18, 2021
作者:
L
linkwechat8856@163.com
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/master'
上级
a75c179a
616371f4
变更
7
展开全部
隐藏空白更改
内联
并排
Showing
7 changed file
with
1015 addition
and
605 deletion
+1015
-605
linkwe-mobile/src/views/communityOperating/SOP/panel.vue
linkwe-mobile/src/views/communityOperating/SOP/panel.vue
+130
-104
linkwe-mobile/src/views/communityOperating/keywords/panel.vue
...we-mobile/src/views/communityOperating/keywords/panel.vue
+20
-19
linkwe-mobile/src/views/portrait/index copy.vue
linkwe-mobile/src/views/portrait/index copy.vue
+796
-0
linkwe-ui/src/views/communityOperating/groupSOP/aev.vue
linkwe-ui/src/views/communityOperating/groupSOP/aev.vue
+24
-279
linkwe-ui/src/views/communityOperating/groupSOP/list.vue
linkwe-ui/src/views/communityOperating/groupSOP/list.vue
+15
-62
linkwe-ui/src/views/communityOperating/newCustomer/list.vue
linkwe-ui/src/views/communityOperating/newCustomer/list.vue
+30
-140
linkwe-ui/src/views/conversation/content/employee.vue
linkwe-ui/src/views/conversation/content/employee.vue
+0
-1
未找到文件。
linkwe-mobile/src/views/communityOperating/SOP/panel.vue
浏览文件 @
bd8fb283
...
...
@@ -3,7 +3,7 @@
<div
class=
"task-wrapper"
>
<div
class=
"header"
>
<span>
群SOP
</span>
<div>
{{
task
.
createTime
}}
</div>
<div>
{{
task
.
createTime
}}
</div>
</div>
<div
class=
"group"
>
...
...
@@ -32,7 +32,12 @@
<div
class=
"image-list"
>
<
template
v-for=
"material of task.materialList"
>
<!-- mediaType: 0 图片(image)、1 语音(voice)、2 视频(video),3 普通文件(file) 4 文本 5 海报 6 海报字体 -->
<van-image
v-if=
"material.mediaType === 0"
width=
"80"
:key=
"material.id"
:src=
"material.materialUrl"
></van-image>
<van-image
v-if=
"material.mediaType === 0"
width=
"80"
:key=
"material.id"
:src=
"material.materialUrl"
></van-image>
</
template
>
<
template
v-for=
"pic of task.picList"
>
<van-image
width=
"80"
:key=
"pic"
:src=
"pic"
></van-image>
...
...
@@ -46,7 +51,7 @@
</div>
<div
class=
"send-button"
v-if=
"!state"
>
<van-button
type=
"info"
size=
"mini"
@
click=
"send"
>
发送
</van-button>
<van-button
type=
"info"
size=
"mini"
@
click=
"send
()
"
>
发送
</van-button>
</div>
</div>
...
...
@@ -79,17 +84,17 @@ export default {
}
},
data
()
{
data
()
{
return
{
showCopy
:
false
,
// 展示复制按钮
touchDelay
:
750
,
// 触发显示按钮的长按时常
showCopy
:
false
,
// 展示复制按钮
touchDelay
:
750
,
// 触发显示按钮的长按时常
copyEvent
:
null
,
touch
:
false
,
touch
:
false
}
},
methods
:
{
goState
(
active
)
{
goState
(
active
)
{
if
(
!
this
.
isAdmin
)
return
this
.
$router
.
push
({
...
...
@@ -97,41 +102,63 @@ export default {
query
:
{
taskId
:
this
.
task
.
ruleId
,
active
:
active
===
1
?
1
:
0
,
taskType
:
2
,
taskType
:
2
}
})
},
send
()
{
send
()
{
const
userId
=
this
.
$store
.
state
.
userId
const
taskId
=
this
.
task
.
ruleId
wx
.
invoke
(
"
shareToExternalChat
"
,
{
title
:
''
,
desc
:
''
,
link
:
''
,
imgUrl
:
''
},
function
(
res
)
{
if
(
res
.
err_msg
==
"
shareToExternalChat:ok
"
)
{
changeStatus
(
userId
,
taskId
,
1
).
then
((
res
)
=>
{
this
.
$emit
(
'
refresh
'
)
}).
catch
(()
=>
{
this
.
$emit
(
'
refresh
'
)
})
let
_this
=
this
this
.
$toast
.
loading
({
message
:
'
正在发送...
'
,
duration
:
0
,
forbidClick
:
true
})
let
mes
=
{
title
:
this
.
task
.
title
,
desc
:
this
.
task
.
content
// link: '', // 消息链接
// imgUrl: this.task.materialUrl && this.task.materialUrl[0] ? this.task.materialUrl[0].materialUrl : ''
}
// mes.link || delete mes.link
// mes.imgUrl || delete mes.imgUrl
wx
.
invoke
(
'
shareToExternalChat
'
,
mes
,
async
function
(
res
)
{
if
(
res
.
err_msg
==
'
shareToExternalChat:ok
'
)
{
try
{
await
changeStatus
(
userId
,
taskId
,
1
)
}
catch
(
error
)
{
_this
.
$toast
.
clear
()
_this
.
$dialog
({
message
:
'
接口失败:
'
+
JSON
.
stringify
(
error
)
})
return
}
// .then((res) => {
// }).catch(() => {
// this.$emit('refresh')
// })
_this
.
$toast
.
clear
()
this
.
$emit
(
'
refresh
'
)
}
else
{
if
(
res
.
err_code
==
1
)
{
// 用户取消发送
}
else
{
_this
.
$dialog
({
message
:
'
shareToExternalChat失败:
'
+
JSON
.
stringify
(
res
)
})
}
}
)
_this
.
$toast
.
clear
()
})
},
touchStart
()
{
clearTimeout
(
this
.
copyEvent
)
touchStart
()
{
clearTimeout
(
this
.
copyEvent
)
this
.
copyEvent
=
setTimeout
(()
=>
{
this
.
touch
=
true
},
this
.
touchDelay
)
this
.
copyEvent
=
setTimeout
(()
=>
{
this
.
touch
=
true
},
this
.
touchDelay
)
},
touchEnd
()
{
touchEnd
()
{
clearTimeout
(
this
.
copyEvent
)
if
(
this
.
touch
)
this
.
showCopy
=
true
this
.
touch
=
false
...
...
@@ -139,13 +166,13 @@ export default {
},
computed
:
{
sendRange
()
{
sendRange
()
{
if
(
!
this
.
task
.
startExeTime
||
!
this
.
task
.
stopExeTime
)
return
''
return
this
.
task
.
startExeTime
+
'
-
'
+
this
.
task
.
stopExeTime
},
todoMembers
()
{
todoMembers
()
{
if
(
!
(
this
.
task
&&
this
.
task
.
scopeList
&&
this
.
task
.
scopeList
.
length
>
0
))
return
[]
const
members
=
[]
...
...
@@ -156,16 +183,16 @@ export default {
return
members
},
showTodo
()
{
showTodo
()
{
if
(
this
.
todoMembers
.
length
===
0
)
return
'
无
'
const
names
=
this
.
todoMembers
.
map
(
m
=>
m
.
name
)
const
names
=
this
.
todoMembers
.
map
(
(
m
)
=>
m
.
name
)
if
(
this
.
todoMembers
.
length
<=
2
)
return
names
.
join
(
'
、
'
)
return
names
[
0
]
+
'
、
'
+
names
[
1
]
+
'
等
'
+
this
.
todoMembers
.
length
+
'
人
'
},
doneMembers
()
{
doneMembers
()
{
if
(
!
this
.
task
||
!
this
.
task
.
scopeList
||
this
.
task
.
scopeList
.
length
===
0
)
return
[]
const
members
=
[]
...
...
@@ -176,14 +203,14 @@ export default {
return
members
},
showDone
()
{
showDone
()
{
if
(
this
.
doneMembers
.
length
===
0
)
return
'
无
'
const
names
=
this
.
doneMembers
.
map
(
m
=>
m
.
name
)
const
names
=
this
.
doneMembers
.
map
(
(
m
)
=>
m
.
name
)
if
(
this
.
doneMembers
.
length
<=
2
)
return
names
.
join
(
'
、
'
)
return
names
[
0
]
+
'
、
'
+
names
[
1
]
+
'
等
'
+
this
.
doneMembers
.
length
+
'
人
'
}
,
}
},
mounted
()
{
...
...
@@ -196,90 +223,89 @@ export default {
this
.
clipboard
.
on
(
'
error
'
,
(
e
)
=>
{
this
.
showCopy
=
false
})
}
,
}
}
</
script
>
<
style
lang=
"less"
scoped
>
.task-wrapper {
padding: 10px 8px;
.header {
display: flex;
justify-content: space-between;
align-items: center;
margin: 5px 0 12px;
span {
font-size: 18px;
font-weight: bold;
}
.task-wrapper {
padding: 10px 8px;
.header {
display: flex;
justify-content: space-between;
align-items: center;
margin: 5px 0 12px;
span {
font-size: 18px;
font-weight: bold;
}
}
.group {
.group-tags {
:nth-child(n+2) {
margin-left: 5px;
}
.van-tag {
background-color: #f2f2f2;
color: black;
padding: 6px 10px;
}
.group {
.group-tags {
:nth-child(n + 2) {
margin-left: 5px;
}
}
.content {
padding: 15px;
background-color: #f2f2f2;
font-size: 16px;
line-height: 20px;
color: #999999;
// margin-bottom: 15px;
min-height: 30px;
position: relative;
.copy-wrapper {
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
background-color: rgba(0, 0, 0, 0.4);
display: flex;
align-items: center;
justify-content: space-around;
.van-tag {
background-color: #f2f2f2;
color: black;
padding: 6px 10px;
}
}
}
.image-list {
.van-image {
padding: 10px 10px 0 0;
}
.content {
padding: 15px;
background-color: #f2f2f2;
font-size: 16px;
line-height: 20px;
color: #999999;
// margin-bottom: 15px;
min-height: 30px;
position: relative;
.copy-wrapper {
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
background-color: rgba(0, 0, 0, 0.4);
display: flex;
align-items: center;
justify-content: space-around;
}
}
.van-cell {
padding: 10px 6px;
.image-list {
.van-image {
padding: 10px 10px 0 0;
}
}
.send-button {
padding: 10px 5px 5px;
display: flex;
flex-direction: row-reverse;
.van-cell {
padding: 10px 6px;
}
.van-button {
padding: 0 12px;
margin-right: 12px;
border-radius: 4px;
font-size: 12px;
}
.send-button {
padding: 10px 5px 5px;
display: flex;
flex-direction: row-reverse;
.van-button {
padding: 0 12px;
margin-right: 12px;
border-radius: 4px;
font-size: 12px;
}
}
}
.bottom-line {
background-color: #f2f2f2;
height: 15px;
}
.bottom-line {
background-color: #f2f2f2;
height: 15px;
}
</
style
>
linkwe-mobile/src/views/communityOperating/keywords/panel.vue
浏览文件 @
bd8fb283
...
...
@@ -16,10 +16,7 @@
{{ task.welcomeMsg }}
</div>
<div
class=
"copy-wrapper"
v-show=
"showCopy"
>
<van-button
:class=
"'copy-btn_' + task.taskId"
:data-clipboard-text=
"task.welcomeMsg"
>
<van-button
:class=
"'copy-btn_' + task.taskId"
:data-clipboard-text=
"task.welcomeMsg"
>
复制
</van-button>
</div>
...
...
@@ -67,21 +64,33 @@ export default {
},
methods
:
{
send
()
{
let
_this
=
this
this
.
$toast
.
loading
({
message
:
'
正在发送...
'
,
duration
:
0
,
forbidClick
:
true
})
wx
.
invoke
(
'
sendChatMessage
'
,
{
msgtype
:
'
news
'
,
news
:
{
link
:
this
.
groupCodeUrl
,
title
:
'
客户群活码
'
,
desc
:
'
客户群活码
'
,
title
:
this
.
task
.
taskName
,
desc
:
this
.
task
.
welcomeMsg
,
imgUrl
:
this
.
imgUrl
}
},
function
(
res
)
{
if
(
res
.
err_msg
==
'
sendChatMessage:ok
'
)
{
}
else
{
if
(
res
.
err_code
==
1
)
{
// 用户取消发送
}
else
{
_this
.
$dialog
({
message
:
'
sendChatMessage失败:
'
+
JSON
.
stringify
(
res
)
})
}
}
_this
.
$toast
.
clear
()
}
)
},
...
...
@@ -105,26 +114,18 @@ export default {
return
keywords
},
groupCodeUrl
()
{
let
groupCodeInfo
=
this
.
task
.
groupCodeInfo
if
(
window
.
location
.
hash
[
0
]
===
'
#
'
)
{
return
(
window
.
location
.
origin
+
window
.
location
.
pathname
+
'
#/groupCode?id=
'
+
this
.
task
.
groupCodeInfo
.
id
window
.
location
.
origin
+
window
.
location
.
pathname
+
'
#/groupCode?id=
'
+
(
groupCodeInfo
&&
groupCodeInfo
.
id
)
)
}
return
(
window
.
location
.
origin
+
window
.
location
.
pathname
+
'
groupCode?id=
'
+
this
.
task
.
groupCodeInfo
.
id
)
return
window
.
location
.
origin
+
window
.
location
.
pathname
+
'
#/groupCode?id=
'
+
(
groupCodeInfo
&&
groupCodeInfo
.
id
)
},
imgUrl
()
{
if
(
this
.
task
.
groupCodeInfo
&&
this
.
task
.
groupCodeInfo
.
codeUrl
)
return
this
.
task
.
groupCodeInfo
.
codeUrl
return
''
let
groupCodeInfo
=
this
.
task
.
groupCodeInfo
return
groupCodeInfo
&&
groupCodeInfo
.
codeUrl
?
groupCodeInfo
.
codeUrl
:
''
}
},
mounted
()
{
...
...
linkwe-mobile/src/views/portrait/index copy.vue
0 → 100644
浏览文件 @
bd8fb283
此差异已折叠。
点击以展开。
linkwe-ui/src/views/communityOperating/groupSOP/aev.vue
浏览文件 @
bd8fb283
...
...
@@ -2,22 +2,11 @@
<div
class=
"wrap"
v-loading=
"loading"
>
<el-form
:model=
"form"
ref=
"form"
:rules=
"rules"
label-width=
"100px"
>
<el-form-item
label=
"规则名称"
prop=
"ruleName"
>
<el-input
v-model=
"form.ruleName"
maxlength=
"30"
show-word-limit
placeholder=
"请输入"
clearable
/>
<el-input
v-model=
"form.ruleName"
maxlength=
"30"
show-word-limit
placeholder=
"请输入"
clearable
/>
</el-form-item>
<el-form-item
label=
"执行群聊"
>
<el-tag
size=
"medium"
v-for=
"(group, index) in customerGroups"
:key=
"index"
>
{{
group
.
groupName
}}
</el-tag
>
<el-tag
size=
"medium"
v-for=
"(group, index) in customerGroups"
:key=
"index"
>
{{
group
.
groupName
}}
</el-tag>
<el-button
type=
"primary"
plain
...
...
@@ -70,23 +59,12 @@
class="mb8"
>
</el-input>
<div
v-for=
"text in textMaterialList"
:key=
"text.id"
class=
"text-wrapper"
>
<div
class=
"content overflow-ellipsis"
>
<div
v-for=
"text in textMaterialList"
:key=
"text.id"
class=
"text-wrapper"
>
<div
class=
"content overflow-ellipsis"
>
{{
text
.
content
}}
</div>
<el-button
icon=
"el-icon-close"
class=
"remove-btn"
size=
"mini"
@
click=
"removeTextMaterial(text)"
>
<el-button
icon=
"el-icon-close"
class=
"remove-btn"
size=
"mini"
@
click=
"removeTextMaterial(text)"
>
</el-button>
</div>
</el-tab-pane>
...
...
@@ -94,60 +72,25 @@
<el-tab-pane
name=
"1"
>
<span
slot=
"label"
>
<i
class=
"el-icon-date"
></i>
图片
</span>
<div
v-for=
"image in imageMaterialList"
:key=
"image.id"
class=
"image-wrapper"
>
<el-image
:src=
"image.materialUrl"
fit=
"fit"
>
</el-image>
<el-button
icon=
"el-icon-close"
class=
"remove-btn"
size=
"mini"
@
click=
"removeImageMaterial(image)"
>
<div
v-for=
"image in imageMaterialList"
:key=
"image.id"
class=
"image-wrapper"
>
<el-image
:src=
"image.materialUrl"
fit=
"fit"
>
</el-image>
<el-button
icon=
"el-icon-close"
class=
"remove-btn"
size=
"mini"
@
click=
"removeImageMaterial(image)"
>
</el-button>
</div>
<div
v-for=
"url in form.picList"
:key=
"url"
class=
"image-wrapper"
>
<el-image
:src=
"url"
fit=
"fit"
>
</el-image>
<el-button
icon=
"el-icon-close"
class=
"remove-btn"
size=
"mini"
@
click=
"removeImage(url)"
>
</el-button>
<div
v-for=
"url in form.picList"
:key=
"url"
class=
"image-wrapper"
>
<el-image
:src=
"url"
fit=
"fit"
>
</el-image>
<el-button
icon=
"el-icon-close"
class=
"remove-btn"
size=
"mini"
@
click=
"removeImage(url)"
>
</el-button>
</div>
<upload
:fileUrl.sync=
"uploadImageUrl"
class=
"image-uploader"
>
<upload
:fileUrl.sync=
"uploadImageUrl"
class=
"image-uploader"
>
<i
class=
"el-icon-plus uploader-icon"
></i>
</upload>
</el-tab-pane>
<el-button
type=
"primary"
class=
"mt20"
@
click=
"dialogVisibleSelectMaterial = true"
>
从素材库选择
</el-button
>
<el-button
type=
"primary"
class=
"mt20"
@
click=
"dialogVisibleSelectMaterial = true"
>
从素材库选择
</el-button>
</el-tabs>
</div>
</el-form-item>
...
...
@@ -162,14 +105,9 @@
<!-- 预览 -->
<div
class=
"tip"
>
欢迎语样式
</div>
<PhoneDialog
:message=
"form.content || '请输入加群引导语'"
:imageList=
"imageList"
:messageList=
"messageList"
>
<PhoneDialog
:message=
"form.content || '请输入加群引导语'"
:imageList=
"imageList"
:messageList=
"messageList"
>
<template
#image
="
{ image }">
<el-image
style=
"border-radius: 6px; width: 100px;"
:src=
"image"
fit=
"fit"
>
</el-image>
<el-image
style=
"border-radius: 6px; width: 100px;"
:src=
"image"
fit=
"fit"
>
</el-image>
</
template
>
<
template
#text=
"{ text }"
>
{{
text
}}
...
...
@@ -218,11 +156,7 @@ export default {
components
:
{
PhoneDialog
,
SelectMaterial
,
SelectCustomerGroup
},
data
()
{
const
checkContent
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
this
.
form
.
content
&&
this
.
form
.
picList
.
length
===
0
&&
this
.
form
.
materialIdList
.
length
===
0
)
{
if
(
!
this
.
form
.
content
&&
this
.
form
.
picList
.
length
===
0
&&
this
.
form
.
materialIdList
.
length
===
0
)
{
callback
(
new
Error
(
'
该项为必填项
'
))
}
else
{
callback
()
...
...
@@ -250,26 +184,17 @@ export default {
pickerOptions
:
{
disabledDate
(
time
)
{
// return time.getTime()
<
Date
.
now
()
return
(
time
.
getTime
()
<
new
Date
(
new
Date
(
new
Date
().
toLocaleDateString
()).
getTime
())
)
return
time
.
getTime
()
<
new
Date
(
new
Date
(
new
Date
().
toLocaleDateString
()).
getTime
())
}
},
uploadImageUrl
:
''
,
imageMaterialList
:
[],
textMaterialList
:
[],
rules
:
Object
.
freeze
({
ruleName
:
[
{
required
:
true
,
message
:
'
该项为必填项
'
,
trigger
:
'
blur
'
}
],
ruleName
:
[{
required
:
true
,
message
:
'
该项为必填项
'
,
trigger
:
'
blur
'
}],
title
:
[{
required
:
true
,
message
:
'
该项为必填项
'
,
trigger
:
'
blur
'
}],
chatIdList
:
[
{
required
:
true
,
message
:
'
该项为必填项
'
,
trigger
:
'
change
'
}
],
startExeTime
:
[
{
required
:
true
,
message
:
'
该项为必填项
'
,
trigger
:
'
change
'
}
],
chatIdList
:
[{
required
:
true
,
message
:
'
该项为必填项
'
,
trigger
:
'
change
'
}],
startExeTime
:
[{
required
:
true
,
message
:
'
该项为必填项
'
,
trigger
:
'
change
'
}],
content
:
[
// { required: true, message: '该项为必填项', trigger: 'change' },
{
validator
:
checkContent
,
trigger
:
'
change
'
}
...
...
@@ -399,196 +324,16 @@ export default {
},
removeImageMaterial
(
image
)
{
this
.
imageMaterialList
.
splice
(
this
.
imageMaterialList
.
indexOf
(
image
),
1
)
this
.
form
.
materialIdList
.
splice
(
this
.
form
.
materialIdList
.
indexOf
(
image
.
id
),
1
)
this
.
form
.
materialIdList
.
splice
(
this
.
form
.
materialIdList
.
indexOf
(
image
.
id
),
1
)
},
removeTextMaterial
(
text
)
{
this
.
textMaterialList
.
splice
(
this
.
textMaterialList
.
indexOf
(
text
),
1
)
this
.
form
.
materialIdList
.
splice
(
this
.
form
.
materialIdList
.
indexOf
(
text
.
id
),
1
)
this
.
form
.
materialIdList
.
splice
(
this
.
form
.
materialIdList
.
indexOf
(
text
.
id
),
1
)
}
}
}
</
script
>
<
template
>
<div
class=
"wrap"
v-loading=
"loading"
>
<el-form
:model=
"form"
ref=
"form"
:rules=
"rules"
label-width=
"100px"
>
<el-form-item
label=
"规则名称"
prop=
"ruleName"
>
<el-input
v-model=
"form.ruleName"
maxlength=
"30"
show-word-limit
placeholder=
"请输入"
clearable
></el-input>
</el-form-item>
<el-form-item
label=
"执行群聊"
prop=
"chatIdList"
>
<el-tag
size=
"medium"
v-for=
"(group, index) in customerGroups"
:key=
"index"
>
{{
group
.
groupName
}}
</el-tag
>
<el-button
type=
"primary"
plain
:class=
"customerGroups.length > 0 ? 'ml10' : ''"
icon=
"el-icon-plus"
size=
"mini"
@
click=
"dialogVisibleSelectCustomerGroup = true"
>
{{
customerGroups
.
length
?
'
修改
'
:
'
添加
'
}}
</el-button
>
</el-form-item>
<el-form-item
label=
"内容名称"
prop=
"title"
>
<el-input
v-model=
"form.title"
maxlength=
"220"
show-word-limit
:autosize=
"
{ minRows: 5, maxRows: 20 }"
placeholder="请输入"
clearable
>
</el-input>
</el-form-item>
<el-form-item
label=
"执行时间"
prop=
"startExeTime"
>
<el-date-picker
v-model=
"dateRange"
value-format=
"yyyy-MM-dd HH:mm:ss"
type=
"datetimerange"
:picker-options=
"pickerOptions"
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
align=
"right"
></el-date-picker>
</el-form-item>
<el-form-item
label=
"消息内容"
prop=
"content"
>
<div
class=
"content-left"
>
<el-button
class=
"create"
@
click=
"goRoute"
>
新建素材
</el-button>
<el-tabs
v-model=
"activeName"
>
<el-tab-pane
name=
"0"
>
<span
slot=
"label"
>
<i
class=
"el-icon-date"
></i>
文本
</span>
<el-input
v-model=
"form.content"
type=
"textarea"
maxlength=
"220"
show-word-limit
:autosize=
"
{ minRows: 10, maxRows: 50 }"
placeholder="请输入"
class="mb8"
>
</el-input>
<div
v-for=
"text in textMaterialList"
:key=
"text.id"
class=
"text-wrapper"
>
<div
class=
"content overflow-ellipsis"
>
{{
text
.
content
}}
</div>
<el-button
icon=
"el-icon-close"
class=
"remove-btn"
size=
"mini"
@
click=
"removeTextMaterial(text)"
></el-button>
</div>
</el-tab-pane>
<el-tab-pane
name=
"1"
>
<span
slot=
"label"
>
<i
class=
"el-icon-date"
></i>
图片
</span>
<div
v-for=
"image in imageMaterialList"
:key=
"image.id"
class=
"image-wrapper"
>
<el-image
:src=
"image.materialUrl"
fit=
"fit"
></el-image>
<el-button
icon=
"el-icon-close"
class=
"remove-btn"
size=
"mini"
@
click=
"removeImageMaterial(image)"
></el-button>
</div>
<div
v-for=
"url in form.picList"
:key=
"url"
class=
"image-wrapper"
>
<el-image
:src=
"url"
fit=
"fit"
></el-image>
<el-button
icon=
"el-icon-close"
class=
"remove-btn"
size=
"mini"
@
click=
"removeImage(url)"
></el-button>
</div>
<upload
:fileUrl.sync=
"uploadImageUrl"
class=
"image-uploader"
>
<i
class=
"el-icon-plus uploader-icon"
></i>
</upload>
</el-tab-pane>
<el-button
type=
"primary"
class=
"mt20"
@
click=
"dialogVisibleSelectMaterial = true"
>
从素材库选择
</el-button
>
</el-tabs>
</div>
</el-form-item>
<el-form-item
label=
" "
>
<el-button
type=
"primary"
@
click=
"submit"
>
保存
</el-button>
<el-button
@
click=
"$router.back()"
>
取消
</el-button>
</el-form-item>
</el-form>
<div
class=
"preview-wrap"
>
<!-- 预览 -->
<div
class=
"tip"
>
欢迎语样式
</div>
<PhoneDialog
:message=
"form.content || '请输入加群引导语'"
:imageList=
"imageList"
:messageList=
"messageList"
>
<template
#image
="
{ image }">
<el-image
class=
"phone-dialog-image"
:src=
"image"
fit=
"fit"
>
</el-image>
</
template
>
<
template
#text=
"{ text }"
>
{{
text
}}
</
template
>
</PhoneDialog>
</div>
<!-- 选择素材弹窗 -->
<SelectMaterial
v-if=
"activeName === '0'"
:key=
"0"
:visible.sync=
"dialogVisibleSelectMaterial"
type=
"0"
:showArr=
"[0]"
@
success=
"submitSelectMaterial"
></SelectMaterial>
<SelectMaterial
v-else
:key=
"1"
:visible.sync=
"dialogVisibleSelectMaterial"
type=
"1"
:showArr=
"[1]"
@
success=
"submitSelectMaterial"
></SelectMaterial>
<!-- 选择客户群聊 -->
<SelectCustomerGroup
:visible.sync=
"dialogVisibleSelectCustomerGroup"
@
success=
"submitSelectCustomerGroup"
:multiSelect=
"true"
></SelectCustomerGroup>
</div>
</template>
<
style
lang=
"scss"
scoped
>
.wrap
{
display
:
flex
;
...
...
linkwe-ui/src/views/communityOperating/groupSOP/list.vue
浏览文件 @
bd8fb283
...
...
@@ -114,9 +114,10 @@ export default {
},
// 获取显示用实际群聊
getDisplayGroups
(
row
)
{
const
groups
=
row
.
groupList
.
map
((
g
)
=>
g
.
groupName
)
return
groups
.
join
(
'
'
)
if
(
row
.
groupList
)
{
const
groups
=
row
.
groupList
.
map
((
g
)
=>
g
.
groupName
)
return
groups
.
join
(
'
,
'
)
}
}
}
}
...
...
@@ -125,13 +126,7 @@ export default {
<
template
>
<div>
<div
class=
"top-search"
>
<el-form
inline
label-position=
"right"
:model=
"query"
label-width=
"100px"
ref=
"queryForm"
>
<el-form
inline
label-position=
"right"
:model=
"query"
label-width=
"100px"
ref=
"queryForm"
>
<el-form-item
label=
"规则名称"
prop=
"ruleName"
>
<el-input
v-model=
"query.ruleName"
placeholder=
"请输入"
></el-input>
</el-form-item>
...
...
@@ -151,16 +146,8 @@ export default {
></el-date-picker>
</el-form-item>
<el-form-item
label=
" "
>
<el-button
v-hasPermi=
"['customerManage:customer:query']"
type=
"primary"
@
click=
"getList(1)"
>
查询
</el-button
>
<el-button
v-hasPermi=
"['customerManage:customer:query']"
type=
"success"
@
click=
"resetQuery()"
<el-button
v-hasPermi=
"['customerManage:customer:query']"
type=
"primary"
@
click=
"getList(1)"
>
查询
</el-button>
<el-button
v-hasPermi=
"['customerManage:customer:query']"
type=
"success"
@
click=
"resetQuery()"
>
重置
</el-button
>
</el-form-item>
...
...
@@ -182,30 +169,12 @@ export default {
</div>
</div>
<el-table
v-loading=
"loading"
:data=
"list"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"50"
align=
"center"
></el-table-column>
<el-table-column
label=
"规则名称"
align=
"center"
prop=
"ruleName"
:show-overflow-tooltip=
"true"
></el-table-column>
<el-table
v-loading=
"loading"
:data=
"list"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"50"
align=
"center"
></el-table-column>
<el-table-column
label=
"规则名称"
align=
"center"
prop=
"ruleName"
:show-overflow-tooltip=
"true"
></el-table-column>
<el-table-column
label=
"执行群聊"
align=
"center"
width=
"120"
>
<template
#default
="
{ row }">
<el-popover
placement=
"bottom"
width=
"200"
trigger=
"hover"
:content=
"getDisplayGroups(row)"
>
<el-popover
placement=
"bottom"
width=
"200"
trigger=
"hover"
:content=
"getDisplayGroups(row)"
>
<div
slot=
"reference"
class=
"table-desc overflow-ellipsis"
>
{{
getDisplayGroups
(
row
)
}}
</div>
...
...
@@ -213,28 +182,12 @@ export default {
</
template
>
</el-table-column>
<el-table-column
label=
"创建人"
align=
"center"
prop=
"createBy"
></el-table-column>
<el-table-column
label=
"创建人"
align=
"center"
prop=
"createBy"
></el-table-column>
<el-table-column
label=
"创建人"
align=
"center"
prop=
"createBy"
></el-table-column>
<el-table-column
label=
"创建时间"
align=
"center"
prop=
"createTime"
></el-table-column>
<el-table-column
label=
"创建人"
align=
"center"
prop=
"createBy"
></el-table-column>
<el-table-column
label=
"创建时间"
align=
"center"
prop=
"createTime"
></el-table-column>
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<
template
slot-scope=
"scope"
>
<el-button
v-hasPermi=
"['enterpriseWechat:view']"
...
...
linkwe-ui/src/views/communityOperating/newCustomer/list.vue
浏览文件 @
bd8fb283
<
script
>
import
{
getList
,
remove
,
download
,
downloadBatch
}
from
'
@/api/communityOperating/newCustomer
'
import
{
getList
,
remove
,
download
,
downloadBatch
}
from
'
@/api/communityOperating/newCustomer
'
export
default
{
components
:
{},
...
...
@@ -157,14 +152,7 @@ export default {
<
template
>
<div>
<el-form
ref=
"queryForm"
:inline=
"true"
:model=
"query"
label-width=
"100px"
class=
"top-search"
size=
"small"
>
<el-form
ref=
"queryForm"
:inline=
"true"
:model=
"query"
label-width=
"100px"
class=
"top-search"
size=
"small"
>
<el-form-item
label=
"活码名称"
prop=
"emplCodeName"
>
<el-input
v-model=
"query.emplCodeName"
placeholder=
"请输入"
></el-input>
</el-form-item>
...
...
@@ -184,18 +172,8 @@ export default {
></el-date-picker>
</el-form-item>
<el-form-item
label=
" "
>
<el-button
v-hasPermi=
"['customerManage:customer:query']"
type=
"primary"
@
click=
"getList(1)"
>
查询
</el-button
>
<el-button
v-hasPermi=
"['customerManage:customer:query']"
type=
"success"
@
click=
"resetQuery()"
>
重置
</el-button
>
<el-button
v-hasPermi=
"['customerManage:customer:query']"
type=
"primary"
@
click=
"getList(1)"
>
查询
</el-button>
<el-button
v-hasPermi=
"['customerManage:customer:query']"
type=
"success"
@
click=
"resetQuery()"
>
重置
</el-button>
</el-form-item>
</el-form>
...
...
@@ -204,50 +182,20 @@ export default {
<el-button
type=
"primary"
@
click=
"goRoute()"
>
新建自动拉群
</el-button>
</div>
<div>
<el-button
type=
"primary"
:disabled=
"!ids.length"
@
click=
"downloadBatch()"
>
批量下载
</el-button
>
<el-button
v-hasPermi=
"['customerManage:customer:export']"
:disabled=
"!ids.length"
type=
"cyan"
@
click=
"remove()"
<el-button
type=
"primary"
:disabled=
"!ids.length"
@
click=
"downloadBatch()"
>
批量下载
</el-button>
<el-button
v-hasPermi=
"['customerManage:customer:export']"
:disabled=
"!ids.length"
type=
"cyan"
@
click=
"remove()"
>
批量删除
</el-button
>
</div>
</div>
<el-table
v-loading=
"loading"
:data=
"list"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"50"
align=
"center"
></el-table-column>
<el-table-column
prop=
"codeName"
label=
"活码名称"
align=
"center"
></el-table-column>
<el-table-column
prop=
"emplList"
label=
"使用员工"
align=
"center"
width=
"130"
>
<el-table
v-loading=
"loading"
:data=
"list"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"50"
align=
"center"
></el-table-column>
<el-table-column
prop=
"codeName"
label=
"活码名称"
align=
"center"
></el-table-column>
<el-table-column
prop=
"emplList"
label=
"使用员工"
align=
"center"
width=
"130"
>
<template
#default
="
{ row }">
<el-popover
placement=
"bottom"
trigger=
"hover"
>
<el-image
slot=
"reference"
:src=
"row.emplCodeUrl"
class=
"code-image--small"
></el-image>
<el-image
slot=
"reference"
:src=
"row.emplCodeUrl"
class=
"code-image--small"
></el-image>
<el-image
:src=
"row.emplCodeUrl"
class=
"code-image"
></el-image>
</el-popover>
</
template
>
...
...
@@ -256,93 +204,35 @@ export default {
</el-image>
</template> -->
</el-table-column>
<el-table-column
prop=
"emplList"
label=
"使用员工"
align=
"center"
:show-overflow-tooltip=
"true"
>
<el-table-column
prop=
"emplList"
label=
"使用员工"
align=
"center"
:show-overflow-tooltip=
"true"
>
<
template
slot-scope=
"{ row }"
>
<el-tag
size=
"medium"
type=
"info"
v-for=
"(item, index) in row.emplList"
:key=
"index"
>
{{
item
.
businessName
}}
</el-tag
>
<el-tag
size=
"medium"
type=
"info"
v-for=
"(item, index) in row.emplList"
:key=
"index"
>
{{
item
.
businessName
}}
</el-tag>
</
template
>
</el-table-column>
<el-table-column
label=
"客户标签"
align=
"center"
width=
"160"
:show-overflow-tooltip=
"true"
>
<el-table-column
label=
"客户标签"
align=
"center"
width=
"160"
:show-overflow-tooltip=
"true"
>
<
template
slot-scope=
"{ row }"
>
<el-tag
size=
"medium"
type=
"info"
v-for=
"(item, index) in row.tagList"
:key=
"index"
>
{{
item
.
tagName
}}
</el-tag
>
<el-tag
size=
"medium"
type=
"info"
v-for=
"(item, index) in row.tagList"
:key=
"index"
>
{{
item
.
tagName
}}
</el-tag>
</
template
>
</el-table-column>
<el-table-column
label=
"实际群聊"
align=
"center"
:show-overflow-tooltip=
"true"
>
<el-table-column
label=
"实际群聊"
align=
"center"
:show-overflow-tooltip=
"true"
>
<
template
slot-scope=
"{ row }"
>
<el-tag
size=
"medium"
v-for=
"(item, index) in row.groupList"
:key=
"index"
>
{{
item
.
groupName
}}
</el-tag
>
<el-tag
size=
"medium"
v-for=
"(item, index) in (row.actualGroupName || '').split(',')"
:key=
"index"
>
{{
item
}}
</el-tag>
</
template
>
</el-table-column>
<el-table-column
label=
"添加好友数"
align=
"center"
prop=
"cusNumber"
></el-table-column>
<el-table-column
label=
"创建人"
align=
"center"
prop=
"createBy"
></el-table-column>
<el-table-column
label=
"创建时间"
align=
"center"
prop=
"createTime"
width=
"160"
></el-table-column>
<el-table-column
label=
"操作"
align=
"center"
width=
"180"
class-name=
"small-padding fixed-width"
>
<el-table-column
label=
"添加好友数"
align=
"center"
prop=
"cusNumber"
></el-table-column>
<el-table-column
label=
"创建人"
align=
"center"
prop=
"createBy"
></el-table-column>
<el-table-column
label=
"创建时间"
align=
"center"
prop=
"createTime"
width=
"160"
></el-table-column>
<el-table-column
label=
"操作"
align=
"center"
width=
"180"
class-name=
"small-padding fixed-width"
>
<
template
slot-scope=
"{ row }"
>
<el-button
v-hasPermi=
"['enterpriseWechat:edit']"
type=
"text"
@
click=
"goRoute(row.id)"
>
编辑
</el-button
>
<el-button
v-hasPermi=
"['enterpriseWechat:view']"
type=
"text"
@
click=
"download(row)"
>
下载
</el-button
>
<el-button
v-hasPermi=
"['enterpriseWechat:edit']"
type=
"text"
@
click=
"remove(row.id)"
>
删除
</el-button
>
<el-button
v-hasPermi=
"['enterpriseWechat:edit']"
type=
"text"
@
click=
"goRoute(row.id)"
>
编辑
</el-button>
<el-button
v-hasPermi=
"['enterpriseWechat:view']"
type=
"text"
@
click=
"download(row)"
>
下载
</el-button>
<el-button
v-hasPermi=
"['enterpriseWechat:edit']"
type=
"text"
@
click=
"remove(row.id)"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
...
...
linkwe-ui/src/views/conversation/content/employee.vue
浏览文件 @
bd8fb283
...
...
@@ -205,7 +205,6 @@ export default {
}
},
handleNodeClick
(
data
,
add
)
{
debugger
if
(
!
data
.
userId
)
{
}
else
{
this
.
talkName
=
data
.
name
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录