pull/8/head
cwy 8 months ago
parent 6f77f0cd3b
commit 73e0e034a8

@ -1,15 +1,20 @@
<template>
<!-- 使用 el-card 组件创建一个表单容器卡片设置阴影效果为无 -->
<el-card class="form-container" shadow="never">
<!-- el-form 表单组件绑定了 menu 数据对象作为表单数据模型同时指定了表单验证规则表单引用以及标签宽度 -->
<el-form :model="menu"
:rules="rules"
ref="menuFrom"
label-width="150px">
<!-- 表单项目标签为菜单名称并指定了对应的数据验证属性 prop title内部的输入框双向绑定 menu.title -->
<el-form-item label="菜单名称:" prop="title">
<el-input v-model="menu.title"></el-input>
</el-form-item>
<!-- 表单项目标签为上级菜单内部是一个下拉选择框双向绑定 menu.parentId设置了占位符 -->
<el-form-item label="上级菜单:">
<el-select v-model="menu.parentId"
placeholder="请选择菜单">
<!-- 通过 v-for 循环渲染下拉选项每个选项的 keylabel value 分别对应 item idtitle id数据来源于 selectMenuList -->
<el-option
v-for="item in selectMenuList"
:key="item.id"
@ -18,22 +23,27 @@
</el-option>
</el-select>
</el-form-item>
<!-- 表单项目标签为前端名称并指定了对应的数据验证属性 prop name内部的输入框双向绑定 menu.name -->
<el-form-item label="前端名称:" prop="name">
<el-input v-model="menu.name"></el-input>
</el-form-item>
<!-- 表单项目标签为前端图标并指定了对应的数据验证属性 prop icon内部包含一个输入框双向绑定 menu.icon 以及一个 svg-icon 组件用于根据输入的图标类名显示图标 -->
<el-form-item label="前端图标:" prop="icon">
<el-input v-model="menu.icon" style="width: 80%"></el-input>
<svg-icon style="margin-left: 8px" :icon-class="menu.icon"></svg-icon>
</el-form-item>
<!-- 表单项目标签为是否显示内部是一个单选按钮组双向绑定 menu.hidden用于选择是否显示该菜单 -->
<el-form-item label="是否显示:">
<el-radio-group v-model="menu.hidden">
<el-radio :label="0"></el-radio>
<el-radio :label="1"></el-radio>
</el-radio-group>
</el-form-item>
<!-- 表单项目标签为排序内部的输入框双向绑定 menu.sort -->
<el-form-item label="排序:">
<el-input v-model="menu.sort"></el-input>
</el-form-item>
<!-- 表单项目包含两个按钮提交按钮为主要类型primary点击时调用 onSubmit 方法并传入表单引用名重置按钮在非编辑状态!isEdit下显示点击时调用 resetForm 方法并传入表单引用名 -->
<el-form-item>
<el-button type="primary" @click="onSubmit('menuFrom')"></el-button>
<el-button v-if="!isEdit" @click="resetForm('menuFrom')"></el-button>
@ -41,113 +51,136 @@
</el-form>
</el-card>
</template>
<script>
import {fetchList, createMenu, updateMenu, getMenu} from '@/api/menu';
// @/api/menu API
import {fetchList, createMenu, updateMenu, getMenu} from '@/api/menu';
// ID
const defaultMenu = {
title: '',
parentId: 0,
name: '',
icon: '',
hidden: 0,
sort: 0
};
const defaultMenu = {
title: '',
parentId: 0,
name: '',
icon: '',
hidden: 0,
sort: 0
};
export default {
name: "MenuDetail",
props: {
isEdit: {
type: Boolean,
default: false
export default {
name: "MenuDetail",
// props isEdit false
props: {
isEdit: {
type: Boolean,
default: false
}
},
data() {
return {
// defaultMenu
menu: Object.assign({}, defaultMenu),
// 使
selectMenuList: [],
//
rules: {
title: [
{required: true, message: '请输入菜单名称', trigger: 'blur'},
{min: 2, max: 140, message: '长度在 2 到 140 个字符', trigger: 'blur'}
],
name: [
{required: true, message: '请输入前端名称', trigger: 'blur'},
{min: 2, max: 140, message: '长度在 2 到 140 个字符', trigger: 'blur'}
],
icon: [
{required: true, message: '请输入前端图标', trigger: 'blur'},
{min: 2, max: 140, message: '长度在 2 到 140 个字符', trigger: 'blur'}
]
}
}
},
created() {
// props isEdit
if (this.isEdit) {
// API ID menu
getMenu(this.$route.query.id).then(response => {
this.menu = response.data;
});
} else {
//
this.menu = Object.assign({}, defaultMenu);
}
//
this.getSelectMenuList();
},
methods: {
getSelectMenuList() {
// API 100
fetchList(0, {pageSize: 100, pageNum: 1}).then(response => {
// selectMenuList
this.selectMenuList = response.data.list;
// 便
this.selectMenuList.unshift({id: 0, title: '无上级菜单'});
});
},
data() {
return {
menu: Object.assign({}, defaultMenu),
selectMenuList: [],
rules: {
title: [
{required: true, message: '请输入菜单名称', trigger: 'blur'},
{min: 2, max: 140, message: '长度在 2 到 140 个字符', trigger: 'blur'}
],
name: [
{required: true, message: '请输入前端名称', trigger: 'blur'},
{min: 2, max: 140, message: '长度在 2 到 140 个字符', trigger: 'blur'}
],
icon: [
{required: true, message: '请输入前端图标', trigger: 'blur'},
{min: 2, max: 140, message: '长度在 2 到 140 个字符', trigger: 'blur'}
]
onSubmit(formName) {
//
this.$refs[formName].validate((valid) => {
if (valid) {
//
this.$confirm('是否提交数据', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
//
if (this.isEdit) {
// API ID
// 1000
updateMenu(this.$route.query.id, this.menu).then(response => {
this.$message({
message: '修改成功',
type: 'success',
duration: 1000
});
this.$router.back();
});
} else {
// API
// resetForm 1000
createMenu(this.menu).then(response => {
this.$refs[formName].resetFields();
this.resetForm(formName);
this.$message({
message: '提交成功',
type: 'success',
duration: 1000
});
this.$router.back();
});
}
});
} else {
// 1000 false
this.$message({
message: '验证失败',
type: 'error',
duration: 1000
});
return false;
}
}
});
},
created() {
if (this.isEdit) {
getMenu(this.$route.query.id).then(response => {
this.menu = response.data;
});
} else {
this.menu = Object.assign({}, defaultMenu);
}
resetForm(formName) {
//
this.$refs[formName].resetFields();
//
this.menu = Object.assign({}, defaultMenu);
//
this.getSelectMenuList();
},
methods: {
getSelectMenuList() {
fetchList(0, {pageSize: 100, pageNum: 1}).then(response => {
this.selectMenuList = response.data.list;
this.selectMenuList.unshift({id: 0, title: '无上级菜单'});
});
},
onSubmit(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
this.$confirm('是否提交数据', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
if (this.isEdit) {
updateMenu(this.$route.query.id, this.menu).then(response => {
this.$message({
message: '修改成功',
type: 'success',
duration: 1000
});
this.$router.back();
});
} else {
createMenu(this.menu).then(response => {
this.$refs[formName].resetFields();
this.resetForm(formName);
this.$message({
message: '提交成功',
type: 'success',
duration: 1000
});
this.$router.back();
});
}
});
} else {
this.$message({
message: '验证失败',
type: 'error',
duration: 1000
});
return false;
}
});
},
resetForm(formName) {
this.$refs[formName].resetFields();
this.menu = Object.assign({}, defaultMenu);
this.getSelectMenuList();
},
}
}
}
</script>
<style scoped>
/* scoped 属性表示样式仅作用于当前组件内的元素,避免样式冲突 */
</style>

Loading…
Cancel
Save