index.vue 47.6 KB
Newer Older
lanbaoming's avatar
lanbaoming committed
1 2 3
<template>
  <div class="app-container">
    <!-- 搜索工作栏 -->
4 5 6 7 8 9 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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="100px">
      <div class="search-z">
        <el-form-item :label="$t('客户编号')" prop="number">
          <el-input v-model.trim="queryParams.number" :placeholder="$t('请输入客户编号')" clearable @keyup.enter.native="handleQuery" @input="queryParams.number = queryParams.number.replace(/\s+/g, '')" />
        </el-form-item>
        <el-form-item :label="$t('客户名称')" prop="name">
          <el-input v-model.trim="queryParams.name" :placeholder="$t('请输入客户名称')" clearable @keyup.enter.native="handleQuery" @input="queryParams.name = queryParams.name.replace(/\s+/g, '')" />
        </el-form-item>
        <el-form-item :label="$t('区号')">
          <el-select v-model="queryParams.areaCode" :placeholder="$t('请选择区号')">
            <el-option v-for="(item, index) in countryList" :key="index" :label="item.nameShort + (isChinese ? item.nameZh : item.nameEn) + ' +' + item.tel" :value="item.tel" />
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('联系方式')">
          <el-input :placeholder="$t('请输入联系方式')" clearable v-model.trim="queryParams.defaultContactPhone" @input="queryParams.defaultContactPhone = queryParams.defaultContactPhone.replace(/\s+/g, '')"></el-input>
        </el-form-item>
        <el-form-item :label="$t('部门')" v-if="path != '/customer/department-customers'">
          <el-select v-model="queryParams.deptIds" :placeholder="$t('请选择部门')">
            <el-option v-for="item in deptList" :key="item.id" :label="item.name" :value="item.id" />
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('客户经理')" prop="customerService">
          <el-select multiple clearable v-model="queryParams.customerService" :placeholder="$t('请选择客户经理')" size="small" @change="handleQuery">
            <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="source">
          <el-select multiple clearable v-model="queryParams.source" :placeholder="$t('请选择客户来源')" size="small" @change="handleQuery">
            <el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_SOURCE)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="dict.value" />
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('客户类别')" prop="level">
          <dict-selector multiple clearable :type="DICT_TYPE.CUSTOMER_TYPE" v-model="queryParams.type" @change="handleQuery"></dict-selector>
        </el-form-item>
        <el-form-item :label="$t('角色')">
          <dict-selector multiple clearable :type="DICT_TYPE.CUSTOMER_ROLE" v-model="queryParams.role" formatter="number" @change="handleQuery" :placeholder="$t('请选择')"></dict-selector>
        </el-form-item>
        <el-form-item :label="$t('客户状态')" prop="status">
          <el-select multiple clearable v-model="queryParams.status" :placeholder="$t('请选择客户状态')" size="small" @change="handleQuery">
            <el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_STATUS)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="dict.value" />
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('国籍')" prop="country">
          <el-select multiple clearable v-model="queryParams.country" :placeholder="$t('请选择')" @change="handleQuery">
            <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>
        <el-form-item :label="$t('出货渠道')">
          <dict-selector multiple clearable :type="DICT_TYPE.ECW_CUSTOMER_TRANSPORT_TYPE" v-model="queryParams.transportType" formatter="number" @change="handleQuery"></dict-selector>
        </el-form-item>
yujinyao's avatar
yujinyao committed
54

55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
        <el-form-item :label="$t('业务国家')" v-show="showSearch">
          <el-select multiple clearable v-model="queryParams.busiCountryIds" :placeholder="$t('请选择')" @change="handleQuery">
            <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>
        <el-form-item :label="$t('常用提货网点')" v-show="showSearch">
          <el-select multiple v-model="queryParams.pickupPoints">
            <el-option v-for="item in getNodeLists" :key="item.id" :value="item.id" :label="isChinese ? item.titleZh : item.titleEn"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('创建人')" v-show="showSearch">
          <el-select v-model="queryParams.founder">
            <el-option v-for="item in allSimplList" :key="item.id" :label="item.nickname" :value="item.id"> </el-option>
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('业绩类型')" v-show="showSearch">
          <el-select clearable v-model="queryParams.isNew">
            <el-option :label="$t('新客户')" :value="true" />
            <el-option :label="$t('老客户')" :value="false" />
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('年度发货量')" v-show="showSearch">
          <el-input v-model.trim="weightYearly.value" :placeholder="$t('请输入数字')" clearable @keyup.enter.native="handleQuery" @input="weightYearly.value = weightYearly.value.replace(/\s+/g, '')">
            <template slot="prepend">
              <dict-selector :type="DICT_TYPE.CUSTOMER_QUERY_NUMBER_FIELD" defaultable v-model="weightYearly.key" />
            </template>
          </el-input>
        </el-form-item>
        <el-form-item :label="$t('商品类别')" v-show="showSearch">
          <el-select @change="handleSelectProductType" multiple v-model="queryParams.productTypes" :placeholder="$t('请选择')">
            <el-option :label="item.titleZh" :value="item.id" v-for="item in productTypeList" :key="item.id" />
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('商品名称')" v-show="showSearch">
          <el-select multiple filterable clearable v-model="queryParams.productIds" :placeholder="$t('请选择商品名称')">
            <el-option :label="item.titleZh" :value="parseInt(item.id)" v-for="item in productList" :key="item.id" />
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('主要竞争对手')" v-show="showSearch">
94 95 96
          <el-select multiple filterable clearable v-model="queryParams.competitorIds" :placeholder="$t('请选择竞争对手')" size="small" @change="handleQuery">
            <el-option v-for="item in competitorList" :key="item.id" :label="item.name" :value="item.id"> </el-option>
          </el-select>
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
        </el-form-item>
        <el-form-item :label="$t('年度发货次数')" v-show="showSearch">
          <el-input v-model.trim="numYearly.value" :placeholder="$t('请输入数字')" clearable @keyup.enter.native="handleQuery" @input="numYearly.value = numYearly.value.replace(/\s+/g, '')">
            <template slot="prepend">
              <dict-selector :type="DICT_TYPE.CUSTOMER_QUERY_NUMBER_FIELD" defaultable v-model="numYearly.key" />
            </template>
          </el-input>
        </el-form-item>
        <el-form-item :label="$t('推介人')" v-show="showSearch">
          <el-select clearable remote :remote-method="remoteMethod" v-model="queryParams.promoter" :placeholder="$t('请输入推介人')" filterable>
            <el-option v-for="item in customerSelectFn" :key="item.id" :label="item.name" :value="item.id"> </el-option>
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('获取方式')" v-show="showSearch">
          <el-select v-model="queryParams.getMethod" multiple :placeholder="$t('请选择')">
            <el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_GET_METHOD)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" />
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('创建入口')" v-show="showSearch">
          <el-select v-model="queryParams.createFroms" multiple :placeholder="$t('请选择')">
            <el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_FROM)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" />
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('结算方式')" v-show="showSearch">
          <el-select v-model="queryParams.balances" multiple :placeholder="$t('请选择结算方式')">
            <el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_BALANCE)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" />
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('入仓确认')" v-show="showSearch">
          <el-select clearable v-model="queryParams.arrivalConfirm">
            <el-option :label="$t('是')" :value="1" />
            <el-option :label="$t('否')" :value="0" />
          </el-select>
        </el-form-item>
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
        <el-form-item :label="$t('会员电话')" prop="department" label-width="100px">
          <el-input :placeholder="$t('请输入会员电话')" class="w-200" clearable v-model.trim="queryParams.memberMobile" @input="queryParams.memberMobile = queryParams.memberMobile.replace(/\s+/g, '')">
            <template slot="prepend">
              <area-code-selector  v-model="queryParams.memberAreaCode" class="w-50"/>
            </template>
          </el-input>
        </el-form-item>
        <el-form-item :label="$t('会员编号')" prop="number">
          <el-input
            v-model.trim="queryParams.memberCode"
            :placeholder="$t('请输入会员编号')"
            clearable
            @keyup.enter.native="handleQuery"
          />
        </el-form-item>
        <el-form-item :label="$t('会员名称')" prop="name">
          <el-input
            v-model.trim="queryParams.memberName"
            :placeholder="$t('请输入会员名称')"
            clearable
            @keyup.enter.native="handleQuery"
          />
        </el-form-item>
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
        <el-form-item :label="$t('控货无收货人')" v-show="showSearch" label-width="100px">
          <div style="width: 194px">
            <el-switch v-model="queryParams.noConsignee" />
          </div>
        </el-form-item>
        <el-form-item :label="$t('默认付款')" v-show="showSearch" label-width="70px">
          <div style="width: 194px">
            <el-switch v-model="queryParams.defaultPay" />
          </div>
        </el-form-item>
        <el-form-item :label="$t('是否显示提单价格')" v-show="showSearch" label-width="130px">
          <div style="width: 194px">
            <el-switch v-model="queryParams.isShowTidanPrice" />
          </div>
        </el-form-item>
