<template>
  <div class="app-container calendar-list-container">
    <div class="filter-container">
      <el-button
        class="add-btn-default"
        type="primary"
        v-waves
        @click="handleCreate"
      >
        <i class="el-icon-plus"></i>添加后台用户
      </el-button>
    </div>
    <el-table
      :key="tableKey"
      :data="list"
      v-loading.body="listLoading"
      border
      fit
      highlight-current-row
      style="width: 100%"
    >
      <el-table-column align="center" label="ID" width="65">
        <template slot-scope="scope">
          <span>{{ scope.row.id }}</span>
        </template>
      </el-table-column>
      <el-table-column align="center" label="姓名">
        <template slot-scope="scope">
          <span>{{ scope.row.name }}</span>
        </template>
      </el-table-column>
      <el-table-column align="center" label="账户">
        <template slot-scope="scope">
          <span>{{ scope.row.username }}</span>
        </template>
      </el-table-column>
      <el-table-column align="center" label="角色">
        <template slot-scope="scope">
          <span>{{ scope.row.groupStr }}</span>
        </template>
      </el-table-column>
      <el-table-column align="center" label="操作">
        <template slot-scope="scope">
          <el-button
            v-if="userManager_btn_edit"
            type="text"
            @click="handleUpdate(scope.row)"
            >编辑</el-button
          >
          <!--          <el-button-->
          <!--            v-if="scope.row.status==2"-->
          <!--            size="small"-->
          <!--            type="warning"-->
          <!--            @click="UpdateStatus(scope.row,1)"-->
          <!--          >启用</el-button>-->
          <!--          <el-button-->
          <!--            v-if="scope.row.status==1"-->
          <!--            size="small"-->
          <!--            type="warning"-->
          <!--            @click="UpdateStatus(scope.row,2)"-->
          <!--          >停用</el-button>-->
          <el-button
            v-if="userManager_btn_del"
            type="text"
            @click="handleDelete(scope.row)"
            >删除</el-button
          >
        </template>
      </el-table-column>
    </el-table>
    <div v-show="!listLoading" class="pagination-container">
      <el-pagination
        style="text-align: center"
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page.sync="listQuery.page"
        :page-sizes="[10, 20, 30, 50]"
        :page-size="listQuery.limit"
        layout="total, sizes, prev, pager, next, jumper"
        :total="total"
      ></el-pagination>
    </div>
    <!-- 弹窗框 -->
    <el-dialog
      :title="textMap[dialogStatus]"
      width="30%"
      :visible.sync="dialogFormVisible"
    >
      <el-form :model="form" :rules="rules" ref="form" label-width="100px">
        <el-form-item label="账号" prop="username">
          <!--v-if="dialogStatus == 'create'"-->
          <el-input
            v-model="form.username"
            style="width: 80%"
            placeholder="请输入账号"
          ></el-input>
        </el-form-item>
        <el-form-item
          v-if="dialogStatus == 'create'"
          label="密码"
          placeholder="请输入密码"
          prop="password"
        >
          <el-input
            type="password"
            style="width: 80%"
            v-model="form.password"
          ></el-input>
        </el-form-item>
        <el-form-item
          v-if="dialogStatus == 'update'"
          label="密码"
          placeholder="请输入密码"
          prop="passwordEdit"
        >
          <el-input
            type="password"
            style="width: 80%"
            v-model="form.passwordEdit"
          ></el-input>
        </el-form-item>
        <el-form-item label="角色" prop="members">
          <el-select
            class="filter-item"
            v-model="form.members"
            placeholder="请选择角色"
            filterable
          >
            <el-option
              v-for="(val, key, index) in list_All"
              :key="val.id"
              :label="val.name"
              :value="val.id"
            ></el-option>
          </el-select>
          <!--          <el-autocomplete-->
          <!--            class="inline-input"-->
          <!--            v-model="membersName"-->
          <!--            :fetch-suggestions="querySearch"-->
          <!--            placeholder="请选择"-->
          <!--            @select="handleSelect2"-->
          <!--          ></el-autocomplete>-->
        </el-form-item>
        <el-form-item label="姓名">
          <el-input
            v-model="form.name"
            style="width: 80%"
            placeholder="请输入姓名"
          ></el-input>
        </el-form-item>
        <el-form-item label="手机号">
          <el-input
            v-model="form.telPhone"
            style="width: 80%"
            placeholder="请输入手机号"
          ></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="cancel('form')">取 消</el-button>
        <el-button
          v-if="dialogStatus == 'create'"
          type="primary"
          @click="create('form')"
          >确 定</el-button
        >
        <el-button v-else type="primary" @click="update('form')"
          >确 定</el-button
        >
      </div>
    </el-dialog>
  </div>
</template>

<script type="javascript">
import { page, addObj, delObj, putObj } from "api/admin/user/index";
import { mapGetters } from "vuex";
import { fetchTree, listAll } from "api/admin/group/index";

