Skip to content

Commit 0beda6e

Browse files
committed
refactor: 重构MP/autoReply, 拆分组件
1 parent 39d8ecb commit 0beda6e

File tree

3 files changed

+205
-170
lines changed

3 files changed

+205
-170
lines changed
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
<template>
2+
<el-table v-loading="props.loading" :data="props.list">
3+
<el-table-column
4+
label="请求消息类型"
5+
align="center"
6+
prop="requestMessageType"
7+
v-if="msgType === MsgType.Message"
8+
/>
9+
<el-table-column
10+
label="关键词"
11+
align="center"
12+
prop="requestKeyword"
13+
v-if="msgType === MsgType.Keyword"
14+
/>
15+
<el-table-column
16+
label="匹配类型"
17+
align="center"
18+
prop="requestMatch"
19+
v-if="msgType === MsgType.Keyword"
20+
>
21+
<template #default="scope">
22+
<dict-tag :type="DICT_TYPE.MP_AUTO_REPLY_REQUEST_MATCH" :value="scope.row.requestMatch" />
23+
</template>
24+
</el-table-column>
25+
<el-table-column label="回复消息类型" align="center">
26+
<template #default="scope">
27+
<dict-tag :type="DICT_TYPE.MP_MESSAGE_TYPE" :value="scope.row.responseMessageType" />
28+
</template>
29+
</el-table-column>
30+
<el-table-column label="回复内容" align="center">
31+
<template #default="scope">
32+
<div v-if="scope.row.responseMessageType === 'text'">{{ scope.row.responseContent }}</div>
33+
<div v-else-if="scope.row.responseMessageType === 'voice'">
34+
<WxVoicePlayer v-if="scope.row.responseMediaUrl" :url="scope.row.responseMediaUrl" />
35+
</div>
36+
<div v-else-if="scope.row.responseMessageType === 'image'">
37+
<a target="_blank" :href="scope.row.responseMediaUrl">
38+
<img :src="scope.row.responseMediaUrl" style="width: 100px" />
39+
</a>
40+
</div>
41+
<div
42+
v-else-if="
43+
scope.row.responseMessageType === 'video' ||
44+
scope.row.responseMessageType === 'shortvideo'
45+
"
46+
>
47+
<WxVideoPlayer
48+
v-if="scope.row.responseMediaUrl"
49+
:url="scope.row.responseMediaUrl"
50+
style="margin-top: 10px"
51+
/>
52+
</div>
53+
<div v-else-if="scope.row.responseMessageType === 'news'">
54+
<WxNews :articles="scope.row.responseArticles" />
55+
</div>
56+
<div v-else-if="scope.row.responseMessageType === 'music'">
57+
<WxMusic
58+
:title="scope.row.responseTitle"
59+
:description="scope.row.responseDescription"
60+
:thumb-media-url="scope.row.responseThumbMediaUrl"
61+
:music-url="scope.row.responseMusicUrl"
62+
:hq-music-url="scope.row.responseHqMusicUrl"
63+
/>
64+
</div>
65+
</template>
66+
</el-table-column>
67+
<el-table-column
68+
label="创建时间"
69+
align="center"
70+
prop="createTime"
71+
:formatter="dateFormatter"
72+
width="180"
73+
/>
74+
<el-table-column label="操作" align="center">
75+
<template #default="scope">
76+
<el-button
77+
type="primary"
78+
link
79+
@click="emit('on-update', scope.row.id)"
80+
v-hasPermi="['mp:auto-reply:update']"
81+
>
82+
修改
83+
</el-button>
84+
<el-button
85+
type="danger"
86+
link
87+
@click="emit('on-delete', scope.row.id)"
88+
v-hasPermi="['mp:auto-reply:delete']"
89+
>
90+
删除
91+
</el-button>
92+
</template>
93+
</el-table-column>
94+
</el-table>
95+
</template>
96+
97+
<script setup lang="ts">
98+
import WxVideoPlayer from '@/views/mp/components/wx-video-play/main.vue'
99+
import WxVoicePlayer from '@/views/mp/components/wx-voice-play/main.vue'
100+
import WxMusic from '@/views/mp/components/wx-music/main.vue'
101+
import WxNews from '@/views/mp/components/wx-news/main.vue'
102+
import { dateFormatter } from '@/utils/formatTime'
103+
import { DICT_TYPE } from '@/utils/dict'
104+
import { MsgType } from './types'
105+
106+
const props = defineProps<{
107+
loading: boolean
108+
list: any[]
109+
msgType: MsgType
110+
}>()
111+
112+
const emit = defineEmits<{
113+
(e: 'on-update', v: number)
114+
(e: 'on-delete', v: number)
115+
}>()
116+
</script>
117+
118+
<style scoped></style>
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// 消息类型(Follow: 关注时回复;Message: 消息回复;Keyword: 关键词回复)
2+
// 作为tab.name,enum的数字不能随意修改,与api参数相关
3+
export enum MsgType {
4+
Follow = 1,
5+
Message = 2,
6+
Keyword = 3
7+
}
8+
9+
type ReplyType = 'text' | 'image' | 'voice' | 'video' | 'shortvideo' | 'location' | 'link'
10+
11+
export interface ReplyForm {
12+
// relation:
13+
id?: number
14+
accountId?: number
15+
type?: MsgType
16+
// request:
17+
requestMessageType?: ReplyType
18+
requestMatch?: number
19+
requestKeyword?: string
20+
// response:
21+
responseMessageType?: ReplyType
22+
responseContent?: string
23+
responseMediaId?: number
24+
responseMediaUrl?: string
25+
responseTitle?: string
26+
responseDescription?: number
27+
responseThumbMediaId?: string
28+
responseThumbMediaUrl?: string
29+
responseArticles?: any[]
30+
responseMusicUrl?: string
31+
responseHqMusicUrl?: string
32+
}
33+
34+
export interface ObjData {
35+
type: ReplyType
36+
accountId?: number
37+
content?: string
38+
mediaId?: number
39+
url?: string
40+
title?: string
41+
description?: string
42+
thumbMediaId?: number
43+
thumbMediaUrl?: string
44+
articles?: any[]
45+
musicUrl?: string
46+
hqMusicUrl?: string
47+
}

0 commit comments

Comments
 (0)