Browse Source

完善客户管理

master
yunuo970428 10 months ago
parent
commit
f0521623bf
  1. 27
      src/api/customerManagement/customerArchives.js
  2. 12
      src/api/customerManagement/customerFollowUp.js
  3. 2
      src/router/index.js
  4. 261
      src/views/customerManagement/customerArchives/customerArchives.vue
  5. 14
      src/views/customerManagement/customerFollowUp/customerFollowUp.vue
  6. 31
      src/views/customerManagement/customerFollowUp/customerFollowUpAdd.vue
  7. 29
      src/views/customerManagement/customerInformation/customerInformation.vue
  8. 12
      src/views/customerManagement/customerInformation/customerInformationAdd.vue
  9. 17
      src/views/customerManagement/customerInformation/customerInformationInfo.vue

27
src/api/customerManagement/customerArchives.js

@ -1,27 +0,0 @@
import request from '@/utils/request'
export default {
// 查询分页列表
listPage: function(params) {
return request({
url: '/oms/v1/crmcustomerfile/listPage',
method: 'post',
data: params,
headers: { 'Content-Type': 'application/json' }
})
},
fetchBySid: function(data) {
return request({
url: '/oms/v1/crmcustomerfile/fetchFileListBySid/' + data,
method: 'get'
})
},
save: function(data) {
return request({
url: '/oms/v1/crmfile/save',
method: 'post',
data: data,
headers: { 'Content-Type': 'application/json' }
})
}
}

12
src/api/customerManagement/customerFollowUp.js

