Skip to content

Commit 098b730

Browse files
committed
refactor: 【MP自定义菜单】应用【公众号选择器】组件
1 parent a8b4c16 commit 098b730

File tree

1 file changed

+19
-61
lines changed

1 file changed

+19
-61
lines changed

src/views/mp/menu/index.vue

Lines changed: 19 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,7 @@
22
<doc-alert title="公众号菜单" url="https://doc.iocoder.cn/mp/menu/" />
33
<!-- 搜索工作栏 -->
44
<ContentWrap>
5-
<el-form class="-mb-15px" ref="queryFormRef" :inline="true" label-width="68px">
6-
<el-form-item label="公众号" prop="accountId">
7-
<el-select v-model="accountId" placeholder="请选择公众号" class="!w-240px">
8-
<el-option
9-
v-for="item in accountList"
10-
:key="item.id"
11-
:label="item.name"
12-
:value="item.id"
13-
/>
14-
</el-select>
15-
</el-form-item>
16-
<el-form-item>
17-
<el-button @click="handleQuery"><Icon icon="ep:search" />搜索</el-button>
18-
<el-button @click="resetQuery"><Icon icon="ep:refresh" />重置</el-button>
19-
</el-form-item>
20-
</el-form>
5+
<WxAccountSelect @change="(accountId) => accountChanged(accountId)" />
216
</ContentWrap>
227

238
<!-- 列表 -->
@@ -204,17 +189,15 @@ import { handleTree } from '@/utils/tree'
204189
import WxReplySelect from '@/views/mp/components/wx-reply/main.vue'
205190
import WxNews from '@/views/mp/components/wx-news/main.vue'
206191
import WxMaterialSelect from '@/views/mp/components/wx-material-select/main.vue'
207-
import { deleteMenu, getMenuList, saveMenu } from '@/api/mp/menu'
208-
import * as MpAccountApi from '@/api/mp/account'
192+
import WxAccountSelect from '@/views/mp/components/wx-account-select/main.vue'
193+
import * as MpMenuApi from '@/api/mp/menu'
209194
import menuOptions from './menuOptions'
210195
const message = useMessage() // 消息
211196
212197
// ======================== 列表查询 ========================
213198
const loading = ref(true) // 遮罩层
214199
const accountId = ref(undefined) // 公众号Id
215-
const name = ref('') // 公众号名
216200
const menuList = ref({ children: [] })
217-
const accountList = ref([]) // 公众号账号列表
218201
219202
// ======================== 菜单操作 ========================
220203
const isActive = ref(-1) // 一级菜单点中样式
@@ -228,60 +211,34 @@ const showConfigureContent = ref(true) // 是否展示配置内容;如果有
228211
const hackResetWxReplySelect = ref(false) // 重置 WxReplySelect 组件
229212
const tempObj = ref({}) // 右边临时变量,作为中间值牵引关系
230213
231-
const tempSelfObj = ref({
232-
// 一些临时值放在这里进行判断,如果放在 tempObj,由于引用关系,menu 也会多了多余的参数
233-
})
214+
// 一些临时值放在这里进行判断,如果放在 tempObj,由于引用关系,menu 也会多了多余的参数
215+
const tempSelfObj = ref({})
234216
const dialogNewsVisible = ref(false) // 跳转图文时的素材选择弹窗
235217
236-
onMounted(async () => {
237-
accountList.value = await MpAccountApi.getSimpleAccountList()
238-
// 选中第一个
239-
if (accountList.value.length > 0) {
240-
// @ts-ignore
241-
setAccountId(accountList.value[0].id)
242-
}
243-
await getList()
244-
})
245-
246-
// ======================== 列表查询 ========================
247-
/** 设置账号编号 */
248-
const setAccountId = (id) => {
218+
/** 侦听公众号变化 **/
219+
const accountChanged = (accountId) => {
249220
accountId.value = id
250-
name.value = accountList.value.find((item) => item.id === accountId.value)?.name
221+
getList()
251222
}
252223
224+
/** 查询并转换菜单 **/
253225
const getList = async () => {
254226
loading.value = false
255-
getMenuList(accountId.value)
256-
.then((response) => {
257-
const menuData = convertMenuList(response)
258-
menuList.value = handleTree(menuData, 'id')
259-
})
260-
.finally(() => {
261-
loading.value = false
262-
})
227+
try {
228+
const data = await MpMenuApi.getMenuList(accountId.value)
229+
const menuData = convertMenuList(data)
230+
menuList.value = handleTree(menuData, 'id')
231+
} finally {
232+
loading.value = false
233+
}
263234
}
264235
265236
/** 搜索按钮操作 */
266237
const handleQuery = () => {
267238
resetForm()
268-
// 默认选中第一个
269-
if (accountId.value) {
270-
setAccountId(accountId.value)
271-
}
272239
getList()
273240
}
274241
275-
/** 重置按钮操作 */
276-
const resetQuery = () => {
277-
resetForm()
278-
// 默认选中第一个
279-
if (accountList.value.length > 0) {
280-
setAccountId(accountList.value[0].id)
281-
}
282-
handleQuery()
283-
}
284-
285242
// 将后端返回的 menuList,转换成前端的 menuList
286243
const convertMenuList = (list) => {
287244
if (!list) return []
@@ -443,7 +400,7 @@ const handleSave = async () => {
443400
try {
444401
await message.confirm('确定要删除吗?')
445402
loading.value = true
446-
await saveMenu(accountId.value, convertMenuFormList())
403+
await MpMenuApi.saveMenu(accountId.value, convertMenuFormList())
447404
getList()
448405
message.notifySuccess('发布成功')
449406
} finally {
@@ -464,7 +421,7 @@ const handleDelete = async () => {
464421
try {
465422
await message.confirm('确定要删除吗?')
466423
loading.value = true
467-
await deleteMenu(accountId.value)
424+
await MpMenuApi.deleteMenu(accountId.value)
468425
handleQuery()
469426
message.notifySuccess('清空成功')
470427
} finally {
@@ -546,6 +503,7 @@ const deleteMaterial = () => {
546503
delete tempObj.value['replyArticles']
547504
}
548505
</script>
506+
549507
<!--本组件样式-->
550508
<style lang="scss" scoped="scoped">
551509
/* 公共颜色变量 */

0 commit comments

Comments
 (0)