6c4401f6创建于 2024年5月15日历史提交
<template>
  <el-form
    :model="form"
    class="rule-form"
    ref="ruleFormRef"
    label-width="auto"
    label-position="left"
    :label-suffix="$t('common.colon')"
  >
    <el-row :gutter="50">
      <el-col :span="12">
        <el-form-item prop="role" :label="$t('userRole.roleGroup')">
          <el-select
            v-if="props.type == 'create'"
            v-model="form.role"
            clearable
            multiple
            collapse-tags
            :disabled="props.type != 'create'"
          >
            <el-option
              v-for="item in userRoleList"
              :key="item.oid"
              :label="item.name"
              :value="item.name"
            />
          </el-select>
          <el-tooltip v-else effect="light" :disabled="!form.role.length">
            <template #content>
              <div v-for="(item, key) in form.role" :key="key"> {{ item }} <br /> </div>
            </template>
            <el-text truncated>
              {{ form.role?.join(', ') || '-' }}
            </el-text>
          </el-tooltip>
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item prop="administrator" :label="$t('userRole.adminsGroup')">
          <el-select
            v-if="props.type == 'create'"
            v-model="form.administrator"
            clearable
            multiple
            collapse-tags
            :disabled="props.type != 'create'"
          >
            <el-option
              v-for="item in userRoleList"
              :key="item.oid"
              :label="item.name"
              :value="item.name"
            />
          </el-select>
          <el-tooltip v-else effect="light" :disabled="!form.administrator.length">
            <template #content>
              <div v-for="(item, key) in form.administrator" :key="key"> {{ item }} <br /> </div>
            </template>
            <el-text truncated>
              {{ form.administrator?.join(', ') || '-' }}
            </el-text>
          </el-tooltip>
        </el-form-item>
      </el-col>
      <el-col :span="12" v-if="props.type != 'create'">
        <el-form-item prop="belong">
          <template #label>
            {{ $t('userRole.belong') }}
            <el-tooltip
              popper-class="form-item-tooltip"
              effect="light"
              :content="t('userRole.belongTips')"
              placement="top"
            >
              <el-icon><QuestionFilled /></el-icon>
            </el-tooltip>
          </template>
          <el-select v-model="form.belong" clearable multiple collapse-tags>
            <el-option
              v-for="item in userRoleList"
              :key="item.oid"
              :label="item.name"
              :value="item.name"
            />
          </el-select>
        </el-form-item>
      </el-col>
    </el-row>
  </el-form>
</template>
<script lang="ts" setup>
  import { FormInstance } from 'element-plus';
  import { useI18n } from 'vue-i18n';
  import { Memberform } from '../type';
  import { getUserRoleList } from '@/api/userRole';

  const props = withDefaults(
    defineProps<{
      type: 'create' | 'edit';
      uuid: string;
      data: Memberform;
    }>(),
    {
      type: 'create',
      uuid: '',
    },
  );
  const emit = defineEmits<{
    (event: 'update:data', data: Memberform): void;
  }>();
  const { t } = useI18n();
  const userRoleList = ref<{ name: string; oid: string }[]>([]);
  const ruleFormRef = ref<FormInstance>();
  const form = computed({
    get() {
      return props.data;
    },
    set(val) {
      emit('update:data', val);
    },
  });
  const formRef = () => {
    return ruleFormRef.value;
  };

  const fetchUserRoleList = async () => {
    const res = await getUserRoleList({ uuid: props.uuid });
    userRoleList.value = [].concat(res.role || [], res.user || []);
  };

  const validateForm = () => {
    return new Promise<void>((resolve, reject) => {
      ruleFormRef.value.validate((valid) => {
        if (valid) {
          resolve();
        } else {
          reject('MemberTab');
        }
      });
    });
  };
  const resetFields = () => {
    ruleFormRef.value.resetFields();
  };
  onMounted(() => {
    fetchUserRoleList();
  });

  defineExpose({
    formRef,
    validateForm,
    resetFields,
  });
</script>

<style lang="scss" scoped>
  .rule-form {
    overflow-x: hidden;
    width: 100%;
  }
  :deep(.el-select) {
    width: 100%;
  }
  :deep(.el-date-editor.el-input) {
    width: 100%;
  }
  :deep(.el-input-number) {
    width: 100%;
  }
  :deep(.el-input-number .el-input__inner) {
    text-align: left;
  }
</style>