<template>
  <div class="member-choose">
    <Button @click="userModalVisible=true" :icon="icon">{{text}}</Button>
    <span @click="clearSelectData" class="clear">清空已选</span>
    <Collapse simple class="collapse">
      <Panel name="1">
        已选择
        <span class="select-count">{{selectUsers.length}}</span> 人
        <p slot="content">
          <Tag
            v-for="(item, i) in selectUsers"
            :key="i"
            :name="item.id"
            color="default"
            closable
            @on-close="handleCancelUser"
          >{{item.username}}
          </Tag>
        </p>
      </Panel>
    </Collapse>
    <Drawer title="选择用户" closable v-model="userModalVisible" width="800" draggable>
      <Form ref="searchUserForm" :model="searchUserForm" inline :label-width="55">
        <Form-item label="用户名" prop="username">
          <Input
            type="text"
            v-model="searchUserForm.username"
            clearable
            placeholder="请输入用户名"
            style="width: 200px"
          />
        </Form-item>
        <Form-item style="margin-left:-35px;" class="br">
          <Button @click="handleSearchUser" type="primary" icon="ios-search">搜索</Button>
          <Button @click="handleResetUser">重置</Button>
        </Form-item>
      </Form>
      <Table
        :loading="userLoading"
        border
        :columns="userColumns"
        :data="userData"
        :height="height"
        ref="userTable"
      ></Table>
      <Row type="flex" justify="end" style="margin: 10px 0;">
        <Page
          :current="searchUserForm.pageNumber"
          :total="totalUser"
          :page-size="searchUserForm.pageSize"
          @on-change="changeUserPage"
          @on-page-size-change="changeUserPageSize"
          :page-size-opts="[10,20,50]"
          size="small"
          show-total
          show-elevator
          show-sizer
        ></Page>
      </Row>
      <div class="my-drawer-footer">
        已选择
        <span class="select-count">{{selectUsers.length}}</span> 人
        <Button @click="clearSelectData" style="margin-left:10px">清空已选</Button>
        <Button @click="userModalVisible=false" type="primary" style="margin-left:10px">关闭</Button>
      </div>
    </Drawer>
  </div>
</template>

