Commit 30ae2f0a authored by dragondean@qq.com's avatar dragondean@qq.com
parents 84b09b47 222c94e1
import request from '@/utils/request'
// 创建国家区号
export function createCountry(data) {
return request({
url: '/ecw/country/create',
method: 'post',
data: data
})
}
// 更新国家区号
export function updateCountry(data) {
return request({
url: '/ecw/country/update',
method: 'put',
data: data
})
}
// 删除国家区号
export function deleteCountry(id) {
return request({
url: '/ecw/country/delete?id=' + id,
method: 'delete'
})
}
// 获得国家区号
export function getCountry(id) {
return request({
url: '/ecw/country/get?id=' + id,
method: 'get'
})
}
// 获得所有国家区号
export function getCountryListAll() {
return request({
url: '/ecw/country/list-all',
method: 'get'
})
}
// 获得国家区号分页
export function getCountryPage(query) {
return request({
url: '/ecw/country/page',
method: 'get',
params: query
})
}
// 导出国家区号 Excel
export function exportCountryExcel(query) {
return request({
url: '/ecw/country/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}
......@@ -37,7 +37,7 @@ export function getCustomerContacts(id) {
// 获得客户联系人列表
export function getCustomerContactsList() {
return request({
url: '/ecw/customer-contacts/page',
url: '/ecw/customer-contacts/list',
method: 'get'
})
}
......@@ -60,3 +60,12 @@ export function exportCustomerContactsExcel(query) {
responseType: 'blob'
})
}
// 根据客户ID获得联系人列表
export function getCustomerContactsListByCustomer(query) {
return request({
url: '/ecw/customer-contacts/list-by-customer',
method: 'get',
params: query
})
}
<template>
<div>
<div style="display: flex;justify-content: right;margin-bottom: 15px">
<el-button type="primary" style="text-align: right" @click="customerFollow.dialogVisible = true">新增</el-button>
</div>
<el-table
:data="customerFollowList"
style="width: 100%"
>
<el-table-column
type="index"
label="#"
>
</el-table-column>
<el-table-column
prop="followType"
label="跟进类型"
:formatter="(row, column, cellValue) => getDictDataLabel(DICT_TYPE.CUSTOMER_FOLLOW_TYPE, cellValue)"
>
</el-table-column>
<el-table-column
prop="contactName"
label="联系人"
>
</el-table-column>
<el-table-column
prop="followMethod"
label="跟进方式"
:formatter="(row, column, cellValue) => getDictDataLabel(DICT_TYPE.CUSTOMER_FOLLOW_METHOD, cellValue)"
>
</el-table-column>
<el-table-column
prop="followTime"
label="跟进时间"
:formatter="(row, column, cellValue) => parseTime(cellValue)"
>
</el-table-column>
<el-table-column
prop="feedback"
label="客户反馈"
>
</el-table-column>
<el-table-column
prop="result"
label="处理结果"
>
</el-table-column>
<el-table-column
prop="followUserId"
label="跟进业务"
:formatter="(row, column, cellValue) => serviceUserList.find(e => e.id === cellValue).nickname"
>
</el-table-column>
</el-table>
<el-dialog
append-to-body
title="客户跟进"
:visible.sync="customerFollow.dialogVisible"
:close-on-click-modal="false"
width="680px">
<el-form ref="customerFollowForm" :model="customerFollow.form" label-width="80px">
<el-row :gutter="10">
<el-col>
<el-form-item label="跟进类型" required>
<dict-selector form-type="radio" v-model="customerFollow.form.followType" :type="DICT_TYPE.CUSTOMER_FOLLOW_TYPE"></dict-selector>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="跟进时间" required>
<el-date-picker v-model="customerFollow.form.followTime" type="datetime" placeholder="选择跟进时间"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系人" required>
<el-select v-model="customerFollow.form.contactName" placeholder="请选择">
<el-option
v-for="(item, index) in customerContactsList"
:key="index"
:label="item.name"
:value="item.name">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="跟进业务" required>
<el-select v-model="customerFollow.form.followUserId" placeholder="请选择">
<el-option
v-for="item in serviceUserList"
:key="item.id"
:label="item.nickname"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="跟进方式" required>
<dict-selector v-model="customerFollow.form.followMethod" :type="DICT_TYPE.CUSTOMER_FOLLOW_METHOD"></dict-selector>
</el-form-item>
</el-col>
<el-col>
<el-form-item label="客户反馈" required>
<el-input type="textarea" v-model="customerFollow.form.feedback"></el-input>
</el-form-item>
</el-col>
<el-col>
<el-form-item label="处理结果" required>
<el-input type="textarea" v-model="customerFollow.form.result"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="customerFollow.dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="customerFollowSubmit">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import {createCustomerFollow, getCustomerFollowPage} from "@/api/ecw/customerFollow"
import { DICT_TYPE, getDictDataLabel } from '@/utils/dict'
import { getCustomerContactsListByCustomer } from '@/api/ecw/customerContacts'
import {listServiceUser} from "@/api/system/user"
import { parseTime } from '@/utils/ruoyi'
export default {
/**
* 客户跟进
* 客户投诉跟进
*/
name: "CustomerFollow",
props: {
customerId: Number
},
data() {
return {
DICT_TYPE,
getDictDataLabel,
parseTime,
customerFollowList: [],
serviceUserList: [],
customerContactsList: [],
customerFollow: {
dialogVisible: false,
form: {}
},
}
},
created() {
this.resetCustomerFollowForm()
if (!!this.customerId) getCustomerContactsListByCustomer({customerId: this.customerId}).then(r => {
this.customerContactsList = r.data
})
listServiceUser().then(r => {
this.serviceUserList = r.data
})
this.getCustomerFollowList()
},
methods: {
customerFollowSubmit() {
this.$refs["customerFollowForm"].validate(valid => {
if (!valid) {
return
}
createCustomerFollow(this.customerFollow.form).then(r => {
this.resetCustomerFollowForm()
this.getCustomerFollowList()
this.customerFollow.dialogVisible = false
})
})
},
resetCustomerFollowForm() {
this.customerFollow.form = {
"bizId": this.customerId,
"contactName": undefined,
"feedback": undefined,
"followMethod": undefined,
"followTime": undefined,
"followType": undefined,
"followUserId": undefined,
"result": undefined
}
},
getCustomerFollowList() {
getCustomerFollowPage({bizId: this.customerId}).then(r => {
this.customerFollowList = r.data.list
})
}
}
}
</script>
<style scoped>
</style>
......@@ -34,10 +34,6 @@
<el-col :span="12">
<el-form-item label="客户类别" prop="type">
<dict-selector :type="DICT_TYPE.CUSTOMER_TYPE" form-type="select" multiple v-model="form.type"></dict-selector>
<!-- <el-select v-model="form.type" placeholder="请选择客户类别">-->
<!-- <el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_TYPE)"-->
<!-- :key="dict.value" :label="dict.label" :value="dict.value" />-->
<!-- </el-select>-->
</el-form-item>
</el-col>
<el-col :span="12">
......@@ -51,8 +47,8 @@
<el-col :span="13" v-show="form.type && form.type.indexOf('3') !== -1">
<el-form-item label="所属代理" prop="agentId">
<el-select v-model="form.agentId" placeholder="请选择所属代理">
<el-option v-for="dict in getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
<el-option v-for="item in serviceUserList"
:key="item.id" :label="item.nickname" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
......@@ -75,7 +71,6 @@
</el-col>
<el-col :span="12">
<el-form-item label="主营类别" prop="productType">
<!-- <el-cascader :options="productTypeList" :props="{label: 'titleZh', value: 'id', lazy: true, lazyLoad}"></el-cascader>-->
<el-row :gutter="10">
<el-col :span="11">
<el-select v-model="form.productType" placeholder="请选择产品类别" @change="form.productId = ''">
......@@ -109,8 +104,8 @@
<el-col :span="12">
<el-form-item label="跟进客服" prop="customerService">
<el-select v-model="form.customerService" placeholder="请选择跟进客服">
<el-option v-for="dict in getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
<el-option v-for="item in serviceUserList"
:key="item.id" :label="item.nickname" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
......@@ -122,7 +117,7 @@
</el-col>
<el-col :span="12">
<el-form-item label="客户状态" prop="status">
<el-select v-model="form.status" placeholder="请选择客户状态">
<el-select v-model="form.status" placeholder="请选择客户状态" disabled>
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_STATUS)"
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
</el-select>
......@@ -248,9 +243,9 @@
区号 <span style="color: #ff0000">*</span>
</template>
<template v-slot="{row}">
<el-select v-model="row.areaCode" placeholder="请选择区号">
<el-option v-for="dict in getDictDatas(DICT_TYPE.AREA_CODE)"
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
<el-select v-model="row.areaCode" placeholder="请选择区号" filterable>
<el-option v-for="(item, index) in countryList"
:key="index" :label="item.nameShort + item.nameZh + '(' + item.tel + ')'" :value="item.tel" />
</el-select>
</template>
</el-table-column>
......@@ -384,6 +379,9 @@ import {getWarehouseList} from "@/api/ecw/warehouse"
import CustomerLineTable from '@/components/CustomerLineTable'
import {getCustomerSelect} from "@/api/ecw/customer"
import {listServiceUser} from "@/api/system/user"
import {getZhongPaoPage} from '@/api/ecw/zhongPao'
import { getCustomerContactsListByCustomer } from '@/api/ecw/customerContacts'
import { getCountryListAll } from '@/api/ecw/country'
export default {
name: "edit",
......@@ -396,8 +394,13 @@ export default {
},
created() {
this.reset()
if(this.customerId !== '0')
this.getCustomer(this.customerId)
if(this.customerId !== '0') {
this.getCustomer(this.customerId).then(() => {
getCustomerContactsListByCustomer({customerId: this.customerId}).then(r => {
this.form.customerContacts = r.data
})
})
}
getNodeList().then(r => {
this.nodeList = r.data
......@@ -420,6 +423,11 @@ export default {
listServiceUser().then(r => {
this.serviceUserList = r.data
})
getCountryListAll().then(r => {
this.countryList = r.data
})
this.getZhongPao()
},
data(){
return {
......@@ -452,11 +460,13 @@ export default {
importCityList: [], // 进口地址
customerSelect: [],
serviceUserList: [],
countryList: [],
zhongLines: [], // 重货线路
paoLines: [], // 泡货线路
}
},
methods: {
/** 取消按钮 */
cancel() {
......@@ -471,10 +481,14 @@ export default {
}
// 修改的提交
if (this.form.id != null) {
this.form.customerContacts.forEach(e => {
e.customerId = this.customerId
})
updateCustomer(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
// this.getList();
});
return;
}
......@@ -482,7 +496,7 @@ export default {
createCustomer(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
// this.getList();
});
});
},
......@@ -511,7 +525,7 @@ export default {
customerLines: [],
lightUnit: undefined,
promoter: undefined,
status: undefined,
status: 1,
founder: this.$store.getters.userId,
department: undefined,
invoiceTitle: undefined,
......@@ -530,8 +544,8 @@ export default {
this.resetForm("form");
},
getCustomer(id) {
getCustomer(id).then(response => {
this.form = { ...this.form, ...response.data };
return getCustomer(id).then(response => {
this.form = { ...this.form, ...response.data, id: this.customerId };
this.open = true;
this.title = "修改客户";
});
......@@ -561,6 +575,18 @@ export default {
// "userid": 0,
// "username": ""
})
},
getZhongPao(){
// todo 接口不对,应该用list
getZhongPaoPage().then(r => {
r.data.list.forEach(e => {
if(e.type === 1) {
this.form.lightUnit = e.edge
} else if (e.type === 2 || true){ // todo 缺少type
this.form.weightUnit = e.edge
}
})
})
}
},
computed: {
......
This diff is collapsed.
......@@ -2,7 +2,7 @@
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch && !!!customerId" label-width="68px">
<el-form-item label="客户名称" prop="customerId">
<el-select v-model="queryParams.customerId" placeholder="请选择客户名称" clearable size="small">
<el-option v-for="customer in myFollowCustomerList" :key="customer.id" :value="customer.id"
......@@ -41,7 +41,7 @@
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-row :gutter="10" v-show="!!!customerId" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['ecw:customer-complaint:create']">新增</el-button>
......@@ -92,16 +92,20 @@
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-dialog :title="title" :visible.sync="open" width="900px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="客户名称" prop="customerId">
<el-select v-model="form.customerId" placeholder="请选择客户名称">
<el-option label="请选择字典生成" value="" />
<el-select v-model="form.customerId" placeholder="请选择客户名称" :disabled="!!customerId">
<el-option
v-for="item in customerSelect"
:key="item.id"
:label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="投诉类型" prop="type">
<el-select v-model="form.type" placeholder="请选择投诉类型">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.CUSTOMER_COMPLAINT_TYPE)"
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_COMPLAINT_TYPE)"
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
</el-select>
</el-form-item>
......@@ -116,11 +120,14 @@
</el-form-item>
<el-form-item label="处理状态" prop="status">
<el-select v-model="form.status" placeholder="请选择处理状态">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.CUSTOMER_COMPLAINT_STATUS)"
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_COMPLAINT_STATUS)"
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
</el-select>
</el-form-item>
</el-form>
<customer-follow :customer-id="form.id"></customer-follow>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
......@@ -131,11 +138,20 @@
<script>
import { createCustomerComplaint, updateCustomerComplaint, deleteCustomerComplaint, getCustomerComplaint, getCustomerComplaintPage, exportCustomerComplaintExcel } from "@/api/ecw/customerComplaint";
import { getMyFlowCustomerList } from "@/api/ecw/customer";
import {getCustomerSelect} from '@/api/ecw/customer'
import CustomerFollow from "../../../components/CustomerFollow"
export default {
name: "CustomerComplaint",
/**
* 可以单独作为页面,也可以作为组件被被客户详情页调用。
* 作为组件时要传入 customerId,用于限制范围和隐藏搜索筛选
*/
props: {
customerId: Number
},
components: {
CustomerFollow
},
data() {
return {
......@@ -158,7 +174,7 @@ export default {
queryParams: {
pageNo: 1,
pageSize: 10,
customerId: null,
customerId: this.customerId,
type: null,
orderId: null,
ladingbillId: null,
......@@ -173,14 +189,16 @@ export default {
customerId: [{ required: true, message: "客户名称不能为空", trigger: "change" }],
},
myFollowCustomerList: []
myFollowCustomerList: [],
customerSelect: []
};
},
created() {
this.getList();
// 获得邮件账号
getMyFlowCustomerList().then(response => {
this.myFollowCustomerList = response.data;
getCustomerSelect().then(r => {
this.customerSelect = r.data
})
},
methods: {
......@@ -206,7 +224,7 @@ export default {
reset() {
this.form = {
id: undefined,
customerId: undefined,
customerId: this.customerId,
type: undefined,
orderId: undefined,
ladingbillId: undefined,
......@@ -293,7 +311,7 @@ export default {
},
/** 格式化邮件账号 */
formatCustomerName(customerId) {
for (const customer of this.myFollowCustomerList) {
for (const customer of this.customerSelect) {
if (customer.id === customerId) {
return customer.name;
}
......
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