You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
320 lines
11 KiB
320 lines
11 KiB
<!-- 自定义菜单 --> |
|
<link rel="stylesheet" href="../../../../static/mweixin/css/custom-menu.css" /> |
|
<div id="custom-menu" class="ms-custom-menu ms-weixin-content" v-if="menuVue.menuActive == '自定义菜单'"> |
|
<el-container class="ms-custom-container"> |
|
<el-header class="ms-header" height="50px"> |
|
<el-row> |
|
<el-button type="danger" size="small" icon="el-icon-delet" @click='menuDel'>删除</el-button> |
|
<el-button size="small" @click="menuSort">菜单排序</el-button> |
|
<el-button class="ms-fr" size="small" icon="el-icon-refresh" @click='resetForm'>重置</el-button> |
|
<el-button type="success" class="ms-fr" size="small" icon="el-icon-tickets" @click='menuSave'>保存</el-button> |
|
<el-button type="success" class="ms-fr" size="small" icon="el-icon-tickets" @click='menuCreate'>发布菜单</el-button> |
|
</el-row> |
|
</el-header> |
|
<el-container class="ms-container"> |
|
<el-aside> |
|
<el-container> |
|
<el-header>公众号</el-header> |
|
<el-main></el-main> |
|
<el-footer> |
|
<el-button icon="el-icon-date"></el-button> |
|
<div class="ms-create-menu"> |
|
<div class="ms-create-sub-menu" v-for="(menu,index) of mainMenuList" :key="index"> |
|
<!-- 父菜单 --> |
|
<el-button type="primary" @click="openSubMenu(index,menu);menu.addSubMenuShow = !menu.addSubMenuShow;$forceUpdate()">{{ |
|
menu.menuTitle }}</el-button> |
|
<div class="sub-menu-list" v-show="menu.addSubMenuShow"> |
|
<!-- 子菜单 --> |
|
<el-button v-for="(sub,index) of currentSubMenuList" :key="index" v-text="sub.menuTitle" class="sub-menu-item" |
|
@click='customMenuForm = sub;$forceUpdate();'></el-button> |
|
<!-- 添加子菜单的加号按钮 --> |
|
<el-button icon="el-icon-plus" class="ms-create-btn" @click="addSubMenu"></el-button> |
|
</div> |
|
</div> |
|
<!-- 添加父菜单的加号按钮 --> |
|
<el-button icon="el-icon-plus" @click="addMenu" v-show="addMenuBtn && mainMenuList.length<3" class="add-menu"></el-button> |
|
</div> |
|
</el-footer> |
|
</el-container> |
|
</el-aside> |
|
<el-main> |
|
<el-card class="custom-menu-card" shadow="never"> |
|
<div slot="header" class="clearfix"> |
|
<span v-text="customMenuForm.menuId ? '修改菜单' : '新建菜单'"></span> |
|
</div> |
|
<el-form ref="customMenuForm" :rules="customMenuFormRules" :model="customMenuForm" label-width="81px"> |
|
<el-form-item label="菜单名称" prop="menuTitle" class="ms-custom-menu-name"> |
|
<el-input v-model="customMenuForm.menuTitle" size="medium"></el-input> |
|
<span>菜单名称字数不多于5个汉字或10个字母</span> |
|
</el-form-item> |
|
<el-form-item label="菜单内容" class="ms-custom-menu-content" prop='menuUrl'> |
|
<el-input v-model="customMenuForm.menuUrl" size="medium"></el-input> |
|
<span>请输入菜单地址</span> |
|
<!-- <el-tabs v-model="activeName" @tab-click=""> |
|
<el-tab-pane label="图片" name="picture"> |
|
<span slot="label"> |
|
<i class="el-icon-picture"></i>图片</span> |
|
<div onclick="materialBankFormVue.open()"> |
|
<i class="el-icon-picture-outline"></i> |
|
<span>从素材库选择</span> |
|
</div> |
|
<div onclick="newPicFormVue.open()"> |
|
<i class="el-icon-plus"></i> |
|
<span>新建图片</span> |
|
</div> |
|
</el-tab-pane> |
|
<el-tab-pane label="图文管理" name="article"> |
|
<span slot="label"> |
|
<i class="el-icon-picture"></i>图文管理</span> |
|
<div onclick="materialBankFormVue.open()"> |
|
<i class="el-icon-picture-outline"></i> |
|
<span>从素材库选择</span> |
|
</div> |
|
<div onclick="newPicFormVue.open()"> |
|
<i class="el-icon-plus"></i> |
|
<span>新建图文</span> |
|
</div> |
|
</el-tab-pane> |
|
</el-tabs> --> |
|
</el-form-item> |
|
</el-form> |
|
</el-card> |
|
</el-main> |
|
</el-container> |
|
</el-container> |
|
</div> |
|
<script> |
|
var customMenuVue = new Vue({ |
|
el: "#custom-menu", |
|
data: { |
|
customMenuForm: { |
|
menuTitle: "", |
|
menuUrl: "", |
|
menuId: "", |
|
menuMenuId: "", //父菜单编号 |
|
menuStatus: "", //菜单状态 0:不启用 1:启用 |
|
menuStyle: "", //类型:1文本 2图文 4外链接 |
|
menuType: "", //菜单属性 0:链接 1:回复 |
|
}, |
|
customMenuFormRules: { |
|
menuTitle: [{ |
|
required: true, |
|
message: "请输入菜单名称", |
|
trigger: ["blur", "change"] |
|
}, |
|
{ |
|
min: 1, |
|
max: 5, |
|
message: "长度在 1 到 5 个字符", |
|
trigger: ["blur", "change"] |
|
} |
|
], |
|
menuUrl: [{ |
|
required: true, |
|
message: '请输入菜单地址', |
|
trigger: 'change' |
|
}, { |
|
validator: function (rule, value, callback) { |
|
/^(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?$/.test(value) ? |
|
callback() : callback('链接不合法') |
|
} |
|
}] |
|
}, |
|
addMenuBtn: true, //添加菜单按钮 |
|
activeName: "picture", //导航切换 当前激活面板 |
|
mainMenuList: [], |
|
subMenuList: [], //所有的子菜单 |
|
currentSubMenuList: [], //打开当前父菜单的子菜单列表 |
|
currentMenuMenuId: '', //打开当前父菜单的菜单ID |
|
}, |
|
methods: { |
|
menuList: function () { |
|
var that = this; |
|
ms.http.get(ms.manager + "/mweixin/menu/list.do") |
|
.then((res) => { |
|
console.log('res菜单', res); |
|
that.mainMenuList = [] |
|
that.subMenuList = [] |
|
res.rows && res.rows.forEach(function (item, index) { |
|
item.menuMenuId == null && that.mainMenuList.push(item) |
|
item.menuMenuId != null && that.subMenuList.push(item) |
|
}) |
|
// 初始化显示第一个菜单 |
|
if(that.mainMenuList.length){ |
|
that.customMenuForm = that.mainMenuList[0] |
|
}else{ |
|
that.mainMenuList.push(that.customMenuForm) |
|
// 没有一个菜单的时候 |
|
that.mainMenuList[0].menuTitle = '新建菜单' |
|
} |
|
}, (err) => { |
|
console.log(err) |
|
}) |
|
}, |
|
// 菜单排序 |
|
menuSort: function () { |
|
event.target.innerText = "完成"; |
|
}, |
|
// 添加菜单 |
|
addMenu: function () { |
|
this.mainMenuList.push({ |
|
menuTitle: "新建菜单" |
|
}); |
|
this.$nextTick(function () { |
|
var that = this; |
|
Array.prototype.forEach.call( |
|
document.querySelectorAll(".ms-create-sub-menu"), |
|
function (item, index) { |
|
item.style.width = '80px'; |
|
} |
|
); |
|
document.querySelector(".add-menu").style.width = '80px'; |
|
}); |
|
if (this.mainMenuList.length == 3) { |
|
return (this.addMenuBtn = false); |
|
} |
|
}, |
|
// 添加子菜单 |
|
addSubMenu: function () { |
|
if(!this.currentMenuMenuId){ |
|
return this.$message.error("创建子菜单前,必须先创建父菜单"); |
|
} |
|
if (this.currentSubMenuList.length > 4) { |
|
return this.$message.error("子菜单最多5项"); |
|
} |
|
var that = this; |
|
console.log('that.currentMenuMenuId', that.currentMenuMenuId); |
|
this.currentSubMenuList.push({ |
|
menuTitle: "新建子菜单", |
|
menuMenuId: that.currentMenuMenuId, |
|
}); |
|
console.log('currentSubMenuList', this.currentSubMenuList); |
|
}, |
|
openSubMenu(index, menu) { |
|
console.log('menu', menu); |
|
var that = this; |
|
that.customMenuForm = menu |
|
that.closeAllSubMenu(index); |
|
that.currentSubMenuList = []; |
|
that.currentMenuMenuId = menu.menuId; |
|
console.log('that.subMenuList', that.subMenuList); |
|
that.subMenuList.forEach(function (item, index) { |
|
item.menuMenuId == menu.menuId && that.currentSubMenuList.push(item) |
|
}) |
|
}, |
|
// 关闭所有的子菜单弹出层 |
|
closeAllSubMenu: function (num) { |
|
// 确保当前的菜单不被重置成false |
|
this.mainMenuList.forEach(function (item, index) { |
|
num != index && (item.addSubMenuShow = false) |
|
}) |
|
}, |
|
// 保存菜单 |
|
menuSave: function () { |
|
// 表单校验 |
|
var that = this; |
|
this.$refs.customMenuForm.validate(function (ispass, object) { |
|
if (ispass) { |
|
// 判断保存的菜单类型,这里先简单处理,写死 |
|
that.customMenuForm.menuStatus = 1 |
|
that.customMenuForm.menuStyle = 4 //类型:1文本 2图文 4外链接 |
|
that.customMenuForm.menuType = 0 //菜单属性 0:链接 1:回复 |
|
ms.http.post(ms.manager + "/mweixin/menu/save.do", that.customMenuForm) |
|
.then(function (res) { |
|
that.customMenuForm.menuStatus = that.customMenuForm.menuStyle = that.customMenuForm.menuType = '' |
|
if(res.menuId){ |
|
that.$message.success('菜单保存成功') |
|
that.menuList(); |
|
}else{ |
|
that.$message.error(res.resultMsg) |
|
} |
|
}, function (err) { |
|
console.log(err) |
|
}) |
|
} |
|
}) |
|
}, |
|
// 删除菜单 |
|
menuDel: function () { |
|
var that = this; |
|
// 当存在子菜单的时候,不得删除菜单 |
|
if(that.customMenuForm.menuMenuId == null && that.currentSubMenuList.length){ |
|
return that.$message.error('当前菜单存在子菜单,不得删除') |
|
} |
|
if(!that.customMenuForm.menuId){ |
|
return that.$message.error('请新建菜单之后,再进行删除') |
|
} |
|
this.$confirm('此操作将永久删除该菜单, 是否继续?', '提示', { |
|
confirmButtonText: '确定', |
|
cancelButtonText: '取消', |
|
type: 'warning' |
|
}).then(() => { |
|
ms.http.post(ms.manager + "/mweixin/menu/delete.do", { |
|
ids: that.customMenuForm.menuId |
|
}) |
|
.then(function (res) { |
|
that.$message({ |
|
type: 'success', |
|
message: '删除成功!' |
|
}); |
|
// 清空表单值 |
|
that.resetForm(); |
|
// 刷新菜单列表 |
|
that.menuList(); |
|
}, function (err) { |
|
console.log(err) |
|
}) |
|
}).catch(() => { |
|
this.$message({ |
|
type: 'info', |
|
message: '已取消删除' |
|
}); |
|
}) |
|
}, |
|
// 发布菜单 |
|
menuCreate: function () { |
|
var that = this; |
|
this.$confirm('此操作将发布公众号菜单, 是否继续?', '提示', { |
|
confirmButtonText: '确定', |
|
cancelButtonText: '取消', |
|
type: 'warning' |
|
}).then(() => { |
|
ms.http.get(ms.manager + "/mweixin/menu/create.do") |
|
.then(function (res) { |
|
if(res.result){ |
|
that.$message({ |
|
type: 'success', |
|
message: '发布成功!,菜单将于2小时后生效' |
|
}); |
|
}else{ |
|
that.$message({ |
|
type: 'error', |
|
message: '发布失败!' |
|
}); |
|
} |
|
}, function (err) { |
|
console.log(err) |
|
}) |
|
}).catch(() => { |
|
this.$message({ |
|
type: 'info', |
|
message: '已取消删除' |
|
}); |
|
}) |
|
}, |
|
// 重置 |
|
resetForm:function(){ |
|
// this.$refs.customMenuForm.resetFields();未在表单中,清空不了 |
|
this.customMenuForm.menuStatus = |
|
this.customMenuForm.menuStyle = |
|
this.customMenuForm.menuType = |
|
this.customMenuForm.menuTitle = |
|
this.customMenuForm.menuUrl = |
|
'' |
|
} |
|
}, |
|
mounted: function () { |
|
this.menuList(); |
|
}, |
|
}); |
|
</script> |