修复角色权限要保存两次

This commit is contained in:
Mrtangl 2022-08-01 11:59:09 +08:00
parent de7972fa00
commit dd1be368da
1 changed files with 195 additions and 196 deletions

View File

@ -48,7 +48,7 @@
icon="ArrowRight"
:props="{
children: 'children',
label: 'menuName'
label: 'menuName',
}"
empty-text=""
show-checkbox
@ -65,213 +65,212 @@
</template>
<script lang="ts">
import { defineComponent, reactive, onMounted, Ref, ref, toRefs } from 'vue'
import {
apiConfigGetMenu,
apiConfigGetAuth,
apiRoleAdd,
apiRoleEdit,
apiRoleDetail
} from '@/api/auth'
import { ElInput, ElForm } from 'element-plus'
import FooterBtns from '@/components/footer-btns/index.vue'
import { useAdmin } from '@/core/hooks/app'
import { flatten } from '@/utils/util'
import { ElMessage } from 'element-plus'
import { defineComponent, reactive, onMounted, Ref, ref, toRefs } from 'vue'
import { apiConfigGetMenu, apiConfigGetAuth, apiRoleAdd, apiRoleEdit, apiRoleDetail } from '@/api/auth'
import { ElInput, ElForm } from 'element-plus'
import FooterBtns from '@/components/footer-btns/index.vue'
import { useAdmin } from '@/core/hooks/app'
import { flatten } from '@/utils/util'
import { ElMessage } from 'element-plus'
export default defineComponent({
components: {
FooterBtns
},
setup() {
const { route, router } = useAdmin()
const formRef: Ref<typeof ElForm | null> = ref(null)
const treeRef: Ref<typeof ElForm | null> = ref(null)
const id: Ref<Number | null> = ref(null) // ID
export default defineComponent({
components: {
FooterBtns,
},
setup() {
const { route, router } = useAdmin()
const formRef: Ref<typeof ElForm | null> = ref(null)
const treeRef: Ref<typeof ElForm | null> = ref(null)
const id: Ref<Number | null> = ref(null) // ID
//
const { formData, menu } = toRefs(
reactive({
formData: {
name: '', //
remark: '', //
menus: [], // id
isDisable: 0,
sort: '',
menuIds: '' // ID,
},
//
const { formData, menu } = toRefs(
reactive({
formData: {
name: '', //
remark: '', //
menus: [], // id
isDisable: 0,
sort: '',
menuIds: '', // ID,
},
menu: {
permissionsTree: [], //
allAuthKeys: [] // id
menu: {
permissionsTree: [], //
allAuthKeys: [], // id
},
})
)
//
const rules = {
name: [
{
required: true,
message: '请输入角色名称',
trigger: ['blur'],
pattern: /(^[^\s]*$)/, //
},
],
sort: [
{
required: true,
message: '请输入排序',
trigger: 'blur',
pattern: /(^[0-9]\d*$)/,
},
],
}
//
const onSubmit = () => {
formRef.value?.validate((valid: boolean) => {
if (!valid) {
return
}
id.value ? roleEdit() : roleAdd()
})
}
const getMenu = () => {
apiConfigGetMenu()
.then((res: any) => {
//
menu.value.permissionsTree = res
console.log('res', res)
//
const menuFlatten = flatten(res, [], 'children')
// console.log(menuFlatten)
// id
menu.value.allAuthKeys = menuFlatten.map((item: any) => item.id) as never
})
.catch((err: any) => {
console.log('err', err)
})
}
//
const roleAdd = () => {
// id
formData.value.menus.length == 0
? (formData.value.menuIds = '')
: (formData.value.menuIds = formData.value.menus.join(','))
apiRoleAdd({ ...formData.value })
.then((res: any) => {
console.log('res', res)
setTimeout(() => {
router.back()
}, 500)
ElMessage({ type: 'success', message: '保存成功' })
})
.catch((err: any) => {
console.log('err', err)
})
}
//
const roleEdit = () => {
// id
formData.value.menus.length == 0
? (formData.value.menuIds = '')
: (formData.value.menuIds = formData.value.menus.join(','))
apiRoleEdit({
...formData.value,
id: id.value,
})
.then((res: any) => {
console.log('res', res)
setTimeout(() => {
router.back()
}, 500)
ElMessage({ type: 'success', message: '保存成功' })
})
.catch((err: any) => {
console.log('err', err)
})
}
//
const roleDetail = () => {
apiRoleDetail({
id: id.value,
})
.then((res: any) => {
console.log('res', res)
formData.value = res
treeRef.value?.setCheckedKeys(res.menus)
})
.catch((err: any) => {
console.log('err', err)
})
}
//
const handlePermissionsCheckChange = (data: any, checked: boolean) => {
console.log(data)
if (!data.id) {
return
}
})
)
//
const rules = {
name: [
{
required: true,
message: '请输入角色名称',
trigger: ['blur'],
pattern: /(^[^\s]*$)/ //
}
],
sort: [
{
required: true,
message: '请输入排序',
trigger: 'blur',
pattern: /(^[0-9]\d*$)/
}
]
}
//
const onSubmit = () => {
formRef.value?.validate((valid: boolean) => {
if (!valid) {
const index = formData.value.menus.findIndex((item) => item == data.id)
if (checked) {
index == -1 && (formData.value.menus as any).push(data.id)
return
}
id.value ? roleEdit() : roleAdd()
if (index != -1) {
formData.value.menus.splice(index, 1)
}
}
//
const allSelect = () => {
treeRef.value?.setCheckedKeys(menu.value.allAuthKeys)
}
//
const close = () => {
treeRef.value?.setCheckedKeys([])
}
onMounted(() => {
const query: any = route.query
if (query.id) {
id.value = query.id * 1
roleDetail()
}
getMenu()
})
}
const getMenu = () => {
apiConfigGetMenu()
.then((res: any) => {
//
menu.value.permissionsTree = res
console.log('res', res)
//
const menuFlatten = flatten(res, [], 'children')
// console.log(menuFlatten)
// id
menu.value.allAuthKeys = menuFlatten.map((item: any) => item.id) as never
})
.catch((err: any) => {
console.log('err', err)
})
}
//
const roleAdd = () => {
apiRoleAdd({ ...formData.value })
.then((res: any) => {
console.log('res', res)
setTimeout(() => {
router.back()
}, 500)
ElMessage({ type: 'success', message: '保存成功' })
})
.catch((err: any) => {
console.log('err', err)
})
}
//
const roleEdit = () => {
// id
formData.value.menus.length == 0
? (formData.value.menuIds = '')
: (formData.value.menuIds = formData.value.menus.join(','))
apiRoleEdit({
...formData.value,
id: id.value
})
.then((res: any) => {
console.log('res', res)
setTimeout(() => {
router.back()
}, 500)
ElMessage({ type: 'success', message: '保存成功' })
})
.catch((err: any) => {
console.log('err', err)
})
}
//
const roleDetail = () => {
apiRoleDetail({
id: id.value
})
.then((res: any) => {
console.log('res', res)
formData.value = res
treeRef.value?.setCheckedKeys(res.menus)
})
.catch((err: any) => {
console.log('err', err)
})
}
//
const handlePermissionsCheckChange = (data: any, checked: boolean) => {
console.log(data)
if (!data.id) {
return
return {
id,
formData,
menu,
formRef,
treeRef,
rules,
getMenu,
roleAdd,
roleEdit,
roleDetail,
onSubmit,
handlePermissionsCheckChange,
close,
allSelect,
}
const index = formData.value.menus.findIndex(item => item == data.id)
if (checked) {
index == -1 && (formData.value.menus as any).push(data.id)
return
}
if (index != -1) {
formData.value.menus.splice(index, 1)
}
}
//
const allSelect = () => {
treeRef.value?.setCheckedKeys(menu.value.allAuthKeys)
}
//
const close = () => {
treeRef.value?.setCheckedKeys([])
}
onMounted(() => {
const query: any = route.query
if (query.id) {
id.value = query.id * 1
roleDetail()
}
getMenu()
})
return {
id,
formData,
menu,
formRef,
treeRef,
rules,
getMenu,
roleAdd,
roleEdit,
roleDetail,
onSubmit,
handlePermissionsCheckChange,
close,
allSelect
}
}
})
},
})
</script>
<style lang="scss" scoped>
.role-edit {
:deep .el-textarea {
width: 340px;
.role-edit {
:deep .el-textarea {
width: 340px;
}
}
}
</style>