169

170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
      </div>
      <div class="search-time">
        <el-form-item :label="$t('入公海时间')" v-show="showSearch">
          <el-date-picker type="datetimerange" clearable v-model="enterOpenSeaTime" value-format="yyyy-MM-dd HH:mm:ss" range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" />
        </el-form-item>
        <el-form-item :label="$t('归属时间')" v-show="showSearch">
          <el-date-picker type="datetimerange" clearable v-model="customerServiceConfirmedTime" value-format="yyyy-MM-dd HH:mm:ss" range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" />
        </el-form-item>
        <el-form-item :label="$t('首次成交时间')" v-show="showSearch">
          <el-date-picker type="datetimerange" clearable v-model="firstDealTime" value-format="yyyy-MM-dd HH:mm:ss" range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" />
        </el-form-item>

        <el-form-item :label="$t('创建时间')" v-show="showSearch">
          <el-date-picker type="datetimerange" clearable v-model="dateRangeCreateTime" value-format="yyyy-MM-dd HH:mm:ss" range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" />
        </el-form-item>
        <el-form-item style="padding-left: 20px">
          <el-button type="primary" icon="el-icon-search" @click="handleQuery">{{ $t("搜索") }}</el-button>
          <el-button icon="el-icon-refresh" @click="resetQuery">{{ $t("重置") }}</el-button>
        </el-form-item>
      </div>
lanbaoming's avatar
lanbaoming committed
190 191 192 193 194
    </el-form>

    <!-- 操作工具栏 -->
    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
zs嵩's avatar
zs嵩 committed
195
        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="$router.push({ path: '/customer/add-edit/0', query: { isCustomerServiceConfirmed: true } })" v-hasPermi="['ecw:customer: treat-create']">{{ $t("新增") }}</el-button>
lanbaoming's avatar
lanbaoming committed
196 197
      </el-col>
      <el-col :span="1.5">
zs嵩's avatar
zs嵩 committed
198
        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading" v-hasPermi="['ecw:customer:treat-export']">{{ $t("导出") }}</el-button>
lanbaoming's avatar
lanbaoming committed
199 200 201 202 203
      </el-col>
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>

    <!-- 列表 -->
yujinyao's avatar
yujinyao committed
204 205
    <el-table ref="multipleTable" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
      <el-table-column type="selection" width="55" fixed></el-table-column>
余金瑶's avatar
余金瑶 committed
206
      <el-table-column :label="$t('客户编号')" align="center" fixed>
zs嵩's avatar
zs嵩 committed
207
        <template v-slot="{ row }">
余金瑶's avatar
余金瑶 committed
208 209 210
          <router-link :to="`/customer/query/${row.id}`" class="link-type">
            {{ row.number }}
          </router-link>
lanbaoming's avatar
lanbaoming committed
211 212
        </template>
      </el-table-column>
余金瑶's avatar
余金瑶 committed
213
      <el-table-column :label="$t('客户名称')" align="center" fixed>
zs嵩's avatar
zs嵩 committed
214 215
        <template v-slot="{ row }">
          <p style="display: inline-block; white-space: pre-wrap">{{ $l(row, "name") }}</p>
lanbaoming's avatar
lanbaoming committed
216 217
        </template>
      </el-table-column>
余金瑶's avatar
余金瑶 committed
218
      <!--
lanbaoming's avatar
lanbaoming committed
219 220 221 222 223 224
      <el-table-column :label="$t('客户等级')" align="center" prop="vipLevelNameZh">
        <template slot-scope="scope">
          <dict-tag :type="DICT_TYPE.CUSTOMER_LEVEL" :value="scope.row.level" />
        </template>
      </el-table-column>
      <el-table-column :label="$t('信用等级')" :prop="isChinese ? 'creditLevelNameZh' : 'creditLevelNameEn'"></el-table-column>
余金瑶's avatar
余金瑶 committed
225
      -->
lanbaoming's avatar
lanbaoming committed
226 227 228 229 230 231
      <el-table-column :label="$t('客户状态')" align="center" prop="status">
        <template slot-scope="scope">
          <dict-tag :type="DICT_TYPE.CUSTOMER_STATUS" :value="scope.row.status" />
        </template>
      </el-table-column>
      <el-table-column :label="$t('主联系人')" prop="defaultContactName"></el-table-column>
232 233 234 235 236 237 238 239
      <el-table-column :label="$t('主联系方式')" prop="defaultContactPhone">
        <template v-slot="{row}">
          +{{row.defaultContactPhone}} <br/>
          <contacts :id="row.id" >
            <el-button  type="text">更多</el-button>
          </contacts>
        </template>
      </el-table-column>
240
      <el-table-column :label="$t('最新跟进时间')" width="120">
zs嵩's avatar
zs嵩 committed
241
        <template slot-scope="scope" v-if="scope.row.followupBackVO">
242 243 244 245
          {{ parseTime(scope.row.followupBackVO.followTime) }}
        </template>
      </el-table-column>
      <el-table-column :label="$t('最新跟进记录')" width="120">
zs嵩's avatar
zs嵩 committed
246
        <template slot-scope="scope" v-if="scope.row.followupBackVO">
247
          <a href="javascript:void(0)" @click="handleCustomerFollowLink(scope.row.followupBackVO)" class="link-type">{{ scope.row.followupBackVO.number }}</a>
lanbaoming's avatar
lanbaoming committed
248 249
        </template>
      </el-table-column>
250