@ -16,6 +16,16 @@ export default {
method: 'get' method: 'get'
}) })
}, },
getPcAppendix: function(data) {
return request({
url: '/oms/v1/crmfile/getPcAppendix',
method: 'post',
data: data,
headers: {
'Content-Type': 'application/json'
}
})
},
save: function(data) { save: function(data) {
return request({ return request({
url: '/oms/v1/crmvisit/save', url: '/oms/v1/crmvisit/save',
@ -26,7 +36,7 @@ export default {
}, },
update: function(data) { update: function(data) {
return request({ return request({
url: '/oms/v1/crmvisit/update', url: '/oms/v1/crmvisit/update/' + data.sid,
method: 'post', method: 'post',
data: data, data: data,
headers: { 'Content-Type': 'application/json' } headers: { 'Content-Type': 'application/json' }

2
src/router/index.js

@ -52,7 +52,7 @@ export const constantRoutes = [
title: '客户管理' title: '客户管理'
}, },
children: [{ children: [{
path: '/customerInformation/customerInformation', path: '/customerManagement/customerInformation',
component: () => import('@/views/customerManagement/customerInformation/customerInformation'), component: () => import('@/views/customerManagement/customerInformation/customerInformation'),
name: 'CustomerInformation', name: 'CustomerInformation',
meta: { meta: {

261
src/views/customerManagement/customerArchives/customerArchives.vue

@ -1,261 +0,0 @@
<template>
<div class="app-container">
<!--列表页面-->
<div v-show="viewState == 1">
<button-bar view-title="客户档案资料" ref="btnbar" :btndisabled="btndisabled" @btnhandle="btnHandle"/>
<!--Start查询列表部分-->
<div class="main-content">
<div class="searchcon">
<el-button size="small" class="searchbtn" @click="clicksearchShow">{{ searchxianshitit }}</el-button>
<div v-show="isSearchShow" class="search">
<el-form ref="listQueryform" :inline="true" :model="listQuery" label-width="100px" class="tab-header">
<el-form-item label="文件类型">
<el-input v-model="listQuery.params.attachType" placeholder="" clearable/>
</el-form-item>
<el-form-item label="文件名称">
<el-input v-model="listQuery.params.fileName" placeholder="" clearable/>
</el-form-item>
</el-form>
<div class="btn" style="text-align: center;">
<el-button type="primary" icon="el-icon-search" size="small" @click="handleFilter">查询</el-button>
<el-button type="primary" icon="el-icon-refresh" size="small" @click="handleReset">重置</el-button>
</div>
</div>
</div>
<!--End查询列表部分-->
<div class="listtop">
<div class="tit">{{ customerName }}客户档案资料</div>
<pageye v-show="list.length > 0" :total="listQuery.total" :page.sync="listQuery.current" :limit.sync="listQuery.size" class="pagination" @pagination="getList"/>
</div>
<!--Start 主页面主要部分 -->
<div class="">
<el-table :key="tableKey" v-loading="listLoading" :data="list" border style="width: 100%;">
<el-table-column label="序号" type="index" width="80" :index="indexMethod" align="center"/>
<el-table-column prop="attachType" label="文件类型" align="center" />
<el-table-column prop="fileName" label="文件名称" align="center" />
<el-table-column label="图片" align="center">
<template slot-scope="scope">
<el-button type="primary" size="small" @click="handleAdd(scope.row)">上传</el-button>
<el-button type="primary" size="small" @click="handleLook(scope.row)">查看</el-button>
</template>
</el-table-column>
<el-table-column prop="name" label="最新上传人" align="center" />
<el-table-column prop="createTime" label="最新上传时间" align="center"/>
</el-table>
</div>
<!--End 主页面主要部分-->
<div class="pages">
<div class="tit"/>
<!-- 翻页 -->
<pagination v-show="list.length > 0" :total="listQuery.total" :page.sync="listQuery.current" :limit.sync="listQuery.size" class="pagination" @pagination="getList"/>
</div>
<!--End查询列表部分-->
</div>
</div>
<el-dialog :visible="dialogVisible" width="50%">
<el-form ref="" :model="formobj" class="formaddcopy02">
<el-row style="border-top: 1px solid #e0e3eb">
<el-col :span="12">
<div class="span-sty">文件类型</div>
<el-form-item><el-input class="addinputInfo addinputw" v-model="formobj.attachType" clearable placeholder="" /></el-form-item>
</el-col>
<el-col :span="12">
<div class="span-sty">文件名称</div>
<el-form-item><el-input class="addinputInfo addinputw" v-model="formobj.fileName" clearable placeholder="" /></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">附件</div>
<el-form-item>
<uploadImg ref="uploadImg" class="addinputInfo" v-model="formobj.filePath" :limit="50" bucket="map" :upload-data="{ type: '0001' }"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" size="small" @click="handleSave()">保存</el-button>
<el-button type="info" size="small" @click="dialogVisible = false">关闭</el-button>
</div>
</el-dialog>
<!-- 查看附件 -->
<el-dialog :visible.sync="dialogImageVisible">
<el-image style="width: 150px; height: 150px" v-for="(item, index) in image_list" :key="index" :src="item" :preview-src-list="image_list"/>
</el-dialog>
</div>
</template>
<script>
import Pagination from '@/components/pagination'
import pageye from '@/components/pagination/pageye'
import ButtonBar from '@/components/ButtonBar'
import req from '@/api/customerManagement/customerArchives'
import uploadImg from '@/components/uploadFile/uploadImg'
export default {
name: 'CustomerArchives',
components: {
Pagination,
pageye,
ButtonBar,
uploadImg
},
data() {
return {
btndisabled: false,
dialogVisible: false,
formobj: {
fileName: '',
attachType: '',
filePath: [],
linkSid: '',
name: ''
},
dialogImageVisible: false,
image_list: [],
customerName: '',
btnList: [
{
type: 'info',
size: 'small',
icon: 'cross',
btnKey: 'doClose',
btnLabel: '关闭'
}
],
isSearchShow: false,
searchxianshitit: '显示查询条件',
viewState: 1, // 1 2 3 4
tableKey: 0,
list: [],
sids: [], // SIDs
FormLoading: false,
listLoading: false,
//
listQuery: {
current: 1,
size: 5,
total: 0,
params: {
fileName: '',
attachType: '',
customerSid: ''
}
}
}
},
mounted() {
this.$refs['btnbar'].setButtonList(this.btnList)
},
methods: {
//
clicksearchShow() {
this.isSearchShow = !this.isSearchShow
if (this.isSearchShow) {
this.searchxianshitit = '隐藏查询条件'
} else {
this.searchxianshitit = '显示查询条件'
}
},
btnHandle(btnKey) {
console.log('XXXXXXXXXXXXXXX ' + btnKey)
switch (btnKey) {
case 'doClose':
this.doClose()
break
default:
break
}
},
//
indexMethod(index) {
var pagestart = (this.listQuery.current - 1) * this.listQuery.size
var pageindex = index + 1 + pagestart
return pageindex
},
showData(sid, name) {
this.listQuery.params.customerSid = sid
this.customerName = name
this.getList()
},
//
getList() {
this.listLoading = true
req.listPage(this.listQuery).then(response => {
this.listLoading = false
if (response.success) {
this.list = response.data.records
this.listQuery.total = response.data.total
} else {
this.list = []
this.listQuery.total = 0
}
})
},
//
handleFilter() {
this.listQuery.current = 1
this.getList()
},
//
handleReset() {
this.listQuery.current = 1
this.listQuery.size = 5
this.listQuery.total = 0
this.listQuery.params.attachType = ''
this.listQuery.params.fileName = ''
this.getList()
},
handleAdd(row) {
this.dialogVisible = true
this.formobj.fileName = row.fileName
this.formobj.attachType = row.attachType
this.formobj.linkSid = row.sid
this.formobj.name = window.sessionStorage.getItem('userName')
req.fetchBySid(row.sid).then((res) => {
if (res.success) {
if (res.data.crmFileDetailsVoList.length > 0) {
res.data.crmFileDetailsVoList.forEach((e) => {
this.formobj.filePath.push(e)
})
}
}
})
},
handleSave() {
req.save(this.formobj).then((res) => {
if (res.success) {
this.dialogVisible = false
this.formobj = {
fileName: '',
attachType: '',
filePath: [],
linkSid: '',
name: ''
}
this.$message({ showClose: true, type: 'success', message: '保存成功' })
this.getList()
}
})
},
handleLook(row) {
req.fetchBySid(row.sid).then((res) => {
if (res.success) {
this.dialogImageVisible = true
this.image_list = []
if (res.data.crmFileDetailsVoList.length > 0) {
res.data.crmFileDetailsVoList.forEach((e) => {
this.image_list.push(e.url)
})
}
}
})
},
doClose() {
this.$emit('doback')
}
}
}
</script>
<style scoped>
</style>

14
src/views/customerManagement/customerFollowUp/customerFollowUp.vue

@ -215,6 +215,7 @@ export default {
// //
getList() { getList() {
this.listLoading = true this.listLoading = true
this.listQuery.params.staffSid = window.sessionStorage.getItem('staffSid')
this.listQuery.params.customerSid = this.kehu_uesrsid this.listQuery.params.customerSid = this.kehu_uesrsid
req.listPage(this.listQuery).then((response) => { req.listPage(this.listQuery).then((response) => {
this.listLoading = false this.listLoading = false
@ -274,13 +275,17 @@ export default {
}, },
// //
handleCheck(row) { handleCheck(row) {
this.dialogImageVisible = true req.getPcAppendix({ attachType: '0004', linkSid: row.sid }).then((res) => {
if (res.success) {
this.image_list = [] this.image_list = []
if (row.files.length > 0) { if (res.data.length > 0) {
row.files.forEach((e) => { this.dialogImageVisible = true
this.image_list.push(e.url) res.data.forEach((e) => {
this.image_list.push(e.filePath)
}) })
} }
}
})
}, },
// ID // ID
doDel() { doDel() {
@ -314,6 +319,7 @@ export default {
}, },
doClose() { doClose() {
this.$emit('reloadlist') this.$emit('reloadlist')
this.$emit('doback')
} }
} }
} }

31
src/views/customerManagement/customerFollowUp/customerFollowUpAdd.vue

@ -66,7 +66,7 @@
<el-col :span="24"> <el-col :span="24">
<div class="span-sty">见证材料</div> <div class="span-sty">见证材料</div>
<el-form-item> <el-form-item>
<uploadImg ref="uploadImg" class="addinputInfo" v-model="temp.list" :limit="50" bucket="map" :upload-data="{ type: '0001' }"/> <uploadImg ref="uploadImg" class="addinputInfo" v-model="list1" :limit="50" bucket="map" :upload-data="{ type: '0001' }"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -97,6 +97,7 @@ export default {
FormLoading: false, FormLoading: false,
followupform: [], followupform: [],
followupstatus: [], followupstatus: [],
list1: [],
temp: { temp: {
customerName: '', customerName: '',
customerSid: '', customerSid: '',
@ -123,10 +124,6 @@ export default {
} }
} }
}, },
created() {
//
this.init()
},
methods: { methods: {
init() { init() {
this.getShuJuZiDian() this.getShuJuZiDian()
@ -137,8 +134,11 @@ export default {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs['dataForm'].clearValidate() this.$refs['dataForm'].clearValidate()
}) })
this.init()
this.temp.customerName = name this.temp.customerName = name
this.temp.customerSid = sid this.temp.customerSid = sid
this.temp.staffSid = window.sessionStorage.getItem('staffSid')
this.temp.staffName = window.sessionStorage.getItem('staffName')
this.temp.orgSid = window.sessionStorage.getItem('orgSid') this.temp.orgSid = window.sessionStorage.getItem('orgSid')
}, },
// //
@ -147,9 +147,15 @@ export default {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs['dataForm'].clearValidate() this.$refs['dataForm'].clearValidate()
}) })
this.init()
req.fetchBySid(sid).then((response) => { req.fetchBySid(sid).then((response) => {
if (response.success) { if (response.success) {
this.temp = response.data this.temp = response.data
req.getPcAppendix({ attachType: '0004', linkSid: sid }).then((res) => {
if (res.success) {
this.list1 = res.data
}
})
} }
}) })
}, },
@ -186,6 +192,21 @@ export default {
} else if (this.temp.isOnRemind === '否') { } else if (this.temp.isOnRemind === '否') {
this.temp.isOnRemindkey = '0' this.temp.isOnRemindkey = '0'
} }
const aa = []
console.log(99, this.list1)
for (var i = 0; i < this.list1.length; i++) {
var namese = this.list1[i].name
var nameArr = namese.split('.')
aa.push({
// attachType: '0004',
fileName: this.list1[i].name,
filePath: this.list1[i].filePath,
fileSize: this.list1[i].size,
createBySid: window.sessionStorage.getItem('userSid'),
fileType: nameArr[nameArr.length - 1]
})
}
this.temp.list = aa
this.$refs['dataForm'].validate((valid) => { this.$refs['dataForm'].validate((valid) => {
if (valid) { if (valid) {
this.FormLoading = true this.FormLoading = true

29
src/views/customerManagement/customerInformation/customerInformation.vue

@ -72,9 +72,7 @@
<!-- 详情 --> <!-- 详情 -->
<customerInformationInfo v-show="viewState ==4" ref="divInfo" @doback="resetState"/> <customerInformationInfo v-show="viewState ==4" ref="divInfo" @doback="resetState"/>
<!-- 跟进记录 --> <!-- 跟进记录 -->
<customerFollowUp v-show="viewState ==5" ref="divGJ" @reloadlist="getList"/> <customerFollowUp v-show="viewState ==5" ref="divGJ" @reloadlist="getList" @doback="resetState"/>
<!-- 客户档案 -->
<customerArchives v-show="viewState ==6" ref="divDA" @doback="resetState"/>
<!--登记类型弹窗--> <!--登记类型弹窗-->
<el-dialog title="客户登记-类型" :visible.sync="dialogVisible" width="28%" top="13%"> <el-dialog title="客户登记-类型" :visible.sync="dialogVisible" width="28%" top="13%">
<el-form :model="customerTypeList"> <el-form :model="customerTypeList">
@ -107,7 +105,6 @@ import ButtonBar from '@/components/ButtonBar'
import customerInformationAdd from './customerInformationAdd' import customerInformationAdd from './customerInformationAdd'
import customerInformationInfo from './customerInformationInfo' import customerInformationInfo from './customerInformationInfo'
import customerFollowUp from '../customerFollowUp/customerFollowUp' import customerFollowUp from '../customerFollowUp/customerFollowUp'
import customerArchives from '../customerArchives/customerArchives'
export default { export default {
name: 'CustomerInformation', name: 'CustomerInformation',
@ -117,8 +114,7 @@ export default {
ButtonBar, ButtonBar,
customerInformationAdd, customerInformationAdd,
customerInformationInfo, customerInformationInfo,
customerFollowUp, customerFollowUp
customerArchives
}, },
data() { data() {
return { return {
@ -146,13 +142,6 @@ export default {
btnKey: 'toGenjin', btnKey: 'toGenjin',
btnLabel: '客户跟进' btnLabel: '客户跟进'
}, },
{
type: 'success',
size: 'small',
icon: 'user',
btnKey: 'toZiliao',
btnLabel: '客户档案'
},
{ {
type: 'danger', type: 'danger',
size: 'small', size: 'small',
@ -273,9 +262,6 @@ export default {
case 'toGenjin': case 'toGenjin':
this.toGenjin() this.toGenjin()
break break
case 'toZiliao':
this.toZiliao()
break
case 'doDel': case 'doDel':
this.doDel() this.doDel()
break break
@ -404,7 +390,7 @@ export default {
toGenjin() { toGenjin() {
if (this.sids.length === 1) { if (this.sids.length === 1) {
this.viewState = 5 this.viewState = 5
this.$refs['Newpage'].newpage(this.sids[0], this.names[0]) this.$refs['divGJ'].showData(this.sids[0], this.names[0])
} else { } else {
this.$notify({ title: '提示', message: '请选择一条记录进行操作', type: 'error', duration: 2000 }) this.$notify({ title: '提示', message: '请选择一条记录进行操作', type: 'error', duration: 2000 })
} }
@ -414,15 +400,6 @@ export default {
this.viewState = 5 this.viewState = 5
this.$refs['divGJ'].showData(row.sid, row.name) this.$refs['divGJ'].showData(row.sid, row.name)
}, },
//
toZiliao() {
if (this.sids.length === 1) {
this.viewState = 6
this.$refs['divDA'].showData(this.sids[0], this.names[0])
} else {
this.$notify({ title: '提示', message: '请选择一条记录进行操作', type: 'error', duration: 2000 })
}
},
// //
toInfo(row) { toInfo(row) {
this.viewState = 4 this.viewState = 4

12
src/views/customerManagement/customerInformation/customerInformationAdd.vue

@ -93,6 +93,14 @@
<el-form-item><el-input class="addinputInfo addinputw" v-model="temp.remind_remark" maxlength="20" placeholder="请输入提醒备注" clearable /></el-form-item> <el-form-item><el-input class="addinputInfo addinputw" v-model="temp.remind_remark" maxlength="20" placeholder="请输入提醒备注" clearable /></el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">客户档案附件</div>
<el-form-item>
<uploadImg ref="uploadImg" class="addinputInfo" v-model="temp.customerFiles" :limit="50" bucket="map" :upload-data="{ type: '0001' }"/>
</el-form-item>
</el-col>
</el-row>
<!--更多信息--> <!--更多信息-->
<el-collapse v-model="activeNames"> <el-collapse v-model="activeNames">
<el-collapse-item title="更多信息" name="1"> <el-collapse-item title="更多信息" name="1">
@ -167,7 +175,7 @@
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="见证材料" name="2"> <el-collapse-item title="见证材料" name="2" v-show="temp.sid == ''">
<el-row style="border-top: 1px solid #e0e3eb"> <el-row style="border-top: 1px solid #e0e3eb">
<el-col :span="24"> <el-col :span="24">
<div class="span-sty">附件</div> <div class="span-sty">附件</div>
@ -244,6 +252,7 @@ export default {
contacts: '', // contacts: '', //
county: '', // county: '', //
createBySid: '', // sid createBySid: '', // sid
customerFiles: [], //
crmVisitAppendixDtoList: [], // crmVisitAppendixDtoList: [], //
customerClass: '', // ///// customerClass: '', // /////
customerClassKey: '', // Key customerClassKey: '', // Key
@ -453,6 +462,7 @@ export default {
contacts: '', // contacts: '', //
county: '', // county: '', //
createBySid: '', // sid createBySid: '', // sid
customerFiles: [], //
crmVisitAppendixDtoList: [], crmVisitAppendixDtoList: [],
customerClass: '', // ///// customerClass: '', // /////
customerClassKey: '', // Key customerClassKey: '', // Key

17
src/views/customerManagement/customerInformation/customerInformationInfo.vue

@ -62,6 +62,12 @@
<el-form-item><span class="addinputInfo">{{ temp.remind_remark }}</span></el-form-item> <el-form-item><span class="addinputInfo">{{ temp.remind_remark }}</span></el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">附件</div>
<el-form-item><el-image class="addinputInfo" style="width: 100px;height: 100px" v-for="(item, index) in temp.customerFiles" :key="index" :src="item" :preview-src-list="temp.customerFiles" /> </el-form-item>
</el-col>
</el-row>
<!--更多信息--> <!--更多信息-->
<el-collapse v-model="activeNames"> <el-collapse v-model="activeNames">
<el-collapse-item title="更多信息" name="1"> <el-collapse-item title="更多信息" name="1">
@ -122,7 +128,7 @@
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="见证材料" name="2"> <el-collapse-item title="见证材料" name="2" v-show="temp.sid == ''">
<el-row style="border-top: 1px solid #e0e3eb"> <el-row style="border-top: 1px solid #e0e3eb">
<el-col :span="24"> <el-col :span="24">
<div class="span-sty">附件</div> <div class="span-sty">附件</div>
@ -161,6 +167,7 @@ export default {
contacts: '', // contacts: '', //
county: '', // county: '', //
createBySid: '', // sid createBySid: '', // sid
customerFiles: [], //
crmVisitAppendixDtoList: [], // crmVisitAppendixDtoList: [], //
customerClass: '', // ///// customerClass: '', // /////
customerClassKey: '', // Key customerClassKey: '', // Key
@ -213,6 +220,13 @@ export default {
req.fetchBySid(sid).then((response) => { req.fetchBySid(sid).then((response) => {
if (response.success) { if (response.success) {
this.temp = response.data this.temp = response.data
const aa = []
if (this.temp.customerFiles.length > 0) {
this.temp.customerFiles.forEach((e) => {
aa.push(e.url)
})
}
this.temp.customerFiles = aa
} }
}) })
}, },
@ -232,6 +246,7 @@ export default {
contacts: '', // contacts: '', //
county: '', // county: '', //
createBySid: '', // sid createBySid: '', // sid
customerFiles: [], //
crmVisitAppendixDtoList: [], crmVisitAppendixDtoList: [],
customerClass: '', // ///// customerClass: '', // /////
customerClassKey: '', // Key customerClassKey: '', // Key

Loading…
Cancel
Save