<template> <div class="operate"> <el-form ref="ruleForm" :model="form" class="dialogForm" :label-width="120" > <el-row :gutter="20"> <el-col :span="24"> <el-form-item label="文件名称:" prop="fileName"> <el-input v-model="form.fileName" type="text" disabled /> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="24"> <el-form-item label="分配部门权限:" prop="dept"> <el-select v-model="form.dept" placeholder="请选择部门" style="width: 100%" multiple > <el-option v-for="item in options" :key="item.refId" :label="item.refName" :value="item.refId" /> </el-select> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="24"> <el-form-item label="分配用户权限:" prop="user"> <el-select v-model="form.user" placeholder="请选择用户" style="width: 100%" multiple > <el-option-group v-for="group in groupOptions" :key="group.label" :label="group.label" > <el-option v-for="item in group.options" :key="item.refId" :label="item.refName" :value="item.refId" /> </el-option-group> </el-select> </el-form-item> </el-col> </el-row> </el-form> </div> </template> <script setup> import { ref, reactive, onMounted, watch } from 'vue' import { inheritAttr } from '@/utils/v3' import { optTextMap } from '@/utils/map' import { required } from '@/utils/validate-helper' import { useDicts } from '@/hooks' import { getDocumentAuthorityDisAuthDepart, documentAuthorityEdit } from '@/api/document/fileManagement/readAuth' const { proxy } = getCurrentInstance() const { document_save_type } = proxy.useDict('document_save_type') const props = defineProps({ curRow: { type: Object, default: () => ({}) } }) const { curRow } = props const emit = defineEmits(['close']) const form = reactive({ fileId: curRow.id || '', fileName: curRow.fileName, dept: [], user: [] }) const rules = reactive({ fileName: required('文件名称'), dept: required('部门'), user: required('用户') }) const options = ref([]) const groupOptions = ref([]) const submit = () => { proxy.$refs.ruleForm.validate(async (valid, fields) => { if (valid) { const refList = [] if(form.dept?.length){ refList.push({ refId: form.dept, refType: 'dept' }) } if(form.user?.length){ refList.push({ refId: form.user, refType: 'user' }) } const params = { fileId: form.fileId, refList } const res = await documentAuthorityEdit(params) if(res?.code !== 200) return proxy.$modal.msgSuccess('操作成功') emit('close', { isRefresh: true }) } else { console.log('error submit!', fields) } }) } const getDetail = async () => { const res = await getDocumentAuthorityDisAuthDepart({ fileId: form.fileId }) if(res?.code !== 200) return const deptList = res.data.deptList || [] options.value = deptList const userList = res.data.userList || [] const departmentNameList = Object.keys(userList) let checkedUserList = [] for (const departmentName of departmentNameList) { if(!userList[departmentName]) continue const checkedUserItemList = userList[departmentName].filter(it => it.refFlag).map(it => it.refId) checkedUserList = checkedUserList.concat(checkedUserItemList) const departmentObj = { label: departmentName, options: userList[departmentName] } groupOptions.value.push(departmentObj) } form.dept = deptList.filter(it => it.refFlag).map(it => it.refId) form.user = checkedUserList } onMounted(() => { if(form.fileId) getDetail() }) defineExpose({ submit }) </script> <style lang="scss" scoped></style>