余金瑶's avatar
余金瑶 committed
251
      <el-table-column :label="$t('客户类别')" align="center" prop="status">
252
        <template slot-scope="{ row }">
zs嵩's avatar
zs嵩 committed
253 254 255 256 257 258 259 260 261
          {{
            getDictDatas2(DICT_TYPE.CUSTOMER_TYPE, (row.type || "").split(","))
              .map((e) => (isChinese ? e.label : e.labelEn))
              .join(", ")
          }}
          <!--          <dict-tag-->
          <!--            :type="DICT_TYPE.CUSTOMER_TYPE"-->
          <!--            :value="scope.row.type"-->
          <!--          />-->
余金瑶's avatar
余金瑶 committed
262 263 264
        </template>
      </el-table-column>
      <el-table-column :label="$t('角色')" align="center" prop="status">
zhengyi's avatar
zhengyi committed
265
        <template slot-scope="{ row }">
zs嵩's avatar
zs嵩 committed
266 267 268 269 270 271 272 273 274
          {{
            getDictDatas2(DICT_TYPE.CUSTOMER_ROLE, (row.roles || "").split(","))
              .map((e) => (isChinese ? e.label : e.labelEn))
              .join(", ")
          }}
          <!--          <dict-tag-->
          <!--            :type="DICT_TYPE.CUSTOMER_ROLE"-->
          <!--            :value="scope.row.roles"-->
          <!--          />-->
余金瑶's avatar
余金瑶 committed
275 276 277 278 279 280 281 282 283 284 285
        </template>
      </el-table-column>
      <el-table-column :label="$t('客户经理')" align="center" prop="customerServiceName"></el-table-column>
      <el-table-column :label="$t('国籍')" align="center" prop="country" :formatter="countryFormatter"></el-table-column>
      <el-table-column :label="$t('出货渠道')" align="center">
        <template slot-scope="{ row }">
          {{ channel(row.transportType) }}
        </template>
      </el-table-column>
      <el-table-column :label="$t('客户来源')">
        <template slot-scope="scope">
zs嵩's avatar
zs嵩 committed
286
          <dict-tag :type="DICT_TYPE.CUSTOMER_SOURCE" :value="scope.row.source" />
余金瑶's avatar
余金瑶 committed
287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305
        </template>
      </el-table-column>
      <el-table-column :label="$t('业务国家')">
        <template slot-scope="{ row }">
          {{ getBusiCountryNames(row.busiCountryIds) }}
        </template>
      </el-table-column>
      <el-table-column :label="$t('常用提货网点')">
        <template slot-scope="{ row }">
          {{ getPickupPointNames(row.pickupPoints) }}
        </template>
      </el-table-column>
      <el-table-column :label="$t('年度发货量')" align="center">
        <template slot-scope="{ row }">
          {{ row.weightYearly }}
        </template>
      </el-table-column>
      <el-table-column :label="$t('主营类别')">
        <template slot-scope="{ row }">
306
          {{ getProductTypeNames(row.productTypes) }}
余金瑶's avatar
余金瑶 committed
307 308
        </template>
      </el-table-column>
zs嵩's avatar
zs嵩 committed
309
      <el-table-column :label="$t('主要竞争对手')" prop="competitorNames"> </el-table-column>
余金瑶's avatar
余金瑶 committed
310 311 312 313 314 315 316 317 318 319 320 321
      <el-table-column :label="$t('年度发货次数')" align="center">
        <template slot-scope="{ row }">
          {{ row.numYearly }}
        </template>
      </el-table-column>
      <el-table-column :label="$t('推介人')">
        <template slot-scope="{ row }">
          {{ getPromoterName(row.promoter) }}
        </template>
      </el-table-column>
      <el-table-column :label="$t('入公海时间')" align="center" width="160">
        <template v-slot="{ row }">
zs嵩's avatar
zs嵩 committed
322
          {{ parseTime(row.enterOpenSeaTime ? row.enterOpenSeaTime : row.estimateEnterOpenSeaTime) }}
余金瑶's avatar
余金瑶 committed
323 324 325 326
        </template>
      </el-table-column>
      <el-table-column :label="$t('入仓确认')" align="center">
        <template slot-scope="scope">
zs嵩's avatar
zs嵩 committed
327 328
          <el-tag type="success" v-if="scope.row.arrivalConfirm == 1">{{ $t("") }}</el-tag>
          <el-tag type="info" v-else>{{ $t("") }}</el-tag>
余金瑶's avatar
余金瑶 committed
329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352
        </template>
      </el-table-column>
      <el-table-column :label="$t('控货无收货人')" align="center">
        <template slot-scope="scope">
          <el-switch v-model="scope.row.noConsignee" disabled />
        </template>
      </el-table-column>
      <el-table-column :label="$t('默认付款')" align="center">
        <template slot-scope="scope">
          <el-switch v-model="scope.row.defaultPay" disabled />
        </template>
      </el-table-column>
      <el-table-column :label="$t('归属时间')" width="160" align="center">
        <template slot-scope="scope">
          {{ parseTime(scope.row.customerServiceConfirmedTime) }}
        </template>
      </el-table-column>
      <el-table-column :label="$t('首次成交时间')" width="160" align="center">
        <template slot-scope="scope">
          {{ parseTime(scope.row.firstDealTime) }}
        </template>
      </el-table-column>
      <el-table-column :label="$t('获取方式')" align="center">
        <template slot-scope="scope">
zs嵩's avatar
zs嵩 committed
353
          <dict-tag :type="DICT_TYPE.CUSTOMER_GET_METHOD" :value="scope.row.getMethod" />
余金瑶's avatar
余金瑶 committed
354 355
        </template>
      </el-table-column>
zs嵩's avatar
zs嵩 committed
356
      <el-table-column :label="$t('创建人')" prop="createUsername" align="center"> </el-table-column>
余金瑶's avatar
余金瑶 committed
357
      <el-table-column :label="$t('创建时间')" align="center" width="160">
lanbaoming's avatar
lanbaoming committed
358 359 360 361
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.createTime) }}</span>
        </template>
      </el-table-column>
余金瑶's avatar
余金瑶 committed
362 363
      <el-table-column :label="$t('最后更新时间')" align="center" width="160">
        <template slot-scope="scope">
zs嵩's avatar
zs嵩 committed
364
          <span>{{ parseTime(scope.row.updateTime) }}</span>
lanbaoming's avatar
lanbaoming committed
365 366
        </template>
      </el-table-column>
余金瑶's avatar
余金瑶 committed
367
      <el-table-column :label="$t('分配时间')" align="center" width="180">
zs嵩's avatar
zs嵩 committed
368 369
        <template v-slot="{ row }">
          <span>{{ parseTime(row.customerServiceAssignedTime) }}</span>
余金瑶's avatar
余金瑶 committed
370
        </template>
lanbaoming's avatar
lanbaoming committed
371
      </el-table-column>
余金瑶's avatar
余金瑶 committed
372
      <el-table-column width="200px" :label="$t('操作')" align="center" fixed="right">
lanbaoming's avatar
lanbaoming committed
373 374
        <template slot-scope="scope">
          <router-link :to="'/customer/query/' + scope.row.id">
zs嵩's avatar
zs嵩 committed
375 376 377 378 379 380 381 382
            <el-button v-has-permi="['ecw:customer:treat-view']" size="mini" style="margin-right: 10px" type="text">查看</el-button>
          </router-link>
          <el-button size="mini" type="text" @click="handleConfirmService(scope.row)" v-hasPermi="['ecw:customer:treat-accept']">{{ $t("确认接收") }}</el-button>
          <el-button size="mini" type="text" @click="handOver(scope.row)" v-hasPermi="['ecw:customer:treat-transfer']">{{ $t("移交") }}</el-button>
          <router-link style="margin: 0 10px" to="/offer/create">
            <el-button v-has-permi="['ecw:customer:treat-quoted-price']" size="mini" type="text">
              {{ $t("报价") }}
            </el-button>
lanbaoming's avatar
lanbaoming committed
383
          </router-link>
zs嵩's avatar
zs嵩 committed
384
          <el-button size="mini" type="text" @click="handleUpdate(scope.row)" v-hasPermi="['ecw:customer:treat-perfect']">{{ $t("完善") }}</el-button>
yujinyao's avatar
yujinyao committed
385
          <!-- <el-button  v-has-permi="['ecw:customer:treat-recovery']" size="mini"  type="text" @click="recovery(scope.row)" > {{$t('回收客户')}} </el-button>-->
zs嵩's avatar
zs嵩 committed
386
          <el-button v-has-permi="['ecw:customer:setting']" size="mini" type="text" icon="el-icon-user" @click="handleSetting(scope.row)">{{ $t("设置") }}</el-button>
lanbaoming's avatar
lanbaoming committed
387 388 389 390
        </template>
      </el-table-column>
    </el-table>
    <!-- 分页组件 -->
zs嵩's avatar
zs嵩 committed
391
    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" @pagination="getList" />
lanbaoming's avatar
lanbaoming committed
392 393 394 395 396 397 398 399 400 401 402 403

    <!-- 对话框(添加 / 修改) -->
    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
        <el-col :span="12">
          <el-form-item :label="$t('客户名称')" prop="name">
            <el-input v-model="form.name" :placeholder="$t('请输入客户名称')" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('国家')" prop="country">
            <el-select v-model="form.country" :placeholder="$t('请选择国家')">
zs嵩's avatar
zs嵩 committed
404
              <el-option v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)" :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
lanbaoming's avatar
lanbaoming committed
405 406 407 408 409 410
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('客户等级')" prop="level">
            <el-select v-model="form.level" :placeholder="$t('请选择客户等级')">
zs嵩's avatar
zs嵩 committed
411
              <el-option v-for="dict in this.getDictDatas(DICT_TYPE.CUSTOMER_LEVEL)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" />
lanbaoming's avatar
lanbaoming committed
412 413 414 415 416 417
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('所属代理')" prop="agentId">
            <el-select v-model="form.agentId" :placeholder="$t('请选择所属代理')">
zs嵩's avatar
zs嵩 committed
418
              <el-option v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" />
lanbaoming's avatar
lanbaoming committed
419 420 421 422 423 424 425 426 427 428 429
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('联系地址')" prop="address">
            <el-input v-model="form.address" :placeholder="$t('请输入联系地址')" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('客户类别')" prop="type">
            <el-select v-model="form.type" :placeholder="$t('请选择客户类别')">
zs嵩's avatar
zs嵩 committed
430
              <el-option v-for="dict in this.getDictDatas(DICT_TYPE.CUSTOMER_TYPE)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="dict.value" />
lanbaoming's avatar
lanbaoming committed
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
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('常用提货网点')" prop="pickupPoint">
            <el-select v-model="form.pickupPoint" :placeholder="$t('请输入常用提货网点')">
              <el-option :label="$t('请选择字典生成')" value="" />
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('公司名称')" prop="company">
            <el-input v-model="form.company" :placeholder="$t('请输入公司名称')" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('客户生日')" prop="birthday">
            <el-input v-model="form.birthday" :placeholder="$t('请输入客户生日')" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('产品类型')" prop="productType">
            <el-select v-model="form.productType" :placeholder="$t('请选择产品类型')">
              <el-option :label="$t('请选择字典生成')" value="" />
            </el-select>
          </el-form-item>
          <el-form-item :label="$t('产品id')" prop="productId">
            <el-input v-model="form.productId" :placeholder="$t('请输入产品id')" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('客户来源')" prop="source">
            <el-select v-model="form.source" :placeholder="$t('请选择客户来源')">
zs嵩's avatar
zs嵩 committed
464
              <el-option v-for="dict in this.getDictDatas(DICT_TYPE.CUSTOMER_SOURCE)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" />
lanbaoming's avatar
lanbaoming committed
465 466 467 468 469 470
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('结算方式')" prop="balance">
            <el-select v-model="form.balance" :placeholder="$t('请选择结算方式')">
zs嵩's avatar
zs嵩 committed
471
              <el-option v-for="dict in this.getDictDatas(DICT_TYPE.CUSTOMER_BALANCE)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" />
lanbaoming's avatar
lanbaoming committed
472 473 474 475 476 477
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('客户经理')" prop="customerService">
            <el-select v-model="form.customerService" :placeholder="$t('请选择客户经理')">
zs嵩's avatar
zs嵩 committed
478
              <el-option v-for="dict in serviceStaffOptions" :key="dict.id" :label="dict.nickname" :value="dict.id" />
lanbaoming's avatar
lanbaoming committed
479 480 481 482 483 484 485 486 487 488 489
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('图片')" prop="picture">
            <el-input v-model="form.picture" :placeholder="$t('请输入图片')" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('客户状态')" prop="status">
            <el-select v-model="form.status" :placeholder="$t('请选择客户状态')">
zs嵩's avatar
zs嵩 committed
490
              <el-option v-for="dict in this.getDictDatas(DICT_TYPE.CUSTOMER_STATUS)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" />
