<template>
  <div class="SippliersList">
    <Toptitle title="员工管理">
      <slot name="titleButton">
        <Button @click="exportData()" type="primary" style="margin-right: 10px"
          >批量导出</Button
        >
        <Button
          type="primary"
          @click="handleEmployeeEdit(1, '')"
          style="margin-right:10px;"
          >新增员工</Button
        >
      </slot>
    </Toptitle>
    <div class="content">
      <div class="content_left">
        <Tree
          :data="treeData"
          select-node
          children-key="sub"
          style="width:100%;"
          @on-select-change="handleTreeSelect"
          class="demo-tree-render"
        ></Tree>
      </div>
      <div class="content_right">
        <div class="content_right_topform">
          <Form
            :label-width="90"
            :model="searchData"
            style="display:flex;justify-content:space-between;"
          >
            <div>
              <FormItem label="员工姓名:">
                <Input
                  type="text"
                  size="small"
                  clearable
                  v-model="searchData.title"
                  style="width: 150px"
                  placeholder="请输入姓名"
                />
              </FormItem>
              <FormItem label="部门类别:">
                <Select
                  v-model="searchData.type"
                  style="width: 150px"
                  clearable
                  filterable
                  placeholder="请选择部门类别"
                  size="small"
                >
                  <Option
                    v-for="item in departmentTypeList"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value"
                  />
                </Select>
              </FormItem>
              <FormItem>
                <Button
                  type="primary"
                  size="small"
                  @click="initData(searchData)"
                  style="margin-right:10px;"
                  >搜索</Button
                >
              </FormItem>
            </div>
          </Form>
          <div class="content_right_topfrom_btn"></div>
        </div>
        <div class="content_right_content">
          <div class="content_right_content_btn"></div>
          <div class="content_right_content_table">
            <Table
              :columns="tableColumns"
              border
              :loading="tableLoading"
              :data="tableData"
            >
              <template slot="setSlot" slot-scope="{ row, index }">
                <a style="margin:0 5px" @click="handleSet(2, row, index)"
                  >编辑</a
                >
                <a
                  style="margin:0 5px;color:red"
                  @click="handleSet(3, row, index)"
                  >删除</a
                >
              </template>
            </Table>
            <div class="content_right_content_page">
              <Page
                :page-size-opts="[10, 20, 30, 40, 100]"
                @on-page-size-change="changeSize"
                @on-change="changePage"
                :current="pageIndex"
                :total="total"
                show-sizer
                :page-size="pageSize"
              />
            </div>
          </div>
        </div>
      </div>
    </div>
    <Modal
      v-model="showModal"
      :title="type == 1 ? '新增员工' : '编辑员工'"
      @on-ok="handleModalOk"
      @on-cancel="showModal = false"
    >
      <div class="modal_content">
        <div class="modal_content_label">
          <span>ID: </span>
          <div style="width: 220px">
            {{ employeeForm.id || "自动生成" }}
          </div>
        </div>
        <div class="modal_content_label">
          <span>员工姓名: </span>
          <Input
            type="text"
            size="small"
            placeholder="请输入"
            v-model="employeeForm.nickname"
            style="width: 220px"
          />
        </div>
        <div class="modal_content_label">
          <span>手机号: </span>
          <Input
            type="text"
            size="small"
            placeholder="请输入"
            v-model="employeeForm.mobile"
            style="width: 220px"
          />
        </div>
        <div class="modal_content_label">
          <span>部门: </span>
          <Select
            size="small"
            placeholder="请选择"
            width="220px"
            clearable
            v-model="employeeForm.depart_code"
            style="width: 220px"
          >
            <Option
              v-for="item in departmentList"
              :key="item.code"
              :label="item.title"
              :value="item.code"
            />
          </Select>
        </div>
        <div class="modal_content_label">
          <span>部门类别: </span>
          <Select
            size="small"
            placeholder="请选择"
            v-model="employeeForm.type"
            clearable
            style="width: 220px"
          >
            <Option
              v-for="item in departmentTypeList"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            />
          </Select>
        </div>
        <div class="modal_content_label">
          <span>是否登录系统: </span>
          <div style="width: 220px">
            <RadioGroup v-model="employeeForm.is_bind">
              <Radio :label="1">是</Radio>
              <Radio :label="0">否</Radio>
            </RadioGroup>
          </div>
        </div>
        <div class="modal_content_label" v-show="employeeForm.is_bind">
          <span>绑定人员: </span>
          <div style="width: 220px">
            <Select
              size="small"
              placeholder="请选择"
              v-model="employeeForm.sys_user_id"
              clearable
              style="width: 220px"
            >
              <Option
                v-for="item in userList"
                :key="item.id"
                :label="item.nickname"
                :value="item.id"
              />
            </Select>
          </div>
        </div>
      </div>
    </Modal>
  </div>
