index.vue 26.1 KB
Newer Older
lanbaoming's avatar
lanbaoming committed
1 2 3 4 5 6 7 8
<template>
  <div class="app-container">
    <el-form
      :model="queryParams"
      ref="queryForm"
      size="small"
      :inline="true"
      v-show="showSearch"
lanbaoming's avatar
lanbaoming committed
9
      label-width="120px"
lanbaoming's avatar
lanbaoming committed
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
    >
      <el-form-item label="客户" prop="name">
        <el-select
          v-model="queryParams.searchtype"
          clearable
          style="width: 100px"
        >
          <el-option
            v-for="dict in SearchTypeList"
            :key="dict.value"
            :label="dict.label"
            :value="dict.value"
          />
        </el-select>
        <el-input
          style="width: 200px"
          v-model="queryParams.name"
          placeholder="请输入客户姓名/编号"
          clearable
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="部门" v-show="showDept">
        <treeselect
          v-model="queryParams.deptid"
          :options="deptOptions"
          :show-count="true"
lanbaoming's avatar
lanbaoming committed
37
          :multiple="true"
lanbaoming's avatar
lanbaoming committed
38 39 40 41 42 43 44 45 46
          :placeholder="$t('请选择部门')"
          :normalizer="normalizer"
        />
      </el-form-item>
      <el-form-item
        label="客户经理"
        prop="salesmanid"
        v-show="showCustomsManage"
      >
lanbaoming's avatar
lanbaoming committed
47
        <el-select
lanbaoming's avatar
lanbaoming committed
48
          clearable
lanbaoming's avatar
lanbaoming committed
49
          :multiple="true"
lanbaoming's avatar
lanbaoming committed
50 51 52 53 54 55 56 57 58 59 60
          v-model="queryParams.salesmanid"
          :placeholder="$t('请选择客户经理')"
          size="small"
        >
          <el-option
            v-for="dict in customerServiceList"
            :key="dict.id"
            :label="dict.nickname"
            :value="dict.id"
          />
        </el-select>
lanbaoming's avatar
lanbaoming committed
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
      </el-form-item>

      <el-form-item label="首次成交" prop="delFlag">
        <el-select v-model="queryParams.first" clearable style="width: 200px">
          <el-option label="是" value="1"></el-option>
          <el-option label="否" value="0"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="客户业绩类型" prop="remark">
        <el-select
          v-model="queryParams.cusYjType"
          clearable
          style="width: 200px"
        >
          <el-option label="新客户" value="1"></el-option>
          <el-option label="老客户" value="0"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="客户来源" prop="remark">
        <el-select
          v-model="queryParams.source"
lanbaoming's avatar
lanbaoming committed
82
          :multiple="true"
lanbaoming's avatar
lanbaoming committed
83 84 85 86 87 88 89 90 91 92 93 94 95 96
          :placeholder="$t('请选择客户来源')"
        >
          <el-option
            v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_SOURCE)"
            :key="dict.value"
            :label="isChinese ? dict.label : dict.labelEn"
            :value="parseInt(dict.value)"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="客户角色" prop="customerrole">
        <el-select
          v-model="queryParams.customerrole"
          clearable
lanbaoming's avatar
lanbaoming committed
97
          :multiple="true"
lanbaoming's avatar
lanbaoming committed
98 99 100 101 102 103 104 105 106 107 108 109 110
          style="width: 200px"
        >
          <el-option
            v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_TYPE)"
            :key="dict.value"
            :label="isChinese ? dict.label : dict.labelEn"
            :value="dict.value"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="客户国家" prop="country">
        <el-select
          clearable
lanbaoming's avatar
lanbaoming committed
111
          :multiple="true"
lanbaoming's avatar
lanbaoming committed
112 113 114 115 116 117 118 119 120 121 122
          v-model="queryParams.country"
          :placeholder="$t('请选择国家')"
        >
          <el-option
            v-for="dict in countryList"
            :key="dict.id"
            :label="isChinese ? dict.nameZh : dict.nameEn"
            :value="parseInt(dict.id)"
          />
        </el-select>
      </el-form-item>
lanbaoming's avatar
lanbaoming committed
123
      <el-form-item label="总V值" prop="searchDataType1">
lanbaoming's avatar
lanbaoming committed
124 125 126
        <el-select
          v-model="queryParams.searchDataType1"
          clearable
lanbaoming's avatar
lanbaoming committed
127
          style="width: 130px"