lanbaoming's avatar
lanbaoming committed
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 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('推介人')" prop="promoter">
            <el-input v-model="form.promoter" :placeholder="$t('请输入推介人')" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('创建人')" prop="founder">
            <el-input v-model="form.founder" :placeholder="$t('请输入创建人')" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('创建时间')" prop="founder">
            <el-input v-model="form.founder" :placeholder="$t('请输入创建人')" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item :label="$t('备注')" prop="remarks">
            <el-input v-model="form.remarks" :placeholder="$t('请输入备注')" />
          </el-form-item>
        </el-col>
        <el-col :span="24">
          <el-form-item :label="$t('到仓确认')" prop="arrivalConfirm">
            <el-switch v-model="form.arrivalConfirm" :active-value="0" :inactive-value="1" />
          </el-form-item>
        </el-col>
        <el-col :span="24">
          <el-form-item :label="$t('重货标准(CBM)')" prop="weightUnit">
            <el-input v-model="form.weightUnit" :placeholder="$t('请输入重货标准(CBM)')" />
          </el-form-item>
        </el-col>

        <el-form-item :label="$t('关联会员账号')" prop="memberId">
          <el-input v-model="form.memberId" :placeholder="$t('请输入关联会员账号')" />
        </el-form-item>

        <el-form-item :label="$t('部门')" prop="department">
          <el-input v-model="form.department" :placeholder="$t('请输入部门')" />
        </el-form-item>
        <el-form-item :label="$t('发票抬头')" prop="invoiceTitle">
          <el-input v-model="form.invoiceTitle" :placeholder="$t('请输入发票抬头')" />
        </el-form-item>
        <el-form-item :label="$t('纳税人识别号')" prop="licenseNumber">
          <el-input v-model="form.licenseNumber" :placeholder="$t('请输入纳税人识别号')" />
        </el-form-item>
        <el-form-item :label="$t('开户行')" prop="bank">
          <el-input v-model="form.bank" :placeholder="$t('请输入开户行')" />
        </el-form-item>
        <el-form-item :label="$t('账户')" prop="bankNumber">
          <el-input v-model="form.bankNumber" :placeholder="$t('请输入账户')" />
        </el-form-item>
        <el-form-item :label="$t('项目')" prop="project">
          <el-input v-model="form.project" :placeholder="$t('请输入项目')" />
        </el-form-item>
        <el-form-item :label="$t('开票地址')" prop="billingAddress">
          <el-input v-model="form.billingAddress" :placeholder="$t('请输入开票地址')" />
        </el-form-item>
        <el-form-item :label="$t('开票电话')" prop="billingTell">
          <el-input v-model="form.billingTell" :placeholder="$t('请输入开票电话')" />
        </el-form-item>
        <el-form-item :label="$t('税率')" prop="taxRate">
          <el-input v-model="form.taxRate" :placeholder="$t('请输入税率')" />
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
zs嵩's avatar
zs嵩 committed
558 559
        <el-button type="primary" @click="submitForm">{{ $t("确 定") }}</el-button>
        <el-button @click="cancel">{{ $t("取 消") }}</el-button>
lanbaoming's avatar
lanbaoming committed
560 561 562 563 564 565 566 567 568
      </div>
    </el-dialog>

    <!-- 移交 -->
    <!-- 对话框(添加 / 修改) -->
    <el-dialog :title="title" :visible.sync="openHandOver" width="500px" append-to-body>
      <el-form ref="handOverForm" :model="handOverForm" :rules="rules" label-width="80px">
        <el-form-item :label="$t('客户经理')" prop="customerServiceId">
          <el-select v-model="handOverForm.customerServiceId" :placeholder="$t('请选择客户经理')" clearable filterable>
zs嵩's avatar
zs嵩 committed
569
            <el-option v-for="user in serviceStaffOptions" :key="user.id" :value="user.id" :label="user.nickname" />
lanbaoming's avatar
lanbaoming committed
570 571 572 573
          </el-select>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
zs嵩's avatar
zs嵩 committed
574 575
        <el-button type="primary" @click="submitHandOverForm">{{ $t("确 定") }}</el-button>
        <el-button @click="cancelHandOver">{{ $t("取 消") }}</el-button>
lanbaoming's avatar
lanbaoming committed
576 577 578
      </div>
    </el-dialog>
    <transfer-customer :show.sync="openHandOver" :customer-ids.sync="handOverForm.customerIdList"></transfer-customer>
zs嵩's avatar
zs嵩 committed
579 580
    <customer-follow ref="customerFollow" @close="customerFollowVisible = false" @refresh="handleQuery" v-if="customerFollowVisible" />
    <customer-setting ref="customerSetting" @refresh="getList"></customer-setting>
lanbaoming's avatar
lanbaoming committed
581 582 583 584
  </div>
</template>

