Newer
Older
KaiFengPC / src / views / document / fileManagement / readAuth / operate.vue
@鲁yixuan 鲁yixuan 29 days ago 3 KB updata
<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>