<template>
  <div class="app-container">
    <!-- 筛选条件 -->
    <div>
      <el-form ref="searchForm" :model="searchForm" label-width="100px" size="mini" label-position="left">
        <el-row :gutter="20">
          <el-col :xs="24" :sm="12" :lg="6">
            <el-form-item label="经销商名称" prop="customerName">
              <el-input v-model="searchForm.customerName" placeholder="请输入经销商名称"></el-input>
            </el-form-item>
          </el-col>

          <el-col :xs="24" :sm="12" :lg="18">
            <el-form-item label="" class="fr">
              <el-button size="mini" @click="clearFn">清空</el-button>
              <el-button size="mini" type="primary" @click="searchFn">搜索</el-button>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
    </div>

    <div class="btn-group clearfix">
      <div class="fl">
        <el-button v-if="$checkBtnRole('add', $route.meta.roles)" type="primary" size="mini" @click="addFn" class="add-right" icon="el-icon-plus">新增</el-button>
        <el-popconfirm v-if="$checkBtnRole('del', $route.meta.roles)" @onConfirm="deleFn" title="这是一段内容确定删除吗？">
          <el-button :disabled="ids.length < 1" type="danger" size="mini" class="textColor" icon="el-icon-minus" slot="reference">批量删除</el-button>
        </el-popconfirm>
      </div>
      <div class="fr">
        <el-button type="primary" size="mini" @click="downLoadFn">下载模板</el-button>
        <el-upload class="import-btn" action="" :http-request="handleImport" :file-list="importFileList" :show-file-list="false">
          <el-button type="primary" size="mini">导入</el-button>
        </el-upload>
      </div>
    </div>

    <div class="mymain-container">
      <!-- 列表 -->
      <div class="table">
        <el-table v-loading="listLoading" :data="dataList" @select="hanleSelect" @select-all="hanleSelect" element-loading-text="Loading" border fit highlight-current-row stripe>
          <el-table-column type="selection" align="center" min-width="51"></el-table-column>
          <el-table-column align="left" label="经销商编码" prop="customerNumber" min-width="100" show-overflow-tooltip>
            <template slot-scope="scope">
              <CopyButton :copyText="scope.row.customerNumber" />
              <span>{{scope.row.customerNumber}}</span>
            </template>
          </el-table-column>
          <el-table-column align="left" label="经销商名称" prop="customerName" min-width="260" show-overflow-tooltip>
            <template slot-scope="scope">
              <CopyButton :copyText="scope.row.customerName" />
              <span>{{scope.row.customerName}}</span>
            </template>
          </el-table-column>
          <el-table-column align="left" label="钱包名称" prop="customerWalletName" min-width="200" show-overflow-tooltip></el-table-column>
          <el-table-column align="left" label="业务员" prop="serviceName" min-width="160" show-overflow-tooltip></el-table-column>
          <el-table-column align="left" label="创建人" prop="createBy" min-width="180" show-overflow-tooltip></el-table-column>
          <el-table-column align="left" label="创建时间" prop="createTime" min-width="160" show-overflow-tooltip></el-table-column>
          <el-table-column align="left" label="更新人" prop="updateBy" min-width="180" show-overflow-tooltip></el-table-column>
          <el-table-column align="left" label="更新时间" prop="updateTime" min-width="160" show-overflow-tooltip></el-table-column>
          <el-table-column align="center" label="操作" prop="caozuo" min-width="160" show-overflow-tooltip fixed="right">
            <template slot-scope="scope">
              <el-button type="text" class="textColor" v-if="$checkBtnRole('edit', $route.meta.roles)" @click="editFn(scope.row.id)">编辑</el-button>
              <el-popconfirm @onConfirm="deleFn(scope.row.id)" v-if="$checkBtnRole('del', $route.meta.roles)" title="这是一段内容确定删除吗？">
                <el-button type="text" class="textColor" slot="reference">删除</el-button>
              </el-popconfirm>
            </template>
          </el-table-column>
        </el-table>
      </div>
      <!-- 分页 -->
      <div class="fr">
        <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[10, 20, 30, 50]" :page-size="10" layout="total, sizes, prev, pager, next, jumper" :total="listTotal">
        </el-pagination>
      </div>
    </div>

    <!-- 弹窗 -->
    <el-dialog :title="title" :visible.sync="dialogForm" width="30%" :show-close="false" :close-on-click-modal="false">
      <el-form ref="addForm" :model="addForm" :rules="rules" label-width="100px" label-position="right">
        <el-form-item label="经销商名称" prop="customerId">
          <el-select filterable class="selectStyle" v-model="addForm.customerId" placeholder="请选择" @change="changeFn">
            <el-option v-for="item in dealerList" :key="item.id" :label="item.name" :value="item.id">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="经销商编码" prop="">
          <el-input disabled v-model="addForm.customerNumber"></el-input>
          <!-- <template slot-scope="scope">
            {{ scope.row }}
          </template> -->
        </el-form-item>
        <el-form-item label="钱包" prop="customerWalletId">
          <el-select class="selectStyle" v-model="addForm.customerWalletId" placeholder="请选择" filterable>
            <el-option v-for="item in walletList" :key="item.customerWalletId" :label="item.customerWalletName" :value="item.customerWalletId">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="区域" prop="region">
          <el-cascader ref="locationCascader" v-model="addForm.region" class="selectStyle" :options="options" :props="props" clearable></el-cascader>
        </el-form-item>
        <!-- <el-form-item label="一级区域" prop="oneParentId">
          <el-select
            class="selectStyle"
            v-model="addForm.oneParentId"
            placeholder="请选择"
            filterable
            @change="changeOneFn"
          >
            <el-option
              v-for="item in oneList"
              :key="item.adminWebsitId"
              :label="item.name"
              :value="item.adminWebsitId"
            >
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="二级区域" prop="">
          <el-select
            filterable
            class="selectStyle"
            v-model="addForm.twoParentId"
            placeholder="请选择"
            @change="changeTwoFn"
          >
            <el-option
              v-for="item in twoList"
              :key="item.adminWebsitId"
              :label="item.name"
              :value="item.adminWebsitId"
            >
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="三级区域" prop=""
          ><el-select
            class="selectStyle"
            v-model="addForm.threeParentId"
            placeholder="请选择"
            filterable
            @change="changeThreeFn"
          >
            <el-option
              v-for="item in threeList"
              :key="item.adminWebsitId"
              :label="item.name"
              :value="item.adminWebsitId"
            >
            </el-option>
          </el-select>
        </el-form-item> -->
        <el-form-item label="对应业务员" prop="serviceId">
          <el-select class="selectStyle" v-model="addForm.serviceId" placeholder="请选择" filterable>
            <el-option v-for="(item, i) in userList" :key="i" :label="item.nickName" :value="item.adminUserId">
            </el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="cancelFn">取 消</el-button>
        <el-button type="primary" @click="addDataListFn">确 定</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