<script>
zs嵩's avatar
zs嵩 committed
585
import { updateCustomer, getCustomer, exportCustomerExcel, getWaitForConfirmList, confirm, waiteConfirmExportExcel, waiteConfirEexportExcel, recycleUnconfirmedCustomer, competitorListAll } from "@/api/ecw/customer"
yujinyao's avatar
yujinyao committed
586
import { listServiceUser, listAllSimpl } from "@/api/system/user"
zs嵩's avatar
zs嵩 committed
587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603
import { getDictDatas, DICT_TYPE, getDictDatas2 } from "@/utils/dict"
import { CommonStatusEnum } from "@/utils/constants"
import { handOverCustomer } from "../../../api/ecw/customer"
import { getCountryListAll } from "@/api/ecw/country"
import { getCreditPage } from "@/api/customer/credit"
import transferCustomer from "@/views/ecw/customer/transferCustomer.vue"
import Contacts from "@/views/ecw/customer/components/contacts.vue"
import CustomerSetting from "../customer/components/customerSetting.vue"
import AreaCodeSelector from "@/components/AreaCodeSelector/index.vue"
import { getNodeList } from "@/api/ecw/node"
import { getCustomerSelect, changeCustomerDefaultPay, changeCustomerNoConsignee, changeCustomerDefaultBilling } from "@/api/ecw/customer"
import { getProductTypeList } from "@/api/ecw/productType"
import { getProductList } from "@/api/ecw/product"
import { listMySimpleDepts } from "@/api/system/dept"
import Template from "@/views/cms/template/index.vue"
import CustomerFollow from "@/views/ecw/customer/components/customerFollow.vue"
import CompetitorSelector from "@/components/CompetitorSelector/index.vue"
lanbaoming's avatar
lanbaoming committed
604 605 606
export default {
  name: "EcwCustomerconfirmIndex",
  activated() {
zs嵩's avatar
zs嵩 committed
607
    this.getList()
lanbaoming's avatar
lanbaoming committed
608
  },
zs嵩's avatar
zs嵩 committed
609
  computed: {
lanbaoming's avatar
lanbaoming committed
610 611 612
    DICT_TYPE() {
      return DICT_TYPE
    },
zs嵩's avatar
zs嵩 committed
613 614
    isChinese() {
      return this.$i18n.locale === "zh_CN"
lanbaoming's avatar
lanbaoming committed
615
    },
余金瑶's avatar
余金瑶 committed
616 617 618 619 620 621 622
    channel() {
      return (val) => {
        return !!val
          ? this.getDictDatas(this.DICT_TYPE.ECW_CUSTOMER_TRANSPORT_TYPE)
              .filter((i) => (val.split(",") || []).includes(i.value))
              .map((i) => (this.isChinese ? i.label : i.labelEn))
              .join("")
zs嵩's avatar
zs嵩 committed
623 624
          : ""
      }
余金瑶's avatar
余金瑶 committed
625
    },
yujinyao's avatar
yujinyao committed
626 627
    customerSelectFn() {
      if (this.recommended.length > 0) {
zs嵩's avatar
zs嵩 committed
628
        let i = this.customerSelect.find((item) => item.id === this.recommended[0].id)
yujinyao's avatar
yujinyao committed
629
        if (!i) {
zs嵩's avatar
zs嵩 committed
630
          this.customerSelect.push(this.recommended[0])
yujinyao's avatar
yujinyao committed
631
        }
zs嵩's avatar
zs嵩 committed
632
        return this.customerSelect
yujinyao's avatar
yujinyao committed
633
      } else {
zs嵩's avatar
zs嵩 committed
634
        return this.customerSelect
yujinyao's avatar
yujinyao committed
635 636 637 638 639 640 641 642 643
      }
    },
    combinedQueryParams() {
      let queryParams = {}
      if (this.enterOpenSeaTime && this.enterOpenSeaTime.length == 2) {
        queryParams.beginEnterOpenSeaTime = this.enterOpenSeaTime[0]
        queryParams.endEnterOpenSeaTime = this.enterOpenSeaTime[1]
      }
      if (this.customerServiceConfirmedTime && this.customerServiceConfirmedTime.length == 2) {
yujinyao's avatar
yujinyao committed
644 645
        queryParams.beginCustomerServiceConfirmedTime = this.customerServiceConfirmedTime[0]
        queryParams.endCustomerServiceConfirmedTime = this.customerServiceConfirmedTime[1]
yujinyao's avatar
yujinyao committed
646 647 648 649 650 651 652 653 654 655
      }
      if (this.dateRangeCreateTime && this.dateRangeCreateTime.length == 2) {
        queryParams.beginCreateTime = this.dateRangeCreateTime[0]
        queryParams.endCreateTime = this.dateRangeCreateTime[1]
      }
      if (this.firstDealTime && this.firstDealTime.length == 2) {
        queryParams.beginFirstDealTime = this.firstDealTime[0]
        queryParams.endFirstDealTime = this.firstDealTime[1]
      }
      if (this.weightYearly.value) {
zs嵩's avatar
zs嵩 committed
656 657 658 659 660
        let key = "eqWeightYearly"
        if (this.weightYearly.key == "leNumberKey") {
          key = "leWeightYearly"
        } else if (this.weightYearly.key == "geNumberKey") {
          key = "geWeightYearly"
yujinyao's avatar
yujinyao committed
661
        }
zs嵩's avatar
zs嵩 committed
662
        queryParams[key] = this.weightYearly.value
yujinyao's avatar
yujinyao committed
663 664
      }
      if (this.numYearly.value) {
zs嵩's avatar
zs嵩 committed
665 666 667 668 669
        let key = "eqNumYearly"
        if (this.numYearly.key == "leNumberKey") {
          key = "leNumYearly"
        } else if (this.numYearly.key == "geNumberKey") {
          key = "geNumYearly"
yujinyao's avatar
yujinyao committed
670
        }
zs嵩's avatar
zs嵩 committed
671
        queryParams[key] = this.numYearly.value
yujinyao's avatar
yujinyao committed
672 673
      }

zs嵩's avatar
zs嵩 committed
674 675
      return queryParams
    }
lanbaoming's avatar
lanbaoming committed
676 677
  },
  components: {
678
    CompetitorSelector,
zhengyi's avatar
zhengyi committed
679
    Template,
lanbaoming's avatar
lanbaoming committed
680
    Contacts,
681
    transferCustomer,
yujinyao's avatar
yujinyao committed
682
    AreaCodeSelector,
683
    CustomerSetting,
684
    CustomerFollow
lanbaoming's avatar
lanbaoming committed
685 686 687
  },
  data() {
    return {
688
      customerFollowVisible: false,
lanbaoming's avatar
lanbaoming committed
689 690 691 692 693
      // 遮罩层
      loading: true,
      // 导出遮罩层
      exportLoading: false,
      // 显示搜索条件
694
      showSearch: false,
zhengyi's avatar
zhengyi committed
695
      getDictDatas2,
lanbaoming's avatar
lanbaoming committed
696 697 698 699 700 701 702 703 704 705 706 707 708
      // 总条数
      total: 0,
      // 客户列表
      list: [],
      // 弹出层标题
      title: "",
      // 是否显示弹出层
      open: false,
      openHandOver: false,
      dateRangeCreateTime: [],
      // 查询参数
      queryParams: {
        pageNo: 1,
zs嵩's avatar
zs嵩 committed
709
        pageSize: 10
yujinyao's avatar
yujinyao committed
710
        /*number: null,
lanbaoming's avatar
lanbaoming committed
711 712 713 714 715 716 717 718 719
        name: null,
        level: null,
        source: null,
        customerService: null,
        status: null,
        department: null,
        creditLevel:null,
        country:null,
        marketType:null,
720 721 722
        memberCode: null,
        memberName: null,
        memberMobile: null,
yujinyao's avatar
yujinyao committed
723
        memberAreaCode: null*/
lanbaoming's avatar
lanbaoming committed
724 725 726 727 728 729
      },
      // 表单参数
      form: {},
      handOverForm: {},
      // 表单校验
      rules: {
zs嵩's avatar
zs嵩 committed
730 731
        name: [{ required: true, message: this.$t("客户名称不能为空"), trigger: "blur" }],
        weightUnit: [{ required: true, message: this.$t("重货标准(CBM)不能为空"), trigger: "blur" }]
lanbaoming's avatar
lanbaoming committed
732 733 734
      },

      serviceStaffOptions: [],
zs嵩's avatar
zs嵩 committed
735 736 737
      customerServiceList: [],
      countryList: [],
      creditList: [],
yujinyao's avatar
yujinyao committed
738
      selectCustomerList: [],
yujinyao's avatar
yujinyao committed
739 740 741 742 743 744 745 746 747
      enterOpenSeaTime: [],
      customerServiceConfirmedTime: [],
      firstDealTime: [],
      customerSelect: [],
      recommended: [],
      getNodeLists: [],
      allSimplList: [],
      weightYearly: {
        key: "eqNumberKey",
zs嵩's avatar
zs嵩 committed
748
        value: ""
yujinyao's avatar
yujinyao committed
749 750 751
      },
      numYearly: {
        key: "eqNumberKey",
zs嵩's avatar
zs嵩 committed
752
        value: ""
yujinyao's avatar
yujinyao committed
753 754 755 756
      },
      productTypeList: [],
      productList: [],
      competitorList: [],
zs嵩's avatar
zs嵩 committed
757 758
      deptList: []
    }
lanbaoming's avatar
lanbaoming committed
759 760
  },
  created() {
zs嵩's avatar
zs嵩 committed
761 762
    this.getList()
    getCreditPage({ page: 1, rows: 999 }).then((r) => {
lanbaoming's avatar
lanbaoming committed
763 764 765
      this.creditList = r.data.list
    })
    // 获得客服人员列表
zs嵩's avatar
zs嵩 committed
766 767
    listServiceUser().then((response) => {
      this.serviceStaffOptions = response.data
lanbaoming's avatar
lanbaoming committed
768
    })
zs嵩's avatar
zs嵩 committed
769 770
    listServiceUser().then((r) => {
      this.customerServiceList = r.data
lanbaoming's avatar
lanbaoming committed
771
    })
zs嵩's avatar
zs嵩 committed
772
    getCountryListAll().then((r) => {
lanbaoming's avatar
lanbaoming committed
773 774
      this.countryList = r.data
    })
zs嵩's avatar
zs嵩 committed
775
    this.getCustomerSelect()
yujinyao's avatar
yujinyao committed
776
    getNodeList().then((r) => {
zs嵩's avatar
zs嵩 committed
777 778
      this.getNodeLists = r.data
    })
yujinyao's avatar
yujinyao committed
779
    listAllSimpl().then((r) => {
zs嵩's avatar
zs嵩 committed
780 781
      this.allSimplList = r.data
    })
yujinyao's avatar
yujinyao committed
782
    getProductTypeList().then((r) => {
zs嵩's avatar
zs嵩 committed
783 784
      this.productTypeList = r.data
    })
yujinyao's avatar
yujinyao committed
785
    competitorListAll().then((r) => {
zs嵩's avatar
zs嵩 committed
786
      this.competitorList = r.data
yujinyao's avatar
yujinyao committed
787
    })
zs嵩's avatar
zs嵩 committed
788
    listMySimpleDepts().then((response) => {
yujinyao's avatar
yujinyao committed
789 790
      this.deptList = response.data
    })
lanbaoming's avatar
lanbaoming committed
791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806
  },
  methods: {
    // recovery(row){
    //   console.log(row,'row')
    //   this.$confirm(this.$t('是否要回收当前{name}',row), '提示', {
    //     confirmButtonText: '确定',
    //     cancelButtonText: '取消',
    //     type: 'warning'
    //   }).then(() => {
    //     recycleUnconfirmedCustomer({customerId:row.id}).then(r =>{
    //       this.$message.success(this.$t('回收成功。'))
    //     })
    //   }).catch(() => {
    //     this.$message.info(this.$t('已取消'))
    //   });
    // },
807 808 809 810 811 812
    handleCustomerFollowLink(row) {
      this.customerFollowVisible = true
      this.$nextTick((_) => {
        this.$refs["customerFollow"].handleView(row)
      })
    },
lanbaoming's avatar
lanbaoming committed
813 814 815 816 817
    getDictDatas,
    countryFormatter(row, column, cellValue) {
      const country = this.countryList.find((e) => e.id === cellValue)
      return this.isChinese ? country?.nameZh : country?.nameEn
    },
zs嵩's avatar
zs嵩 committed
818 819
    handleSelectionChange(val) {
      this.selectCustomerList = val.map((i) => i.id)
yujinyao's avatar
yujinyao committed
820
    },
lanbaoming's avatar
lanbaoming committed
821 822
    /** 查询列表 */
    getList() {
zs嵩's avatar
zs嵩 committed
823
      this.loading = true
lanbaoming's avatar
lanbaoming committed
824
      // 处理查询参数
zs嵩's avatar
zs嵩 committed
825
      let params = { ...this.queryParams, ...this.combinedQueryParams }
yujinyao's avatar
yujinyao committed
826
      // this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime', false);
lanbaoming's avatar
lanbaoming committed
827
      // 执行查询
zs嵩's avatar
zs嵩 committed
828 829 830 831 832
      getWaitForConfirmList(params).then((response) => {
        this.list = response.data.list
        this.total = response.data.total
        this.loading = false
      })
lanbaoming's avatar
lanbaoming committed
833
    },
yujinyao's avatar
yujinyao committed
834
    remoteMethod(val) {
zs嵩's avatar
zs嵩 committed
835
      this.getCustomerSelect(val)
yujinyao's avatar
yujinyao committed
836 837
    },
    getCustomerSelect(val = "") {
zs嵩's avatar
zs嵩 committed
838 839 840
      getCustomerSelect({ pageNo: 1, pageSize: 30, searchKey: val }).then((res) => {
        this.customerSelect = res.data.list
      })
yujinyao's avatar
yujinyao committed
841 842
    },
    handleSelectProductType(val) {
yujinyao's avatar
yujinyao committed
843 844 845 846
      if (val && val.length >= 1) {
        this.queryParams.productIds = []
        getProductList({ typeIds: val }).then((r) => {
          this.productList = r.data
zs嵩's avatar
zs嵩 committed
847
        })
yujinyao's avatar
yujinyao committed
848 849 850 851
      } else {
        this.queryParams.productIds = []
        this.productList = []
      }
yujinyao's avatar
yujinyao committed
852
    },
lanbaoming's avatar
lanbaoming committed
853 854
    /** 取消按钮 */
    cancel() {
zs嵩's avatar
zs嵩 committed
855 856
      this.open = false
      this.reset()
lanbaoming's avatar
lanbaoming committed
857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892
    },
    /** 表单重置 */
    reset() {
      this.form = {
        id: undefined,
        number: undefined,
        name: undefined,
        level: undefined,
        country: undefined,
        type: undefined,
        agentId: undefined,
        company: undefined,
        address: undefined,
        productType: undefined,
        productId: undefined,
        pickupPoint: undefined,
        memberId: undefined,
        birthday: undefined,
        balance: undefined,
        source: undefined,
        picture: undefined,
        customerService: undefined,
        promoter: undefined,
        status: undefined,
        founder: undefined,
        department: undefined,
        invoiceTitle: undefined,
        licenseNumber: undefined,
        bank: undefined,
        bankNumber: undefined,
        project: undefined,
        billingAddress: undefined,
        billingTell: undefined,
        taxRate: undefined,
        remarks: undefined,
        arrivalConfirm: undefined,
zs嵩's avatar
zs嵩 committed
893 894 895
        weightUnit: undefined
      }
      this.resetForm("form")
lanbaoming's avatar
lanbaoming committed
896 897 898 899 900 901
    },
    /** 表单重置 */
    resetHandOverForm() {
      this.form = {
        customerIdList: undefined,
        customerServiceId: undefined
zs嵩's avatar
zs嵩 committed
902 903
      }
      this.resetForm("handOverForm")
lanbaoming's avatar
lanbaoming committed
904 905 906
    },
    /** 搜索按钮操作 */
    handleQuery() {
zs嵩's avatar
zs嵩 committed
907 908
      this.queryParams.pageNo = 1
      this.getList()
lanbaoming's avatar
lanbaoming committed
909 910 911
    },
    /** 重置按钮操作 */
    resetQuery() {
zs嵩's avatar
zs嵩 committed
912
      this.dateRangeCreateTime = []
yujinyao's avatar
yujinyao committed
913 914 915
      this.enterOpenSeaTime = []
      this.customerServiceConfirmedTime = []
      this.firstDealTime = []
zs嵩's avatar
zs嵩 committed
916
      this.resetForm("queryForm")
lanbaoming's avatar
lanbaoming committed
917 918
      this.queryParams = {
        pageNo: 1,
zs嵩's avatar
zs嵩 committed
919 920 921 922 923
        pageSize: 10
      }
      this.weightYearly.value = ""
      this.numYearly.value = ""
      this.handleQuery()
lanbaoming's avatar
lanbaoming committed
924 925 926
    },
    /** 新增按钮操作 */
    handleAdd() {
zs嵩's avatar
zs嵩 committed
927 928 929
      this.reset()
      this.open = true
      this.title = this.$t("添加客户")
lanbaoming's avatar
lanbaoming committed
930 931 932
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
zs嵩's avatar
zs嵩 committed
933 934 935
      this.reset()
      const id = row.id
      this.$router.push({ path: "/customer/perfect/" + id, query: { isCustomerServiceConfirmed: true } })
lanbaoming's avatar
lanbaoming committed
936 937 938 939 940 941 942 943
      // getCustomer(id).then(response => {
      //   this.form = response.data;
      //   this.open = true;
      //   this.title = this.$t("完善客户");
      // });
    },
    /** 修改按钮操作 */
    handleConfirmService(row) {
zs嵩's avatar
zs嵩 committed
944 945 946 947 948 949 950 951 952 953 954
      const id = row.id
      this.$modal
        .confirm(this.$t("是否确认接收客户") + '["' + row.name + '"]?')
        .then(function () {
          return confirm({ customerId: id })
        })
        .then(() => {
          this.getList()
          this.$modal.msgSuccess(this.$t("接收成功"))
        })
        .catch(() => {})
lanbaoming's avatar
lanbaoming committed
955 956 957 958
    },
    /** 修改按钮操作 */
    handOver(row) {
      // this.resetHandOverForm();
zs嵩's avatar
zs嵩 committed
959
      this.openHandOver = true
lanbaoming's avatar
lanbaoming committed
960

zs嵩's avatar
zs嵩 committed
961
      this.handOverForm.customerIdList = [row.id]
lanbaoming's avatar
lanbaoming committed
962 963 964 965
    },

    /** 提交按钮 */
    submitForm() {
zs嵩's avatar
zs嵩 committed
966
      this.$refs["form"].validate((valid) => {
lanbaoming's avatar
lanbaoming committed
967
        if (!valid) {
zs嵩's avatar
zs嵩 committed
968
          return
lanbaoming's avatar
lanbaoming committed
969 970 971
        }
        // 修改的提交
        if (this.form.id != null) {
zs嵩's avatar
zs嵩 committed
972 973 974 975 976 977
          updateCustomer(this.form).then((response) => {
            this.$modal.msgSuccess(this.$t("修改成功"))
            this.open = false
            this.getList()
          })
          return
lanbaoming's avatar
lanbaoming committed
978
        }
zs嵩's avatar
zs嵩 committed
979
      })
lanbaoming's avatar
lanbaoming committed
980 981 982
    },
    /** 删除按钮操作 */
    handleDelete(row) {
zs嵩's avatar
zs嵩 committed
983 984 985 986 987 988 989 990 991 992 993
      const id = row.id
      this.$modal
        .confirm(this.$t('是否确认删除客户编号为"') + id + this.$t('"的数据项?'))
        .then(function () {
          return deleteCustomer(id)
        })
        .then(() => {
          this.getList()
          this.$modal.msgSuccess(this.$t("删除成功"))
        })
        .catch(() => {})
lanbaoming's avatar
lanbaoming committed
994 995 996 997 998 999 1000 1001 1002
    },
    /** 导出按钮操作 */
    handleExport() {
      // 处理查询参数
      // let params = {...this.queryParams};
      // params.pageNo = undefined;
      // params.pageSize = undefined;
      // this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
      // 执行导出
zs嵩's avatar
zs嵩 committed
1003 1004 1005 1006 1007 1008
      this.$modal
        .confirm(this.$t("是否确认导出我的待接受客户数据项?"))
        .then(() => {
          waiteConfirEexportExcel().then(() => {
            this.$message.success(this.$t("已加入导出队列,请稍后在下载日志中下载"))
          })
lanbaoming's avatar
lanbaoming committed
1009
        })
zs嵩's avatar
zs嵩 committed
1010
        .catch(() => {})
lanbaoming's avatar
lanbaoming committed
1011 1012 1013 1014 1015
    },

    /** 提交按钮 */
    submitHandOverForm() {
      // 移交的提交
zs嵩's avatar
zs嵩 committed
1016 1017 1018 1019 1020
      handOverCustomer(this.handOverForm).then((response) => {
        this.$modal.msgSuccess(this.$t("移交成功"))
        this.openHandOver = false
        this.getList()
      })
lanbaoming's avatar
lanbaoming committed
1021 1022 1023 1024
    },

    /** 取消按钮 */
    cancelHandOver() {
zs嵩's avatar
zs嵩 committed
1025
      this.openHandOver = false
lanbaoming's avatar
lanbaoming committed
1026 1027
      this.handOverForm = {
        customerId: undefined,
zs嵩's avatar
zs嵩 committed
1028 1029
        customerIdList: undefined
      }
lanbaoming's avatar
lanbaoming committed
1030
    },
yujinyao's avatar
yujinyao committed
1031
    handleSetting(row) {
zs嵩's avatar
zs嵩 committed
1032 1033 1034
      this.$refs["customerSetting"].dialogVisible = true
      this.$nextTick((_) => {
        this.$refs["customerSetting"].init(row.id)
yujinyao's avatar
yujinyao committed
1035
      })
余金瑶's avatar
余金瑶 committed
1036 1037 1038
    },
    getBusiCountryNames(ids) {
      if (ids) {
zs嵩's avatar
zs嵩 committed
1039
        const idsArr = ids.split(",")
余金瑶's avatar
余金瑶 committed
1040
        const strArr = []
zs嵩's avatar
zs嵩 committed
1041
        this.countryList.forEach((item) => {
余金瑶's avatar
余金瑶 committed
1042 1043 1044 1045
          if (idsArr.includes(item.id.toString())) {
            strArr.push(this.isChinese ? item.nameZh : item.nameEn)
          }
        })
zs嵩's avatar
zs嵩 committed
1046
        return strArr.length > 0 ? strArr.join(",") : null
余金瑶's avatar
余金瑶 committed
1047 1048 1049 1050 1051 1052
      } else {
        return null
      }
    },
    getPickupPointNames(ids) {
      if (ids) {
zs嵩's avatar
zs嵩 committed
1053
        const idsArr = ids.split(",")
余金瑶's avatar
余金瑶 committed
1054
        const strArr = []
zs嵩's avatar
zs嵩 committed
1055
        this.getNodeLists.forEach((item) => {
余金瑶's avatar
余金瑶 committed
1056 1057 1058 1059
          if (idsArr.includes(item.id.toString())) {
            strArr.push(this.isChinese ? item.titleZh : item.titleEn)
          }
        })
zs嵩's avatar
zs嵩 committed
1060
        return strArr.length > 0 ? strArr.join(",") : null
余金瑶's avatar
余金瑶 committed
1061 1062 1063 1064 1065 1066
      } else {
        return null
      }
    },
    getProductTypeNames(ids) {
      if (ids) {
zs嵩's avatar
zs嵩 committed
1067
        const idsArr = ids.toString().split(",")
余金瑶's avatar
余金瑶 committed
1068
        const strArr = []
zs嵩's avatar
zs嵩 committed
1069
        this.productTypeList.forEach((item) => {
余金瑶's avatar
余金瑶 committed
1070 1071 1072 1073
          if (idsArr.includes(item.id.toString())) {
            strArr.push(this.isChinese ? item.titleZh : item.titleEn)
          }
        })
zs嵩's avatar
zs嵩 committed
1074
        return strArr.length > 0 ? strArr.join(",") : null
余金瑶's avatar
余金瑶 committed
1075 1076 1077 1078 1079 1080
      } else {
        return null
      }
    },
    getPromoterName(id) {
      if (id) {
zs嵩's avatar
zs嵩 committed
1081 1082
        let strName = ""
        for (const item of this.customerSelectFn) {
余金瑶's avatar
余金瑶 committed
1083 1084 1085 1086 1087 1088 1089 1090 1091
          if (item.id == id) {
            strName = item.name
            break
          }
        }
        return strName
      } else {
        return null
      }
yujinyao's avatar
yujinyao committed
1092
    }
lanbaoming's avatar
lanbaoming committed
1093
  }
zs嵩's avatar
zs嵩 committed
1094
}
lanbaoming's avatar
lanbaoming committed
1095
</script>