Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
admin
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
be49c381
authored
May 05, 2023
by
dhb52
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor: mp/autoReply 拆分ReplyForm组件
parent
2b844899
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
98 additions
and
52 deletions
+98
-52
src/views/mp/autoReply/components/ReplyForm.vue
+78
-0
src/views/mp/autoReply/index.vue
+20
-52
No files found.
src/views/mp/autoReply/components/ReplyForm.vue
0 → 100644
View file @
be49c381
<
template
>
<div>
<el-form
ref=
"formRef"
:model=
"replyForm"
:rules=
"rules"
label-width=
"80px"
>
<el-form-item
label=
"消息类型"
prop=
"requestMessageType"
v-if=
"msgType === MsgType.Message"
>
<el-select
v-model=
"replyForm.requestMessageType"
placeholder=
"请选择"
>
<template
v-for=
"dict in getDictOptions(DICT_TYPE.MP_MESSAGE_TYPE)"
:key=
"dict.value"
>
<el-option
v-if=
"RequestMessageTypes.includes(dict.value)"
:label=
"dict.label"
:value=
"dict.value"
/>
</
template
>
</el-select>
</el-form-item>
<el-form-item
label=
"匹配类型"
prop=
"requestMatch"
v-if=
"msgType === MsgType.Keyword"
>
<el-select
v-model=
"replyForm.requestMatch"
placeholder=
"请选择匹配类型"
clearable
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.MP_AUTO_REPLY_REQUEST_MATCH)"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"关键词"
prop=
"requestKeyword"
v-if=
"msgType === MsgType.Keyword"
>
<el-input
v-model=
"replyForm.requestKeyword"
placeholder=
"请输入内容"
clearable
/>
</el-form-item>
<el-form-item
label=
"回复消息"
>
<WxReplySelect
v-model=
"reply"
/>
</el-form-item>
</el-form>
</div>
</template>
<
script
setup
lang=
"ts"
name=
"ReplyForm"
>
import
WxReplySelect
,
{
type
Reply
}
from
'@/views/mp/components/wx-reply'
import
type
{
FormInstance
}
from
'element-plus'
import
{
MsgType
}
from
'./types'
import
{
DICT_TYPE
,
getDictOptions
,
getIntDictOptions
}
from
'@/utils/dict'
const
props
=
defineProps
<
{
modelValue
:
any
reply
:
Reply
msgType
:
MsgType
}
>
()
const
emit
=
defineEmits
<
{
(
e
:
'update:reply'
,
v
:
Reply
)
(
e
:
'update:modelValue'
,
v
:
any
)
}
>
()
const
reply
=
computed
<
Reply
>
({
get
:
()
=>
props
.
reply
,
set
:
(
val
)
=>
emit
(
'update:reply'
,
val
)
})
const
replyForm
=
computed
<
any
>
({
get
:
()
=>
props
.
modelValue
,
set
:
(
val
)
=>
emit
(
'update:modelValue'
,
val
)
})
const
formRef
=
ref
<
FormInstance
|
null
>
(
null
)
// 表单 ref
const
RequestMessageTypes
=
[
'text'
,
'image'
,
'voice'
,
'video'
,
'shortvideo'
,
'location'
,
'link'
]
// 允许选择的请求消息类型
// 表单校验
const
rules
=
{
requestKeyword
:
[{
required
:
true
,
message
:
'请求的关键字不能为空'
,
trigger
:
'blur'
}],
requestMatch
:
[{
required
:
true
,
message
:
'请求的关键字的匹配不能为空'
,
trigger
:
'blur'
}]
}
defineExpose
({
resetFields
:
()
=>
formRef
.
value
?.
resetFields
(),
validate
:
async
()
=>
formRef
.
value
?.
validate
()
})
</
script
>
<
style
scoped
></
style
>
src/views/mp/autoReply/index.vue
View file @
be49c381
...
@@ -53,38 +53,13 @@
...
@@ -53,38 +53,13 @@
@
on-delete=
"onDelete"
@
on-delete=
"onDelete"
/>
/>
<!-- 添加或修改自动回复的对话框 -->
<el-dialog
<!-- TODO @Dhb52 -->
:title=
"isCreating ? '新增自动回复' : '修改自动回复'"
<el-dialog
:title=
"dialogTitle"
v-model=
"showFormDialog"
width=
"800px"
destroy-on-close
>
v-model=
"showDialog"
<el-form
ref=
"formRef"
:model=
"replyForm"
:rules=
"rules"
label-width=
"80px"
>
width=
"800px"
<el-form-item
label=
"消息类型"
prop=
"requestMessageType"
v-if=
"msgType === MsgType.Message"
>
destroy-on-close
<el-select
v-model=
"replyForm.requestMessageType"
placeholder=
"请选择"
>
>
<
template
v-for=
"dict in getDictOptions(DICT_TYPE.MP_MESSAGE_TYPE)"
:key=
"dict.value"
>
<ReplyForm
v-model=
"replyForm"
v-model:reply=
"reply"
:msg-type=
"msgType"
ref=
"formRef"
/>
<el-option
v-if=
"RequestMessageTypes.includes(dict.value)"
:label=
"dict.label"
:value=
"dict.value"
/>
</
template
>
</el-select>
</el-form-item>
<el-form-item
label=
"匹配类型"
prop=
"requestMatch"
v-if=
"msgType === MsgType.Keyword"
>
<el-select
v-model=
"replyForm.requestMatch"
placeholder=
"请选择匹配类型"
clearable
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.MP_AUTO_REPLY_REQUEST_MATCH)"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"关键词"
prop=
"requestKeyword"
v-if=
"msgType === MsgType.Keyword"
>
<el-input
v-model=
"replyForm.requestKeyword"
placeholder=
"请输入内容"
clearable
/>
</el-form-item>
<el-form-item
label=
"回复消息"
>
<WxReplySelect
v-model=
"reply"
/>
</el-form-item>
</el-form>
<
template
#
footer
>
<
template
#
footer
>
<el-button
@
click=
"cancel"
>
取 消
</el-button>
<el-button
@
click=
"cancel"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"onSubmit"
>
确 定
</el-button>
<el-button
type=
"primary"
@
click=
"onSubmit"
>
确 定
</el-button>
...
@@ -93,23 +68,22 @@
...
@@ -93,23 +68,22 @@
</ContentWrap>
</ContentWrap>
</template>
</template>
<
script
setup
lang=
"ts"
name=
"MpAutoReply"
>
<
script
setup
lang=
"ts"
name=
"MpAutoReply"
>
import
WxReplySelect
,
{
type
Reply
,
ReplyType
}
from
'@/views/mp/components/wx-reply'
import
ReplyForm
from
'@/views/mp/autoReply/components/ReplyForm.vue'
import
{
type
Reply
,
ReplyType
}
from
'@/views/mp/components/wx-reply'
import
WxAccountSelect
from
'@/views/mp/components/wx-account-select'
import
WxAccountSelect
from
'@/views/mp/components/wx-account-select'
import
*
as
MpAutoReplyApi
from
'@/api/mp/autoReply'
import
*
as
MpAutoReplyApi
from
'@/api/mp/autoReply'
import
{
DICT_TYPE
,
getDictOptions
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
ContentWrap
}
from
'@/components/ContentWrap'
import
{
ContentWrap
}
from
'@/components/ContentWrap'
import
type
{
FormInstance
,
TabPaneName
}
from
'element-plus'
import
type
{
TabPaneName
}
from
'element-plus'
import
ReplyTable
from
'./components/ReplyTable.vue'
import
ReplyTable
from
'./components/ReplyTable.vue'
import
{
MsgType
}
from
'./components/types'
import
{
MsgType
}
from
'./components/types'
const
message
=
useMessage
()
// 消息
const
message
=
useMessage
()
// 消息
const
accountId
=
ref
(
-
1
)
// 公众号ID
const
accountId
=
ref
(
-
1
)
// 公众号ID
const
msgType
=
ref
<
MsgType
>
(
MsgType
.
Keyword
)
// 消息类型
const
msgType
=
ref
<
MsgType
>
(
MsgType
.
Keyword
)
// 消息类型
const
RequestMessageTypes
=
[
'text'
,
'image'
,
'voice'
,
'video'
,
'shortvideo'
,
'location'
,
'link'
]
// 允许选择的请求消息类型
const
loading
=
ref
(
true
)
// 遮罩层
const
loading
=
ref
(
true
)
// 遮罩层
const
total
=
ref
(
0
)
// 总条数
const
total
=
ref
(
0
)
// 总条数
const
list
=
ref
<
any
[]
>
([])
// 自动回复列表
const
list
=
ref
<
any
[]
>
([])
// 自动回复列表
const
formRef
=
ref
<
FormInstance
|
null
>
(
null
)
// 表单 ref
const
formRef
=
ref
<
InstanceType
<
typeof
ReplyForm
>
|
null
>
(
null
)
// 表单 ref
// 查询参数
// 查询参数
const
queryParams
=
reactive
({
const
queryParams
=
reactive
({
pageNo
:
1
,
pageNo
:
1
,
...
@@ -117,19 +91,14 @@ const queryParams = reactive({
...
@@ -117,19 +91,14 @@ const queryParams = reactive({
accountId
:
accountId
accountId
:
accountId
})
})
const
dialogTitle
=
ref
(
''
)
// 弹出层标题
const
isCreating
=
ref
(
false
)
// 是否新建(否则编辑)
const
show
Form
Dialog
=
ref
(
false
)
// 是否显示弹出层
const
showDialog
=
ref
(
false
)
// 是否显示弹出层
const
replyForm
=
ref
<
any
>
({})
// 表单参数
const
replyForm
=
ref
<
any
>
({})
// 表单参数
// 回复消息
// 回复消息
const
reply
=
ref
<
Reply
>
({
const
reply
=
ref
<
Reply
>
({
type
:
ReplyType
.
Text
,
type
:
ReplyType
.
Text
,
accountId
:
-
1
accountId
:
-
1
})
})
// 表单校验
const
rules
=
{
requestKeyword
:
[{
required
:
true
,
message
:
'请求的关键字不能为空'
,
trigger
:
'blur'
}],
requestMatch
:
[{
required
:
true
,
message
:
'请求的关键字的匹配不能为空'
,
trigger
:
'blur'
}]
}
/** 侦听账号变化 */
/** 侦听账号变化 */
const
onAccountChanged
=
(
id
:
number
)
=>
{
const
onAccountChanged
=
(
id
:
number
)
=>
{
...
@@ -174,8 +143,8 @@ const onCreate = () => {
...
@@ -174,8 +143,8 @@ const onCreate = () => {
accountId
:
queryParams
.
accountId
accountId
:
queryParams
.
accountId
}
}
dialogTitle
.
value
=
'新增自动回复'
isCreating
.
value
=
true
show
Form
Dialog
.
value
=
true
showDialog
.
value
=
true
}
}
/** 修改按钮操作 */
/** 修改按钮操作 */
...
@@ -207,8 +176,8 @@ const onUpdate = async (id: number) => {
...
@@ -207,8 +176,8 @@ const onUpdate = async (id: number) => {
}
}
// 打开表单
// 打开表单
dialogTitle
.
value
=
'修改自动回复'
isCreating
.
value
=
false
show
Form
Dialog
.
value
=
true
showDialog
.
value
=
true
}
}
/** 删除按钮操作 */
/** 删除按钮操作 */
...
@@ -220,8 +189,7 @@ const onDelete = async (id: number) => {
...
@@ -220,8 +189,7 @@ const onDelete = async (id: number) => {
}
}
const
onSubmit
=
async
()
=>
{
const
onSubmit
=
async
()
=>
{
const
valid
=
await
formRef
.
value
?.
validate
()
await
formRef
.
value
?.
validate
()
if
(
!
valid
)
return
// 处理回复消息
// 处理回复消息
const
submitForm
:
any
=
{
...
replyForm
.
value
}
const
submitForm
:
any
=
{
...
replyForm
.
value
}
...
@@ -245,7 +213,7 @@ const onSubmit = async () => {
...
@@ -245,7 +213,7 @@ const onSubmit = async () => {
message
.
success
(
'新增成功'
)
message
.
success
(
'新增成功'
)
}
}
show
Form
Dialog
.
value
=
false
showDialog
.
value
=
false
await
getList
()
await
getList
()
}
}
...
@@ -264,7 +232,7 @@ const reset = () => {
...
@@ -264,7 +232,7 @@ const reset = () => {
// 取消按钮
// 取消按钮
const
cancel
=
()
=>
{
const
cancel
=
()
=>
{
show
Form
Dialog
.
value
=
false
showDialog
.
value
=
false
reset
()
reset
()
}
}
</
script
>
</
script
>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment