<template>
  <div>
    <a-drawer
        :visible="visiable"
        class="drawerStyle ProjCheckship"
        placement="right"
        width="55%"
    >
      <div class="drawerMain" id="ProjCheckship">
        <div class="header">
          <div class="headerTitle">
            {{ {1: '添加学员', 2: '添加学员', 3: '添加学员'}[type] || '' }}
          </div>
          <img
              style="width: 29px; height: 29px; cursor: pointer"
              src="../../assets/images/basicinfo/close.png"
              @click="closeDrawer"
          />
        </div>
        <div style="width:100%;display: grid;grid-template-columns: 750px auto;">
          <div class="tabs">
            <a-tabs v-model:activeKey="activeKey">
              <a-tab-pane :key="1" tab="快速选人">
                <div :style="{ height: screenHeight - 235 + 'px' }">
                  <div class="tab1">
                    <a-form-item label="姓名">
                      <a-input
                          v-model:value="nameSearch.keyword"
                          style="width: 270px; height: 40px; border-radius: 8px"
                          placeholder="请输入姓名"
                      />
                      <a-button type="primary" @click="onSearchStu" style="margin-left: 20px;border-radius: 4px">
                        <template #icon>
                          <SearchOutlined/>
                        </template>
                        搜索
                      </a-button>
                      <a-button @click="resetStu" style="margin-left: 20px;border-radius: 4px">重置</a-button>
                    </a-form-item>
                  </div>
                  <div class="chooseLeft" style="display: grid;grid-template-columns: 250px auto">
                    <div :style="{ height: screenHeight - 235 + 'px' ,overflowY:'auto'}">
                      <a-tree
                          allow-clear
                          tree-default-expand-all
                          :tree-data="treeData"
                          :fieldNames="{
                          children: 'treeChildList',
                          key: 'id',
                          title: 'name',
                          value: 'name',
                        }"
                          @select="stuStuOrgSelect"
                      >
                      </a-tree>
                    </div>
                    <div class="tableBox tabb">
                      <a-table
                          :columns="stuColumns"
                          :data-source="stuData"
                          :pagination="stuPagination"
                          :loading="stuLoading"
                          row-key="id"
                          :row-selection="stuRowSelection"
                      />
                    </div>
                  </div>
                </div>
              </a-tab-pane>
              <a-tab-pane :key="2" tab="添加组织">
                <div
                    :style="{ height: screenHeight - 235 + 'px' }"
                >
                  <div class="tab2">
                    <a-form-item label="组织：">
                      <a-input
                          v-model:value="searchOrgName.keyword"
                          style="width: 230px; height: 40px; border-radius: 8px"
                          placeholder="请输入组织"
                      />
                      <a-button type="primary" @click="searchOrg" style="margin-left: 20px;border-radius: 4px">
                        <template #icon>
                          <SearchOutlined/>
                        </template>
                        搜索
                      </a-button>
                      <a-button @click="resetOrg" style="margin-left: 20px;border-radius: 4px">重置</a-button>
                    </a-form-item>
                  </div>
                  <div class="boeTree">
                    <a-tree
                        :tree-data="searchOrgName.keyword ? orgData : treeData"
                        @select="onOrgSelectChange"
                        :fieldNames="{
                          children: 'treeChildList',
                          key: 'id',
                          title: 'name',
                          value: 'name',
                        }"
                        row-key="id"
                        :row-selection="orgRowSelection"
                        multiple
                    >
                    </a-tree>
                  </div>
                </div>
              </a-tab-pane>
              <a-tab-pane :key="3" tab="受众关联">
                <div
                    :style="{ height: screenHeight - 235 + 'px' }"
                >
                  <div>
                    <a-form-item label="受众名称：">
                      <a-input
                          v-model:value="audienceName.keyword"
                          style="width: 260px; height: 40px; border-radius: 8px"
                          placeholder="请输入受众名称"
                      />
                      <a-button type="primary" @click="searchAudi" style="margin-left: 20px;border-radius: 4px">
                        <template #icon>
                          <SearchOutlined/>
                        </template>
                        搜索
                      </a-button>
                      <a-button @click="resetAudienceInfo" style="margin-left: 20px;border-radius: 4px">重置</a-button>
                    </a-form-item>
                  </div>
                  <div class="tableBox tabb">
                    <a-table
                        style="border: 1px solid #f2f6fe"
                        row-key="id"
                        :columns="audiColums"
                        :data-source="audiData"
                        :loading="audiLoading"
                        :pagination="auditPagination"
                        :row-selection="auditRowSelection"
                    />
                  </div>
                </div>
              </a-tab-pane>
            </a-tabs>
          </div>
          <div style="padding:100px 0 0 20px;display: grid;grid-template-rows: auto auto auto;">
            <div>
              <div style="margin-top: 20px">快速选人</div>
              <a-tag :closable="true" color="#4ea6ff" @close="stuDel(i)" v-for="(item,i) in selectsData.studentList"
                     :key="i" style="margin-top:20px">
                {{ item.realName }}
              </a-tag>
            </div>
            <div>
              <div style="margin-top: 20px">组织添加</div>
              <a-tag :closable="true" color="#4ea6ff" @close="orgDel(i)" v-for="(item,i) in selectsData.deptList"
                     :key="i"
                     style="margin-top:20px">
                {{ item.name }}
              </a-tag>
            </div>
            <div>
              <div style="margin-top: 20px">受众添加</div>
              <a-tag :closable="true" color="#4ea6ff" @close="AuditDel(i)" v-for="(item,i) in selectsData.groupList"
                     :key="i" style="margin-top:20px">
                {{ item.audienceName }}
              </a-tag>
            </div>
          </div>
        </div>
        <div class="btnn">
          <button class="btn1" @click="closeDrawer">取消</button>
          <button class="btn2" @click="submitAuth">确定</button>
        </div>
      </div>
    </a-drawer>
    <div @click="openDrawer">
      <slot></slot>
    </div>
  </div>
  <a-modal v-model:visible="stageVisible" width="1000px" title="选择阶段" @ok="handleStageOk">
    <div>
      {{ type === 1 ? '选择阶段' : '选择关卡' }}
      <a-select style="width: 150px" :placeholder="type===1?'选择阶段':'选择关卡'" v-model:value="selectsData.stageId"
                className="cus-select">
        <a-select-option v-for="(item,i) in stageIds" :key="i" :value="item.id">{{
            item.name || '默认'
          }}
        </a-select-option>
      </a-select>
    </div>
  </a-modal>
</template>
<script setup>
import {computed, defineEmits, defineProps, ref, watch} from "vue";
import {useStore} from "vuex";
import {useBoeApi, useBoeApiPage} from "@/api/request";
import {AUDIENCE_LIST, ORG_LIST, USER_LIST} from "@/api/ThirdApi";
import {saveStu} from "@/api/index1";

const store = useStore();
const emit = defineEmits({})
const props = defineProps({
  type: Number,
  id: String,
  stage: {
    type: Array,
    default: () => []
  }
})
const visiable = ref(false)
const activeKey = ref(1)
const stageVisible = ref(false)
const selectsData = ref({
  stageId: '',
  studentList: [],
  deptList: [],
  groupList: []
})
const nameSearch = ref({
  keyword: '',
  departId: null,
  page: 1,
  pageSize: 10
})
const audienceName = ref({
  keyword: '',
  page: 1,
  pageSize: 10
})
const searchOrgName = ref({
  keyword: '',
  page: 1,
  pageSize: 10
})

const stageIds = computed(() => props.stage)

const {
  data: stuData,
  fetch: searchStu,
  page: stuPageNo,
  pageSize: stuPageSize,
  loading: stuLoading,
  total: stuTotal
} = useBoeApiPage(USER_LIST, nameSearch.value, {
  init: true,
  result: res => res.result.userInfoList,
  totalPage: res => res.result.totalPage,
  total: res => res.result.totalElement
})

const {
  data: orgData,
  fetch: searchOrg,
} = useBoeApi(ORG_LIST, searchOrgName.value)

const {
  data: audiData,
  fetch: searchAudi,
  page: audiPageNo,
  pageSize: audiPageSize,
  loading: audiLoading,
  total: audiTotal
} = useBoeApiPage(AUDIENCE_LIST, audienceName.value, {
  init: true,
  result: res => res.result.audienceList.map(e => ({...e, id: e.id + ''})),
  totalPage: res => res.result.totalPage,
  total: res => res.result.totalElement
})

const stuColumns = ref([
  {
    title: "姓名",
    dataIndex: "realName",
    key: "realName",
    width: 80,
    align: "center",
    className: "h",
    ellipsis: true,
  },
  {
    title: "工号",
    dataIndex: "userNo",
    key: "userNo",
    width: 80,
    align: "center",
    className: "h",
    ellipsis: true,
  },
  {
    title: "归属组织",
    dataIndex: "orgName",
    key: "orgName",
    width: 80,
    align: "center",
    className: "h",
    ellipsis: true,
  },
  {
    title: "部门",
    dataIndex: "departName",
    key: "departName",
    width: 80,
    align: "center",
    className: "h",
    ellipsis: true,
  },
])
const audiColums = ref([{
  title: "id",
  dataIndex: "id",
  key: "id",
  width: 35,
  align: "center",
  className: "h",
},
  {
    title: "受众名称",
    dataIndex: "audienceName",
    key: "audienceName",
    width: 30,
    align: "left",
    className: "h",
    ellipsis: true,
  },
  {
    title: "人数",
    dataIndex: "totalMember",
    key: "totalMember",
    width: 30,
    align: "center",
    className: "h",
  },
  {
    title: "类型",
    dataIndex: "audienceType",
    key: "audienceType",
    width: 40,
    align: "center",
    className: "h",
  },
])
const stuSelectKeys = ref([])
const orgSelectKeys = ref([])
const auditSelectKeys = ref([])
const screenHeight = ref(document.body.clientHeight)
const stuRowSelection = computed(() => ({
  columnWidth: 20,
  selectedRowKeys: stuSelectKeys.value,
  onChange: onStuSelectChange,
  preserveSelectedRowKeys: true,
}))
const orgRowSelection = computed(() => ({
  columnWidth: 20,
  selectedRowKeys: orgSelectKeys.value,
  onChange: onOrgSelectChange,
  preserveSelectedRowKeys: true,
}))

const stuPagination = computed(() => ({
  total: stuTotal.value,
  showSizeChanger: false,
  current: stuPageNo.value,
  pageSize: stuPageSize.value,
  onChange: changePagination
}))

const auditPagination = computed(() => ({
  total: audiTotal.value,
  showSizeChanger: false,
  current: audiPageNo.value,
  pageSize: audiPageSize.value,
  onChange: auditChangePagination
}))

const auditRowSelection = computed(() => ({
  columnWidth: 20,
  selectedRowKeys: auditSelectKeys.value,
  onChange: onAuditSelectChange,
  preserveSelectedRowKeys: true,
}))

const closeDrawer = () => {
  visiable.value = false
};
const openDrawer = () => {
  visiable.value = true
};
//获取组织树
const treeData = computed(() => {
  return store.state.orgtreeList ? store.state.orgtreeList : [];
});

function onSearchStu() {
  nameSearch.value.page = 1
  searchStu()
}

function stuStuOrgSelect(e) {
  nameSearch.value.departId = e.join('')
  searchStu()
}

function stuDel(i) {
  stuSelectKeys.value = stuSelectKeys.value.filter(e => e !== selectsData.value.studentList[i].id)
  selectsData.value.studentList.splice(i, 1)
}

function AuditDel(i) {
  auditSelectKeys.value = auditSelectKeys.value.filter(e => e !== selectsData.value.groupList[i].id)
  selectsData.value.groupList.splice(i, 1)
}

//
// function orgSelect(key, obj) {
//   console.log(obj)
//   request(ORG_CHILD_LIST, {orgId: null}).then(res => {
//     console.log(res.result)
//   })
// }

function onStuSelectChange(e, l) {
  stuSelectKeys.value = e
  selectsData.value.studentList = l
}

function onOrgSelectChange(e, l) {
  orgRowSelection.value = e
  selectsData.value.deptList = l.selectedNodes
}

function onAuditSelectChange(e, l) {
  auditSelectKeys.value = e
  selectsData.value.groupList = l
}

// const stuDepartmentSelect = (e) => {
//   nameSearch.value.orgId = e.join('')
//   searchStu()
// };

//分页获取学员
const changePagination = (page) => {
  nameSearch.value.page = page;
  searchStu()
};

const auditChangePagination = (page) => {
  audienceName.value.page = page;
  searchAudi()
};

//重置
const resetStu = () => {
  deleteDepSelect();
  nameSearch.value = {keyword: '', page: 1, pageSize: 10}
};
//清空选择部门信息
const deleteDepSelect = () => {
  stuSelectKeys.value = []
};

//重置组织
const resetOrg = () => {
  searchOrgName.value = {keyword: '', page: 1, pageSize: 10}
};

//重置受众
const resetAudienceInfo = () => {
  audienceName.value = {keyword: '', page: 1, pageSize: 10}
};

//全部清除
// const deleteAll = () => {
//   selectsData.value = {
//     studentList: [],
//     deptList: [],
//     groupList: []
//   }
// };
//确定添加授权
const submitAuth = () => {
  if (props.type !== 3) {
    stageVisible.value = true
  } else {
    handleStageOk()
  }
};

function handleStageOk() {
  stageVisible.value = false
  visiable.value = false
  emit('finash', false)
  saveStu({
    targetId: props.id,
    type: props.type,
    deptIds: selectsData.value.deptList?.map(e => e.id),
    stageId: selectsData.value.stageId,
    groupIds: selectsData.value.groupList?.map(e => e.id),
    studentList: selectsData.value.studentList
  }).then(() => {
    emit('finash', true)
  })
}

watch(visiable, () => {
  stuSelectKeys.value = []
  orgSelectKeys.value = []
  auditSelectKeys.value = []
  selectsData.value = {
    stageId: '',
    studentList: [],
    deptList: [],
    groupList: []
  }

})

</script>
<style>
.ant-btn-primary {
  background-color: #4ea6ff !important;
}

.cus-select {
  height: 40px;
  border-radius: 8px;
}
</style>