mirror of
https://github.com/fugary/simple-element-plus-template.git
synced 2025-11-12 14:27:49 +00:00
菜单表单
This commit is contained in:
4
src/components/common-form/public.d.ts
vendored
4
src/components/common-form/public.d.ts
vendored
@@ -32,7 +32,7 @@ export interface CommonFormOption {
|
|||||||
/**表单类型*/
|
/**表单类型*/
|
||||||
type: 'input' | 'input-number' | 'cascader' | 'radio'
|
type: 'input' | 'input-number' | 'cascader' | 'radio'
|
||||||
| 'radio-group' | 'radio-button' | 'checkbox' | 'checkbox-group' | 'checkbox-button' | 'date-picker'
|
| 'radio-group' | 'radio-button' | 'checkbox' | 'checkbox-group' | 'checkbox-button' | 'date-picker'
|
||||||
| 'time-picker' | 'switch' | 'select' | 'option' | 'slider' | 'transfer' | 'upload' | 'common-icon-select' | 'common-autocomplete';
|
| 'time-picker' | 'switch' | 'select' | 'option' | 'slider' | 'transfer' | 'upload' | 'common-icon-select' | 'common-autocomplete' | 'tree-select';
|
||||||
/**数据值*/
|
/**数据值*/
|
||||||
value?: any;
|
value?: any;
|
||||||
/**属性名*/
|
/**属性名*/
|
||||||
@@ -62,4 +62,6 @@ export interface CommonFormOption {
|
|||||||
children?: Array<CommonFormOption>;
|
children?: Array<CommonFormOption>;
|
||||||
/**async-validator验证器*/
|
/**async-validator验证器*/
|
||||||
rules: Array<RuleItem>;
|
rules: Array<RuleItem>;
|
||||||
|
/**change事件*/
|
||||||
|
change: (val: any) => void
|
||||||
}
|
}
|
||||||
|
|||||||
8
src/components/public.d.ts
vendored
8
src/components/public.d.ts
vendored
@@ -12,3 +12,11 @@ export interface CommonPage {
|
|||||||
totalCount?: number;
|
totalCount?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* element树结构
|
||||||
|
*/
|
||||||
|
export interface CommonTreeNode {
|
||||||
|
value: string;
|
||||||
|
label: string;
|
||||||
|
children: Array<CommonTreeNode>;
|
||||||
|
}
|
||||||
|
|||||||
@@ -24,9 +24,10 @@ export const loadMenuResult = (id, config) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @param menus {MenuDto[]}
|
||||||
* @return {[CommonFormOption]}
|
* @return {[CommonFormOption]}
|
||||||
*/
|
*/
|
||||||
export const useMenuFormOptions = () => {
|
export const useMenuFormOptions = (menus) => {
|
||||||
return [{
|
return [{
|
||||||
labelKey: 'menu.label.menuNameCn',
|
labelKey: 'menu.label.menuNameCn',
|
||||||
prop: 'nameCn',
|
prop: 'nameCn',
|
||||||
@@ -37,7 +38,11 @@ export const useMenuFormOptions = () => {
|
|||||||
required: true
|
required: true
|
||||||
}, {
|
}, {
|
||||||
labelKey: 'menu.label.menuParent',
|
labelKey: 'menu.label.menuParent',
|
||||||
prop: 'parentId'
|
prop: 'parentId',
|
||||||
|
type: 'tree-select',
|
||||||
|
attrs: {
|
||||||
|
data: menus ? menus.map(menu2TreeMenu) : []
|
||||||
|
}
|
||||||
}, {
|
}, {
|
||||||
labelKey: 'menu.label.menuIcon',
|
labelKey: 'menu.label.menuIcon',
|
||||||
prop: 'iconCls',
|
prop: 'iconCls',
|
||||||
@@ -48,6 +53,24 @@ export const useMenuFormOptions = () => {
|
|||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param menu {MenuDto}
|
||||||
|
* @return {CommonTreeNode}
|
||||||
|
*/
|
||||||
|
export const menu2TreeMenu = (menu) => {
|
||||||
|
/**
|
||||||
|
* @type {CommonTreeNode}
|
||||||
|
*/
|
||||||
|
const treeNode = {
|
||||||
|
value: menu.id,
|
||||||
|
label: $i18nMsg(menu.nameCn, menu.nameEn)
|
||||||
|
}
|
||||||
|
if (menu.children) {
|
||||||
|
treeNode.children = menu.children.map(menu2TreeMenu)
|
||||||
|
}
|
||||||
|
return treeNode
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 接口菜单格式转换成页面展示格式
|
* 接口菜单格式转换成页面展示格式
|
||||||
* @param menu {MenuDto}
|
* @param menu {MenuDto}
|
||||||
|
|||||||
@@ -1,15 +1,17 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { onMounted, ref } from 'vue'
|
import { computed, onMounted, ref } from 'vue'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import { loadMenuResult, useMenuFormOptions } from '@/services/menu/MenuService'
|
import { loadAndParseMenus, loadMenuResult, useMenuFormOptions } from '@/services/menu/MenuService'
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
|
||||||
const menuDto = ref({
|
const menuDto = ref({
|
||||||
id: route.params.id
|
id: route.params.id
|
||||||
})
|
})
|
||||||
|
const selectMenus = ref([])
|
||||||
const menuFormOptions = ref(useMenuFormOptions())
|
const menuFormOptions = computed(() => {
|
||||||
|
return useMenuFormOptions(selectMenus.value)
|
||||||
|
})
|
||||||
|
|
||||||
const loadMenu = async () => {
|
const loadMenu = async () => {
|
||||||
const id = route.params.id
|
const id = route.params.id
|
||||||
@@ -22,7 +24,9 @@ const loadMenu = async () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(async () => {
|
||||||
|
const menus = await loadAndParseMenus()
|
||||||
|
selectMenus.value = menus
|
||||||
loadMenu()
|
loadMenu()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user