<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>