<script>
  import {getMember} from "@/api/member";

  export default {
    name: "userChoose",
    props: {
      text: {
        type: String,
        default: "选择会员"
      },
      icon: {
        type: String,
        default: "md-person-add"
      }
    },
    data() {
      return {
        height: 500, // 表格高度
        userLoading: true, // 加载状态
        userModalVisible: false, // modal显隐
        selectUsers: [], // 已选用户
        searchUserForm: { // 请求参数
          username: "",
          pageNumber: 1, // 当前页数
          pageSize: 10, // 页面大小
          sort: "createTime", // 默认排序字段
          order: "desc" // 默认排序方式
        },
        userColumns: [ // 表头
          {
            type: "index",
            width: 60,
            align: "center"
          },
          {
            title: "用户名",
            key: "username",
            minWidth: 140,
            sortable: true
          },
          {
            title: "头像",
            key: "face",
            width: 80,
            align: "center",
            render: (h, params) => {
              return h("Avatar", {
                props: {
                  src: params.row.face
                }
              });
            }
          },
          {
            title: "手机",
            key: "mobile",
            width: 125,
            sortable: true
          },
          {
            title: "状态",
            key: "status",
            align: "center",
            width: 120,
            render: (h, params) => {
              if (params.row.delFlag == 0) {
                return h("div", [
                  h("Badge", {
                    props: {
                      status: "success",
                      text: "正常启用"
                    }
                  })
                ]);
              } else if (params.row.delFlag == -1) {
                return h("div", [
                  h("Badge", {
                    props: {
                      status: "error",
                      text: "禁用"
                    }
                  })
                ]);
              }
            }
          },
          {
            title: "创建时间",
            key: "createTime",
            sortable: true,
            sortType: "desc",
            width: 170
          },
          {
            title: "操作",
            key: "action",
            width: 130,
            align: "center",
            fixed: "right",
            render: (h, params) => {
              let select;
              this.selectUsers.forEach(item => {
                if (item.id === params.row.id) {
                  select = params.row
                }
              });

              if (select) {
                return h("div", [
                  h(
                  "Button",
                  {
                    props: {
                      type: "info",
                      size: "small"
                    },
                    on: {
                      click: () => {
                        this.chooseCancel(params.row);
                      }
                    }
                  },
                  "取消选择"
                  )
                ]);
              } else {
                return h("div", [
                  h(
                  "Button",
                  {
                    props: {
                      type: "info",
                      size: "small"
                    },
                    on: {
                      click: () => {
                        this.chooseUser(params.row);
                      }
                    }
                  },
                  "选择"
                  )
                ]);
              }
            }
          }
        ],
        userData: [], // 用户数据
        totalUser: 0 // 数量
      };
    },
    methods: {
      changeUserPage(v) {
        this.searchUserForm.pageNumber = v;
        this.getUserDataList();
      },
      changeUserPageSize(v) {
        this.searchUserForm.pageSize = v;
        this.getUserDataList();
      },
      getUserDataList() {
        this.userLoading = true;
        getMember(this.searchUserForm).then(res => {
          this.userLoading = false;
          if (res.success) {
            this.userData = res.result.records;
            this.totalUser = res.result.total;
          }
        });
      },
      handleSearchUser() {
        this.searchUserForm.pageNumber = 1;
        this.searchUserForm.pageSize = 10;
        this.getUserDataList();
      },
      handleResetUser() {
        this.$refs.searchUserForm.resetFields();
        this.searchUserForm.pageNumber = 1;
        this.searchUserForm.pageSize = 9;
        this.$refs.dep.clearSelect();
        this.searchUserForm.departmentId = "";
        // 重新加载数据
        this.getUserDataList();
      },
      setData(v) {
        this.selectUsers = v;
        this.$emit("on-change", this.selectUsers);
      },
      chooseCancel(v){
        let _index;
        this.selectUsers.forEach((e,index) => {
          if (v.id == e.id) {
            _index = index;
          }
        });

        if(_index||_index==0){
          this.selectUsers.splice(_index,1);
          this.$emit("on-change", this.selectUsers);
        }
      },
      chooseUser(v) {
        // 去重
        let that = this;
        let flag = true;
        this.selectUsers.forEach(e => {
          if (v.id == e.id) {
            flag = false;
          }
        });
        if (flag) {
          let u = {
            id: v.id,
            username: v.username
          };
          this.selectUsers.push(u);
          this.$emit("on-change", this.selectUsers);
        }
      },
      clearSelectData() {
        this.selectUsers = [];
        this.$emit("on-change", this.selectUsers);
      },
      handleCancelUser(e, id) {
        // 删除所选用户
        let newArray = [];
        this.selectUsers.forEach(e => {
          if (id != e.id) {
            newArray.push(e);
          }
        });
        this.selectUsers = newArray;
        this.$emit("on-change", this.selectUsers);
        this.$Message.success("删除所选用户成功");
      }
    },
    created() {
      // 计算高度
      this.height = Number(document.documentElement.clientHeight - 230);
      this.getUserDataList();
    }
  };
</script>

<style lang="scss" scoped>
  .member-choose {
    .clear {
      font-size: 12px;
      margin-left: 15px;
      color: #40a9ff;
      cursor: pointer;
    }

    .collapse {
      font-size: 12px;
      margin-top: 15px;
      width: 500px;
    }

    .select-count {
      font-weight: 600;
      color: #40a9ff;
    }
  }

  .my-drawer-footer {
    z-index: 10;
    width: 100%;
    position: absolute;
    bottom: 0;
    left: 0;
    border-top: 1px solid #e8e8e8;
    padding: 10px 16px;
    text-align: right;
    background: #fff;
  }
</style>