<template>
|
<div class="container">
|
<div class="title">新建分组信息</div>
|
<el-row>
|
<el-col :lg="16" :md="20" :sm="24" :xs="24">
|
<div class="content">
|
<el-form
|
ref="form"
|
status-icon
|
:rules="rules"
|
:model="group"
|
label-position="right"
|
label-width="100px"
|
v-loading="loading"
|
@submit.prevent
|
>
|
<el-form-item label="分组名称" prop="name">
|
<el-input clearable v-model="group.name"></el-input>
|
</el-form-item>
|
<el-form-item label="分组描述" prop="info">
|
<el-input clearable v-model="group.info"></el-input>
|
</el-form-item>
|
<el-form-item>
|
<group-permissions title="分配权限" ref="groupPermissions" @updatePermissions="updatePermissions">
|
</group-permissions>
|
</el-form-item>
|
<el-form-item class="submit">
|
<el-button type="primary" @click="submitForm('form')">保 存</el-button>
|
<el-button @click="resetForm('form')">重 置</el-button>
|
</el-form-item>
|
</el-form>
|
</div>
|
</el-col>
|
</el-row>
|
</div>
|
</template>
|
|
<script>
|
import { useRouter } from 'vue-router'
|
import { ref, reactive } from 'vue'
|
import { ElMessage } from 'element-plus'
|
import AdminModel from '@/lin/model/admin'
|
import GroupPermissions from './group-permission'
|
|
export default {
|
components: {
|
GroupPermissions,
|
},
|
setup() {
|
/**
|
* 表单验证规则
|
*/
|
const { rules } = getRules()
|
|
// originally data properties
|
const form = ref(null)
|
const groupPermissions = ref(null)
|
|
const loading = ref(false)
|
const router = useRouter()
|
const permissions = ref([])
|
const allPermissions = ref([])
|
const group = reactive({ name: '', info: '' })
|
|
/**
|
* 重置表单
|
*/
|
const resetForm = () => {
|
form.value.resetFields()
|
groupPermissions.value.getGroupPermissions()
|
}
|
|
/**
|
* 提交表单
|
* 添加新的分组
|
*/
|
const submitForm = async () => {
|
form.value.validate(async valid => {
|
if (valid) {
|
let res = {}
|
const finalPermissions = permissions.value.filter(x => Object.keys(allPermissions.value).indexOf(x) < 0)
|
try {
|
loading.value = true
|
res = await AdminModel.createOneGroup(group.name, group.info, finalPermissions)
|
} catch (e) {
|
loading.value = false
|
console.error(e)
|
}
|
if (res.code < window.MAX_SUCCESS_CODE) {
|
loading.value = false
|
ElMessage.success(`${res.message}`)
|
router.push('/admin/group/list')
|
resetForm()
|
} else {
|
loading.value = false
|
}
|
} else {
|
ElMessage.error('请将信息填写完整')
|
}
|
})
|
}
|
|
/**
|
* 编辑后的最终权限
|
*/
|
const updatePermissions = picked => {
|
permissions.value = picked
|
}
|
|
return {
|
form,
|
rules,
|
group,
|
loading,
|
resetForm,
|
submitForm,
|
groupPermissions,
|
updatePermissions,
|
}
|
},
|
}
|
|
function getRules() {
|
const checkName = (rule, value, callback) => {
|
if (!value) {
|
return callback(new Error('分组名称不能为空'))
|
}
|
callback()
|
}
|
const rules = { info: [], name: [{ validator: checkName, trigger: ['blur', 'change'], required: true }] }
|
return { rules }
|
}
|
</script>
|
|
<style lang="scss" scoped>
|
.container {
|
.title {
|
height: 59px;
|
line-height: 59px;
|
color: $parent-title-color;
|
font-size: 16px;
|
font-weight: 500;
|
text-indent: 40px;
|
border-bottom: 1px solid #dae1ec;
|
}
|
|
.content {
|
margin-top: 10px;
|
padding-left: 25px;
|
padding-right: 40px;
|
}
|
|
.submit {
|
float: left;
|
}
|
}
|
</style>
|