<!--套餐中使用的用户选择框-->
<template>
  <div>
    <BasicModal
      v-bind="$attrs"
      @register="register"
      :title="modalTitle"
      width="900px"
      wrapClassName="j-user-select-modal"
      @ok="handleOk"
      destroyOnClose
    >
      <BasicTable ref="tableRef" @register="registerTable" :rowSelection="rowSelection">
        <template #tableTitle></template>
      </BasicTable>
    </BasicModal>
  </div>
</template>
<script lang="ts">
  import { defineComponent, ref } from 'vue';
  import { BasicModal, useModalInner } from '/@/components/Modal';
  import { getTenantUserList } from '../tenant.api';
  import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
  import { useListPage } from '/@/hooks/system/useListPage';
  import { userColumns, userSearchFormSchema } from '../tenant.data';

  export default defineComponent({
    name: 'TenantUserSelectModal',
    components: {
      //此处需要异步加载BasicTable
      BasicModal,
      BasicTable: createAsyncComponent(() => import('/@/components/Table/src/BasicTable.vue'), {
        loading: true,
      }),
    },
    props: {
      //选择框标题
      modalTitle: {
        type: String,
        default: '选择用户',
      },
      //查询参数
      tenantId: {
        type: Number,
        default: 0,
      },
      //排除用户id的集合
      excludeUserIdList: {
        type: Array,
        default: [],
      },
    },
    emits: ['register', 'on-select'],
    setup(props, { emit, refs }) {
      const tableScroll = ref<any>({ x: false });
      const tableRef = ref();
      //注册弹框
      const [register, { closeModal }] = useModalInner(() => {
        if (window.innerWidth < 900) {
          tableScroll.value = { x: 900 };
        } else {
          tableScroll.value = { x: false };
        }
        setTimeout(() => {
          if (tableRef.value) {
            tableRef.value.setSelectedRowKeys([]);
          }
        }, 800);
      });

      //定义表格列
      const columns = [
        {
          title: '账号',
          dataIndex: 'username',
          width: 40,
          align: 'left',
        },
        {
          title: '姓名',
          dataIndex: 'realname',
          width: 40,
        },
        {
          title: '性别',
          dataIndex: 'sex_dictText',
          width: 20,
        },
        {
          title: '手机号码',
          dataIndex: 'phone',
          width: 30,
        },
        {
          title: '邮箱',
          dataIndex: 'email',
          width: 40,
        },
        {
          title: '状态',
          dataIndex: 'status_dictText',
          width: 20,
        },
      ];

      // 列表页面公共参数、方法
      const { prefixCls, tableContext } = useListPage({
        designScope: 'tenant-template',
        tableProps: {
          api: getTenantUserList,
          columns: userColumns,
          scroll: { y: 390 },
          rowKey: 'id',
          showActionColumn: false,
          formConfig: {
            schemas: userSearchFormSchema,
            labelWidth: 60,
            actionColOptions: {
              xs: 24,
              sm: 8,
              md: 8,
              lg: 8,
              xl: 8,
              xxl: 8,
            },
          },
          beforeFetch: (params) => {
            return Object.assign(params, { userTenantId: props.tenantId });
          },
        },
      });
      const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;

      /**
       * 确定选择
       */
      function handleOk() {
        //返回选中事件
        emit('on-select', rowSelection.selectedRows, rowSelection.selectedRowKeys);
      }

      return {
        handleOk,
        register,
        columns,
        rowSelection,
        tableScroll,
        tableRef,
        registerTable,
      };
    },
  });
</script>

<style scoped>
  :deep(.ant-input-suffix) {
    display: none;
  }
</style>