Commit a1a34dec authored by houjn@hikoon.cn's avatar houjn@hikoon.cn

Merge remote-tracking branch 'origin/dev' into dev

parents 387b121d 8c4a0ea3
...@@ -34,6 +34,14 @@ export function getCustomerContacts(id) { ...@@ -34,6 +34,14 @@ export function getCustomerContacts(id) {
}) })
} }
// 获得客户联系人列表
export function getCustomerContactsList() {
return request({
url: '/ecw/customer-contacts/page',
method: 'get'
})
}
// 获得客户联系人分页 // 获得客户联系人分页
export function getCustomerContactsPage(query) { export function getCustomerContactsPage(query) {
return request({ return request({
......
import request from '@/utils/request'
// 创建跟进
export function createCustomerFollow(data) {
return request({
url: '/ecw/customer-follow/create',
method: 'post',
data: data
})
}
// 更新跟进
export function updateCustomerFollow(data) {
return request({
url: '/ecw/customer-follow/update',
method: 'put',
data: data
})
}
// 删除跟进
export function deleteCustomerFollow(id) {
return request({
url: '/ecw/customer-follow/delete?id=' + id,
method: 'delete'
})
}
// 获得跟进
export function getCustomerFollow(id) {
return request({
url: '/ecw/customer-follow/get?id=' + id,
method: 'get'
})
}
// 获得跟进分页
export function getCustomerFollowPage(query) {
return request({
url: '/ecw/customer-follow/page',
method: 'get',
params: query
})
}
// 导出跟进 Excel
export function exportCustomerFollowExcel(query) {
return request({
url: '/ecw/customer-follow/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}
...@@ -100,6 +100,8 @@ export const DICT_TYPE = { ...@@ -100,6 +100,8 @@ export const DICT_TYPE = {
AREA_CODE: 'area_code', // 区号 AREA_CODE: 'area_code', // 区号
SOCIAL: 'customer_social_tools', // 社交软件 SOCIAL: 'customer_social_tools', // 社交软件
IS_DEFAULT: 'is_default', // 默认联系人 IS_DEFAULT: 'is_default', // 默认联系人
CUSTOMER_FOLLOW_TYPE: 'customer_follow_type', // 跟进类型
CUSTOMER_FOLLOW_METHOD: 'customer_follow_method', // 跟进方式
COMMISSION_PRODUCT_APPROVAL:'commission_product_approval', //佣金备案 COMMISSION_PRODUCT_APPROVAL:'commission_product_approval', //佣金备案
SHIPPING_DECLARATION_TYPE:'shipping_declaration_type',//出货报关方式(与订单报关方式相同) SHIPPING_DECLARATION_TYPE:'shipping_declaration_type',//出货报关方式(与订单报关方式相同)
COMMISSION_TYPE:'commission_type',//佣金类型 COMMISSION_TYPE:'commission_type',//佣金类型
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="客户等级" prop="level"> <el-form-item label="客户等级" prop="level">
<el-select v-model="form.level" placeholder="请选择客户等级"> <el-select v-model="form.level" placeholder="请选择客户等级" disabled>
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_LEVEL)" <el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_LEVEL)"
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" /> :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
</el-select> </el-select>
...@@ -33,20 +33,13 @@ ...@@ -33,20 +33,13 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="客户类别" prop="type"> <el-form-item label="客户类别" prop="type">
<el-select v-model="form.type" placeholder="请选择客户类别"> <dict-selector :type="DICT_TYPE.CUSTOMER_TYPE" form-type="select" multiple v-model="form.type"></dict-selector>
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_TYPE)" <!-- <el-select v-model="form.type" placeholder="请选择客户类别">-->
:key="dict.value" :label="dict.label" :value="dict.value" /> <!-- <el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_TYPE)"-->
</el-select> <!-- :key="dict.value" :label="dict.label" :value="dict.value" />-->
<!-- </el-select>-->
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- <el-col :span="12">-->
<!-- <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-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :span="12"> <el-col :span="12">
<el-form-item label="常用提货网点" prop="pickupPoint"> <el-form-item label="常用提货网点" prop="pickupPoint">
<el-select v-model="form.pickupPoint" placeholder="请输入常用提货网点"> <el-select v-model="form.pickupPoint" placeholder="请输入常用提货网点">
...@@ -55,6 +48,14 @@ ...@@ -55,6 +48,14 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<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-select>
</el-form-item>
</el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="公司名称" prop="company"> <el-form-item label="公司名称" prop="company">
...@@ -129,16 +130,30 @@ ...@@ -129,16 +130,30 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="推介人" prop="promoter"> <el-form-item label="推介人" prop="promoter">
<el-input v-model="form.promoter" placeholder="请输入推介人" /> <el-select v-model="form.promoter" placeholder="请输入推介人" filterable>
<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>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="创建人" prop="founder"> <el-form-item label="创建人" prop="founder">
<el-input v-model="form.founder" placeholder="请输入创建人" /> <el-select v-model="form.founder" disabled>
<el-option
v-for="item in serviceUserList"
:key="item.id"
:label="item.nickname"
:value="item.id">
</el-option>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="创建时间" prop="founder"> <el-form-item label="创建时间" prop="createTime">
<el-date-picker <el-date-picker
v-model="form.createTime" v-model="form.createTime"
type="datetime" type="datetime"
...@@ -157,30 +172,32 @@ ...@@ -157,30 +172,32 @@
<el-switch v-model="form.arrivalConfirm" :active-value="0" :inactive-value="1" /> <el-switch v-model="form.arrivalConfirm" :active-value="0" :inactive-value="1" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="13">
<el-form-item label="重货标准" prop="weightUnit"> <el-form-item label="重货标准" prop="weightUnit">
<el-input v-model="form.weightUnit" placeholder="请输入重货标准"> <el-switch v-model="showZhong"/>
<el-input v-model="form.weightUnit" placeholder="请输入重货标准" v-show="showZhong">
<template slot="append">kg/cbm</template> <template slot="append">kg/cbm</template>
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24" v-show="showZhong">
<el-form-item label="指定线路" prop="line"> <el-form-item label="指定线路" prop="line">
<el-switch v-model="showZhong"></el-switch> <el-switch v-model="showZhong1"></el-switch>
<customer-line-table v-show="showZhong" :warehouse-list="warehouseList" :import-city-list="importCityList" v-model="zhongLines" :zhong-pao-type="0"></customer-line-table> <customer-line-table v-show="showZhong1" :warehouse-list="warehouseList" :import-city-list="importCityList" v-model="zhongLines" :zhong-pao-type="0"></customer-line-table>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="13">
<el-form-item label="泡货标准" prop="weightUnit"> <el-form-item label="泡货标准" prop="weightUnit">
<el-input v-model="form.lightUnit" placeholder="请输入泡货标准"> <el-switch v-model="showPao"/>
<el-input v-model="form.lightUnit" placeholder="请输入泡货标准" v-show="showPao">
<template slot="append">kg/cbm</template> <template slot="append">kg/cbm</template>
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24" v-show="showPao">
<el-form-item label="指定线路" prop="line"> <el-form-item label="指定线路" prop="line">
<el-switch v-model="showPao"></el-switch> <el-switch v-model="showPao1"></el-switch>
<customer-line-table v-show="showPao" :warehouse-list="warehouseList" :import-city-list="importCityList" v-model="paoLines" :zhong-pao-type="1"></customer-line-table> <customer-line-table v-show="showPao1" :warehouse-list="warehouseList" :import-city-list="importCityList" v-model="paoLines" :zhong-pao-type="1"></customer-line-table>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
...@@ -365,6 +382,8 @@ import { getProductList } from '@/api/ecw/product' ...@@ -365,6 +382,8 @@ import { getProductList } from '@/api/ecw/product'
import {getTradeCityList} from "@/api/ecw/region" import {getTradeCityList} from "@/api/ecw/region"
import {getWarehouseList} from "@/api/ecw/warehouse" import {getWarehouseList} from "@/api/ecw/warehouse"
import CustomerLineTable from '@/components/CustomerLineTable' import CustomerLineTable from '@/components/CustomerLineTable'
import {getCustomerSelect} from "@/api/ecw/customer"
import {listServiceUser} from "@/api/system/user"
export default { export default {
name: "edit", name: "edit",
...@@ -395,6 +414,12 @@ export default { ...@@ -395,6 +414,12 @@ export default {
getWarehouseList().then(r => { getWarehouseList().then(r => {
this.warehouseList = r.data this.warehouseList = r.data
}) })
getCustomerSelect().then(r => {
this.customerSelect = r.data
})
listServiceUser().then(r => {
this.serviceUserList = r.data
})
}, },
data(){ data(){
return { return {
...@@ -420,9 +445,13 @@ export default { ...@@ -420,9 +445,13 @@ export default {
productTypeList: [], productTypeList: [],
productList: [], productList: [],
showZhong: false, showZhong: false,
showZhong1: false,
showPao: false, showPao: false,
showPao1: false,
warehouseList: [], // 仓库列表 warehouseList: [], // 仓库列表
importCityList: [], // 进口地址 importCityList: [], // 进口地址
customerSelect: [],
serviceUserList: [],
zhongLines: [], // 重货线路 zhongLines: [], // 重货线路
paoLines: [], // 泡货线路 paoLines: [], // 泡货线路
...@@ -463,7 +492,7 @@ export default { ...@@ -463,7 +492,7 @@ export default {
id: undefined, id: undefined,
number: undefined, number: undefined,
name: undefined, name: undefined,
level: undefined, level: 1,
country: undefined, country: undefined,
type: undefined, type: undefined,
agentId: undefined, agentId: undefined,
...@@ -483,7 +512,7 @@ export default { ...@@ -483,7 +512,7 @@ export default {
lightUnit: undefined, lightUnit: undefined,
promoter: undefined, promoter: undefined,
status: undefined, status: undefined,
founder: undefined, founder: this.$store.getters.userId,
department: undefined, department: undefined,
invoiceTitle: undefined, invoiceTitle: undefined,
licenseNumber: undefined, licenseNumber: undefined,
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<el-button type="primary" size="small">添加优惠</el-button> <el-button type="primary" size="small">添加优惠</el-button>
<el-button type="primary" size="small" @click="$router.push('/customer/edit/' + customerId)">编辑</el-button> <el-button type="primary" size="small" @click="$router.push('/customer/edit/' + customerId)">编辑</el-button>
<el-button type="primary" size="small">报价</el-button> <el-button type="primary" size="small">报价</el-button>
<el-button type="primary" size="small">跟进</el-button> <el-button type="primary" size="small" @click="customerFollow.dialogVisible = true">跟进</el-button>
<el-button type="primary" size="small">客诉</el-button> <el-button type="primary" size="small">客诉</el-button>
<el-button type="danger" size="small">删除</el-button> <el-button type="danger" size="small">删除</el-button>
</div> </div>
...@@ -94,7 +94,7 @@ ...@@ -94,7 +94,7 @@
<el-tabs style="margin-top: 15px" type="border-card"> <el-tabs style="margin-top: 15px" type="border-card">
<el-tab-pane label="订单"> <el-tab-pane label="订单">
订单
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="报价"> <el-tab-pane label="报价">
<el-table <el-table
...@@ -145,7 +145,7 @@ ...@@ -145,7 +145,7 @@
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="跟进"> <el-tab-pane label="跟进">
<el-table <el-table
:data="[]" :data="customerFollowList"
style="width: 100%" style="width: 100%"
> >
<el-table-column <el-table-column
...@@ -154,37 +154,37 @@ ...@@ -154,37 +154,37 @@
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="" prop="followType"
label="跟进类型" label="跟进类型"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="" prop="contactName"
label="联系人" label="联系人"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="" prop="followMethod"
label="跟进方式" label="跟进方式"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="" prop="followTime"
label="跟进时间" label="跟进时间"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="" prop="feedback"
label="客户反馈" label="客户反馈"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="" prop="result"
label="处理结果" label="处理结果"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="" prop="followUserId"
label="跟进业务" label="跟进业务"
> >
</el-table-column> </el-table-column>
...@@ -285,6 +285,70 @@ ...@@ -285,6 +285,70 @@
</el-col> </el-col>
</el-row> </el-row>
<el-dialog
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 in customerContactsList"
:key="item.name"
: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> </div>
</template> </template>
...@@ -293,12 +357,19 @@ import { getCustomer } from '@/api/ecw/customer' ...@@ -293,12 +357,19 @@ import { getCustomer } from '@/api/ecw/customer'
import { DICT_TYPE, getDictDataLabel } from '@/utils/dict' import { DICT_TYPE, getDictDataLabel } from '@/utils/dict'
import { getProductTypeList } from '@/api/ecw/productType' import { getProductTypeList } from '@/api/ecw/productType'
import { getNodeList } from '@/api/ecw/node' import { getNodeList } from '@/api/ecw/node'
import DictSelector from "@/components/DictSelector"
import {getCustomerContactsList} from "@/api/ecw/customerContacts"
import {listServiceUser} from "@/api/system/user"
import {createCustomerFollow, getCustomerFollowPage} from "@/api/ecw/customerFollow"
export default { export default {
name: 'query', name: 'query',
props: { props: {
customerId: String customerId: String
}, },
components: {
DictSelector
},
created() { created() {
getNodeList().then(r => { getNodeList().then(r => {
this.nodeList = r.data this.nodeList = r.data
...@@ -309,6 +380,16 @@ export default { ...@@ -309,6 +380,16 @@ export default {
getProductTypeList().then(r => { getProductTypeList().then(r => {
this.productTypeList = r.data this.productTypeList = r.data
}) })
this.resetCustomerFollowForm()
getCustomerContactsList().then(r => {
// todo 接口不对,分页了
this.customerContactsList = r.data.list
})
listServiceUser().then(r => {
this.serviceUserList = r.data
})
this.getCustomerFollowList()
}, },
data() { data() {
return { return {
...@@ -316,6 +397,9 @@ export default { ...@@ -316,6 +397,9 @@ export default {
getDictDataLabel, getDictDataLabel,
nodeList: [], nodeList: [],
productTypeList: [], productTypeList: [],
customerContactsList: [],
serviceUserList: [],
customerFollowList: [],
customer: { customer: {
id: undefined, id: undefined,
number: undefined, number: undefined,
...@@ -353,11 +437,47 @@ export default { ...@@ -353,11 +437,47 @@ export default {
arrivalConfirm: undefined, arrivalConfirm: undefined,
weightUnit: undefined, weightUnit: undefined,
createTime: undefined createTime: undefined
} },
customerFollow: {
dialogVisible: true,
form: {}
},
} }
}, },
methods: { 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
})
}
}, },
computed: { computed: {
productType(){ productType(){
......
...@@ -32,9 +32,15 @@ export default { ...@@ -32,9 +32,15 @@ export default {
selectVal:'' selectVal:''
} }
}, },
mounted() {
this.selectVal = this.value;
},
watch:{ watch:{
selectVal(val){ selectVal(val){
this.$emit('input',val) this.$emit('input',val)
},
value(val){
this.selectVal = val;
} }
} }
} }
......
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