export default {
  name: "user",
  data() {
    return {
      form: {
        username: undefined,
        name: undefined,
        status: 1,
        state2: "",
        telPhone: "",
        password: undefined,
        passwordEdit: undefined,
        members: undefined,
      },
      editCompanyId: undefined, //编辑时公司id
      baranchQuery: {
        zoneId: null,
      },
      rules: {
        name: [
          {
            required: true,
            message: "请输入用户",
            trigger: "blur",
          },
          {
            min: 3,
            max: 20,
            message: "长度在 3 到 20 个字符",
            trigger: "blur",
          },
        ],
        username: [
          {
            required: true,
            message: "请输入账户",
            trigger: "blur",
          },
          {
            min: 3,
            max: 20,
            message: "长度在 3 到 20 个字符",
            trigger: "blur",
          },
        ],
        password: [
          {
            required: true,
            message: "请输入密码",
            trigger: "blur",
          },
          {
            min: 5,
            max: 20,
            message: "长度在 5 到 20 个字符",
            trigger: "blur",
          },
        ],
        passwordEdit: {
          min: 5,
          max: 20,
          message: "长度在 5 到 20 个字符",
          trigger: "blur",
        },
        status: [
          {
            type: "integer",
            required: true,
            message: "请选择",
            trigger: "blur",
          },
        ],
        corporationId: {
          required: true,
          message: "请选择所属公司",
        },
        companyId: {
          required: true,
          message: "请选择所属门店",
        },
        members: {
          required: true,
          message: "请选择角色",
        },
      },
      list: [],
      total: 0,
      listLoading: true,
      listQuery: {
        page: 1,
        limit: 20,
        name: undefined,
        corporationId: undefined,
        companyId: undefined,
        username: undefined,
      },
      sexOptions: ["男", "女"],
      zoneOptions: ["男", "女"],
      dataOptions: [
        { id: "1", val: "所属分公司" },
        { id: "2", val: "所属片区" },
        { id: "3", val: "所有数据" },
      ],
      statusOptions: [
        { id: 1, val: "启用" },
        { id: 2, val: "停用" },
      ],
      dialogFormVisible: false,
      dialogStatus: "",
      userManager_btn_edit: false,
      userManager_btn_del: false,
      userManager_btn_add: false,
      allCompanies: {},
      allCompaniesArr: [],
      myGroups: [], //角色列表
      loading: false,
      textMap: {
        update: "编辑",
        create: "创建",
      },
      tableKey: 0,
      allBranchCompany: [], //所有分公司列表
      list_All: [],
      companys_list: [],
      branchCompany_list: [], // 所属门店列表
      branchCompany_list_select: [], // 全部所属门店
      edit_item: {},
    };
  },
  created() {
    this.getList();
    // getAll().then((response) => {
    //   this.allCompaniesArr = response.data;
    //   this.allBranchCompany = response.data;
    // });
    // getAllCompany((codeAndBranchCompany) => {
    //   this.allCompanies = codeAndBranchCompany;
    // });
    listAll().then((response) => {
      this.list_All = response;
    });
    // this.remoteGroupsMethod("");
    // getCurrentGroups().then(result => {
    //   this.myGroups = result.data;
    //   const mems = [];
    //   for (let i = 0; i < result.data.length; i++) {
    //     mems.push(result.data[i].id);
    //   }
    //   this.members = mems;
    // });
    this.userManager_btn_edit = this.elements["userManager:btn_edit"];
    this.userManager_btn_del = this.elements["userManager:btn_del"];
    this.userManager_btn_add = this.elements["userManager:btn_add"];
  },
  computed: {
    ...mapGetters(["elements"]),
  },
  methods: {
    remoteGroupsMethod(query) {
      //      if (query !== '') {
      this.loading = true;
      this.loading = false;
      fetchTree({
        name: query,
      }).then((response) => {
        this.myGroups = response;
        // this.total = response.data.total;
        this.loading = false;
      });
      //      } else {
      //        this.myGroups = [];
      //      }
    },
    /**
     * 所属分公司
     * */
    handleSelectSubordinate(item) {
      this.form.companyId = item.id;
      this.form.companyName = item.name;
    },
    /**
     * 获取后台用户管理列表数据
     * */
    getList() {
      this.listLoading = true;
      this.listQuery.username = this.listQuery.name;
      if (this.listQuery.corporationId == "0") {
        this.listQuery.corporationId = undefined;
      }
      if (this.listQuery.companyId == "0") {
        this.listQuery.companyId = undefined;
      }
      page(this.listQuery).then((response) => {
        this.list = response.data.data;
        this.total = response.data.totalCount;
        this.listLoading = false;
      });
    },
    handleFilter() {
      this.listQuery.page = 1;
      this.getList();
    },
    handleSizeChange(val) {
      this.listQuery.limit = val;
      this.getList();
    },
    handleCurrentChange(val) {
      this.listQuery.page = val;
      this.getList();
    },
    /**
     * 添加后台用户--按钮
     */
    handleCreate() {
      this.resetTemp();
      this.dialogStatus = "create";
      this.dialogFormVisible = true;
    },
    UpdateStatus(row, status) {
      console.log(row);
      putObj(row.id, {
        id: row.id,
        status: status,
        username: row.username,
      }).then((response) => {
        if (response.status == 200) {
          this.$notify({
            title: "成功",
            message: "编辑成功",
            type: "success",
            duration: 2000,
          });
        } else {
          this.$notify({
            title: "失败",
            message: response.message,
            type: "error",
            duration: 2000,
          });
        }

        this.getList();
      });
    },
    /**
     * 编辑后台账号
     * */
    handleUpdate(row) {
      this.form = {
        id: row.id,
        username: row.username,
        name: row.name,
        status: row.status,
        state2: "",
        telPhone: row.telPhone,
        password: undefined,
        passwordEdit: undefined,
        members: undefined,
      };
      // this.$refs['form'].validateField('passwordEdit', error => {
      //   if (!error) {
      //     console.log('密码校验通过')
      //   } else {
      //     return false;
      //   }
      // });
      this.list_All.forEach((item) => {
        if (item.name == row.groupStr) {
          this.form.members = item.id;
        }
      });
      this.dialogStatus = "update";
      this.dialogFormVisible = true;
    },
    handleDelete(row) {
      this.$confirm("此操作将永久删除, 是否继续?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      }).then(() => {
        delObj(row.id).then(() => {
          this.$notify({
            title: "成功",
            message: "删除成功",
            type: "success",
            duration: 2000,
          });
          const index = this.list.indexOf(row);
          this.list.splice(index, 1);
        });
      });
    },
    /**
     * 创建后台账号
     * */
    create(formName) {
      const set = this.$refs;
      set[formName].validate((valid) => {
        if (valid) {
          let params = {
            telPhone: this.form.telPhone,
            username: this.form.username,
            password: this.form.password,
            name: this.form.name,
            members: [this.form.members],
          };
          addObj(params).then((response) => {
            if (response.status == 200) {
              this.$notify({
                title: "成功",
                message: "添加成功",
                type: "success",
                duration: 2000,
              });
            } else {
              this.$notify({
                title: "失败",
                message: response.message,
                type: "error",
                duration: 2000,
              });
            }
            this.dialogFormVisible = false;
            this.getList();
          });
        } else {
          return false;
        }
      });
    },
    cancel(formName) {
      this.dialogFormVisible = false;
      this.$refs[formName].resetFields();
    },
    querySearch(queryString, cb) {
      let selectArry = [];
      this.list_All.map(function (item) {
        item.value = item.name;
        selectArry.push(item);
      });
      this.selectArry = selectArry;
      var results = queryString
        ? selectArry.filter(this.createFilter(queryString))
        : selectArry;
      // 调用 callback 返回建议列表的数据
      cb(results);
    },
    createFilter(queryString) {
      return (restaurant) => {
        return restaurant.name.indexOf(queryString.toLowerCase()) != -1;
      };
    },
    /**
     * 编辑后台账号
     */
    update(formName) {
      const set = this.$refs;
      set[formName].validate((valid) => {
        if (valid) {
          this.dialogFormVisible = false;
          if (this.form.passwordEdit) {
            this.form.password = this.form.passwordEdit;
            this.form.passwordEdit = undefined;
          } else {
            this.form.password = undefined;
          }
          // if (this.form.corporationId == 0 && this.form.companyId == 0) {
          //   // 所属公司、所属门店  均为全部
          //   this.form.dataAll = 1;
          // } else if (this.form.corporationId > 0 && this.form.companyId == 0) {
          //   // 选择所属公司    全部门店
          //   this.form.dataCorporation = this.form.corporationId;
          // } else if (this.form.corporationId > 0 && this.form.companyId > 0) {
          //   this.form.dataAll = undefined;
          //   this.form.dataCorporation = undefined;
          //   this.form.dataCompany = this.form.companyId;
          // }
          let params = {
            id: this.form.id,
            telPhone: this.form.telPhone,
            username: this.form.username,
            password: this.form.password,
            name: this.form.name,
            members: [this.form.members],
          };
          putObj(this.form.id, params).then((response) => {
            if (response.status == 200) {
              this.$notify({
                title: "成功",
                message: "编辑成功",
                type: "success",
                duration: 2000,
              });
            } else {
              this.$notify({
                title: "失败",
                message: response.message,
                type: "error",
                duration: 2000,
              });
            }
            this.dialogFormVisible = false;
            this.getList();
            this.form.password = undefined;
          });
        } else {
          return false;
        }
      });
    },
    /**
     * 所属片区改变事件
     * @param item
     */
    getProvinceRegions(item) {
      this.form.zoneId = item;
      this.form.companyId = undefined; //片区修改后所属公司联动
      this.baranchQuery.zoneId = item;
      if (this.baranchQuery.zoneId) {
        getAllBranchCompanyByZoneId(this.baranchQuery).then((response) => {
          this.allBranchCompany = response.data;
          if (this.editCompanyId) {
            this.form.companyId = this.editCompanyId;
            this.editCompanyId = undefined;
          }
        });
      }
    },
    resetTemp() {
      this.editCompanyId = undefined;
      this.form = {
        username: undefined,
        name: undefined,
        status: 1,
        state2: "",
        telPhone: "",
        password: undefined,
        passwordEdit: undefined,
        members: undefined,
      };
    },
  },
};
</script>