AccountModal.vue 4.12 KB
<template>
  <BasicModal width="650px" v-bind="$attrs" @register="registerModal" :title="getTitle"
              @ok="handleSubmit">
    <BasicForm @register="registerForm">
      <template #organizationId="{ model, field }">
        <BasicTree
          v-model:value="model[field]"
          :treeData="organizationTreeData"
          :replaceFields="{ title: 'name' }"
          :checked-keys="checkGroup"
          checkable
          toolbar
          title="所属组织"
        />
      </template>
    </BasicForm>
  </BasicModal>
</template>
<script lang="ts">
import {defineComponent, ref, computed, unref} from 'vue';
import {BasicModal, useModalInner} from '/@/components/Modal';
import {BasicForm, useForm} from '/@/components/Form/index';
import {accountFormSchema} from './account.data';
import {findCurrentUserRelation, getOrganizationList, SaveOrUpdateUserInfo} from '/@/api/system/system';
import {BasicTree, TreeItem} from "/@/components/Tree";
import {findCurrentUserGroups} from "/@/api/system/group";
import {RoleOrOrganizationParam} from "/@/api/system/model/systemModel";
import {useMessage} from "/@/hooks/web/useMessage";
export default defineComponent({
  name: 'AccountModal',
  components: {BasicModal, BasicForm, BasicTree},
  emits: ['success', 'register'],
  setup(_, {emit}) {
    const isUpdate = ref(true);
    const rowId = ref('');
    const organizationTreeData = ref<TreeItem[]>([]);
    const checkGroup = ref<string[]>([]);
    const [registerForm, {setFieldsValue, updateSchema, resetFields, validate}] = useForm({
      labelWidth: 100,
      schemas: accountFormSchema,
      showActionButtonGroup: false,
      actionColOptions: {
        span: 18,
      },
    });

    const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
      await resetFields();
      setModalProps({confirmLoading: false});
      isUpdate.value = !!data?.isUpdate;
      const groupListModel = await findCurrentUserGroups();
      if (unref(organizationTreeData).length === 0) {
        let treeValues = new Array<TreeItem>();
        groupListModel.map((item) => {
          const groupData = {
            name: item.name,
            key: item.id,
            id: item.id,
            children: item.children as any as TreeItem[],
          }
          treeValues.push(groupData);
        })
        organizationTreeData.value = treeValues;
      }

      if (unref(isUpdate)) {
        rowId.value = data.record.id;
        const roleParams = new RoleOrOrganizationParam(rowId.value,true,false);
        findCurrentUserRelation(roleParams).then((result)=>{
          Reflect.set(data.record,"roleIds",result);
          Reflect.set(data.record,"password","******");
          setFieldsValue({
            ...data.record,
          });
        })
        const organizationParams = new RoleOrOrganizationParam(rowId.value,false,true);
        checkGroup.value = await findCurrentUserRelation(organizationParams);
      }
      const deptData = await getOrganizationList();
      await updateSchema([
        {
          field: 'username',
          dynamicDisabled: unref(isUpdate),
        },
        {
          field: 'deptId',
          componentProps: {
            treeData: deptData
          },
        },
      ]);
    });

    const getTitle = computed(() => (!unref(isUpdate) ? '新增账号' : '编辑账号'));

    async function handleSubmit() {
      try {
        const { createMessage } = useMessage();
        const values = await validate();
        values.accountExpireTime = (typeof values.accountExpireTime != 'undefined' &&
          values.accountExpireTime != null) ?
          values.accountExpireTime.format('YYYY-MM-DD HH:mm:ss') : null
        setModalProps({confirmLoading: true});
        await SaveOrUpdateUserInfo(values, unref(isUpdate));
        closeModal();
        emit('success', {isUpdate: unref(isUpdate), values: {...values, id: rowId.value}});
        createMessage.success(unref(isUpdate)?"编辑成功":"新增成功");
      } finally {
        setModalProps({confirmLoading: false});
      }
    }

    return {registerModal, registerForm, getTitle, handleSubmit, organizationTreeData,checkGroup};
  },
});
</script>