<template>
  <div class="app-container">

    <!-- 搜索工作栏 -->
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
      <el-form-item :label="$t('关键字')" prop="key">
        <el-input v-model="queryParams.key" :placeholder="$t('请输入关键字查找')" clearable/>
      </el-form-item>
      <el-form-item :label="$t('运输方式')" prop="transportType">
        <dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="queryParams.transportType" formatter="number"
                       clearable/>
      </el-form-item>
      <el-form-item :label="$t('唛头')" prop="marks">
        <el-input v-model="queryParams.marks" :placeholder="$t('请输入关键字查找')" clearable/>
      </el-form-item>
      <el-form-item :label="$t('资源类型')" prop="customerType">
        <!-- <el-select clearable  v-model="queryParams.customerType" :placeholder="$t('请选择资源类型')" clearable size="small">
         <el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_ESOURCE_TYPE)"
                :key="dict.value" :label="dict.label" :value="dict.value"/>
         </el-select> -->
        <dict-selector :type="DICT_TYPE.CUSTOMER_ESOURCE_TYPE" v-model="queryParams.customerType"
                       :placeholder="$t('请选择资源类型')" clearable></dict-selector>
      </el-form-item>
      <!--      <el-form-item :label="$t('客户经理')" prop="customerService">
              <el-select clearable  v-model="queryParams.customerService" :placeholder="$t('请选择客户经理')" clearable size="small">
                <el-option v-for="dict in customerServiceList"
                           :key="dict.id" :label="dict.nickname" :value="dict.id"/>
              </el-select>
            </el-form-item> -->
      <!--     <el-form-item prop="customerService">
             <el-select clearable  v-model="queryParams.customerService"  clearable size="small">
               <el-option :label="$t('下单时间')" value="createTime"/>
               <el-option :label="$t('装柜时间')" value="ldBoxTime"/>
             </el-select>
           </el-form-item> -->
      <el-form-item prop="dateFilter">
        <el-date-picker v-model="dateFilter" type="datetimerange" range-separator="-"
                        :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')"
                        value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
        <!--        <el-date-picker v-model="queryParams.beginStartTime" :placeholder="$t('请选择开始时间')" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>-->
      </el-form-item>
      <!--      <el-form-item :label="$t('结束时间')" prop="endStartTime">-->
      <!--        <el-date-picker v-model="queryParams.endStartTime" :placeholder="$t('请选择结束时间')" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>-->
      <!--      </el-form-item>-->
      <el-form-item>
        <el-form-item :label="$t('报价单号')" prop="key">
          <el-input v-model="queryParams.number" :placeholder="$t('请输入报价单号')" clearable/>
        </el-form-item>
        <el-form-item :label="$t('客户名称')" prop="key">
          <el-input v-model="queryParams.name" :placeholder="$t('请输入客户名称')" clearable/>
        </el-form-item>
        <el-form-item :label="$t('联系方式')" prop="key">
          <el-input v-model="queryParams.phoneNew" :placeholder="$t('请输入联系方式')" clearable/>
        </el-form-item>
        <el-form-item :label="$t('客户经理')" prop="userId">
          <el-select clearable v-model="queryParams.userId" :placeholder="$t('请选择客户经理')" clearable size="small">
            <el-option v-for="dict in customerServiceList"
                       :key="dict.id" :label="dict.nickname" :value="dict.id"/>
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('始发仓')" prop="startWarehouseId">
          <el-select v-model="queryParams.startWarehouseId" :placeholder="$t('请选择始发仓')" clearable>
            <el-option v-for="item in exportWarehouseList" :label="$l(item, 'title')" :value="item.id"
                       :key="item.id"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('目的仓')" prop="destWarehouseIdArr">
          <el-select :multiple="true" v-model="queryParams.destWarehouseIdArr" multiple
                     :placeholder="$t('请选择目的仓')" clearable>
            <el-option v-for="item in importWarehouseList" :label="$l(item, 'title')" :value="item.id"
                       :key="item.id"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="业绩类型">
          <el-select clearable v-model="queryParams.achieveType">
            <el-option :value="1" label="新客户"></el-option>
            <el-option :value="0" label="旧客户"></el-option>
          </el-select>
        </el-form-item>
        <el-button type="primary" icon="el-icon-search" @click="handleQuery">{{ $t('搜索') }}</el-button>
        <el-button type="primary" icon="el-icon-search" @click="resetQuery">{{ $t('重置') }}</el-button>
        <!--        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
                          >{{$t('导出')}}</el-button> -->
      </el-form-item>
    </el-form>
    <total_num :total-data="totalData"></total_num>
    <!-- 列表 -->
    <el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange">
      <!-- <el-table-column :label="$t('序号')" align="center" type="index"></el-table-column> -->
      <el-table-column
          type="selection"
          width="55">
      </el-table-column>
      <el-table-column :label="$t('资源类型')" align="center">
        <template slot-scope="scope">
          <dict-tag :type="DICT_TYPE.CUSTOMER_ESOURCE_TYPE" :value="scope.row.customerType"/>
        </template>
      </el-table-column>
      <el-table-column :label="$t('业绩类型')" align="center" prop="achieveType"/>
      <el-table-column :label="$t('报价单号')" align="center" width="180">
        <template slot-scope="scope">
          <span>{{ scope.row.number }}</span>
        </template>
      </el-table-column>
      <!--      <el-table-column :label="$t('报价结果')" align="center">
              <template slot-scope="scope">
                <dict-tag :type="DICT_TYPE.ECW_OFFER_STATUS" :value="scope.row.offerStatus"/>
              </template>
            </el-table-column> -->
      <el-table-column :label="$t('订单号')" align="center" prop="orderNo"/>
      <el-table-column :label="$t('客户名称')" align="center" prop="name"/>
      <el-table-column :label="$t('联系方式')" align="center" prop="phoneNew"/>
      <el-table-column :label="$t('唛头')" align="center" prop="marks"/>
      <el-table-column :label="$t('订单状态')" align="center" prop="statusMsg"/>
      <el-table-column :label="$t('是否控货')" align="center" prop="isCargoControl">
        <template slot-scope="scope">
          {{ scope.row.isCargoControl ? $t('是') : $t('否') }}
        </template>
      </el-table-column>
      <el-table-column :label="$t('重量')" align="center" prop="completeWeight"/>
      <el-table-column :label="$t('方数')" align="center" prop="completeVolume"/>
      <el-table-column :label="$t('下单时间')" align="center" prop="createTime"/>
      <el-table-column :label="$t('业绩创建时间')" align="center" prop="ldBoxTime"/>
      <el-table-column :label="$t('客户经理')" align="center" prop="userId" :formatter="customerServiceFn">
      </el-table-column>
    </el-table>
    <!-- 分页组件 -->
    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
                @pagination="getList"/>
  </div>