import {
  getDealerStockList,
  getDealerStockAdd,
  deleDealerStockList,
  getDictionaries,
  getProductCategoryList,
  getAdminWebsitByparent,
  getAdminUserList,
  getCustomerPtDetail,
  getCustomerPtUpdate,
  getWalletCustomerList,
} from "@/api/basic_data/dealer";
import { getDealerList } from "@/api/basic_data/dealer";
import { getDepartmentList } from "@/api/setting";
import { downloadFiles, handleImport } from "@/utils/util";

export default {
  data() {
    return {
      props: {
        checkStrictly: true,
        value: "adminWebsitId",
        label: "name",

        // expandTrigger: "hover",
        // lazy: true,
        // lazyLoad(node, resolve) {
        //   console.log(node);
        //   const { value } = node;
        //   setTimeout(async () => {
        //     let res = await getAdminWebsitByparent({
        //       parentId: value,
        //     });
        //     let aaa = res.data.map((v) => {
        //       return { value: v.adminWebsitId, label: v.name };
        //     });

        //     resolve(aaa);
        //   }, 0);
        // },
      },
      options: [],
      importFileList: [],
      isDisabled: true,
      title: "",
      dialogForm: false,
      addForm: {
        customerId: "",
        customerName: "",
        customerNumber: "",
        region: [],
        // oneParentId: "",
        // twoParentId: "",
        // threeParentId: "",
        serviceId: "",
        customerWalletId: "",
      },
      mainId: null,
      rules: {
        customerId: [
          { required: true, message: "请选择经销商名称", trigger: "change" },
        ],
        customerWalletId: [
          { required: true, message: "请选择经销商钱包", trigger: "change" },
        ],
        region: [{ required: true, message: "请选择区域", trigger: "change" }],
        // oneParentId: [
        //   { required: true, message: "请选择一级区域", trigger: "blur" },
        // ],
        // twoParentId: [
        //   { required: true, message: "请选择二级区域", trigger: "blur" },
        // ],
        // threeParentId: [
        //   { required: true, message: "请选择三级区域", trigger: "blur" },
        // ],
        serviceId: [
          { required: true, message: "请选择业务员", trigger: "change" },
        ],
      },

      currentPage: 1, // 当前页码
      pageSize: 10, // 每页数量
      listTotal: 0, // 列表总数

      searchForm: {
        customerName: "",
      },
      dataList: [], // 列表数据
      listLoading: false, // 列表加载loading
      dealerList: [],
      // selectList: [],
      walletList: [], //产品大类列表
      // oneList: [], //一级区域数据
      // twoList: [], //二级区域数据
      // threeList: [], //三级区域数据
      userList: [], //业务员
      ids: [],
      rowID: null, //编辑ID
    };
  },
  async created() {
    this.getTree();
    // this.getAdminWebsit(1);
    this.getList({ pageNum: 1, pageSize: 10 });
    this.getDealerDataList({ pageNum: 1, pageSize: -1 });
    this.getUserList(1);
    // this.getSelectList({ sysDictEnum: "PRODUCT_TYPE" });
  },
  computed: {},
  watch: {
    "addForm.region": function (newValue) {
      // console.log(newValue, 888);
      if (newValue) {
        this.getUserList(newValue[newValue.length - 1]);
      }
    },
    "addForm.customerId": async function (newValue) {
      if (newValue) {
        // this.addForm.customerWalletId = "";
        const res = this.dealerList.filter((i) => i.id == newValue);
        this.addForm.customerName = res[0].name;
        this.addForm.customerNumber = res[0].number;
        let res2 = await getWalletCustomerList({
          customerId: newValue,
          type: "COMMONLY",
        });
        this.walletList = res2.data;
      }
    },
    // "addForm.oneParentId": async function (newValue) {
    //   if (newValue) {
    //     let res = await getAdminWebsitByparent({
    //       parentId: newValue,
    //       // mainId: this.mainId,
    //     });
    //     this.twoList = res.data;
    //   }
    // },
    // "addForm.twoParentId": async function (newValue) {
    //   if (newValue) {
    //     let res = await getAdminWebsitByparent({
    //       parentId: newValue,
    //       // mainId: this.mainId,
    //     });
    //     this.getUserList(newValue);
    //     this.threeList = res.data;
    //   }
    // },
    // "addForm.threeParentId": async function (newValue) {
    //   if (newValue) {
    //     this.getUserList(newValue);
    //   }
    // },
  },
  methods: {
    // 导入
    async handleImport(param) {
      const file = param.file;

      const formData = new FormData();
      formData.append("file", file);

      let result = await handleImport("/customer/pt/importData", formData);

      console.log(result);
      this.importFileList = [];
      if (result.code == 200) {
        this.$message.success("导入成功");
        await this.getList({
          customerName: this.searchForm.customerName,
          pageNum: 1,
          pageSize: 10,
        });
      } else {
        this.$message.error(result.message);
      }
    },
    //下载模板
    downLoadFn() {
      downloadFiles("/customer/pt/download");
    },

    // //改变产品大类
    // changeSelectFn(value) {
    //   // const res = this.categoryList.filter((v) => v.productCategoryId == value);
    //   // console.log(res);
    //   // this.mainId = res[0].productCategoryNumber;
    // },
    //编辑
    async changeFn(v) {
      this.addForm.customerWalletId = "";
    },
    // async changeOneFn(v) {
    //   this.addForm.twoParentId = "";
    //   this.addForm.threeParentId = "";
    //   this.addForm.serviceId = "";
    // },
    // async changeTwoFn(v) {
    //   this.addForm.threeParentId = "";
    //   this.addForm.serviceId = "";
    // },
    // async changeThreeFn(v) {
    //   this.addForm.serviceId = "";
    // },
    async editFn(id) {
      this.title = "经销商业务关系管理 ";
      this.rowID = id;
      let res = await getCustomerPtDetail({ id });
      // console.log(res);

      this.addForm.customerId = res.data.customerId;
      this.addForm.customerWalletId = res.data.customerWalletId;
      // this.addForm.oneParentId = res.data.adminWebsitId1;
      // this.addForm.twoParentId = res.data.adminWebsitId2;
      // this.addForm.threeParentId = res.data.adminWebsitId3;
      this.addForm.region = [
        res.data.adminWebsitId1,
        res.data.adminWebsitId2,
        res.data.adminWebsitId3,
      ];
      this.addForm.serviceId = res.data.serviceId;

      this.dialogForm = true;
    },
    //获取业务员数据
    async getUserList(v) {
      let res = await getAdminUserList({
        pageNum: 1,
        pageSize: -1,
        isCustomer: 0,
        adminWebsitId: v,
      });
      if (res.data.records.length == 0) {
        this.addForm.serviceId = "";
      }
      this.userList = res.data.records;
    },
    // 获取部门列表
    getTree() {
      getDepartmentList().then((res) => {
        // console.log(res, 8888);

        this.options = res.data[0].children;
      });
    },
    // //根据父级查询部门
    // async getAdminWebsit(data) {
    //   let res = await getAdminWebsitByparent({
    //     parentId: data,
    //     // mainId: this.mainId,
    //   });
    //   let arr = res.data.map((v) => {
    //     return {
    //       value: v.adminWebsitId,
    //       label: v.name,
    //     };
    //   });

    //   // this.options = arr;

    //   this.oneList = res.data;
    // },
    // //获取产品品类数据
    // async getCategoryList() {
    //   let res = await getProductCategoryList();
    //   console.log(res);
    //   this.categoryList = res.data;
    // },
    // 筛选部分数据或者单个
    hanleSelect(selection) {
      // this.ids = selection.map((k) => {
      //   return k.id;
      // });

      // console.log(selection);
      this.ids = selection.map((v) => v.id);
    },
    // //存货分类
    // async getSelectList(data) {
    //   const res = await getDictionaries(data);
    //   console.log(res);
    //   this.selectList = res.data;
    // },
    //删除
    async deleFn(id) {
      if (id) {
        let arr = [];
        arr.push(id);
        let res2 = arr.toString();
        await deleDealerStockList({ ids: res2 });
      } else {
        let res = this.ids.toString();
        await deleDealerStockList({ ids: res });
      }

      this.getList({ pageNum: 1, pageSize: 10 });

      this.$message.success("删除成功");
      this.ids = [];
    },
    async addFn() {
      this.title = "经销商业务关系管理";

      this.dialogForm = true;
    },
    async addDataListFn() {
      await this.$refs.addForm.validate();

      let data2 = this.walletList.filter((v) => {
        return v.customerWalletId == this.addForm.customerWalletId;
      });
      let data3 = this.userList.filter((v) => {
        return v.adminUserId == this.addForm.serviceId;
      });
      // console.log(data3);
      // console.log(data2, 22222);

      let value = {
        customerId: this.addForm.customerId,
        customerName: this.addForm.customerName,
        customerNumber: this.addForm.customerNumber,
        customerWalletId: this.addForm.customerWalletId,
        customerWalletName: data2[0].customerWalletName,

        serviceId: this.addForm.serviceId,
        serviceName: data3[0].nickName,
      };

      if (this.title == "经销商业务关系管理 ") {
        await getCustomerPtUpdate({ ...value, id: this.rowID });

        this.$message.success("编辑成功");
      } else {
        await getDealerStockAdd(value);
        this.$message.success("添加成功");
      }
      if (this.$refs.locationCascader) {
        this.$refs.locationCascader.$refs.panel.activePath = [];
        this.$refs.locationCascader.$refs.panel.calculateCheckedNodePaths();
      }
      this.addForm.customerId = "";
      this.addForm.customerNumber = "";
      this.addForm.customerName = "";
      this.addForm.customerWalletId = "";
      this.addForm.region = [];
      // this.addForm.oneParentId = "";
      // this.addForm.twoParentId = "";
      // this.addForm.threeParentId = "";
      this.addForm.serviceId = "";
      // this.userList = [];
      // this.twoList = [];
      // this.threeList = [];
      this.walletList = [];
      this.$nextTick(() => {
        this.$refs["addForm"].clearValidate();
      });
      this.getList({ pageNum: 1, pageSize: 10 });
      this.dialogForm = false;
    },
    //取消
    async cancelFn() {
      if (this.$refs.locationCascader) {
        this.$refs.locationCascader.$refs.panel.activePath = [];
        this.$refs.locationCascader.$refs.panel.calculateCheckedNodePaths();
      }

      this.addForm.customerId = "";
      this.addForm.customerNumber = "";
      this.addForm.customerWalletId = "";
      this.addForm.region = [];
      // this.addForm.oneParentId = "";
      // this.addForm.twoParentId = "";
      // this.addForm.threeParentId = "";
      this.addForm.serviceId = "";
      // this.userList = [];
      // this.twoList = [];
      // this.threeList = [];
      this.walletList = [];

      this.$nextTick(() => {
        this.$refs["addForm"].clearValidate();
      });
      this.dialogForm = false;
    },
    //获取经销商数据
    async getDealerDataList(data) {
      const res = await getDealerList(data);
      this.dealerList = res.data.records;
    },
    // 更改每页数量
    handleSizeChange(val) {
      this.pageSize = val;
      this.currentPage = 1;
      this.getList({
        pageNum: 1,
        pageSize: this.pageSize,
        customerName: this.searchForm.customerName,
      });
    },
    // 更改当前页
    handleCurrentChange(val) {
      this.currentPage = val;
      this.getList({
        pageNum: val,
        pageSize: 10,
        customerName: this.searchForm.customerName,
      });
    },
    //搜索功能
    async searchFn() {
      console.log(this.searchForm);
      await this.getList({
        customerName: this.searchForm.customerName,
        pageNum: 1,
        pageSize: 10,
      });
    },
    //重置
    clearFn() {
      console.log(this.$refs.searchForm);
      this.$refs.searchForm.resetFields();
    },
    //获取列表数据
    async getList(data) {
      const res = await getDealerStockList(data);

      this.dataList = res.data.records;
      this.listTotal = res.data.total;
    },
  },
};
</script>

<style lang="scss" scoped>
.add-right {
  margin-right: 10px;
}
.import-btn {
  margin-left: 10px;
  display: inline-block;
}
// ::v-deep .selectStyle .el-input--suffix {
//   width: 200%;
// }

// ::v-deep .el-input--suffix {
//   width: 300px;
// }
// ::v-deep .el-dialog__header {
//   background-color: #dddddd;
// }
// ::v-deep .dialog-footer {
//   display: flex;
//   justify-content: center;
// }

// .formWidth {
//   width: 70%;
//   margin-right: 20px;
// }
.selectStyle {
  width: 100%;
}
</style>