lanbaoming's avatar
lanbaoming committed
128 129
        >
          <el-option
lanbaoming's avatar
lanbaoming committed
130
            v-for="dict in SearchDataTypeList"
lanbaoming's avatar
lanbaoming committed
131 132 133 134 135
            :key="dict.value"
            :label="dict.label"
            :value="dict.value"
          />
        </el-select>
lanbaoming's avatar
lanbaoming committed
136 137 138 139 140 141 142 143 144
        <el-input
          v-model="queryParams.searchData1"
          style="width: 130px"
          placeholder="请输入数值"
          clearable
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="海运拼柜" prop="searchDataType2">
lanbaoming's avatar
lanbaoming committed
145 146 147
        <el-select
          v-model="queryParams.searchDataType2"
          clearable
lanbaoming's avatar
lanbaoming committed
148
          style="width: 130px"
lanbaoming's avatar
lanbaoming committed
149 150 151 152 153 154 155 156 157
        >
          <el-option
            v-for="dict in SearchDataTypeList"
            :key="dict.value"
            :label="dict.label"
            :value="dict.value"
          />
        </el-select>
        <el-input
lanbaoming's avatar
lanbaoming committed
158 159
          v-model="queryParams.searchData2"
          style="width: 130px"
lanbaoming's avatar
lanbaoming committed
160 161 162 163 164
          placeholder="请输入数值"
          clearable
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
lanbaoming's avatar
lanbaoming committed
165
      <el-form-item label="专线空运" prop="searchDataType3">
lanbaoming's avatar
lanbaoming committed
166
        <el-select
lanbaoming's avatar
lanbaoming committed
167
          v-model="queryParams.searchDataType3"
lanbaoming's avatar
lanbaoming committed
168
          clearable
lanbaoming's avatar
lanbaoming committed
169
          style="width: 130px"
lanbaoming's avatar
lanbaoming committed
170
        >
lanbaoming's avatar
lanbaoming committed
171 172 173 174 175 176
          <el-option
            v-for="dict in SearchDataTypeList"
            :key="dict.value"
            :label="dict.label"
            :value="dict.value"
          />
lanbaoming's avatar
lanbaoming committed
177
        </el-select>
lanbaoming's avatar
lanbaoming committed
178 179 180 181 182 183 184 185 186
        <el-input
          v-model="queryParams.searchData3"
          style="width: 130px"
          placeholder="请输入数值"
          clearable
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="客户创建时间">
lanbaoming's avatar
lanbaoming committed
187 188 189
        <el-date-picker
          v-model="queryParams.sdate4"
          type="date"
lanbaoming's avatar
lanbaoming committed
190
          style="width: 130px"
lanbaoming's avatar
lanbaoming committed
191 192
          value-format="yyyy-MM-dd"
          clearable
lanbaoming's avatar
lanbaoming committed
193
          placeholder="起始日期"
lanbaoming's avatar
lanbaoming committed
194 195 196 197
        />
        <el-date-picker
          v-model="queryParams.edate4"
          type="date"
lanbaoming's avatar
lanbaoming committed
198
          style="width: 130px"
lanbaoming's avatar
lanbaoming committed
199 200
          value-format="yyyy-MM-dd"
          clearable
lanbaoming's avatar
lanbaoming committed
201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
          placeholder="截止日期"
        />
      </el-form-item>
      <el-form-item label="首次成交时间">
        <el-date-picker
          v-model="queryParams.sdate5"
          type="date"
          style="width: 130px"
          value-format="yyyy-MM-dd"
          clearable
          placeholder="起始日期"
        />
        <el-date-picker
          v-model="queryParams.edate5"
          type="date"
          style="width: 130px"
          value-format="yyyy-MM-dd"
          clearable
          placeholder="截止日期"
lanbaoming's avatar
lanbaoming committed
220 221 222
        />
      </el-form-item>
      <el-form-item label="业绩产生时间" prop="searchDateType">
lanbaoming's avatar
lanbaoming committed
223 224 225
        <el-date-picker
          v-model="queryParams.sdate"
          type="date"
lanbaoming's avatar
lanbaoming committed
226
          style="width: 130px"
lanbaoming's avatar
lanbaoming committed
227 228
          value-format="yyyy-MM-dd"
          clearable
lanbaoming's avatar
lanbaoming committed
229
          placeholder="起始日期"
lanbaoming's avatar
lanbaoming committed
230 231 232 233
        />
        <el-date-picker
          v-model="queryParams.edate"
          type="date"
lanbaoming's avatar
lanbaoming committed
234
          style="width: 130px"
lanbaoming's avatar
lanbaoming committed
235 236
          value-format="yyyy-MM-dd"
          clearable
lanbaoming's avatar
lanbaoming committed
237
          placeholder="截止日期"
lanbaoming's avatar
lanbaoming committed
238 239 240 241 242 243
        />
      </el-form-item>
      <el-form-item label="同比年份" prop="duibiYear">
        <el-date-picker
          v-model="queryParams.duibiYear"
          type="year"
lanbaoming's avatar
lanbaoming committed
244
          style="width: 130px"
lanbaoming's avatar
lanbaoming committed
245 246 247 248 249
          value-format="yyyy"
          placeholder="请选择同比年份"
        />
      </el-form-item>
      <el-form-item>
lanbaoming's avatar
lanbaoming committed
250 251
        <el-button type="primary" icon="el-icon-search" @click="handleQuery">
          {{ $t("查询") }}</el-button
lanbaoming's avatar
lanbaoming committed
252
        >
lanbaoming's avatar
lanbaoming committed
253 254 255
        <el-button icon="el-icon-refresh" @click="resetQuery"
          >{{ $t("重置") }}
        </el-button>
lanbaoming's avatar
lanbaoming committed
256 257 258 259 260 261 262
        <el-button
          type="warning"
          plain
          icon="el-icon-download"
          size="mini"
          @click="handleExport"
          :loading="exportLoading"
lanbaoming's avatar
lanbaoming committed
263
          v-show="false"
lanbaoming's avatar
lanbaoming committed
264 265
        >
          {{ $t("导出") }}</el-button
lanbaoming's avatar
lanbaoming committed
266
        >
lanbaoming's avatar
lanbaoming committed
267
        <el-button type="primary" size="mini" @click="test" v-show="false">
lanbaoming's avatar
lanbaoming committed
268 269
          测试
        </el-button>
lanbaoming's avatar
lanbaoming committed
270 271 272 273 274 275 276 277

        <el-button
          type="warning"
          plain
          icon="el-icon-download"
          size="mini"
          @click="handleExport2"
          :loading="exportLoading"
lanbaoming's avatar
lanbaoming committed
278
          v-show="objEcwReportPermission.exportdataq == 1"
lanbaoming's avatar
lanbaoming committed
279
        >
lanbaoming's avatar
lanbaoming committed
280
          {{ $t("导出") }}</el-button
lanbaoming's avatar
lanbaoming committed
281
        >
lanbaoming's avatar
lanbaoming committed
282 283
      </el-form-item>
    </el-form>
lanbaoming's avatar
lanbaoming committed
284
    <el-table v-loading="loading" :data="list" @sort-change="handleSort">
lanbaoming's avatar
lanbaoming committed
285 286 287 288 289 290 291 292 293 294 295 296 297
      <el-table-column label="排名" align="center" prop="px" />
      <el-table-column label="客户编号" align="center" prop="number">
        <template slot-scope="{ row }">
          <el-link
            type="primary"
            @click.native="$router.push('/customer/query/' + row.id)"
            >{{ row.number }}</el-link
          >
        </template>
      </el-table-column>
      <el-table-column label="客户姓名" align="center" prop="name" />
      <el-table-column label="客户经理" align="center" prop="salesman" />
      <el-table-column label="部门" align="center" prop="deptname" />
lanbaoming's avatar
lanbaoming committed
298 299 300 301 302 303
      <el-table-column
        label="总V值"
        align="center"
        prop="allsumvolume"
        sortable="allsumvolume"
      />
lanbaoming's avatar
lanbaoming committed
304 305 306 307 308 309
      <el-table-column
        label="总V值同比"
        align="center"
        prop="allsumvolumeTbShow"
      />

lanbaoming's avatar
lanbaoming committed
310 311 312 313 314 315
      <el-table-column
        label="海运拼柜"
        align="center"
        prop="sumvolumeV1"
        sortable="sumvolumeV1"
      />
lanbaoming's avatar
lanbaoming committed
316 317 318 319 320 321 322
      <el-table-column label="海运占比" align="center" prop="seaZb" />
      <el-table-column
        label="海运拼柜同比"
        align="center"
        prop="sumvolumeTbShow1"
      />

lanbaoming's avatar
lanbaoming committed
323 324 325 326 327 328
      <el-table-column
        label="专线空运"
        align="center"
        prop="sumweightV3"
        sortable="sumweightV3"
      />
lanbaoming's avatar
lanbaoming committed
329 330 331 332 333 334 335 336 337 338 339 340 341
      <el-table-column label="空运占比" align="center" prop="airZb" />
      <el-table-column
        label="专线空运同比"
        align="center"
        prop="sumweightTbShow3"
      />

      <el-table-column label="月均" align="center" prop="monthAvg" />
      <el-table-column label="月均同比" align="center" prop="monthAvgTbShow" />
      <el-table-column label="海运月均方数" align="center" prop="seaMonthAvg" />
      <el-table-column
        label="海运月均同比"
        align="center"
lanbaoming's avatar
lanbaoming committed
342
        prop="seaMonthAvgTb"
lanbaoming's avatar
lanbaoming committed
343 344 345 346 347
      />
      <el-table-column label="空运月均重量" align="center" prop="airMothAvg" />
      <el-table-column
        label="空运月均同比"
        align="center"
lanbaoming's avatar
lanbaoming committed
348
        prop="airMothAvgTb"
lanbaoming's avatar
lanbaoming committed
349 350 351 352 353 354 355
      />
      <el-table-column label="重货总V值" align="center" prop="weightSumV" />
      <el-table-column label="重货占比" align="center" prop="weithtSumZb" />
      <el-table-column label="泡货总V值" align="center" prop="phSumV" />
      <el-table-column label="泡货占比" align="center" prop="phSumZb" />
      <el-table-column label="控货总V值" align="center" prop="khSumV" />
      <el-table-column label="控货占比" align="center" prop="khSumZb" />
lanbaoming's avatar
lanbaoming committed
356
      <!--2024-05-06和张工确认这几个参数无取数逻辑,暂时隐藏-->
lanbaoming's avatar
lanbaoming committed
357
      <!--
lanbaoming's avatar
lanbaoming committed
358 359 360 361 362 363 364 365 366 367 368 369
      <el-table-column
        label="是否首次成交"
        v-show="false"
        align="center"
        prop="isFirst"
      />
      <el-table-column
        label="首次成交时间"
        v-show="false"
        align="center"
        prop="firstDate"
      >
lanbaoming's avatar
lanbaoming committed
370 371 372
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.firstDate) }}</span>
        </template>
lanbaoming's avatar
lanbaoming committed
373
      </el-table-column>-->
lanbaoming's avatar
lanbaoming committed
374
      <!--2024-05-06和张工确认这几个参数无取数逻辑,暂时隐藏-->
lanbaoming's avatar
lanbaoming committed
375 376 377 378 379
      <el-table-column label="提货率" align="center" prop="thL" />
      <el-table-column label="客户业绩类型" align="center" prop="cusYjType" />
      <el-table-column label="客户来源" align="center" prop="sourcename" />
      <el-table-column label="客户角色" align="center" prop="customerrole" />
      <el-table-column label="客户国家" align="center" prop="country" />
lanbaoming's avatar
lanbaoming committed
380
      <el-table-column
lanbaoming's avatar
lanbaoming committed
381
        label="客户创建时间"
lanbaoming's avatar
lanbaoming committed
382 383 384 385
        align="center"
        prop="createtime"
        width="200px"
      >
lanbaoming's avatar
lanbaoming committed
386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.createtime) }}</span>
        </template>
      </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 { getCountryListAll } from "@/api/ecw/country";
import UserSelector from "@/components/UserSelector";
lanbaoming's avatar
lanbaoming committed
405
import { listServiceUser2 } from "@/api/system/user";
lanbaoming's avatar
lanbaoming committed
406 407 408 409
import Treeselect from "@riophae/vue-treeselect";
//自定义目录数样式
import "@/assets/styles/vue-treeselect.css";
import { listSimpleDepts } from "@/api/system/dept";
lanbaoming's avatar
lanbaoming committed
410 411 412 413 414
import {
  getListPage,
  exportExcel,
  exportExcel2,
} from "@/api/report/customeranalysis";
lanbaoming's avatar
lanbaoming committed
415 416 417
import {
  getCurUserPermission,
  getDeptChild,
lanbaoming's avatar
lanbaoming committed
418
  listServiceUser,
lanbaoming's avatar
lanbaoming committed
419
} from "@/api/report/EcwReportPermission";
lanbaoming's avatar
lanbaoming committed
420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463
import { MessageBox } from "element-ui";

function currentTime2() {
  var date = new Date();
  var year = date.getFullYear();
  //月份从0~11,所以加一
  let month = date.getMonth() + 1;
  //如果格式是MM则需要此步骤,如果是M格式则此处注释掉
  if (month >= 1 && month <= 9) {
    month = "0" + month;
  }
  let day = date.getDay();
  let strDate = year + "-" + month + "-" + day;
  return strDate;
}

function formatDate2() {
  var date = new Date();
  const day = date.getDate().toString().padStart(2, "0");
  const month = (date.getMonth() + 1).toString().padStart(2, "0");
  // 月份是从0开始的
  const year = date.getFullYear();
  const hours = date.getHours().toString().padStart(2, "0");
  const minutes = date.getMinutes().toString().padStart(2, "0");
  const seconds = date.getSeconds().toString().padStart(2, "0");
  //`${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  return `${year}-${month}-${day}`;
}

function formatDate3() {
  var date = new Date();
  // 月份是从0开始的
  const year = date.getFullYear();
  return `${year}-01-01`;
}

function getLastYear() {
  //获取上一年份
  var date = new Date();
  date.setFullYear(date.getFullYear() - 1);
  let year = date.getFullYear();
  return year.toString();
}

lanbaoming's avatar
lanbaoming committed
464 465 466 467 468 469 470 471 472 473
//获取月份的最后一天 lanbm 2024-04-27 add
function getLastDay(sDate) {
  var date = new Date(sDate);
  var year = date.getFullYear();
  //月份从0开始计算,需要加1
  var month = date.getMonth() + 1;
  var lastDay = new Date(year, month, 0).getDate();
  return lastDay;
}

lanbaoming's avatar
lanbaoming committed
474
//2024-05-01合并
lanbaoming's avatar
lanbaoming committed
475
export default {
lanbaoming's avatar
lanbaoming committed
476
  name: "ReportCustomer_analysisIndex",
lanbaoming's avatar
lanbaoming committed
477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534
  components: {
    UserSelector,
    Treeselect,
  },
  data() {
    return {
      // 遮罩层
      loading: true,
      // 导出遮罩层
      exportLoading: false,
      // 显示搜索条件
      showSearch: true,
      showDept: true, //是否显示部门选择过滤条件
      showCustomsManage: true, //是否显示客户经理过滤条件
      deptOptions: undefined,
      // 总条数
      total: 0,
      // 测试列表
      list: [],
      countryList: [], //国家列表
      // 弹出层标题
      title: "",
      // 是否显示弹出层
      open: false,
      dateRangeCreateTime: [],
      SearchTypeList: [
        { value: "in", label: "包含" },
        { value: "notin", label: "不包含" },
        { value: "eq", label: "等于" },
        { value: "noeq", label: "不等于" },
      ],
      // 禁止选择超出当前日期
      pickerOptions: {
        disabledDate(time) {
          const _now = Date.now();
          return time.getTime() <= _now;
        },
      },
      SearchDataTypeList: [
        { value: "1", label: "大于等于" },
        { value: "2", label: "等于" },
        { value: "3", label: "小于等于" },
      ],
      // 查询参数
      queryParams: {
        pageNo: 1,
        pageSize: 10,
        searchtype: undefined,
        name: undefined, //客户姓名
        number: undefined, //客户编号
        salesmanid: undefined, //客户经理
        deptid: undefined, //部门
        country: undefined, //客户国家
        source: undefined, //客户来源
        customerrole: undefined, //客户角色
        first: undefined, //是否首次成交
        cusYjType: undefined, //客户业绩类型,新客户还是老客户
        searchDataType1: undefined, //查询数据类型
lanbaoming's avatar
lanbaoming committed
535 536 537 538 539
        searchData1: undefined, //总V值查询
        searchDataType2: undefined, //海运拼柜
        searchData2: undefined, //海运拼柜
        searchDataType3: undefined, //专线空运
        searchData3: undefined, //专线空运
lanbaoming's avatar
lanbaoming committed
540
        searchDataType4: undefined, //时间筛选
lanbaoming's avatar
lanbaoming committed
541
        searchDateType: "createdate", //日期查询类型
lanbaoming's avatar
lanbaoming committed
542
        sdate: formatDate3(), //开始日期
lanbaoming's avatar
lanbaoming committed
543 544
        edate: formatDate2(), //结束日期
        duibiYear: getLastYear(), //对比年份
lanbaoming's avatar
lanbaoming committed
545 546 547 548
        sdate4: undefined, //客户创建时间
        edate4: undefined, //客户创建时间
        sdate5: undefined, //首次成交时间
        edate5: undefined, //首次成交时间
lanbaoming's avatar
lanbaoming committed
549 550
        orderfield:null,//排序字段
        ordertype:null,//排序方式
lanbaoming's avatar
lanbaoming committed
551 552 553 554 555 556 557
      },
      // 表单参数
      form: {},
      // 表单校验
      rules: {},
      //报表权限信息
      objEcwReportPermission: {},
lanbaoming's avatar
lanbaoming committed
558 559
      DeptEx: { id: undefined, name: undefined, parentId: undefined },
      ParentPar: {},
lanbaoming's avatar
lanbaoming committed
560
      customerServiceList: [],
lanbaoming's avatar
lanbaoming committed
561 562 563 564 565 566
    };
  },
  created() {
    getCountryListAll().then((r) => {
      this.countryList = r.data;
    });
lanbaoming's avatar
lanbaoming committed
567 568 569 570

    listServiceUser2().then((r) => {
      this.customerServiceList = r.data;
    });
lanbaoming's avatar
lanbaoming committed
571 572 573 574 575
    this.doLoadData();
  },
  watch: {
    $route(to) {
      //lanbm 2024-05-06 解决重新进入参数不刷新的问题
lanbaoming's avatar
lanbaoming committed
576
      //this.$route.name == "客户分析" 用name做逻辑判断,有时候菜单名称会变化
lanbaoming's avatar
lanbaoming committed
577
      //"/report/customer_analysis"  调整为根据path做逻辑判断
lanbaoming's avatar
lanbaoming committed
578
      if (this.$route.path == "/report/customer_analysis") {
lanbaoming's avatar
lanbaoming committed
579
        this.doLoadData();
lanbaoming's avatar
lanbaoming committed
580
      }
lanbaoming's avatar
lanbaoming committed
581 582 583 584 585
    },
  },
  computed: {
    //这几个函数的执行顺序
    //created ------> computed ------> mounted ------> watch
lanbaoming's avatar
lanbaoming committed
586 587
  },
  methods: {
lanbaoming's avatar
lanbaoming committed
588 589 590 591 592 593 594
    handleSort(obj) {
      if (obj.order != null && obj.prop != null) {
        this.queryParams.orderfield=obj.prop;  //排序字段
        this.queryParams.ordertype=obj.order;   //排序方式
        this.getList();
      }
    },
lanbaoming's avatar
lanbaoming committed
595 596 597 598 599 600 601 602
    /** 查询列表 */
    getList() {
      this.loading = true;
      // 处理查询参数
      // 执行查询
      if (this.objEcwReportPermission.permissionFw == 1) {
        //只能看自己的,不能选择部门和客户经理
        this.queryParams.salesmanid = this.objEcwReportPermission.userId;
lanbaoming's avatar
lanbaoming committed
603 604 605 606 607
      } else if (this.objEcwReportPermission.permissionFw == 2) {
        //部门权限
        this.queryParams.deptid = parseInt(this.objEcwReportPermission.deptId);
      } else if (this.objEcwReportPermission.permissionFw == 3) {
        //全公司权限
lanbaoming's avatar
lanbaoming committed
608 609 610 611 612 613 614
      }
      getListPage(this.queryParams).then((response) => {
        this.list = response.data.list;
        this.total = response.data.total;
        this.loading = false;
      });
    },
lanbaoming's avatar
lanbaoming committed
615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657
    doLoadData() {
      //获取当前用户报表权限
      getCurUserPermission().then((response) => {
        //复制对象
        Object.assign(this.objEcwReportPermission, response.data);
        //this.objEcwReportPermission = response.data;
        if (this.objEcwReportPermission.permissionFw == 1) {
          //只能看自己的,不能选择部门和客户经理
          this.showCustomsManage = false;
          this.showDept = false;
        }
        //获取页面传参
        let sSalesmanid = this.$route.query.salesmanid;
        let sDeptid = this.$route.query.deptid;
        let s = this.$route.query.sDate;
        let e = this.$route.query.eDate;
        let bd = this.$route.query.duibiYear;
        //客户编号
        let number = this.$route.query.number;
        if (sSalesmanid != undefined && sSalesmanid != null) {
          this.queryParams.salesmanid = parseInt(sSalesmanid);
        }
        if (sDeptid != undefined && sDeptid != null) {
          this.queryParams.deptid = parseInt(sDeptid);
        }
        if (s != undefined && s != null) {
          this.queryParams.sdate = s + "-01";
        }
        if (e != undefined && s != null) {
          let lastDay = getLastDay(e + "-01");
          this.queryParams.edate = e + "-" + lastDay;
        }
        if (bd != undefined && bd != null) {
          this.queryParams.duibiYear = bd;
        }
        if (number != undefined && number != null) {
          this.queryParams.searchtype = "eq";
          this.queryParams.name = number;
        }
        this.getTreeselect();
        this.getList();
      });
    },
lanbaoming's avatar
lanbaoming committed
658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687
    isChinese() {
      //基础函数,判断系统显示语言是中文还是英文
      return this.$i18n.locale === "zh_CN";
    },
    handleView(row) {
      //查看客户详情
      this.$router.push("/customer/query/" + row.id);
    },
    /** 取消按钮 */
    cancel() {
      this.open = false;
      this.reset();
    },
    /** 表单重置 */
    resetQuery() {
      this.queryParams = {
        pageNo: 1,
        pageSize: 10,
        searchtype: undefined,
        name: undefined, //客户姓名
        number: undefined, //客户编号
        salesmanid: undefined, //客户经理
        deptid: undefined, //部门
        country: undefined, //客户国家
        source: undefined, //客户来源
        customerrole: undefined, //客户角色
        first: undefined, //是否首次成交
        cusYjType: undefined, //客户业绩类型,新客户还是老客户
        searchDataType: undefined, //查询数据类型
        searchDateType: undefined, //日期查询类型
lanbaoming's avatar
lanbaoming committed
688
        sdate: undefined, //开始日期
lanbaoming's avatar
lanbaoming committed
689 690 691 692 693 694
        edate: undefined, //结束日期
      };
      this.resetForm("form");
    },
    /** 搜索按钮操作 */
    handleQuery() {
lanbaoming's avatar
lanbaoming committed
695 696 697 698 699 700
      if (this.isRightPar() == true) {
        this.queryParams.pageNo = 1;
        this.getList();
      }
    },
    isRightPar() {
lanbaoming's avatar
lanbaoming committed
701 702 703 704 705 706
      if (
        this.queryParams.sdate == undefined ||
        this.queryParams.sdate == null ||
        this.queryParams.sdate == ""
      ) {
        MessageBox("请输入开始日期。");
lanbaoming's avatar
lanbaoming committed
707
        return false;
lanbaoming's avatar
lanbaoming committed
708 709 710 711 712 713 714
      }
      if (
        this.queryParams.edate == undefined ||
        this.queryParams.edate == null ||
        this.queryParams.edate == ""
      ) {
        MessageBox("请输入结束日期。");
lanbaoming's avatar
lanbaoming committed
715
        return false;
lanbaoming's avatar
lanbaoming committed
716
      }
lanbaoming's avatar
lanbaoming committed
717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738

      if (
        this.queryParams.duibiYear == undefined ||
        this.queryParams.duibiYear == null ||
        this.queryParams.duibiYear == ""
      ) {
        MessageBox("请输入对比年份。");
        return false;
      } else {
        let y = parseInt(this.queryParams.duibiYear);
        if (y < 2023) {
          MessageBox("对比年份只能选2023年和2023年之后的年份。");
          return false;
        }
        var date = new Date();
        var year = date.getFullYear();
        if (y > year) {
          MessageBox("对比年份只能选当前年份之前的年份。");
          return false;
        }
      }
      return true;
lanbaoming's avatar
lanbaoming committed
739 740 741
    },
    /** 导出按钮操作 */
    handleExport() {
lanbaoming's avatar
lanbaoming committed
742
      if (this.isRightPar() == false) return;
lanbaoming's avatar
lanbaoming committed
743 744
      // 执行导出
      this.$modal
lanbaoming's avatar
lanbaoming committed
745
        .confirm("是否确认导出所有数据项?")
lanbaoming's avatar
lanbaoming committed
746 747
        .then(() => {
          this.exportLoading = true;
lanbaoming's avatar
lanbaoming committed
748
          return exportExcel(this.queryParams);
lanbaoming's avatar
lanbaoming committed
749 750
        })
        .then((response) => {
lanbaoming's avatar
lanbaoming committed
751
          this.$download.excel(response, "客户分析报表.xls");
lanbaoming's avatar
lanbaoming committed
752
          this.exportLoading = false;
lanbaoming's avatar
lanbaoming committed
753 754 755 756 757 758 759 760 761 762 763
        })
        .catch(() => {
          this.exportLoading = false;
        });
    },
    handleExport2() {
      if (this.isRightPar() == false) return;
      this.$modal
        .confirm("是否确认导出所有数据项?")
        .then(() => {
          this.exportLoading = true;
lanbaoming's avatar
lanbaoming committed
764
          return exportExcel2(this.queryParams);
lanbaoming's avatar
lanbaoming committed
765 766 767 768 769
        })
        .then((response) => {
          //放入后台队列需要注释此行代码
          //this.$download.excel(response, "客户分析报表.xls");
          this.exportLoading = false;
lanbaoming's avatar
lanbaoming committed
770 771
          this.$message.success(
            this.$t("已加入导出队列,请稍后在下载日志中下载")
lanbaoming's avatar
lanbaoming committed
772
          );
lanbaoming's avatar
lanbaoming committed
773
        })
lanbaoming's avatar
lanbaoming committed
774 775 776
        .catch(() => {
          this.exportLoading = false;
        });
lanbaoming's avatar
lanbaoming committed
777 778 779
    },

    /** 查询部门下拉树结构 + 岗位下拉 */
lanbaoming's avatar
lanbaoming committed
780
    getTreeselect() {
lanbaoming's avatar
lanbaoming committed
781 782 783 784 785 786 787 788 789 790 791 792 793
      if (this.objEcwReportPermission.permissionFw == 3) {
        listSimpleDepts().then((response) => {
          // 处理 deptOptions 参数
          this.deptOptions = [];
          this.deptOptions.push(...this.handleTree(response.data, "id"));
        });
      } else if (this.objEcwReportPermission.permissionFw == 2) {
        this.DeptEx.id = this.objEcwReportPermission.deptId;
        getDeptChild(this.DeptEx).then((response) => {
          this.deptOptions = [];
          this.deptOptions.push(...this.handleTree(response.data, "id"));
        });
      }
lanbaoming's avatar
lanbaoming committed
794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811
    },
    //格式化部门的下拉框
    normalizer(node) {
      return {
        id: node.id,
        label: node.name,
        children: node.children,
      };
    },
    getNowDate() {
      let now = new Date();
      year = now.getFullYear();
      month = (now.getMonth() + 1).toString().padStart(2, "0"); //得到月份
      day = now.getDate().toString().padStart(2, "0"); //得到日期
      let strDate = year + "-" + month + "-" + day;
      return strDate;
    },
    test() {
lanbaoming's avatar
lanbaoming committed
812
      //当前路径
lanbaoming's avatar
lanbaoming committed
813
      let sP = this.$route.path;
lanbaoming's avatar
lanbaoming committed
814 815
      alert(sP);
      //当前参数
lanbaoming's avatar
lanbaoming committed
816
      let sPar = this.$route.params;
lanbaoming's avatar
lanbaoming committed
817 818
      alert(sPar);
      //路由名称
lanbaoming's avatar
lanbaoming committed
819
      let sRoute = this.$route.name;
lanbaoming's avatar
lanbaoming committed
820 821
      alert(sRoute);
      //路由查询参数
lanbaoming's avatar
lanbaoming committed
822
      let sQ = this.$route.query;
lanbaoming's avatar
lanbaoming committed
823 824
      alert(sQ.toString());
      //路由匹配项
lanbaoming's avatar
lanbaoming committed
825
      let sM = this.$route.matched;
lanbaoming's avatar
lanbaoming committed
826 827 828 829
      alert(sM.toString());

      return;

lanbaoming's avatar
lanbaoming committed
830 831 832 833 834 835 836
      this.DeptEx.id = this.objEcwReportPermission.deptId;
      listServiceUser(this.DeptEx).then((response) => {
        let json1 = JSON.stringify(response.data);
        alert(json1);
        return;
      });

lanbaoming's avatar
lanbaoming committed
837 838 839 840 841
      let json1 = JSON.stringify(this.deptOptions);
      alert(json1);
      return;

      //对象的拷贝 lanbm 2024-04-19 add
lanbaoming's avatar
lanbaoming committed
842 843 844 845 846 847 848 849 850 851 852
      let target = {};
      let source = { c: 3 };
      Object.assign(target, source);

      let json = JSON.stringify(this.objEcwReportPermission);
      alert(json);
    },
  },
};
</script>