</template>

<script>
// 这里可以导入其他文件（比如：组件，工具js，第三方插件js，json文件，图片文件等等）
// 例如：import 《组件名称》 from '《组件路径》';

export default {
  name: "EmployeeManage",
  components: {},
  props: {},
  // import引入的组件需要注入到对象中才能使用
  data() {
    // 这里存放数据
    return {
      type: "",
      partsNameList: [],
      treeData: [
        {
          title: "员工分类",
          expand: true,
          sub: [],
          render: (h, { root, node, data }) => {
            return h(
              "span",
              {
                style: {
                  display: "inline-block",
                  width: "100%",
                },
              },
              [
                h("span", [
                  h("Icon", {
                    props: {
                      type: "ios-folder-outline",
                    },
                    style: {
                      marginRight: "8px",
                    },
                  }),
                  h("span", data.title),
                ]),
              ]
            );
          },
        },
      ],
      buttonProps: {
        type: "default",
        size: "small",
      },
      tableColumns: [
        {
          title: "序号",
          type: "index",
          key: "id",
          align: "center",
          minWidth: 90,
        },
        { title: "员工姓名", key: "nickname", align: "center", minWidth: 110 },
        { title: "手机号", key: "mobile", align: "center", minWidth: 150 },
        {
          title: "部门类别",
          key: "type",
          align: "center",
          minWidth: 100,
          render: (h, params) => {
            return h(
              "span",
              {},
              params.row.type == 1
                ? "制单人"
                : params.row.type == 2
                ? "业务员"
                : "车间人员"
            );
          },
        },
        {
          title: "是否登录系统",
          key: "is_bind",
          align: "center",
          minWidth: 150,
          render: (h, params) => {
            const { row } = params;
            return h("span", {}, row.is_bind == 1 ? "是" : "否");
          },
        },
        {
          title: "操作",
          key: "code",
          align: "center",
          minWidth: 120,
          slot: "setSlot",
        },
      ],
      tableData: [],
      tableLoading: false,
      pageIndex: 1,
      pageSize: 10,
      total: 0,
      searchData: {
        nickname: "",
        type: "",
        code: "",
      },
      suppliersTypeTitle: "",
      suppliersTypeId: "",
      showModal: false,
      employeeForm: {
        id: "",
        nickname: "",
        mobile: "",
        depart_code: "",
        is_blind: "",
      },
      departmentList: [],
      departmentTypeList: [
        { label: "制单人", value: 1 },
        { label: "业务员", value: 2 },
        { label: "车间人员", value: 3 },
      ],
      userList: [],
      type: null,
    };
  },
  // 生命周期 - 创建完成（可以访问当前this实例）
  created() {
    this.axios({
      method: "get",
      url: "/api/user",
    })
      .then((res) => {
        this.userList = res.data.data;
      })
      .catch((err) => {});
    this.axios({
      method: "get",
      url: "/api/employee_depart_list",
    })
      .then((res) => {
        this.treeData[0].sub = res.data;
        this.handleDepartment(res.data);
      })
      .catch((err) => {});
  },
  // 生命周期 - 挂载完成（可以访问DOM元素）
  mounted() {
    this.initData(this.searchData);
  },
  methods: {
    async exportData() {
      const res = await this.axios("/api/employee_export");
      if (res.code == 200) {
        let url = `${this.$store.state.ip}/api/storage/${res.data.file}`;
        location.href = url;
      }
    },
    initData(row) {
      this.tableLoading = true;
      this.axios({
        method: "get",
        url: "/api/employee_list",
        params: {
          ...row,
          page_index: this.pageIndex,
          page_size: this.pageSize,
        },
      })
        .then((res) => {
          this.tableLoading = false;
          this.tableData = res.data;
        })
        .catch((err) => {});
    },
    handleSet(type, row, index) {
      // 2编辑 3删除
      switch (type) {
        case 2:
          this.employeeForm = JSON.parse(JSON.stringify(row));
          this.handleEmployeeEdit(type, row);
          break;
        case 3:
          this.$Modal.confirm({
            title: "确认删除？",
            content: "此操作无法恢复，请确认！",
            onOk: () => {
              this.axios({
                method: "post",
                url: "/api/employee_del",
                data: {
                  id: row.id,
                },
              })
                .then((res) => {
                  this.$Message.success(res.msg);
                  this.initData();
                })
                .catch((err) => {});
            },
            onCancel: () => {},
          });
          break;
      }
    },
    append(data) {
      const children = data.children || [];
      children.push({
        code: this.form.code,
        title: this.form.title,
        expand: true,
      });
      this.$set(data, "children", children);
    },
    remove(root, node, data) {
      if (node.children && node.children.length > 0) {
        this.$Message.error("有子集时不可删除");
      } else {
        const parentKey = root.find((el) => el === node).parent;
        const parent = root.find((el) => el.nodeKey === parentKey).node;
        const index = parent.children.indexOf(data);
        parent.children.splice(index, 1);
      }
    },
    handleModalOk() {
      let url = "";
      this.type == 1
        ? (url = "/api/employee_add")
        : (url = "/api/employee_edit");
      this.axios({
        method: "post",
        url,
        data: {
          ...this.employeeForm,
        },
      })
        .then((res) => {
          this.$Message.success(res.msg);
          this.initData();
        })
        .catch((err) => {});
    },
    handleTreeSelect(arr, row) {
      console.log("row :>> ", row);
      this.searchData.code = row.code;
      this.suppliersTypeTitle = row.title;
      this.suppliersTypeId = row.id;
      this.initData(this.searchData);
    },
    changeSize(e) {
      this.pageSize = e;
      this.initData(this.searchData);
    },
    changePage(e) {
      this.pageIndex = e;
      this.initData(this.searchData);
    },
    handleEmployeeEdit(type, item) {
      this.type = type;
      if (type == 1) {
        this.employeeForm = {
          id: "",
          nickname: "",
          mobile: "",
          depart_code: "",
          is_blind: "",
          sys_user_id: "",
        };
      }
      this.showModal = true;
    },
    handleDepartment(list) {
      list.forEach((element) => {
        if (element.sub && element.sub.length > 0) {
          return this.handleDepartment(element.sub);
        } else {
          this.departmentList.push(element);
        }
      });
    },
  },
  // 监听属性 类似于data概念
  computed: {},
  // 监控data中的数据变化
  watch: {},
  beforeCreate() {}, // 生命周期 - 创建之前
  beforeMount() {}, // 生命周期 - 挂载之前
  beforeUpdate() {}, // 生命周期 - 更新之前
  updated() {}, // 生命周期 - 更新之后
  beforeDestroy() {}, // 生命周期 - 销毁之前
  destroyed() {}, // 生命周期 - 销毁完成
  activated() {}, // 如果页面有keep-alive缓存功能，这个函数会触发
};
</script>

<style lang="scss" scoped>
.content {
  width: 100%;
  display: flex;
  justify-content: space-between;
  padding-top: 30px;
  .content_left {
    width: 15%;
    height: 60vh;
    border-right: 1px solid #515a6e;
  }
  .content_right {
    width: 83%;
    .content_right_topform {
      /deep/.ivu-form {
        display: flex;
        justify-content: flex-start;
        flex-wrap: wrap;
      }
      /deep/.ivu-form-item {
        display: inline-block;
        width: 250px;
      }
      .content_right_topfrom_btn {
        display: flex;
        justify-content: flex-end;
      }
    }
    .content_right_content {
      .content_right_content_btn {
        display: flex;
        justify-content: flex-end;
        margin-bottom: 20px;
      }
      .content_right_content_table {
      }
      .content_right_content_page {
        display: flex;
        justify-content: center;
        padding-top: 20px;
      }
    }
  }
}
.demo-tree-render {
  width: 100%;
}
.modal_content {
  .modal_content_label {
    display: flex;
    justify-content: space-around;
    align-items: center;
    padding: 10px 0;
    span {
      width: 100px;
    }
  }
}
</style>
