Files
sbnews/admin/src/views/channel/wx_oa/menu_com/useMenuOa.ts
T

168 lines
4.2 KiB
TypeScript

import type { FormRules } from 'element-plus'
import { ref } from 'vue'
import type { Menu } from '@/api/channel/wx_oa'
import { getOaMenu, setOaMenuPublish, setOaMenuSave } from '@/api/channel/wx_oa'
import feedback from '@/utils/feedback'
// 菜单实例
export const menuRef = shallowRef()
// 菜单数据
const menuList = ref<Menu[]>([])
const menuIndex = ref<number>(0)
// 校验
export const rules = reactive<FormRules>({
name: [
{
required: true,
message: '必填项不能为空',
trigger: ['blur', 'change']
},
{
min: 1,
max: 12,
message: '长度限制12个字符',
trigger: ['blur', 'change']
}
],
menuType: [
{
required: true,
message: '必填项不能为空',
trigger: ['blur', 'change']
}
],
visitType: [
{
required: true,
message: '必填项不能为空',
trigger: ['blur', 'change']
}
],
url: [
{
required: true,
message: '必填项不能为空',
trigger: ['blur', 'change']
},
{
pattern:
// eslint-disable-next-line no-useless-escape
/(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/,
message: '请输入合法的网址链接',
trigger: ['blur', 'change']
}
],
appId: [
{
required: true,
message: '必填项不能为空',
trigger: ['blur', 'change']
}
],
pagePath: [
{
required: true,
message: '必填项不能为空',
trigger: ['blur', 'change']
}
]
})
export const useMenuOa = (ref: any) => {
if (ref) menuRef.value = ref
// 添加主菜单
const handleAddMenu = () => {
menuList.value.push({
name: '菜单名称',
has_menu: false,
type: 'view',
url: '',
appid: '',
pagepath: '',
sub_button: []
})
}
// 添加子菜单
const handleAddSubMenu = (event?: Menu) => {
const index = menuIndex.value
if (menuList.value[index].sub_button.length >= 5) {
feedback.msgError('已添加上限~')
return
}
menuList.value[index].sub_button.push(event)
}
// 编辑子菜单
const handleEditSubMenu = (event: Menu, subIndex: number) => {
const index = menuIndex.value
menuList.value[index].sub_button[subIndex] = event
}
// 删除主菜单
const handleDelMenu = (index: number) => {
if (index != 0) {
menuIndex.value--
}
menuList.value.splice(index, 1)
}
// 删除子菜单
const handleDelSubMenu = (index: number, subIndex: number) => {
menuList.value[index].sub_button.splice(subIndex, 1)
}
// 获取菜单
const getOaMenuFunc = async () => {
try {
menuList.value = await getOaMenu()
} catch (error) {
console.log('获取菜单=>', error)
}
}
// 保存菜单
const handleSave = async () => {
const refs = menuRef.value.value
for (let i = 0; i < refs.length; i++) {
try {
await refs[i].menuFormRef.validate()
} catch (error) {
menuIndex.value = i
return
}
}
await setOaMenuSave(menuList.value)
}
// 保存菜单
const handlePublish = async () => {
const refs = menuRef.value.value
for (let i = 0; i < refs.length; i++) {
try {
await refs[i].menuFormRef.validate()
} catch (error) {
menuIndex.value = i
return
}
}
await setOaMenuPublish(menuList.value)
}
return {
menuList,
menuIndex,
handleAddMenu,
handleAddSubMenu,
handleEditSubMenu,
handleDelMenu,
handleDelSubMenu,
getOaMenuFunc,
handleSave,
handlePublish
}
}