Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
P
pica-admin-IM
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
Close sidebar
动态
分支图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
com.pica.cloud.education.frontend
pica-admin-IM
提交
03ef70dc
提交
03ef70dc
编写于
1月 15, 2021
作者:
huangwensu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
群发消息接口联调
上级
5d9387e8
变更
4
显示空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
465 行增加
和
116 行删除
+465
-116
package-lock.json
package-lock.json
+57
-0
detail.vue
src/views/IM/chain-history/detail.vue
+147
-0
list.vue
src/views/IM/chain-history/list.vue
+46
-52
index.vue
src/views/IM/chain-message/index.vue
+215
-64
未找到文件。
package-lock.json
浏览文件 @
03ef70dc
...
@@ -1576,6 +1576,16 @@
...
@@ -1576,6 +1576,16 @@
"integrity"
:
"sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8="
,
"integrity"
:
"sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8="
,
"dev"
:
true
"dev"
:
true
},
},
"clipboard"
:
{
"version"
:
"2.0.6"
,
"resolved"
:
"http://192.168.110.93:4873/clipboard/-/clipboard-2.0.6.tgz"
,
"integrity"
:
"sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg=="
,
"requires"
:
{
"good-listener"
:
"^1.2.2"
,
"select"
:
"^1.1.2"
,
"tiny-emitter"
:
"^2.0.0"
}
},
"cliui"
:
{
"cliui"
:
{
"version"
:
"5.0.0"
,
"version"
:
"5.0.0"
,
"resolved"
:
"http://192.168.110.93:4873/cliui/-/cliui-5.0.0.tgz"
,
"resolved"
:
"http://192.168.110.93:4873/cliui/-/cliui-5.0.0.tgz"
,
...
@@ -2125,6 +2135,11 @@
...
@@ -2125,6 +2135,11 @@
"integrity"
:
"sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
,
"integrity"
:
"sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
,
"dev"
:
true
"dev"
:
true
},
},
"delegate"
:
{
"version"
:
"3.2.0"
,
"resolved"
:
"http://192.168.110.93:4873/delegate/-/delegate-3.2.0.tgz"
,
"integrity"
:
"sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
},
"delegates"
:
{
"delegates"
:
{
"version"
:
"1.0.0"
,
"version"
:
"1.0.0"
,
"resolved"
:
"http://192.168.110.93:4873/delegates/-/delegates-1.0.0.tgz"
,
"resolved"
:
"http://192.168.110.93:4873/delegates/-/delegates-1.0.0.tgz"
,
...
@@ -3434,6 +3449,14 @@
...
@@ -3434,6 +3449,14 @@
"minimatch"
:
"~3.0.2"
"minimatch"
:
"~3.0.2"
}
}
},
},
"good-listener"
:
{
"version"
:
"1.2.2"
,
"resolved"
:
"http://192.168.110.93:4873/good-listener/-/good-listener-1.2.2.tgz"
,
"integrity"
:
"sha1-1TswzfkxPf+33JoNR3CWqm0UXFA="
,
"requires"
:
{
"delegate"
:
"^3.1.2"
}
},
"graceful-fs"
:
{
"graceful-fs"
:
{
"version"
:
"4.2.4"
,
"version"
:
"4.2.4"
,
"resolved"
:
"http://192.168.110.93:4873/graceful-fs/-/graceful-fs-4.2.4.tgz"
,
"resolved"
:
"http://192.168.110.93:4873/graceful-fs/-/graceful-fs-4.2.4.tgz"
,
...
@@ -7257,6 +7280,11 @@
...
@@ -7257,6 +7280,11 @@
}
}
}
}
},
},
"select"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"http://192.168.110.93:4873/select/-/select-1.1.2.tgz"
,
"integrity"
:
"sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0="
},
"semver"
:
{
"semver"
:
{
"version"
:
"5.7.1"
,
"version"
:
"5.7.1"
,
"resolved"
:
"http://192.168.110.93:4873/semver/-/semver-5.7.1.tgz"
,
"resolved"
:
"http://192.168.110.93:4873/semver/-/semver-5.7.1.tgz"
,
...
@@ -8037,6 +8065,11 @@
...
@@ -8037,6 +8065,11 @@
"setimmediate"
:
"^1.0.4"
"setimmediate"
:
"^1.0.4"
}
}
},
},
"tiny-emitter"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"http://192.168.110.93:4873/tiny-emitter/-/tiny-emitter-2.1.0.tgz"
,
"integrity"
:
"sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
},
"to-arraybuffer"
:
{
"to-arraybuffer"
:
{
"version"
:
"1.0.1"
,
"version"
:
"1.0.1"
,
"resolved"
:
"http://192.168.110.93:4873/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz"
,
"resolved"
:
"http://192.168.110.93:4873/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz"
,
...
@@ -8417,6 +8450,24 @@
...
@@ -8417,6 +8450,24 @@
"integrity"
:
"sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
,
"integrity"
:
"sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
,
"dev"
:
true
"dev"
:
true
},
},
"v-viewer"
:
{
"version"
:
"1.5.1"
,
"resolved"
:
"http://192.168.110.93:4873/v-viewer/-/v-viewer-1.5.1.tgz"
,
"integrity"
:
"sha512-Q5ICKzmYQD0qTf+hti2Lhgy6UYY2zgFr+YrN9a3yPgr7pOjYrG405Pz4+6Z6FXlhdhGysCWFJUNCI2tsIyvjWQ=="
,
"dev"
:
true
,
"requires"
:
{
"throttle-debounce"
:
"^2.0.1"
,
"viewerjs"
:
"^1.5.0"
},
"dependencies"
:
{
"throttle-debounce"
:
{
"version"
:
"2.3.0"
,
"resolved"
:
"http://192.168.110.93:4873/throttle-debounce/-/throttle-debounce-2.3.0.tgz"
,
"integrity"
:
"sha1-/TGGXmZQIHHkEYF+JBRls+nDcuI="
,
"dev"
:
true
}
}
},
"validate-npm-package-license"
:
{
"validate-npm-package-license"
:
{
"version"
:
"3.0.4"
,
"version"
:
"3.0.4"
,
"resolved"
:
"http://192.168.110.93:4873/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz"
,
"resolved"
:
"http://192.168.110.93:4873/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz"
,
...
@@ -8458,6 +8509,12 @@
...
@@ -8458,6 +8509,12 @@
}
}
}
}
},
},
"viewerjs"
:
{
"version"
:
"1.9.0"
,
"resolved"
:
"http://192.168.110.93:4873/viewerjs/-/viewerjs-1.9.0.tgz"
,
"integrity"
:
"sha1-bfr1REDDsvdpG4Vma6bSdwjtlZI="
,
"dev"
:
true
},
"vm-browserify"
:
{
"vm-browserify"
:
{
"version"
:
"0.0.4"
,
"version"
:
"0.0.4"
,
"resolved"
:
"http://192.168.110.93:4873/vm-browserify/-/vm-browserify-0.0.4.tgz"
,
"resolved"
:
"http://192.168.110.93:4873/vm-browserify/-/vm-browserify-0.0.4.tgz"
,
...
...
src/views/IM/chain-history/detail.vue
浏览文件 @
03ef70dc
<
template
>
<div
class=
"chain-history-detail"
>
<bread-crumb
:curmbFirst=
"curmbFirst"
:curmbSecond=
"curmbSecond"
></bread-crumb>
<div
class=
"component-content screenSet"
id=
"screenSet"
>
<div>
群发标题:
{{
detailData
.
title
}}
</div>
<div>
目标用户:
{{
detailData
.
title
}}
</div>
<div
v-for=
"(item, index) in contentList"
:key=
"index"
>
<div
v-if=
"item.type == 1"
class=
"text-content"
>
<div>
{{
item
.
content
}}
</div>
</div>
<div
v-if=
"item.type == 2"
class=
"file-content"
>
<div
v-if=
"item.fileType == 1"
>
</div>
<div
v-if=
"item.fileType == 2"
>
<img
:src=
"item.content"
/>
</div>
</div>
<div
v-if=
"item.type == 3"
class=
"link-content"
>
<div
class=
"link-text"
>
{{
item
.
content
}}
</div>
</div>
</div>
</div>
</div>
</
template
>
<
script
>
import
BreadCrumb
from
"@/components/breadcrumb.vue"
;
import
{
doUpload
,
getFilePath
}
from
"@/utils/qiniu-util"
;
import
{
validateWord
}
from
"@/utils/validate.js"
;
import
{
openLoading
,
closeLoading
}
from
"@/utils/utils"
;
import
*
as
commonUtil
from
"@/utils/utils"
;
export
default
{
components
:
{
BreadCrumb
},
data
()
{
return
{
curmbFirst
:
"历史群发"
,
curmbSecond
:
"任务详情"
,
detailData
:
{
title
:
''
},
contentList
:
[{
type
:
1
,
content
:
'这个是内容区'
},{
type
:
2
,
fileType
:
1
,
content
:
'这是个文件'
},{
type
:
2
,
fileType
:
2
,
content
:
''
},{
type
:
3
,
content
:
'这是个链接'
}],
};
},
created
()
{
this
.
search
();
},
// 挂载到Dom完成时
mounted
:
function
()
{
commonUtil
.
resizeHeight
();
},
methods
:
{
// 列表查询
search
()
{
this
.
getData
();
},
// 获取数据
getData
()
{
let
subject
=
0
,
status
=
0
,
name
=
0
;
this
.
loading
=
true
;
let
cStatus
=
this
.
categoryStatus
?
this
.
categoryStatus
:
"0"
;
//'0'表示默认查所有的
let
url
=
"/interaction/discuss/"
+
cStatus
+
"/"
+
subject
+
"/"
+
name
+
"/"
+
status
+
"/"
+
this
.
searchParam
.
pageNo
+
"/"
+
this
.
searchParam
.
pageSize
;
this
.
GET
(
url
).
then
(
res
=>
{
this
.
loading
=
false
;
if
(
res
.
code
==
"000000"
)
{
console
.
log
(
res
.
data
);
this
.
tableData
=
res
.
data
.
resp
.
discuss
||
[];
this
.
nextSessionId
=
this
.
tableData
[
0
]
&&
this
.
tableData
[
0
].
id
;
console
.
log
(
"this.nextSessionId"
,
this
.
nextSessionId
);
if
(
res
.
data
.
typeList
&&
res
.
data
.
typeList
.
length
)
{
let
arr
=
[];
for
(
let
i
=
0
;
i
<
res
.
data
.
typeList
.
length
;
i
++
)
{
let
obj
=
{};
obj
.
label
=
res
.
data
.
typeList
[
i
];
obj
.
value
=
res
.
data
.
typeList
[
i
];
arr
.
push
(
obj
);
}
this
.
category
=
arr
;
}
}
});
},
// 查看消息详情
edit
()
{
this
.
$router
.
push
({
path
:
`/chain-history-detail`
,
query
:
{}
});
},
}
};
</
script
>
<
style
lang=
"scss"
scoped
>
.chain-history-detail
{
.component-content
{
padding
:
10px
;
background
:
#fff
;
// margin: 84px 20px 20px;
.search-title
{
display
:
flex
;
flex-direction
:
row
;
align-items
:
center
;
justify-content
:
space-between
;
padding
:
10px
12px
;
font-size
:
12px
;
margin-bottom
:
20px
;
border-bottom
:
1px
solid
#efefef
;
.num
{
color
:
#449284
;
}
}
}
}
</
style
>
\ No newline at end of file
src/views/IM/chain-history/list.vue
浏览文件 @
03ef70dc
...
@@ -5,20 +5,24 @@
...
@@ -5,20 +5,24 @@
<el-row
:gutter=
"30"
class=
"row"
type=
"flex"
style=
"margin-top: 10px;margin-right:0px;"
>
<el-row
:gutter=
"30"
class=
"row"
type=
"flex"
style=
"margin-top: 10px;margin-right:0px;"
>
<el-form
ref=
"serchForm"
inline
:model=
"searchParam"
label-width=
"15px"
style=
"width:100%;text-align:right;"
>
<el-form
ref=
"serchForm"
inline
:model=
"searchParam"
label-width=
"15px"
style=
"width:100%;text-align:right;"
>
<el-form-item
label=
""
>
<el-form-item
label=
""
>
<el-input
clearable
v-model=
"searchParam.name
"
size=
"mini"
placeholder=
"请输入任务编号"
><el-button
slot=
"append"
icon=
"el-icon-search"
@
click=
"search()"
></el-button></el-input>
<el-input
clearable
v-model=
"searchParam.messageLogId
"
size=
"mini"
placeholder=
"请输入任务编号"
><el-button
slot=
"append"
icon=
"el-icon-search"
@
click=
"search()"
></el-button></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
""
style=
"position:relative;top:-8px;left:0;margin-bottom: 0px;"
>
<el-form-item
label=
""
style=
"position:relative;top:-8px;left:0;margin-bottom: 0px;"
>
<el-date-picker
v-model=
"searchParam.
nam
e"
size=
"mini"
type=
"date"
placeholder=
"请选择日期"
></el-date-picker>
<el-date-picker
v-model=
"searchParam.
chooseDat
e"
size=
"mini"
type=
"date"
placeholder=
"请选择日期"
></el-date-picker>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
</el-row>
</el-row>
<el-table
:data=
"tableData"
style=
"width: 100%"
v-loading=
"loading"
>
<el-table
:data=
"tableData"
style=
"width: 100%"
v-loading=
"loading"
>
<el-table-column
prop=
"id"
label=
"任务ID"
min-width=
"50"
align=
"center"
></el-table-column>
<el-table-column
prop=
"id"
label=
"任务ID"
min-width=
"50"
align=
"center"
></el-table-column>
<el-table-column
prop=
"subject"
label=
"任务名"
min-width=
"100"
align=
"center"
></el-table-column>
<el-table-column
prop=
"subject"
label=
"任务名"
min-width=
"100"
align=
"center"
></el-table-column>
<el-table-column
prop=
"category"
label=
"群发人数"
min-width=
"50"
align=
"center"
></el-table-column>
<el-table-column
prop=
"totalNumber"
label=
"群发人数"
min-width=
"50"
align=
"center"
></el-table-column>
<el-table-column
prop=
"remark"
label=
"发送日期"
min-width=
"100"
align=
"center"
></el-table-column>
<el-table-column
prop=
"createdTime"
label=
"发送日期"
min-width=
"100"
align=
"center"
></el-table-column>
<el-table-column
prop=
"createdusername"
label=
"发送者"
min-width=
"50"
align=
"center"
></el-table-column>
<el-table-column
prop=
"createdName"
label=
"发送者"
min-width=
"50"
align=
"center"
></el-table-column>
<el-table-column
prop=
"createdusername"
label=
"发送状态"
min-width=
"50"
align=
"center"
></el-table-column>
<el-table-column
label=
"发送状态"
min-width=
"50"
align=
"center"
>
<template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
status
|
statusFilter
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
fixed=
"right"
align=
"center"
min-width=
"100"
>
<el-table-column
label=
"操作"
fixed=
"right"
align=
"center"
min-width=
"100"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"text"
size=
"small"
@
click=
"edit(scope.row)"
>
查看
</el-button>
<el-button
type=
"text"
size=
"small"
@
click=
"edit(scope.row)"
>
查看
</el-button>
...
@@ -31,6 +35,19 @@
...
@@ -31,6 +35,19 @@
</div>
</div>
</div>
</div>
</el-table>
</el-table>
<!-- 分页 -->
<div
class=
"pagination"
>
<el-pagination
background
@
size-change=
"handleSizeChange"
@
current-change=
"handleCurrentChange"
:current-page=
"searchParam.pageNo"
:page-sizes=
"[15, 30, 50, 100, 200, 500, 700, 1000, 1500, 2000]"
:page-size=
"searchParam.pageSize"
layout=
"total, sizes, prev, pager, next, jumper"
:total=
"totalRows"
>
</el-pagination>
</div>
</div>
</div>
</div>
</div>
</template>
</template>
...
@@ -50,30 +67,27 @@ export default {
...
@@ -50,30 +67,27 @@ export default {
curmbFirst
:
"云鹊客服"
,
curmbFirst
:
"云鹊客服"
,
curmbSecond
:
"消息查询"
,
curmbSecond
:
"消息查询"
,
searchParam
:
{
searchParam
:
{
theme
:
""
,
chooseDate
:
''
,
type
:
""
,
messageLogId
:
''
,
name
:
""
,
token
:
''
,
status
:
""
,
pageNo
:
1
,
pageNo
:
1
,
pageSize
:
15
pageSize
:
15
},
},
category
:
[],
tableData
:
[],
categoryStatus
:
""
,
totalRows
:
0
,
tableData
:
[{}],
loading
:
false
,
loading
:
false
,
nextSessionId
:
""
};
};
},
},
computed
:
{},
computed
:
{},
filters
:
{
filters
:
{
filteFun
(
index
)
{
statusFilter
(
index
)
{
let
str
=
""
;
let
str
=
""
;
if
(
index
==
1
)
{
if
(
index
==
1
)
{
str
=
"
未发布
"
;
str
=
"
发送中
"
;
}
else
if
(
index
==
2
)
{
}
else
if
(
index
==
2
)
{
str
=
"
已发布
"
;
str
=
"
发送成功
"
;
}
else
if
(
index
==
3
)
{
}
else
if
(
index
==
3
)
{
str
=
"
已下线
"
;
str
=
"
发送失败
"
;
}
}
return
str
;
return
str
;
}
}
...
@@ -91,48 +105,20 @@ export default {
...
@@ -91,48 +105,20 @@ export default {
methods
:
{
methods
:
{
// 列表查询
// 列表查询
search
()
{
search
()
{
//
this.getData();
this
.
getData
();
},
},
// 获取数据
// 获取数据
getData
()
{
getData
()
{
let
subject
=
0
,
status
=
0
,
name
=
0
;
this
.
loading
=
true
;
this
.
loading
=
true
;
let
cStatus
=
this
.
categoryStatus
?
this
.
categoryStatus
:
"0"
;
//'0'表示默认查所有的
let
url
=
`/im/group/list`
let
url
=
let
params
=
this
.
searchParam
;
"/interaction/discuss/"
+
this
.
GET
(
url
,
{
params
}).
then
(
res
=>
{
cStatus
+
"/"
+
subject
+
"/"
+
name
+
"/"
+
status
+
"/"
+
this
.
searchParam
.
pageNo
+
"/"
+
this
.
searchParam
.
pageSize
;
this
.
GET
(
url
).
then
(
res
=>
{
this
.
loading
=
false
;
this
.
loading
=
false
;
if
(
res
.
code
==
"000000"
)
{
if
(
res
.
code
==
"000000"
)
{
console
.
log
(
res
.
data
);
console
.
log
(
res
.
data
);
this
.
tableData
=
res
.
data
.
resp
.
discuss
||
[];
this
.
tableData
=
res
.
data
.
list
;
this
.
nextSessionId
=
this
.
tableData
[
0
]
&&
this
.
tableData
[
0
].
id
;
this
.
totalRows
=
res
.
data
.
total
;
console
.
log
(
"this.nextSessionId"
,
this
.
nextSessionId
);
if
(
res
.
data
.
typeList
&&
res
.
data
.
typeList
.
length
)
{
let
arr
=
[];
for
(
let
i
=
0
;
i
<
res
.
data
.
typeList
.
length
;
i
++
)
{
let
obj
=
{};
obj
.
label
=
res
.
data
.
typeList
[
i
];
obj
.
value
=
res
.
data
.
typeList
[
i
];
arr
.
push
(
obj
);
}
this
.
category
=
arr
;
}
}
}
});
});
},
},
...
@@ -144,6 +130,14 @@ export default {
...
@@ -144,6 +130,14 @@ export default {
query
:
{}
query
:
{}
});
});
},
},
handleSizeChange
(
value
)
{
this
.
searchParam
.
pageSize
=
value
;
this
.
handleGoSearch
();
},
handleCurrentChange
(
value
)
{
this
.
searchParam
.
pageNo
=
value
;
this
.
handleGoSearch
();
}
}
}
};
};
</
script
>
</
script
>
...
...
src/views/IM/chain-message/index.vue
浏览文件 @
03ef70dc
...
@@ -6,34 +6,47 @@
...
@@ -6,34 +6,47 @@
</div>
</div>
<el-form
class=
"form"
ref=
"form"
:model=
"searchParam"
>
<el-form
class=
"form"
ref=
"form"
:model=
"searchParam"
>
<el-form-item
label=
"群发标题"
>
<el-form-item
label=
"群发标题"
>
<el-input
clearable
v-model=
"searchParam.t
heme"
size=
"mini
"
placeholder=
"请输入群发标题"
style=
"width: 300px;"
></el-input>
<el-input
clearable
v-model=
"searchParam.t
itle"
size=
"mini"
maxlength=
"20
"
placeholder=
"请输入群发标题"
style=
"width: 300px;"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"目标用户"
>
<el-form-item
label=
"目标用户"
>
<el-input
clearable
v-model=
"searchParam.theme"
size=
"mini"
placeholder=
"请输入目标用户"
style=
"width: 300px;"
></el-input>
<el-input
clearable
v-model=
"fileName"
size=
"mini"
placeholder=
"请上传目标用户"
style=
"width: 300px;"
></el-input>
<el-upload
class=
"upload-demo"
accept=
".xlsx"
action=
"#"
:before-upload=
"uploadUserFile"
>
<el-button
type=
"default"
size=
"mini"
>
<el-button
type=
"default"
size=
"mini"
>
<img
src=
"../../../assets/image/IM/upload.png"
/>
<img
src=
"../../../assets/image/IM/upload.png"
/>
<span>
上传列表
</span>
<span>
上传列表
</span>
</el-button>
</el-button>
</el-upload>
</el-form-item>
</el-form-item>
<div
class=
"user-list"
>
<div
class=
"user-list"
@
click=
"downTemplate"
>
<img
src=
"../../../assets/image/IM/down.png"
/>
<img
src=
"../../../assets/image/IM/down.png"
/>
<span>
用户列表模板.xsls
</span>
<span>
用户列表模板.xsls
</span>
</div>
</div>
<div
class=
"text-content"
>
<div
class=
"content-container"
v-for=
"(item, index) in searchParam.contentModelList"
:key=
"index"
>
<p>
文本信息
<i
class=
"el-icon-error"
@
click=
"deleteText"
></i></p>
<div
class=
"text-content"
v-if=
"item.type === 0"
>
<el-input
type=
"textarea"
clearable
v-model=
"searchParam.theme"
size=
"mini"
placeholder=
"请输入文本信息"
style=
"width: 300px;"
></el-input>
<p>
文本信息
<i
class=
"el-icon-error"
@
click=
"deleteText(item,index)"
></i></p>
<el-input
type=
"textarea"
clearable
v-model=
"item.info"
size=
"mini"
placeholder=
"请输入文本信息"
style=
"width: 300px;"
></el-input>
</div>
</div>
<div
class=
"file-content"
>
<div
class=
"file-content"
v-if=
"item.type == 1"
>
<p>
文件信息
<i
class=
"el-icon-error"
@
click=
"deleteFile"
></i></p>
<p>
文件信息
<i
class=
"el-icon-error"
@
click=
"deleteFile(item,index)"
></i></p>
<el-input
clearable
v-model=
"searchParam.theme"
size=
"mini"
placeholder=
"请输入文件信息"
style=
"width: 300px;"
></el-input>
<el-input
v-model=
"item.info"
size=
"mini"
placeholder=
"请上传文件信息"
style=
"width: 300px;"
></el-input>
<el-button
type=
"default"
size=
"mini"
>
<el-upload
class=
"upload-demo"
action=
"#"
:before-upload=
"uploadImportFile"
>
<el-button
type=
"default"
size=
"mini"
@
click=
"getFileIndex(index)"
>
<img
src=
"../../../assets/image/IM/upload.png"
/>
<img
src=
"../../../assets/image/IM/upload.png"
/>
<span>
上传文件
</span>
<span>
上传文件
</span>
</el-button>
</el-button>
</el-upload>
</div>
</div>
<div
class=
"link-content
"
>
<div
class=
"link-content"
v-if=
"item.type == 3
"
>
<p>
链接
<i
class=
"el-icon-error"
@
click=
"deleteLink
"
></i></p>
<p>
链接
<i
class=
"el-icon-error"
@
click=
"deleteLink(item,index)
"
></i></p>
<el-select
clearable
v-model=
"searchParam.theme
"
size=
"mini"
placeholder=
"请选择链接"
style=
"width: 300px;"
>
<el-select
clearable
v-model=
"item.info
"
size=
"mini"
placeholder=
"请选择链接"
style=
"width: 300px;"
>
<el-option
<el-option
v-for=
"item in options"
v-for=
"item in options"
:key=
"item.value"
:key=
"item.value"
...
@@ -42,6 +55,7 @@
...
@@ -42,6 +55,7 @@
</el-option>
</el-option>
</el-select>
</el-select>
</div>
</div>
</div>
</el-form>
</el-form>
<div
class=
"content-type"
>
<div
class=
"content-type"
>
<el-button
type=
"default"
size=
"mini"
@
click=
"addText"
>
<el-button
type=
"default"
size=
"mini"
@
click=
"addText"
>
...
@@ -57,7 +71,7 @@
...
@@ -57,7 +71,7 @@
<span>
链接
</span>
<span>
链接
</span>
</el-button>
</el-button>
</div>
</div>
<el-button
class=
"confirm-btn"
size=
"mini"
>
确认群发
</el-button>
<el-button
class=
"confirm-btn"
size=
"mini"
@
click=
"confirmSubmit"
>
确认群发
</el-button>
</div>
</div>
</div>
</div>
</
template
>
</
template
>
...
@@ -67,17 +81,22 @@ import { doUpload, getFilePath } from "@/utils/qiniu-util";
...
@@ -67,17 +81,22 @@ import { doUpload, getFilePath } from "@/utils/qiniu-util";
import
{
validateWord
}
from
"@/utils/validate.js"
;
import
{
validateWord
}
from
"@/utils/validate.js"
;
import
{
openLoading
,
closeLoading
}
from
"@/utils/utils"
;
import
{
openLoading
,
closeLoading
}
from
"@/utils/utils"
;
import
*
as
commonUtil
from
"@/utils/utils"
;
import
*
as
commonUtil
from
"@/utils/utils"
;
let
vm
=
null
;
export
default
{
export
default
{
components
:
{
components
:
{
BreadCrumb
BreadCrumb
},
},
data
()
{
data
()
{
return
{
return
{
fileName
:
''
,
contentList
:
[],
searchParam
:
{
searchParam
:
{
title
:
''
,
fileModel
:
{},
contentModelList
:
[]
},
},
options
:
[],
options
:
[],
templateFileUrl
:
''
,
fileIndex
:
0
};
};
},
},
created
()
{
created
()
{
...
@@ -88,24 +107,139 @@ export default {
...
@@ -88,24 +107,139 @@ export default {
commonUtil
.
resizeHeight
();
commonUtil
.
resizeHeight
();
},
},
methods
:
{
methods
:
{
// 上传列表
uploadUserFile
(
file
)
{
let
_this
=
this
;
let
base64
=
{};
let
FileExt
=
file
.
name
.
replace
(
/.+
\.
/
,
""
);
if
([
"xls"
,
"xlsx"
].
indexOf
(
FileExt
.
toLowerCase
())
===
-
1
)
{
_this
.
$message
({
type
:
"warning"
,
message
:
"请上传后缀名为xls,xlsx的原文件!"
,
});
return
false
;
}
let
reader
=
new
FileReader
();
reader
.
readAsDataURL
(
file
);
reader
.
onload
=
function
()
{
base64
.
ext
=
file
.
name
.
split
(
"."
)[
1
];
base64
.
file
=
reader
.
result
;
base64
.
fileName
=
file
.
name
;
_this
.
fileName
=
file
.
name
;
}
this
.
searchParam
.
fileModel
=
base64
;
},
// 下载用户模板
downTemplate
()
{
let
a
=
document
.
createElement
(
'a'
);
a
.
setAttribute
(
'href'
,
this
.
templateFileUrl
);
a
.
click
();
},
// 添加文本
addText
()
{
addText
()
{
if
(
this
.
searchParam
.
contentModelList
.
length
<
6
)
{
this
.
searchParam
.
contentModelList
.
push
({
type
:
0
,
// 0 文本 1图片 2PDF 3链接
info
:
''
})
}
else
{
this
.
$message
({
message
:
'添加内容数不能大于5'
,
type
:
'warning'
});
}
},
},
deleteText
()
{
// 删除文本
deleteText
(
item
,
index
)
{
this
.
searchParam
.
contentModelList
.
splice
(
index
,
1
)
},
},
// 添加文件
addFile
()
{
addFile
()
{
if
(
this
.
searchParam
.
contentModelList
.
length
<
6
)
{
this
.
searchParam
.
contentModelList
.
push
({
type
:
1
,
info
:
''
,
url
:
''
})
}
else
{
this
.
$message
({
message
:
'添加内容数不能大于5'
,
type
:
'warning'
});
}
},
},
deleteFile
()
{
// 上传文件
getFileIndex
(
index
)
{
this
.
fileIndex
=
index
;
},
uploadImportFile
(
file
)
{
let
_this
=
this
;
let
FileExt
=
file
.
name
.
replace
(
/.+
\.
/
,
""
);
if
([
"pdf"
,
"png"
,
"jpg"
,
"jpeg"
].
indexOf
(
FileExt
.
toLowerCase
())
===
-
1
)
{
_this
.
$message
({
type
:
"warning"
,
message
:
"请上传后缀名为png、jpg、jpeg、pdf的文件!"
,
});
return
false
;
}
else
{
if
(
FileExt
==
'png'
||
FileExt
==
'jpg'
||
FileExt
==
"jpeg"
)
{
_this
.
searchParam
.
contentModelList
[
this
.
fileIndex
].
type
=
1
;
// 图片
let
imgFile
=
new
FileReader
();
imgFile
.
readAsDataURL
(
file
);
imgFile
.
onload
=
function
(
theFile
)
{
let
image
=
new
Image
();
image
.
src
=
theFile
.
target
.
result
;
image
.
onload
=
function
()
{
_this
.
searchParam
.
contentModelList
[
this
.
fileIndex
].
width
=
this
.
width
;
_this
.
searchParam
.
contentModelList
[
this
.
fileIndex
].
height
=
this
.
height
;
}
}
}
else
if
(
FileExt
==
'pdf'
)
{
_this
.
searchParam
.
contentModelList
[
this
.
fileIndex
].
type
=
2
;
// pdf
}
}
_this
.
searchParam
.
contentModelList
[
this
.
fileIndex
].
fileSize
=
file
.
size
;
doUpload
(
_this
,
file
,
getFilePath
(
file
,
null
),
'preview4'
,
'progress1'
,
1
).
then
(
path
=>
{
_this
.
searchParam
.
contentModelList
[
this
.
fileIndex
].
url
=
path
.
fullPath
;
});
},
},
// 删除文件
deleteFile
(
item
,
index
)
{
this
.
searchParam
.
contentModelList
.
splice
(
index
,
1
)
},
// 添加链接
addLink
()
{
addLink
()
{
if
(
this
.
searchParam
.
contentModelList
.
length
<
6
)
{
this
.
searchParam
.
contentModelList
.
push
({
type
:
3
,
info
:
''
,
url
:
''
})
}
else
{
this
.
$message
({
message
:
'添加内容数不能大于5'
,
type
:
'warning'
});
}
},
},
deleteLink
()
{
// 删除链接
deleteLink
(
item
,
index
)
{
this
.
searchParam
.
contentModelList
.
splice
(
index
,
1
)
},
// 确认群发
confirmSubmit
()
{
console
.
log
(
this
.
searchParam
)
this
.
loading
=
true
;
let
req
=
{
groupMessageSendReq
:
this
.
searchParam
};
this
.
POST
(
"/im/group/message"
,
req
).
then
(
res
=>
{
this
.
loading
=
false
;
if
(
res
.
code
==
"000000"
)
{
}
}
});
}
}
}
};
};
</
script
>
</
script
>
...
@@ -136,6 +270,7 @@ export default {
...
@@ -136,6 +270,7 @@ export default {
line-height
:
20px
;
line-height
:
20px
;
}
}
.user-list
{
.user-list
{
display
:
inline
;
margin-top
:
-10px
;
margin-top
:
-10px
;
img
{
img
{
width
:
12px
;
width
:
12px
;
...
@@ -146,6 +281,21 @@ export default {
...
@@ -146,6 +281,21 @@ export default {
font-size
:
14px
;;
font-size
:
14px
;;
}
}
}
}
.upload-demo
{
display
:
inline-block
;
button
{
position
:
relative
;
width
:
104px
;
img
{
position
:
absolute
;
left
:
18%
;
top
:
17%
;
}
span
{
padding-left
:
10px
;
}
}
}
.text-content
,
.file-content
,
.link-content
{
.text-content
,
.file-content
,
.link-content
{
margin
:
10px
0
25px
;
margin
:
10px
0
25px
;
font-size
:
14px
;
font-size
:
14px
;
...
@@ -161,6 +311,7 @@ export default {
...
@@ -161,6 +311,7 @@ export default {
}
}
}
}
.content-type
{
.content-type
{
margin-top
:
20px
;
margin-bottom
:
20px
;
margin-bottom
:
20px
;
padding
:
0
10px
;
padding
:
0
10px
;
button
{
button
{
...
...
写
预览
Markdown
格式
0%
请重试
or
附加一个文件
附加文件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录