<template>
  <div class="app-container">
    <!-- 筛选条件 -->
    <div>
      <Collapse :screen-form="searchForm">
        <template #right_btn>
          <el-button size="mini" @click="clearFn">清空</el-button>
          <el-button size="mini" type="primary" @click="searchFn">搜索</el-button>
        </template>
        <template #search>
          <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-row>
          </el-form>
        </template>
      </Collapse>
    </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="downLoadFns">导出</el-button>
        <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="110" 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="k3OrgNumber" min-width="200" show-overflow-tooltip>
            <template slot-scope="scope">
              <CopyButton :copyText="scope.row.k3OrgNumber" />
              <span>{{ scope.row.k3OrgNumber }}</span>
            </template>
          </el-table-column>
          <el-table-column align="left" label="金蝶部门名称" prop="k3OrgName" min-width="200" show-overflow-tooltip>
          </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="pageSize"
          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="customerNumber">
          <el-input disabled v-model="addForm.customerNumber"></el-input>
          <!-- <template slot-scope="scope">
            {{ scope.row }}
          </template> -->
        </el-form-item>
        <el-form-item label="金蝶部门编号" prop="k3OrgNumber">
          <!--          <el-input v-model="addForm.k3OrgNumber"></el-input>-->
          <el-select class="selectStyle" v-model="addForm.k3OrgNumber" placeholder="请选择" filterable>
            <el-option
              v-for="item in k3DepartmentList"
              :key="item.number"
              :label="item.name + '（' + item.number + '）'"
              :value="item.number"
            >
            </el-option>
          </el-select>
        </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,
  getK3DepartmentList
} 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: '',
        k3OrgNumber: '',
        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: ''
      },
      isCollapse: true,
      dataList: [], // 列表数据
      listLoading: false, // 列表加载loading
      dealerList: [],
      // selectList: [],
      walletList: [], //产品大类列表
      // oneList: [], //一级区域数据
      // twoList: [], //二级区域数据
      // threeList: [], //三级区域数据
      userList: [], //业务员
      ids: [],
      rowID: null, //编辑ID
      k3DepartmentList: []
    }
  },
  async created() {
    this.getTree()
    // this.getAdminWebsit(1);
    this.getList()
    this.getK3DepartmentList()
    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)
      this.importFileList = []
      if (result.code == 200) {
        this.$message.success('导入成功')
        await this.getList()
      } else {
        this.$message.error(result.message)
      }
    },
    getK3DepartmentList() {
      getK3DepartmentList().then(res => {
        this.k3DepartmentList = res.data
      })
    },
    //下载模板
    downLoadFn() {
      downloadFiles('customer/pt/download')
    },
    //下载模板
    downLoadFns() {
      downloadFiles('customer/pt/export')
    },
    // //改变产品大类
    // 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.addForm.k3OrgNumber = res.data.k3OrgNumber
      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()

      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,
        k3OrgNumber: this.addForm.k3OrgNumber,
        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.k3OrgNumber = ''

      // 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()
      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.k3OrgNumber = ''
      // 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()
    },
    // 更改当前页
    handleCurrentChange(val) {
      this.currentPage = val
      this.getList()
    },
    //搜索功能
    searchFn() {
      this.currentPage = 1
      this.getList()
    },
    //重置
    clearFn() {
      this.$refs.searchForm.resetFields()
    },
    //获取列表数据
    async getList() {
      let params = {
        customerName: this.searchForm.customerName,
        pageNum: this.currentPage,
        pageSize: this.pageSize
      }
      const res = await getDealerStockList(params)
      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>
