pull/18/head
李嫚嫚 2 months ago
parent 1345f361e0
commit de89a408d0

@ -1,179 +1,169 @@
<template> <template>
<div> <!-- 组件的HTML模板 -->
<div id="app-menu"> <div class="mod-config">
<!-- 预览窗 --> <!-- 搜索表单 -->
<div class="weixin-preview"> <el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<div class="weixin-bd"> <!-- 输入框用于输入搜索关键词 -->
<div class="weixin-header">公众号菜单</div> <el-form-item>
<ul class="weixin-menu" id="weixin-menu"> <el-input v-model="dataForm.key" placeholder="参数名" clearable></el-input>
<!-- 遍历主菜单按钮 --> </el-form-item>
<li v-for="(btn, i) in menu.buttons" :key="i" class="menu-item" <!-- 操作按钮 -->
:class="{'current': selectedMenuIndex === i && selectedMenuLevel == 1}" <el-form-item>
@click="selectMenu(i)"> <!-- 查询按钮触发数据列表的获取 -->
<div class="menu-item-title"> <el-button @click="getDataList()"></el-button>
<span>{{ btn.name }}</span> <!-- 新增按钮根据权限显示 -->
</div> <el-button v-if="isAuth('wx:wxaccount:save')" type="primary" @click="addOrUpdateHandle()"></el-button>
<ul class="weixin-sub-menu"> <!-- 批量删除按钮根据权限和选中项显示 -->
<!-- 遍历子菜单按钮 --> <el-button v-if="isAuth('wx:wxaccount:delete')" type="danger" @click="deleteHandle()" :disabled="dataListSelections.length <= 0"></el-button>
<li v-for="(sub, i2) in btn.subButtons" :key="i2" class="menu-sub-item" </el-form-item>
:class="{'current': selectedMenuIndex === i && selectedSubMenuIndex === i2 && selectedMenuLevel == 2, 'on-drag-over': onDragOverMenu === (i + '_' + i2)}" </el-form>
@click.stop="selectSubMenu(i, i2)" draggable="true" <!-- 数据表格 -->
@dragstart="selectSubMenu(i, i2)" @dragover.prevent="onDragOverMenu = (i + '_' + i2)" @drop="onDrop(i, i2)"> <el-table :data="dataList" border v-loading="dataListLoading" @selection-change="selectionChangeHandle" style="width: 100%;">
<div class="menu-item-title"> <!-- 多选框 -->
<span>{{ sub.name }}</span> <el-table-column type="selection" header-align="center" align="center" width="50">
</div> </el-table-column>
<!-- 展示appid -->
</li> <el-table-column prop="appid" header-align="center" align="center" label="appid">
<!-- 如果子菜单数量少于5个显示添加按钮 --> </el-table-column>
<li v-if="btn.subButtons.length < 5" class="menu-sub-item" <!-- 展示公众号名称 -->
:class="{'on-drag-over': onDragOverMenu === (i + '_' + btn.subButtons.length)}" <el-table-column prop="name" header-align="center" align="center" label="公众号名称">
@click.stop="addMenu(2, i)" @dragover.prevent="onDragOverMenu = (i + '_' + btn.subButtons.length)" @drop="onDrop(i, btn.subButtons.length)"> </el-table-column>
<div class="menu-item-title"> <!-- 展示公众号类型通过formatter格式化显示 -->
<i class="el-icon-plus"></i> <el-table-column prop="type" header-align="center" align="center" label="类型" :formatter="accountTypeFormat">
</div> </el-table-column>
</li> <!-- 展示是否认证 -->
<!-- 菜单展开/收起图标 --> <el-table-column prop="verified" header-align="center" align="center" label="是否认证">
<i class="menu-arrow arrow_out"></i> <!-- 使用插槽自定义显示内容 -->
<i class="menu-arrow arrow_in"></i> <span slot-scope="scope">{{scope.row.verified?"是":"否"}}</span>
</ul> </el-table-column>
</li> <!-- 操作列 -->
<!-- 如果主菜单数量少于3个显示添加按钮 --> <el-table-column fixed="right" header-align="center" align="center" width="150" label="操作">
<li class="menu-item" v-if="menu.buttons.length < 3" @click="addMenu(1)"> <!-- 使用插槽添加按钮 -->
<i class="el-icon-plus"></i> <template slot-scope="scope">
</li> <el-button type="text" size="small" @click="accessInfo(scope.row)"></el-button>
</ul> <el-button type="text" size="small" @click="addOrUpdateHandle(scope.row)"></el-button>
</div> <el-button type="text" size="small" @click="deleteHandle(scope.row.appid)"></el-button>
</div> </template>
<!-- 菜单编辑器 --> </el-table-column>
<div class="weixin-menu-detail" v-if="selectedMenuLevel > 0"> </el-table>
<wx-menu-button-editor :button="selectedButton" :selectedMenuLevel="selectedMenuLevel" @delMenu="delMenu"></wx-menu-button-editor> <!-- 新增/修改弹窗 -->
</div> <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
</div> <!-- 接入信息弹窗 -->
<!-- 发布和清空菜单的按钮组 --> <account-access v-if="accountAccessVisible" ref="accountAccessDialog"></account-access>
<div class="weixin-btn-group" v-if="isAuth('wx:menu:save')" @click="updateWxMenu">
<el-button type="success" icon="el-icon-upload">发布</el-button>
<el-button type="warning" icon="el-icon-delete" @click="delMenuAll"></el-button>
<!-- 注意这里可能是一个小错误因为delMenu方法通常用于删除选中的菜单项而不是清空所有菜单 -->
<!-- 如果要清空所有菜单可能需要一个单独的方法比如delMenuAll -->
</div>
</div> </div>
</template> </template>
<script> <script>
//
import AddOrUpdate from './account/wx-account-add-or-update'
import AccountAccess from './account/wx-account-access-info'
import { mapState } from 'vuex'
export default { export default {
components: {
wxMenuButtonEditor: () => import('./wx-menu-button-editor')
},
data() { data() {
return { return {
menu: { 'buttons': [] },// //
selectedMenuIndex: '',// dataForm: {
selectedSubMenuIndex: '',// key: ''
selectedMenuLevel: 0,// },
selectedButton: '',// //
onDragOverMenu:'' // dataList: [],
//
dataListLoading: false,
//
dataListSelections: [],
// /
addOrUpdateVisible: false,
//
accountAccessVisible: false
} }
}, },
mounted() { //
// components: {
this.getWxMenu(); AddOrUpdate,
AccountAccess
},
// Vuex
computed: mapState({
ACCOUNT_TYPES: state => state.wxAccount.ACCOUNT_TYPES
}),
//
activated() {
this.getDataList()
}, },
methods: { methods: {
getWxMenu() { //
getDataList() {
this.dataListLoading = true
// HTTP
this.$http({ this.$http({
url: this.$http.adornUrl('/manage/wxMenu/getMenu') url: this.$http.adornUrl('/manage/wxAccount/list'), // URL
method: 'get',
params: this.$http.adornParams({ //
'key': this.dataForm.key
})
}).then(({ data }) => { }).then(({ data }) => {
if (data.code == 200) { if (data && data.code === 200) {
this.menu = data.data.menu; this.dataList = data.list //
this.$store.commit('wxAccount/updateAccountList', data.list) // Vuex
} else { } else {
this.$message({ this.dataList = [] //
type: 'error',
message: data.msg
});
} }
this.dataListLoading = false //
}); })
},
//
selectMenu(i) {
this.selectedMenuLevel = 1
this.selectedSubMenuIndex = ''
this.selectedMenuIndex = i
this.selectedButton = this.menu.buttons[i]
}, },
// //
selectSubMenu(i,i2) { selectionChangeHandle(val) {
this.selectedMenuLevel = 2 this.dataListSelections = val
this.selectedMenuIndex = i
this.selectedSubMenuIndex = i2
this.selectedButton = this.menu.buttons[i].subButtons[i2]
}, },
// // /
addMenu(level,i) { addOrUpdateHandle(item) {
if (level == 1 && this.menu.buttons.length < 3) { this.addOrUpdateVisible = true
this.menu.buttons.push({ this.$nextTick(() => {
"type": "view", this.$refs.addOrUpdate.init(item) //
"name": "菜单名称",
"subButtons": [],
"url": ""
}) })
this.selectMenu(this.menu.buttons.length - 1)
}
if (level == 2 && this.menu.buttons[i].subButtons.length < 5) {
this.menu.buttons[i].subButtons.push({
"type": "view",
"name": "子菜单名称",
"url": ""
})
this.selectSubMenu(i,this.menu.buttons[i].subButtons.length - 1)
}
},
//
delMenu() {
if (this.selectedMenuLevel == 1 && confirm('删除后菜单下设置的内容将被删除')) {
this.menu.buttons.splice(this.selectedMenuIndex, 1);
this.unSelectMenu()
} else if (this.selectedMenuLevel == 2) {
this.menu.buttons[this.selectedMenuIndex].subButtons.splice(this.selectedSubMenuIndex, 1);
this.unSelectMenu()
}
}, },
unSelectMenu(){// //
this.selectedMenuLevel = 0 accessInfo(item) {
this.selectedMenuIndex = '' this.accountAccessVisible = true
this.selectedSubMenuIndex = '' this.$nextTick(() => {
this.selectedButton = '' this.$refs.accountAccessDialog.init(item) //
})
}, },
// //
updateWxMenu() { deleteHandle(appid) {
// appid
var ids = appid ? [appid] : this.dataListSelections.map(item => item.appid)
this.$confirm(`确定对[appid=${ids.join(',')}]进行[${appid ? '删除' : '批量删除'}]操作?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// HTTP
this.$http({ this.$http({
url: this.$http.adornUrl('/manage/wxMenu/updateMenu'), url: this.$http.adornUrl('/manage/wxAccount/delete'),
data: this.menu, method: 'post',
method: 'post' data: this.$http.adornData(ids, false) //
}).then(({ data }) => { }).then(({ data }) => {
if (data.code == 200) { if (data && data.code === 200) {
this.$message.success('操作成功') this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
this.getDataList() //
}
})
} else { } else {
this.$message.error(data.msg); this.$message.error(data.msg) //
} }
})
}); })
}, },
onDrop(i,i2){// //
this.onDragOverMenu=''; accountTypeFormat(row, column, cellValue) {
if(i==this.selectedMenuIndex && i2==this.selectedSubMenuIndex) // return this.ACCOUNT_TYPES[cellValue]
return
if(i!=this.selectedMenuIndex && this.menu.buttons[i].subButtons.length>=5){
this.$message.error('目标组已满');
return
}
this.menu.buttons[i].subButtons.splice(i2,0,this.selectedButton)
let delSubIndex = this.selectedSubMenuIndex
if(i==this.selectedMenuIndex && i2<this.selectedSubMenuIndex)
delSubIndex++
this.menu.buttons[this.selectedMenuIndex].subButtons.splice(delSubIndex, 1);
this.unSelectMenu()
} }
} }
} }
</script> </script>
<style src="@/assets/css/wx-menu.css"></style>
Loading…
Cancel
Save