</template>

<script>
import {
  createDeptTarget,
  updateDeptTarget,
  deleteDeptTarget,
  getDeptTarget,
  getDeptTargetPage,
  exportDeptTargetExcel,
  getCreateInitData,
  getPersonTargetPage,
  myAchievementByPage
} from "@/api/ecw/deptTarget";
import {listSimpleDepts} from "@/api/system/dept";
import {getChannelList} from '@/api/ecw/channel';
import dayjs from "dayjs";
import {listServiceUser} from "@/api/system/user";
import {getWarehouseList} from '@/api/ecw/warehouse'
import Total_num from "@/views/ecw/deptTarget/total_num.vue";

export default {
  name: "EcwDepttargetMyachievement",
  components: {Total_num},
  data() {
    return {
      // 遮罩层
      loading: true,
      // 导出遮罩层
      exportLoading: false,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      tableTotal: 0,
      // 部门业绩目标设置列表
      list: [],
      tableList: [],
      // 弹出层标题
      title: "",
      dateFilter: [],
      detail: {
        deptName: null,
        targetType: null,
        cubeNum: null,
        shippingChannel: null,
        transportType: null,
      },
      // 是否显示弹出层
      open: false,
      tableOpen: false,
      dateRangeCreateTime: [],
      dateRangeStartTime: [],
      dateRangeEndTime: [],
      deptData: [],
      deptArr: [],
      channelList: [],
      monthList: [],
      quarterList: [],
      yearList: [],
      targetPeriod: [],
      // 查询参数
      queryParams: {
        pageNo: 1,
        pageSize: 10,
        beginStartTime: null,
        transportType: null,
        shippingChannel: null,
        endStartTime: null,
      },
      tableQueryParams: {
        pageNo: 1,
        pageSize: 10,
        id: null,
      },
      // 表单参数
      form: {},
      customerServiceList: [],
      // 表单校验
      rules: {
        deptId: [{required: true, message: this.$t("部门ID不能为空"), trigger: "blur"}],
        targetType: [{required: true, message: this.$t("目标类型不能为空"), trigger: "change"}],
        cubeNum: [{required: true, message: this.$t("立方数不能为空"), trigger: "blur"}],
      },
      totalData: {
        companyWeight: 0,
        companyVolume: 0,
        companyNum: 0,
        developWeight: 0,
        developVolume: 0,
        developNum: 0,
        sumWeight: 0,
        sumVolume: 0,
        sumNum: 0,
      },
      myAchievementData: {},
      warehouseList: []
    };
  },
  computed: {
    getShipChannelName() {
      return shippingChannelId => {
        for (let index in this.channelList) {
          let channelItem = this.channelList[index];
          if (channelItem.channelId == shippingChannelId) {
            return this.$l(channelItem, 'name');
          }
        }
        return '/'
      }
    },
    exportWarehouseList() {
      /* tradeType 1 进口,2出口,3进出口 */
      return this.warehouseList.filter(item => item.tradeType == 2 || item.tradeType == 3)
    },
    importWarehouseList() {
      return this.warehouseList.filter(item => item.tradeType == 1 || item.tradeType == 3)
    },
  },
  activated() {
    this.getChannelList();
    this.getList();
  },
  created() {
    this.getChannelList();
    this.getList();
    listServiceUser().then(r => {
      this.customerServiceList = r.data;
    })
    getWarehouseList().then(res => {
      this.warehouseList = res.data
    })
  },
  methods: {
    getChannelList() {
      getChannelList().then(res => this.channelList = res.data)
    },
    dateFormat(val) {
      return dayjs(val).format("YYYY-MM-DD");
    },
    changeList(val) {
      if (val === 1) {
        this.form.targetPeriodName = undefined;
        this.targetPeriod = this.monthList;
      } else if (val === 2) {
        this.form.targetPeriodName = undefined;
        this.targetPeriod = this.quarterList;
      } else {
        this.form.targetPeriodName = undefined;
        this.targetPeriod = this.yearList;
      }
    },
    setTime(item) {
      this.targetPeriod.forEach((i, index) => {
        if (i.name === item) {
          this.form.startTime = i.startDate;
          this.form.endTime = i.endDate;
        }
      })
    },
    customerServiceFn(val) {
      if (this.customerServiceList.length > 0) {
        let index = this.customerServiceList.findIndex(item => item.id === val.userId);
        return index !== -1 ? this.customerServiceList[index]?.nickname : ''
      } else {
        return ''
      }
    },
    /** 查询列表 */
    getList() {
      this.loading = true;
      const params = {...this.queryParams}
      if (params.destWarehouseIdArr?.length) {
        params.destWarehouseIds = params.destWarehouseIdArr.join(',')
      }
      // 执行查询
      myAchievementByPage(params).then(response => {
        this.list = response.data.myAchievementDtos.list;
        this.total = response.data.myAchievementDtos.total;
        this.myAchievementData = response.data
        this.totalData.sumWeight = this.myAchievementData.totalWeight
        this.totalData.sumVolume = this.myAchievementData.totalVolume
        this.totalData.sumNum = this.myAchievementData.totalNum
        this.totalData.companyWeight = this.myAchievementData.companyTotalWeight
        this.totalData.companyVolume = this.myAchievementData.companyTotalVolume
        this.totalData.companyNum = this.myAchievementData.companyTotalNum
        this.totalData.developWeight = this.myAchievementData.devTotalWeight
        this.totalData.developVolume = this.myAchievementData.devTotalVolume
        this.totalData.developNum = this.myAchievementData.devTotalNum
        this.$set(this.totalData, 'newTotalNum', this.myAchievementData.newTotalNum)
        this.$set(this.totalData, 'newTotalVolume', this.myAchievementData.newTotalVolume)
        this.$set(this.totalData, 'newTotalWeight', this.myAchievementData.newTotalWeight)
        this.$set(this.totalData, 'oldTotalNum', this.myAchievementData.oldTotalNum)
        this.$set(this.totalData, 'oldTotalVolume', this.myAchievementData.oldTotalVolume)
        this.$set(this.totalData, 'oldTotalWeight', this.myAchievementData.oldTotalWeight)
        this.loading = false;
      });
    },
    /** 取消按钮 */
    cancel() {
      this.open = false;
      this.reset();
    },
    /** 表单重置 */
    reset() {
      this.form = {
        id: undefined,
        deptId: undefined,
        targetType: undefined,
        targetPeriodName: undefined,
        startTime: undefined,
        endTime: undefined,
        transportType: undefined,
        shippingChannel: undefined,
        cubeNum: undefined,
      };
      this.resetForm("form");
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.pageNo = 1;
      this.queryParams.beginStartTime = this.dateFilter[0];
      this.queryParams.endStartTime = this.dateFilter[1];

      this.getList();
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.queryParams = {page: 1,pageSize:10}
      // this.dateFilter = []
      // this.dateRangeCreateTime = [];
      // this.dateRangeStartTime = [];
      // this.dateRangeEndTime = [];
      // this.resetForm("queryForm");
      // this.handleQuery();
      this.getList()
    },
    /** 新增按钮操作 */
    handleAdd() {
      this.targetPeriod = this.monthList;
      this.reset();
      this.open = true;
      this.title = this.$t("添加部门业绩目标设置");
    },
    /** 查看人员目标情况 */
    handleView(row) {
      this.detail = row;
      this.tableQueryParams.id = row.id;
      this.getTableList();
      this.tableOpen = true;
    },
    getTableList() {
      getPersonTargetPage(this.tableQueryParams).then(res => {
        this.tableList = res.data.list;
        this.tableTotal = res.data.total;
      });
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      this.reset();
      const id = row.id;
      getDeptTarget(id).then(response => {
        this.form = response.data;
        if (response.data.targetType === 1) {
          this.targetPeriod = this.monthList;
        } else if (response.data.targetType === 2) {
          this.targetPeriod = this.quarterList;
        } else {
          this.targetPeriod = this.yearList;
        }
        this.open = true;
        this.title = this.$t("修改部门业绩目标设置");
      });
    },
    /** 提交按钮 */
    submitForm() {
      this.$refs["form"].validate(valid => {
        if (!valid) {
          return;
        }
        // 修改的提交
        if (this.form.id != null) {
          updateDeptTarget(this.form).then(response => {
            this.$modal.msgSuccess(this.$t("修改成功"));
            this.open = false;
            this.getList();
          });
          return;
        }
        // 添加的提交
        createDeptTarget(this.form).then(response => {
          this.$modal.msgSuccess(this.$t("新增成功"));
          this.open = false;
          this.getList();
        });
      });
    },
    /** 删除按钮操作 */
    handleDelete(row) {
      const id = row.id;
      this.$modal.confirm(this.$t('是否确认删除部门业绩目标设置编号为{id}的数据项?', {id})).then(function () {
        return deleteDeptTarget(id);
      }).then(() => {
        this.getList();
        this.$modal.msgSuccess(this.$t("删除成功"));
      }).catch(() => {
      });
    },
    handleSelectionChange(val) {
      if (val && val.length > 0) {
        var data = {
          companyWeight: 0,
          companyVolume: 0,
          companyNum: 0,
          developWeight: 0,
          developVolume: 0,
          developNum: 0,
          sumWeight: 0,
          sumVolume: 0,
          sumNum: 0,
        }
        val.forEach(item => {
          if (item.customerType == 1) {
            data.developWeight += item.completeWeight
            data.developVolume += item.completeVolume
            data.developNum += item.sumNum
          } else {
            data.companyWeight += item.completeWeight
            data.companyVolume += item.completeVolume
            data.companyNum += item.sumNum
          }
          data.sumWeight += item.completeWeight
          data.sumVolume += item.completeVolume
          data.sumNum += item.sumNum
        })
        data.developVolume = data.developVolume.toFixed(2);
        data.companyVolume = data.companyVolume.toFixed(2);
        data.sumVolume = data.sumVolume.toFixed(2);
        this.$set(this, 'totalData', data)
      } else {
        this.totalData.sumWeight = this.myAchievementData.totalWeight
        this.totalData.sumVolume = this.myAchievementData.totalVolume
        this.totalData.sumNum = this.myAchievementData.totalNum
        this.totalData.companyWeight = this.myAchievementData.companyTotalWeight
        this.totalData.companyVolume = this.myAchievementData.companyTotalVolume
        this.totalData.companyNum = this.myAchievementData.companyTotalNum
        this.totalData.developWeight = this.myAchievementData.devTotalWeight
        this.totalData.developVolume = this.myAchievementData.devTotalVolume
        this.totalData.developNum = this.myAchievementData.devTotalNum
      }
    },
    /** 导出按钮操作 */
    handleExport() {
      // 处理查询参数
      let params = {...this.queryParams};
      params.pageNo = undefined;
      params.pageSize = undefined;
      this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
      this.addBeginAndEndTime(params, this.dateRangeStartTime, 'startTime');
      this.addBeginAndEndTime(params, this.dateRangeEndTime, 'endTime');
      // 执行导出
      this.$modal.confirm(this.$t('是否确认导出所有部门业绩目标设置数据项?')).then(() => {
        this.exportLoading = true;
        return exportDeptTargetExcel(params);
      }).then(response => {
        this.$download.excel(response, `${this.$t('我的业绩')}.xls`);

        this.exportLoading = false;
      }).catch(() => {
      });
    }
  }
};
</script>


<style scoped>
.total_num {
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 20px 0;
  font-size: 15px;
}

.total_num span {
  margin: 0 8px;
}
</style>