Commit fae04a69 authored by yujinyao's avatar yujinyao

客户BUG

parent eb9e7f83
......@@ -92,3 +92,10 @@ export function editCustomerFollow(data) {
})
}
export function exportCustomerFollow() {
return request({
url: '/customer/followup/export-excel',
method: 'get'
})
}
......@@ -4708,5 +4708,6 @@
"增加计划": "add plan",
"提货状态": "pickup status",
"未提货": "not pickup",
"部分提货": "portion pickup"
"部分提货": "portion pickup",
"是否确认导出客户跟进记录数据项?": "Are you sure to export all customer follow-up record data items?"
}
......@@ -36,7 +36,7 @@
-->
<el-col :span="12">
<el-form-item :label="$t('跟进时间')" required>
<el-date-picker v-model="form.followTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss" :placeholder="$t('请选择')"></el-date-picker>
<el-date-picker v-model="form.followTime" type="datetime" :placeholder="$t('请选择')"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
......@@ -94,13 +94,13 @@
</el-col>
<el-col :span="12">
<el-form-item :label="$t('下次跟进时间')">
<el-date-picker v-model="form.nextTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss" :placeholder="$t('请选择')" :picker-options="pickerOptions">
<el-date-picker v-model="form.nextTime" type="datetime" :placeholder="$t('请选择')" :picker-options="pickerOptions">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('创建人')" prop="founder">
<el-select v-model="form.creatorName" disabled>
<el-select v-model="form.creatorName" disabled :placeholder="$t('请选择')">
<el-option v-for="item in allSimplList" :key="item.id" :label="item.nickname" :value="item.id">
</el-option>
</el-select>
......@@ -108,7 +108,7 @@
</el-col>
<el-col :span="12">
<el-form-item :label="$t('创建时间')" prop="createTime">
<el-date-picker v-model="form.createTime" type="datetime" value-format="timestamp" disabled :placeholder="$t('选择创建时间')">
<el-date-picker v-model="form.createTime" type="datetime" disabled :placeholder="$t('请选择')">
</el-date-picker>
</el-form-item>
</el-col>
......@@ -122,7 +122,7 @@
</el-col>
<el-col :span="12">
<el-form-item :label="$t('最后更新时间')">
<el-date-picker v-model="form.updateTime" type="datetime" value-format="timestamp" disabled>
<el-date-picker v-model="form.updateTime" type="datetime" disabled :placeholder="$t('请选择')">
</el-date-picker>
</el-form-item>
</el-col>
......@@ -167,6 +167,7 @@ import {
parseTime
} from '@/utils/ruoyi'
import FileUpload from "@/components/FileUpload";
import {formatDate} from "@/utils/index";
export default {
/**
* 客户跟进
......@@ -340,9 +341,11 @@ export default {
let func = this.form.id ? editCustomerFollow : addCustomerFollow
func({
...this.form,
followTime: this.form.followTime ? formatDate(this.form.followTime) : undefined,
nextTime: this.form.nextTime ? formatDate(this.form.nextTime) : undefined,
status
}).then(r => {
this.$message.info(this.$t("操作成功"))
this.$message.success(this.$t("操作成功"))
this.$emit('refresh')
this.customerFollowClose()
})
......
......@@ -21,30 +21,40 @@
<el-radio v-model="offerId" :label="row.offerId">&nbsp;</el-radio>
</template>
</el-table-column>
<el-table-column :label="$t('报价单号')" align="left" prop="number" width="200px">
<el-table-column :label="$t('报价单号')" min-width="160px">
<template slot-scope="{row}">
<el-link type="primary" @click.native="$router.push('/offer/detail?offerId=' + row.offerId)">{{row.number}}</el-link>
</template>
</el-table-column>
<el-table-column :label="$t('订单编号')" align="left" prop="orderNo" />
<el-table-column :label="$t('客户名称')" align="left" prop="relationName" />
<el-table-column :label="$t('目的地')" align="center" prop="objectiveName" />
<el-table-column :label="$t('销售阶段')" align="left" width="180">
<el-table-column :label="$t('销售阶段')" min-width="120">
<template slot-scope="{row}">
<dict-tag :type="DICT_TYPE.ECW_OFFER_STATUS" :value="row.status" />
</template>
</el-table-column>
<el-table-column :label="$t('预计结束时间')" align="left">
<el-table-column :label="$t('订单编号')" min-width="150px">
<template slot-scope="{row}">
<el-link type="primary" @click.native="$router.push('/order/detail?orderId=' + row.orderId)">{{row.orderNo}}</el-link>
</template>
</el-table-column>
<el-table-column :label="$t('客户编号')" align="center" min-width="100">
</el-table-column>
<el-table-column :label="$t('客户名称')" align="center" prop="relationName" min-width="100" />
<el-table-column :label="$t('联系方式')">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.stopTime, "{y}-{m}-{d}") }}</span>
+{{ scope.row.relationAreaCode }}{{ scope.row.relationPhone }}
</template>
</el-table-column>
<el-table-column :label="$t('运输方式')" align="left">
<el-table-column :label="$t('运输方式')">
<template slot-scope="scope" >
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="scope.row.transportId" />
</template>
</el-table-column>
<el-table-column :label="$t('预计销售额')" align="left" prop="estCost">
<el-table-column :label="$t('渠道')" align="center" min-width="120">
</el-table-column>
<el-table-column :label="$t('始发地')" align="center" min-width="120">
</el-table-column>
<el-table-column :label="$t('目的地')" align="center" prop="objectiveName" min-width="120" />
<el-table-column :label="$t('预计销售额')" min-width="160">
<template slot-scope="{row}">
<div class="" v-for="(item, feeIndex) in row.estCostVO.feeDtoList" :key="feeIndex">
<dict-tag :type="DICT_TYPE.ECW_COST_FEE_TYPE" :value="item.feeType" />
......@@ -52,9 +62,8 @@
</div>
</template>
</el-table-column>
<el-table-column :label="$t('客户经理')" align="left" prop="creatorName">
</el-table-column>
<el-table-column :label="$t('创建时间')" align="center">
<el-table-column :label="$t('客户经理')" prop="creatorName" align="center" min-width="100" />
<el-table-column :label="$t('创建时间')" align="center" min-width="160">
<template slot-scope="scope">
{{ parseTime(scope.row.createTime) }}
</template>
......
......@@ -275,7 +275,6 @@
<el-date-picker
v-model="form.customerServiceConfirmedTime"
type="datetime"
value-format="timestamp"
disabled
:placeholder="$t('请选择')"
>
......@@ -1693,7 +1692,7 @@ export default {
};
this.form.createTime = new Date().getTime();
this.form.updateTime = new Date().getTime();
this.resetForm("form");
// this.resetForm("form");
},
getCustomer(id) {
return getCustomer(id).then((response) => {
......
......@@ -637,6 +637,7 @@
:data="list"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" fixed></el-table-column>
<el-table-column :label="$t('客户编号')" align="center" fixed>
<template v-slot="{ row }">
<router-link :to="`/customer/query/${row.id}`" class="link-type">
......@@ -1726,6 +1727,11 @@ export default {
this.deptList = response.data
})
},
updated() {
this.$nextTick(() => {
this.$refs.multipleTable.doLayout()
})
},
activated() {
this.getList();
},
......
......@@ -301,9 +301,12 @@
>
</el-table-column>
<el-table-column
prop="number"
:label="$t('报价单号')"
width="160px"
>
<template slot-scope="{row}">
<el-link type="primary" @click.native="$router.push('/offer/detail?offerId=' + row.offerId)">{{row.number}}</el-link>
</template>
</el-table-column>
<el-table-column
prop="orderNo"
......@@ -353,6 +356,16 @@
{{STATUS[row.status]}}
</template>
</el-table-column>
<el-table-column
:label="$t('预计销售额')"
>
<template slot-scope="{row}" v-if="row.estCostVO">
<div class="" v-for="(item, feeIndex) in row.estCostVO.feeDtoList" :key="feeIndex">
<dict-tag :type="DICT_TYPE.ECW_COST_FEE_TYPE" :value="item.feeType" />
{{item.amount}} {{currencyMap[item.currencyId]}}
</div>
</template>
</el-table-column>
<el-table-column
prop="stopTime"
:label="$t('预计结束时间')"
......@@ -452,16 +465,19 @@
<el-button type="primary" @click="()=>{
followFrom = { pageNo:1,pageSize:10}; getCustomerFollowList();
}">{{$t('重置')}}</el-button>
<el-button type="success" @click="customerFollowFn('follow')">{{$t('新增')}}</el-button>
<el-button type="success" @click="customerFollowFn('follow')" v-hasPermi="['ecw:customer:follow-create']">{{$t('新增')}}</el-button>
<el-button type="warning" @click="handleExport" v-hasPermi="['ecw:customer:follow-export']">{{$t('导出')}}</el-button>
</el-form-item>
</el-form>
</div>
<el-table :data="customerFollowList" style="width: 100%">
<el-table-column prop="number" :label="$t('编号')"> </el-table-column>
<el-table-column prop="followType" :label="$t('跟进类型')" :formatter="(row, column, cellValue) => getDictDataLabel(DICT_TYPE.CUSTOMER_FOLLOWUP_TYPE, cellValue)"></el-table-column>
<el-table-column prop="offerId" :label="$t('报价单号')"></el-table-column>
<el-table-column prop="offerNumber" :label="$t('报价单号')"></el-table-column>
<el-table-column prop="followTime" :label="$t('跟进时间')" :formatter="(row, column, cellValue) => parseTime(cellValue)"></el-table-column>
<el-table-column prop="customerNumber" :label="$t('客户编号')"></el-table-column>
<el-table-column prop="contactName" :label="$t('联系人')"></el-table-column>
<el-table-column :label="$t('联系方式')"></el-table-column>
<el-table-column prop="followUserName" :label="$t('客户经理')"></el-table-column>
<el-table-column prop="followMethod" :label="$t('跟进方式')" :formatter="(row, column, cellValue) => getDictDataLabel(DICT_TYPE.CUSTOMER_FOLLOWUP_METHOD, cellValue)">
</el-table-column>
......@@ -537,6 +553,53 @@
<pagination v-show="infoListReceiptList.length" :total="infoListReceiptTotal" :page.sync="infoListReceiptFrom.pageNo" :limit.sync="infoListReceiptFrom.pageSize"
@pagination="infoListReceiptFn"/>
</el-tab-pane>
<el-tab-pane name="empower" :label="$t('品牌授权')">
<el-table border style="width:100%" :data="brandAuthorizationList">
<el-table-column type="index" :prop="$t('序号')"></el-table-column>
<el-table-column :label="$t('中文标题')" prop="titleZh" ></el-table-column>
<el-table-column prop="titleEn" :label="$t('英文标题')"></el-table-column>
<el-table-column :label="$t('有无备案')">
<template v-slot="{row}">
<dict-tag :type="DICT_TYPE.BRAND_REG_TYPE" :value="row.filing" />
</template>
</el-table-column>
<el-table-column :label="$t('授权开始')">
<template v-slot="{row}">
{{parseTime(row.startTime)}}
</template>
</el-table-column>
<el-table-column :label="$t('授权结束')">
<template v-slot="{row}">
{{parseTime(row.endTime)}}
</template>
</el-table-column>
<el-table-column :label="$t('授权证明')">
<template v-slot="{row}">
<div v-if="!!row.fileUrl && row.fileUrl.length > 0">
<span v-for="(item, index) in (row.fileUrl||'').split(',')">
<a :href="item" target="_blank">{{$t('附件')}}{{ index + 1 }}</a>,
</span>
</div>
</template>
</el-table-column>
<el-table-column
prop="feeScale"
:formatter="(row) => getDictDataLabel(DICT_TYPE.BRAND_CUSTOMER_CHARGING_MODEL, row.feeScale)"
:label="$t('收费标准')">
</el-table-column>
<el-table-column
prop="createUsername"
:label="$t('添加人')">
</el-table-column>
<el-table-column :label="$t('创建时间')">
<template v-slot="{row}">
{{parseTime(row.createTime)}}
</template>
</el-table-column>
</el-table>
<pagination v-show="brandAuthorizationTotal.length" :total="brandAuthorizationTotal" :page.sync="brandAuthorizationFrom.pageNo" :limit.sync="brandAuthorizationFrom.pageSize"
@pagination="getBrankByCustomerList"/>
</el-tab-pane>
<el-tab-pane name="deliver" :label="$t('发货评估')">
<el-descriptions :column="2">
<el-descriptions-item :label="$t('客户类别')">
......@@ -604,54 +667,6 @@
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane name="empower" :label="$t('品牌授权')">
<el-table border style="width:100%" :data="brandAuthorizationList">
<el-table-column type="index" :prop="$t('序号')"></el-table-column>
<el-table-column :label="$t('中文标题')" prop="titleZh" ></el-table-column>
<el-table-column prop="titleEn" :label="$t('英文标题')"></el-table-column>
<el-table-column :label="$t('有无备案')">
<template v-slot="{row}">
<dict-tag :type="DICT_TYPE.BRAND_REG_TYPE" :value="row.filing" />
</template>
</el-table-column>
<el-table-column :label="$t('授权开始')">
<template v-slot="{row}">
{{parseTime(row.startTime)}}
</template>
</el-table-column>
<el-table-column :label="$t('授权结束')">
<template v-slot="{row}">
{{parseTime(row.endTime)}}
</template>
</el-table-column>
<el-table-column :label="$t('授权证明')">
<template v-slot="{row}">
<div v-if="!!row.fileUrl && row.fileUrl.length > 0">
<span v-for="(item, index) in (row.fileUrl||'').split(',')">
<a :href="item" target="_blank">{{$t('附件')}}{{ index + 1 }}</a>,
</span>
</div>
</template>
</el-table-column>
<el-table-column
prop="feeScale"
:formatter="(row) => getDictDataLabel(DICT_TYPE.BRAND_CUSTOMER_CHARGING_MODEL, row.feeScale)"
:label="$t('收费标准')">
</el-table-column>
<el-table-column
prop="createUsername"
:label="$t('添加人')">
</el-table-column>
<el-table-column :label="$t('创建时间')">
<template v-slot="{row}">
{{parseTime(row.createTime)}}
</template>
</el-table-column>
</el-table>
<pagination v-show="brandAuthorizationTotal.length" :total="brandAuthorizationTotal" :page.sync="brandAuthorizationFrom.pageNo" :limit.sync="brandAuthorizationFrom.pageSize"
@pagination="getBrankByCustomerList"/>
</el-tab-pane>
<el-tab-pane name="credit" :label="$t('信用日志')">
<el-card class="box-card">
<div slot="header" class="clearfix">
......@@ -834,13 +849,12 @@ import {
levelLogPage,
customerCreditLogPage,
infoListOrderPage,
infoListOfferPage,
orderStatistics,
creditLogCreate,
creditScoreStatistic,
infoListReceiptPage, memberUserList, deleteCustomer,
} from '@/api/ecw/customer'
import { getOfferPage as infoListOfferPage } from '@/api/ecw/offer'
import { DICT_TYPE, getDictDataLabel, getDictDatas2 } from '@/utils/dict'
import { getProductTypeList } from '@/api/ecw/productType'
import { getNodeList } from '@/api/ecw/node'
......@@ -861,7 +875,8 @@ import { getListTree } from "@/api/ecw/region";
import { getWarehouseList } from "@/api/ecw/warehouse";
import { deleteOffer, cancel, recovery } from "@/api/ecw/offer";
import {
getCustomerFollowList
getCustomerFollowList,
exportCustomerFollow
} from "@/api/ecw/customerFollow"
export default {
name: 'query',
......@@ -1143,7 +1158,8 @@ export default {
followTime: [],
nextTime: [],
customerFollowTotal: 0,
customerFollowList: []
customerFollowList: [],
currencyList: [],
}
},
computed: {
......@@ -1176,7 +1192,14 @@ export default {
else return (this.getDictDatas(DICT_TYPE.CUSTOMER_CREDIT_RULE_TYPE).find(i => i.value === val)||{}).labelEn
}
}
}
},
currencyMap(){
let map = {}
this.currencyList.forEach(item => {
map[item.id] = this.$l(item, 'title')
})
return map
},
},
filters: {
deliveryRate(pickNum, sumNum) {
......@@ -1278,15 +1301,15 @@ export default {
let queryParams = {}
//目的国
if (this.destCountryId != null && this.destCountryId != "") {
queryParams.destCountryId = this.destCountryId;
queryParams.destCountryIds = this.destCountryId;
}
//目的城市
if (this.objectiveId != null && this.objectiveId != "") {
queryParams.objectiveId = this.objectiveId;
queryParams.destCountryIds = this.objectiveId;
}
//目的仓
if (this.destWarehouseId != null && this.destWarehouseId != "") {
queryParams.destWarehouseId = this.destWarehouseId;
queryParams.destWarehouseIds = this.destWarehouseId;
}
infoListOfferPage({...this.infoListOfferFrom,customerId:this.id,...queryParams}).then(r => {
this.infoListOfferList = r.data.list;
......@@ -1420,24 +1443,35 @@ export default {
}
return warehouseName
},
},
cancel(id){
this.doAction(this.$t('确定要取消此报价单么?'), cancel, id);
},
recovery(id){
this.doAction(this.$t('确定要恢复此报价单么?'), recovery, id);
},
deleteOffer(id){
this.doAction(this.$t('确定要删除此报价单么?'), deleteOffer, id);
},
doAction(tips, action, id){
this.$confirm(tips).then(res => {
return action(id)
})
.then(() => {
this.$message.success('操作成功')
this.handleQuery()
})
cancel(id){
this.doAction(this.$t('确定要取消此报价单么?'), cancel, id);
},
recovery(id){
this.doAction(this.$t('确定要恢复此报价单么?'), recovery, id);
},
deleteOffer(id){
this.doAction(this.$t('确定要删除此报价单么?'), deleteOffer, id);
},
doAction(tips, action, id){
this.$confirm(tips).then(res => {
return action(id)
})
.then(() => {
this.$message.success('操作成功')
this.handleQuery()
})
},
/** 导出按钮操作 */
handleExport() {
// 执行导出
this.$modal.confirm(this.$t('是否确认导出客户跟进记录数据项?')).then(() => {
exportCustomerFollow().then((r) => {
this.$message.success(
this.$t("已加入导出队列,请稍后在下载日志中下载")
);
});
})
},
}
}
</script>
......@@ -397,7 +397,8 @@
<!-- 列表 -->
<el-table ref="multipleTable" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
<el-table-column :label="$t('客户编号')" align="center" prop="number" >
<el-table-column type="selection" width="55" fixed></el-table-column>
<el-table-column :label="$t('客户编号')" align="center" prop="number">
<template v-slot="{row}">
{{row.number}}
</template>
......@@ -725,6 +726,11 @@ export default {
this.deptList = response.data
})
},
updated() {
this.$nextTick(() => {
this.$refs.multipleTable.doLayout()
})
},
methods: {
countryFormatter(row, column, cellValue) {
const country = this.countryList.find((e) => e.id === cellValue)
......
......@@ -47,6 +47,7 @@
<el-form-item :label="$t('客户类别')" prop="level">
<dict-selector :type="DICT_TYPE.CUSTOMER_TYPE" multiple v-model="queryParams.type" @change="handleQuery"></dict-selector>
</el-form-item>
<!--
<el-form-item :label="$t('客户经理')" prop="customerService">
<el-select
clearable
......@@ -63,6 +64,7 @@
/>
</el-select>
</el-form-item>
-->
<el-form-item :label="$t('客户来源')" prop="source">
<el-select clearable v-model="queryParams.source" multiple :placeholder="$t('请选择客户来源')" size="small" @change="handleQuery">
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_SOURCE)"
......@@ -437,6 +439,7 @@
:data="list"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" fixed></el-table-column>
<el-table-column :label="$t('客户编号')" align="center" fixed>
<template v-slot="{ row }">
<router-link :to="`/customer/query/${row.id}`" class="link-type">
......@@ -963,6 +966,11 @@ export default {
this.competitorList = r.data;
})
},
updated() {
this.$nextTick(() => {
this.$refs.multipleTable.doLayout()
})
},
methods: {
handleSelectionChange(val) {
this.selectCustomerList = val.map((i) => i.id);
......
......@@ -514,10 +514,12 @@
<!-- 列表 -->
<el-table
ref="multipleTable"
v-loading="loading"
:data="list"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" fixed></el-table-column>
<el-table-column :label="$t('客户编号')" align="center" fixed>
<template v-slot="{ row }">
<router-link :to="`/customer/query/${row.id}`" class="link-type">
......@@ -944,6 +946,11 @@ export default {
this.deptList = response.data
})
},
updated() {
this.$nextTick(() => {
this.$refs.multipleTable.doLayout()
})
},
computed: {
isChinese() {
return this.$i18n.locale === "zh_CN";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment