提交 c5932c0a 编写于 作者: Mr.奇淼('s avatar Mr.奇淼(

增加前端form校验

上级 b6ea56ee
...@@ -3,6 +3,8 @@ import App from './App.vue' ...@@ -3,6 +3,8 @@ import App from './App.vue'
// 引入element // 引入element
import ElementUI from 'element-ui'; import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css'; import 'element-ui/lib/theme-chalk/index.css';
// 全局配置elementui的dialog不能通过点击遮罩层关闭
ElementUI.Dialog.props.closeOnClickModal.default = false
Vue.use(ElementUI); Vue.use(ElementUI);
// 引入封装的router // 引入封装的router
import router from '@/router/index' import router from '@/router/index'
......
...@@ -25,15 +25,14 @@ ...@@ -25,15 +25,14 @@
<el-tag <el-tag
:key="scope.row.methodFiletr" :key="scope.row.methodFiletr"
:type="scope.row.method|tagTypeFiletr" :type="scope.row.method|tagTypeFiletr"
size="mini" effect="dark"
effect="dark"> size="mini"
{{scope.row.method|methodFiletr}} >{{scope.row.method|methodFiletr}}</el-tag>
</el-tag>
<!-- {{scope.row.method|methodFiletr}} --> <!-- {{scope.row.method|methodFiletr}} -->
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" width="200"> <el-table-column fixed="right" label="操作" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button @click="editApi(scope.row)" size="small" type="text">编辑</el-button> <el-button @click="editApi(scope.row)" size="small" type="text">编辑</el-button>
...@@ -53,11 +52,11 @@ ...@@ -53,11 +52,11 @@
></el-pagination> ></el-pagination>
<el-dialog :before-close="closeDialog" :visible.sync="dialogFormVisible" title="新增Api"> <el-dialog :before-close="closeDialog" :visible.sync="dialogFormVisible" title="新增Api">
<el-form :inline="true" :model="form" label-width="80px"> <el-form :inline="true" :model="form" :rules="rules" label-width="80px" ref="apiForm">
<el-form-item label="路径"> <el-form-item label="路径" prop="path">
<el-input autocomplete="off" v-model="form.path"></el-input> <el-input autocomplete="off" v-model="form.path"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="请求"> <el-form-item label="请求" prop="method">
<el-select placeholder="请选择" v-model="form.method"> <el-select placeholder="请选择" v-model="form.method">
<el-option <el-option
:key="item.value" :key="item.value"
...@@ -67,16 +66,14 @@ ...@@ -67,16 +66,14 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="api分组"> <el-form-item label="api分组" prop="group">
<el-input autocomplete="off" v-model="form.group"></el-input> <el-input autocomplete="off" v-model="form.group"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="api简介"> <el-form-item label="api简介" prop="description">
<el-input autocomplete="off" v-model="form.description"></el-input> <el-input autocomplete="off" v-model="form.description"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div class="warning"> <div class="warning">新增Api需要在角色管理内配置权限才可使用</div>
新增Api需要在角色管理内配置权限才可使用
</div>
<div class="dialog-footer" slot="footer"> <div class="dialog-footer" slot="footer">
<el-button @click="closeDialog">取 消</el-button> <el-button @click="closeDialog">取 消</el-button>
<el-button @click="enterDialog" type="primary">确 定</el-button> <el-button @click="enterDialog" type="primary">确 定</el-button>
...@@ -99,27 +96,27 @@ import { ...@@ -99,27 +96,27 @@ import {
import infoList from '@/components/mixins/infoList' import infoList from '@/components/mixins/infoList'
const methodOptions = [ const methodOptions = [
{ {
value: 'POST', value: 'POST',
label: '创建', label: '创建',
type:'success' type: 'success'
}, },
{ {
value: 'GET', value: 'GET',
label: '查看', label: '查看',
type:'' type: ''
}, },
{ {
value: 'PUT', value: 'PUT',
label: '更新', label: '更新',
type:'warning' type: 'warning'
}, },
{ {
value: 'DELETE', value: 'DELETE',
label: '删除', label: '删除',
type:'danger' type: 'danger'
} }
] ]
export default { export default {
name: 'Api', name: 'Api',
...@@ -132,10 +129,21 @@ export default { ...@@ -132,10 +129,21 @@ export default {
form: { form: {
path: '', path: '',
group: '', group: '',
method: '',
description: '' description: ''
}, },
methodOptions: methodOptions, methodOptions: methodOptions,
type: '' type: '',
rules: {
path: [{ required: true, message: '请输入api路径', trigger: 'blur' }],
group: [{ required: true, message: '请输入组名称', trigger: 'blur' }],
method: [
{ required: true, message: '请选择请求方式', trigger: 'blur' }
],
description: [
{ required: true, message: '请输入api介绍', trigger: 'blur' }
]
}
} }
}, },
methods: { methods: {
...@@ -150,7 +158,7 @@ export default { ...@@ -150,7 +158,7 @@ export default {
path: '', path: '',
group: '', group: '',
description: '', description: '',
method:'' method: ''
} }
}, },
closeDialog() { closeDialog() {
...@@ -190,56 +198,60 @@ export default { ...@@ -190,56 +198,60 @@ export default {
}) })
}, },
async enterDialog() { async enterDialog() {
switch (this.type) { this.$refs.apiForm.validate(async valid => {
case 'addApi': if (valid) {
{ switch (this.type) {
const res = await createApi(this.form) case 'addApi':
if (res.success) { {
this.$message({ const res = await createApi(this.form)
type: 'success', if (res.success) {
message: '添加成功', this.$message({
showClose: true type: 'success',
}) message: '添加成功',
} showClose: true
this.getTableData() })
this.closeDialog() }
} this.getTableData()
this.closeDialog()
}
break break
case 'edit': case 'edit':
{ {
const res = await updataApi(this.form) const res = await updataApi(this.form)
if (res.success) { if (res.success) {
this.$message({ this.$message({
type: 'success', type: 'success',
message: '添加成功', message: '添加成功',
showClose: true showClose: true
}) })
} }
this.getTableData() this.getTableData()
this.closeDialog() this.closeDialog()
}
break
default:
{
this.$message({
type: 'error',
message: '未知操作',
showClose: true
})
}
break
} }
break }
default: })
{
this.$message({
type: 'error',
message: '未知操作',
showClose: true
})
}
break
}
} }
}, },
filters:{ filters: {
methodFiletr(value){ methodFiletr(value) {
const target = methodOptions.filter(item=>item.value === value)[0] const target = methodOptions.filter(item => item.value === value)[0]
// return target && `${target.label}(${target.value})` // return target && `${target.label}(${target.value})`
return target && `${target.label}` return target && `${target.label}`
}, },
tagTypeFiletr(value){ tagTypeFiletr(value) {
const target = methodOptions.filter(item=>item.value === value)[0] const target = methodOptions.filter(item => item.value === value)[0]
return target && `${target.type}` return target && `${target.type}`
} }
} }
...@@ -252,10 +264,10 @@ export default { ...@@ -252,10 +264,10 @@ export default {
float: right; float: right;
} }
} }
.el-tag--mini{ .el-tag--mini {
margin-left: 5px; margin-left: 5px;
} }
.warning { .warning {
color: #DC143C; color: #dc143c;
} }
</style> </style>
\ No newline at end of file
...@@ -4,35 +4,35 @@ ...@@ -4,35 +4,35 @@
<el-button @click="addAuthority('0')" type="primary">新增角色</el-button> <el-button @click="addAuthority('0')" type="primary">新增角色</el-button>
</div> </div>
<el-table <el-table
:data="tableData" :data="tableData"
style="width: 100%" :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
row-key="ID" border
border row-key="ID"
stripe stripe
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"> style="width: 100%"
<el-table-column label="id" min-width="180" prop="ID"></el-table-column> >
<el-table-column label="id" min-width="180" prop="ID"></el-table-column>
<el-table-column label="角色id" min-width="180" prop="authorityId"></el-table-column>
<el-table-column label="角色名称" min-width="180" prop="authorityName"></el-table-column>
<el-table-column fixed="right" label="操作" min-width="300">
<template slot-scope="scope">
<el-button @click="opdendrawer(scope.row)" size="small" type="text">设置权限</el-button>
<el-button @click="deleteAuth(scope.row)" size="small" type="text">删除角色</el-button>
<el-button @click="addAuthority(scope.row.authorityId)" size="small" type="text">新增子角色</el-button>
</template>
</el-table-column>
</el-table>
<el-table-column label="角色id" min-width="180" prop="authorityId"></el-table-column>
<el-table-column label="角色名称" min-width="180" prop="authorityName"></el-table-column>
<el-table-column fixed="right" label="操作" min-width="300">
<template slot-scope="scope">
<el-button @click="opdendrawer(scope.row)" size="small" type="text">设置权限</el-button>
<el-button @click="deleteAuth(scope.row)" size="small" type="text">删除角色</el-button>
<el-button @click="addAuthority(scope.row.authorityId)" size="small" type="text">新增子角色</el-button>
</template>
</el-table-column>
</el-table>
<!-- 新增角色弹窗 --> <!-- 新增角色弹窗 -->
<el-dialog :visible.sync="dialogFormVisible" title="新增角色"> <el-dialog :visible.sync="dialogFormVisible" title="新增角色">
<el-form :model="form"> <el-form :model="form" :rules="rules" ref="authorityForm">
<el-form-item label="父级角色ID"> <el-form-item label="父级角色ID" prop="parentId">
<el-input autocomplete="off" disabled v-model="form.parentId"></el-input> <el-input autocomplete="off" disabled v-model="form.parentId"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="角色ID"> <el-form-item label="角色ID" prop="authorityId">
<el-input autocomplete="off" v-model="form.authorityId"></el-input> <el-input autocomplete="off" v-model="form.authorityId"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="角色姓名"> <el-form-item label="角色姓名" prop="authorityName">
<el-input autocomplete="off" v-model="form.authorityName"></el-input> <el-input autocomplete="off" v-model="form.authorityName"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
</div> </div>
</el-dialog> </el-dialog>
<el-drawer :visible.sync="drawer" v-if="drawer" :with-header="false" size="40%" title="角色配置"> <el-drawer :visible.sync="drawer" :with-header="false" size="40%" title="角色配置" v-if="drawer">
<el-tabs class="role-box" type="border-card"> <el-tabs class="role-box" type="border-card">
<el-tab-pane label="角色菜单"> <el-tab-pane label="角色菜单">
<Menus :row="activeRow" /> <Menus :row="activeRow" />
...@@ -50,8 +50,8 @@ ...@@ -50,8 +50,8 @@
<el-tab-pane label="角色api"> <el-tab-pane label="角色api">
<apis :row="activeRow" /> <apis :row="activeRow" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="资源权限"> <el-tab-pane label="资源权限">
<Datas :row="activeRow" :authority="tableData" /> <Datas :authority="tableData" :row="activeRow" />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</el-drawer> </el-drawer>
...@@ -87,7 +87,18 @@ export default { ...@@ -87,7 +87,18 @@ export default {
form: { form: {
authorityId: '', authorityId: '',
authorityName: '', authorityName: '',
parentId:'0' parentId: '0'
},
rules: {
authorityId: [
{ required: true, message: '请输入角色ID', trigger: 'blur' }
],
authorityName: [
{ required: true, message: '请输入角色名', trigger: 'blur' }
],
parentId: [
{ required: true, message: '请选择请求方式', trigger: 'blur' }
]
} }
} }
}, },
...@@ -140,17 +151,28 @@ export default { ...@@ -140,17 +151,28 @@ export default {
// 确定弹窗 // 确定弹窗
async enterDialog() { async enterDialog() {
const res = await createAuthority(this.form) if (this.form.authorityId == '0') {
if (res.success) {
this.$message({ this.$message({
type: 'success', type: 'error',
message: '添加成功!' message: '角色id不能为0'
}) })
this.getTableData() return false
this.closeDialog()
} }
this.initForm() this.$refs.authorityForm.validate(async valid => {
this.dialogFormVisible = false if (valid) {
const res = await createAuthority(this.form)
if (res.success) {
this.$message({
type: 'success',
message: '添加成功!'
})
this.getTableData()
this.closeDialog()
}
this.initForm()
this.dialogFormVisible = false
}
})
}, },
// 增加角色 // 增加角色
addAuthority(parentId) { addAuthority(parentId) {
...@@ -158,7 +180,7 @@ export default { ...@@ -158,7 +180,7 @@ export default {
this.dialogFormVisible = true this.dialogFormVisible = true
} }
}, },
created(){ created() {
this.pageSize = 999 this.pageSize = 999
} }
} }
...@@ -173,9 +195,9 @@ export default { ...@@ -173,9 +195,9 @@ export default {
} }
} }
.role-box { .role-box {
.el-tabs__content { .el-tabs__content {
height: calc(100vh - 150px); height: calc(100vh - 150px);
overflow: auto; overflow: auto;
}
} }
}
</style> </style>
\ No newline at end of file
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
</div> </div>
<!-- 由于此处菜单跟左侧列表一一对应所以不需要分页 pageSize默认999 --> <!-- 由于此处菜单跟左侧列表一一对应所以不需要分页 pageSize默认999 -->
<el-table :data="tableData" border stripe row-key="ID"> <el-table :data="tableData" border row-key="ID" stripe>
<el-table-column label="ID" min-width="100" prop="ID"></el-table-column> <el-table-column label="ID" min-width="100" prop="ID"></el-table-column>
<el-table-column label="路由Name" min-width="160" prop="name"></el-table-column> <el-table-column label="路由Name" min-width="160" prop="name"></el-table-column>
<el-table-column label="是否隐藏" min-width="100" prop="hidden"> <el-table-column label="是否隐藏" min-width="100" prop="hidden">
...@@ -36,8 +36,8 @@ ...@@ -36,8 +36,8 @@
</el-table> </el-table>
<el-dialog :before-close="handleClose" :visible.sync="dialogFormVisible" title="新增菜单"> <el-dialog :before-close="handleClose" :visible.sync="dialogFormVisible" title="新增菜单">
<el-form :inline="true" :model="form" label-width="80px"> <el-form :inline="true" :model="form" :rules="rules" label-width="85px" ref="menuForm">
<el-form-item label="路由name"> <el-form-item label="路由name" prop="path">
<el-input autocomplete="off" placeholder="唯一英文字符串" v-model="form.path"></el-input> <el-input autocomplete="off" placeholder="唯一英文字符串" v-model="form.path"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="是否隐藏"> <el-form-item label="是否隐藏">
...@@ -49,10 +49,10 @@ ...@@ -49,10 +49,10 @@
<el-form-item label="父节点Id"> <el-form-item label="父节点Id">
<el-input autocomplete="off" disabled v-model="form.parentId"></el-input> <el-input autocomplete="off" disabled v-model="form.parentId"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="文件路径"> <el-form-item label="文件路径" prop="component">
<el-input autocomplete="off" v-model="form.component"></el-input> <el-input autocomplete="off" v-model="form.component"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="展示名称"> <el-form-item label="展示名称" prop="meta.title">
<el-input autocomplete="off" v-model="form.meta.title"></el-input> <el-input autocomplete="off" v-model="form.meta.title"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="图标"> <el-form-item label="图标">
...@@ -62,9 +62,7 @@ ...@@ -62,9 +62,7 @@
<el-input autocomplete="off" v-model="form.sort"></el-input> <el-input autocomplete="off" v-model="form.sort"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div class="warning"> <div class="warning">新增菜单需要在角色管理内配置权限才可使用</div>
新增菜单需要在角色管理内配置权限才可使用
</div>
<div class="dialog-footer" slot="footer"> <div class="dialog-footer" slot="footer">
<el-button @click="closeDialog">取 消</el-button> <el-button @click="closeDialog">取 消</el-button>
<el-button @click="enterDialog" type="primary">确 定</el-button> <el-button @click="enterDialog" type="primary">确 定</el-button>
...@@ -104,30 +102,40 @@ export default { ...@@ -104,30 +102,40 @@ export default {
icon: '' icon: ''
} }
}, },
rules: {
path: [{ required: true, message: '请输入菜单name', trigger: 'blur' }],
component: [
{ required: true, message: '请输入文件路径', trigger: 'blur' }
],
'meta.title': [
{ required: true, message: '请输入菜单展示名称', trigger: 'blur' }
]
},
isEdit: false isEdit: false
} }
}, },
methods: { methods: {
handleClose(done){ handleClose(done) {
this.initForm() this.initForm()
done() done()
}, },
// 懒加载子菜单 // 懒加载子菜单
load(tree, treeNode, resolve) { load(tree, treeNode, resolve) {
resolve([ resolve([
{ {
id: 31, id: 31,
date: '2016-05-01', date: '2016-05-01',
name: '王小虎', name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄' address: '上海市普陀区金沙江路 1519 弄'
}, { },
id: 32, {
date: '2016-05-01', id: 32,
name: '王小虎', date: '2016-05-01',
address: '上海市普陀区金沙江路 1519 弄' name: '王小虎',
} address: '上海市普陀区金沙江路 1519 弄'
]) }
}, ])
},
// 删除菜单 // 删除菜单
deleteMenu(ID) { deleteMenu(ID) {
this.$confirm('此操作将永久删除所有角色下该菜单, 是否继续?', '提示', { this.$confirm('此操作将永久删除所有角色下该菜单, 是否继续?', '提示', {
...@@ -172,26 +180,30 @@ export default { ...@@ -172,26 +180,30 @@ export default {
}, },
// 添加menu // 添加menu
async enterDialog() { async enterDialog() {
let res this.$refs.menuForm.validate(async valid => {
this.form.name = this.form.path if (valid) {
if (this.isEdit) { let res
res = await updataBaseMenu(this.form) this.form.name = this.form.path
} else { if (this.isEdit) {
res = await addBaseMenu(this.form) res = await updataBaseMenu(this.form)
} } else {
if (res.success) { res = await addBaseMenu(this.form)
this.$message({ }
type: 'success', if (res.success) {
message: '添加成功!' this.$message({
}) type: 'success',
this.getTableData() message: '添加成功!'
} else { })
this.$message({ this.getTableData()
type: 'error', } else {
message: '添加失败!' this.$message({
}) type: 'error',
} message: '添加失败!'
this.dialogFormVisible = false })
}
this.dialogFormVisible = false
}
})
}, },
// 添加菜单方法,id为 0则为添加根菜单 // 添加菜单方法,id为 0则为添加根菜单
addMenu(id) { addMenu(id) {
...@@ -207,7 +219,7 @@ export default { ...@@ -207,7 +219,7 @@ export default {
this.isEdit = true this.isEdit = true
} }
}, },
created(){ created() {
this.pageSize = 999 this.pageSize = 999
} }
} }
...@@ -220,6 +232,6 @@ export default { ...@@ -220,6 +232,6 @@ export default {
} }
} }
.warning { .warning {
color: #DC143C; color: #dc143c;
} }
</style> </style>
\ No newline at end of file
...@@ -43,14 +43,14 @@ ...@@ -43,14 +43,14 @@
></el-pagination> ></el-pagination>
<el-dialog :visible.sync="addUserDialog" custom-class="user-dialog" title="新增用户"> <el-dialog :visible.sync="addUserDialog" custom-class="user-dialog" title="新增用户">
<el-form :model="userInfo"> <el-form :rules="rules" ref="userForm" :model="userInfo" >
<el-form-item label="用户名" label-width="80px"> <el-form-item label="用户名" label-width="80px" prop="username">
<el-input v-model="userInfo.username"></el-input> <el-input v-model="userInfo.username"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="密码" label-width="80px"> <el-form-item label="密码" label-width="80px" prop="password">
<el-input v-model="userInfo.password"></el-input> <el-input v-model="userInfo.password"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="别名" label-width="80px"> <el-form-item label="别名" label-width="80px" prop="nickName">
<el-input v-model="userInfo.nickName"></el-input> <el-input v-model="userInfo.nickName"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="头像" label-width="80px"> <el-form-item label="头像" label-width="80px">
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
<i class="el-icon-plus avatar-uploader-icon" v-else></i> <i class="el-icon-plus avatar-uploader-icon" v-else></i>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
<el-form-item label="用户角色" label-width="80px"> <el-form-item label="用户角色" label-width="80px" prop="authorityId">
<el-select placeholder="请选择" v-model="userInfo.authorityId"> <el-select placeholder="请选择" v-model="userInfo.authorityId">
<el-option <el-option
:key="item.authorityId" :key="item.authorityId"
...@@ -109,7 +109,19 @@ export default { ...@@ -109,7 +109,19 @@ export default {
nickName: '', nickName: '',
headerImg: '', headerImg: '',
authorityId: '' authorityId: ''
} },
rules: {
username: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
password: [
{ required: true, message: '请输入用户密码', trigger: 'blur' }
],
nickName: [
{ required: true, message: '请输入用户昵称', trigger: 'blur' }
],
authorityId: [
{ required: true, message: '请选择用户角色', trigger: 'blur' }
]
},
} }
}, },
computed: { computed: {
...@@ -117,12 +129,16 @@ export default { ...@@ -117,12 +129,16 @@ export default {
}, },
methods: { methods: {
async enterAddUserDialog() { async enterAddUserDialog() {
const res = await regist(this.userInfo) this.$refs.userForm.validate(async valid => {
if (res.success) { if (valid) {
this.$message({ type: 'success', message: '创建成功' }) const res = await regist(this.userInfo)
} if (res.success) {
await this.getTableData() this.$message({ type: 'success', message: '创建成功' })
this.closeAddUserDialog() }
await this.getTableData()
this.closeAddUserDialog()
}
})
}, },
closeAddUserDialog() { closeAddUserDialog() {
this.userInfo = { this.userInfo = {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册