Commit 39c63e34 authored by 1483922988@qq.com's avatar 1483922988@qq.com

客户编辑产品类型多选,主要竞争对手其他回显,客户跟进记录,报价单相关

parent d625d224
import request from '@/utils/request' import request from "@/utils/request"
// 创建跟进 // 创建跟进
export function createCustomerFollow(data) { export function createCustomerFollow(data) {
return request({ return request({
url: '/ecw/customer-follow/create', url: "/ecw/customer-follow/create",
method: 'post', method: "post",
data: data data: data
}) })
} }
...@@ -12,8 +12,8 @@ export function createCustomerFollow(data) { ...@@ -12,8 +12,8 @@ export function createCustomerFollow(data) {
// 更新跟进 // 更新跟进
export function updateCustomerFollow(data) { export function updateCustomerFollow(data) {
return request({ return request({
url: '/ecw/customer-follow/update', url: "/ecw/customer-follow/update",
method: 'put', method: "put",
data: data data: data
}) })
} }
...@@ -21,31 +21,31 @@ export function updateCustomerFollow(data) { ...@@ -21,31 +21,31 @@ export function updateCustomerFollow(data) {
// 删除跟进 // 删除跟进
export function deleteCustomerFollow(id) { export function deleteCustomerFollow(id) {
return request({ return request({
url: '/ecw/customer-follow/delete?id=' + id, url: "/ecw/customer-follow/delete?id=" + id,
method: 'delete' method: "delete"
}) })
} }
// 获得跟进 // 获得跟进
export function getCustomerFollow(id) { export function getCustomerFollow(id) {
return request({ return request({
url: '/ecw/customer-follow/get?id=' + id, url: "/ecw/customer-follow/get?id=" + id,
method: 'get' method: "get"
}) })
} }
// 获得跟进分页 // 获得跟进分页
export function getCustomerFollowPage(query) { export function getCustomerFollowPage(query) {
return request({ return request({
url: '/customer/detail/infoList/followPage', url: "/customer/detail/infoList/followPage",
method: 'get', method: "get",
params: query params: query
}) })
} }
export function getCustomerFollowPage2(query) { export function getCustomerFollowPage2(query) {
return request({ return request({
url: '/ecw/customer-follow/page', url: "/ecw/customer-follow/page",
method: 'get', method: "get",
params: query params: query
}) })
} }
...@@ -53,50 +53,56 @@ export function getCustomerFollowPage2(query) { ...@@ -53,50 +53,56 @@ export function getCustomerFollowPage2(query) {
// 导出跟进 Excel // 导出跟进 Excel
export function exportCustomerFollowExcel(query) { export function exportCustomerFollowExcel(query) {
return request({ return request({
url: '/ecw/customer-follow/export-excel', url: "/ecw/customer-follow/export-excel",
method: 'get', method: "get",
params: query, params: query,
responseType: 'blob' responseType: "blob"
}) })
} }
export function getCustomerFollowList(params) { export function getCustomerFollowList(params) {
return request({ return request({
url: '/customer/followup/page', url: "/customer/followup/page",
method: 'get', method: "get",
params params
}) })
} }
export function getCustomerFollowDetail(params) { export function getCustomerFollowDetail(params) {
return request({ return request({
url: '/customer/followup/get', url: "/customer/followup/get",
method: 'get', method: "get",
params params
}) })
} }
export function addCustomerFollow(data) { export function addCustomerFollow(data) {
return request({ return request({
url: '/customer/followup/create', url: "/customer/followup/create",
method: 'post', method: "post",
data data
}) })
} }
export function editCustomerFollow(data) { export function editCustomerFollow(data) {
return request({ return request({
url: '/customer/followup/update', url: "/customer/followup/update",
method: 'put', method: "put",
data data
}) })
} }
export function exportCustomerFollow(params) { export function exportCustomerFollow(params) {
return request({ return request({
url: '/customer/followup/export-excel', url: "/customer/followup/export-excel",
method: 'get', method: "get",
params params
}) })
} }
export function getFollowupNewNumber() {
return request({
url: "/customer/followup/getFollowupNewNumber",
method: "get"
})
}
<template> <template>
<div class="customer-follow"> <div class="customer-follow">
<el-dialog append-to-body :title="$t('客户跟进')" :visible.sync="customerFollow.dialogVisible" :before-close="customerFollowClose" width="900px"> <el-dialog append-to-body :title="$t('客户跟进')" :visible.sync="customerFollow.dialogVisible" :before-close="customerFollowClose" width="900px">
<el-form ref="customerFollowForm" :model="form" label-width="120px"> <el-form ref="customerFollowForm" :model="form" label-width="120px">
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('编号')" prop="number"> <el-form-item :label="$t('编号')" prop="number">
<el-input v-model="form.number" :placeholder="$t('请输入编号')" disabled /> <el-input v-model="form.number" :placeholder="$t('请输入编号')" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('跟进状态')"> <el-form-item :label="$t('跟进状态')">
<el-select v-model="form.status" :placeholder="$t('请选择')" disabled> <el-select v-model="form.status" :placeholder="$t('请选择')" disabled>
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_FOLLOWUP_STATUS)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" /> <el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_FOLLOWUP_STATUS)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('客户编号')"> <el-form-item :label="$t('客户编号')">
<el-input v-model="customerNumber" :placeholder="$t('请输入客户编号')" disabled /> <el-input v-model="form.customerNumber" :placeholder="$t('请输入客户编号')" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('跟进类型')" required> <el-form-item :label="$t('跟进类型')" required>
<el-select v-model="form.followType" clearable :placeholder="$t('请选择')" @change="handleFollowType" :disabled="isView"> <el-select v-model="form.followType" clearable :placeholder="$t('请选择')" @change="handleFollowType" :disabled="isView">
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_FOLLOWUP_TYPE)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" /> <el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_FOLLOWUP_TYPE)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- <el-col :span="12">
<el-col :span="13"> <el-form-item :label="$t('跟进时间')" required>
<el-form-item :label="$t('报价单')"> <el-date-picker v-model="form.followTime" clearable type="datetime" :placeholder="$t('请选择')" :disabled="isView" />
<el-input v-model="form.offerId" :placeholder="$t('请输入报价单')" disabled /> </el-form-item>
</el-form-item> </el-col>
</el-col> <el-col :span="12">
--> <el-form-item :label="$t('联系人')" required>
<el-col :span="12"> <el-select v-model="form.contactId" clearable :placeholder="$t('请选择')" :disabled="isView" @change="changeContactUser">
<el-form-item :label="$t('跟进时间')" required> <el-option v-for="(item, index) in customerContactsList" :key="index" :label="item.name" :value="item.id"> </el-option>
<el-date-picker v-model="form.followTime" clearable type="datetime" :placeholder="$t('请选择')" :disabled="isView" /> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('联系人')" required> <el-form-item :label="$t('客户经理')" required>
<el-select v-model="form.contactId" clearable :placeholder="$t('请选择')" :disabled="isView" @change="changeContactUser"> <el-select v-model="form.followUserId" clearable :placeholder="$t('请选择')" :disabled="isView">
<el-option v-for="(item, index) in customerContactsList" :key="index" :label="item.name" :value="item.id"> <el-option v-for="item in serviceUserList" :key="item.id" :label="item.nickname" :value="item.id"> </el-option>
</el-option> </el-select>
</el-select> </el-form-item>
</el-form-item> </el-col>
</el-col> <el-col :span="12">
<el-col :span="12"> <el-form-item :label="$t('跟进方式')" required>
<el-form-item :label="$t('客户经理')" required> <dict-selector ref="dictMethod" v-model="form.followMethod" clearable :disabled="isView" :type="DICT_TYPE.CUSTOMER_FOLLOWUP_METHOD"></dict-selector>
<el-select v-model="form.followUserId" clearable :placeholder="$t('请选择')" :disabled="isView"> </el-form-item>
<el-option v-for="item in serviceUserList" :key="item.id" :label="item.nickname" :value="item.id"> </el-col>
</el-option> <el-col :span="12">
</el-select> <el-form-item :label="$t('上一级跟进单')" prop="parentNumber">
</el-form-item> <el-input v-model="form.parentNumber" :placeholder="$t('请输入上一级跟进单')" disabled />
</el-col> </el-form-item>
<el-col :span="12"> </el-col>
<el-form-item :label="$t('跟进方式')" required> <el-col :span="12">
<dict-selector ref="dictMethod" v-model="form.followMethod" clearable :disabled="isView" :type="DICT_TYPE.CUSTOMER_FOLLOWUP_METHOD"></dict-selector> <el-form-item :label="$t('跟进结果')" prop="followMethod">
</el-form-item> <el-select v-model="form.resultType" clearable :placeholder="$t('请选择')" :disabled="isView">
</el-col> <el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_FOLLOWUP_RESULT_TYPE)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" />
<el-col :span="12"> </el-select>
<el-form-item :label="$t('上一级跟进单')" prop="parentNumber"> </el-form-item>
<el-input v-model="form.parentNumber" :placeholder="$t('请输入上一级跟进单')" disabled /> </el-col>
</el-form-item> <el-col :span="20">
</el-col> <el-form-item :label="$t('目的')" prop="purpose">
<el-col :span="12"> <el-input type="textarea" :rows="2" v-model="form.purpose" :placeholder="$t('请输入目的')" maxlength="200" show-word-limit :disabled="isView" />
<el-form-item :label="$t('跟进结果')" prop="followMethod"> </el-form-item>
<el-select v-model="form.resultType" clearable :placeholder="$t('请选择')" :disabled="isView"> </el-col>
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_FOLLOWUP_RESULT_TYPE)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" /> <el-col :span="20">
</el-select> <el-form-item :label="$t('跟进情况')">
</el-form-item> <el-input rows="3" class="text_style" type="textarea" v-model="form.feedback" maxlength="500" show-word-limit :disabled="isView" />
</el-col> </el-form-item>
<el-col :span="20"> </el-col>
<el-form-item :label="$t('目的')" prop="purpose"> <el-col :span="20">
<el-input type="textarea" :rows="2" v-model="form.purpose" :placeholder="$t('请输入目的')" maxlength="200" show-word-limit :disabled="isView" /> <el-form-item
</el-form-item> ><el-button size="mini" v-if="isView" type="text" icon="el-icon-collection" @click="$emit(handleCustomerFollowAdd, form)" v-has-permi="['ecw:customer:follow-add-plan']">{{ $t("增加计划") }} </el-button>
</el-col> </el-form-item>
<el-col :span="20"> </el-col>
<el-form-item :label="$t('跟进情况')"> <el-col :span="20">
<el-input rows="3" class="text_style" type="textarea" v-model="form.feedback" maxlength="500" show-word-limit :disabled="isView" /> <el-form-item :label="$t('附件')" prop="attatchment">
</el-form-item> <FileUpload :limit="5" :isShowTip="true" v-model="form.attatchment" :fileType="fileType" :disabled="isView" />
</el-col> </el-form-item>
<el-col :span="20"> </el-col>
<el-form-item :label="$t('附件')" prop="attatchment"> <el-col :span="13">
<FileUpload :limit="5" :isShowTip="true" v-model="form.attatchment" :fileType="fileType" :disabled="isView" /> <el-form-item :label="$t('下次跟进时间')">
</el-form-item> <el-date-picker v-model="form.nextTime" type="datetime" :placeholder="$t('请选择')" :disabled="isView" @change="changeNextTime"> </el-date-picker>
</el-col> </el-form-item>
<el-col :span="13"> </el-col>
<el-form-item :label="$t('下次跟进时间')"> <el-col :span="20">
<el-date-picker v-model="form.nextTime" type="datetime" :placeholder="$t('请选择')" :disabled="isView" @change="changeNextTime"> <el-form-item :label="$t('下一步计划')" prop="nextPlan">
</el-date-picker> <el-input type="textarea" :rows="3" v-model="form.nextPlan" :placeholder="$t('请输入下一步计划')" maxlength="500" show-word-limit :disabled="isView" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="20"> <el-col :span="12">
<el-form-item :label="$t('下一步计划')" prop="nextPlan"> <el-form-item :label="$t('创建人')" prop="founder">
<el-input type="textarea" :rows="3" v-model="form.nextPlan" :placeholder="$t('请输入下一步计划')" maxlength="500" show-word-limit :disabled="isView" /> <el-select v-model="form.creatorName" disabled :placeholder="$t('请选择')">
</el-form-item> <el-option v-for="item in allSimplList" :key="item.id" :label="item.nickname" :value="item.id"> </el-option>
</el-col> </el-select>
<el-col :span="12"> </el-form-item>
<el-form-item :label="$t('创建人')" prop="founder"> </el-col>
<el-select v-model="form.creatorName" disabled :placeholder="$t('请选择')"> <el-col :span="12">
<el-option v-for="item in allSimplList" :key="item.id" :label="item.nickname" :value="item.id"> <el-form-item :label="$t('创建时间')" prop="createTime">
</el-option> <el-date-picker v-model="form.createTime" type="datetime" disabled :placeholder="$t('请选择')"> </el-date-picker>
</el-select> </el-form-item>
</el-form-item> </el-col>
</el-col> <el-col :span="12">
<el-col :span="12"> <el-form-item :label="$t('最后更新人')">
<el-form-item :label="$t('创建时间')" prop="createTime"> <el-select v-model="form.updaterName" disabled>
<el-date-picker v-model="form.createTime" type="datetime" disabled :placeholder="$t('请选择')"> <el-option v-for="item in allSimplList" :key="item.id" :label="item.nickname" :value="item.id"> </el-option>
</el-date-picker> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('最后更新人')"> <el-form-item :label="$t('最后更新时间')">
<el-select v-model="form.updaterName" disabled> <el-date-picker v-model="form.updateTime" type="datetime" disabled :placeholder="$t('请选择')"> </el-date-picker>
<el-option v-for="item in allSimplList" :key="item.id" :label="item.nickname" :value="item.id"> </el-form-item>
</el-option> </el-col>
</el-select> </el-row>
</el-form-item> </el-form>
</el-col> <div slot="footer" class="dialog-footer" v-if="isView">
<el-col :span="12"> <el-button type="warning" @click="customerFollowClose">{{ $t("关 闭") }}</el-button>
<el-form-item :label="$t('最后更新时间')"> </div>
<el-date-picker v-model="form.updateTime" type="datetime" disabled :placeholder="$t('请选择')"> <div slot="footer" class="dialog-footer" v-else>
</el-date-picker> <el-button type="warning" @click="goBack">{{ $t("返 回") }}</el-button>
</el-form-item> <el-button type="primary" @click="customerFollowSubmit(0)">{{ $t("保 存") }}</el-button>
</el-col> <el-button type="success" @click="customerFollowSubmit(1)">{{ $t("提交结果") }}</el-button>
</el-row> </div>
</el-form> </el-dialog>
<div slot="footer" class="dialog-footer" v-if="isView"> </div>
<el-button type="warning" @click="customerFollowClose">{{$t('关 闭')}}</el-button>
</div>
<div slot="footer" class="dialog-footer" v-else>
<el-button type="warning" @click="goBack">{{$t('返 回')}}</el-button>
<el-button type="primary" @click="customerFollowSubmit(0)">{{$t('保 存')}}</el-button>
<el-button type="success" @click="customerFollowSubmit(1)" v-if="isEdit">{{$t('提交结果')}}</el-button>
</div>
</el-dialog>
<customer-follow-select-offer :customer-id="customerId" ref="customerFollowSelectOffer" @select="selectOffer" />
</div>
</template> </template>
<script> <script>
import { import { createCustomerFollow, getCustomerFollowPage, getCustomerFollowPage2, addCustomerFollow, getCustomerFollowList, editCustomerFollow, getFollowupNewNumber } from "@/api/ecw/customerFollow"
createCustomerFollow,
getCustomerFollowPage,
getCustomerFollowPage2,
addCustomerFollow,
getCustomerFollowList,
editCustomerFollow
} from "@/api/ecw/customerFollow"
import { getOfferPage } from "@/api/ecw/offer" import { getOfferPage } from "@/api/ecw/offer"
import CustomerFollowSelectOffer from "./customerFollowSelectOffer"; import { DICT_TYPE, getDictDataLabel } from "@/utils/dict"
import { import { getCustomerContactsListByCustomer } from "@/api/ecw/customerContacts"
DICT_TYPE, import { listAllSimpl, listServiceUser, listSimpleUsers } from "@/api/system/user"
getDictDataLabel import { parseTime } from "@/utils/ruoyi"
} from '@/utils/dict' import FileUpload from "@/components/FileUpload/fileUpload"
import { import { formatDate } from "@/utils/index"
getCustomerContactsListByCustomer
} from '@/api/ecw/customerContacts'
import {
listAllSimpl,
listServiceUser,
listSimpleUsers,
} from "@/api/system/user";
import {
parseTime
} from '@/utils/ruoyi'
import FileUpload from "@/components/FileUpload/fileUpload";
import {formatDate} from "@/utils/index";
export default { export default {
/** /**
* 客户跟进 * 客户跟进
...@@ -181,18 +150,12 @@ export default { ...@@ -181,18 +150,12 @@ export default {
/** /**
* 如果是客户投诉跟进,则id为客户投诉id;如果是客户跟进,则id为客户id * 如果是客户投诉跟进,则id为客户投诉id;如果是客户跟进,则id为客户id
*/ */
id: Number,
customerId: Number, customerId: Number,
customerQuery: {
type: Boolean,
default: false
},
customerNumber: String, customerNumber: String,
customerService: Number customerService: Number
}, },
components: { components: {
FileUpload, FileUpload
CustomerFollowSelectOffer
}, },
data() { data() {
return { return {
...@@ -207,7 +170,7 @@ export default { ...@@ -207,7 +170,7 @@ export default {
customerFollow: { customerFollow: {
dialogVisible: false, dialogVisible: false,
form: { form: {
followType: '3' followType: "3"
} }
}, },
offerDialogVisible: true, offerDialogVisible: true,
...@@ -219,9 +182,8 @@ export default { ...@@ -219,9 +182,8 @@ export default {
pickerOptions: { pickerOptions: {
disabledDate(time) { disabledDate(time) {
return time.getTime() <= Date.now() return time.getTime() <= Date.now()
}, }
}, },
isEdit: true,
followTime: [], followTime: [],
nextTime: [], nextTime: [],
queryParams: { queryParams: {
...@@ -235,49 +197,41 @@ export default { ...@@ -235,49 +197,41 @@ export default {
}, },
computed: { computed: {
isChinese() { isChinese() {
return this.$i18n.locale === 'zh_CN' return this.$i18n.locale === "zh_CN"
} }
}, },
created() { created() {
this.init() this.init()
// this.resetCustomerFollowForm() listServiceUser().then((r) => {
listServiceUser().then(r => {
// console.log( r.data,'r.data跟进业务')
this.serviceUserList = r.data this.serviceUserList = r.data
}) })
listAllSimpl().then((r) => { listAllSimpl().then((r) => {
this.allSimplList = r.data; this.allSimplList = r.data
}); })
// this.getCustomerFollowList()
// this.reset()
}, },
methods: { methods: {
init() { init() {
if (!!this.customerId) getCustomerContactsListByCustomer({ if (!!this.customerId)
customerId: this.customerId getCustomerContactsListByCustomer({
}).then(r => { customerId: this.customerId
this.customerContactsList = r.data }).then((r) => {
// this.form.customerId = this.customerId this.customerContactsList = r.data
// this.form.bizId = this.id })
})
}, },
getOfferList() { getOfferList() {
getOfferPage(this.queryParams).then(response => { getOfferPage(this.queryParams).then((response) => {
this.offerList = response.data.list; this.offerList = response.data.list
this.offerTotal = response.data.total; this.offerTotal = response.data.total
}); })
}, },
handleFollowType(val) { handleFollowType(val) {
console.log(val) console.log(val)
if (val == '2') { if (val == "2") {
this.$refs['customerFollowSelectOffer'].offerDialogVisible = true this.$refs["customerFollowSelectOffer"].offerDialogVisible = true
} else { } else {
this.form.offerId = undefined this.form.offerId = undefined
} }
}, },
selectOffer(offerId) {
this.form.offerId = offerId
},
reset() { reset() {
this.form = { this.form = {
attatchment: undefined, attatchment: undefined,
...@@ -285,6 +239,7 @@ export default { ...@@ -285,6 +239,7 @@ export default {
contactName: undefined, contactName: undefined,
contactPhone: undefined, contactPhone: undefined,
customerId: this.customerId, customerId: this.customerId,
customerNumber: this.customerNumber,
feedback: undefined, feedback: undefined,
followMethod: undefined, followMethod: undefined,
followTime: new Date().getTime(), followTime: new Date().getTime(),
...@@ -303,7 +258,7 @@ export default { ...@@ -303,7 +258,7 @@ export default {
createTime: new Date().getTime(), createTime: new Date().getTime(),
updaterName: this.$store.getters.userId, updaterName: this.$store.getters.userId,
updateTime: new Date().getTime() updateTime: new Date().getTime()
}; }
}, },
changeNextTime(val) { changeNextTime(val) {
if (val) { if (val) {
...@@ -317,7 +272,7 @@ export default { ...@@ -317,7 +272,7 @@ export default {
}, },
changeContactUser(val) { changeContactUser(val) {
if (val) { if (val) {
for(const item of this.customerContactsList) { for (const item of this.customerContactsList) {
if (item.id == val) { if (item.id == val) {
this.form.contactName = item.name this.form.contactName = item.name
// this.form.contactPhone = `+${item.areaCode}${item.phoneNew}` // this.form.contactPhone = `+${item.areaCode}${item.phoneNew}`
...@@ -331,38 +286,38 @@ export default { ...@@ -331,38 +286,38 @@ export default {
}, },
customerFollowSubmit(status) { customerFollowSubmit(status) {
console.log(this.form) console.log(this.form)
this.$refs["customerFollowForm"].validate(valid => { this.$refs["customerFollowForm"].validate((valid) => {
if (!valid) { if (!valid) {
return return
} }
if (!this.form.followType) { if (!this.form.followType) {
this.$modal.msgError(this.$t("请选择跟进类型")); this.$modal.msgError(this.$t("请选择跟进类型"))
return return
} }
if (!this.form.followTime) { if (!this.form.followTime) {
this.$modal.msgError(this.$t('请选择跟进时间')); this.$modal.msgError(this.$t("请选择跟进时间"))
return return
} }
if (!this.form.contactName) { if (!this.form.contactName) {
this.$modal.msgError(this.$t('请选择联系人')); this.$modal.msgError(this.$t("请选择联系人"))
return return
} }
if (!this.form.followUserId) { if (!this.form.followUserId) {
this.$modal.msgError(this.$t('请选择客户经理')); this.$modal.msgError(this.$t("请选择客户经理"))
return return
} }
if (!this.form.followMethod) { if (!this.form.followMethod) {
this.$modal.msgError(this.$t('请选择跟进方式')); this.$modal.msgError(this.$t("请选择跟进方式"))
return return
} }
if (status === 0) { if (status === 0) {
this.saveSubmitData(status) this.saveSubmitData(status)
} else { } else {
this.$confirm(this.$t('提交后无法修改'), this.$t('提示'), { this.$confirm(this.$t("提交后无法修改"), this.$t("提示"), {
confirmButtonText: this.$t('确定'), confirmButtonText: this.$t("确定"),
cancelButtonText: this.$t('取消'), cancelButtonText: this.$t("取消"),
type: 'warning' type: "warning"
}).then(() => { }).then(() => {
this.saveSubmitData(status) this.saveSubmitData(status)
}) })
...@@ -376,68 +331,24 @@ export default { ...@@ -376,68 +331,24 @@ export default {
followTime: this.form.followTime ? formatDate(this.form.followTime) : undefined, followTime: this.form.followTime ? formatDate(this.form.followTime) : undefined,
nextTime: this.form.nextTime ? formatDate(this.form.nextTime) : undefined, nextTime: this.form.nextTime ? formatDate(this.form.nextTime) : undefined,
status status
}).then(r => { }).then((r) => {
this.$message.success(this.$t("操作成功")) this.$message.success(this.$t("操作成功"))
this.$emit('refresh') this.$emit("refresh")
this.customerFollowClose() this.customerFollowClose()
}) })
}, },
goBack() { goBack() {
this.$confirm(this.$t('是否确认不保存信息'), this.$t('提示'), { this.$confirm(this.$t("是否确认不保存信息"), this.$t("提示"), {
confirmButtonText: this.$t('确定'), confirmButtonText: this.$t("确定"),
cancelButtonText: this.$t('取消'), cancelButtonText: this.$t("取消"),
type: 'warning' type: "warning"
}).then(() => { }).then(() => {
this.customerFollowClose() this.customerFollowClose()
}) })
}, },
customerFollowClose() { customerFollowClose() {
// this.resetCustomerFollowForm()
this.customerFollow.dialogVisible = false this.customerFollow.dialogVisible = false
}, },
resetCustomerFollowForm() {
this.reset()
// this.$refs.dictType.changeValue(this.customerFollow.form.followType);
this.$refs.dictMethod.changeValue(this.customerFollow.form.followMethod);
},
handleQuery() {
this.pageNo = 1
this.queryParams.pageNo = 1
this.followTime = []
this.getCustomerFollowList()
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.queryParams = {
followType: null,
followMethod: null,
resultType: null,
status: null
};
this.handleQuery();
},
getCustomerFollowList() {
if (this.customerQuery) {
getCustomerFollowList({
customerId: this.customerId,
pageNo: this.pageNo,
pageSize: this.pageSize
}).then(r => {
this.$message.info(this.$t("操作成功"))
this.$emit('refresh')
})
} else {
getCustomerFollowPage2({
bizId: this.id,
followType: 3,
pageNo: this.pageNo,
pageSize: this.pageSize
}).then(r => {
this.$emit('refresh')
})
}
},
handleView(row) { handleView(row) {
this.isView = true this.isView = true
this.form = row this.form = row
...@@ -445,29 +356,34 @@ export default { ...@@ -445,29 +356,34 @@ export default {
}, },
handleAdd() { handleAdd() {
this.isView = false this.isView = false
this.isEdit = true
this.customerFollow.dialogVisible = true this.customerFollow.dialogVisible = true
this.reset() this.reset()
}, },
handleUpdate(row, flag) { async handleUpdate(row, flag) {
this.isView = false this.isView = false
this.isEdit = flag
this.customerFollow.dialogVisible = true this.customerFollow.dialogVisible = true
if (flag) { if (!flag) {
this.form = row this.form = row
} else { } else {
let r = await getFollowupNewNumber()
console.log(r)
this.form = { this.form = {
...row, ...row,
parentNumber: row.number parentNumber: row.number,
followTime: row.nextTime,
nextTime: "",
number: r.data,
nextPlan: ""
} }
} }
}, }
} }
} }
</script> </script>
<style scoped> <style scoped>
.text_style{ .text_style {
white-space: pre-wrap; white-space: pre-wrap;
} }
</style> </style>
...@@ -213,10 +213,10 @@ ...@@ -213,10 +213,10 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item :label="$t('主营类别')" prop="productType"> <el-form-item :label="$t('主营类别')" prop="productTypes">
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="11"> <el-col :span="11">
<el-select @change="change" v-model="form.productType" :placeholder="$t('请选择产品类别')"> <el-select @change="change" v-model="form.productTypes" multiple :placeholder="$t('请选择产品类别')">
<el-option :label="isChinese ? item.titleZh : item.titleEn" :value="item.id" v-for="item in productTypeList" :key="item.id" /> <el-option :label="isChinese ? item.titleZh : item.titleEn" :value="item.id" v-for="item in productTypeList" :key="item.id" />
</el-select> </el-select>
</el-col> </el-col>
...@@ -804,7 +804,7 @@ export default { ...@@ -804,7 +804,7 @@ export default {
trigger: "change" trigger: "change"
} }
], ],
productType: [ productTypes: [
{ {
required: true, required: true,
message: this.$t("请选择产品类别"), message: this.$t("请选择产品类别"),
...@@ -873,7 +873,7 @@ export default { ...@@ -873,7 +873,7 @@ export default {
this.getProductListFn(val) this.getProductListFn(val)
}, },
getProductListFn(val) { getProductListFn(val) {
getProductList({ typeId: val }).then((r) => { getProductList({ typeIds: val }).then((r) => {
this.productList = r.data this.productList = r.data
}) })
}, },
...@@ -1040,6 +1040,7 @@ export default { ...@@ -1040,6 +1040,7 @@ export default {
roles: (this.form.roles || [])?.join(","), roles: (this.form.roles || [])?.join(","),
pickupPoints: (this.form.pickupPoints || [])?.join(","), pickupPoints: (this.form.pickupPoints || [])?.join(","),
productIds: (this.form.productIds || [])?.join(","), productIds: (this.form.productIds || [])?.join(","),
productTypes: (this.form.productTypes || [])?.join(","),
busiCountryIds: (this.form.busiCountryIds || [])?.join(","), busiCountryIds: (this.form.busiCountryIds || [])?.join(","),
noConsignee: undefined, noConsignee: undefined,
defaultPay: undefined, defaultPay: undefined,
...@@ -1187,7 +1188,8 @@ export default { ...@@ -1187,7 +1188,8 @@ export default {
pickupPoints: this.stringArrToNumberArr(response.data.pickupPoints), pickupPoints: this.stringArrToNumberArr(response.data.pickupPoints),
productIds: this.stringArrToNumberArr(response.data.productIds), productIds: this.stringArrToNumberArr(response.data.productIds),
busiCountryIds: this.stringArrToNumberArr(response.data.busiCountryIds), busiCountryIds: this.stringArrToNumberArr(response.data.busiCountryIds),
competitorIds: Number(response.data.competitorIds) competitorIds: Number(response.data.competitorIds),
productTypes: response.data.productTypes ? response.data.productTypes.split(",") : []
} }
if (this.form.productType) { if (this.form.productType) {
console.log("1231", this.form.productType) console.log("1231", this.form.productType)
...@@ -1259,9 +1261,12 @@ export default { ...@@ -1259,9 +1261,12 @@ export default {
if (!this.form.lightUnit) this.form.lightUnit = r.data.paoEdge if (!this.form.lightUnit) this.form.lightUnit = r.data.paoEdge
}) })
}, },
getCompetitorList() { getCompetitorList(callback) {
competitorListAll().then((r) => { competitorListAll().then((r) => {
this.competitorList = r.data this.competitorList = r.data
this.$nextTick(() => {
callback && callback()
})
}) })
}, },
changeCompetitor(val) { changeCompetitor(val) {
...@@ -1273,9 +1278,11 @@ export default { ...@@ -1273,9 +1278,11 @@ export default {
console.log(data) console.log(data)
addCompetitor({ addCompetitor({
name: data.value name: data.value
}).then((_) => { }).then((r) => {
this.$message.success("添加成功!") this.$message.success("添加成功!")
this.getCompetitorList() this.getCompetitorList(() => {
this.form.competitorIds = r.data
})
}) })
}) })
} }
......
...@@ -334,116 +334,7 @@ ...@@ -334,116 +334,7 @@
</el-card> </el-card>
</el-tab-pane> </el-tab-pane>
<el-tab-pane name="follow" :label="$t('跟进')"> <el-tab-pane name="follow" :label="$t('跟进')">
<el-card class="box-card"> <logListCommon ref="logListCommon" v-if="activeName === 'follow'" :customerId="id" />
<div slot="header" class="clearfix">
<el-form size="small" :inline="true" label-width="100px">
<el-form-item :label="$t('编号')" prop="number">
<el-input v-model.trim="followForm.number" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item :label="$t('报价单号')" prop="offerNumber">
<el-input v-model.trim="followForm.offerNumber" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item :label="$t('联系人')" prop="contactName">
<el-input v-model.trim="followForm.contactName" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item :label="$t('联系方式')" prop="contactPhone">
<el-input v-model.trim="followForm.contactPhone" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item :label="$t('客户经理')" prop="salesmanIds">
<user-selector v-model="followForm.salesmanIds" multiple clearable @change="handleQuery" />
</el-form-item>
<el-form-item :label="$t('下次跟进时间')">
<el-date-picker v-model="followFormTmp.nextTime" type="datetimerange" range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" value-format="yyyy-MM-dd HH:mm:ss" @change="handleQuery"> </el-date-picker>
</el-form-item>
<el-form-item :label="$t('关联跟进记录')" prop="parentNumber">
<el-input v-model.trim="followForm.parentNumber" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item :label="$t('跟进类型')">
<dict-selector clearable :type="DICT_TYPE.CUSTOMER_FOLLOWUP_TYPE" v-model="followForm.followType" @change="handleQuery"></dict-selector>
</el-form-item>
<el-form-item :label="$t('跟进方式')">
<dict-selector clearable :type="DICT_TYPE.CUSTOMER_FOLLOWUP_METHOD" v-model="followForm.followMethod" @change="handleQuery"></dict-selector>
</el-form-item>
<el-form-item :label="$t('跟进结果')">
<el-select clearable v-model="followForm.resultType" :placeholder="$t('请选择')" size="small" @change="handleQuery">
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_FOLLOWUP_RESULT_TYPE)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item :label="$t('跟进状态')">
<el-select clearable v-model="followForm.status" :placeholder="$t('请选择')" size="small" @change="handleQuery">
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_FOLLOWUP_STATUS)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="getCustomerFollowList">{{ $t("搜索") }} </el-button>
<el-button
type="primary"
@click="
() => {
followForm = { pageNo: 1, pageSize: 10 }
getCustomerFollowList()
}
"
>{{ $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('编号')" width="120">
<template slot-scope="scope">
<a href="javascript:void(0)" @click="handleCustomerFollowLink(scope.row)" class="link-type">{{ scope.row.number }}</a>
</template>
</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="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 prop="contactPhone" :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>
<el-table-column prop="purpose" :label="$t('目的')"></el-table-column>
<el-table-column prop="feedback" :label="$t('跟进情况')"></el-table-column>
<el-table-column prop="resultType" :label="$t('跟进结果')" :formatter="(row, column, cellValue) => getDictDataLabel(DICT_TYPE.CUSTOMER_FOLLOWUP_RESULT_TYPE, cellValue)"></el-table-column>
<el-table-column :label="$t('下次跟进时间')" align="center">
<template slot-scope="scope">
{{ parseTime(scope.row.nextTime) }}
</template>
</el-table-column>
<el-table-column :label="$t('关联跟进记录')" align="center" prop="parentNumber"></el-table-column>
<el-table-column prop="nextPlan" :label="$t('下次计划')" align="center"></el-table-column>
<el-table-column :label="$t('跟进状态')" align="center">
<template slot-scope="scope">
{{ getDictDataLabel(DICT_TYPE.CUSTOMER_FOLLOWUP_STATUS, scope.row.status) }}
</template>
</el-table-column>
<el-table-column prop="creatorName" :label="$t('创建人')" align="center"></el-table-column>
<el-table-column :label="$t('创建时间')" align="center">
<template slot-scope="scope">
{{ parseTime(scope.row.createTime) }}
</template>
</el-table-column>
<el-table-column prop="updaterName" :label="$t('最后更新人')" align="center"></el-table-column>
<el-table-column :label="$t('最后更新时间')" align="center">
<template slot-scope="scope">
{{ parseTime(scope.row.updateTime) }}
</template>
</el-table-column>
<el-table-column width="150px" :label="$t('操作')" align="center" fixed="right" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" v-if="!scope.row.status" @click="handleCustomerFollow(scope.row, scope.row.status === 0)" v-hasPermi="['ecw:customer:follow-update']">{{ $t("编辑") }} </el-button>
<el-button size="mini" type="text" icon="el-icon-collection" @click="handleCustomerFollow(scope.row, true)" v-has-permi="['ecw:customer:follow-add-plan']">{{ $t("增加计划") }} </el-button>
</template>
</el-table-column>
</el-table>
<pagination :total="customerFollowTotal" :page.sync="followForm.pageNo" :limit.sync="followForm.pageSize" @pagination="getCustomerFollowList" />
</el-card>
</el-tab-pane> </el-tab-pane>
<el-tab-pane name="complain" :label="$t('客户投诉')"> <el-tab-pane name="complain" :label="$t('客户投诉')">
<customer-complaint v-if="activeName === 'complain'" ref="customerComplaint" :customer-id="id" hidden-search></customer-complaint> <customer-complaint v-if="activeName === 'complain'" ref="customerComplaint" :customer-id="id" hidden-search></customer-complaint>
...@@ -715,7 +606,7 @@ ...@@ -715,7 +606,7 @@
</div> </div>
</el-dialog> </el-dialog>
<customer-follow ref="customerFollow" v-if="customerFollowVisible" :id="id" :customer-id="id" :customer-service="customer.customerService" :customer-number="customer.number" @refresh="getCustomerFollowList" /> <customer-follow ref="customerFollow" v-if="customerFollowVisible" :customer-id="id" :customer-service="customer.customerService" :customer-number="customer.number" @refresh="logListCommonRefresh" />
</div> </div>
</template> </template>
...@@ -741,7 +632,8 @@ import ImageDisplay from "@/views/ecw/order/components/imageDisplay.vue" ...@@ -741,7 +632,8 @@ import ImageDisplay from "@/views/ecw/order/components/imageDisplay.vue"
import { getListTree } from "@/api/ecw/region" import { getListTree } from "@/api/ecw/region"
import { getWarehouseList } from "@/api/ecw/warehouse" import { getWarehouseList } from "@/api/ecw/warehouse"
import { deleteOffer, cancel, recovery } from "@/api/ecw/offer" import { deleteOffer, cancel, recovery } from "@/api/ecw/offer"
import { getCustomerFollowList, exportCustomerFollow } from "@/api/ecw/customerFollow"
import logListCommon from "@/views/ecw/offer/logListCommon"
export default { export default {
name: "query", name: "query",
...@@ -750,7 +642,8 @@ export default { ...@@ -750,7 +642,8 @@ export default {
Template, Template,
CustomerFollow, CustomerFollow,
CustomerComplaint, CustomerComplaint,
customerLog customerLog,
logListCommon
}, },
created() { created() {
// 获取币种 // 获取币种
...@@ -821,7 +714,6 @@ export default { ...@@ -821,7 +714,6 @@ export default {
this.getInfoListOfferPage() //报价 this.getInfoListOfferPage() //报价
break break
case "follow": case "follow":
this.getCustomerFollowList()
case "bill": case "bill":
this.infoListReceiptFn() //账单 this.infoListReceiptFn() //账单
break break
...@@ -1001,15 +893,7 @@ export default { ...@@ -1001,15 +893,7 @@ export default {
objectiveId: null, objectiveId: null,
destWarehouseId: null, destWarehouseId: null,
customerFollowVisible: false, customerFollowVisible: false,
followForm: {
pageNo: 1,
pageSize: 10
},
followFormTmp: {},
followTime: [],
nextTime: [], nextTime: [],
customerFollowTotal: 0,
customerFollowList: [],
currencyList: [], currencyList: [],
userId: undefined userId: undefined
} }
...@@ -1091,18 +975,6 @@ export default { ...@@ -1091,18 +975,6 @@ export default {
this.$router.push({ path: "/offer/create", query: { customerId: row.id, customerType: row.type, type: 1 } }) this.$router.push({ path: "/offer/create", query: { customerId: row.id, customerType: row.type, type: 1 } })
}, },
handleCustomerFollow(row, flag) {
this.customerFollowVisible = true
this.$nextTick((_) => {
this.$refs["customerFollow"].handleUpdate(row, flag)
})
},
handleCustomerFollowLink(row) {
this.customerFollowVisible = true
this.$nextTick((_) => {
this.$refs["customerFollow"].handleView(row)
})
},
checkPermi, checkPermi,
userIdFormatter(row, column, cellValue) { userIdFormatter(row, column, cellValue) {
const member = this.memberList.find((e) => e.id === cellValue) const member = this.memberList.find((e) => e.id === cellValue)
...@@ -1203,27 +1075,6 @@ export default { ...@@ -1203,27 +1075,6 @@ export default {
this.infoListOfferFrom = { pageNo: 1, pageSize: 10 } this.infoListOfferFrom = { pageNo: 1, pageSize: 10 }
this.getInfoListOfferPage() this.getInfoListOfferPage()
}, },
getCustomerFollowList() {
getCustomerFollowList({
...this.followForm,
customerId: this.customerId
}).then((r) => {
this.customerFollowList = r.data.list
this.customerFollowTotal = r.data.total
})
},
/** 跟进记录导出按钮操作 */
handleExport() {
// 执行导出
this.$modal.confirm(this.$t("是否确认导出客户跟进记录数据项?")).then(() => {
exportCustomerFollow({
...this.followForm,
customerId: this.customerId
}).then((r) => {
this.$message.success(this.$t("已加入导出队列,请稍后在下载日志中下载"))
})
})
},
// 数据 // 数据
getOrderStatistics() { getOrderStatistics() {
orderStatistics({ customerId: this.id }).then((r) => { orderStatistics({ customerId: this.id }).then((r) => {
...@@ -1348,6 +1199,9 @@ export default { ...@@ -1348,6 +1199,9 @@ export default {
this.$message.success("操作成功") this.$message.success("操作成功")
this.handleQuery() this.handleQuery()
}) })
},
logListCommonRefresh() {
this.$refs.logListCommon && this.$refs.logListCommon.handleQuery()
} }
} }
} }
......
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card> <logListCommon :offerId="offerId" />
<div slot="header" class="card-title">{{ $t("跟进记录列表") }}</div>
<!-- 列表 -->
<div class="offer-header">
<span style="font-size: 15px">{{ $t("报价单号") }}{{ number }}</span>
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">{{ $t("新增") }}</el-button>
</div>
<el-table v-loading="loading" :data="list">
<el-table-column :label="$t('序号')" align="center" prop="id" type="index">
<template slot-scope="scope">
<span>{{ scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('跟进类型')" align="center" prop="type">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.ECW_OFFER_TYPE" :value="scope.row.type"></dict-tag>
</template>
</el-table-column>
<el-table-column :label="$t('联系人')" align="center" prop="contactName" />
<el-table-column :label="$t('跟进方式')" align="center" prop="followUpMethod">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.CUSTOMER_FOLLOW_METHOD" :value="scope.row.followUpMethod"></dict-tag>
</template>
</el-table-column>
<el-table-column :label="$t('跟进时间')" align="center" prop="followUpTime" width="180">
<template slot-scope="scope">
<span>{{ scope.row.followUpTime }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('客户反馈')" align="center" prop="customerFeedback" />
<el-table-column :label="$t('处理结果')" align="center" prop="processingResults" />
<el-table-column :label="$t('客户经理')" align="center" prop="followUpSalesmanName">
<template slot-scope="scope">
<span>{{ getCustomerService(scope.row.followUpSalesmanId) }}</span>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="params.page" :limit.sync="params.rows" @pagination="getList" />
</el-card>
</div> </div>
</template> </template>
<script> <script>
import { getOfferLogPage } from "@/api/ecw/offerLog" import logListCommon from "@/views/ecw/offer/logListCommon"
import { DICT_TYPE } from "@/utils/dict"
import { getOffer } from "@/api/ecw/offer"
import { userList } from "@/api/system/user"
export default { export default {
name: "OfferLog", name: "offerLogList",
components: {}, components: { logListCommon },
data() { data() {
return { return {}
// 遮罩层
loading: true,
list: [],
total: 0,
params: {
page: 1,
rows: 20,
offerId: 0,
type: 2
},
number: "",
relationId: 0,
creatorName: "test",
creatorData: []
}
},
created() {
if (this.$route.query.offerId) {
this.params.offerId = this.$route.query.offerId
this.getList()
this.getRelationID()
}
userList("customer service").then((res) => (this.creatorData = res.data))
}, },
methods: { computed: {
/** 查询列表 */ offerId() {
getList() { return parseInt(this.$route.query.offerId || 0)
this.loading = true
let params = { ...this.params }
// 执行查询
getOfferLogPage(params).then((response) => {
this.list = response.data.list
this.total = response.data.total
this.loading = false
})
},
getCustomerService(id) {
var user = this.creatorData.find((item) => item.id == id)
if (user) return user.nickname
return ""
},
getRelationID() {
getOffer(this.params.offerId).then((response) => {
this.relationId = response.data.consignorId
this.number = response.data.number
})
},
/** 新增按钮操作 */
handleAdd() {
this.$router.push({
path: "/offer/createLog",
query: {
offerId: this.params.offerId,
number: this.number
}
})
} }
} }
} }
......
<template>
<div>
<el-card class="box-card">
<div slot="header" class="clearfix">
<el-form size="small" :inline="true" label-width="100px">
<el-form-item :label="$t('编号')" prop="number">
<el-input v-model.trim="followForm.number" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item :label="$t('报价单号')" prop="offerNumber">
<el-input v-model.trim="followForm.offerNumber" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item :label="$t('联系人')" prop="contactName">
<el-input v-model.trim="followForm.contactName" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item :label="$t('联系方式')" prop="contactPhone">
<el-input v-model.trim="followForm.contactPhone" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item :label="$t('客户经理')" prop="salesmanIds">
<user-selector v-model="followForm.salesmanIds" multiple clearable @change="handleQuery" />
</el-form-item>
<el-form-item :label="$t('下次跟进时间')">
<el-date-picker v-model="followFormTmp.nextTime" type="datetimerange" range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" value-format="yyyy-MM-dd HH:mm:ss" @change="handleQuery"> </el-date-picker>
</el-form-item>
<el-form-item :label="$t('关联跟进记录')" prop="parentNumber">
<el-input v-model.trim="followForm.parentNumber" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item :label="$t('跟进类型')">
<dict-selector clearable :type="DICT_TYPE.CUSTOMER_FOLLOWUP_TYPE" v-model="followForm.followType" @change="handleQuery"></dict-selector>
</el-form-item>
<el-form-item :label="$t('跟进方式')">
<dict-selector clearable :type="DICT_TYPE.CUSTOMER_FOLLOWUP_METHOD" v-model="followForm.followMethod" @change="handleQuery"></dict-selector>
</el-form-item>
<el-form-item :label="$t('跟进结果')">
<el-select clearable v-model="followForm.resultType" :placeholder="$t('请选择')" size="small" @change="handleQuery">
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_FOLLOWUP_RESULT_TYPE)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item :label="$t('跟进状态')">
<el-select clearable v-model="followForm.status" :placeholder="$t('请选择')" size="small" @change="handleQuery">
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_FOLLOWUP_STATUS)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="getCustomerFollowList">{{ $t("搜索") }} </el-button>
<el-button
type="primary"
@click="
() => {
followForm = { pageNo: 1, pageSize: 10 }
getCustomerFollowList()
}
"
>{{ $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('编号')" width="120">
<template slot-scope="scope">
<a href="javascript:void(0)" @click="handleCustomerFollowLink(scope.row)" class="link-type">{{ scope.row.number }}</a>
</template>
</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="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 prop="contactPhone" :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>
<el-table-column prop="purpose" :label="$t('目的')"></el-table-column>
<el-table-column prop="feedback" :label="$t('跟进情况')"></el-table-column>
<el-table-column prop="resultType" :label="$t('跟进结果')" :formatter="(row, column, cellValue) => getDictDataLabel(DICT_TYPE.CUSTOMER_FOLLOWUP_RESULT_TYPE, cellValue)"></el-table-column>
<el-table-column :label="$t('下次跟进时间')" align="center">
<template slot-scope="scope">
{{ parseTime(scope.row.nextTime) }}
</template>
</el-table-column>
<el-table-column :label="$t('关联跟进记录')" align="center" prop="parentNumber"></el-table-column>
<el-table-column prop="nextPlan" :label="$t('下次计划')" align="center"></el-table-column>
<el-table-column :label="$t('跟进状态')" align="center">
<template slot-scope="scope">
{{ getDictDataLabel(DICT_TYPE.CUSTOMER_FOLLOWUP_STATUS, scope.row.status) }}
</template>
</el-table-column>
<el-table-column prop="creatorName" :label="$t('创建人')" align="center"></el-table-column>
<el-table-column :label="$t('创建时间')" align="center">
<template slot-scope="scope">
{{ parseTime(scope.row.createTime) }}
</template>
</el-table-column>
<el-table-column prop="updaterName" :label="$t('最后更新人')" align="center"></el-table-column>
<el-table-column :label="$t('最后更新时间')" align="center">
<template slot-scope="scope">
{{ parseTime(scope.row.updateTime) }}
</template>
</el-table-column>
<el-table-column width="150px" :label="$t('操作')" align="center" fixed="right" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" v-if="!scope.row.status" @click="handleCustomerFollow(scope.row)" v-hasPermi="['ecw:customer:follow-update']">{{ $t("编辑") }} </el-button>
<el-button size="mini" type="text" icon="el-icon-collection" @click="handleCustomerFollow(scope.row, true)" v-has-permi="['ecw:customer:follow-add-plan']">{{ $t("增加计划") }} </el-button>
</template>
</el-table-column>
</el-table>
<pagination :total="customerFollowTotal" :page.sync="followForm.pageNo" :limit.sync="followForm.pageSize" @pagination="getCustomerFollowList" />
</el-card>
<customer-follow ref="customerFollow" @handleCustomerFollowAdd="handleCustomerFollowAdd" @refresh="handleQuery" v-if="customerFollowVisible" :customer-id="customerId" :offerId="offerId" />
</div>
</template>
<script>
import { getCustomerFollowList, exportCustomerFollow } from "@/api/ecw/customerFollow"
import CustomerFollow from "@/views/ecw/customer/components/customerFollow"
import UserSelector from "@/components/UserSelector"
export default {
name: "logListCommon",
components: { UserSelector, CustomerFollow },
props: ["customerId", "offerId"],
data() {
return {
customerFollowVisible: false,
customerFollowTotal: 0,
customerFollowList: [],
followForm: {
pageNo: 1,
pageSize: 10
},
followFormTmp: {
nextTime: ["", ""]
}
}
},
created() {
this.handleQuery()
},
computed: {
isChinese() {
return this.$i18n.locale === "zh_CN"
},
customerId_offerId() {
return `${this.customerId}_${this.offerId}`
}
},
watch: {
customerId_offerId() {
this.handleQuery()
}
},
methods: {
handleCustomerFollowAdd(row) {
this.customerFollowVisible = false
setTimeout(() => {
this.customerFollowVisible = true
this.$nextTick((_) => {
this.$refs["customerFollow"].handleUpdate(row)
})
}, 100)
},
handleCustomerFollow(row, flag) {
this.customerFollowVisible = true
this.$nextTick((_) => {
this.$refs["customerFollow"].handleUpdate(row, flag)
})
},
handleCustomerFollowLink(row) {
this.customerFollowVisible = true
this.$nextTick((_) => {
this.$refs["customerFollow"].handleView(row)
})
},
formatQuery() {
let obj = {}
obj.customerId = this.customerId || null
obj.offerId = this.offerId || null
obj.beginNextTime = this.followFormTmp.nextTime[0]
obj.endNextTime = this.followFormTmp.nextTime[1]
return obj
},
handleQuery() {
this.followForm.pageNo = 1
this.customerFollowTotal = 0
this.customerFollowList = []
this.getCustomerFollowList()
},
/** 跟进记录导出按钮操作 */
handleExport() {
// 执行导出
this.$modal.confirm(this.$t("是否确认导出客户跟进记录数据项?")).then(() => {
exportCustomerFollow({
...this.followForm,
...this.formatQuery(),
pageNo: 1,
pageSize: 10000000
}).then((r) => {
this.$message.success(this.$t("已加入导出队列,请稍后在下载日志中下载"))
})
})
},
getCustomerFollowList() {
getCustomerFollowList({
...this.followForm,
...this.formatQuery()
}).then((r) => {
this.customerFollowList = r.data.list
this.customerFollowTotal = r.data.total
})
}
}
}
</script>
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