<template>
  <div class="container">
    <template v-if="!isDepart">
      <direct-search
        ref="form"
        :label-position="'right'"
        :forms="searchList"
        :loading="loading"
        :style="{ textAlign: 'left' }"
        @handleSearch="handleFormSearch"
      />
      <el-table-self
        ref="table"
        :table-data="tableData"
        :columns="columns"
        :list-loading="listLoading"
        :current-page="pageIndex"
        :total-count="total"
        :page-sizes="pageSizes"
        :page-size="pageSize"
        @pageSizeChange="handleSizeChange"
        @currentPageChange="handleCurrentChange"
      />
      <dialog-form
        width="450px"
        :close-modal="false"
        ref="dialog"
        title="分配用户"
        :form-edit="formEdit"
        :form-data="formData"
        @handleConfirm="handleConfirm"
      ></dialog-form>
    </template>
  </div>
</template>

<script>
import paginationMixin from "@/components/TabComponents/mixin"
import {
  getGroupUserPage,
  addGroupUser,
  delGroupUser,
} from "@/api/coop-group.js"
import { getUserPage } from "@/api/user"
import { mapGetters } from "vuex"
export default {
  name: "GroupUser",
  mixins: [paginationMixin],
  props: {
    groupId: String,
  },
  data() {
    return {
      isDepart: false,
      orgMap: {},
      listLoading: false,
      // 查询列表
      searchList: [
        {
          label: "用户名称",
          type: "input",
          prop: "userName",
          placeholder: "请输入用户名称",
        },
        {
          type: "button",
          value: "查询",
          icon: "el-icon-search",
        },
        {
          type: "button",
          color: "primary",
          icon: "el-icon-plus",
          value: "分配用户",
          loading: false,
          func: this.handleAdd,
        },
      ],
      columns: [
        {
          label: "用户名称",
          minWidth: 120,
          value: "userName",
        },
        {
          label: "协作组",
          minWidth: 120,
          value: "groupName",
        },

        {
          label: "机构名称",
          minWidth: 120,
          value: "orgName",
        },
        {
          label: "科室名称",
          minWidth: 120,
          value: "deptName",
        },
        {
          label: "操作",
          width: 120,
          fixed: "right",
          operType: "button",
          operations: [
            {
              func: this.handleDel,
              formatter(row) {
                return {
                  label: "删除",
                  type: "danger",
                }
              },
            },
          ],
        },
      ],
      tableData: [],
      cacheForm: {},
      title: "",
      formData: [
        {
          type: "select",
          label: "用户",
          placeholder: "请选择用户",
          prop: "userId",
          multiple: true,
          opts: [],
          rules: [{ required: true, message: "请选择用户" }],
        },
      ],
      formEdit: {},
    }
  },
  watch: {
    groupId(groupId) {
      if (groupId) {
        this.handleFormSearch({ groupId })
      } else {
        this.tableData = []
      }
    },
  },
  computed: {
    ...mapGetters({
      group: "user/group",
    }),
  },
  methods: {
    handleDepart({ orgName, id }) {
      this.orgMap = {
        orgName,
        orgId: id,
      }
      this.isDepart = true
    },
    handleAdd() {
      if (!this.cacheForm.groupId) {
        this.$message.error("请先选择/分配协作组")
        return
      }
      this.searchList[2].loading = true
      // 获取用户列表
      const userList = []
      getUserPage({ groupId: this.groupId, current: 1, size: 1000 }).then(
        (res) => {
          if (res.code === 1) {
            const d = res.data
            d.records &&
              d.records.forEach((item) => {
                userList.push({
                  label: item.name,
                  value: item.id,
                })
              })
            this.formData[0].opts = userList
            this.$refs.dialog.open()
            this.searchList[2].loading = false
          }
        }
      )
    },
    handleConfirm(form) {
      const data = form.userId.map((_) => {
        return {
          groupId: this.cacheForm.groupId,
          userId: _,
        }
      })
      addGroupUser(data)
        .then((res) => {
          if (res.code === 1) {
            this.$message.success("分配用户成功")
            this.handleSearch()
          }
        })
        .finally(() => {
          this.$refs.dialog.close()
        })
    },
    handleDel(row) {
      this.$confirm(`是否删除【${row.userName}】?`, "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          delGroupUser(row.id).then((res) => {
            if (res.code === 1) {
              this.$message({
                type: "success",
                message: "删除成功!",
              })
              this.handleSearch()
            }
          })
        })
        .catch(() => {})
    },

    // 查询
    handleFormSearch(form) {
      this.pageIndex = 1
      this.handleSearch(form)
    },
    handleSearch(form) {
      const params = Object.assign(this.cacheForm, form)
      this.listLoading = true
      for (let key in params) {
        if (params[key] === "") {
          delete params[key]
        }
      }
      params.current = this.pageIndex
      params.size = this.pageSize
      getGroupUserPage(params).then((res) => {
        this.listLoading = false
        if (res.code === 1) {
          const d = res.data
          this.tableData = d.records || []
          this.total = Number(d.total)
        }
      })
    },
  },
  created() {
    const routeName = this.$route.name
    if (routeName === "GroupUser" && this.group.groupId) {
      this.handleFormSearch({ groupId: this.group.groupId })
    }
  },
}
</script>
